GREETBoard ATMega32 – Blinkende LED

Nachdem das GREETBoard ATMega32 aufgebaut und gelötet ist, muss sich herausstellen, ob es auch wirklich funktioniert. Dazu wird ein erstes Testprogramm erstellt und aufgespielt. Damit ich sicher sein kann, dass ein eventuelles Versagen des Boards nicht an meinen kläglichen Kenntnissen der C-Programmierung liegt, habe ich ein Beispiel aus dem Internet verwendet (hier der Link).

Der Programmer

Leider verfügen meine Rechner nicht mehr über eine RS232 Schnittstelle als SubD Buchse, so dass ich mir einen All-AVR Programmer zugelegt habe. Dieser funktioniert mit AVR Studio 5.1 ganz hervorragend, die Version 6.0 wird wohl noch nicht unterstützt, da der Programmer hiermit nicht funktionierte. Mich freute vor allem, dass AVR Studio über den Programmer den Mikroprozessor einwandfrei ansprechen konnte. Diese Hürde wurde überwunden und es kann mit dem ersten kleinen Testprogramm weitergehen.

Blinkende LED’s

Wie der Link oben bereits andeutet, sollte mindestens ein LED blinken. Dazu habe ich den folgenden Code benutzt:

#include <util/delay.h>
#include <avr/io.h> 

int main (void) { 
  DDRD = 0xff;           // Gesamter Port D als Ausgang definiert
  while(1) {             // Endlosschleife
    PORTD |= (1<<PD7);   // Bit setzen
    _delay_ms(500);      // halbe Sekunde warten
    PORTD &= ~(1<<PD7);  // Bit löschen
    _delay_ms(500);      // halbe Sekunde warten
  } 
  return 0; 
}

Was macht dieses kleine Programm? Nachdem die AVR modellspezifischen IO-Definitionsdatei und die Funktion „delay“ integriert wurden, sind alle Ausgänge des Port D als Ausgänge gesetzt worden. Danach läuft in einer Endlosschleife folgendes ab: Setzen des Ausgangs D7 – 500ms warten – Ausgäng löschen – 500ms warten. Was soll ich sagen – es hat wunderbar funktioniert! Ich war unglaublich erleichtert, dass zumindest alle LED’s (habe ich nach und nach getestet) leuchten.

Die Taster

Das die Ausgänge in Ordnung sind heißt nicht, dass die Eingänge (sprich die Taster) das tun, was sie sollen. Um dies zu testen habe ich folgenden Code aufgespielt und laufen lassen:

#include<avr\io.h>
#include<avr\interrupt.h>
#include
#include           // Initialisierung

void initial(void) {
  // Einrichten von Ein- und Ausgängen
  DDRD = 0xff;     // PortD = Ausgänge
  DDRC = 0x00;     // PortC = Eingänge
  PORTC |= _BV(7); // Pull Up an PB7 aktivieren 
}

// Hauptprogramm
int main(void) {
  initial();       // Initialisierung Ports

  // Hauptschleife
  while(1){
    if ( PINC & (1<<7) )  PORTD |= _BV(6);
    else PORTD &=~_BV(6);
    if ( PINC & (1<<7) )  PORTD |= _BV(7); 
    else PORTD &=~_BV(7);
  }                // end of while(1){...}
}                  // end of main

Wenn also der Taster S6 (am Pin C7) gedrückt wird, dann leuchten die LED’s 1 und 2 (Port D6 und D7). Dies hat auch ganz hervorragend geklappt und gezeigt, dass die entsprechenden Bauteile korrekt verschaltet und verlöten wurden. Das war mir vorher nicht ganz klar, da die Taster hardwareseitig entprellt werden sollten und diese Funktion geändert wurde (daher die Drahtbrücken neben den Schaltern). Weiteren Tests steht nun nichts mehr im Wege.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.