PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 27*4 Wintek will nicht



ShadowPhoenix
14.10.2005, 02:43
Hallo!

Datenleitungen D4-D7 sind mit Portd.0-3 verbunden.
E1 mit Portd.5, E2 mit Portd.6 und RS mit Portd.4, sowie R/W mit Masse.




$regfile = "m8def.dat"
$crystal = 4000000

Dim ___lcdno As Bit
Config Lcdpin = Pin , E = Portd.5 , E2 = Portd.6 , Rs = Portd.4 , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3
Config Lcd = 40 * 4

___lcdno = 1

Do
Cls
Locate 1 , 1
Lcd "Test" ;
Waitms 5000
Loop



Kontrastpin mit Widerstand nach masse, man sieht ca. 50% Kontrast.
Allerdings "leuchtet" nur die 2. und 4. Zeile auf. Die 1. und 2. rührt sich gar nicht bei anlegen der Betriebsspannung.
Es erscheint auch nichts.

Was ist da falsch?
MfG

Fusebitversteller
14.10.2005, 06:25
Moin !

Hatte ähnliches Problem mit dem Display. Wenn ich mich recht erinnere mußt Du die beiden Controller erst initialisieren. Sprich:

___lcdno = 0
Initlcd
Cls

___lcdno = 1
Initlcd
Cls

Den konpletten Code findest Du in diesem Betrag ganz unten:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=9119
Natürlich mußt Du das noch auf Deinen Mega8 und Deinen Quarz umstellen.

Bei mir hat das super funktioniert O:)

Gruß
Fusebitversteller

Andree-HB
14.10.2005, 07:57
...ausserdem würde ich bei diesem Display ein Poti zur Kontrastregelung einsetzten, da man es sonst extrem bescheiden sieht !

Ich hatte kürzlich übrigens ein wohl defektes Display...wurde mir aber anstandslos umgetauscht.

Marco78
14.10.2005, 13:15
Allerdings "leuchtet" nur die 2. und 4. Zeile auf. Die 1. und 2. rührt sich gar nicht bei anlegen der Betriebsspannung.
Es erscheint auch nichts.

Was ist da falsch?

Nichts! Das muss so.

felack
14.10.2005, 15:26
Hallo ShadowPhoenix,

schau mal hier, da hab ich ganz unten ein Programm zum Testen der Wintek-Anzeige reingesetzt.

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=9119&highlight=wintek

felack

ShadowPhoenix
14.10.2005, 17:05
Danke für die Antworten!

@felack
Ich kopiere hier mal deinen Code rein:


$regfile = "attiny2313.dat" 'Register-Datei für ATtiny2313
$crystal = 500000 'Frequenz interner RC-Oszillator
'(Lieferzustand)

Dim ___lcdno As Byte 'Umschaltbyte für Anzeige :
'0 = Chip 1 ; 1 = Chip 2

'LCD initialisieren

Config Lcd = 40 * 4 'Anzeigemodus 40 x 4 Zeichen
Config Lcdpin = Pin , E2 = Portb.1 'Portb.1 an E2 anschließen
___lcdno = 0 'auf Chip 1 schalten
Initlcd 'die beiden oberen Zeilen
'initialisieren
Cls 'die beiden oberen Zeilen löschen
___lcdno = 1 'auf Chip 2 schalten
Initlcd 'die beiden unteren Zeilen
'initialisieren
Cls 'die beiden unteren Zeilen löschen


'LCD Anzeige ausgeben

'Die 2 oberen Zeilen anzeigen

___lcdno = 0

Locate 1 , 1
Lcd "1. Die erste Zeile" ;

Locate 2 , 1
Lcd "2. Die zweite Zeile"

Cursor Off

'Die 2 unteren Zeilen anzeigen

___lcdno = 1

Locate 1 , 1
Lcd "3. Die dritte Zeile" ;

Locate 2 , 1
Lcd "4. So einfach ist das !!!!"

Cursor Off

End



Was ich daran nicht verstehe, ist die Zeile:
Config Lcdpin = Pin , E2 = Portb.1

Da fehlt doch einiges? Wo wird E1, und die Datenleitungen sowie R/S definiert?
Das kann doch nicht funktionieren?

Dieser Code verwirrt mich.

MfG,
ShadowPhoenix

felack
14.10.2005, 17:12
In der Attiny2313.dat sind die Pins stanardmäßig festgelegt.Schau mal da rein.Du brauchst nur noch den E2 (Enable2) zu definieren, da das Display zwei Controller hat. Der 2. Controller steuert die beiden unteren Zeilen.

felack

ShadowPhoenix
14.10.2005, 17:53
Ich verwende aber einen mega8 (m8def.dat), wie muss da der Code aussehen?
Möchte nichts falsch machen!

