Hallo zusammen, ich versuche nun schon seit Stunden das HD44780 mittels Basic (Picaxe) zu initialisieren. Dazu gehört dieser Code: ' LCD HD44780 ' 01. Juli 2016 #picaxe 20x2 ' output B.0 Display D0 ' output B.1 Display D1 ' output B.2 Display D2 ' output B.3 Display D3 ' output B.4 Display D4 ' output B.5 Display D5 ' output B.6 Display D6 ' output B.7 Display D7 ' output C.0 Display Enable ' output C.7 Display RS ' WS liegt hardwaremaessig auf LOW symbol E = C.0 symbol RS = C.7 symbol D0 = B.0 symbol D1 = B.1 symbol D2 = B.2 symbol D3 = B.3 symbol D4 = B.4 symbol D5 = B.5 symbol D6 = B.6 symbol D7 = B.7 let dirsB = %00111111 ' Port B als output let dirsC = %10000001 ' Port B C.7 und C.0 als output main: pause 25 ' 0,025 sec warten let pinsB = %00011000 ' Init Display let pinsC = %00000001 ' RS=0, E=0 'Befehl 3x uebernehmen for b0 = 1 to 3 ' 3x wiederholen pause 20 ' 20 ms warten low E ' Enable auf L pause 20 ' 20 ms warten high E ' Enable auf H next b0 let pinsB = %00111000 ' Display 2-zeilig, 5x8-Matrix prog: ' Befehl uebernehmen pause 20 ' 20 ms warten low E ' Enable auf L pause 20 ' 20 ms warten high E ' Enable auf H return let pinsB = %00001000 ' Display aus gosub prog ' UP Daten- und Befehlsuebergabe let pinsB = %00000001 ' Display loeschen gosub prog ' UP Daten- und Befehlsuebergabe let pinsB = %00000110 ' Cursor nach rechts wandernd, ' kein Display-Shift gosub prog ' UP Daten- und Befehlsuebergabe let pinsB = %00001100 ' Display ein gosub prog ' UP Daten- und Befehlsuebergabe wait 60 stop Das Display bleibt dabei: erste Zeile 16 Rechtecke 5x9, zweite Zeile nichts. Was, zum Teufel mache ich falsch!? Danke für eure Hilfe!
:
Verschoben durch User
Hallo, warum setzt Du hier nur 6 Bit als Ausgang?
1 | let dirsB = %00111111 ' Port B als output |
Das timing der Reset-Routine ist auch etwas anders...
1 | 'Befehl 3x uebernehmen |
2 | for b0 = 1 to 3 ' 3x wiederholen |
3 | pause 20 ' 20 ms warten |
4 | low E ' Enable auf L |
5 | pause 20 ' 20 ms warten |
6 | high E ' Enable auf H |
7 | next b0 |
Außerdem ist Enable H-aktiv, der Ruhezustand ist also Low und der Puls also L -> H-> L. 20ms warten stören hier zwar nicht direkt, aber soll das Display sich langweilen? Schon ein Init dürfte so Sekunden dauern, wielange willst Du bei Ausgaben dann warten? ;-) Gruß aus Berlin Michael
Lötknecht schrieb: > Was, zum Teufel mache ich falsch!? Vieles.
1 | let dirsB = %00111111 ' Port B.0-B5 als output |
2 | Sollte sein: |
3 | let dirsB = %11111111 ' Port B.0-B7 als output |
4 | |
5 | let pinsB = %00011000 ' Init Display (Wert falsch) |
6 | let pinsC = %00000001 ' RS=0, E=1 |
7 | Sollte sein: |
8 | let pinsB = %00110000 ' Init Display (mit 0x30) !!! |
9 | let pinsC = %00000000 ' RS=0, E=0 |
10 | |
11 | prog: |
12 | ' Befehl uebernehmen |
13 | ...
|
14 | Sollte sein: |
15 | data: |
16 | ' DATA uebernehmen |
17 | let pinsC = %10000000 ' RS=1, E=0 |
18 | goto SetEN |
19 | prog: |
20 | ' Befehl uebernehmen |
21 | let pinsC = %00000000 ' RS=0, E=0 |
22 | SetEN: |
23 | pause 1 ' 1 ms warten (zur Sicherheit) |
24 | high E ' Enable auf H |
25 | pause 1 ' 1 ms warten |
26 | low E ' Enable auf L |
27 | return
|
Probiere das erstmal.
:
Bearbeitet durch User
Moin, ich habe das mal nachvollzogen. Der Code sieht so aus: ' LCD HD44780 #picaxe 20x2 ' output B.0 Display D0 ' output B.1 Display D1 ' output B.2 Display D2 ' output B.3 Display D3 ' output B.4 Display D4 ' output B.5 Display D5 ' output B.6 Display D6 ' output B.7 Display D7 ' output C.0 Display Enable ' output C.7 Display RS ' WS liegt hardwaremaessig auf LOW symbol E = C.0 symbol RS = C.7 symbol D0 = B.0 symbol D1 = B.1 symbol D2 = B.2 symbol D3 = B.3 symbol D4 = B.4 symbol D5 = B.5 symbol D6 = B.6 symbol D7 = B.7 let dirsB = $FF ' Port B als output let dirsC = $81 ' Port B C.7 und C.0 als output main: pause 1 ' 0,025 sec warten let pinsB = $30 ' Init Display let pinsC = $00 ' RS=0, E=0 'Befehl 3x uebernehmen for b0 = 1 to 3 ' 3x wiederholen pause 1 ' 1 ms warten high E ' Enable auf H pause 1 ' 1 ms warten low E ' Enable auf L next b0 let pinsB = %00111000 ' Display 2-zeilig, 5x8-Matrix gosub prog let pinsB = %00001000 ' Display aus gosub prog ' UP Daten- und Befehlsuebergabe let pinsB = %00000001 ' Display loeschen gosub prog ' UP Daten- und Befehlsuebergabe let pinsB = %00000110 ' Cursor nach rechts wandernd, kein ' Display-Shift gosub prog ' UP Daten- und Befehlsuebergabe let pinsB = %00001100 ' Display ein gosub prog ' UP Daten- und Befehlsuebergabe prog: ' Befehl uebernehmen pause 1 ' 1 ms warten high E ' Enable auf H pause 1 ' 1 ms warten low E ' Enable auf L return wait 60 stop Geht nicht! Ich kenne das aus C++ (INI) anders: 1. 8 bit-Interface (D1=1) 2. 2-zeiliges Display (D3==1) 3. 5x8 (D2=0) 4. Displayshift aus (D0=0) 5 Kursor nach jedem Zeichen nach rechts (D1=1) Und am Anfang: 1. Auf das interne RESET mind. 15ms warten 2. Auf 8 bit setzen mind. 4.1ms warten 3. Auf 8 bit setzen mind. 100us warten VG!
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.