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
Jun
07
2008

Pimp da Firmen-Kicker Teil 1

fertig gepimpter KickerIm Jahre 2003 habe ich als Zehntklässer ein Schülerpraktikum in einer Firma im Süden Kölns gemacht. Dass den Angaben über meine Kenntnisse in meiner Bewerbung damals kein Glauben geschenkt wird, war mir schon vorher klar. Aber die Aufgaben wurden schnell umfangreicher und komplizierter als das Auspacken von Hardwarelieferungen und der Erstellung von Plänen des Netzwerks für die Administratoren. 

Ein paar Jahre später dann, 2008, arbeitete ich wieder in der gleichen Firma. Diesmal von vorne herein als Software-Entwickler. Abgesehen davon, dass das Firmengebäude nun ein neues und größeres war, stand im Arbeitsraum der Software-Entwickler nun ein Tischfußballtisch, oder auch Kicker genannt. Es wurde eigentlich jede Mittagspause und immer wenn Feierabend war intensiv gespielt.

Vor allem fiel mir aber immer dieses Nutella-Gimmick auf, das auf dem Kicker lag: Ein Button mit WM-Sound, der ertönt, wenn man den kleinen Knopf darauf drückt. Man könnte doch irgendetwas machen, um den Sound immer dann ertönen zu lassen, wenn ein Tor fällt…

Also habe ich den Button eines Tages einfach mit nach Hause genommen und auseinandergenommen. Das Innenleben war recht primitiv: Eine kleine Platine mit Knopfbatterien steckte auf ihr drauf, der Knopf diente als Taster und für die Hörbarkeit war ein winziger Lautsprecher angeschlossen.

Die Knopfzellen habe ich durch Batterien mit größerer Kapazität ausgetauscht, so dass sie einige Zeit länger halten. Der Lautsprecher musste ebenfalls weg, denn ihn habe ich durch einen größeren ausgetauscht, der nun über einen primitiven Transistorverstörker ein verstärktes Signal bekam. Und das flache Nutella-Gehäuse wurde dann auch komplett durch ein kleines Boxengehäuse ausgetauscht, so dass die Vergrößerten Innereien gut hereinpassen. Aus diesem Boxengehäuse standen nun noch ein paar Drähte heraus, so dass ich den Taster durch Kontakte in den Toren ersetzen konnte.

Wie realisiert man das, dass zwei Kontakte kurzgeschlossen werden, wenn der Ball ins Tor gerollt ist? Man kann Pappwippen in die Tore einbauen, die mechanisch vom Ball betätigt werden. Klingt nach Kindergarten, funktioniert aber.

Nach einer nicht allzu langen Testphase wurden aber die Mängel der Pappwippen-Methode klar: Sie lösen manchmal überhaupt nicht aus, blockieren den Ball sogar manchmal und wenn jemand ein bisschen zu energisch spielt, dann gibt es Fehlauslöser.

Ein Arbeitskollege scherzte beim nächsten Match: “Bau doch Lichtschranken ein!”. Ich habe das ernst genommen, weil ich nicht wusste, wie man das realisiert, aber es danach sicherlich wissen würde. Also ran.

Der Ball rollt nachdem er erfolgreich ins Tor geschossen wurde über einen Schlauch (Wie die vom Staubsauger) in ein Reservoir, in das man seitlich vom Tisch hineingreifen kann, um ihn herauszuholen und erneut für den nächsten Anstoß aufs Spielfeld werfen kann.

Wenn der Ball dort hindurch rollt, dann kann man mit 100%iger Wahrscheinlichkeit davon ausgehen, dass ein Tor gefallen ist.

Also habe ich Leuchtdioden seitlich in die Schläuche eingebaut, die im Infrarotspektrum des Lichts leuchten. In der jeweils entgegengesetzten Wand des Schlauchs steckte dann eine Photodiode, die im gleichen Spektrum empfindlich ist. 

