Hallo, erst mal ein Danke vorweg für alle, die sich mit meinem Post beschäftigen. Folgende Hardware habe ich hier: - ein at mega32, 1 MHz Takt - ein LCD-Modul 2x16 mit HD 44780 Kontroller (EA DIP162-D) Angeschlossen ist das Display an PortB. PB0 RS PB1 R/W PB2 E PB4 D4(D0 für 4 Bit Modus) PB5 D5(D1 für 4 Bit Modus) PB6 D6(D2 für 4 Bit Modus) PB7 D7(D3 für 4 Bit Modus) Die Hardware ist ausgiebig getestet und zu 100% funktionsfähig. Jetzt zu meinem Problem. Ich sitze schon seit 5 Tagen dran und hab es noch nicht geschafft kontrolliert ein Zeichen auf dem Display darzustellen. Irgendwas mache ich wohl falsch aber ich komm nicht drauf. Das Tutorial habe ich auch von oben bis unten durch gearbeitet, hat mich aber nicht weiter gebracht. Ich poste hier mal 3 Versuche von mir, vielleicht kann mir irgendwer weiterhelfen. Danke anemby
Mal so ganz auf die schnelle: Du scheinst WinAVR zu nutzen. Warum nimmst du nicht einfach das Beispiel stdiodemo aus der WinAVR installation? Dort gibt es sehr gut struturiertes 4-Bit LCD Programm, dass auch schon funktioniert und dokumentiert ist. Bei div. LCD gibt es trotz gleichen Controllers unterschiedliches Verhalten, wenn man in der SW mit dem Timing "pfuscht". Das ist in dem Beispiel schon bereinigt und geht auch mit "langsamen" Displays. Nichts und niemand nimmt dir die Möglichkeit, dann noch deine weitere SW zu entwickeln, aber LCDs sind schon soooooooo oft der Stein des Anstosses gewesen, dass die eigene SW-Entwicklung nicht mehr lohnt.
Danke aber die Demo scheint mir auch nicht weiter zu helfen, da dort das BUSYFLAG genutzt wird, ich das aber nicht zur Verfügung habe bei meinem Display.
Hallo, ich bezweifle, dass jemand hier die Geduld hat, alle 3 von dir hochgeladenen Versionen durchzuackern. Tipp fürs nächste Mal: beschränke dich auf eine C-Datei, und lade sie auch in .c hoch, dann wird es auch vom Forum angezeigt und man muss nicht runterladen und entpacken. Was mir beim 1. Blick so auffällt: Du hast die Datenleitungen des LCDs auf die oberen 4 bit des Ports gehängt. Die meisten LCD-Funktionen inklusive das Tutorium hier auf der Seite verwenden dazu aber die unteren Portbits. Falls du trotzdem die oberen Bits verwenden willst, musst du die Daten bei der entsprechenden Funktion 4 bit nach links schieben. Aus deiner "LCDsteuerung.c":
1 | void lcd_data(unsigned char temp1) |
2 | {
|
3 | unsigned char temp2=temp1; |
4 | |
5 | LCD_PORT |= (1<<LCD_RS); |
6 | |
7 | temp1=temp1 >> 4; |
8 | temp1=temp1 & 0x0F; |
9 | LCD_PORT &= 0xF0; |
10 | LCD_PORT |= temp1; |
11 | lcd_enable(); |
12 | |
13 | temp2=temp2 & 0x0F; |
14 | LCD_PORT &= 0xF0; |
15 | LCD_PORT |= temp2; |
16 | lcd_enable(); |
17 | |
18 | _delay_us(42); |
19 | }
|
Korrekt für deine Belegung wäre sowas:
1 | void lcd_data(unsigned char temp1) |
2 | {
|
3 | unsigned char temp2=temp1; |
4 | |
5 | LCD_PORT |= (1<<LCD_RS); |
6 | |
7 | temp1=temp1 & 0xF0; |
8 | LCD_PORT &= 0x0F; |
9 | LCD_PORT |= temp1; |
10 | lcd_enable(); |
11 | |
12 | temp2=temp2 << 4; |
13 | LCD_PORT &= 0x0F; |
14 | LCD_PORT |= temp2; |
15 | lcd_enable(); |
16 | |
17 | _delay_us(42); |
18 | }
|
Oder du machst dir das Leben einfach und hängst die Datenbits auf die Portbits 0-3. Gruß, David
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.