Forum: Mikrocontroller und Digitale Elektronik Mega8 assembler LCD ADC beendet nicht


von Amper (Gast)


Angehängte Dateien:

Lesenswert?

Moin,
Bin gerade dabei eine ECU für meine modellturbine zu bauen, 16x2 lcd, 
Mega8, lcd routine aus dem tut leicht verändert so, dass E und RS an 
PORTB hängen, obwohl die daten durch PORTC laufen. Das funnktioniert 
soweit alles einwandfrei und sollte mit dem Problem (eigentlich) nichts 
zu tuhen haben.

Die Sache ist, dass ich zwecks Abgastemperatur ein thermoelement mit Op 
am ADC4 (PC4) hängen habe. Wenn ich jetzt den ADC arbeiten lasse mit:


;ADC initialisierung
ldi temp, 0b01000100
sts ADMUX, temp    ; 2.56V Referenz, Left Adjust, PC4

...

ldi temp, 0b11000100
sts ADCSRA, temp   ;Start ADC conversion

readADCvalue:
lds temp, ADCSRA
sbrc temp, 6 ; 0 wenn fertig
rjmp readADCvalue

lds temperaturL, ADCL
lds temperaturH, ADCH


Bleibt das rogramm in der schleife hängen. ADSC wird also nie 0. Wenn 
ich die schleife weg lasse und auf free running stelle, bzw es mit 
interupt versuche bleibt nichts mehr hängen, aber aus ADCH und ADCL 
kommt immer die gleiche Zahl. Wenn ich innerhalb vom hängenden loop den 
Wert von temp aufs Display ausgebe bekomme ich erwartungsgemäß 11000100, 
also das gleiche, was ich oben in ADCSRA geladen habe.

Könnte es sein, dass das an der PORTC verwendung vom LCD lieg? Aber dan 
sollte das ding ja zumindest die konvertierung abschließen können oder?
Kann mir da jemand helfen? Bin am ende meines wissens was das angeht. 
Der volle (wohl etwas unübersichtliche) code steht im Anhang.

Danke schon mal
Amper

von Uwe (Gast)


Lesenswert?

Hi,
>sts ADMUX
versuche es mal mit
 out  ADMUX
das selbe bei:
>lds temp, ADCSRA
-> in temp, ADCSRA
.....
für LDS/STS hat zb. ADCSRA die falsche Adresse

Viel Erfolg, Uwe

von Amper (Gast)


Lesenswert?

Leider nicht, dass ist beim mega außerhalb des bereiches, lässt sich nur 
mit sts und lds erreichen. die inits etc habe ich von einem vorherigen 
test 1:1 übernommen, sollte eigentlich soweit alles passen.

von spess53 (Gast)


Lesenswert?

Hi

>Leider nicht, dass ist beim mega außerhalb des bereiches, lässt sich nur
>mit sts und lds erreichen.

Aber nicht beim ATMega8. Da liegen alle IO-Adressen im Bereich von 
in/out.

MfG Spess

von Amper (Gast)


Lesenswert?

Dachte ich auch, leider sagt avrstudio trotzdem register invalid.

von Karl H. (kbuchegg)


Lesenswert?

Das lässt sich leicht klären.
Was sagt das Datenblatt. Da ist ein Kapitel drinnen, in dem alle 
Register aufgeführt sind (ist recht weit hinten im Datenblatt).

von Karl H. (kbuchegg)


Lesenswert?

http://www.atmel.com/images/atmel-2486-8-bit-avr-microcontroller-atmega8_l_datasheet.pdf+


Tja. Pech für dich.
Alle Register des M8 sind ausnahmslos über in/out zu erreichen.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Amper schrieb:
> Dachte ich auch, leider sagt avrstudio trotzdem register invalid.

Grade probiert.
Bei ADCSRA und ADMUX die sts bzw lds durch out und in ersetzt.
Assembliert einwandfrei

von Amper (Gast)


Lesenswert?

mhmmmm, woran könnte das liegen? die .include ist ja die richtige, da 
müsste der compiler das doch wohl verstehen oder?

von Amper (Gast)


Lesenswert?

seltsam, da is wohl irgendwas mit meinem compiler krumm, include passt, 
einstellungen passen... hm

von Peter D. (peda)


Lesenswert?

Amper schrieb:
> die .include ist ja die richtige

Die Include ist immer richtig, nämlich <avr/io.h>.
Welcher AVR konkret, stellt man im Compiler ein.

von Karl H. (kbuchegg)


Lesenswert?

Amper schrieb:
> seltsam, da is wohl irgendwas mit meinem compiler krumm, include passt,
> einstellungen passen... hm

Welches AVR-Studio?

Die neueren haben da auch so eine besch... Sache, dass sie auch bei 
Assembler den µC Typ voreingestellt haben wollen und die Angabe im 
Assembler Code übergehen.


PS: Es heisst Assembler und nicht Compiler.

Compiler  ... Hochsprache
Assembler ... einfache Umwandlung von Memnonics in die Befehls-Opcodes.

Siehe PeDa. Wenn du das Ding Compiler nennst, kommt es zu 
Verwechslungen.

von Amper (Gast)


Lesenswert?

Hat sich erledigt, hatte es in geistiger abwesendheit mit MOV versucht 
klar, dass das nicht geht.... Danke an alle beteiligten, hätte  wohl 
noch ne weile gedauert, bis ich durch das brett geschaut hätte.... :D :D

mfg Amper

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.