www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EA-DIP204-6 mit KS0073 per SPI in ASM ansteuern!


Autor: Helmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute!

Wieder mal ein KS0073er Problem. Ich habe mir obiges Display gekauft und 
per 4bit Bus betrieben, habe die Brücke umgelötet und versucht es via 
SPI zu betreiben, komme aber nicht dahinter was ich falsch mache bzw. wo 
der Fehler liegt.
Hardware anschlusse:

Atmega8 --> LCD
Masse   --> Pin 5 CS
PB3     --> Pin 6 SID
PB5     --> Pin 7 CLK

Das ganze in Assembler geschrieben:

;----------------------------------------------------------------------- 
---
; Prozessor     : ATmega8
; Takt          : 3,6864 MHz
; Sprache       : Assembler
;----------------------------------------------------------------------- 
---
.include "m8def.inc"
;----------------------------------------------------------------------- 
-
; Reset and Interrupt vector                Beschreibung
begin:   rjmp    main                       ;POWER ON RESET
         reti                               ;Int0-Interrupt
         reti                               ;Int1-Interrupt
         reti                               ;TC2 Compare Match
         reti                               ;TC2 Overflow
         reti                               ;TC1 Capture
         reti                               ;TC1 Compare Match A
         reti                               ;TC1 Compare Match B
         reti                               ;TC1 Overflow
         reti                               ;TC0 Overflow
         reti                               ;SPI, STC Serial Transfer C.
         reti                               ;UART Rx Complete
         reti                               ;UART Data Register Empty
         reti                               ;UART Tx complete
         reti                               ;ADC Conversion Complete
         reti                               ;EEPROM Ready
         reti                               ;Analog Comparator
         reti                               ;TWI (I²C) Serial Interface
         reti                               ;Store Program Memory Redy
;----------------------------------------------------------------------- 
-
; Start, Power ON, Reset
main:    ldi    r16, low(RAMEND)
         out    SPL, r16
         ldi    r16, high(RAMEND)
         out    SPH, r16
         ; Hier Init-Code eintragen.
         ldi  r16,0b00111111  ;port b ausgang
         out  DDRB,r16
         ldi  r16,0b01111110  ;SPI: 0=Interrupt, 1=SPI ein, 
1=LSB,1=Master, 1=Idle high, 1=fallend flanke, 10=f/64
         out  SPCR,r16
         ldi  r16,0x00
         out  SPSR,r16

         rcall  LCD_init
         rcall    output
;----------------------------------------------------------------------- 
--
mainloop: wdr
          ; Hier den Quellcode eintragen.
          rjmp mainloop
;----------------------------------------------------------------------- 
--
output:  rcall  LCD_data

  ldi  r16,'H'
  rcall  LCD_send
  ldi  r16,'a'
  rcall  LCD_send
  ldi  r16,'l'
  rcall  LCD_send
  ldi  r16,'l'
  rcall  LCD_send
  ldi  r16,'o'
  rcall  LCD_send
  ret
;----------------------------------------------------------------------- 
--
LCD_init:  ;waten auf Powerup 50ms
  ldi  r16,10
Powerup:  rcall  wait5ms
  dec  r16
  brne  Powerup
  ;...
  rcall  LCD_cmd
  ldi  r16,0b00100100  ;re=1
  rcall  LCD_send

  ldi  r16,0b00001001  ;0=5dot,0=normal Cursor,1=4 Zeilen display
  rcall  LCD_send

  ldi  r16,0b00100000  ; re=0
  rcall  LCD_send

  ldi  r16,0b00001111  ;1=Display on, 1=cursor on, 1=blink on
  rcall  LCD_send

  ldi  r16,0b00000001  ; lcd clear
  rcall  LCD_send

  ldi  r16,0b00000010  ; Cursor Home
  rcall  LCD_send

  ret
;----------------------------------------------------------------------- 
-
LCD_data: ldi  r16,0x5F   ;(01011111)lsb 1111 1=start, 0=schreiben, 
1=daten ,0=abschluss init
  out  SPDR,r16
wdata:  sbis  SPSR,7      ;warten bis Übertragung vollständig
  rjmp  wdata
  ret
;----------------------------------------------------------------------- 
-
LCD_cmd:   ldi  r16,0x1F   ;(00011111)lsb 1111 1=start, 0=schreiben, 
0=Befehl ,0=abschluss init
  out  SPDR,r16
wcmd:  sbis  SPSR,7        ;warten bis Übertragung vollständig
  rjmp  wcmd
  ret
;----------------------------------------------------------------------- 
-
LCD_send:  push  r17
  rcall  wait5ms
  mov  r17,r16  ;z.B.: r16 = msb 11010101 lsb (zu sendende daten)
  swap  r17        ;r17 = 01011101 lsb
  andi  r16,0x0F  ;r16 = 00000101 lsb
  andi  r17,0x0F  ;r17 = 00001101  lsb
  ; sende 1.teil und warten bis gesendet ist
  out  SPDR,r16    ;1.teil senden
teil1:  sbis  SPSR,7
  rjmp  teil1
  ; sende 2.teil und warte bis gesendet ist
  out  SPDR,r17    ;2.teil senden
teil2:  sbis  SPSR,7
  rjmp  teil2
  pop  r17
  ret
;----------------------------------------------------------------------- 
-
wait5ms:  push  r16
  push  r17
  ldi  r17,50
loop1:  ldi  r16,123
loop2:  dec  r16
  brne  loop2
  dec  r17
  brne  loop1
  pop  r17
  pop  r16
  ret
;----------------------------------------------------------------------- 
-

Autor: Helmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also es hat also keiner von euch eine Ahnung worin mein Fehler besteht 
oder?

Autor: Matthias (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich betreibe hier DIP204-4 im SPI-Mode. Hatte am Anfang auch Probleme 
damit. Man muss es so initialisieren, wie im 8-Bit Parallelmode.

Es hängt ein C-Programm an, welches bei mir läuft. Vielleicht kannst Du 
was draus entnehmen, meist ist die Initialisierung das Problem.

Autor: Helmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Code, ich werde ihn mir mal zu gemüte führen und hoffe ich 
werde schlau draus.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir fällt gerade noch was ein. Wie hast Du den RESET-Pin beschaltet? Der 
muss auf H liegen.

Autor: Helmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry hab ich vergessen, aber ja hängt auf H, bin leider noch nicht dazu 
gekommen deinen Code näher anzusehen bzw. zu  probieren, werde das aber 
auf alle fälle noch dieses WE machen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.