Mikrocomputer-Praktikum der Mechatroniker ME5 im Wintersemester 2005/2006 Betreuer: [http://www.fh-augsburg.de/~hhoegl Prof. Hubert Hoegl], Im zweiten Teil des Praktikums geht es nun ab dem 16. November an die Projekte. Inhalt [#gruppen Arbeitsgruppen] | [#avrtipps Tipps zum AVR] == Arbeitsgruppen == [[Anchor(gruppen)]] Die Einteilung der Arbeitsgruppen ist wie folgt: === 1. Frank Gutmann, Patrick Deisenhofer === panchotf@RZ.FH-Augsburg.DE, deisenho@RZ.FH-Augsburg.DE '''Stichpunkte''': Mikrocomputerboard mit Philips ARM7TDMI-S Controller LPC2294 von Olimex http://www.olimex.com // GNU C Compiler fuer ARM // JTAG Debugger Openocd // Brushless DC Motor mit Leistungsstufe von Nanotec, http://www.nanotec.de. In meinem Skript zur Vorlesung MNP (http://www.fh-augsburg.de/~hhoegl/mnp/skript/index.html) gibt es einen Abschnitt ueber die wichtigesten GDB Kommandos. 18.11.2005: Was bisher (erfolgreich) geschah: 1. Mit Hilfe von WinARM und den mitgelieferten Beispielen eigenes LED-blink-Programm compiliert 2. .hex Datei mit dem Philips LPC210x_isp Tool in den Flashspeicher geladen und erfolgreich ausgefuehrt 3. nach einer kleinen Veraenderung des Assembler-Startupcodes auch Programme aus dem SRAM ausfuehrbar, Upload mit dem Philips Tool 4. Das OpenSource Tool lpc21isp hat(te) einen kleinen Bug, der verhinderte, dass das Programm mit dem LPC2294 zusammenarbeitet. Bug gefunden und dem Autor gemeldet. Version 1.31 sollte funktionieren. 5. Zur Verwendung von openocd Linux installiert (Suse 10) *brrr* 6. (hoffentlich) die Version von openocd kompiliert, die den ARM7TDMI-S unterstützt 7. GNUARM heruntergeladen und das erste Programm (wie oben) erfolgreich kompiliert 30.11.2005 8. Openocd untestützt bis jetzt (0.3) doch noch keinen ARM7TDMI-S core. Daher Wechsel auf Atmel AT91SAM7S64 mit ARM7TDMI-core. Nach anfänglichen Schwierigkeiten wurde auch ein Controller von AD getestet, der aber die selben Probleme bereitete. arm-elf-insight hat wohl noch Probleme mit dem ARM7TDMI, arm-elf-gdb funktioniert soweit. Auch mit ddd ist debuggen problemlos möglich, was für verwöhnte klickibunti-user wie uns im Moment die erste Wahl darstellt. 9. Linkerscript von WinArm angepasst, so dass das Laden von Programmen in das SRAM und die dortige Ausführung möglich wird. 1.12.2005 10. Erste eigene Programme (Leds blinken lassen und auf Knopfdruck leuchten) mit und ohne Verwendung der fertigen Header laufen jetzt 11. Eine der Leuchtdioden auf dem Board mittels PWM dimmbar gemacht. Das Ganze sollte dringend mit einem Oszilloskop betrachtet werden, zeigt manchmal seltsames Verhalten. 15.12.2005 1. Das seltsame Verhalten (Polarität wechselt ohne Grund) ist auf Fehler im Chip zurückzuführen. Der Dutycycle darf nicht 0 werden. Ausserdem muss der Takt für den PWM Controller kleiner als der Mainclock sein. 2. Problem: PWM-Signal mit û=3,3V soll Gleichspannung mit û=5V werden. Lösung: RC-Tiefpass->Opamp mit k=1,5: Funktioniert nur einige Sekunden, dann bricht die Spannung am Filter ein, als ob der Kondensator einen Gleichstromwiderstand von ca 10kOhm hätte. Tausch des Cs brachte keinen Erfolg. 3. Neue Filterschaltung: Opamp auf 5V PWM->Filter->Spannungsfolger: Funktioniert. Weiß der Teufel, warum. 4. Kabelgewärch an den BLDC-Motor und die Steuerung gelötet. 5. Steuerung über den Controller funktioniert prinzipiell. Motor lässt sich nur auf der niedrigsten Drehzahlstufe aus- und einschalten und nur bis zur Hälfte der Drehzahl kann die Drehrichtung verändert werden. Das Problem liegt entweder am Netzteil, das nur 3A liefert und beim Richtungswechsel und Ausschalten in die Strombegrenzung geht, am zu niedrigen Pegel der Steuersignale (3,3V statt min. 3,5V wie im Datenblatt), oder daran, dass die Steuerung des Herstellers, ääähm, suboptimal ist. 6. Zu letzterer Annahme passt auch, dass der angebliche 0-5V Eingang für die Drehzahl nur zwischen ca 1,2V und 2,7V funktioniert. Darunter läuft der Motor nicht, darüber keine weitere Drehzahlsteigerung. Steuerspannung mit dem Oszi überprüft und korrekt. Auch das Poti auf der herstellereigenen Steuerung zeigt nicht über den vollen Bereich Wirkung. 7. Die Ausgänge der drei Halbbrücken der Leistungsstufe liefern einen per PWM grob nachgebildeten Sinus, jeweils um 120° Phasenverschoben. _/^-^\_/^-^\_ === 2. Tim Derix, Thomas Kaller === xired@RZ.FH-Augsburg.DE, kallerth@RZ.FH-Augsburg.DE '''Stichpunkte''': Experimente mit dem Asuro Roboter // Atmel AVR === 3. Kilian Green, Christian Bohner === kilifuchs@web.de, chb@RZ.FH-Augsburg.DE '''Stichpunkte''': Laser Scanner // Steuerung ueber ein C Programm ueber einen PC // Selbstgebauter PWM-Treiber der über die Parallel-Schnittstelle gesteuert werden soll. Aktueller Status: 09.11.05 Mittwoch - Laserscanner mitgebracht; - Mit Hr. Magg und Hr. Hoegl das weitere Vorgehen besprochen; - Platinenlayout und Treiberchip (L298N) fest gelegt; 10.11.05 Donnerstag - Auf der Suche nach dem passenden Treiberchip zwei alte Drucker geschlachtet und im zweiten fuendig geworden; 16.11.05 Mittwoch - Festlegung der Bestueckung der Treiberplatine; - Bohrung der Bestueckungsloecher auf der Platiene; - Ausloeten einiger Bauteile (zB.: Double-Full-Bridge-Driver L298N) von einer alten Druckerplatine (damals zur Steuerung der Schrittmotoren); 17.11.05 Donnerstag - Bestuecken und Loeten der Scanner-Treiberplatine; - Centronics-Schnittstelle belegt und verloetet; - Aufbau einer Versuchsschaltung mit 8-fach D-Latch und 8 LEDs zum testen des LTP-Ports; - Erste, erfolgreiche Tests (Je nach Programmierung - blinken, Lauflicht, usw....); 20.11.05 Sonntag - Heute habe ich ein C++ Programm geschrieben das drei Funktionen zur verfügung stellt. 1.) Senden eines 8 Bit langen Datenwortes an die LTP1-Schnittstelle. Das Datenwort kann zuvor als Dezimalzahl zwischen 0 und 255 eingegeben werden und wird am Versuchsboard als Reihe leuchtender LEDs angezeigt. 2.) Binaeres aufwaertszaehlen mit wählbarer Geschwindigkeit. Die leuchtenden LEDs zeigen die Zahlen an (also 00000001, 00000010, 0000011 usw ) Die Zaehlgeschwindigkeit kann in 1ms-Schritten gewaehlt werden. 3.) Die dritte Funktion des Programms kann ein Datenwort und eine Frequenz einlesen und das Byte mit dieser Frequenz an den LTP-Port senden. Die ersten Schritte sind gemacht und funktionieren glänzend *Juhuuuu* 25.11.05 Freitag - Daheim versucht den Scanner zum Laufen zu bringen aber leider bricht die Spannung am Netzgerät zusammen sobald ich den Treiber anschließe. 30.11.05 Mittwoch - Mit Herr Magg den Treiber überprüft, Dioden richtig rum drauf gelötet und schon gehts! - Nach einem ersten erfolgreichen Bewegen der Ablenkeiheit via Computer (an 5V) und einigen Tests mit dem Oszilloskop erhöhten wir die Spannung auf 16V (da der 12V Ausgang nicht ging), mit dem grandiosen Ergebniss, dass der Scanner kurz toll funktionierte und dann der Treiber abrauchte. (so ein Dreck!) 06.05.05 Dienstag - Neuen Treiberchip gekauft (MIT KÜHLKÖRPER!!!!!) - Computernetzteil zur Spannungsversorgung angeschlossen === 4. Dennis Kirchner, Daniel Storr === kirchner@RZ.FH-Augsburg.DE, dstorr@RZ.FH-Augsburg.DE '''Stichpunkte''': Controller fuer Touch-Panel // Atmel AVR // Die vorhandenen Touch Panel werden in folgendem Text erwaehnt: http://www.fh-augsburg.de/~hhoegl/tmp/display-text/displays.html '''Anregung''': Es soll auch ein Programm auf dem PC geschrieben werden, das eine Zeichenflaeche zeigt. Dieses Programm kommuniziert ueber die serielle Schnittstelle mit dem Touch-Controller und zeigt die vom Controller ermittelten Stiftpositionen an. Es soll auch eine Eichung des Touch-Panels moeglich sein. Natuerlich eignet sich [http://www.python.org Python] hervorragend fuer diesen Job! Einige Datenblatter zu dieser Thematik gibt es hier: http://www.apollodisplays.com/manuals.php 11.12.2005 - damit bei uns auch mal was steht, folgend unser aktueller Projektstatus: - Versuchs-Platine, die RS-232- sowie das SPI-Kabel zusammengelötet - Kommunikation PC-ATMega168 bewerkstelligt (AVR-Studio, WinAVR und AVR-Dude-GUI im Einsatz) und zu Testzwecken LED-Lauflichtprogramm geschrieben - ansteuern des AD-Wandlers möglich - mit Python kleines Programm zum Auslesen des seriellen Ports geschrieben welches Messdaten des Touchpanels aufnehmen soll (auf Grundlage von 'graphics.py' und 'pyserial') To-Do-Liste: - noch einige Probleme bei der Auswertung der Messdaten des Touch-Panels -> Messreihe erstellen - grafisches Zeichenprogramm schreiben für Python - AD-Wandler korrekt auslesen (liefert z.Zt. noch falsche Werte) === 5. Christoph Marx, Andreas Pistek === Christoph.Marx@FH-Augsburg.DE, Andreas.Pistek@FH-Augsburg.DE '''Stichpunkte''': NF300 mit dem GNU C Compiler programmieren // Debuggen mit dem BDM Dongle und dem GNU Debugger gdb Anregungen: '''Linux''' Die folgenden drei Aufzaehlungspunkte stammen alle von Daniel Endres, der im Herbst 2005 den NF300 mit GCC programmiert hat: * Eintrag im Informatik-Wiki http://wiki.fh-augsburg.de/NF300_unter_Linux * BDM Treiber fuer Linux (cuch fuer 2.6er Kernel) http://cmp.felk.cvut.cz/%7Episa/m683xx/m683xx-bdm-driver-040618.tar.gz * GDB mit BDM Support (V. 5.3). Der Treiber wird mit "target bdm /dev/icd_bdm0" angesprochen. http://cmp.felk.cvut.cz/~pisa/m683xx/tools/ * Dominic Rath hat 2004 folgende Punkte zusammengeschrieben (nur fuer 2.4er Kernel) http://www.fh-augsburg.de/~hhoegl/rt/drath/miniC/ http://www.fh-augsburg.de/~hhoegl/rt/drath/nf300.pdf '''Windows''' * http://www.ashware.com * http://www.oesch.org/Teko/tekoup.htm (Achtung: Das hat nichts mit GDB/GCC zu tun. Es handelt sich um einen Nachfahren des alten BD32.EXE). Ein Aufsatz von Roman Jordan: http://www.fh-augsburg.de/~hhoegl/rt/etc/cross/crosscompiling.html 02.01.06: Kurze Zusammenfassung unseres Schaffens Anfangs übten wir uns das ganze unter Linux zu betreiben. Das kam einem (zwei) zuerst sehr verzwickt vor, funktionierte aber nach einem Crashkurs von Herrn Högl. Die Herausforderung lag dabei hauzptsächlich mit Linux umzugehen. Stichwort: "4 Jähriger hinterm Steuer" Alles in Allem ist die Aufgabe unter Linux mit den obigen Werkzeugen relativ einfach zu meistern. Zudem auch noch Anleitungen von früheren Praktikumsteilnehmern zu Verfügung stehen. Der Spaß geht dann los, wenn man das NF300 Board mit kostenlosen Werkteugen in der vetrauten Windows-Umgebung nutzen will. Fängt damit an, dass für Windows im Crosscmpiling-Bereich fast nur kommerzielle Software zu finden ist. Deshalb bestand die Herausforderung darin, die freien Linux-Tools unter Windows zu betreiben. Unser wichtigstes Werkzeug ist dabei Cygwin, eine Unix-Emulation für Windows. http://www.cygwin.com/ Anfangs brachte es einen schon zum Verzweifeln, doch so nach und nach stellt man fest, dass es sich um ein recht mächtiges Werkzeug handelt. Hat ja auch mittlerweile 3 Gigabyte in Beschlag auf meiner Festplatte. Die weitere Programme und Treiber sind auf folgenden Seiten erhältlich: http://www.uclinux.org/pub/uClinux/uclinux-elf-tools/gcc-3/ http://dce.felk.cvut.cz/nms/files/m68k/tools/cygwin/ Mittlerweile können wir Code Assemblieren, Compilieren und Verlinken. Nur beim Debuggen fehlts noch ein bisschen. Das Programm lässt sich zwar laden aber beim starten hängt sich dann der Debugger auf. Wir wären sogar in der Lage, wenn den das debuggen einmal funktioniert, mit graphischer Oberfläche zu arbeiten. === 6. Benjamin Kruedelbach, Robert Ruef === Benjamin.Kruedelbach@FH-Augsburg.DE, Robert.Ruef@FH-Augsburg.DE '''Stichpunkte''': Regelschleife mit Waermequelle (z.B. CPU), Luefter, Temperatursensor und Mikrocontroller (Atmel AVR). Anregung: MAXIM Application Note 1784, "Fan Speed Control is Cool!" http://www.maxim-ic.com/appnotes.cfm/appnote_number/1784 === 7. Johannes Bosch, Michael Linder === jbosch@RZ.FH-Augsburg.DE, Michael.Linder@FH-Augsburg.DE '''Stichpunkte''': Alternativer Plotter mit zwei drehbaren Armen // Steuerung ueber zwei Servomotoren // Atmel AVR === 8. Markus Kaestle, Thomas Schiller === Markus.Kaestle@FH-Augsburg.DE, Thomas.Schiller@FH-Augsburg.DE '''Stichpunkte''': Experimente mit dem AVR Ethernet Board "Arthernet" // Web-Server auf Atmel AVR // Steuerung ueber RS-232 // http://www.mikrocontroller.net/articles/Arthernet_-_AVR_Ethernet 31.12.05 Sylvester : Wir verzweifeln! Zunächst hatten wir unsere Hardware komplett selbst mit SMD bestückt und gelötet. Optischer Eindruck: Schaut super aus! Zunächst programmieren wir unseren Adress-Decoder (Xlinx) mittels CPLD-JTAG. Funktionierte, nach dem wir die richtige Steckerbelegung rausgefunden hatten, einwandfrei. Dann machten wir uns ans Werk und wollten unseren Atmel Mega128 mit der ISP-Schnittstelle programmieren. Das führte leider nicht zum Erfolg (trotz tagelanger Fehlersuche und ausprobieren). Anschließend bekamen wir vom Prof. Högl die original Atmel JTAG ICE mk-II Debug und Programmer Interfaces. Mit dieser könnten wir nun endlich auf unseren Atmel schreiben (und wir dachten schon der Atmel sei tot) Das erste Testprogramm ging leider ebensowenig wie das anschließende Ethernut-Programm (OS für AtmelMega mit Ethernet). Folgende Probleme quälen uns nun: - ISP-Schnittstelle ist tot - RS232 gibt keine Signale aus und kann auch keine empfangen (mit Oszi kommt nur 'n Sägezahn raus) evtl Max3232 tot? - RTL-Chip (Netzwerkchip) gibt keine Link/Act signale beim Anstecken von Netzwerken. Zudem bekommt der Chip kein passenden Chip-Select. Inzwischen sind schon einige Tage der Frustration hinter uns und wir überlegen schwer, ob wir nicht noch ein anderes Projekt beginnen sollen, welches nicht ganz so komplex ist und vorallem überschaubarer ist (sprich weniger verschiedene Hardware). Aber mehr im Neuen Jahr! [[Anchor(avrtipps)]] == Tipps zum AVR == Das folgende Tutorial beschreibt, wie man den Atmel AVR mit dem freien C Compiler GCC programmieren kann: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Die beiden AVR Homepages lauten http://www.atmel.com/products/avr/ http://www.avrfreaks.net/ Der erste Link ist die Produktseite des Herstellers Atmel. Der zweite Link ist die sehr gute "inoffizielle" Homepage des Atmel AVR. Hier wird von Freiwilligen eine Unmenge an Informationen zum AVR gesammelt. Die aktuelle Version der Entwicklungsumgebung "AVR Studio" (V. 4.12) hat bereits den C-Compiler GCC fuer AVR integriert. Leider kann man das Studio nur unter Windows verwenden. http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725 Man braucht das AVR Studio aber nicht unbedingt. Man kann mit dem AVR GCC auch allein gut auskommen. Der zentrale Zugang lautet: http://www.avrfreaks.net/AVRGCC/ Hier gibt es den AVR GCC fuer verschiedene Plattformen, auch z.B. fuer Linux. Fuer Windows gibt es den "WinAVR" unter http://winavr.sourceforge.net/. Zum Debuggen empfehle ich die Verwendung eines AVR Bausteines mit JTAG Schnittstelle, z.B. den Mega16 oder den Mega32 (neben vielen anderen). Die JTAG Schnittstelle steuert man mit einem JTAG Adapter an, folgende sind gebraeuchlich: * Die offiziellen Adapter von Atmel, JTAGICE und JTAGICE mkII. http://www.atmel.com/dyn/products/tools.asp?family_id=607 Den alten JTAGICE muss man sich zum Glueck nicht mehr kaufen, da der Schaltplan von Atmel zum Nachbau veroeffentlich wurde (siehe den folgenden Punkt "Evertool"). Der neue JTAGICE mkII bietet neben der seriellen Schnittstelle zum PC auch einen USB Anschluss. Auf der JTAG-Seite gibt es nun auch eine "Debug-Wire" genannte 1-Draht Schnittstelle, so dass man auch Bausteine mit ganz wenig Pins (z.B. 8) debuggen kann. Leider kostet das mkII fast 300 Euro. Ich habe im RT Labor sowohl das originale JTAGICE als auch das modernere JTAGICE mkII. * Das "Evertool" ist der Nachbau des Atmel JTAGICE Adapters. Im wesentlichen verwendet es einen Mega16L AVR. http://www.siwawi.arubi.uni-kl.de/avr_projects/evertool/ Ein Evertool JTAGICE kann man sich innerhalb einer Stunde selber zusammenloeten, zu einem Preis von einem Mega16L. * Beim Elektronikladen gibt es den AVR-JTAG-USB Adapter. In diesem Adapter steckt auch wieder der "Evertool" Schaltplan. Der Preis von knapp 50 Euro fuer den fertig aufgebauten Adapter ist halbwegs vernuenftig. http://elmicro.com/de/avrjtag.html