Mai 31 2011

Counter 0-255 in C mit dem AVR-GCC Teil 1/2

Nun habe ich mich durchgerungen und konnte endlich mal wieder was mit meinen uC´s(Microcontroller) machen. Ich habe mir ein Buch gekauft und hoffe, dass ich in der nächsten Zeit etwas mehr dazu komme. Das Buch heißt AVR-Mikrocontroller in C programmieren(Rezension folgt!). Damals habe ich schonmal etwas mit Atmels gemacht, aber leider dann den Faden verloren. Nun musste ich mir wieder alle Programme zusammensuchen und installieren.

Als erstes musste ich AVR Studio und PonyProg2000 auf meinem neuen Laptop(Windows 7 Prof. 64Bit) installieren, was sich schon als sehr kniffelig rausstellte. Die Programme im Internet zu finden ist die eine Sache, aber auch unterstützt für Win7 und 64Bit ist die andere. Als ich dann  eine Version gefunden habe, die ich installieren konnte, fand ich heraus, dass diese Version meinen Microcontroller nicht unterstützt. Nun habe ich eine Version gefunden, die auch meinen Controller unterstützt AVR Studio 4.18 .

Nachdem alles installiert war, ging es auch schon los. Ich habe mir dann erst mal vorgenommen einen Zähler zu bauen. Das ging auch relativ schnell. Ich habe angefangen mir das AVR-GCC-Tutorial von www.mikrocontroller.net durchzulesen. Damals habe ich schon mal etwas mit C gemacht und somit bin ich damit ziemlich gut zurecht gekommen. Nach ein paar Tests lief auch schon der Zähler mit folgendem Code:

// Counter
#include <avr/io.h>        //1
#include <util/delay.h>    //2
#define F_CPU 1000000l     //3
int main (void)            //4
{
 int i = 0;
 DDRB = 0xFF;              //5
 while(1) {                //6
  for(i = 255; i > 0; i--)
  {
   PORTB = i;              //7
   _delay_loop_2(100000);  //8
  }
  i=255;
  }
 return 1;                  //9
}
  • In der mit 1 markierten Zeile wird eine sogenannte Header-Datei eingebunden. In io.h sind die Registernamen definiert, die im späteren Verlauf genutzt werden.
  • Bei der 2 wird eine Datei eingebunden, die Wartemechanismen enthält.
  • 3 dort wird die Clock Frequenz definiert, wenn diese nicht im Makefile definiert ist.
  • Bei 4 beginnt das eigentliche Programm. Jedes C-Programm beginnt mit den Anweisungen in der Funktion main.
  • 5 Die Anschlüsse eines AVR werden zu einzelne Blöcke zusammengefasst, ein solcher Block wird als Port bezeichnet.  Mit DDRB =0xFF; werden die Anschlüsse des Blocks/Ports B als Ausgänge definiert.
  • In der Zeile 6 wird eine Endlosschleife begonnen, da der Zähler endlos laufen soll.
  • In der mit 7 markierten Zeile werden die Ausgangswerte eingestellt. Man kann einzelne Integer-Werte dem Port zuweisen, aber auch hexadezimale Blöcke wie PortB = 0xFF; . Da F=15(dezimal) bedeutet werden immer 2 Stellen angegeben, da pro Block 8 Anschlüsse vorhanden sind und 4 Bits maximal 15(dezimal) sind.
  • Bei 8 wird eine bestimmte Zeit gewartet. (dafür die importierte Datei)
  • 9 wäre das Programmende. Dieses wird aber nie erreicht, da es in der Endlosschleife verharrt.

Hier noch ein kleines Video in nicht der besten Quali, aber das nächste wird qualitativ besser. ;)

Der nächste Schritt ist nun, den Microcontroller mit 8 LEDs so zu verdrahten, dass auch der Zähler auf meinem Steckbrett läuft. Dazu muss ich mir aber erst mal ein paar einheitliche LEDs bestellen. Dies werde ich in den nächsten Tagen machen. Weitere Erkenntnisse und Bilder folgen im nächsten Artikel … :-)