# Empezar con microcontroladores ARM.



## jmnlab (May 3, 2011)

Hola, a ver si algún entendido en ARM sabe aconsejarme.

Soy un aficionado a la electrónica/microcontroladores que lleva tiempo mirando empezar con los ARM, he comprado ya alguna placas, leído algún libro y toqueteado algo. 

Los micro que he venido usando hasta ahora han sido sobretodo de 8 bits, y me gustaría empezar a utilizar otros más complejos (por hobby).

Tengo claro que quiero empezar con ARM, lo que no tengo claro es por cual de todas las opciones/placas/fabricantes empezar.

Considero las siguientes placas:

Lpcxpresso 
Stm32 
Sam7-H256 + su JTAG Sam-Ice para Atmel.

Libros sobre el tema que estoy mirando:

ARM system developer's Me parece muy bueno y está por internet, aunque supongo que ya es antiguo.
[ame="http://www.amazon.com/Definitive-Guide-ARM-Cortex-M3-Second/dp/185617963X/ref=sr_1_4?s=books&ie=UTF8&qid=1304434159&sr=1-4"]The definitive guide to ARM Cortex-M3[/ame].
ARM Microcontroller Interfacing.
[ame="http://www.amazon.com/C-Programming-Warwick-Smith/dp/0905705807/ref=sr_1_3?ie=UTF8&s=books&qid=1304434203&sr=1-3"]C programing[/ame]. (sólo para quién no sabe C).

Toolchain uno gratuito y sin restricciones.

Tras ver las opciones mi decisión que dudo si es correcta es empezar con el AT91SAM7 de Atmel, usando Yagarto.

La ventaja que veo frente a las otras opciones es que adquiriendo el JTAG y un toolchain como YAGARTO se tiene todo lo necesario para trabajar con el microcontrolador. 

Las placas como la LPCxpresso o la stm32 ya traen un conversor usb-jtag, lo que en un principio es más económicro pero creo que nos limitamos a usarlo con el software que nos dan, que tiene alguna restricción.

Los dos libros de la elektor son del 91SAM7S por lo que viene bien para empezar, ya que se puede encontrar ejemplos de como conectar y hacer las cosas, aunque no quita de tener que leer por internet.

Mi decisión es empezar con este micro partiendo de los libros de la elektor, no sé si es un error ya que es bastante más antiguo que los cortex-m3.

también he considerado los Cortex-M3 de Atmel, hay opciones interesantes para empezar:

http://www.msc-toolguide.com/atmel/tool-family/evaluation-kits/atmel-at91sam3n-startup-paket.html

http://www.msc-toolguide.com/atmel/tool-family/evaluation-kits/atmel-at91sam3s-startup-paket.html

Pero me da la sensación que Atmel ha perdido el tren de los ARM Cortex-M3, de la mayoría de los micros aún no tienen stock. Cosa que necesito ya que me gustaría integrar los micros individuales en pcbs que haga, según vaya aprendiendo.

Resumiendo, empezar con un AT91SAM7S teniendo opciones como los cortex-m3?

Si alguien conoce bien este micro y me peude enlazar datasheets/.pdfs que conozca que se deban leer (fabricante, familia, etc..) me vendría bien.

Gracias.

Saludos.


----------



## ciri (Jun 24, 2011)

LPC1769

Es una linda placa que por u$s30 se puede llegar a conseguir y tiene muchas aplicaciones... comenzando con ethernet...


----------



## cristian_elect (Jun 24, 2011)

Oye los ARM es más avanzado no es como los pics que ya tienen todo lo da el compilador que solo se configuras en cuantas líneas ya definidas ni si quiera vez el pdf del micro y ya lo programas solo con el esquema circuito, los ATMEL son un poco más complejo.
En los ARM tienes que entender el hardware el funcionamiento del  núcleo ARM y su registros, interrupciones, memoria si tiene DMA y las librerías son más complejas y entender un poco de su ASM para que sepas como configurar en su compilador.

Casi me lei todo el libro "*The Definitive Guide to the ARM Cortex-M3"  *hay menciona las diferencia con el ARM 7DMI que tambien lo conoco y las mejoras del ASM THUMB 2.


----------



## maverick_007 (Jul 17, 2011)

Hola a todos ami tambien me interesa comenzar a trabajar con los micros de 32 bit y me estoy inclinando por la familia stm32.

aqui les dejo un link bastante interesante http://www.mipixel.com/empezar-stm32

PD: los stm 32 tiene integrado de fabrica un bootloader serial y el programa con el que funciona el bootloader es gratuito y los compiladores de c tambien.

saludos.


----------



## cristian_elect (Jul 17, 2011)

Hasta ahora la marca de ARM CORTEX M3 que mas facilidad me dio para programarlos fue Luminarymicro de TI por sus librerias y esquemas que dan. Y los modelos mas pequeños son muy faciles de configurar solo con unas cuantas lineas  en ASM o C  ya funciona un led parpadiate de ejemplo.


----------



## maverick_007 (Jul 18, 2011)

bueno yo me abia decidido a ocupar la familia stm32 porque ofrecen muestras gratis ( las pedi la semana pasada asique todavia estoy en espera ), investigue como programarlos y resulta que como ya habia mencionado tienen un bootloader incorporado y el soft de grabacion es gratuito y el entorno de programacion tambien , es el coocox ide.

saludos.


----------



## speleo (Ene 5, 2012)

Buenos días,
Alguien ha usado esta placa para programar el LPC11C14 con Coocox, necesito ayuda....

Saludos y Felices fietas.
Jordi


----------



## ilcapo (Abr 18, 2012)

