Home: www.rowalt.de
Keine Angst vor Mikrocontrollern!
Der einfache Einstieg in die Welt der AVRs (2)
Roland Walter, DL7UNO

Die aktuellen Qelltexte und Compilate zu den Beiträgen

Die Software

Als Ergänzung zum Bascom-AVR-Basic (übrigens von einem holländischen Hersteller) habe ich einige kleine Windows-Programme entwickelt, die speziell auf unser AVR-Board zugeschnitten sind. Diese Hilfsprogramme sind auf der AVR-Tools-Seite meiner Homepage zu finden. Doch zu erst zu Bascom:

Software: Bascom

Das Bascom-AVR-Basic sollte direkt von der Web-Seite des Herstellers www.mcselec.com heruntergeladen werden, weil Bascom sich relativ schnell weiterentwickelt. Die kommerzielle Bascom-Version wird erst benötigt, wenn AVRs mit mehr als 2KB Programmspeicher eingesetzt werden. Für unsere Zwecke reicht die freie Version völlig. Übrigens hat der Hersteller von Bascom auf meine Bitte hin einige kleine Erweiterungen eingebaut, die die Arbeit mit unserem Testboard sehr komfortabel machen. Um in den Genuß dieser Erweiterungen zu kommen, bitte nur Bascom ab Version 1.11.6.5 benutzen. Das Bascom-AVR-Basic ist nicht nur einfach ein Compiler. Die Bascom-IDE enthält zusätzliche Tools wie z.B. ein einfaches Terminal-Programm und einen AVR-Simulator, aber auch ein Tool, mit dem spezielle Zeichen und Grafiken für LCD-Anzeigen entworfen werden können.

Die Bascom-IDE

Erläuterungen zur Installation spare ich mir. Hier nur einige Hinweise zur Einrichtung des Brenners unter Bascom. Durch das Entgegenkommen des Bascom-Herstellers haben wir zwei Möglichkeiten. Dazu bitte den Menüeintrag Options/Programmer anklicken.

Zum einen kann Bascom das Programm selnbst (ohne ein externes Programm aufzurufen) übertragen. Dies setzt aber voraus, daß das AVR-Board mit externer Stromversorgung arbeitet. Eine Stromversorgung via LPT ist in diesem Fall leider nicht möglich.

Als Programmer wählt man "Universal MCS Interface" und in der Karteikarte "Universal" wird "WinAVR/TwinAVR and SP12" ausgewählt (siehe nächstes Bild). Das ist normalerweise alles. Wer allerdings eine andere Schnittstelle als LPT1 verwendet bzw. wenn LPT1 nicht die Hardware-Portadresse $378 hat, dann gibt‚s zusätzliche Konfigurationsarbeit. Das Vorgehen kann ich hier aus Platzgründen nur kurz anreißen: Datei prog.settings im Bascom-Verzeichnis mit einem Texteditor öffnen und die Portadresse der verwendeten parallelen Schnittstelle ändern.Typische Werte sind $278, $378 oder $3BC. Die Datei prog.settings enthält eine kurze Syntax-Beschreibung. Nach dem Speichern Bascom beenden und neu starten.
Achtung: Bitte keine Semikolons als Einleitung eines Kommentars in die Datei prog.settings schreiben. Falls dort welche sind (Bascom älter als 1.11.7.1), dann diese bitte entfernen, sonst läuft die Programmierung nicht. Schuld ist eine falsche Microsoft-Dokumentation: Nicht das Semikolon wird als Kommentaranfang erkannt, sondern ein TAB wäre erforderich.

Bascom als Programmer