MfG,
ShadowPhoenix

Millenniumpilot
14.10.2005, 20:32
Hallo ShadowPhoenix,

schaue doch einmal in das Beispielprogramm vom rn-mega8 Board rein.
Dort wird das Display mittels BASCOM angesteuert.

Gruß Dirk

ShadowPhoenix
14.10.2005, 20:39
Habe ich schon gemacht!
Diesen Code habe ich jetzt verwendet:



$regfile = "m8def.dat"
$crystal = 4000000

Dim ___lcdno As Byte

Config Lcd = 40 * 4
Config Lcdpin = Pin , E = Portd.5 , E2 = Portd.6 , Rs = Portd.4 , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3

___lcdno = 0
Initlcd

Cls
___lcdno = 1
Initlcd

Cls


___lcdno = 0

Locate 1 , 1
Lcd "1. Die erste Zeile" ;

Locate 2 , 1
Lcd "2. Die zweite Zeile"

Cursor Off

___lcdno = 1

Locate 1 , 1
Lcd "3. Die dritte Zeile" ;

Locate 2 , 1
Lcd "4. So einfach ist das !!!!"

Cursor Off

End



Alles richtig angeschlossen, es tut sich nichts, nur die 2. und 4. Zeile "leuchtet".

MfG

EDIT:
Ist es so auch richtig?
Im Code steht ja D4-D7, also habe ich auch die letzten 4 Datenleitungen vom LCD genommen, auch D4-D7, oder muss ich D0-D3 beim LCD nehmen?

hrei
14.10.2005, 21:30
Ist es so auch richtig?
Im Code steht ja D4-D7, also habe ich auch die letzten 4 Datenleitungen vom LCD genommen, auch D4-D7, oder muss ich D0-D3 beim LCD nehmen?

Ähmm... steht doch klipp und klar da, welcher Port für welchen Pin zuständig ist.

Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3

Durch welche spaßige Überlegung bist Du denn auf Deine Lösung gekommen? :-)

Grüße
Henrik

ShadowPhoenix
14.10.2005, 21:42
Weil ich dachte, im 4-bit Modus werden die ersten 4 Datenleitungen verwendet.

felack
15.10.2005, 09:09
Hallo ShadowPhoenix,

Die Standarddefinitionen für das LCD stehen nicht in der Definitionsdatei, wie ich fälschlicherweise behauptet habe. Sie stehen in dem Fenster, das sich öfffnet, wenn du in BASCOM Options-Compiler-LCD anklickst. Diese Daten nimmt der Compiler, wenn du im Programm die Pins nicht extra definierst. Wie du siehst, kann man E2 hier nicht einstellen. Das muss man immer im Programm machen. Die Daten im Fenster kannst du an deine Standardeinstellungen anpassen.

http://www.file-space.net/files/LCD-Options01.JPG

http://www.file-space.net/files/LCD-Options02.JPG

___lcdno=0 aktiviert den ersten Controller für die beiden oberen Zeilen
___lcdno=1 aktiviert den zweiten Controller für die beiden unteren Zeilen
Die beide Hälften der Anzeige werden praktisch wie zwei getrennte LCD-Anzeigen behandelt.

Die Hilfe, die in BASCOM angezeigt wird, wenn man E2 als Suchwort eingibt, vergisst du besser, die verwirrt nur und das Programmbeispiel passt nicht zur aktuellen BASCOM-Version.

Ich hoffe, dass damit deine Verwirrung beendet ist.

felack

Marco78
15.10.2005, 09:32
Und du bist dir sicher, das nur das eine E1 für's LCD übernommen wird? Idr ist es mit den Settings ja so, das wenn sie im Programm nicht extra angegeben werden, die Einstellungen übernommen werden, die in den Settings steht.

$Baud z.B. muss man in Programm nicht angeben. Sobald im Programm ein Print oder so steht wird (wenn im Programm nicht angegeben) die Einstellung der Compilersettings übernommen.
Gleiches wenn der Befehl CLS oder LCD oder LOCATE kommt. Ist das LCD im Programm nicht eingestellt, werden die Settings übernommen.
Aber warum sollte ein Teil einer Einstellung übernommen werden?

Mag sein, das es geht, aber ich kenn es mir nicht vorstellen. Es ist ja auch nur eine Frage.

Bascom hat auch extra eine LIB für CLS's mit zwei E-Leitungen. Im Sample-Ordner steht mehr dazu.
Und das Pollin-Display ist ja ein alt bekanntes. Spätestens die Suchfunktion bringt einen Code der funktioniert.

