Aparte, comencé a ir al Club de Robótica FIUBA http://www.clubderobotica.com.ar/ , del cual aprovecho para agradecerles a los organizadores por haberme permitido que me uniera. La didáctica es bastante sencilla: hay distintos proyectos, ya sea para principiantes y o avanzados, los cuales están dirigidos por un coordinador. (También es posible proponer un tema propio). Una vez que nos decidimos por un proyecto, comenzamos a llevarlo adelante.
Algunos de los proyectos son autitos seguidores de líneas, brazos robóticos, robots mini sumo, robots que encuentran salidas a laberintos, cubo de leds, etc.
Como plataforma principal de trabajo utilizan micros de la marca Atmel programados mediante un programador USB.
Para probar qué tan fácil es programar los ATMEL les voy a mostrar el mismo código que generé en mis primeros tutoriales para encender un LED tanto con el PIC16F88 como con el Atmega48 (Quise comprar el Atmega88 pero no lo tenían en los locales del centro). Me salió $19,72 en sycelectronica.
Los Atmega48, 88 y 168 son micros de 8bits, de 28 pins y con similares características. Lo que los diferencia son los tamaños de memoria flash. El atmega48 tiene 4k de memoria mientras que el 88 y el 168 tienen 8 y 16k respectivamente.
Atmega48/88/168 |
Veamos algunas comparaciones simples entre el PIC16F88 y los atmel anteriores:
PIC16F88 |
Al igual que el PIC16F88 tienen un oscilador interno de hasta 8Mhz y soportan hasta 20 Mhz con un xtal externo.
Los bits de configuración en la arquitectura Avr (atmel) se les llaman FUSES y se especifican por fuera del código en C.
En cantidad de pins, el pic tiene 18 mientras que los atmel tienen 28.
El voltaje de operación en el pic va de los 2.0V a los 5.5V mientras que en el atmel va de 2.7V a 5.5V.
Ambos productos tienen soporte para grabación "in circuit", es decir, cambiar el firmware del micro estando en un circuito que hayamos diseñado.
Ambos tienen soporte para comunicación serial mediante USART.
Microchip tiene su entorno de desarrollo MPLABX basado en Netbeans (Windows/Linux) mientras que Atmel tiene a AtmelStudio basado en Visual Studio 2010 (Windows). Igualmente hay varios IDEs distintos y Open Source disponibles para Windows/Linux.
Después tienen otros pines que todavía no utilicé como el PWM y entradas analógicas.
Ejemplo que permite prender y apagar un led:
PIC16F88 (XC8):
#define _XTAL_FREQ 8000000 #include <xc.h> #include <stdio.h> #include <stdint.h> #include <stdbool.h> __CONFIG(MCLRE_ON & CP_OFF & CPD_OFF & LVP_OFF & BOREN_OFF & WDTE_OFF & FOSC_INTOSCIO & PWRTE_OFF); __CONFIG(IESO_OFF & FCMEN_OFF); #define posLED _PORTB_RB0_POSITION // Posición en la que se encuentra el Led #define PORTLED PORTB /** * Programa principal */ void main(void) { // Configura el Oscilador interno a 8Mhz OSCCONbits.IRCF = 0b111; // Configura un 0 en la posición que le corresponde al LED // y un 1 a todas las demás. // 0 = Salida, 1 = entrada TRISB = ~(1 << posLED); // La línea anterior es equivalente a // TRISB = 0b11111110; // Bucle principal while(true) { PORTLED |= (1 << posLED); // Setea en estado alto (High) el LED __delay_ms(500); // Se queda esperando 500 milisegundos PORTLED &= ~(1 << posLED); // Setea en estado bajo (Low) el LED __delay_ms(500); } }Atmega48, 88, 168 (avr-gcc)
#define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> #define posLED PORTD0 // Posición en la que se encuentra el Led #define PORTLED PORTD int main( void) { // Configura un 1 en la posición que le corresponde al LED // y un 0 a todas las demás. // 1 = Salida, 0 = entrada DDRD = (1 << posLED); // La línea anterior es equivalente a // DDRD = 0b00000001; // Bucle principal while(1) { PORTLED |= (1 << posLED); // Setea en estado alto (High) el LED _delay_ms(500); // delay 500 ms PORTLED &= ~(1 << posLED); // Setea en estado bajo (Low) el LED _delay_ms(500); // delay 500 ms } }
El ejemplo con PIC está distinto que el de los posts anteriores para que se parezca más al código del Atmel.
En cuanto tenga tiempo veo si puedo comparar los códigos para utilizar el USART. Hasta la próxima!
No hay comentarios:
Publicar un comentario