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.
hat wirklich keiner eine idee wie ich das umsetzten kann??? was ist mit den 5 leuten die die datei schon angeschaut haben????
>leider komme ich mit der initialisierung des LCD nicht klar
Kunststück! Ich sehe nirgendwo den Befehl "LCDINIT" ;-)
MfG Paul
mhhh den gibt es garnicht in der datenbank??? wie muss ich das jetzt machen????
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.
ich werde jetzt nicht auf c umsteigen. ich habe ja oben schon geschrieben das ich es gerne auch weiter in bascom haben möchte.
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.
...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
>ich habe das problem das ich in Bascom-AVR ein programm geschrieben >habe Das alleine spricht doch für sich ;) Duck und wech.
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.
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
mhh habe die möglichkeit von PAul mal ausprobiert leider funktioniert die so nicht. hat vieleicht noch jemand eine idee???
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.