Die zweite Möglichkeit, das compilierte Programm zum AVR zu übertragen, ist mein Freeware-Tool TwinAVR (dazu weiter unten noch mehr). Wenn man ein AVR-Programm per Kommandozeile an TwinAVR (WinAVR) übergibt, wird der Brennvorgang ohne weitere Nachfrage sofort gestartet. Nach dem Brennen kann TwinAVR mit der ESC-Taste beendet werden. Die Zusammenarbeit mit Bascom ist also ebenfalls sehr komfortabel. TwinAVR hat außerdem den Vorteil, daß man das Programmierkabel nach dem Programmieren nicht jedesmal abziehen muß, weil hier der Zustand der Reset-Leitung nach dem Programmieren explizit festgelegt werden kann

Zur Einbindung von TwinAVR stellt man "External Programmer" ein und wählt die Karteikarte "Other". Dort muß zum einen natürlich der Programmpfad von TwinAVR angegeben werden. Zum anderen benötigt TwinAVR aber auch den Namen der Datei, die gebrannt werden soll. Diesen könnte man samt Pfad explizit angeben, müßte ihn dann aber bei jedem neuen Programmlisting ändern. Trägt man stattdessen "{FILE}" (ohne Anführungsstriche) ein, wird immer das aktuelle Compilat an WinAVR übergeben. Die Checkbox "Use HEX file" darf nicht markiert sein, damit eine Binärdatei (*.bin) an WinAVR übergeben wird (siehe folgendes Bild).

WinAVR als Programmer

Welche der beiden Programmiermöglichkeiten man nutzen will, ist zum Teil eine Geschmacksfrage. Wird die Stromversorgung per LPT verwendet, kommt allerdings nur WinAVR infrage. Probieren Sie im Zweifelsfall einfach beides aus. Die restlichen Einstellungen in Bascom dürften weitgehend selbsterklärend sein. Ich vertraue sie Ihnen ohne weitere Kommentare an.

Software: WinAVR

WinAVR

Das Brennprogramm WinAVR ist weitgehend selbsterklärend, den Rest erklärt die Hilfe. Die selten benötigten Optionen sind über das System-Menü erreichbar (siehe folgendes Bild).

WinAVR-Systemmenü

Im Einstellungsfenster von WinAVR kann neben der gewünschten parallelen Schnittstelle auch festgelegt werden, wie WinAVR die einzelnen Leitungen nach Ende des Brennvorgangs hinterlassen soll. Das ist insbesondere bei der Reset-Leitung und den Leitungen für die Betriebsspannung ein nützliches Feature: Wenn der AVR wie bei unserem Board in der Zielschaltung programmiert wird, muß die Reset-Leitung nach dem Ende des Brennens 5 Volt führen, anderenfalls würde der AVR ständig im Reset-Zustand gehalten werden (Reset ist beim AVR Low-aktiv). Solange die Reset-Leitung "in der Luft hängt", kann der AVR-interne PullUp-Widerstand für den High-Pegel sorgen. Aber niemand wird Lust haben, das Programmierkabel permanent an- und abzuklemmen.

Das Einschalten der Betriebsspannung nach dem Brennen ist für die Stromversorgungs-Variante via LPT gedacht. Die Zustände der LPT-Leitungen bleiben normalerweise so lange erhalten, bis sie ein anderes Programm überschreibt (Ausnahme: Stromsparschaltung für die LPT aktiviert). Übrigens beißen sich mehrere Programme nicht, wenn sie gleichzeitig auf die LPT zugreifen, denn in unserem Fall erfolgt der Zugriff unter Umgehung von Windows direkt auf die Hardware-Ports. LPT-Zugriffe über Windows-Systemfunktionen wären bei uns viel zu langsam gewesen.

WinAVR-Einstellungen

Software: AVRPower

Mit dem Programm AvrPower (folgendes Bild) wird die LPT-Stromversorgung erledigt, soweit das nicht über WinAVR oder AvrTerm gewünscht wird. Das Programm überwacht auch den tatsächlichen Status der Stromversorgungsleitungen und verändert im Fall des Falles den Zustand der Checkbox "Power on" automatisch, sobald ein anderes Programm den Zustand der Stromversorgung ändert.

LPT-Stromversorger

Software: AVRTerm