hola!  para quemar los ARM se necesita una placa al estilo de los PICs ?? supongo que si , pero el tema es que no he hallado ningun vendedor de estos quemadores para ARM por internet, solo encontré placas de prueba con cositas adicionales por ejemplo memorias, puertos de salida/entrada etc, Y el ARM ya viene soldado a estas plaquetas de prueba entonces no se lo puede colocar en otro lado, como se hace con los pics

y otra duda que tengo (porque la bibliografia esta toda en ingles y me cuesta un poco entenderla) es si los ARM son internamente como los Pics, es decir,, ya traen internamente su memoria, puertos etc  ó si los ARM son como los procesadores (ej: el clasico Z80 ) que no traen nada y hay que anexarles los puertos memorias,,etc 


saludos estimados foristas!


----------



## Meta (Abr 18, 2012)

ARM es muy potente, puedes instalar hasta Windows 8.


----------



## cosmefulanito04 (Abr 18, 2012)

Yo en su momento empecé con la familia LPC de NXP (ex phillips). Yo te recomiendo usar un LPC2103 o algo un poco más avanzado (se manejan igual) como un LPC2132 (sin usb por hard) o 48 (con usb por hard).

De esos tres, yo había comprado esta placa (LPC2132):

http://www.ebay.com/itm/ZERO-LPC213...ultDomain_2&hash=item4aacacfbf2#ht_1441wt_712

Se alimenta con 5v vía usb (tiene su propio regulador de 3,3v), tenés todas los puertos a través de los pines y para programarlo solo necesitas usar un max232 conectado a una de las patas que tiene puerto serie.

Otra alternativa para no trabajar con el puerto usb como alimentación, es esta placa (LPC2103):

http://www.ebay.com/itm/LPC2103-ARM...pment_Tools&hash=item56495a99e3#ht_3031wt_712

Ahora tenés la familia cortex que son más avanzadas y las placas valen lo mismo:

http://www.ebay.com/itm/ARM-Cortex-...ultDomain_0&hash=item3cc43ecbd7#ht_2671wt_944

La última placa es más completa, ya que al parecer viene con un max232 y está preparado para trabajar con usb .


----------



## ilcapo (Abr 18, 2012)

Como es entonces ?? perdon por la ignorancia XD! 

que diferencia hay entre hablar de ARM  y LPC2148 por ejemplo ...

y Cortex que seria ??


----------



## cosmefulanito04 (Abr 18, 2012)

ARM es la arquitectura, es como si habláramos de arquitectura x86 (arquitectura típica de PC). Esto implica que podés conseguir ARM de muchas marcas (nxp, atmel, ST, etc), no como ocurre con PIC que la arquitectura es propia de esa marca.

Por otro lado cuando uno habla de por ej. un LPC2148, está hablando de un uC de la marca nxp (ex philips) que usa arquitectura ARM-7, osea que un uC ARM.

Por último Cortex implica el tipo de ARM, este puede ser ARM7, ARM9, ARM11, Cortex M3, etc. Por ej. un Cortex de la marca nxp puede ser un LPC1768.


----------



## ilcapo (Abr 19, 2012)

gracias por la expicacion cosme ! ahora entiendo bien 


habia preguntado antes ( a lo mejor me explique mal XD!) que o encuentro un grabador de ARM al estilo PICKIT2 para los PICs , para ARM asi como posteaste vos, solo hay placas de prueba donde el ARM ya viene soldado, digamos que para aprender a utilizar los ARm vienen muy bien pero despues si queres utilizar alguno en alguna aplicacion lo tendrias que desoldar !  preguntando un poco me dijieron que los ARM al tener muchas patitas y chiquitas solo les sirve a empresas con este tipo de soldadoras y para estudiantes solo podes coneguir las plaquetas de prueba, luego si queres dedicarte a ARM tendrias que buscar trabajo en una empresa que tenga la tecnologia para utilizar los ARM ,,, bueno si esto llega a ser cierto entonces no le veo mucha vida a los ARM , y que vivan los PICs !


----------



## cosmefulanito04 (Abr 19, 2012)

ilcapo dijo:


> gracias por la expicacion cosme ! ahora entiendo bien
> 
> 
> habia preguntado antes ( a lo mejor me explique mal XD!) que o encuentro un grabador de ARM al estilo PICKIT2 para los PICs , para ARM asi como posteaste vos, solo hay placas de prueba donde el ARM ya viene soldado, digamos que para aprender a utilizar los ARm vienen muy bien pero despues si queres utilizar alguno en alguna aplicacion lo tendrias que desoldar ! preguntando un poco me dijieron que los ARM al tener muchas patitas y chiquitas



Efectivamente los ARM vienen con tecnología SMD, encapsulado LQFP64 para arriba (los más complejos como los Cortex vienen con 144 patas ).



ilcapo dijo:


> solo les sirve a empresas con este tipo de soldadoras



Se suele usar estación de soldado o si tenés mucha cancha podés hacerlo con un soldador común y mucho flux.



ilcapo dijo:


> ...*bueno si esto llega a ser cierto entonces no le veo mucha vida a los ARM* , y que vivan los PICs !



De hecho toda la electrónica dentro de poco va a ser SMD, así que empezá acostumbrarte a la idea.

Acá tenés opciones para esos problemas:

- Plaquetita que te sirve para pasar de LQFP64 a pines: 

http://www.ebay.com/itm/5-pcs-LQFP-...ultDomain_0&hash=item518b8c77e9#ht_1404wt_754

- Adaptador, no requiere soldar nada, pero sale caro :

http://www.ebay.com/itm/IC51-0644-8...ultDomain_0&hash=item3a718fc7f6#ht_1944wt_939


----------



