Ich wollte vor der LCD-Init das PortB als LCD-Port besonders definiert
gestalten und habe, wie unten zu sehen, PortB auf 0 setzen wollen.
Komischerweise funktioniert dann die nachfolgende, vorsorgende Init, die
der Standardini entspricht, auf 8 bit , 1 Zeile nicht, mit FF aber wohl.
Ich komme nicht drauf. WIe initialisiert sich eigentlich PortB vom
t2313?
Habe dazu nichts gefunden.
1 | ;Init the LCD an PortB entsprechend TC1602A_Manual.pdf
|
2 | ;die Registernamen sind noch Reste vom abschreiben,
|
3 | lcd_init:
|
4 | ldi R16, $FF ;PortB alle auf Output Seite50
|
5 | out DDRB, R16
|
6 | ;clr R16 ;mit 0 gehts nicht wieso??
|
7 | out PortB, R16 ;definierter Status fürs Display
|
8 |
|
9 | ldi R18,100 ;n x 2ms delay
|
10 | powerupwait: rcall delay2ms
|
11 | dec R18
|
12 | brne powerupwait
|
13 | ldi R16,0b00000011 ;8bit mode,
|
14 | out LCD_PORTB, R16 ;
|
15 | rcall lcd_enable ;1,
|
16 | rcall delay2ms
|
17 | rcall delay2ms
|
18 | rcall lcd_enable ;2
|
19 | rcall delay2ms
|
20 | rcall lcd_enable ;and no. 3
|
21 | rcall delay2ms ;Display ist jetzt eindeutig im 8bit mode
|
22 |
|
23 | ;LCD: function set
|
24 | ldi R16,0b00000010;4bit-Mode, noch im 8 bit mode gesendet
|
25 | out LCD_PORTB, R16
|
26 | rcall lcd_enable
|
27 | rcall delay2ms ;Display ist jetzt im 4bit mode
|
28 |
|
29 | ; ab nun kann das Byte jeden Wert haben, da es in 2 nibbles aufgeteilt
|
30 | ; wird, die, via PB[3:0] kommend, an das Display DB[7:4] gelangen.
|
31 |
|
32 | funcset:ldi R16, 0b00101000 ;4bit, 2 Zeilen, 5x7 dots + cursor
|
33 | rcall lcd_cmd ;incl. 50 us delay
|
34 | disp_on:ldi R16, 0b00001110 ;Display on, Cursor on, no blink
|
35 | rcall lcd_cmd
|
36 | dispclr:ldi R16, 0b00000001 ;clear Display,Cursor home,
|
37 | rcall lcd_cmd ;execution in 1,52 ms
|
38 | rcall delay2ms ;also delay nötig
|
39 | entmode:ldi R16, 0b00000110 ;increment, Cursor move
|
40 | rcall lcd_cmd
|
41 |
|
42 | ;sei ;enable all interrupts
|
43 | ldi var,1 ;Pointer auf Tabelle der Stepweite per
|
44 | rjmp main ;Encoderdrehung
|
45 | ; so, init ist getan
|