Aug
28
2009

AVR-Programmierung unter OS X

atmelchipAtmel kümmert sich mit kostenloser Software zur komfortableren Entwicklung von Software für die hauseigenen Mikrocontroller ganz gut um seine Kunden. Wenn sie Windows benutzen.

AVR Studio (Homepage, für Windows) kann alles, was das Herz begehrt. Es ist eine Programmierumgebung für C- und Assembler-Programmierer, die zusätzlich das Hochladen und Debugging von Programmcode auf den Chip bietet. Außerdem ist ein Simulator mitgeliefert, der die Analyse des Chips mit dem man arbeitet, stark vereinfacht und veranschaulicht.

Abgesehen davon dass man, nach einer kurzen Phase der Enttäuschung darüber dass Kunden mit anderen Lieblingsbetriebssystemen nicht bedient werden, fast Neid empfindet, stellt sich nach etwas Recherche aber dann doch durchaus heraus, dass das kein Grund ist, auf Windows umzusatteln. Jeder Nicht-User von Windows hat schließlich seine guten Gründe.

Also um überhaupt erst einmal AVR-Mikrocontroller zu programmieren, braucht man Compiler, Bibliotheken, Header-Dateien, Assembler und das Tool zum Hochladen des Codes.

Toolchain

Fink-Nutzer mögen einfach die diversen AVR-Pakete installieren, das geht schnell und einfach. (Mit Paketnamen: avr-binutils, avr-gcc, avr-libc, avrdude). Ich gehe hier nicht weiter auf Fink ein, da diejenigen, die jetzt nicht wissen wie das geht oder was Fink überhaupt ist, sowieso ein paar mehr Seiten an Doku lesen müssten und da ich es selbst nicht so gemacht habe (Beispielsweise deswegen weil der Assembler den ich haben wollte meines Wissens nach nicht per Fink zu erhalten ist).

Objective Development hat ein sehr praktisches Paket herausgebracht: Das Crosspack bietet alle Tools die man braucht. Gleichermaßen für Intel-Macs wie PPC-Macs.

Jetzt steht man zwar noch ohne GUI-Tools da, aber per Konsole kann man schon losprogrammieren. Mit dem Lieblingstexteditor programmiert man drauf los, kompiliert mit “avr-gcc” oder assembliert mit “avra”, lädt das Kompilat mit “avrdude” hoch und mit selbigem Tool ändert man auch die FUSE-Werte. Das ist nicht unkomfortabel, wenn man sich mit Shellscripten und einem guten Texteditor ausrüstet. (Empfehlung: VIM – ist bereits vorinstalliert)

Allerdings fehlen noch Syntax-Highlightning, Code-Completion, Upload-Button, FUSE-Editor, Registerbrowser usw.:

Entwicklungsumgebung

Beim Crosspack sind bereits Xcode-Templates mitgeliefert, aber da ich jene nicht benutze, bleibt das nur nebenbei erwähnt.

Ich kann Eclipse wärmstens empfehlen: Es handelt sich um eine Entwicklungsumgebung, die – da Java-basiert – auf jedem Betriebssystem heimisch ist und Plugins für jede Programmiersprache und beinahe jedes Framework liefert. Sich an dieses sehr umfangreiche Programm zu gewöhnen ist eine gute Idee, da man sich damit nicht an ein Betriebssystem oder Framework oder ähnliches bindet. Die neueste Version für OS X hängt auch nicht mehr vom Carbon-Framework ab, sondern baut die Oberfläche endlich auf Cocoa auf, was viele Vorteile gebracht hat.

Um Eclipse den Umgang mit AVRs beizubringen, braucht man das entsprechende Plugin: AVR-Eclipse. Auf die Installation gehe ich nicht weiter ein, da sie nicht kompliziert ist und eine Anleitung bald ohnehin schnell veraltet sein kann. Das Wiki der Projektseite bietet eine gute Anleitung.

Der praktische Upload-Button!

Als nächstes bringt Eclipse allgemein natürlich den Syntax-Parser, die Code-Completion, Syntax-Highlightning, eine schöne Organisationsstruktur für Projekte, Debuggingmöglichkeiten, Symbolbrowser und so weiter.

AVR-Plugin-spezifischer sind der praktische Upload-Button, der AVR-Device-Explorer, in dem man alle Register, Ports und Interrupts chipspezifisch einsehen kann, die Programmer-Integration (über die man den Typ des Mikrocontrollers übrigens inklusive Taktung automatisch auslesen kann) und die Möglichkeit, alles projektspezifisch einzustellen.

Bilder sagen mehr als tausend Worte:

Der AVR Device ExplorerFUSE-Editorlockbit_editor

Wer die Arbeit mit Eclipse bereits gewohnt ist, der wird dieses Plugin sicher mögen.

Wenn allerdings schnell mal ohne großes Terminal-Bla FUSEs ausgelesen/geändert, Kompilat hochgeladen oder ähnliches getan werden soll, dann ist es übertrieben, extra ein Eclipse-Projekt aufzuziehen.

Das perfekte Tool hierfür heißt AVRFuses. avrfuses_about

Es ist in C#.NET programmiert, was wiederum bedeutet, dass es unter Windows, Linux (mit Mono) und OS X lauffähig ist.

Da es eine Vielzahl von AVR-Chips unterstützt und an sich recht spartanisch ausgestattet (Es kann das was man braucht und mehr nicht) ist, nutzt man es am besten um schnell mal ein paar Bits zu setzen, wenn man fremde Programme in den eigenen Mikrocontroller schicken will oder ähnliches.

Die eigentlichen Features:

  • Programme hochladen/auslesen
  • EEPROM hochladen/auslesen
  • Chip löschen
  • FUSE-Bits setzen/auslesen

Screenshots:

