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
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
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.
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
Dachte ich auch, leider sagt avrstudio trotzdem register invalid.
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).
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
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
mhmmmm, woran könnte das liegen? die .include ist ja die richtige, da müsste der compiler das doch wohl verstehen oder?
seltsam, da is wohl irgendwas mit meinem compiler krumm, include passt, einstellungen passen... hm
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.