mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wieder Prob mit LCD KS0066


Autor: Christian Giehl (Firma: keine) (giehlman)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian Giehl (Firma: keine) (giehlman)
Datum:

Bewertung
0 lesenswert
nicht 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

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

Bewertung
0 lesenswert
nicht lesenswert
hier der .h Datei

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

Bewertung
0 lesenswert
nicht lesenswert
hier der .h (vorher war der .c sorry)

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

Bewertung
0 lesenswert
nicht 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

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.