Benutzer:Wtg
22.1.09 Bei Pollin bestellt: (Um mal wieder was zu basteln)
ATMEL Evaluations-Board Version 2.0.1 - Bausatz (jetzt auch als Fertigmodul erhältlich) Bausatz ATMEL Addon-Board V1.0 Bausatz Streifen-/Punktrasterplatinen-Adapter (man weiss nie ...) Funkmodul RFM01 Empfangsmodul ATMega 8-16PU ATMega 32-16PU ATTiny 2313 20PU IDE-Kabel Sub-D Kabel EEPROM 24C04 - DIP8
28.1.09 Lieferung erhalten
30.1.09 Evaluations-Board ausgepackt, sortiert und Widerstände, Dioden und IC-Sockel eingelötet (~30 min .. endlich mal wieder Lötzinngeruch in der Nase .. mmmmmhh). Dabei ist mir aufgefallen, dass R4 nicht da sitzt wo er auf dem Bestückungsplan eingezeichnet ist.
31.1.09 Nach einer weiteren Stunde löten war das Evaluationsboard fertig :-)
1.2.09 Entwicklungsumgebung unter Mandriva 2008 nach Anleitung [1] installiert - aber jeweils die aktuellsten Versionen. Dabei musste ich texinfo-debug für binutils nachinstallieren und für avrdude flex Version 2.5.4 (Mandriva hatte hier nur die 2.5.33 in den Standardquellen).
4.2.09 Erste erfolgreiche Versuche ein Programm zu kompilieren und auf dem Microcontroller zum Laufen zu bringen. Orientiert habe ich mich an den hervorragenden Quellen hier [2] und hier [[3]].
Ich verwendete für meine ersten Versuche einen ATtiny2313.
Hier das Makefile:
MCU = attiny2313 CC = avr-gcc OBJCOPY=avr-objcopy CFLAGS =-g -mmcu=$(MCU) -Wall -Wstrict-prototypes -Os -mcall-prologues -save-temps -fno-common all: $(TARGET).hex $(TARGET).hex : $(TARGET).elf $(OBJCOPY) -j .data -j .text -O ihex $< $@ $(TARGET).elf: $(TARGET).o $(CC) $(CFLAGS) -o $@ -Wl,-Map,$(TARGET).map $< $(TARGET).o : $(TARGET).c $(CC) $(CFLAGS) -c $< load: $(TARGET).hex avrdude -p t2313 -c ponyser -P /dev/ttyS0 -U flash:w:$(TARGET).hex -v clean: rm -f *.o *.map *.elf *.hex *.s *.i
Mein erstes Programm: Die zwei LEDs auf dem Board blinken im Wechsel: Die Jumper JP6 und JP7 sind zu setzen!
/* * ATtiny2313 * Pollin Evaluationsboard v2.01 * */ #include <avr/io.h> #include <util/delay.h> // LEDs sind active-high geschaltet #define LED_AN(LED) (PORTD |= (1<<(LED))) #define LED_AUS(LED) (PORTD &= ~(1<<(LED))) #define LED_TOGGLE(LED) (PORTD ^= (1<<(LED))) #define LED1 PD6 #define LED2 PD5 int main(void) { DDRD |= (1<<LED1) | (1<<LED2); // Port D: Ausgang für LED1 und LED2 // Anfangseinstellung LED_AN(LED1); LED_AUS(LED2); while(1) { _delay_ms(1000); // Wert 1000 erlaubt ab avr-libc 1.6 LED_TOGGLE(LED1); LED_TOGGLE(LED2); } }
Mein zweites Programm verwendet den Taster um zwischen den beiden LEDs zu toggeln (alles aus den oben genannten Quellen modifiziert für mein Board): Jumper JP3 ist zu setzen:
/* ATtiny2313 Pollin Evaluationsboard v2.01 */ #include <avr/io.h> #include <util/delay.h> // LEDs sind high-active geschaltet #define LED_AN(LED) (PORTD |= (1<<(LED))) #define LED_AUS(LED) (PORTD &= ~(1<<(LED))) #define LED_TOGGLE(LED) (PORTD ^= (1<<(LED))) #define LED1 PD6 #define LED2 PD5 // TASTER ist high-active geschaltet #define TASTER PD2 #define TASTER_GEDRUECKT() (PIND & (1<<TASTER)) int main(void) { DDRD &= ~(1<<TASTER); // Port B: Eingang für Taster DDRD |= (1<<LED1) | (1<<LED2); // Port D: Ausgang für LED1 und LED2 while(1) { if (!TASTER_GEDRUECKT()) { // Taster ist nicht (!) gedrückt LED_AN(LED1); LED_AUS(LED2); } else { // Taster ist gedrückt LED_AUS(LED1); LED_AN(LED2); } } }