Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro mit ATmega168, LCD und ISP
Hallo, wollte Euch mal mein erstes eigenes Roboterprojekt - eine Erweiterung für den Asuro - vorstellen!
Kurzfassung: Mein Asuro hat jetzt einen ATmega168 und über Schieberegister ein LCD. Die Programmierung geht über ISP – außer Prüfung der Batteriespannung bleiben alle Asurofunktionen erhalten.
Langfassung: Da das Flashen mit Transceiver bei meinem Asuro nie wirklich gut funktionierte, hatte ich mich entschlossen, auf normales ISP umzusteigen. Damit ich nicht den originalen ATmega8 verliere, habe ich mir einen ATmega168 gekauft und einen STK200 kompatiblen Programmer gebastelt. Im Sockel auf dem Asuro sitzen jetzt Steckerleisten, die alle Kontakte eine Etage höher auf die Erweiterungsplatine bringen (auf die Idee bin ich durch den Beitrag hier gekommen: https://www.roboternetz.de/phpBB2/viewtopic.php?t=9635 ).
Auf der Erweiterungsplatine sitzt der ATmega168 und wird wie auf einem Steckbrett mit den einzelnen Kontakten des Asuro verbunden. Da alle Kontakte steckbar sind, kann man die einzelnen Verbindungen auch variieren. Auf der Platine sitzt außerdem ein Schieberegister an dem das LCD hängt.
Das Schieberegister braucht drei Pins – ich habe die Pins für die Front- und StatusLED genommen. Diese hängen jetzt am Schieberegister und sind so weiter einsetzbar. Leider funktioniert der Enable Pin des LCD nicht richtig am Schieberegister – also brauchte ich einen vierten Pin. Da ich noch nie die Batteriespannung gemessen habe, habe ich auf diese Funktion verzichtet und so den vierten Pin freigemacht. Damit sind (außer Batteriespannungskontrolle) alle Funktionen des Asuro erhalten und zusätzlich habe ich ein LCD und ISP :-)
Wie man sieht, könnte die Platine auch noch kleiner sein - ich will aber vielleicht noch mehr draufbauen (z.B. ein weiteres Schieberegister - dann hätte ich noch paar freie Ports...)
Gruß
kanal28
Die wichtigsten Quellen:
Die Schaltung zum Schieberegister basiert auf https://www.roboternetz.de/wissen/index.php/Portexpander_am_AVR
Die Programmierung habe ich erst hier verstanden: http://homepages.which.net/~paul.hills/Software/ShiftRegister/ShiftRegisterBody.html
Die Infos zum LCD stammen von http://www.mikrocontroller.net/tutorial/lcd
Und probiert habe ich das ganze auf http://www.geocities.com/dinceraydin/djlcdsim/djlcdsim.html
Sehr schönes Projekt. Glückwunsch!
super_castle
09.03.2006, 14:06
....ich will aber vielleicht noch mehr draufbauen.....
dann macht dein platinen-fahrgestell eine grätsche.
es ist nicht üblich auf eine platine wo sich arbeitsgruppen befinden diese gleichzeitig als fahrgestell zu nutzen. so etwas mach man getrennt.
Solange die Kabelbinder die Motoren an Ihrem Platz halten sehe ich da kein Problem. Es liegt ja (bis jetzt) kein allzu großes Gewicht auf.
Warum denn Gewicht verschwenden, indem man einen Rahmen/Chassis baut, dass dann zusätzlich bewegt werden muss, wenn man es nicht braucht? Ich finde die Asuro-Lösung sehr elegant, weil:
einfach - nur ein Teil
funktional - Es trägt die Motoren, die Halterungen für die Getrieberitzel und die Achse der Räder
effizient - Die Platine erfüllt mehrere Funktionen die einzeln realisiert nur Gewicht kosten würden.
Sauber verarbeitet schätze ich kann das Platinen"Chassis" sicher ein kg tragen, aber wahrscheinlich sind dann die Motoren zu schwach um den Bot noch vernünftig bewegen zu können.
super_castle
09.03.2006, 19:25
die asurolösung ist praktisch ohne aufbauten... dafür wurde er geschaffen.
er ist ja schliesslich mal als fussballroboter konzipiert worden.
wenn du dich mal mit den reibungskräften beschäftigen würdest, würde deine aussage anders aussehen.
funktional und sachverstand beim bauen gehören zusammen.
das stelle ich bei dir nicht fest, ich meine jetzt den sachverstand im zusammenhang mit deiner aussage.
<aufdiekniefall>Ahhhhhhhhhhhh ich Unwürdiger</aufdiekniefall>
Also kanal28, mein Vorposter hat gerade festegestellt, dass dein Bot niemals wieder fahren kann. Er hat die Reibkräfte anhand Deines Bildes überprüft und ist in seinem unermesslichen Ratschluss zu dieser Erkenntnis gekommen.
Ich finde Dein Konzept dennoch gut und stehe zu meiner Aussage.
Lunarman
09.03.2006, 19:41
Sorry... war nur ein komischer Beitrag... warum meinst du, dass die Reibungskräfte hier so hoch sind, dass das Ding nicht mehr fahren kann? Der Tischtennisball ist doch relativ glatt und der Aufbau ist ja so schwer bestimmt auch nicht :-)
Genialer Aufbau übrigens! Gefällt mir... Aber seitwann kann der Asuro seine batteriespannung messen...?
... Aber seitwann kann der Asuro seine batteriespannung messen...?
Wenn das in der LIB steht:
int Batterie(void)
{
ADMUX = (1 << REFS0) | (1 << REFS1) | BATTERIE; // internal 2.56V reference with external capacitor
ADCSRA |= (1 << ADSC); // Start conversion
while (!(ADCSRA & (1 << ADIF))); // wait for conversion complete
ADCSRA |= (1 << ADIF); // clear ADCIF
return ADCL + (ADCH << 8);
}
super_castle
10.03.2006, 10:02
...Aber seitwann kann der Asuro seine batteriespannung messen...?....
ihr beschäftigt euch zuwenig mit den wesentlichen dingen.
es ist eine ganz einfache sache dieses kurz mit winavr-c zu verwirklichen.
Hallo kanal28
super Sache! Etwas ähnliches, allerdings abgespeckt, habe ich auch vor: ISP und ATmega 8, dazu noch eine schnellere RS232 mit einem MAX232.
Reichelt hat auch schon die Teile geliefert, aber die Sache entwickelt sich bei mir doch langfristiger als ich dachte. Aber nun habe ich ja mal wieder einen Anreiz und raffe mich mal auf ...
Musstest du beim Wechsel zum anderen Controller in der Konfiguration irgend etwas bestimmtes beachten? Ich hab' da mal was von "Fuse-Bits" gelesen und bin da noch blank.
Wie sieht denn dein ISP-Programmer aus, im Bild und Schaltplan?
Welche Teile hast du auf dem Asuro montiert und welche am Rechner?
Funktioniert bei dir noch der IR-Transmitter?
Bin gespannt auf Infos zum Howto!
Gruß Rakke
@ogni42 – danke für Deinen Zuspruch – ja, er fährt tatsächlich noch... ;-)
@Rakke
also für mich war auch ISP der Hauptgrund. ATmega8 hat sicher den Vorteil, dass die Programmierung gleich bleiben kann (der ATmega168 hat zwar die gleiche Pinbelegung, aber trotzdem kleinere Unterschiede, z.B. geht die original Sleep()-Funktion nur mit Anpassung - aber dafür 16KB). Nur den originalen ATmega8 sollte man vielleicht nicht nehmen, der Bootloader könnte beim ISP verloren gehen(?)
Wie hast Du denn die Verbindung mit dem Asuro geplant? Willst Du direkt am Asuro ansetzen, oder auch ein Stockwerk drauf?
Überlegen solltest Du, was Du mit dem Quartz machst. Bei mir ist der Abstand zum Originalquartz ja doch etwas groß, deswegen benutze ich den nicht mehr. Im Moment habe ich noch den internen Takt, weil ich den Chip manchmal auf dem Steckbrett habe. Ist bei mir auch noch original mit 1MHz getaktet. Fuse-Bits können wohl ein Problem sein, wenn man damit spielt – wenn man sich vorher überlegt, was man macht sollte es aber kein Problem sein (spreche da aber nicht aus Erfahrung - siehe https://www.roboternetz.de/wissen/index.php/AVR-Einstieg_leicht_gemacht ).
RS232 habe ich mittels MAX232ACPE beim Programmer mit draufgepackt – hat bisher klaglos funktioniert. Ob es gemeinsam mit IR-Transmitter geht, weiss ich nicht. Kann es aber auch nicht testen, weil ich nur eine serielle Schnittstelle habe. Werde IR auf dem Asuro zur Hinderniserkennung umbauen (https://www.roboternetz.de/phpBB2/viewtopic.php?t=11114 ) – hoffe einfach mal, das geht gleichzeitig (notfalls muss ich umstecken).
Zu den Schaltungen kann ich nicht viel sagen. Die Schaltung für den Programmer entspricht dem ISP-Dongle hier https://www.roboternetz.de/wissen/index.php/AVR-ISP_Programmierkabel (zum programmieren nehme ich avrdude). Habe das mal in einer Nachtschicht auf einer 3er Lochrasterplatine zusammengelötet. Die Unterseite erspare ich Dir lieber - hätte wohl vorher etwas mehr planen sollen – aber es funktioniert (als ich das erste Mal gelötet habe, sagte man mir "nichts hält länger als ein Provisorium" - fürchte, ich halte mich noch immer dran...)
Die Schaltung für RS232 ist eine Mischung aus verschiedenen, die ich im Netz gefunden habe: http://www.rowalt.de/mc/avr/avrboard/01/avrb01.htm (wg. MAX232ACPE); http://www.mikrocontroller.net/tutorial/uart und http://www.siwawi.arubi.uni-kl.de/avr_projects/evertool/evertool_schem_0_9b.png - hatte das auf dem Steckbrett probiert und dann neben den Programmer gelötet...
so, hoffe das beantwortet Deine Fragen – viel Erfolg beim Basteln! Poste mal Dein Ergebnis, wenn Du fertig bist – bin gespannt, was Du für einen Ansatz wählst.
Gruß
kanal28
Hei kanal28,
wär ich mal schon so weit - danke für die Info.
Ich hatte mir den Umbau des Asuro ähnlich wie bei dir vorgestellt: ein paar Pfostenverbinder, zweite Etage mit dem modifizierten Prozessor, so dass ein Wechsel zur Originalkonfiguration einfach möglich ist. Auf die zweite Etage wollte ich dann den MAX232 und die Verbindung zum ISP setzen, Rest lassen wie er ist. An Probleme mit den Quarz-Leitungen hatte ich natürlich nicht gedacht - guter Hinweis.
Wie sind deine Erfahrungen zum ISP-Anschluss des Asuro, wie hast du den umgesetzt? MISO, MOSI und SCK sind ja zugleich noch für die Ansteuerung des rechten Motors verwendet. Bislang hatte ich da einen Umschalter Flash-Run vorgesehen, den ich mir aber auch gerne spare.
Den Schaltplan vom ISP-Prg habe ich gejückt bei http://elm-chan.org/works/avrx/report_e.html und versuche mich an einer Umsetzung für Streifenplatine.
Für den MAX232 wollte ich mich an dessen Spec langhangeln, habe dazu aber noch keinen Schlag getan. Aber bald kommt ja der Winter mit seinen langen, dunklen Abenden :-)
Alaaf, Rakke
Hi Rakke,
erstmal noch ein Nachtrag: ATmega168 Pin1 und Asuro Pin1 sind bei mir mit einem Widerstand (wohl 100k) verbunden - RESET vom Programmer liegt direkt am Pin. Beim Asuro ist dieser Widerstand gegen VCC nicht drin. Ohne ging es bei mir aber nicht.
Also, ich habe den Programmer unmittelbar an den AVR angeschlossen. Das funktioniert bei mir problemlos. Allerdings sollte man den Asuro aufbocken, weil der Motor mit angesteuert wird. An MOSI hängt ja D10 - hoffe die übersteht das auch ohne Probleme - habe die aber seitdem nicht getestet!
Es gab hier schon ein paar Diskussionen zum ISP am Asuro (z.B. https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=11087&highlight=asuro+isp vgl. auch http://www.avr-asm-tutorial.net/cq-dl/teil3/index.html ). Kann Dir eigentlich nur sagen, dass es bei mir auch ohne Umschalter oder zusätzliche Widerstände funktioniert...
kanal28
Hei kanal28,
die beiden Diskussionen habe ich mir angeguckt (die erste kannte ich sogar, fand sie aber nicht sehr erhellend). Langsam blicke ich durch. Das der Widerstand zwischen VCC und #Reset muss, sehe ich ein. Dreht sich der rechte Motor beim programmieren tatsächlich mit? Na gut, dann wird nur auf der Hebebühne geflasht.
Einen guten Start in die Woche wünscht
Rakke
Hi kanal28,
habe mich eben in den Schaltplan vom Asur vertieft und verstehe nun doch nicht, warum man den Asuro beim ISP-Flashen aufbocken muss. Zwar sind mit MISO und SCK zwei Leitungen zum rechten Motor doppelt verwendet, aber die steuern doch "bloß" die Drehrichtung? Dreht sich der Motor tatsächlich oder fiept der nur?
Als Maschinenbauer würde ich jetzt mutmaßen, dass als Abhilfe doch eigentlich reichen würde, die Leitung vom PB2 (Motortakt) beim Flashen über einen Widerstand gegen Masse zu schalten, z. B. über einen zusätzlichen Kontakt, der beim Aufstecken des Flash-Steckers die Verbindung herstellt.
Kennt sich hier jemand mit sowas aus? Zum scheitern verurteilt?
Alaaf, Rakke
Hallo Rakke,
also das mit dem Aufbocken stört Dich wirklich, oder? ;-) Habe es gerade nochmal probiert. Tatsächlich: beim programmieren steht er ganz brav und still (hast Recht, beim Blick auf den Schaltplan ist das doch nicht so überraschend...). Allerdings, ruckt er kurz (ca. 1cm) am Anfang, wenn der Programmer anfängt (reset?). Soweit also kein Problem, die Antwort lautet: Ja, man kann auch ohne Aufbocken programmieren.
Soviel zur Theorie: Praktisch sieht es aber bei mir so aus, dass der Asuro nach dem programmieren sofort startet (kann man wohl im avrdude abschalten). Das heißt, wenn das Programm die Motoren benutzt, ist er nach dem Programmieren ganz schnell runter vom Tisch. Kann natürlich auch passieren, dass man versehentlich die Motoren anschaltet...
Außerdem: Ich finde es aufgebockt ganz praktisch - so kann ich das Programm gleich testen, wenn er noch am Programmer hängt und muss nicht ständig den Stecker rein und raus... Und über avrdude habe ich auch noch einen Reset vom PC aus.
kanal28
Nachtrag zur Messung der Batteriespannung: Habe mir nochmal den c't-bot angeschaut und siehe da, es geht noch einfacher: Habe jetzt den Enable Pin des LCD mit RCK/strobe vom Schieberegister zusammengelegt. Damit wird ein Pin am ATmega frei und die Messung der Batteriespannung wieder verfügbar. Dem LCD scheint das egal zu sein - man muss nur aufpassen, dass man das Display bei Ansteuerung der weiteren Leitungen am Schieberegister nicht verwirrt. Damit bleiben jetzt alle Funktionen des Asuro erhalten!
Wenn man will, kann man sogar die beiden anderen Leitungen des Schieberegisters wieder mit der StatusLED belegen - dann hat man am Schieberegister noch zwei zusätzliche Kanäle gewonnen. :-)
kanal28
Hallo Kanal28 Frage!
Wo hast du dein ISP programmer gekauft?
Weil die meister angeblich nicht kompatibel sind.(zu 168).
cu Konstantin
Hallo Kosta24,
also der Programmer ist ein STK200 kompatibler Eigenbau nach Vorbild von https://www.roboternetz.de/wissen/index.php/AVR-ISP_Programmierkabel. Ein Problem mit dem ATmega168 gibt es bei der Hardware meines Wissens nicht. Allerdings unterstützt PonyProg den 168 noch nicht (gab hier mal eine Diskussion wonach er möglicherweise als ATmega16 programmiert werden kann). Ich benutze avrdude - das funktioniert.
Gruß
kanal28
Super Danke!
Die einigen Händler bei einem bestimmten Online Auktionshaus meinen es geht nicht, aber ich glaube dir würde ich mehr glauben als denen!!
cu Konstantin
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.