Soweit die Theorie im Kopf eines Amateurs – in meinem Kopf also.

Später stellte sich beim praktischen Loswerkeln heraus: Der Durchmesser des Schlauchs ist viel größer als der des Balls. Vielleicht würde der Ball manchmal nicht genau mittig durch den Schlauch rollen? Die Lichtschranke würde dann vielleicht nicht anschlagen.

Die gute Nachricht: Eine Messung ergab: Egal wie der Ball durch den Schlauch rollt, es gibt immer die gleiche Spannungsänderung an der Photodiode.

Die schlechte Nachricht: Die Messung ergab auch, dass die Spannungsänderung verdammt schwach ist. Konkret: Die Photodiode hat entweder einen unendlich hohen Widerstand (Ball verdeckt sie gerade) oder einen Widerstand von drei Mega Ohm.

Also war erst einmal eine ausgedehnte Runde Theorie nötig. Aber das ist es schließlich, weswegen ich die Idee mit der Lichtschranke ernst nehmen wollte: Wissen.

Im Internet stieß ich auf den so genannten Schmitt-Trigger, mit dem man kleine Spannungsunterschiede mittels wenigen billigen Bauteilen verstärken kann. Nach viel Experimentiererei am dem Steckbrett funktionierte es tatsächlich. (Schaltplan des Schmitt-Triggers)

Der Widerstand am Ausgang der Schaltung war jetzt unendlich groß oder lag bei gerade mal 300 Ohm. Damit konnte man nun perfekt den Taster am Soundmodul ersetzen. Beziehungsweise die nun obsoleten Pappwippen, die den Taster bereits ersetzt haben.

Wenn die Schaltung auf dem Papier logisch aussieht und auf dem Steckbrett schlichtweg funktioniert, dann hat man eigentlich garkeine Lust mehr, jetzt noch den Lötkolben auszupacken und sich auszudenken, wie man das Ganze denn auf Platine gebannt kriegt. Andererseits hätte das womit ich mich da beschäftigte keinen Sinn gemacht, wenn nicht auch ein vorzeigbares Resultat dabei herausspringt.

Der Schmitt-Trigger musste doppelt vorhanden sein. Für jedes Tor jeweils einmal. Hätte man beide Tore an nur einen angeschlossen, dann wäre der Gesamtwiderstand beider Tor-Dioden kleiner als der niedrigste Widerstand den eine einzelne Photodiode haben könnte. Dabei soll er ja unendlich groß sein, wenn ein Tor fällt – was unmöglich wäre. Ein Test mit Dioden war hoffnungslos, also mussten es tatsächlich zwei Schmitt-Trigger sein.

Am Ende passte alles schön in die Minibox und ich nahm sie mit zur Arbeit. Direkt nach Feierabend packte ich meinen Rucksack aus und erntete schon erste Kommentare: “Na, McGyver, haste schön zuhause gebastelt?”

Tja, sowas muss man sich dann eben anhören, wenn man seine Zeit in den Augen anderer verschwendet.

Die Kommentare verstummten plötzlich als alles funktionierte. Ha. :)

Die Lichtschrankenkonstruktion erwies sich als perfekt: Egal wie fest man gegen den Tisch tritt oder wie heftig man an den Stäben riss: Es gab nie Fehlauslöser.

Mein letztes Bangen drehte sich um die Fehlerquote bei erfolgten Toren. Jedoch zeigte sich: Egal, wie oft ich es testete, Torschüsse lösten immer den Sound aus. Eine perfekte Zuverlässigkeit!

Irgendwie war das motivierend. Sehr motivierend sogar. Ich beschloss, fünf Euro von jedem Arbeitskollegen einzusammeln, der bereit war, sie mir für ein Nachfolgeprojekt zu geben und loszubasteln.

Die Entwicklung des Nachfolgeprojekts folgt dann im zweiten Teil. Das erste Foto in diesem Artikel verrät schon das Resultat… ;)

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

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

3.14159