Forum: Mikrocontroller und Digitale Elektronik KS0066 mit 4Bit ansteuerung?


von Markus M. (yankee007)


Angehängte Dateien:

Lesenswert?

hey leute,

ich habe das problem das ich in Bascom-AVR ein programm geschrieben 
habe, leider komme ich mit der initialisierung des LCD nicht klar. habe 
mir hier ein paar sachen angesehen aber irgentwie funktioniert nichts.

Benutze folgende sachen:

MC: ATMEGE32-16PU
LCD: conrad lcd best NR. 184748 - 62

Kann mir da jemand ein code geben um das lcd im 4-Bitmodus mithilfe von 
Bascom anzusteuern. mit dem Standartbefehl des Bascom geht es irgentwie 
nicht.

Im anhang mal mein Code. ich weiß ist nicht sehr professionell, möchte 
es aber genau so haben.

danke für eure hilfe.

von Markus M. (yankee007)


Lesenswert?

hat wirklich keiner eine idee wie ich das umsetzten kann??? was ist mit 
den 5 leuten die die datei schon angeschaut haben????

von Paul Baumann (Gast)


Lesenswert?

>leider komme ich mit der initialisierung des LCD nicht klar

Kunststück! Ich sehe nirgendwo den Befehl "LCDINIT"  ;-)

MfG Paul

von Markus M. (yankee007)


Lesenswert?

mhhh den gibt es garnicht in der datenbank??? wie muss ich das jetzt 
machen????

von Peng (Gast)


Lesenswert?

So ist Bascom elend und gemein.
Mit den großen Hunden pissen gehen wollen, aber das Bein nicht 
hochbekommen.
Aber ihr wollt es ja so.
Steig um auf C da gibt es solche Probleme nicht.

von Markus M. (yankee007)


Lesenswert?

ich werde jetzt nicht auf c umsteigen. ich habe ja oben schon 
geschrieben das ich es gerne auch weiter in bascom haben möchte.

von Peng (Gast)


Lesenswert?

Tja, da kann mann leider nicht helfen wenn Du beratungsresistent bist.
Dann quäl Dich weiter mit Bascom ab, und versau Dir dein logisches 
Denken
auf alle Zeiten.

von bas_ratte (Gast)


Lesenswert?

Config Lcd = 20 * 4a , Chipset = Ks077
Initlcd

von Paul Baumann (Gast)


Lesenswert?

...den gibt es nicht in der "Datenbank"??
Willst Du mich zum Narren halten?
Es macht den Eindruck, daß Du das Programm nicht geschrieben hast.

Staun! :-o

@Bas_ratte
Das Display ist laut  Datenblatte ein 20*2 mit KS0066.

Warum dann das: >Config Lcd = 20 * 4a , Chipset = Ks077 ?


@Peng
Bascom ist nicht für den Programmierer verantwortlich.
Denn: Was kann der Teich dafür, daß die Ente nicht schwimmen kann?

;-)
Paul

von Dummy (Gast)


Lesenswert?

>ich habe das problem das ich in Bascom-AVR ein programm geschrieben
>habe

Das alleine spricht doch für sich ;)
Duck und wech.

von bas_ratte (Gast)


Lesenswert?

Ich weiss  garnicht warum sich C-Fetischisten
sich in Bascom angelegenheiten einmischen,
seht lieber zu das ihr euren C -Schrott zum Laufen bekommt
und last uns in Ruhe.

von Markus M. (yankee007)


Lesenswert?

also ich finde es recht scheiße das man hier so runter gemacht wird.

Ich habe lediglich ein problem und habe um hilfe gebeten. Mir ist 
vollkommen klar das ein besserer programmierer das alles anders gemacht 
habe. aber ich habe das programm so eschrieben verstehe es und bin auch 
stolz darauf das es funktioniert.

Ich benutze bascom aus diesem grund weil wir es in der schule hatten und 
die sprache recht einfach gehandhabt ist.

ich danke allen die mir hilfe angeboten haben und sich auch gedanken zu 
problemen eines anfängers gemacht haben. All die jenigen die gerne in c 
programmieren macht auch weiter. alle die mich nur angemault haben pech 
für euch haltet euch halt einfach hier raus.


MFG

von Markus M. (yankee007)


Lesenswert?

mhh habe die möglichkeit von PAul mal ausprobiert leider funktioniert 
die so nicht.

hat vieleicht noch jemand eine idee???

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Möglicherweise musst du dir das Datenblatt vom KS0066U (*) schnappen und 
die Funktionen zur Ansteuerung selbst schreiben.

Die bequemen LCD Funktionen von Bascom setzen bestimmte Controller 
voraus und deren Befehlssatz und Timing wird dann eingehalten.