PS: Zwei Zeilen leuchten dauerhaft nach anlegen der Spannung (sofern der Kontrast richtig eingestellt ist) Das ist Poweron-default.
Nach CLS verschwinden die.
Das CLS mss auch nicht extra geschrieben werden zu Anfang des Programms. Sobald der erste LCD-Befehl kommt und kein CLS ausgeführt wurde, wird das automatisch von BASCOM eingefügt (im Assemblercode, nicht im Basiccode)

15.10.2005, 10:38
Hallo Marco,
es gibt in Compiler-Options kein Feld wo man den Pin für E2 eingeben kann. Deshalb muß es immer angegeben werden.
Wie oben schon geschrieben, kannst du die Samples vergessen, die LIB, die da angegeben ist, ist zumindest bei mir nicht beim Programm dabei.
Außerdem sind die Variablenbezeichnungen falsch.
Die Funktionen wurden wahrscheinlich nachträglich ins Programm eingebaut und die Hilfe dann nicht mehr geändert.

felack

Marco78
15.10.2005, 11:18
Ich glaube, du hast nicht verstanden, was ichmeinte. Das E2 angegeben werden muss, ist klar. Aber das man E(1) weglassen kann, kann ich mir nicht vorstellen.

lcd4e2.LBX
lcdcustom4bit2e.bas

Diese beiden Dateien sollten in der Demo dabei sein.

ShadowPhoenix
15.10.2005, 16:57
Oh, danke, werde ich bei Gelegenheit ausprobieren!

Also Enable steht in den Optionen für "E1", und E2 schreib ich noch selber in den Code...

Nun gut, wenn ich dann auf "OK" klicke im Bascom, kommt nur:
"There is no default printer currently selected"

Und die EInstellungen werden nicht gespeichert, weil immer diese Meldung kommt. Das nervt sehr, wozu braucht man denn einen Standarddrucker? :O

Noch was, könnte man im Code nicht "Config Lcd = 40 * 4" weglassen?
In den Optionen wird das ja schon definiert...

MfG,
ShadowPhoenix

Marco78
15.10.2005, 21:22
Noch was, könnte man im Code nicht "Config Lcd = 40 * 4" weglassen?
In den Optionen wird das ja schon definiert...
Das glaube ich schon eher das es klappen würde. Es ist ja eine eigenständige Befehlszeile. Aber das "* 4" kann man sicherlich nicht weglassen (also so, das da nur noch "Config LCD = 40" steht). Das wäre ja wie E1 in der Zeile Config LCDPIN weglassen.


Das nervt sehr, wozu braucht man denn einen Standarddrucker? :O
Es tut ja aber auch nicht weh, wenn einer installiert ist. In word geht die Seitenansicht auch nur, wenn ein Drucker installiert ist. Ist nunmal so. Es wird Gründe haben.


Also Enable steht in den Optionen für "E1", und E2 schreib ich noch selber in den Code...
Meine Theorie dazu habe ich ja gesagt. Viel Glück...

ShadowPhoenix
15.10.2005, 21:28
Marco, ich wollte doch nicht "* 4" weglasse, ich meinte den gesamten Satz. (Wird ja wiegesagt in den Optionen schon angegeben).

Habe zur Not irgendeinen Drucker vorinstalliert :O
Funktioniert jetzt...


Ich wollte doch nur wissen, ob Enable dasselbe wie E1 ist, damit ich nichts falsch verbinde...

Marco78
15.10.2005, 21:43
Enable ist im Prinzip E1.


Aber das "* 4" kann man sicherlich nicht weglassen (also so, das da nur noch "Config LCD = 40" steht). Das wäre ja wie E1 in der Zeile Config LCDPIN weglassen.
Sorry, "Aber nur das ...

Ich habe verstanden, das du die ganze Zeile weglassen willst. Aber in einer anderen Zeile soll nur E weggelassen werden. Das wäre als ob man das * 4 weglassen würde.

ShadowPhoenix
15.10.2005, 22:14
Ok vergessen wir diese Verwirrung ;)

Nun, ich bin etwas weiter gekommen, es werden schon alle 4 Zeilen initialisiert, diese "leuchten" nach ablauf des Programmes, es wird aber keine Schrift angezeigt?

Hier der neue Code:


$regfile = "m8def.dat"
$crystal = 4000000

Config Lcdpin = Pin , E2 = Portd.6
Config Portb = Output
Dim ___lcdno As Bit

Portb.5 = 0

___lcdno = 0
Initlcd
Cls
___lcdno = 1
Initlcd
Cls

___lcdno = 0
Locate 1 , 1
Lcd "1. Die erste Zeile"
Locate 2 , 1
Lcd "2. Die zweite Zeile"
Cursor Off

___lcdno = 1
Locate 1 , 1
Lcd "3. Die dritte Zeile"
Locate 2 , 1
Lcd "4. Die vierte Zeile"
Cursor Off