## ilcapo (Abr 20, 2012)

cosmefulanito04 dijo:


> Efectivamente los ARM vienen con tecnología SMD, encapsulado LQFP64 para arriba (los más complejos como los Cortex vienen con 144 patas ).
> 
> 
> 
> ...


----------



## Meta (Abr 20, 2012)

ARM hace cosas como estas, un PC mini con ARM a 30$ aproximadamamente con Linux incluido.







http://www.muycomputer.com/2012/04/20/350-000-pedidos-raspberry-pi-exitazo


----------



## ilcapo (Abr 23, 2012)

Meta dijo:


> ARM hace cosas como estas, un PC mini con ARM a 30$ aproximadamamente con Linux incluido.
> 
> 
> 
> ...



wow impresionante! bueno aca se entiende mejor la potencia que tienen comparada con los pics


----------



## Meta (Abr 23, 2012)

Si, lo peor de ARM, que no distribuye tanta información que los PIC, grgrgrgrgrgrgrggrgrgrgrgr. Los ARM de lan mil vueltas. Una lástima.


----------



## ilcapo (Abr 26, 2012)

si, poco informacion y todo en ingles, entonces al traducirlas si no tenes muy en claro el idioma, a veces la teoria se complica bastante por "pequeños malentendidos"  XD!

se podrá solicitar directamente por mail a los fabricantes informacion en español ?


----------



## Pablet (Abr 26, 2012)

Meta dijo:


> Si, lo peor de ARM, que no distribuye tanta información que los PIC, grgrgrgrgrgrgrggrgrgrgrgr. Los ARM de lan mil vueltas. Una lástima.



No estoy en absoluto de acuerdo con lo que dices, en primer lugar, no puedes comparar ARM con pic, ya que es como comparar naranjas con manzanas, ARM es una arquitectura mientras que PIC es una marca.
Dicho esto, comparemos arquitecturas, es decir ARM y MIPS32 (arquitectura de PIC32). Que MIPS32 no pueda correr windows 8 es simplemente porque microsoft no quieres ya que existen hasta procesadores MIPS64 de 64 bits, cosa que ARM los piensa sacar en 2013. 
Sin ir mas lejos, la play station 2 y la psp llevan procesadores MIPS32. Actualmente hay tablets (pocas) funcionando con procesadores MIPS. 
En resumen, no creo que haya una mejor que otra, sino que hay una mas difundida que otra.

Un saludo


----------



## Meta (Abr 26, 2012)

Entendido campeón. 

Lo que comparo los PIC con ARM es la información, no la arquitecturta. 

ARM es ARM y PIC es PIC. PIC para jugar por lo que piensan muchos, PLC para cosas industriales, ARM es muy profesional, se instala Windows y Linux.

*¿Correrá Ubuntu Linux en un micro de 8 bits? *


http://electronica-pic.blogspot.com.es/2012/03/correra-ubuntu-linux-en-un-micro-de-8.html






Saludo.


----------



## Pablet (Abr 27, 2012)

pero que pueda instalarse windows (solo windows 8 RT), no es por la capacidad del micro, sino porque microsoft quieren que así sea. Linux tambien corre en procesadores MIPS (aquí), android tambien corre en procesadores mips, simplemente ARM esta más expandido entre las tablet.

Un saludo

P.D. no pienses que es algo personal contra ti meta!! simplemente digo lo mismo que supongo pensaran los que trabajan con micros de 8 bits de atmel o freescale respecto a microchip, que hay más opciones y estaria bien conocerlas todas


----------



## Meta (Abr 27, 2012)

Normal, es bueno que haya competencia entre compañías, saber demás micros te abre las puertas. Eso si, o te expecializa en uno para ser maestro en algo aunque sea el 75% que mucho es, o intentarás aprender de todo un poco, AVR, FreeScale, ARM, PIC, Philips, y no manejarás ni el 4%.

En resumen, el que intenta ver todo un poco mucho de aprendiz y poco de maestro. Si quieres ser maestro en algo, te especializa en una cosa sola. Cada micro es un mundo.

Si usas el estandar C, es otra cosa.


----------



## cosmefulanito04 (Abr 27, 2012)

Esa es la magia de programar en C, te aisla un poco de todo y te permite meterte en cada familia/marca sin tantos inconvenientes. Estamos de acuerdo que para ciertas cosas especificas necesitas usar codigo ASM, pero hacer todo un proyecto todo en ASM hoy dia creo que es medio una locura (es solo mi opinión). Por ej. usar estas bestias ARM y programarlas en ASM no tiene sentido alguno.

Tampoco me parece buena la idea de saber usar solo bien una marca/modelo, si sabes programar, tenes que poder manejarte relativamente bien con todos los uC y no "limitarte" a una solución.


----------



## Meta (Abr 27, 2012)

Dije una marca, la realidad es el 75% de una marca, los demás para todas. Así son los expertos, con esta metodlogía y años de experiencia.

En cuanto a programar todo a ASM, está bien para los 8 bits. PIC32 vi ejemplos en ASM casi se me cae la cara. Todo el mundo que saben piensa que es una locura. si lo manejas con soltura, sigue siendo una locura por el tiempo que pierdes en él. Para cosas pequeñas está bien, ahorras memoria, controlas todo paso a paso lo que deseas, bla, bla, C es más portable, más cómodo y no se que más historias, hoy en día es el C para dispositivos, java para Internet y PC en general.

Están desarrollando BIOS del PC que sea en C, ya que lleva más de 25 años haciendose en ASM. Cada vez más cuesta su mantenimiento, que los desarrolladores hagan cursos de ASM para BIOS, etc, un coste caro hoy en día. Por eso se harán en C y pantallas muy chulas a lo Windows o Linux.

