LCD Display Problem bei ATTiny26

Gast #591867
Lesenswert?
• ▲
▼
Hallo. ich wollte das lcd tutorial durcharbeiten und habe ein 20x4 
display bestellt. ist gestern gekommen und habe es mit folgendem code 
probiert:
1
; Bei 4Mhz ATTiny26
2

3
.include "tn26def.inc"       
4

5
.def temp1 = r16
6
.def temp2 = r17
7
.def temp3 = r18
8
 
9
 
10
           ldi temp1, RAMEND     ; LOW-Byte der obersten RAM-Adresse
11

12
 
13
           rcall lcd_init              ; Display initialisieren
14
           rcall lcd_clear             ; Display löschen
15
 
16
           ldi ZL, LOW(text*2)         ; Adresse des Strings in den
17
           ldi ZH, HIGH(text*2)        ; Z-Pointer laden
18
 
19
           rcall lcd_flash_string      ; Unterprogramm gibt String aus der
20
                                       ; durch den Z-Pointer adressiert wird
21
loop:
22
           rjmp loop
23
 
24
text:
25
           .db "Test",0                ; Stringkonstante, durch eine 0
26
                                       ; abgeschlossen  
27
 
28
.include "lcd-routines.asm"            ; LCD Funktionen

Läuft aber überhaupt nicht. Hab es an einem ATTiny26 am Port A - liegt 
der Fehler vielleicht hier drin!? Alles was ich auf dem LCD Display sehe 
sind 2 Balken in der 2 und 4 Zeile. Weder Schrift noch sonst irgendwas 
erscheint oder bewegt sich.... vielleicht kann mir ja jemand bei der 
Fehlerfindung helfen. Gruß Protector
Gast #591872
Lesenswert?
• ▲
▼
ich kenn deine LCD Routinen nicht aber muss da nicht eventuell der 
Displaytyp angegeben werden um korrekt initialisieren zu können? Passt 
das Display überhaupt zu den LCD Routinen? Manche Displays sind zwar zu 
99% kompatibel zum Hitachi-Chipsatz aber das fehlende Prozent verhindert 
die korrekte Initialisierung.

bye

Frank
Gast #591921
Lesenswert?
• ▲
▼
Danke erstmal für die Antworten. Das mit den LCD-Routinen weiß ich 
nicht, aber ich habs über assembler und über bascom basic probiert und 
beides hat nicht funktioniert.

Zum Stackpointer: Beim ATTiny26 gibt es die SPL und SPH nicht, womit man 
doch normalerweise den Stackpointer initialiisiert. Was soll ich denn 
stattdessen hinschreiben? Habe auch schon probiert "per Hand", so wie es 
in der Bedienungsanleitung angegeben ist, nachzuprogrammieren, hat aber 
auch nicht funktioniert.

Ich habe das Display W204B von der Firma Assembly Design von Reichelt. 
Vielleicht hätte jemand von euch ein kleines Stück Code um zumindest die 
Funktionalität des Display festzustellen!?

Löschen "per Hand" ließ sich das LCD indem ich enable pin auf 5V gezogen 
habe, dann waren selbst die 2 Balken weg. Aber lässt sich nichts 
programmieren!?!?
Gast #592473
Lesenswert?
• ▲
▼
Hallo nochmal,
habe mittlerweile das halbe Forum durchsucht und auch einiges gefunden. 
Die Initfunktionen, die ich gefunden habe, habe ich auch alle (!) 
ausprobiert. Aber das Display zeigt immer noch in der 2 und 4 Zeile 
Balken an und es tut sich nichts. habe mich bereits vergewissert ( mit 
einer blinkenden LED), dass der Controller nicht stecken geblieben ist!
Hier meine Anschlussbelegung:

1. VSS    ->    GND
2. VDD    ->    +5V
3. VEE    ->    Poti (klappt auch!)
4. RS     ->    PortA 4
5. R/W    ->    GND
6. E      ->    PortA 5
7. D0     ->    GND
8. D1     ->    GND
9. D2     ->    GND
10.D3     ->    GND
11.D4     ->    PortA 0
12.D5     ->    PortA 1
13.D6     ->    PortA 2
14.D7     ->    PortA 3
15.LED+   ->    Vorwiderstand +5V
16.LED-   ->    GND

Und hier mein aktueller Code:
1
; Bei 4Mhz ATTiny26
2

3
.include "tn26def.inc"       
4

5
.def temp1 = r20
6
.def temp2 = r21
7
.def temp3 = r22
8
 
9
           ldi temp1, RAMEND     ; LOW-Byte der obersten RAM-Adresse
10
       out SP, temp1
11
 
12
        ; PortA als Ausgang definieren
13
        ldi temp3, 0xFF
14
        out DDRA, temp1
15

16

17
           rcall lcd_init              ; Display initialisieren
18

19

20
 
21
loop:
22

23
rjmp loop
24
 
25

26
 ; sendet einen Befehl an das LCD
27
lcd_command:                            ; wie lcd_data, nur ohne RS zu setzen
28
           mov temp2, temp1
29
           swap temp1
30
           andi temp1, 0b00001111
31
           out PORTA, temp1
32
           rcall enable
33

34
           andi temp2, 0b00001111
35
           out PORTA, temp2
36
           rcall enable
37

38
           rcall delay50us
39
           ret
40

41

42
 ; Initialisierung: muss ganz am Anfang des Programms aufgerufen werden
43
lcd_init:
44
           ldi  temp3,50
45
wait250ms:
46
           rcall  delay5ms
47
           dec  temp3
48
           brne wait250ms
49

50
           ldi temp1, 0b00000010        ; 4bit-Modus einstellen
51
           out PORTA, temp1
52
           rcall enable
53

54
           rcall delay5ms
55
           ldi temp1, 0b00100100        ; 4Bit / 2 Zeilen / 5x8
56
           rcall lcd_command
57
           ldi temp1, 0b00001110        ; Display ein / Cursor ein / Blinken
58
           rcall lcd_command
59
           ldi temp1, 0b00000001        ; Display Löschen
60
           rcall lcd_command
61
       rcall delay5ms
62
           ret
63

64
ret
65

66

67
; Enable Ausgang schalten
68
enable:
69
      sbi PORTA, 5
70
      nop
71
      nop
72
      nop
73
      cbi PORTA, 5
74
ret               
75

76

77
 ;Pause nach jeder ?bertragung
78
delay50us:                              ;50us Pause
79
           ldi  temp1, $42
80
delay50us_:dec  temp1
81
           brne delay50us_
82
           ret                          ;wieder zur?ck
83

84

85
 ;L?ngere Pause f?r manche Befehle
86
delay5ms:                               ;5ms Pause
87
           ldi  temp1, $21
88
WGLOOP0:   ldi  temp2, $C9
89
WGLOOP1:   dec  temp2
90
           brne WGLOOP1
91
           dec  temp1
92
           brne WGLOOP0
93
           ret                          ;wieder zur?ck
Gast #592538
Lesenswert?
• ▲
▼
Hallo,


        ; PortA als Ausgang definieren
        ldi temp3, 0xFF
        out DDRA, temp1


Es macht wenig Sinn, temp3 mit 0xFF zu laden und dann temp1 in das 
Richtungsregister zu schreiben... :)

Ansonsten sieht Init eigentlich ok aus, da ist ein KS0073 auf dem 
Display?

Gruß aus Berlin
Michael

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren