Quería comentarles en referencia al Wiki y al programa de Blink que es el "hello-world" de los AVRMini, Wiring y Arduino.
Mis disculpas, esto debería quedar en el Wiki pero no lo he logrado. Hay varias diferencias entre la IDE de Arduino o Wiring y AVR-GCC pero quizá lo mas importante para comenzar son las variables con las que se asignan el direccionamiento de los puertos y los pines. También el uso del sistema hexadecimal para cuadrar las variables. Algo de ésto se menciona en: http://ccrma.stanford.edu/~juanig/articles/pidht/pidtoot/Microcontroladores_Sistemas.html El programa de Blink en Wiring es el siguiente: =========================================================================== // Blinking LED // by BARRAGAN <http://barraganstudio.com> int ledPin = 0; // LED connected to the Wiring I/O board pin 0 void setup() { pinMode(ledPin, OUTPUT); // sets the digital pin as output } void loop() { digitalWrite(ledPin, HIGH); // sets the LED on delay(1000); // waits for a second digitalWrite(ledPin, LOW); // sets the LED off delay(1000); } ============================================================================= Hay un par de funciones que son importantes: 'pinMode' y 'digitalWrite' Estas dos no son parte de AVRGCC pero entonces hay que fijarse en la traducción. En la distribución de Wiring hay que buscar en los archivos: '$/wiring/core/WApplet.c' o '$/wiring/core/WApplet.c.svn-base' pinMode() está definida así: void pinMode(uint8_t pin, uint8_t mode) { if(mode == OUTPUT) { *portsddr[pin/8] |= pins[pin%8]; } else { *portsddr[pin/8] &= ~pins[pin%8]; } } Por lo que me dará el valor hexadecimal de éste pin (pin modulo 8) que es la variable portsddr[] o portsddr[0], que es DDRD y si ven, adelante está definida en el mismo programa en el area de las constantes. digitalWrite() está definida así: void digitalWrite(uint8_t pin, uint8_t val) { if(val == HIGH) { *ports[pin/8] |= pins[pin%8]; } else { *ports[pin/8] &= ~pins[pin%8]; } } Recuerden que en las salidas digitales HIGH es energizar (ON). ports[0] es PORTD y por lo tanto se manda un HIGH byte en cada digitalWrite en el puerto PORTD y en al pin con direccionamiento DDDR. Hay cuatro puertos digitales cada uno con ocho pines. Para manipular los puertos y los pines con AVRGCC y de acuerdo con las funciones anteriores la idea es asignar valores hexadecimales como muestra el programa blink.c, // 0x0F es el hexadecimal para el binario 00001111 outb(DDRB, 0x0F); Esto quiere decir que utilizo la función outb de avrlib para asignar a la variable de direccionamiento DDRB el valor de '0x0F'. Lo que implica que los cuatro primero pines tienen el low-byte o 0 y por definición son entradas. los cuatro últimos tienen el high-byte y por lo tanto son salidas. El registro PORTB también almacena valores de high-bit o low-bit. Como habíamos visto en éste caso high-byte es energizado (ON % voltios) y low-byte apagado y por lo tanto, outb(PORTB, 0x0F); implica que la función outb asignará valores de high-byte o encendido a los ultimos cuatro pines del PORTB. Cada pin en cada puerto se puede manipular con las siguientes funciones: //loop forever while (1) { //clear bit PB0 in the PORTB register - turn LED on cbi(PORTB,PB0); // pause for 500ms timerPause(500); //set bit PB0 in the PORTB register - turn LED off sbi(PORTB,PB0); //pause for 500ms timerPause(500); } Para cambiar el valor del pin0 en PORTB utilizo, cbi(PORTB,PB0); Para asignar, sbi(PORTB,PB0); Ahora en el caso de Wiring y por lo que se deduce en lugar de utilizar el AVRGCC con DDRB y PORTB, habría que utilizar DDDR, PORTD, outd y PD0, si las traducciones no están mal. Perdón por pensar en voz alta, pero de pronto esto aclara un poco mas la relación entre las IDEs de Wiring , Arduino y AVRGCC. Si se logra hacer la conversión de los puertos y los direccionamientos para cada uno de los AVR, creo que ya no es sino ver si cargan los programas y estaríamos a tan solo un paso para compilar y ver si OSC funciona. Para cargarlo hay que hacer el directorio con el Makefile que compile y cargue el -.elf. Carr Wilkerson, Michael Gurevich y Wendy Ju, tienen una explicación sobre AVR-GCC en: http://cm-wiki.stanford.edu/wiki/AVR_Programming Suerte, --* Juan _______________________________________________ ____ ____ ___ ____ _ _ ___ |__| |__/ / |___ \/ |__] | | | \ /__ |___ _/\_ | Arzexp mailing list [email protected] http://lists.slow.tk/listinfo.cgi/arzexp-slow.tk