En cuanto a ARM para Windows 8, Microsoft lo quiere así.


----------



## cosmefulanito04 (Abr 27, 2012)

Meta dijo:


> Dije una marca, la realidad es el 75% de una marca, los demás para todas. Así son los expertos, con esta metodlogía y años de experiencia....



¿Por qué limitarme a una sola marca?

Si por ej. el día de mañana PIC quiebra o es comprado por (decir algooo...) ATMEL, se te cae el mundo encima.

Yo creo que esa es una ventaja muy importante de los ARM, si NXP se va a pique, sabes que todavía tenés Atmel, ST, Motorola, etc. El 8051... arquitectura vieja, todavía está vigente por este tipo de cosas, además de la confiabilidad demostrada.

En ese sentido, creo que a la larga, mientras menos dependencia tengas de un fabricante y más te adaptes a los cambios mejor cintura vas a tener para evitar inconvenientes a futuro.


----------



## Meta (Abr 27, 2012)

cosmefulanito04 dijo:


> ¿Por qué limitarme a una sola marca?



Dije el 75 % aprendes una marca. Ahora por aquñi digo el resto de otra menara. El 25 % restante, son otras marcas y familiar. Así serás un experto en una marca y si esta falla, con los que has aprendido del 25%, ya tienes para centrarte en los demás microcontroladores que has visto. Claro que hay que ver los demás micro, es el 25 % que me refiero para tener puertas abiertas. So intentas aprenderlos todos, casi imposible, no manejarás algo con soltura.

Siempre se nombran ARM, PIC, AVR, FreeScale, ¿sabes cuántos hay realmente?

*Microcontroladores*



ARM
Atmel
Cypress
Digi
Diodes
Ember
Energy Micro
Fairchildsemi
FreeScale
FTDIchip
Fujitsu
Hitachi
Holtek
IDT
Infineon
Intersil
JMicron
LSI
Maxim-IC
Micrel
Microchip
Microsemi
National
NEC
Nuvoton
Oki
On Semi
Parallax
Philips
Picaxe
Rabbit
Renesas
Rohm
Samsung
Semtech
Silabs
STMicroelectronics
TI
Toshiba
Winbond USA
Xmos


Me refiero a eso.



Saludo.


----------



## Pablet (Abr 28, 2012)

cosmefulanito04 dijo:


> ¿Por qué limitarme a una sola *marca*?
> Yo creo que esa es una ventaja muy importante de los ARM, si NXP se va a pique, sabes que todavía tenés Atmel, ST, Motorola, etc.



Volvemos a confundir marca y arquitectura. . . . si tu aprendes a programar un NXP, con los compiladores de NXP, con las librerías de NXP, y NXP se va a pique, tendrás el mismo problema que si programas PIC. Tendrás que aprender de nuevo a programar micros ARM de texas por ejemplo. ARM solo es el núcleo, cada marca pone sus periféricos y los registros de estos periféricos son únicos para cada marca.


----------



## Meta (Abr 28, 2012)

Es verdad, no leí bien.


----------



## cosmefulanito04 (Abr 28, 2012)

Pablet dijo:


> Volvemos a confundir marca y arquitectura. . . . si tu aprendes a programar un NXP, con los compiladores de NXP, con las librerías de NXP, y NXP se va a pique, tendrás el mismo problema que si programas PIC. Tendrás que aprender de nuevo a programar micros ARM de texas por ejemplo. ARM solo es el núcleo, cada marca pone sus periféricos y los registros de estos periféricos son únicos para cada marca.



Nunca programé un ARM que no fuera nxp, estoy de acuerdo que no puedo usar las mismas herramientas (tal vez en algunas cosas si), pero ¿tanto te cambia el código de una marca a la otra? dejando de lado los registros, que evidentemente no se van a llamar iguales, pero adaptarte no debería costarte demasiado.

Ojo, hablo a nivel soft, a nivel hard es otra cosa y como todo componentes vas a tener que ver cuales son sus limitaciones y ventajas.


----------



## Meta (Abr 28, 2012)

Menos mal que existe un lenguaje estandar como el C, varían cosas, pero se coge el hilo rápido.


----------



## Pablet (Abr 28, 2012)

efectivamente como dice meta tenemos la ayuda de que C es un standar y no cuesta demasiado, pero cuesta lo mismo que, por ejemplo, pasar de un msp430 de texas a un dspic de microchip, respecto a lo de porque limitarse a una sola marca, está claro que no son todo ventajas, pero las que hay son muy grandes, por ejemplo, C18 y C32 son muy muy parecidos, incluso los registros de los dspic, y los pic32 tienen mismo nombre, diferente tamaño eso si. 
Otra ventaja es que si yo tengo en un sistema un dspic30f..... y un dia necesito mas velocidad, saco el dspic30f..., le meto un pic24h... y el patillaje es el mismo, o incluso un pic32mx1, incluso podría hacerlo sin grandes cambios en el codigo. Como contras, pues lo que tu has dicho, si microchip se va a pique (cosa bastante complicada), tienes que volver a empezar pero bueno, fue bonito mientras duró.

Un saludo


----------



## ilcapo (Abr 28, 2012)

hola le pregunto a ustedes que conocen de C.... que diferencia hay en los programas para los pics de 8 bits y los de 32 bits,,, en assembler me doy cuenta rapido porque las instrucciones de 32 bits son "mas largas" que las de 8 bits ,, pero en C como se dan cuenta si el programa esta hecho para un pic de 8 o uno de 32 ? 

saludos!


----------



## Pablet (Abr 28, 2012)

