Forum: Mikrocontroller und Digitale Elektronik EADOGM126 initiiert nicht mit Assembler


von Sunny (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Sunny (Gast)


Lesenswert?

Es ist der EADOGM162 sorry verschrieben ^^

von B. W. H. (kormorix)


Lesenswert?

Hallo Sunny,
schau Dir mal im Handbuch des ATMega8 an, was an Adresse 0 ff. (org 0!) 
stehen muß. Stichwort Interrupttabelle.

Viel Erfolg
kormorix

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>  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

von Sunny (Gast)


Lesenswert?

Muss ich diese JTAGFuse deaktivieren?

von Sunny (Gast)


Lesenswert?

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 :)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 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...

von Sunny (Gast)


Lesenswert?

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?

von Sunny (Gast)


Lesenswert?

keiner weiter noch Tips für mich ?

von spess53 (Gast)


Lesenswert?

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

von Sunny (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von Sunny (Gast)


Lesenswert?

alles klar, werde es korrigieren.

Da mir sonst keiner sagen kann das ich grundlegend was falsch mache, 
muss wohl das display im arsch sein ?!

von spess53 (Gast)


Lesenswert?

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

von Sunny (Gast)


Lesenswert?

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.

von Marc Prager (Gast)


Lesenswert?

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.

von P. S. (Gast)


Lesenswert?

Dieser Thread ist voellig sinnlos ohne ordentliche Bilder.

von Sunny (Gast)


Angehängte Dateien:

Lesenswert?

@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

von P. S. (Gast)


Lesenswert?

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...

von Karl H. (kbuchegg)


Lesenswert?

Ohne jetzt weiter geschaut zu haben:

Du solltest am PortC deine Steuerleitungen ebenfalls auf Ausgang 
konfigurieren.

von Sunny (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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?

von Sunny (Gast)


Lesenswert?

ach du schande is mir jetzt peinlich^^ , ich hatte das eigentlich schon 
geschrieben gehabt, aber anscheind nicht gespeichert!

danke karl!

von Sunny (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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)

von Sunny (Gast)


Lesenswert?

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 ;)

von Sunny (Gast)


Lesenswert?

leider finde ich nicht den editierbutton.

der schleifenwert beträgt 50.000, also kommen wir auf 0.2 sekunden.

nur nebenbei

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Corser
Meinst du den Cursor?? ;-)

von Roman (Gast)


Lesenswert?

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

von Roman (Gast)


Lesenswert?

Ah mein Post ist ja nun überflüssig, wenn der Cursor angezeigt wird...

von Sunny (Gast)


Angehängte Dateien:

Lesenswert?

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

von Sunny (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.