Forum: Mikrocontroller und Digitale Elektronik Wieder Prob mit LCD KS0066


von Christian G. (Firma: keine) (giehlman)


Lesenswert?

Hallo an alle! Ich versuche mich seit einiger Zeit an eurem AVR 
Tutorial. Ich hab jetzt letzte Woche mein lang erwartetes LCD bekommen. 
Chip ist KS0066. Wie bekannt funktioniert das Tutorial bei diesem Chip 
nicht. Ich habe schon etliche Threads und Seiten durchforstet, Quellcode 
durchprobiert, nicht hilft. Die Verkabelung ist richtig, auch schon 
doppelt und dreifach überprüft. Da sich wegen des Tutorial-Codes zu 
viele Fragen bei mir aufwarfen, habe ich probiert die Ansteuerung 
mittels Datenblatt vollständig selbst neu aufzubauen. Ich poste hier mal 
meinen Code. Geschrieben in Assembler (für extra). Ich denke es hängt 
entweder irgendwo in de Delays oder in der LCD_init. Ich bin eigentlich 
Anfänger, bleib aber gerne an einem Projekt festgebissen wenns nich 
klappen will :-) Deswegen bitte ich grobe Anfängerfehler, sofern 
vorhanden, milde zu betrachten und mir Anleitung zu geben ^^

Ach ja un nochwas: Ich benutze AVRStudio und interner Takt beim 
Atmega8515L. Habe ihn mittels AVRStudio auf SUT_CLKSEL Int. OSC 4MhZ 
Startup 6ck + 0ms gestellt...ist das richtig?

Gruß Giehlman

Code:

/* Hauptprogramm

.include "m8def.inc"
.include "lcd_routines.asm"

.def temp1 = r16
.def temp2 = r17
.def temp3 = r18

.def tim1 = r20
.def tim2 = r21

  ldi temp1, LOW(RAMEND)      ; LOW-Byte der obersten RAM-Adresse
    out SPL, temp1
    ldi temp1, HIGH(RAMEND)     ; HIGH-Byte der obersten RAM-Adresse
    out SPH, temp1

  ldi temp1, 0xFF
  out DDRD, temp1

  rcall lcd_init
  rcall lcd_clear

  ldi temp1, 'A'
  rcall lcd_data

loop:

  rjmp loop

*/

lcd_data:

  mov temp2, temp1

  swap temp1
  andi temp1, 0b00001111
  sbr temp1, 0b00010000
  out PORTD, temp1
  rcall lcd_enable

  andi r17, 0b00001111
  sbr r17, 0b00010000
  out PORTD, r17
  rcall lcd_enable
  rcall delay50us

 ret

lcd_enable:

  sbi PORTD, 5
  nop
  nop
  nop
  cbi PORTD, 5
 ret

lcd_clear:

  ldi temp1, 0b00000001
  rcall lcd_command
  rcall delay5ms

 ret

lcd_command:

  mov temp2, temp1

  swap temp1
  andi temp1, 0b00001111
  out PORTD, temp1
  rcall lcd_enable

  andi r17, 0b00001111
  out PORTD, r17
  rcall lcd_enable
  rcall delay50us

 ret

/************/
/* LCD INIT */
/************/

lcd_init:

  rcall delay50ms
  ldi temp1, 0b00000010
  OUT PORTD, temp1
  rcall lcd_enable

  ldi temp1, 0b00000010
  OUT PORTD, temp1
  rcall lcd_enable

  ldi temp1, 0b00001100
  OUT PORTD, temp1

  rcall delay50us
  ldi temp1, 0b00000000
  out PORTD, temp1
  rcall lcd_enable

  ldi temp1, 0b00001111
  out PORTD, temp1
  rcall lcd_enable


  rcall delay50us
/*  ldi temp1, 0b00000000
  out PORTD, temp1*/
  ldi temp1, 0b00000001
  rcall lcd_command


  rcall delay5ms
/*  ldi temp1, 0b00000000
  out PORTD, temp1*/
  ldi temp1, 0b00000111
  rcall lcd_command


ret


/*********************/
/*** Zeitschleifen ***/
/*********************/

delay1us:
  nop   /* bei 4MHz Takt ergeben sich pro 1us 4 Takte */
  nop
  nop
  nop
 ret

delay50us:
  ldi tim1, 0x32 /* 50 = 0x32 mal 1us = 50us */
  delay50us_1:
    rcall delay1us
    dec tim1
    brne delay50us_1
 ret

delay5ms:
    ldi  tim2, 0x64 /* 100 = 0x64 mal 50us = 5ms */
   delay5ms_1:
      rcall  delay50us
      dec  tim2
      brne  delay5ms_1
 ret


delay50ms:
  ldi tim1, 0xA /* 10 = 0xA mal 5ms = 50ms */
  delay50ms_1:
    rcall delay5ms
    dec tim1
    brne delay50ms_1
 ret

von Martin (Gast)


Lesenswert?

Hallo Christian,
also ich habe auch ein KS0066 4x20 LCD und ich habe leider NICHT 
geschaft in Assembler ein kleinem Zeichnen auf dem LCD zu bringen.
Ich habe es aber in C :-) hinbekommen wenn du möchtes kann hier mein 
Code IN C posten vielleichts funktioniert auch bei dir.

Gruß
Martin

von Christian G. (Firma: keine) (giehlman)


Lesenswert?

Hi! Ja gerne, wollts zwar in Assembler haben (wegen dem 
Grundlagenverständnis), aber des is eh zu komplex, also werd ich mich in 
C einarbeiten.

Dann ma THX :-)

Giehlman

von Martin (Gast)


Angehängte Dateien:

Lesenswert?

hier der .h Datei

von Martin (Gast)


Angehängte Dateien:

Lesenswert?

hier der .h (vorher war der .c sorry)

von Martin (Gast)


Angehängte Dateien:

Lesenswert?

und hier main.c (zum Test)

ich denke sollte bei dir auch funktionieren, im lcd-routines.h muß du 
definieren welches Port usw. RS Pin ....

Gruß
Martin

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.