Meine Mikrocontroller-Aktivitäten (mit Atmel AVR)


Einführung

Es gibt eine Unmenge von Seiten im Netz, die sich mit der Programmierung von Atmel AVR Mikrocontrollern sowie den dazu nötigen Tools beschäftigen. Und daher gibt es auch mehr als einen Weg, um zum Ziel zu gelangen - die für mich bedeutsamen Links habe ich daher weiter unten aufgelistet.
Daher möchte ich im Wesentlichen nur darstellen, welche Tools ich benutze und dann nach und nach die damit realisierten Projekte vorstellen - soweit neben QRL, XYL- und Harmonischen-Pflege sowie Funken noch Zeit dazu bleibt.


Meine Tools
  • Entwicklungsumgebung 1: Auf einem SuSE 11.2 Linux-System benutze ich gcc 4.2.1 und einen usbasb-USB-Programmieradapter mit der Software avrdude 5.5. Als Reserve halte ich noch einen STK200-kompatiblen Parallelport-Adapter pony-stk sowie einen DT006-Adapter bereit. Auf Guido Sochers Site wird beschrieben, wie man sich die Entwicklungsumgebung (= GNU-Toolchain) für Linux aus den Quellen zusammenbaut, neuere SuSE-Linuxe bieten jedoch die Möglichkeit, sich eine sog. Toolchain für den AVR meist problemlos zu installieren (heißt bei SuSE crossavr).

    Eine weitere Anleitung beschreibt, wie man sich die aktuellste Version der GNU-Tool-Chain (= GNU-C-Cmpiler, AVR-LIBC, binutils und avrdude) erstellt, hier werden u.a. auch die neuesten Patches berücksichtigt - das habe ich mir einmal "angetan".

  • Entwicklungsumgebung 2: Dies ist ein Windows XP-System auf dem AVR-Studio 4.18 (Build 700), WinAVR, BASCOM, PonyProg 2.06f Beta und avrdude 5.1 mit GUI 0.3 installiert sind. Als Programmieradapter kommen DT006 (mit avrdude) und SP12 (mit BASCOM) zum Einsatz. Aber eigentlich entwickle ich mit BASCOM nicht, ich wollte mir das nur mal anschauen.
  • Weitere Hardware: Ich benutzte anfänglich das hier abgebildete AVR-Testboard von Roland Walter (DL7UNO) mit einem AT90S2313

    Bild meines aufgebauten R.Walter-AVR-Testboards, Rev. 01

    Seit einiger Zeit benutze ich jedoch das ATmega8 Experimentierboard von Ulrich Radig für die meisten Entwicklungen.

  • Ein recht einfacher Aufbau zur Verifikation der GNU-Toolchain wird bei Guido Socher ebenfalls beschrieben, die Schaltung und das Programm ist so simpel, da kann man eigentlich fast nichts falsch machen, und die Begeisterung und der resultierende Motivationsschub, wenn man es letztendlich zum Blinken gebracht hat, sind einfach riesig!

    Bild des ATmega8-Boards n. G.Socher

    Ich habe mir angewöhnt mit diesem Programm sowie einer LED, jede Schaltung, die ich mit einem AVR aufbauen, bei der ersten Inbetriebnahme zu überprüfen, das Programm ist recht schnell auf einen anderen Port bzw. ein anderes Port-Bit zu ändern. Damit weiss man, dass der AVR sowie seine ISP-Schnittstelle schon mal tun.

Zur Zeit (2009) verwende ich hauptsächlich das o.g. SuSE 9.1 Linux-System, vor allem weil ich auch beruflich viel mit Programmentwicklung unter Linux beschäftigt bin (allerdings nicht für AVR).

Im Laufe der Zeit wurden o.g. Entwicklungsumgebungen "ausser Dienst gestellt", d.h. die PCs waren einfach zu alt geworden. Daher bin ich dazu übergegangen, jeweils den aktuell für mit Linux versehenen PC mit der aktuellen AVR-Entwicklungsumgebung zu versehen, natürlich blieb auch nicht aus, dass das eine oder andere für den AVR entwickelte Programm an Neuerungen z.B. des Compilers angepasst werden musste. Aktuell (2016) ist das dann avr-gcc 4.8.3 für SuSE 13.1 und SuSE 13.2.

Ab etwa Mitte 2015 bin ich beruflich auch mit der Arduino-Platform in Ber¨hrung gekommen, daher "zieren" nun verschiedene Varianten der Arduino-Entwicklungsumgebung meinen Windows PC. Damit ist es möglich, sowohl den AVR als auch den MSP430 (Energia), ARM-basierende Boards (z.B. Teensy) und auch den ESP8266 zu programmieren.
Für die native AVR-Programmierung muss jetzt ein Raspberry Pi Mod. 2B herhalten, die Fenster des Editors werden dabei auf dem Windows PC angezeigt. Am Raspberry ist jetzt der USBasp angeschlossen sowie via USB noch die eine oder andere serielle Schnittstelle für Debugzwecke.

Nachträge:

  • 2008: Ein nicht mehr benötiger STK200-kompatibler Programmieradapter (Nachbaus) eines Bekannten steht mir ebenfalls zur Verfügung
  • 04/2009: Ein USB-Programmier-Adapter (USBasp) aus dem Shop von U.Radig erweitert meine 'Adaptersammlung'. Damit avrdude den verwenden kann, muss ein Upgrade auf eine neuere Version durchgeführt werden (so ab Version 5.5 sollte der Adapter unterstützt werden)

Projekte

Gut, da ich erst vor kurzem "richtig" damit angefangen habe, gibt es hier eigentlich noch nichts Rechtes zu berichten. Im wesentlichen versuche ich die mich interessierenden Beispiele aus der Funkamateur-BASCOM-Serie (R.Walter, DL7UNO) in C nachzubilden um die grundsätzliche Funktionsweise eines AVRs bzw. seiner "Innereien" zu verstehen.

