Archiv verlassen und diese Seite im Standarddesign anzeigen : 27*4 Wintek will nicht
ShadowPhoenix
14.10.2005, 03: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, 07: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, 08: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.
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.
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, 18: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
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, 18: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, 21: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, 21: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?
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, 22:42
Weil ich dachte, im 4-bit Modus werden die ersten 4 Datenleitungen verwendet.
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
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)
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
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, 17: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
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, 22: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...
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, 23: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?
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
16.10.2005, 00:52
Ok das probiere ich jetzt aus, schreibe dann, was passiert ist.
ShadowPhoenix
16.10.2005, 00: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, 01: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, 09: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, 18: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
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.
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, 01: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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.