kurze Frage zu TC1602A Initialisierung via t2313

OP #1890799
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.