Jun 3 2011

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

…wie ja im letzten Artikel versprochen nun die Fortsetzung ;)

Ich habe mir ein LED- und Kohleschicht-Wiederstandssortiment gekauft und kann dies auch jedem, der mit der Elektrotechnik anfängt, oder auch schon dabei ist, empfehlen. Der große Vorteil ist, dass man alles auf einem Blick in einer Kiste hat, was Wiederstände und LEDs angeht ;) . Ich habe mir letztes Jahr 1.5kg Wiederstände gekauft, aber leider ist es immer keine einfache Sache den richtigen Wiederstand aus diesem “Wiederstandsknoll” zu finden.

Um den Microcontroller auf dem Experimentierboard zum Laufen zu bringen, muss man erstmal die Grundschaltung zusammenstecken. Die Grundschaltung besteht lediglich aus einer +5V Gleichspannung, einem 10kOhm Wiederstand ,einem 100nF Kondensator und sieht wie folgt aus:

Grundschaltung Atmega32Nachdem ich diese Schaltung nun zusammengesteckt habe, musste ich noch meine LEDs mit den Vorwiederständen (1kOhm) an die entsprechenden Ausgängen(PB0-PB7) und VCC verbinden. Die Schaltung hat sich nun um 8 LEDs mit jeweils einem Wiederstand erweitert.

Daraufhin habe ich nochmal alle Aus- und Eingänge geprüft, sodass ich sichergehen konnte, dass diese den Zustand haben, welchen ich erwartet haben. Nun war die Schaltung fertig aufgebaut und ich konnte den Zähler starten.
Meine Schaltung auf dem Experimentierboard sieht folgendermaßen aus:

Steckbrett Counter

Nun habe ich auch noch ein Video gemacht, hoffe die Qualität ist diesmal besser:

Wichtig ist dabei immer eine +5V stabilisierte und rauschfreie Gleichspannung zu verwenden. Falls dies nicht der Fall ist, läuft die Schaltung nicht. Wie man sich eine Schaltung baut, die genau diese +5V stabilisierte Gleichspannung liefert, erkläre ich in meinem nächsten Artikel.

Mein nächstes Projekt kommt bestimmt in den nächsten Tagen und ihr werdet es HIER als Erstes erfahren!

 


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 … :-)