puedes saberlo por el tamaño se los registros, es decir, a la hora de configurarlos, en 8 bits tendrías algo así ADCON1=0x25, y en 32 bits algo así ADCON1=0x23562145, por lo demás como bien dices sería todo igual.

Un saludo


----------



## Meta (Abr 29, 2012)

Trabando con tipos de memoria como int, ulong, etc, sabrás la cantidad de memoria que tiene PIC32 porque alcanzan hasta los 32. Trabajan 32 en paralelo. 

Se dice que PIC64 están hecho desde que salió PIC32. Lo que no quieren venderlo por ahora. Será que como no hay demanda casi ni PIC32 o la competencia tampoco le interesa...

Cada vez se cende más PIc32, sobre todo cuando sacaron los  de 28 y 40 pines a lo 16F886/7 y 18Fx550.


----------



## ilcapo (Jul 17, 2012)

info en español de ARM 7 no existe  (osea algun buen libro) ?


----------



## cosmefulanito04 (Jul 17, 2012)

Mirá yo de inglés se menos que Tevez, pero todo lo que es bibliografía técnica es bastante más sencillo de entender que otro tipo de cosas, de hecho te vas acostumbrando cuando lees las hojas de datos o las notas de aplicación.

Si querés te puedo pasar un apunte introductorio (nada más que eso, después si querés meterte más si o si tenés que buscar en libros) de como funciona la arquitectura y después si te interesa te puedo subir código de la familia nxp ARM7 en C.


----------



## ilcapo (Jul 17, 2012)

muy bueno el apunte gracias,  con respecto al programa en C  que compilador se usa ? se puede usar el CCS o es solo para pics ? si tenes un codigo simple como ser encender y apagar un led en ARM 7 seria genial ! saludos


----------



## cosmefulanito04 (Jul 17, 2012)

Me imagino que el CCS es solo para PIC.

Yo usó el keil, podés bajar una versión de evaluación que te limita compilar código mayor a 32kbytes (para empezar es un montón).

https://www.keil.com/demo/eval/arm.htm

El keil te permite configurar bien la inicialización del bicho, osea sin meterte mucho en el código podés configurar el PLL (etapa del uC que permite modificar la frecuencia del clock a partir de cualquier cristal que uses), esto es muy importante que lo hagas, sino no vas a saber en que frecuencia está trabajando tu clock.

Acá te dejo un código pensado para un LPC2003 (o similar) que simplemente enciende y apaga varios leds al mismo tiempo en base a un timer:


```
// Con un Xtal 14,7456 MHz => configuro el PLL para => CClk=fosc y Pclk = CClk/4 = 3,6864 MHz  TPclk= 272 nSeg (aprox.)
// Pclk es el clock de los puertos, CClk es el clock del Core del ARM


#include <LPC210x.h>

__irq void timer0(void); // Prototipo de la interrupcion

unsigned char toggle=0;

int main(void)
{
	PINSEL0=0;
	PINSEL1=0; // Todos los puertos funcionan como tales.
	IODIR=0x0F000001; // De P27 a P24 y P0 los configuro como puertas de salida
	IOSET=0x0F000001; // Prendo leds
	
	/* Los timers tienen 2 contadores, 1 es el prescaler y el otro es el contador en si mismo, ambos tienen registros son de 32 bits
	   por lo tanto por c/u puedo contar 2^32, osea como maximo podria contar hasta 2^64*272 nSeg = muchos dias :-)
	   El timer seria una cosa asi:  FPclk --> Prescaler --> Contador

	   - Prescaler -> 2 resgistros
	   	  . TxPR: Es el valor de cuenta del prescaler.
	   	  . TxPC: Sirve para indicarle desde donde comienza a contar el prescaler, cuando sea igual a TxPR, desborda y empieza de nuevo, mandandole una cuenta al otro contador

	   - Contador -> 4 registros
	   	  . TxTCR: Es un registro de control, si vale:
		    -0: el contador no cuenta
			-1: el contador cuenta
			-2: reseteo el contador.
			Es como el TRx del 8051.
		  . TxTC: Sirve para indicar el valor de inicio del contador
		  . TxMRx: Son varios registros (segun el timer pueden ser 4 o 3), aca se pondra el valor de la cuenta q se desea alcanzar con el contador, cuando TxTC sea igual se produce un evento.
		    Son varios porq se lo puede configurar para q envie un evento en cuentas distintas, ej:
			- TxMR0 = 34; Al llegar aca se produce un evento, pero el contador sigue
			- TxMR1 = 45; Al llegar aca se produce otro evento
		  . TxMCR: Sirve para configurar q accion tomar cuando se produce un evento, es de 32 bits y c/3bits se cunfigura un MRx distinto:
		  	Si se produce un evento en MRx y TxMCR vale:
			- 001: lanza una interrupcion
			- 010: se resetea el contador
			- 100: se para el contador
			Las 3 acciones se pueden combinar, osea interrumpir y resetear al mismo tiempo.
	*/

	//------------------ Configuracion del Timer -----------------------------------------------//
	T0TCR=0x0; // el contador no cuenta
	T0TC=0x0;  // el contador comienza de 0
	T0PR=3686; // configuro la cuenta del prescaler tal q le mande una cuenta al contador c/ 1 mSeg
	T0PC=0x0;  // el prescaler comienza de 0
	T0MR0=1000; // configuro la cuenta del MR0 tal q cuente 1000 mSeg osea 1 seg
	T0MCR=0x03; // configuro q al producirce un evento en MR0, se lance una interrupcion y se resetee el contador
	//------------------------------------------------------------------------------------------//

	/* Registros de interrupciones:
	   VICIntEnable: habilita las 16 posibles fuentes de interrupciones, tipo un IE del 8051
	   VICIntSelect: configura a las interrupciones como:
	   		- FIQ: interrupciones rapidas
			- IRQ: interrupciones comun, q a su vez pueden ser:
			 	* vectorizadas (igual q en el 8051)
				* no vectorizadas (en teoria no lo veriamos)
	   VICVectCntl_0 al 15: en el se indican los indices de interrupciones habilitadas y si es vectorizada o no.
	   VICVectAddr_0 al 15: la direccion donde se encuentra la rutina de atencion, es como un setvect
	*/

	//------------------------ Configuracion de las interrupciones ------------------------------//
	VICIntSelect=0x0; // Lo configuro como IRQ
	VICIntEnable=0x10; // Interrupcion del Timer 0 activado, su indice es 4 al ser el bit 4	(importante para el reg. q viene)
	VICVectCntl0=0x24; // Los 4 1eros bits sirven para indicar el indice, el 6to bit si vale 1 indica q es vectorizado y si vale 0 q no
	VICVectAddr0= (unsigned long) timer0; // Le digo q la direccion de la subrutina timer0 q funciona como interrupcion
	//--------------------------------------------------------------------------------------------//

	T0TCR=1; // el contador empieza a contar
	while(1);
}

//--------- Rutina de la interrupcion ---------------------//
 __irq void timer0(void)
 {
 	if(toggle==0)
       {
       IOCLR=0x0F000001; // Apago leds
       toggle=1;
       }
    else
       {
       IOSET=0x0F000001; // Prendo leds
       toggle=0;
       }
	T0IR=0x01; // Limpio registro de interrupcion - No tengo idea de donde sale, habria q ver hoja de datos
	VICVectAddr=0xFF;
 }
 //---------------------------------------------------------//
```

