Das Infolexikon
...und Blog über die Uni FrankfurtInformatik und Kram
Da wir lange nicht wußten, wo wir das für die Uni ausgearbeitete Material unterbringen sollten und auch einen schrecklichen Drang hatten der Welt diverse Sachen aufzudrücken...
| Atmega-USB-Dingens |
Hier mal wieder ein kleiner aber netter Artikel zum Atmega8. Ja, wir lieben das Teil!
Diesmal haben wir nen USB-Anschluss drangebaut, um - erm - ja, Sachen über USB-Ports zu steuern.
Vorweg: Eigentlich haben wir hier relativ wegen Eigen-Initiative aufbringen, müssen, da schon jemand die Vorarbeit für uns geleistet hat.
Diesmal haben wir nen USB-Anschluss drangebaut, um - erm - ja, Sachen über USB-Ports zu steuern.
Vorweg: Eigentlich haben wir hier relativ wegen Eigen-Initiative aufbringen, müssen, da schon jemand die Vorarbeit für uns geleistet hat.
(Ihr müsst euch das Zeug im nun folgenden Abschnitt nicht extra runterladen, das ist alles in unserem release dabei!)
Die USB-Treiber für diverse Atmel-Chips gibts bei http://www.obdev.at/products/avrusb/index.html.Das Board-Layout und die Schematics bauen stark auf der Vorarbeit von http://www.schatenseite.de/usb-servo.html auf.
Mit den USB-Treibern (gibts für Linux und Windows) kommt auch direkt noch ein CommandLine-Tool, mit dem man Commandos an den Atmega senden sowie Antworten empfangen kann.
diese werden dann an den Atmega geschickt, und dort werden die entsprechenden Pins gesetzt.
Das erste (highest) bit entscheidet, ob PORTC oder PORTB gesetzt werden.
1xxxxxxx = PORTB
0xxxxxxx = PORTC
Die restlichen sieben bit kontrollieren die einzelnen Pins des jeweiligen Ports.Würde z.B. PB0 und PB2 auf high setzen!
Die PWM hab ich noch nicht zum Laufen bekommen, da die Servos zu viel Strom ziehen, und das hält der USB-Port nicht aus, also wird bei der nächsten Version ein Anschluss für externen Strom mit drauf sein. Ausserdem haben wir das ganze direkt ordentlich geätzt, war ein lustiger Abend, vor allem das Bohren so um 23:30. Ja, meine Nachbarn lieben mich!
(Beispiel mit Usbprob)Die ID ist bei euch die gleiche, solange die Firmware nicht verändert wurde.eingeben. Das sendet eine Reihe von Werten an den Atmega und überprüft, ob die Antworten korrekt zurückgegeben werden.
RS an PC4,
EN an PC5,
Habs mit in den Stromkreis vom USB gehängt, funktioniert super!
Kurze Beschreibung:
Wie oben auch, entpacken, firmware flashen, dann kann man mitAlso wie gewohnt das set-command, als zweites Argument dann die Zeilennummer (1 oder 2), gefolgt von 0-16 Buchstaben. Weazy!
Funktionieren tuts folgendermaßen: Commandline-Tool wandelt den String in Integer-Werte um, sendet ein byte an die usb-platine, die ihr sagt, dass gleich eine Übertragung stattfindet,
dann werden 16 integer-werte gesendet, die der Atmega in Buchstaben kodiert und auf dem LCD ausgibt.
Die USB-Treiber für diverse Atmel-Chips gibts bei http://www.obdev.at/products/avrusb/index.html.Das Board-Layout und die Schematics bauen stark auf der Vorarbeit von http://www.schatenseite.de/usb-servo.html auf.
Mit den USB-Treibern (gibts für Linux und Windows) kommt auch direkt noch ein CommandLine-Tool, mit dem man Commandos an den Atmega senden sowie Antworten empfangen kann.
Treiber und Commandline-tool
Hier gibts die Infolexikon-Version (angepasste OBDEV-usb-treiber und darauf abgestimmtes commandline-tool, sowie die schematics und das board-layout):Im Moment noch Version 0.1, damit kann man binär-Werte (8bit) in der Commando-Zeile eingeben,diese werden dann an den Atmega geschickt, und dort werden die entsprechenden Pins gesetzt.
Das erste (highest) bit entscheidet, ob PORTC oder PORTB gesetzt werden.
1xxxxxxx = PORTB
0xxxxxxx = PORTC
Die restlichen sieben bit kontrollieren die einzelnen Pins des jeweiligen Ports.
./commandline/usb-dingens set 10000101
Hardware
Als Änderungen zur oben erwähnten Vorarbeit haben wir hier zwei Anschlüsse für Servos (+, -, PWM) an OCR1A und OCR1B, sowie zwei Stiftleisten (PC0-PC5 und PB3-PB5).Die PWM hab ich noch nicht zum Laufen bekommen, da die Servos zu viel Strom ziehen, und das hält der USB-Port nicht aus, also wird bei der nächsten Version ein Anschluss für externen Strom mit drauf sein. Ausserdem haben wir das ganze direkt ordentlich geätzt, war ein lustiger Abend, vor allem das Bohren so um 23:30. Ja, meine Nachbarn lieben mich!
Was man machen muss, dass es läuft
1. Die Firmware auf den AVR flashen (Beispiel mit Usbprob)
>> avrdude -p m8 -c avrisp2 -P usb -U flash:w:main.hex
2. Die Fuses auf externen Quarz einstellen, für den Atmega8:
>> avrdude -p m8 -c avrisp2 -P usb -U lfuse:w:0xEF:m
3. Bei Linux: kucken, ob sich das Teil beim pc "angemeldet" hat:
>> lsusb Bus 002 Device 003: ID 15d9:0a33
4. Ins Verzeichnis usb-dingens gehen, und erstmal
>> ./usb-dingens test
5. Nerden!
Eigenes Programm schreiben und lustige Sachen damit anstellen!USB-LCD-Dingens
So, endlich mal wieder kurz Zeit gehabt, was zu bauen. Ich hab an unser USB-Dingens mal ein LCD drangehauen, der Code is noch ziemlich abenteuerlich, aber funktioniert super-stabil!
USB-DINGENS-LCD
Hier gibts auch den LCD-Code als zip Schaltplan dazu -->DB4-DB7 des LCD an PC0-PC3,RS an PC4,
EN an PC5,
Habs mit in den Stromkreis vom USB gehängt, funktioniert super!
Kurze Beschreibung:
Wie oben auch, entpacken, firmware flashen, dann kann man mit
./commandline/usb-dingens-lcd set 1HALLO_WAS_GEHT_?
Funktionieren tuts folgendermaßen: Commandline-Tool wandelt den String in Integer-Werte um, sendet ein byte an die usb-platine, die ihr sagt, dass gleich eine Übertragung stattfindet,
dann werden 16 integer-werte gesendet, die der Atmega in Buchstaben kodiert und auf dem LCD ausgibt.
| Erstellt | 20. September 2008 01:13:23 | Geändert | 3. November 2008 02:30:59 |
|---|---|---|---|
| Von | Tobias Weis | Kategorien | Technik Linux |
| 9 Kommentar(e) | |||
Kommentare
Hallo, der LCD-Code-Link verweist auf die USB-dingens-Code-zip-Datei.
sorry! schon geändert, der link funktioniert jetzt!
Morgen
Netter Artikel.
In deinem usb-lcd-dingens zip File noch die Eagle Files vom Ersten Projekt drin.
Kannst du noch ein Par Zeilen dazu schreiben welche Tools zum Programmieren du verwendet hast? Gibt’s dazu ein How To?
Zudem wäre interessant zu wissen ob es eine einfachen Weg gibt einen Windows Treiber zu schreiben ( denn beim Powerswitch Projekt von obdev.at gibt’s ja so was sogar mit Delfi GUI ).
Ich möchte für ein eigenes Projekt die PWM und die LCD Funktion kombinieren. Ich habe noch ein 2x16 LCD mit HD44780 Controller. Ist dieser mit deiner SW kompatibel?
Danke
Netter Artikel.
In deinem usb-lcd-dingens zip File noch die Eagle Files vom Ersten Projekt drin.
Kannst du noch ein Par Zeilen dazu schreiben welche Tools zum Programmieren du verwendet hast? Gibt’s dazu ein How To?
Zudem wäre interessant zu wissen ob es eine einfachen Weg gibt einen Windows Treiber zu schreiben ( denn beim Powerswitch Projekt von obdev.at gibt’s ja so was sogar mit Delfi GUI ).
Ich möchte für ein eigenes Projekt die PWM und die LCD Funktion kombinieren. Ich habe noch ein 2x16 LCD mit HD44780 Controller. Ist dieser mit deiner SW kompatibel?
Danke
Hi! Ja, du hast recht, der Artikel weist noch einige Schwächen auf :-)
Programmiert wie immer in C, kompiliert mit avr-gcc, auf den Atmega geflasht mit usbprog und avrdude, die gibts auch alle für Windows.
Der Controller in meinem Display ist auch ein HD44780, ich habe die LCD-Ansteuerung im Großen und Ganzen von microcontroller.net aus dem AVR-Tutorial übernommen (dort finest du auch ein super Tutorial zur AVR-Programmierung), die Software ist also auf jeden Fall mit deiner kompatibel!
Aber wie gesagt, unbedingt mit der Ansteuerung von Motoren aufpassen, die ziehn höchstwahrscheinlich zu viel Strom und brauchen ne externe Stromversorgung!
Programmiert wie immer in C, kompiliert mit avr-gcc, auf den Atmega geflasht mit usbprog und avrdude, die gibts auch alle für Windows.
Der Controller in meinem Display ist auch ein HD44780, ich habe die LCD-Ansteuerung im Großen und Ganzen von microcontroller.net aus dem AVR-Tutorial übernommen (dort finest du auch ein super Tutorial zur AVR-Programmierung), die Software ist also auf jeden Fall mit deiner kompatibel!
Aber wie gesagt, unbedingt mit der Ansteuerung von Motoren aufpassen, die ziehn höchstwahrscheinlich zu viel Strom und brauchen ne externe Stromversorgung!
Abend
Danke für deine Antwort. Habe kurzerhand mein Automator Bord umgebaut und das LCD angehängt sowie deine Firmware aufgespielt. Funktioniert einwandfrei Kompliment!
Mit welchem Programm hast du C geschrieben? (nehme nicht an dass du das alles im Text Editor gemacht hast) Hast du dazu ein Projektfile/Ordner das du mir zur Verfügung stellen könntest? Dan muss ich für mein Projekt nicht bei Adam und Eva anfangen.
Ausserdem wäre ein Windows Treiber/Tool ne Nette Sache.
Bin für jede Info dankbar.
Danke für deine Antwort. Habe kurzerhand mein Automator Bord umgebaut und das LCD angehängt sowie deine Firmware aufgespielt. Funktioniert einwandfrei Kompliment!
Mit welchem Programm hast du C geschrieben? (nehme nicht an dass du das alles im Text Editor gemacht hast) Hast du dazu ein Projektfile/Ordner das du mir zur Verfügung stellen könntest? Dan muss ich für mein Projekt nicht bei Adam und Eva anfangen.
Ausserdem wäre ein Windows Treiber/Tool ne Nette Sache.
Bin für jede Info dankbar.
hehe uh, ich wollt grad die Pläne für die lcd-platine machen, aber ich hab gar keine gemacht :-) hab mein lcd hier mit kabeln an die usb-platine rangehängt..
Ich muss dich leider enttäuschen, ich benutze weder ne GUI zum programmieren, noch irgend ein Project-File, sondern vim, den konsolen-editor..Über Windows kann ich dir leider auch nichts brauchbares sagen, habe ich noch nicht getestet, benutze auch auf keinem Rechner hier mehr Windows, sorry..
Ich muss dich leider enttäuschen, ich benutze weder ne GUI zum programmieren, noch irgend ein Project-File, sondern vim, den konsolen-editor..Über Windows kann ich dir leider auch nichts brauchbares sagen, habe ich noch nicht getestet, benutze auch auf keinem Rechner hier mehr Windows, sorry..
hossa, joa alles schön fein mit 'vim' gemacht. es ist ja auch nicht so als ob vim nicht auch super projekt-management-plugins hätte, aber sowas brauch der toby doch nicht ;) aber genug blablub, zum Thema - zum AVR entwickeln unter Windows kann ich AVR-Studio empfehlen: ist sogar frei und kostenlos. Nicht vergessen sich den GNU AVR C Compiler 'avr-gcc' gleich mit zu ziehen, sonst compiliert dein Studio kein C, das gibbet natürlich windows-gerecht alles zusammen als WinAVR Und zu guter letzt kann ich noch für das Windows-Treiber Problem die libUSB-W32 Bibliotheken empfehlen - dies ist ein generischer USB-Treiber d.h. man kann direkt RohDaten an das Device schicken und das USB-Dingens wird von Windows als USB Gerät erkannt, also sollte das damit gehn.
Klingt richtig gut, würde ich gerne nachbauen um die AVR beser kennenzulernen; leider kommt mein Eagle mit dem brd nicht klar; Anscheinend fehlen die Masse-Verbindungen - oder sind die auf ein für mich unsichtbares Layer gerutscht ? ('Alle' ist schon an)
Hi Orwyn! Das USB-Dingens oder das USB-LCD-Dingens? Welche eagle-version benutzt du? Wenn du mir diese infos geben könntest kann ich das board nochmal überarbeiten oder dir wenigstens sagen, was falsch läuft...



