Forum: Mikrocontroller und Digitale Elektronik kurze Frage zu TC1602A Initialisierung via t2313


von Rudi D. (rulixa)


Lesenswert?

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

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.