Te recomiendo que uses el Proteus como simulador de este tipo de uC, te va a resultar muy útil y obviamente con hoja de datos encima para entender que es cada registro, después veo si encuentro un resumen que había hecho.


----------



## Munire (Jul 17, 2012)

yo tengo un LPC1768 con un Cortex M3. No te voy a aconsejar acerca de que micro coger por que solo he probado este y no tengo los conocimientos suficientes. 

pero si te aconsejo que te compres la placa de desarrollo con el J-tag integrado para depurar. si lo compras aparte sale mucho mas caro.

si haces proyectos un poco complejos el Jtag te va a sacar de muchos apuros y te va a ahorrar mucho tiempo.

-----------------------

alguien sabe utilizar el I2C para esta familia de micros (LPC17xx)?  no se que pasa que no lo consigo. alguien me echa una mano?



saludos


----------



## cosmefulanito04 (Jul 17, 2012)

Munire dijo:


> ...
> alguien sabe utilizar el I2C para esta familia de micros (LPC17xx)?  no se que pasa que no lo consigo. alguien me echa una mano?



Nunca usé el I2C en ningún uC, si el SPI, así que tal vez no sea de gran ayuda.

¿Qué problemas tenés?


----------



## Sebastian1989 (Jul 18, 2012)

Yo también estoy empezando con los ARM, hace unos días compre la placa stm32fdiscovery que viene con un stm32f407 que es un cortex-m4 a 168MHz con 1MB de flash y 192KB de RAM además incluye programador, debugger, acelerómetro, 4 leds, un boton, micrófono y un pequeño amplificador para unos audífonos, lo estoy programando en C con Keil uVision4. Debo admitir que como no se nada sobre ARM me a costado bastante usarlo y en nada mas configurar el keil para que me reconozca y programe el micro tarde varias horas, por ahora solo soy capaz de leer el estado del botón y prender leds, sé que no es mucho pero por algo se empieza.
Si alguno de los que lee esto usa micros STM32f le pido que por favor publique algunos ejemplos ya que estoy avanzando bastante lento con esto de los ARM.


----------



## Hellmut1956 (Ene 18, 2013)

Yo me compre la placa LPCxpresso 1769, por como se ha escrito aquí 37,80 Euros incluyendo el flete. El IDE puede compilar gratis hasta 125kbytes de código. Nunca he escrito ni fracción de esto. El IDe se puede ampliar por sumas módicas a 256kbyte y 512kbyte, como también ilimitado.

la razón para decidirme ir con NXP es el precio tan barato de los LPCxpresso que incluye la interfaz JTAG, que no vale ni hacer una placa propia, pues las componentes acaban costando mas de la placa completa. El IDe viene preconfigurado, por lo que "conoce" la LPCxpresso que se escoja, incluyendo todas las peripherias. Los tutoriales y ejemplos existen para documentar el uso de todas las peripherias existentes en un controlador como el LPC1769, por ejemplo.

Pienso portar una software de la empresa Trinamic en su placa StepRocker, para la cual existe una IDE y una propia lengua de programación de los controladores para motores de paso en una placa "madre" que haré yo mismo y sobre la cual montaré la LPCxpresso 1769. El StepRocker utiliza un Cortex M0 de Samsung, pero a sido escrito usando el API disponible para todos los Cortex, por lo cual el portar la software no creo que resulte muy dificil. La ventaja de esto es que tendré el sistema de evaluación disponible para el StepRocker en mi propia placa.


----------



## LUCASLEON (Ene 25, 2013)

Muy buen aporte amigo 
una consulta donde se puede descargar El IDE que mensionas para complilar codigo del LPCxpresso 1769.
Y por ultimmo  interfaz JTAG es para laprogramacion de estos microcontroladores?


----------



## Hellmut1956 (Ene 25, 2013)

