DOG-M .asm Initialisierung geht, aber wo bleibt mein Test?

OP #960789
Lesenswert?

Hallo,

nachdem ich mit Hilfe der Artikel aus dem Forum mein DOGM 163 
erfolgreich initialisiert habe ( in Assambler, an 5V,Hardware-SPI, 
ATMEGA16) verzweifel ich seit einem Tag an der Textausgabe, obwohl das 
doch kein Problem sein dürfte. Ich greife da ebenfalls auf Routinen hier 
aus dem Forum zurück.

Ich poste mal den Code, lass aber die Init weg weil die geht ja. ( Ich 
sehe einen blinkenden Cursor vor mir)

Obwohl ich versuche ein Zeichen zu senden sehe ich weiter hin nur den 
blinkenden Cursor. Könnte es sein das ich vergesse eine Freigabe zu 
setzen?
1
; bis hierher geht die funktionierende Initialisierung
2

3
Loop:
4
rcall  delay50ms
5

6
  ldi    r24,0b00000000    ; Adresse
7
  ldi    r25,0x53                ; Zeichen
8
  rcall  wrddram
9
  rjmp Loop
10

11
;--------------------------------------------------------------------------------------
12
;        Write DDRAM - Schreiben auf DDRAM Adresse
13
;        in : r25 = Datenbyte
14
;           r24 = Adresse (7bit)
15
;         changed : -
16
wrddram:
17
  ori  r24,$80    ; Bit 7 setzen ( Befehl Adresse schreiben)
18
  rcall  wrcmd    ; zur LCD
19
  mov  r24,r25    ; Daten
20
  rcall  wrdat    ; zur LCD
21
  ret
22
;--------------------------------------------------------------------------------------
23
;        Write Command - Kommandos schreiben
24
;        in: r24  Kommando
25
wrcmd:
26
  cbi   PortB,RS        ; RS = 0 -> Kommando/Adresse schreiben
27
  rcall  spi_out
28
  rcall  delay50us
29
  ret
30
;--------------------------------------------------------------------------------------
31
;        Write Data - Daten schreiben
32
;        in : r24 Datenbyte
33

34
wrdat:
35
  sbi PortB,RS            ; RS = 1 -> Daten schreiben
36
  rcall  spi_out
37
  rcall  delay50us
38
  ret
39

40
;--------------------------------------------------------------------------------------
41
;      Byte über SPI ausgeben
42
;       in: r24  Datenbyte
43
;      changed: -
44
spi_out:  
45
  push  r24
46
  out  SPDR,r24  ; start transmission of data
47
spi_out10:
48
  in  r24,SPSR  ; Wait for transmission complete
49
  sbrs  r24,SPIF
50
  rjmp  spi_out10
51
  pop  r24
52
  ret
Gast #1133630
Lesenswert?

Ich habe zwei Tipps, die mir jeweils geholfen haben die Zeichen aufs 
Display zu bringen:
1. Die Pause nach der Initialisation vergrössern, z.B. > 200ms
2. Schreibt einfach mal Zeichen ins Display, ohne die DDRAM Adresse neu 
zu schreiben. Dann sollte ja (je nach Initialisierung) der Cursor für 
jedes neue Zeichen um eine Stelle nach rechts rücken.

Also in obigem Code z.B.:

Loop:
rcall  delay50ms

  ldi    r24,0x53                ; Zeichen Buchstabe S
  rcall  wrdat
  rjmp Loop


Dies sollte das ganze Display mit dem Zeichen füllen.

Es ist eben möglich, dass nach einer nicht perfekten Initialisierung die 
Zeichenadresse 0x00 aus dem sichtbaren Bereich hinausgescrollt ist 
(siehe Datenblatt des Kontrollers Seite 19). Die DOG-M sind in Sachen 
Timing sehr empfindlich meiner Meinung nach.

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