Benutzer:Wtg

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

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);
    }
  }
}