Zum Einlernen habe ich u.a. Folgendes mal ausprobiert:

  • Ampelansteuerung, bedarfsgesteuert (INT0-Interrupt)
  • Lesen und Schreiben von der seriellen Schnittstelle, letztendlich dann auch mal mit der UART-Bibliothek von P.Fleury
    Die UART-Schnittstelle ist beim Debuggen recht nützlich.
  • Zählerbeispielprogramme 0008.BAS ... 0010.BAS von R.Walter in C umgesetzt.
  • Beispielprogramme 0013.BAS und 0014.BAS (Timer-Overflow, Capture) nach R.Walter in C umgesetzt
  • 10-Bit PWM mit AT90S2313 für LED-Ansteuerung
  • Experimente mit dem Analog-Comparator (0017.BAS von R.Walter in C) sowie Atmel-Applikationsnote AVR400 (6 Bit-ADC, mit UART-Ausgabe, von ASM nach C)
  • Ansteuerung eines I2C-I/O-Bausteins PCF8574, hier wird die I2C-Master-Bibliothek von P.Fleury benutzt
  • Ansteuerung diverser LCD-Displays
  • Blinken, Lauflicht via Timer-Interrupt
  • Mal mit dem genialen Tasten-Entprell-Code von P.Danegger rumgespielt...

Folgendes wurde bisher realisiert:

  • Abfluganzeige für den LEGO-Flughafen meines 6-jährigen Sohnes, besteht aus einigen (blinkenden) LEDs, Tastern sowie einem LCD-Display, über das Flug-Infos ausgegeben werden - wie die Anzeigetafeln in den Flughäfen - sozusagen, das Weihnachtsprojekt 2007 (AT90S4433).
    Flughafenanzeige, Firmware noch vorlaeufig
    Verwendete Techniken:
    • Blinken via Timer
    • Tasten-Abfrage bzw. Entprellen via Timer
    • LCD-Ansteuerung (1*16 als 2*8)
    • negative Spannung für LCD-Kontrast via ICL7660

  • Elektron. Würfel als Ferienprojekt für unseren 11-jährigen Feriengast Victor aus der Ukraine (ATtiny2313). Elektron. Wuerfel auf Lochrasterboard
    Verwendete Techniken:
    • Blinken via Timer
    • Tasten-Abfrage bzw. Entprellen via Timer
    • Timer für Zufallsgenerator verwendet
    Die Firmware lässt sihc mit geringen Änderungen auch für den Würfelbausatz von Pollin einsetzen (war notwendig geworden, da Original versehentlich mit 9V betrieben).
  • Servo-Tester zur Unterstützung der Modellbauaktivitäten meines Sohnes (ATmega8). Servo-Tester auf Lochrasterboard
    Verwendete Techniken:
    • Modifikation des Bauvorschlags von J. Hermen
    • Tasten-Abfrage bzw. Entprellen via Timer
    • PWM via Zeitschleife/Delay

  • Codeschloss nach Funkamateur **/****, diese Schaltung verwendete ursprünglich einen AT90S1200 und das Assemblerlisting ist beigefügt. Leider habe ich es nicht geschafft, das mit einem AT90S1200 bzw. einem ATtiny2313 zum ordnungsgemäßen Funktionieren zu bringen, deshalb wurde die gleiche Logik mit einem C-Programm nachempfunden - jetzt funktioniert es.

Geplant bzw. im "Aufbau" sind u.a. Folgende:

  • CQ-Papagei (ATmega8) Aufbauen möchte ich eine Schaltung ähnlich den von DG7XO bzw. DL1DMW vorgestellten Schaltungen - von beiden habe ich mir bereits einige Anregungen geholt. Das Gerätchen soll zudem über einen Roger-Piep sowie die Möglichkeit zur DTMF-Tonerzeugung verfügen (via Anschluss einer 12-er Tastatur-Matrix o.ä.)
    Mit längeren Unterbrechungen nimmt dieses Projekt langsam doch Formen an
  • IP-Switch (ATmega32), eine (Sammlung) von Steckdosen, die man übers Internet ein- bzw ausschalten kann. Dieses Gerät basiert auf dem sog. AVR-NET-I/O-Bausatz von Pollin-Elektronik.
    Status: im Einsatz, noch etwas Probleme mit der Web-Seite...
  • GPS-Display bzw. APRS-Tracker (ATmega8), eine Anwendung, die urspünglich auf der Schaltung von N4TXI aufbaut, dann sich doch ganz anders entwickelt hat. Gegenwärtig ist bisher nur das GPS-Display implementiert.
  • Rotor-Steuerung (ATmega32), zur Steuerung eines einfachen Fernsehrotors und Anzeige der Richtung. Die Idee ist es, die Richtung anstelle mit einem nachzurüstenden Poti über einen Kompasssensor zu ermitteln. Über Sinn oder Unsinn es so 'kompliziert' zu machen, lässt sich sicher trefflich streiten...
  • mehr wird folgen...

AVR Links

Diese Seiten geben gute Hilfestellung beim hard- und softwareseitigen Einstieg in die AVRs:

Nicht vergessen sollte man die diversen Wikis und Foren zu Mikrokontrollern allgemein, und speziell zu dem AVR bzw. der Programmierung des AVR mittels gcc (die Reihenfolge beinhaltet sicher keine Wertung!): Auf den verlinkten Seiten finden sich weitere nützliche Links, dieses Thema ist z.Zt. sehr lebendig und bei allen hier nicht Aufgeführten möchte ich mich auch gleich entschuldigen... man kann echt den Über- und Durchblick verlieren.