Hallo Leute, ich bin am Verzweifeln. Ich habe das Pollin-Eval-Board + Addon-Board und arbeite gerade das ASM-Tutorial durch und bin nun beim LCD-Display angelangt. Nur irgendwie will mein Code nicht so recht funktionieren. Ich habe bereits das Tesprogramm durchlaufen lassen. Ohne Probleme, jedoch mein eigener Code und der Code von der Webseite (mit den angepassen Ports) funktioniert leider nicht. Das Display wird vermutlich initialisiert (Kontrast ändert sich), aber es erscheinen keine Zeichen. Bin ich zu dumm, oder ist dieser LCD-Controller doch nicht kompatibel mit dem des Tutorials? Vielleicht ist im Code auch ein Fehler.. Ich versuche im 4-Bit Modus zu arbeiten: PA4-7 -> DB4-7 R/W -> GND PA1 -> Enable PA2 -> RS Ich hoffe ihr könnt mir helfen.
Wie man sehen kann habe ich das Delay schon deutlich erhöht. Ich weiß irgendwie nicht, wie ich weiter machen soll. Es ist doch komisch, dass das Pollintestprogramm tadellos funktioniert, aber der Code der Webseite überhaupt nicht. Die Portanschlüsse habe ich zig mal kontrolliert. Es hätte dann ja auch nciht mit dem Pollintestprogramm klappen sollen, wenn ich zu blöd wäre, den Kontroller richtig anzuschließen. Help, Danke!
Kann mir keiner helfen?? Vllt. einen Tipp? Danke im Voraus!! Gruß
; 4-Bit 2 Zeilen 5x8 push lcd_reg ldi lcd_reg, 0b10000010 rcall lcd_command ldi lcd_reg, 0b11000000 rcall lcd_command ldi lcd_reg, 0b01000000 rcall lcd_command pop lcd_reg Das kommt mir seltsam vor. Bit7 ist für die RAM-Adresse zuständig und hat in der init nichts zu suchen. Ich habe dir mal meine Lib für dieses Display angehängt. Läuft auf einem Atmega8 mit 1Mhz. Thomas
Tja, was soll ich sagen? Mit deinem Code zeigt das Display leider garnichts an. Ich bin gestern soweit gekommen, dass ich mit eigenem Code zumindest wirre Zeichen anzeigen lassen konnte. Das Display verwendet einen SPLC780D-Controller ich habe mich am Datenblatt entlang gehangelt, werde aber aus einigen Sachen nicht so ganz schlau. Auf Seite 9 steht die Prozedur für einen 4-Bit Modus, jedoch steht dort man müsse nur ein Nibble (0b0010) senden (Schritt 2). Auf Seite 11 steht man müsse 3 mal ein Nibble (0b0011) senden. Verwechsle ich das was mit dem internen Reset? Vielen Dank für eure Hilfe. Gruß Timo
ENDLICH!!! Der 8-Bit-Modus funktioniert!! Na, dann werde ich es jetzt nochmal mit dem 4-Bit-Modus probieren. Dann solls wohl klappen. Vllt. kann dem einen oder anderen meine Datei helfen. Ist, wie man sieht, nur zum Testen da.
> Mit deinem Code zeigt das Display leider garnichts an.
Hast du den Port, Rs, RW und EN an deine Beschaltung angepasst?
Hallo Leute, also nun funktioniert auch der 4-Bit Modus. Warum es bei mir nicht funktioniert hat, lag wohl am anderen Controller. Mein display verwendet den SPLC780D von Sunplus; das steht zumindes auf der Herstellerseite www.oppod.com! Das ist aber nicht alles, wenn ich mich am Datasheet von Sunplus halte, dann kann ich die Zeilenanzahl nicht einstellen. Verwende ich aber das Manual, welches oppod bereitstellt und sehr unterschiedlich im Vergleich zu dem von Sunplus ist (vgl. Bilder), dann geht auf einmal alles wunderbar.... Das kann doch wohl nicht sein.. Gerade als Anfänger ist sowas nen riesen Stein im Weg. Man vergleiche beide Codes (1. meiner & 2. der vom Tutorial): !!! Nicht wundern die Nibbles sind vertauscht!!! PA4-7 -> DB 4-7
1 | ; 3-Mal / Kann weggelassen werden... |
2 | ldi tmp, 0b00110000 |
3 | out PORTA, tmp |
4 | rcall en |
5 | rcall en |
6 | rcall en |
1 | ldi temp1, 0b00000011 ; muss 3mal hintereinander gesendet |
2 | out PORTD, temp1 ; werden zur Initialisierung |
3 | rcall lcd_enable ; 1 |
4 | rcall delay5ms |
5 | rcall lcd_enable ; 2 |
6 | rcall delay5ms |
7 | rcall lcd_enable ; und 3! |
8 | rcall delay5ms |
Die Codes sind im Grunde gleich, jedoch kann ich bei mir das Senden auch weglassen, es funktioniert genauso.
1 | ; 4-Bit |
2 | ldi tmp, 0b00100000 |
3 | out PORTA, tmp |
4 | rcall en |
5 | rcall en |
1 | ldi temp1, 0b00000010 ; 4bit-Modus einstellen |
2 | out PORTD, temp1 |
3 | rcall lcd_enable |
4 | rcall delay5ms |
exakt gleich!
1 | ; 4-Bit / 1-Zeile |
2 | ldi tmp, 0b10000000 |
3 | out PORTA, tmp |
4 | rcall en |
1 | ldi temp1, 0b00101000 ; 4Bit / 2 Zeilen / 5x8 |
2 | rcall lcd_command |
Hier unterscheiden sich beide Befehle stark!!
1 | ; Display on / Cursor on / Blink on |
2 | ldi data, 0b00001111 |
3 | rcall lcd_cmd |
1 | ldi temp1, 0b00001100 ; Display ein / Cursor aus / kein Blinken |
2 | rcall lcd_command |
Dasselbe! nur ich verwende einen blinkenden Cursor
1 | ; Entry-Mode: Inc by 1 |
2 | ldi data, 0b00000010 |
3 | rcall lcd_cmd |
1 | ldi temp1, 0b00000100 ; inkrement / kein Scrollen |
2 | rcall lcd_command |
3 | ret |
Auch wieder ein starker Unterschied! Da ich nicht genau weiß warum dies nun so ist, kann ich die Unterschiede auch schlecht begründen, dennoch hoffe ich, dass ich dem einen oder dem anderen damit helfen konnte!! Vielleicht meldet sich ja noch jmd der Pros :-) Danke für die Hilfe! Gruß Timo
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.