Hola amigo, aquí el enlace a la página de donde vas a descargar la IDE!
La interfaz JTAG es mucho mas que una interfaz para descargar programas y datos al controlador. Junto con la IDE para el LPCxpresso, que conoce todas las placas LPCxpresso para los diferentes controladores de NXP, puedes trabajar directamente en el controlador! Así la IDE puede parar el programa en cualquier sentencia de tu programa, sea en la lengua "C" o en la sentencia assembler. Puedes dejar avanzar el programa sentencia por sentencia, sea del lenguaje "C" o del assembler, mirarte el valor de todas las variables, los contenidos de todos los registros, puede cambiar los valores en los registros o variables. Es como si usaras un simulador, pero el programa se ejecuta en el controlador en el LPCxpresso. Así la velocidad es idéntica, con ciertas limitaciones por módulos de software que son anectados a tu programa cuando lo compilas en "debug mode", el modo para la búsqueda de errores. Si haces tu propia placa embebida puedes usar el módulo JTAG del LPCxpresso. Este módulo se puede separar físicamente de la placa LPCxpresso pudiendo así por un lado utilizarse con una placa propia, o el LPCxpresso se puede instalar en un sistema embebido sin ese módulo, reduciendo así el tamaño de la placa instalada!


----------



## Hellmut1956 (Dic 5, 2013)

El tiempo pasa y las cosas por lo general progresan.
NXP ha comprado Code Red, el auto de la IDE gratuita para los controladores ARM Cortex Mx de NXP. El resultado es que la IDE gratuita en su última versión, la primera que ahora ofrece NXP directamente a ampliado el límite del código descargable al controlador de 128kNytes a 256kBytes. Para quien estos 256kByte representan una limitación, sigue habiendo la posibilidad de lo que ahora se llama la versión profesional que no tiene límite del lado de la IDE, es un berraco. 256kBytes de código es un jurgo!

Habiendo releido el hilo, creo que es justificado dar unas informaciones adicionales sobre los controladores ARM.

Correctamente se ha escrito, que ARM, una empresa inglesa, es la que diseña todas las variantes de tipos de controlador ARM y vende licencias de estas a productores de controladores, como son NXP; etcétra, una lista bastante completa ya ha sido publicada en este hilo.

Cada empresa que se compra una licencia de un tipo de controlador ARM de la empresa ARM fuera de recibir la información de como se especifica el controlador licenciado, tiene que cumplir con ciertos requisitos asociados con esta licencia. Escribo esto, pues tiene implicaciones interesantes para nosotros los que usamos estos controladores.

Delos controladores ARM existen 2 variantes básicas. La una son los controladores del tipo ARM Cortex Mx, la x estando para indiar que allí existen varias variantes y la otra preferiría llamar procesadodres, o con su abreviación, CPU. 

La diferencia entre controladores y procesadores es que procesadores requieren de componentes adicionales para crear un sistema y por lo general no tienen las periferias que estamos acostumbrados a ver en controladores y por lo general requieren de un sistema operacional, como Linux por ejemplo para ser operados.

Controladores son unidades que integran la unidad de procesamiento y las periferias en una pieza de silicio e integrado en un empaque y o no usan un sistema operacional, o usan algo que se llama RTOS, que es un sistema operacional que opera con tiempos de reacción a eventos de forma definida.

Los controladores del tipo ARM Cortex Mx son lo que por lo general escogemos como alternativa a los PIC o Atmels a los que estamos acostumbrados de un pasado.

Los controladores ARM Cortex Mx al día de hoy se ofrecen en las siguientes variantes:

ARM Cortex M0
ARM Cortex M0+
ARM Cortex M3
ARM Cortex M4
y de estas últimas con FPU o sin ella.

Es interesante saber que en la lista de arriba las variantes como aumenta el valor del dígito, 0, 3 y 4, son una extensión del anterior. Significa que las sentencias disponibles siempre incluyen todas aquellas del tipo inferior y extienden estas como vaya aumentando el dígito.

Las variantes del tipo ARM Cortex M4, un controlador que contiene en un pedazo de silicio 2 controladores, un M0 y un M3, lo que permite toda una gama de posibilidades. Ademas existen variantes con una unidad FPU, floating point unit, que acelera la ejecuación de aritmética para números consistiendo de un número con partes entereas y fracción y operaciones como multiplicaciones, divisiones y similares, que en controladores sin estas unidades FPU requieren de bastante tiempo para ser ejecutadas.

Las variantes ARM Cortex M0+ son variantes que pueden ser operadas con un consumo de energía menor al de aquellas M0!

Lo escrito hasta aquí tiene unas implicaciones muy interesantes! Esto significa que cada proveedor de controladores de los tipos ARM Cortex Mx se basa en la licencia idéntica y por lo tanto la presión a los proveedores de controladores de estos tipos para crear sus productos es muy alta de darles capacidades únicas que justifiquen la selección de su oferta en comparación con los productos de otros proveedores.

ARM aún aumenta esta presión obligando a las empresas que licencian sus variantes de ofrecer bibliotecas para las periferias que puedan ser usadas con la misma interfaz de software. Esto se llama HAL, hardware abstraction layer, o abstracción de la implementación fisica. Significa que todas las bibliotecas son usadas con especificaciones idénticas. Un efecto de esto es, que la empresa proveedora de un controlador del tipo ARM Cortex Mx, tiene un interés estratégico que la calidad de su implementación de las librerías sea óptima. Pues la eficiencia en sentido de economía energética, de velocidad y funcionalidad depende de la calidad de las bibliotecas que el proveedor esta obligado o proveer para todas las periferia que implemente en su componente. Igualmente la calidad del compilador es de importancia estratégica.