Portb.5 = 1

End


Portb.5 ist mit einer LED verbunden, und diese Leuchet nach wenigen Sekunden auf. Programm ist also durchgelaufen..

Was könnte da nicht stimmen?
MfG

EDIT:
Muss ich vielleicht sogar die LCD-Adress und RS-Adress in den Compiler-Optionen ändern?

avrflo
15.10.2005, 23:15
Hallo,
du configurierst garnicht das Display mit "Config Lcd= 40*4" , Bascom kann keine 24*4 aber 40*4 geht ja auch, kannst halt nur 24 Zeichen statt 40 schreiben.Am besten schreibst du die ganzen Pins einfach in den Programmcode, das is übersichtlicher als in den Compilersettings und weniger fehleranfällig. Pass mal den folgenden Code an deine Hardware an und mach den drauf, dann siehste ja obs an der Hord- oder der Software liegt:



$regfile = "m8def.dat"
$crystal = 8000000

Config Lcd = 40 * 4
Config Lcdpin = Pin , Rs = Portb.6 , Db4 = Portb.7 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.1 , E2 = Portb.2


Dim ___lcdno As Bit

___lcdno = 0
Initlcd
Cursor Off
Cls

___lcdno = 1
Initlcd
Cursor Off
Cls

Do

___lcdno = 0

Upperline
Lcd "Zeile 1"
Lowerline
Lcd "Zeile 2"

___lcdno = 1

Upperline
Lcd "Zeile 3"
Lowerline
Lcd "Zeile 4"

Waitms 1000

Loop


Gruß
Florian

ShadowPhoenix
15.10.2005, 23:52
Ok das probiere ich jetzt aus, schreibe dann, was passiert ist.

ShadowPhoenix
15.10.2005, 23:58
Ehm.. portb.6 und portb.7 sind die Oszillator-Eingänge...

Da sollte ich besser nicht RS und Db4 anschließen??

ShadowPhoenix
16.10.2005, 00:04
Also gut, habe die Ports selber angepasst, und siehe da, es funktioniert...

Woran es auch immer gelegen hat, danke an alle!

Warum ich nur für die einfachsten Dinge so lang brauche.. :((

Millenniumpilot
16.10.2005, 08:12
Hallo Florian,

mein Reden ;-)
Ich verstehe auch nicht, warum nicht einfach ein definitiv funktionierender Codeschnippsel benutzt wird (siehe rn-mega8). Optimieren und/oder die Compilersettings anpassen kann man später immer noch.
Erst wird geschaut, ob etwas überhaupt funktioniert, dann wird daraus gelernt und optimiert. Auf alle Fälle ist es sinnvoll, alle Einstellungen auf einen Blick (im Programm) zu haben. Mir ist so, als ob man in bascom Compilersettings und Programmsettings nicht mischen sollte. Also entweder alles über die Settings oder das Programm. Bin mir aber nicht sicher. Eventuell liegt da ja hier das Problem.

Gruß Dirk

ShadowPhoenix
16.10.2005, 17:53
Hallo!

Jo, ich hatte schon von Anfang an einen definitiv funktionierenden Code. (Aus der Forumsuche)
Aber es hat sich dann nichts am LCD getan, dann dachte ich es sei der Code.

Mittlerweile schwöre ich auf Softwareseitige definitionen =)

MfG,
ShadowPhoenix

Marco78
16.10.2005, 19:28
Mittlerweile schwöre ich auf Softwareseitige definitionen =)
Was ja auch den Vorteil hat, das alles was von haben! Was bringt mir ein Programm, was ich auch nutzen möchte, was aber nicht läuft, weil der Stack immer überläuft weil niemand im Code vermerkt hat.

maselx
16.10.2005, 21:09
köntest du vieleicht noch mal den Code Posten so zum abschluss?
Das mit dem Stack ist sehr einleuchtend, nur weis ich noch nicht wirklich wofür der da ist -funktion , deshalb schreib ich da auch nichts hin ?!?

ShadowPhoenix
18.10.2005, 00:16
Habs jetzt nicht getestet (Alter Code verschmissen), aber sollte hinkommen:



$regfile = "m8def.dat"
$crystal = 4000000

Config Lcd = 40 * 4
Config Lcdpin = Pin , Rs = Portd.2 , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portd.3 , E2 = Portd.4

Dim ___lcdno As Bit
Dim Cvar As Integer
Cvar = 10

___lcdno = 0
Initlcd
Cursor Off
Cls
___lcdno = 1
Initlcd
Cursor Off
Cls

Do
___lcdno = 0
Upperline
Lcd Cvar
Waitms 1000
Decr Cvar
Cls
Loop


Zählt von 10 ab runter.
MfG,
ShadowPhoenix