Das von mir entwickelte Terminalprogramm orientiert sich eng an den Bedürfnissen, die ich schon seit Jahren bei der AVR-Entwicklung hatte. Manchmal braucht man einen Anlaß, um einen Wunsch umzusetzen, und der FUNKAMATEUR-Artikel war ein solcher ;-)

Ich hoffe, auch AVRTerm ist weitgehend selbsterklärend. Nach Einstellung der Schnittstellen-Daten braucht man nur auf "Connect" zu drücken, und die serielle Schnittstelle wird göffnet. Gleichzeitig wird auch die LPT-Stromversorgung aktiviert. Markiert man die RTS-Checkbox, dann liegt am RTS-Ausgang des MAX232 +5V an, anderenfalls 0V. Umgekehrt ist die CTS-Statusanzeige im Fenster rot, wenn man am CTS-Eingang des MAX232 +5V angelegt hat. Bei 0V ist die CTS-Statusanzeige blau. Diese beiden Handshake-Leitungen können beliebig vom AVR aus genutzt werden - z.B. ist ein echter Taster manchmal unbequemer als ein Software-Taster oder man will nicht ständig den Kopf drehen, um gleichzeitig eine LED und das Terminalprogramm zu beobachten.

AVRTerm

AVRTerm ist (wie alle beschriebenen AVR-Tools außer BASCOM) nicht für die Arbeit unter NT geeignet, da direkte Hardware-Zugriffe verwendet werden. Aber dafür sind sie auch unter Windows 3.x lauffähig und das nutzen ja viele noch für technische Zwecke. Für NT gibt es zwar einige Treiber wie z.B. GiveIO, die direkte Hardware-Zugriffe freischalten. Aber bei meinen Tests unter NT4 funktionierten die Zugriffe unter nicht reproduzierbaren Umständen mal korrekt und mal gar nicht. Soll heißen: Einen Versuch ist es wert, aber garantieren kann ich es nicht.

Ergänzungen zur Hardware

1.)Kennzeichnen Sie Ihren Experimentier-AVR mit einem Farbpunkt! Atmel gibt an, daß der Programmspeicher des AVRs bis zu 1000x gebrannt werden kann. Wenn man häufig probiert (und das empfehle ich ausdrücklich), kann man diese Anzahl durchaus erreichen. Es wäre schade, wenn ein AVR wegen Programmfehlern als angeblich "ausgebrannt" weggeworfen wird.

2.)Wenn das Brennen ständig mit der Meldung "No AVR connected or unknown device" abgebrochen wird, kann eine miserable parallele Schnittstelle schuld sein. Der Entwickler von SP12 beschreibt auf seiner Homepage einen "Dongle", der in solchen Fällen Abhilfe schaffen kann. Der Dongle besteht im wesentlichen aus einem 74HC126 (HCMOS Tri-State-Quad-Puffer) und kann mit im Programmierstecker untergebracht werden. Obwohl der Dongle seine Versorgungsspannung aus der LPT bezieht, verbessert er die Signalverhältnisse gewaltig.
Internetadresse: www.xs4all.nl/~sbolt/e-spider_prog.html

3.)Schauen Sie ruhig ab und zu auf meine Homepage, Sie werden hier immer wieder Hinweise über die Artikel hinaus finden. (http://www.rowalt.de)


Und im nächsten Artikel geht's endlich los...

Ab nächstem Artikel gehen wir an's Innenleben der AVRs. Ich will versuchen, nach und nach möglichst systematisch die AVR-Funktionen abzuarbeiten. Der naheliegende Start ist das Kennenlernen der I/O-Pins in ihrer Urfunktion, also zunächst ohne die mögliche Umnutzung für Timer, externe Interrupts usw.

Und da wir die LEDs benutzen werden, sind Sie gut beraten, wenn Sie bei der LED-Bestückung tatsächlich die Farben verwenden, die ich im Stromlaufplan angegeben habe...