avrfuses_1avrfuses_2

3 Kommentare
Jan
22
2009

Dekorative Laufschrift

Dekoratives LauflichtSpätestens einen Monat vor Weihnachten war klar: Ich brauche ein Geschenk für meine Freundin.

Es lag sofort nahe, dass ich eins basteln könnte. Basteln ist günstig und macht Spaß. Abgesehen davon ist das Produkt dann ein sehr individuelles Geschenk.

Die eigentliche Idee habe ich zwar irgendwann in der Vergangenheit schon einmal im Internet gesehen, aber ich habe das alles trotzdem einfach mal ohne Pläne von anderen aufgebaut, weil es dann auch lehrreicher für mich war.

Nun, zur Idee: Ich plante, ihr eine Laufschrift, die von LED-Punktmatrix-Elementen dargestellt wird, zu schenken, die in ein leicht milchiges Gefäß von der Größe eines Teelichts eingebaut ist. Oben sollten dann dekorativ kleine Pflänzchen herausstehen.

Also bestellte ich mal los: Die Schaltung selbst würde eigentlich nur aus folgenden Teilen bestehen:

  • Europlatine
  • Mikrocontroller (AVR ATMEGA8 ist hier völlig ausreichen)
  • Zwei 5*7 Pixel LED-Matrizen
  • Verbindungsdraht zum Verlöten, da ich darauf verzichtete, die Platine zu ätzen
  • Entsprechende Vorwiderstände für die LED-Matrizen

Die Verdrahtung sollte dann recht simpel sein. Zwei nebeneinander gesetzte 5*7-Pixel-Matrizen ergeben eine 10*7-Pixel-Matrix. Wenn man sie “multiplext”, dann braucht man 10 +7 Pins am Mikrocontroller, um sie anzusteuern. Das sind dann also 10 Pins jeweils pro Spalte und 7 Pins jeweils pro Zeile. Laut Datenblatt brauchen die Matrizen (Bezeichnung: Kingbright TA07-11HWA) 2Volt Spannung und 25mA Strom pro LED-Einheit.

testschaltungDie Betriebsspannung des Mikrocontrollers war dann so ein Problem: Einerseits sollte alles schön klein sein, andererseits bräuchte ich alleine drei Mignon-Zellen für nur 4,5Volt. Das wäre nicht mehr so optimal dimensioniert für ein Teelicht-großes Geschenk. Tests mit einem kleinen Prototypen der Schaltung ergaben, dass der Mikrocontroller bei 3V Spannung noch problemlos arbeitet! Also habe ich mich dazu entschlossen, einfach mit zwei Mignonzellen zu arbeiten und fertig. Bei höheren Arbeitstakten des Mikroprozessors wäre das wohl problematisch, aber bei 1MHz ist das in Ordnung.

Da die Schaltung nicht wirklich kompliziert ist, habe ich sie direkt auf Platine gebannt, um die Software direkt los schreiben zu können, ohne das später noch Hardware-Änderungen aufgrund von Umständen, die ich vorher eventuell nicht bedacht habe, auftauchen. Software-Entwicklung macht viel mehr Spaß, wenn sich nicht ständig etwas ändert…

Der fertige Aufbau:

Fertige Platine von oben

Kein Inbegriff von Ordnung

Kein Inbegriff von Ordnung

Für die nächste Schaltung werde ich ganz sicher bunte Drähte benutzen.

ZeichensatzAls nächstes sollte die Software folgen. Da das Display 7 Pixel hoch ist, erdachte ich mir einen Zeichensatz (mit Alphabet und ein paar Sonderzeichen), in dem alle Buchstaben 7 Pixel hoch und vier Pixel breit sind, so dass man einfach ein C-Character-Array (8 Bit sind eins zu viel – egal, also verschenkt!) anlegt, das 4*Anzahl_der_Zeichen Felder lang ist.

In einem anderen Array sollten dann später die Buchstabenfolgen stehen, die auf dem Display tatsächlich angezeigt werden. {1, 2, 3} wäre demnach “ABC”.

 

Benutzt für Spalten und Zeilen die Notation von der Abbildung der Matrix-Verdrahtung

Notation folgt der Abbildung der Matrix-Verdrahtung

Die Anschlüsse des Displays auf der Platine sind fast wirr über die Ports auf dem Mikrocontroller verteilt, obwohl ich mich bemüht habe, sie an möglichst wenige Ports zu verbinden, um möglichst wenig Bitshifterei zu haben.

 

 

Verdrahtung der Matrix-Elemente

Die Spalten sollen HIGH-Pegel bekommen, die Zeilen LOW-Pegel. Das Programm schaltet zunächst alle Spalten auf LOW, steuert die Spalten bitmustergerecht an und gibt der entsprechenden Spalte dann HIGH-Pegel.

In festen Zeitintervallen wird die ganz rechte Spalte in die Spalte links daneben kopiert und aus dem Zeichensatz-Array das passende nächste Bitmuster wieder in die Spalte ganz rechts gesetzt, was prinzipiell wie ein Schieberegister funktioniert. Die Prozesse der Anzeige und der Zusammensetzung der darzustellenden Pixel finden getrennt statt, wodurch man Bildaufbaurate und die Geschwindigkeit der Laufschrift problemlos unabhängig voneinander einstellen kann.

Ab dem Punkt, ab dem alles funktionierte, konnte ja mit dem Einbau in den dekorativeren Teil des Geschenks begonnen werden, was eigentlich auch einfach nur mittels Heißkleber und Origami-Anleitungen geschah ;) :


Den C-Sourcecode gibt es hier zum Download.

0 Kommentare
Written by Jacek in: Elektronik | Schlagwörter:, , , , , , ,

Powered by WordPress. Theme: TheBuckmaker. Darlehen, Geld verdienen

3.14159