AVR Mikroprozessoren

Allgemein

Mikroprozessoren sind im Prinzip kleine Computer. Bloß dass sie nur aus einem einzigen Chip bestehen. Dieser enthält dafür alles, was man zum Steuern von irgendwelchen Sachen braucht. Ich habe mich für den Atmel ATMega8 Chip entschlossen, weil er sehr leicht programmierbar ist (sogar ohne ihn später aus dem System auszubauen), und trotzdem relativ leistungsfähig. Er wird mit bis zu 16MHz getaktet, womit er mehr leistet als ein 286 *g*. Ausserdem ist Speicher, ein Flash, Aus- und Eingänge und vieles mehr bereits eingebaut.

Programmierung unter Linux

Assembler

Obwohl es unter Windows haufenweise Programme gibt, mit denen man die Prozessoren programmieren kann, ist die Menge der brauchbaren Programme unter Linux eher eingeschränkt. Deshalb wollte ich kurz erklären, wie ich es mache.

Programmierer: Ich benütze den Ponyprog2000 von hier. Dieser ist einerseits recht flexibel durch die graphische Oberfläche (gut zum setzen der Fuses), bietet aber auch die Möglichkeit über Skripte ihn von der Kommandozeile zu steuern. Auf der Homepage von lancos ist auch die Anleitung, sich einen Programmieradapter zu bauen. Ich benütze den an der parallelen Schnittstelle, da dieser am einfachsten ist. Vermutlich würde die Lösung mit den drei Widerständen auch funktionieren, aber ich hatte bereits den mit dem IC gebaut, als ich feststellte, dass meine Schnittstelle kaputt war :( .

Da ich keine vernünftige IDE für ASM gefunden habe, habe ich Quanta genommen, und mir eine schöne Syntax-Hervorhebungsdatei gebaut. (Hier zu haben)

Quanta bietet auch die Möglichkeit Skripte zu definieren (Einstellungen/Aktionen festlegen). Dort kann man als Eingabe die aktuelle Datei angeben. Ich habe mir solch ein Skript gebastelt, und kann nun mittels einen Knopfdruck das Programm kompilieren und hochladen.

Das Skript:

cd output
cat - >output.asm
rm output.hex
wine -- ../AVRStudio/avrasm32.exe -fI output.asm
ponyprog2000 script.e2s

Wie man sehen kann, habe ich mir ein "output" Verzeichnis eingerichtet, in dem die Datei erst erstellt wird, dann mittels avrasm32.exe (von ATMEL) kompiliert und von ponyprog2000 hochgeladen.

Der Vollständigkeit halber hier auch noch die Skriptdatei script.e2s

SELECTDEVICE ATMEGA8
CLEARBUFFER
LOAD-PROG output.hex
#LOAD-DATA output.rom
WRITE&VERIFY-ALL

Für C Code benütze ich mittlerweile doch KDevelop, welches einige nette Features hat. Auch ist die Bedienung über Makefiles für mehrere Units einfach Pflicht. Was mich einige Zeit und Mühe gekostet hat, war das einrichten eines Debuggers für KDevelop. Man kann natürlich gdb nehmen, welcher aber ein bisserl altmodisch aussieht (obwohl er natürlich viel leistungsfähiger ist), aber KDevelop ist eben hübscher. Hier ein kurzer Ablauf, wie es bei mir funktioniert hat:

  1. Hoffentlich schon vorher installiert: cdk4avr mit simulavr und gdb
  2. Link von /opt/cdk4avr/bin/avr-gdb auf gdb setzen
  3. In Kdevelop unter Project/Projecteinstellungen/Debugger folgende Dinge einstellen
    Pfad zu gdb: /opt/cdk4avr/bin
    Shellskript ausführen: simulavr -g -p 1212 -d atmega8 -P simulavr-disp
    GDB-Skript ausführen: gdbinitkdev
  4. Datei gdbinitkdev erstellen. Inhalt:
    shell sleep 3
    target remote localhost:1212
    load
    break main
    continue
  5. In KDevelop einfach Debugger/Start drücken!

Projekte

Trenntrafo

Ich habe zwei kaputte USV's im Zimmer rumstehen. Daraus soll mal ein Trenntrafo werden. Scheinbar ist die Steuerung der Leistungs-Wechselrichter kaputt. Diese wird mit einem ATMega8 nachgebildet. Das Programm läuft schon, aber die Hardware macht mir im Moment noch Sorge...

Update: Irgendwann wurden mir die 1500W in den USV's zu heiß und ich hab die Dinger geschrottet, bzw. den Kühlkörper als praktischen Dokumentenaufbewahrer umfunktioniert.

Quizbuzzer

Für die Jungschar habe ich mal einen zweifach-Quizbuzzer gebaut. Damit konnte man sofort sehen, welche Gruppe zuerst auf den Knopf gedrückt hat. Besonders toll war, dass man auch irgendwas auf die Taster draufstellen konnte und die Gruppe, die ihr Viech als erstes wegkickt bekommt den Punkt bzw. die Frage.

Unabhängig von der technischen Schönheit hat dieses Ding einen Nachteil: Die Leiterwillkürkonstante fällt komplett weg, weshalb ich es nicht unbedingt empfehlen kann. Wer das Ding live erleben will muss in eine CVJM München-Jungschar gehen.

Ein Roboter

Wer will sowas nicht haben...
Nachdem ich mir soviel Arbeit gemacht habe, diese Prozessoren zu programmieren, muss schon noch was vernünftiges damit gemacht werden. Mehr dazu auf meiner Roboterseite.

Leo