Para los clientes que usan controladores ARM Cortex Mx significa que el cambiar de proveedor solo requiere de un esfuerzo mínimo, pues sus códigos todos acceden las periferias usando la misma interfaz o API, application programming interface, o interfaz de programación para las aplicaciones. Así que decidiendose por un proveedor de controladores ARM no tiene que ser una decisión tan definitiva como lo era ir por los Atmel o los PIC por ejemplo.

Pero también un efecto de esto es la presión sobre los proveedores de hacer el uso de sus productos ofertados facil y económico para sus clientes y para clientes nuevos. El efecto es que todos ofrecen placas de evaluación súper baratas y la presión en los precios de las componentes de ser lo mas económico posible es muy grande.

Quiero resaltar otro asunto que es de interés, así lo creo, para aquellos que han estado usando controladores PIC o Atmel en el pasado y piensen en entrar en el mundo de los controladores ARM.

Se trata de lo que en el mundo de los PIC y los Atmel era la herramienta para grabar código en la memoria flash del controlador. Esto es algo diferente en los ARM Cortex Mx y lo que se usa es la interfaz "JTAG". esta interfaz fuera de ser el medio para descargar programas al controlador es un medio muy, pero muy poderoso, para el resolver problemas en el código escrito y ejecutado, en inglés, el "debug"!
En el mundo de los Atmel y los PIC, el uso de un simulador en software ejecutado en el PC era el método usual, para poder analizar en todo detalle la ejecución de un programa, permitiendo mirar y si fuera necesario cambia el valor de cualquier variable o constante o de cualquier registro en el controlador y ver el efecto. Como es simulador y no el controlador físico, su ejecución es mucho mas lento, eventos físicos externos no pueden ser simulados de forma real y siempre existe la posibilidad de una diferencia entre el comportamiento del simulador y del controlador físico.
Pues con la interfaz JTAG es posible hacer todo lo que se puede hacer en un simulador, pero en el controlador físico y a la velocidad real en el entorno real y con las reacciones reales a eventos externos.
Las IDEs para estos controladores ARM Cortex Mx conocen todas las variantes de controladores de cierto proveedor y así tambien cuales periferias existen en estos, siendo configurados los IDEs de acuerdo al controlador físico para el cual se programa y al cual se accede atravez de la interfaz JTAG. Así el acceso incluye todos los regsitros asiciados con las periferias existentes en una variante de los productos del proveedor del controlador.
Yo me he decidido por el proveedor NXP por sus placas LPCXpressoxxxx y por la IDE gratuita, que no solo sabe de los productos ofertados por NXP, sino que también conoce todas las placas del tipo LPCXpressoxxxx. Así, si por ejemplo se escoge la placa LPCXpresso1769, una placa con un controlador ARM Cortex M3, el LPC1769, entonces la IDE se autoconfigura a esta placa LPCXpresso1769 por ejemplo.
Cada placa LPCXpressoxxxx consiste de una placa de 2 partes. La una es la placa con el controlador, en mi caso el LPC1769 y la otra con el dispositivo JTAG. Esta parte de la placa LPCXpressoxxxx puede ser separada de aquella parte con el controlador LPC1769, dejando una placa de dimensiones mínimas y que solo cuesta 22,- Euros mas IVA y el flete, donde el proveedor mas barato que he podido identificar es la empresa Watterott. este precio es tan barato que hacer una placa con el controlador no es posible hacerla mas barata uno mismo por el costo de las componentes y además la placa y las componentes SMD resultan muy exigentes hacerlas uno mismo. Ademas las placas LPCXpressoxxxx siempre contienen aquella variante del tipo de controlador usado mas grande y potente.
La parte de la placa LPCXpresso con la interfaz JTAG tambien puede ser usada con la placa que contiene el controlador o con la placa de diseño propio como medio de acceder esta por JTAG.
La unidad JTAG es algo que resulta específico a la IDE escogida y dependiente del proveedor escogido. Keil es una IDE que se puede usar con los productos de practicamente todos los proveedores, pero la unidad JTAG cuesta!
Finalmente quiero comentar que la variante mas actual de la IDE para las LPCXpresso, ahora descargable desde un sitio de NXP, NXP compró la empresa Code Red, autora de esta IDE, por querer asegurarse de que esta IDE sea óptima para sus productos por las razones estratégicas descritas arriba, ha ampliado el límite ha 256kBytes para la variante gratuita!


----------



## ingrafuco (Nov 6, 2017)

Cordial saludo cofrades de la tecnología.
Así como se encuentran los clones de pickit2, pickit3 y los construyte uno mismo; existe un modelo de grabador para los microcontroladores ARM que se encuentre en la red? Lo pregunto, debido a que he realizado pruebas con una tarjeta de desarrollo NXP freedom KL46Z. Me enviaron como muestra 4 uC que hacen parte de dicha tarjeta. No es práctico al realizar un proyecto, comprar una tarjeta para cada proyecto.
Un gran saludo para todos los que amamos este mundo de la electrónica embebida


----------



## cosmefulanito04 (Nov 6, 2017)

Dependerá del uC que uses, los NXP suelen programarse directamente por puerto serie y en el algunos casos, si agregás el bootloader para USB, lo cargás como si fuera un Pendrive (si, es mágico y funciona muy bien).

Normalmente este tipo de uC son ISP (In-system programming).


----------



## Scooter (Nov 6, 2017)

La verdad es que nunca he usado grabadores de microcontroladores. Pasé de los sistemas con programadores de eprom a los ISP+IAP por uart hace mas de una década.


----------



## cosmefulanito04 (Nov 6, 2017)

Los Arm, la mayoría se programan así, incluso Texas tiene una línea que se programa por ethernet.


----------