Bei anderen sog. "kompatiblen" Controllern wie dem KS0066U können 
Abweichungen insbesondere bei der Initialisierung des Displays notwendig 
sein.

In bestimmten Fällen sind die Abweichungen einstellbar (CHIPSET 
Parameter beim CONFIG LCD Befehl für "gängige" Displays), bei anderen 
nicht.

Ein Ansatzpunkt, um die LCD Ansteuerung selbst zu schreiben kann diese 
Diskussion sein:
Beitrag "LCD EA DOG-M und Bascom"

Diese Quellcodes (für ein anderes Display!) von Robert Mayr und Holger 
Bruns zeigen, wie eine hardwarenähere Ansteuerung mit eigenen Routinen 
statt mit den LCD Befehlen aussehen kann. Wenn du Glück hast, brauchst 
du nur eine andere Initialisierung und kannst die normalen 
LCD-Ausgabebefehle weiter benutzen. Wenn du Pech hast, musst du alles 
selbst machen.

Ein Timing für den KS0066U, allerdings in Assembler, findet sich bei
Beitrag "KS0066U oder Ähnliche --- LCD Treiber"

(*) http://www.mikrocontroller.net/articles/LCD#Weblinks
=> Pacific Display Devices Seite

von Joachim B. (jojo84)


Lesenswert?

Hi Forum!

Ich habe mich die letzten Tage auch mit einem LCD mit einem KS0066 drauf 
beschäftigt. Ich hab auch fast nen Anfall gekriegt, bis ich festgestellt 
hab, daß nicht meine Initialisierung falsch ist, sondern meine 
Verdrahtung :( ...
Naja, aber weil scheinbar einige Leute Probs mit der Initialisierung 
haben möchte ich meinen Code mal zeigen, mit dem es funktioniert.
Zur Hardware: Atmega8 @ 8 MHz, LCD von Pollin, SC1604A.
ein GUTES Datenblatt für das LCD gibts hier: 
http://www.sun-tai.com.tw/cw/DownloadAttachment?attach_id=19175252. Das 
Datenblatt zum KS0066 ist das gängige von Samsung, da steht auch der 
Ablauf der Init drin.

ACHTUNG: ich habe DB4-DB7 vom LCD an Px4-Px7 angeschlossen, weil ich das 
angenehmer fand. EN, RS & RW liegen auf Px0-Px2. Die defines sehen dann 
wie folgt aus:
1
// Pinbelegung für das LCD, an verwendete Pins anpassen
2
#define LCD_PORT      PORTD
3
#define LCD_DDR       DDRD
4
#define LCD_RW        PD2
5
#define LCD_RS        PD1
6
#define LCD_EN        PD0
7
#define LCD_DB4      PD4
8
#define LCD_DB5      PD5
9
#define LCD_DB6      PD6
10
#define LCD_DB7      PD7

Auch die Initialisierungsroutine, die hier im Tutorium zu finden ist, 
hab ich für diese Pinbelegung angepasst (die Shifts und die 
Maskierungen). Die funktionierende Initialisierung mit der obigen 
Pinbelegung, sieht dann so aus:
1
void lcd_init(void)
2
{
3
  LCD_DDR = 0xF7;
4
 
5
  LCD_PORT &= ~(1<<LCD_RS);      // RS auf 0, "Befehl"
6
  LCD_PORT &= ~(1<<LCD_RW);      // RW auf 0, "schreiben"
7
8
9
// Function set
10
  LCD_PORT |= ((1<<LCD_DB5) | (1<<LCD_DB4));
11
  lcd_enable();
12
  LCD_PORT |= ((1<<LCD_DB5) | (1<<LCD_DB4));
13
  lcd_enable();
14
   LCD_PORT |= ((1<<LCD_DB7) | (1<<LCD_DB6));
15
   lcd_enable();
16
   _delay_ms(1);
17
 
18
 // Display on/off control 
19
   LCD_PORT = 0x00;
20
   lcd_enable();
21
   LCD_PORT |= 0xF0;
22
   lcd_enable();
23
   _delay_ms(1);
24
25
// entry mode
26
  LCD_PORT = 0x00;
27
   lcd_enable();
28
   LCD_PORT |= 0x10;
29
   lcd_enable();
30
   _delay_ms(1);
31
32
// entry mode
33
  LCD_PORT = 0x00;
34
   lcd_enable();
35
   LCD_PORT |= 0x70;
36
   lcd_enable();
37
   _delay_ms(1); 
38
 
39
40
   lcd_clear();
41
   lcd_home();
42
}
Das wars auch schon :) ... Der Code ist sicher heir und da noch zu 
optimieren, aber das lasse ich, weil es so ja funktioniert, ne?
Hoffe das kann jemandem helfen.

VG,
Joachim

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.