Hi Leute! Bitte helft mir, ich bin am Verzweifeln. Ich habe einen eadogm162 an einen Atmega8-16PU angeschlossen, leider ohne Hintergrundbeleuchtung, da mir eine falsche zugschickt wurde. Deswegen habe ich eine helle LED dafür missbraucht. Der eadog wird an 5V und 8Bit betrieben. D0-D7 gehen an die D-Ports ges uC Enable geht an PC0 RS geht an PC1 Leider passiert rein garnichts, zum Test habe ich an die D0-D7 Ausgänge parallel nich LEDs gehangen und die Pausen verlängert, damit ich alles optisch verfolgen kann. Mein Assemblerwissen aus der Ausbildung ist ziemlich eingeschlafen, deswegen bitte ich euch, mir zu sagen, ob mein Quellcode Fehler hat oder was sonst das Problem sein kann.
Hallo Sunny, schau Dir mal im Handbuch des ATMega8 an, was an Adresse 0 ff. (org 0!) stehen muß. Stichwort Interrupttabelle. Viel Erfolg kormorix
> Stichwort Interrupttabelle. Uninteressant, wenn keine Interrupts verwendet werden... Aber vielleicht hilft eine Suche im Forum: http://www.mikrocontroller.net/search?query=%2Bportd+%2Bjtag&forums[]=1&forums[]=2&max_age=-&sort_by_date=0
Ich habe gelesen das ich die JTAGFuse löschen muss damit PortD richtig funktioniert(hatte es bei dem User dann auch), aber die LEDs die ich parallel angeschlossen habe leuchten ja so wie sie sollen, d.h. die Ports funktionieren richtig. Sollt ich vielleicht eine ext. Spannungsquelle mit anschließen? Achso benutze das MysmartUSB zum programmieren. Danke :)
> aber die LEDs leuchten ja so wie sie sollen Richtig, manche Megas haben JTAG, der Mega8 jedoch nicht :-/ Deshalb kanns damit am PortD auch keine Probleme geben...
Okay, also ich hoffe ich habe das Display nicht geschrottet, denn ich hatte es spiegelverkehrt herum angeschlossen :( Die Stromaufnahme ist genug durch den USB-Anschluss oder doch lieber externe Quelle, falls der Strom nicht reicht? Ist der Quellcode richtig?
Hi Ja. Dir ist bewusst, das dein Programm zweimal 'INITIALSTART' durchläuft und sich mit dem 'ret' ins Nirvana verabschiedet? Nach 'rcall INITIALSTART' sollte wenigstens eine Endlosschleife 'xyz: rjmp xyz' sein, damit das Programm definiert anhält. MfG Spess
Also das Programm läuft immer weiter, das stimmt. Warum zweimal, versteh ich jetzt nicht?! Ist die Reinfolge der Initialisierung wichtig? Auf dem "Datenblatt" des EADOG steht eine andere als die vom ST7036.
Hi
>Warum zweimal, versteh ich jetzt nicht?!
Einmal durch 'rcall INITIALSTART'. Danach macht das Programm nach 'rcall
INITIALSTART' weiter. Und da steht dein Unterprogramm. Also mache es
damit weiter bis zu 'ret'. Da aber keine gültige Rücksprungadresse auf
dem Stack liegt (kein 'rcall'), ist die Reaktion des Programms ab der
Stelle undefiniert.
MfG Spess
alles klar, werde es korrigieren. Da mir sonst keiner sagen kann das ich grundlegend was falsch mache, muss wohl das display im arsch sein ?!
Hi >muss wohl das display im arsch sein ?! Warum? Die Dinger sind robuster als du denkst. >Da mir sonst keiner sagen kann das ich grundlegend was falsch mache,... Was denkst du eigentlich, soll deiner Meinung nach, nach der Initialisierung passieren? MfG Spess
spess53, das man irgendwas auf dem Display erkennt, also die Felder der Buchstaben zB, die sieht man ja bei vorhandener Hintergrundbeleuchtung auch leicht. Wenn die Routinen von Diplaykontrast und Display Clear durchlaufen, tut sich rein garnichts, das Display sieht genauso aus als wenn es aus wäre und ich es in der Hand halte.
Nur so paar Gedanken von einem, der niemals ATmega benutzt... Du ziehst hoffentlich mit den LEDs nicht zu stark an den D0-7, so dass am LCD keine guten Pegel mehr ankommen? Die EADOG-Teile (hab auch welche) lassen sich bis 0Hz herunter takten? Kann es an der externen Beschaltung des Spannungsvervielfachers liegen. Da hat man ja so viele (Fehler-)M"oglichkeiten.
Dieser Thread ist voellig sinnlos ohne ordentliche Bilder.
@marc, was heißt zeiht? damit kann ich nichts anfangen :) die LEDs sind parallel zum Display, und die Pegel stimmen auch. Mit der Taktung hab ich keine Ahnung, da hab ich noch nicht geschaut. @peter. habe 2 Bilder gemacht, wenn es dir was hilft, die Beschaltung habe ich ja oben schon erwähnt
O.k., die Bilder sind gut - aber ein bisschen viele Draehte drauf ;-) Bei mir funktioniert auf dem Breadboard nix, was mehr als 10 Draehte hat...
Ohne jetzt weiter geschaut zu haben: Du solltest am PortC deine Steuerleitungen ebenfalls auf Ausgang konfigurieren.
wegen den kontakten auf dem board oder was? Habe mir jetzt auch schon ein neues display bestellt, da ich denke das es defekt ist, wenn dem nicht so sei, dann muss ich kurz ausrasten :D
Deine Delay-Routinen: Wie hast du dimensioniert, bzw. welche Taktfrequenz hat eigentlich dein µC? Was hast du ausgerechnet, wie lange diese Schleife
1 | delay: |
2 | |
3 | ldi R25,HIGH(c1) ; Lade MSB-Register mit Schleifenwert |
4 | ldi R24,LOW(c1) ; Lade LSB-Register mit Schleifenwert |
5 | |
6 | Loop: ; Schleifenbeginn |
7 | |
8 | |
9 | sbiw R24,1 ; Doppelregisterwert um Eins verringern |
10 | brne Loop ; wenn nicht Null dann wieder Schleifenbeginn |
11 | ret |
mit einem Wert von 5000 für c1 benötigt?
ach du schande is mir jetzt peinlich^^ , ich hatte das eigentlich schon geschrieben gehabt, aber anscheind nicht gespeichert! danke karl!
Berechnet habe ich die Delays erstmal nicht, da mir das erstmal nicht so wichtig war, hauptsache etwas langsamer und ich kann schauen ob die Bytes richtig sind. Die Standarttaktfrequenz von 1 Mhz, soweit ich weis. also ext. takt
Sunny schrieb:
> Die Standarttaktfrequenz von 1 Mhz, soweit ich weis. also ext. takt
Siehst du.
Damit fängt es schon an.
"Soweit ich weiß" ist hier nicht gut genug.
Wenn du sicher bist, dass du über den minimalen Grenzen liegst, ist es
ok. Aber die Taktfrequenz nicht zu kennen, ist nicht gut. Da kann man so
schlecht Dinge kontrollieren und nachrechnen. Im Tut werden delay-Zeiten
von 5ms verwendet. Wie soll ich jetzt kontrollieren, wie lang deine
Zeiten sind?
ein sbiw braucht 2 Takte
ein brne ebenfalls (wenn die condition true ist)
macht 4 Takte in der Schleife.
Bei 1 Mhz macht das 1000000 / 4 = 250000 -> 5000 / 250000 = 0.02
also 20 ms.
Sollte also leicht ausreichen (bei 1 Mhz)
Du hast recht Karl, da ich keinen externen Quarz verwende wird der interne 1Mhz Takt verwendet. Der Corser wird schonmal angezeigt. Danke dir bis dahin ;)
leider finde ich nicht den editierbutton. der schleifenwert beträgt 50.000, also kommen wir auf 0.2 sekunden. nur nebenbei
Ich habe immer wieder mit den DOGM displays zu tun. Kann hier auch noch ein paar Tipps geben: - Die Delays sind enorm wichtig. Lieber etwas zu lange, als zu kurz. Du solltest unbedingt nochmal ins Datenblatt des Kontrollers sehen, dann siehst Du z.B. >40mS vor der Initialisierung, und vorallem nach dem Followercontrol Befehl mindestens 200mS. Evtl habe ich das jetzt in der Eile übersehen. Aber bei Dir ist das einfach immer "delay". - Wenn ich es richtig sehe, hast Du ein schwarzes Display mit transparenten Zeichen? Das dürfte nur schwer ohne Beleuchtung zu erkennen sein. Wenn Du einen etwas falschen Kontrast in der Initialisierung wählst, sieht man nix. - Auch schliesse ich mich den Vorrednern an bezüglich den LEDs (das macht evtl Probleme), und vorallem gibts Du ja nach der Initialisierung noch nichts auf dem Display aus? Meiner Meinung nach bleibt es somit schwarz. Wenn Du Deinen aktuellen Code nochmals posten könntest, kann ich evtl Deinen Code auf einem meiner Displays ausprobieren am Wochenende. (Falls es mir langweilig werden sollte :) Gruss Roman
Ah mein Post ist ja nun überflüssig, wenn der Cursor angezeigt wird...
Ja der Cursor, der wird angezeigt :) Also dadurch das ich eine LED dahintergelegt habe kann man schon was erkennen. die richtige hintergrundbeleuchtung müsste heute noch ankommen. Wie gesagt die initialisierung funktioniert jetzt, und bin im moment bei 200ms pro delay, d.h. bei allen. Wenn das so lange dauert ist das eigentlich nicht schlimm, da es eh nur fürs auto gedacht ist. Also einen blinkenden schwarzen Balken an erster stelle erscheint schonmal, also kann ich davon ausgehen das alles funktioniert? der aktuelle code anbei
Vielen dank euch allen! war eine schwere Geburt, aber jetzt klappt alles soweit habe meine ersten Zeichen auf dem Display ausgegeben :)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.