Forum: Mikrocontroller und Digitale Elektronik Lcd-Ansteuerung aus Tutorial funktioniert nicht!


von B.K. (Gast)


Lesenswert?

Hallo allerseits,

habe endlichmal angefangen mich in die Welt der Mikros hervor zu wagen.
Nun hänge ich an der Stelle des Tutorials fest wo ein Text auf dem 
Display ausgegeben werden soll.

Bei mir kommen immer wieder die errors call k: Unsupported instruction 
on ATmega8 bei laden der lcd routines.

Bin sehr dankbar über jede Hilfe !!!

Gruß

von Johannes M. (johnny-m)


Lesenswert?

Den Befehl call gibt es auf dem ATMega nicht. Nimm rcall. Das selbe gilt 
übrigens, falls irgendwo ein jmp steht, das muss entsprechend durch rjmp 
ersetzt werden.

Im Datenblatt steht übrigens ein Instruction Set Summary. Da steht drin, 
welche Befehle es für den jeweiligen AVR überhaupt gibt.

von B.K. (Gast)


Lesenswert?

Danke für die schnelle Antwort.
Da ich aber die codes aus dem tutorial 1:1 übernommen und auch noch mal 
nachgeprüft habe kann ich das ausschliessen.

Hier nochmal der ganze error beim Build:

....\lcd-routines.asm(163)bzw.(243): error: call k: Unsupported 
instruction set on ATmega8

von Willi W. (williwacker)


Lesenswert?

Stimmt Dein Compiler mit dem des Tuts überein? Welchen Compiler setzt Du 
ein?

Sicher, dass Du den gleichen Controller nimmst?

von Johannes M. (johnny-m)


Lesenswert?

Nein, da ist anscheinend tatsächlich ein Fehler im Code zum Tutorial! An 
einer Stelle steht "call lcd_data". Also wie oben schon gesagt: ersetze 
call durch rcall und es sollte laufen, falls nicht noch mehr Fehler drin 
sind.

EDIT:
Korrigiere: Es steht an ZWEI Stellen call statt rcall.

Übrigens: Es macht i.d.R. kaum Sinn, eine Fehlermeldung ohne den 
dazugehörigen Code zu posten...

von B.K. (Gast)


Lesenswert?

Sorry das mir jetzt peinlich,habe den Atmega8 16PU drin. Habe oben in 
der include aus 8 ne 16 gemacht und nun funktioniert es.

Trotzdem danke für die Hilfe.

von Johannes M. (johnny-m)


Lesenswert?

Klar, wenn Du das Ding für einen ATMega16 assemblierst, dann geht das 
Assemblieren, weil der Mega16 den call-Befehl hat. Aber der Code läuft 
nicht auf dem Mega8!!!

Der Mega8-16PU ist ein Mega8 und der Mega8 hat (wie oben erwähnt) keinen 
call-Befehl! Code, der für einen Mega16 assembliert wurde, läuft unter 
Garantie nicht auf dem Mega8!

Du musst die calls ersetzen, sonst gar nichts. Ich hoffe, das ist jetzt 
klar...

von B.K. (Gast)


Lesenswert?

Trotzdem versteh ich es nicht da es sich ja um einen ATmega8 handelt.

von B.K. (Gast)


Lesenswert?

Jo vielen dank!!!!!

von Johannes M. (johnny-m)


Lesenswert?

B.K. wrote:
> Trotzdem versteh ich es nicht da es sich ja um einen ATmega8 handelt.
EBEN! Der Mega8 hat keinen call-Befehl, sondern nur einen rcall. Deshalb 
musst Du, um den Code auf einem Mega8 zum laufen zu bringen, die beiden 
vergessenen "r"s im Code hinzufügen! Ein Mega16 ist was völlig anderes!

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.