Archiv verlassen und diese Seite im Standarddesign anzeigen : RN-Control Mega8 & LCD Display
timo1105
02.01.2007, 19:25
Hallo,
Ich habe ein hoffentlich kleines Problem:
Zu Weihnachten habe ich das RN-Mega8 Board bekommen und ein 16x4 LCD Display dazu.
Ich hatte das Demoprogramm vom RN-Wissen bereich schon drauf und es hat alles funktioniert. Ich habe das LCD angeschlossen und auch der Text war zu lesen. Zwar ein bisschen verschoben aber erstmal egal.
Nun wollte ich das Demoprogramm löschen und einmal GANZ EINFACH versuchen einen Text aufs LCD auszugeben.
Ich verwende folgende Befehle:
$regfile "m8def.dat"
$crystal =16000000
config LCD = 16 * 4
config LCDpin = Pin,E = Portc.3,E2 = Portd.7,Rs = Portc.2,Db4 = Portd.2,Db5 = Portd.3,Db6 = Portd.4,Db7 = Portd.5
config lcdbus = 8 oder 4
Cls
Locate 1 , 1
Lcd "Hello World!"
End
Nun sagt er mir komischer Weise immer einen Fehler an:
"No more space for BIT[___LCDN0], in file: C:/programme/MSC....
"[syntax error, token='{'] in file: C:/programme/....
alles in der End Zeile.
Ich verstehe das nicht, laut RN-Wissen müsste alles gehen?!
was mache ich falsch?
mfg und danke
Timo
Wenn BASCOM nicht genau sagen kann, wo der Fehler ist, ist der Fehler immer in der letzten Programm-Zeile. Nur so als kleine Info.
Hasz du bei dir im Programm wirklich "Config lcdbus=8 oder 4" stehen?
Du brauchst nur "lcdbus = 4".
Lass auch mal "E2=Portd.7" raus.
jon
timo1105
02.01.2007, 20:10
hi!
ne ich habe mal 4 und ein anderes mal 8 stehen gehabt. werde jetzt mal ausprobieren was du gesagt hast
timo
timo1105
02.01.2007, 20:14
Ab config lcdbus streikt er, egal was ich schreibe. Der Fehler kommt sogar wenn ich nur CLS schreibe?!
was ist das?
Kannst du nochmal deinen aktuellen Code reinstellen?
Irgendwie finde ich keinen weiteren Fehler.
jon
timo1105
02.01.2007, 20:27
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 9600
Config Lcd = 16 * 4
Config Lcdpin = Pin , E = Portc.3 , Rs = Portc.2 , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5
Config Lcdbus = 8
Cls
Cls nimmt er schon nicht mehr
timo1105
02.01.2007, 20:28
lcdbus ist gleich 4 sorry
Hallo
Also bei mir kommt keine Fehlermeldung (habe einfach zum neuen Code noch "end" hinzugefügt)
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 9600
Config Lcd = 16 * 4
Config Lcdpin = Pin , E = Portc.3 , Rs = Portc.2 , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5
Config Lcdbus = 4
Cls
end
Edit: Auch so gehts bei mir:
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 9600
Config Lcd = 16 * 4
Config Lcdpin = Pin , E = Portc.3 , Rs = Portc.2 , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5
Config Lcdbus = 4
Cls
Locate 1 , 1
Lcd "Hello World!"
End
mfg Luca
Dan kann ich mir nur vorstellen, das es bei der Installation von BASCOM bei dir einen Fehler gab.
Deinstalliere BASCOM und installiere es nach einem Neustart nochmal.
jon
timo1105
02.01.2007, 21:13
Hi!
habe es jetzt nochmal installiert ! jetzt lässt sich das programm draufspielen!
ist ja schonmal was, nur kann´ich jetzt nicht den text lesen. ?!
sorry wenn ich nochmal frage aber was kann das nun sein?
timo
Was für einen Text meinst du??
jon
timo1105
02.01.2007, 21:20
"Hello world"
Hallo
Ich nehme mal an den auf dem Display.
Hast du "Config Lcdbus " = 4 gemacht?
Edit: Poste den Code
mfg Luca
Und was verstehst du unter nicht lesen?
Erscheint der Text kurz und verschwindet dann?
Wenn es dass ist versuche es mal so:
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 9600
Config Lcd = 16 * 4
Config Lcdpin = Pin , E = Portc.3 , Rs = Portc.2 , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5
Config Lcdbus = 4
Cls
Do
Locate 1 , 1
Lcd "Hello World!"
Loop
End
jon
EDIT:Da war ich wohl etwas langsam.
timo1105
02.01.2007, 21:28
habe immernoch den hier:
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 9600
Config Lcd = 16 * 4
Config Lcdpin = Pin , E = Portc.3 , Rs = Portc.2 , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5
Config Lcdbus = 4
Cls
Locate 1 , 1
Lcd "Hello World!"
End
nur leuchten leider nur 3 LED der Balken und die Hintergrundbeleuchtung aber sonst nichts.
Vielleicht fällt euch ja etwas ein...
Timo
nur leuchten leider nur 3 LED der Balken und die Hintergrundbeleuchtung aber sonst nichts.
Den Satz verstehe ich nicht ganz, aber vielleicht iegt es an deinem Kontrast. Versuche mal den Kontras einzustellen.
jon
timo1105
02.01.2007, 21:37
:-)
Es leuchten drei LED auf einer Balkenanzeige. Die Hintergrundbeleuchtung des LCD's leuchtet auch. sonst ist leider nichts zu sehen.
mfg
timo
timo1105
02.01.2007, 21:39
Wenn ich den Kontrast sehr hoch drehe, dann erscheinen in den Zeilen 2 und 4 eine ganze Reihe Kästchen.
Mehr ist leider nicht drin:(
Timo
Hallo
Kannst du mal ein Bild machen? (Kontrast hoch gedreht und einmal unten)
mfg Luca
timo1105
02.01.2007, 21:55
hmm...das ist jetzt schwer, vielleicht morgen. aber ich kann das genau beschreiben:
erste und dritte zeile kann ich mit dem obigen code gar nicht verändern. die zweite und vierte zeile kann ich ganz blass (sogar bis nichts mehr zu sehen ist) runterkontrastieren aber auch ganz "schwarz machen".
mfg
timo
timo1105
02.01.2007, 22:05
hi nochmal.
macht das etwas wenn ich 8 datenleitungen angeschlossen habe aber nur 4 benutze?
wollte ich nur gesagt haben.
Komisch ist halt nur, das der text des Demo-Programms angezeigt werden kann.
mfg
timo
linux_80
02.01.2007, 22:14
Hallo,
das macht nix, hab ich auch so.
Wenn das Demoprogramm von oben gelaufen ist, dann nimm doch das um daran rumzubasteln, und um zu sehen ab wann es dann nicht mehr geht.
Wenn die Balken zu sehen sind, ist das LCD nicht initialisiert, also nur Spannung und sonst nix angeschlossen, dann schaut es so aus.
Hallo
Hast du die 4 übrigen Leitungen an GND angeschlossen?
Kontrolliere noch mal ob du alles richtig angeschlossen hast.
mfg Luca
Ps: Kannst dir dir Bilder sparen.
timo1105
02.01.2007, 22:56
Hi!
nur irgendwie muss das doch auch so gehen? wie kann ich das den initialisieren?
geht das?
Ist ein wenig schade. Ich hatte gedacht, dass ich einfach mit ein paar simplen zeilen einsteigen kann?!
timo
linux_80
02.01.2007, 23:18
Was ist das denn genau für ein Display, hast den Stecker selber gebaut, oder war das alles schon fertig ?
Hast Du das alte RN-Mega8 mit dem grossen LCD-Stecker, oder das RN-Mega8plus, das nur den 10-pol. LCD-Stecker hat ?
timo1105
03.01.2007, 16:32
Hi!
schade, dann werde ich es wohl so machen müssen.
wär ja angenehm gewesen wenn ich nur den "lcd" befehl gebraucht hätte-
mal sehen was sich ergibt. Wenn einer ne andere idee hat, kann er sie gerne mitteilen.
Danke trotzdem!
Timo
Hallo
Poste doch mal was du überhaupt für ein Display hast und beantworte die fragen von linux_80, dann können wir dir vielleicht weiter halfen.
mfg Luca
wär ja angenehm gewesen wenn ich nur den "lcd" befehl gebraucht hätte
Wie machst du es denn jetzt?
jon
timo1105
03.01.2007, 18:58
hi!
Die vier übrigen Leitungen sind nicht an GND. Sie sind normal im großen LCD Stcker (Nur Mega8 kein plus) eingesteckt d.h sie sind mit den ports des Mega8 verbunden aber nicht in der software aktiviert.
Den Stecker habe ich mir selbst gebaut.
Das LCD ist von Conrad. Best. Nr. auf Conrad.de : 184691 - LN
Jetzt habe ich mal folgendes Probiert:
Declare Sub Textauflcdausgeben()
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 9600
Config Pind.6 = Output
Portd.6 = 0
' Falls ein LCD Display angeschlossen ist
Dim ___lcdno As Bit
Config Lcdpin=Pin,E = Portc.3,E2 = Portd.7,Rs = Portc.2,Db4 = Portd.2,Db5 = Portd.3,Db6 = Portd.4,Db7 = Portd.5
Config Lcd = 16 * 4
Sub Textauflcdausgeben()
___lcdno = 0 'Ober Displayhälfte initialisieren, wenn das Display zwei LCD-Controller besitzt
Initlcd
Cursor Off
Cls
Home
Lcd "Das neue Experimentierboard"
Locate 2 , 4
Lcd "** RN-MEGA 8 V1.4 **"
___lcdno = 1 'Dies ist nur notwendig wenn das Display zwei LCD-Controller besitzt
Initlcd
Cursor Off
Cls
Home
Lcd "nach Roboternetz Standard"
Locate 2 , 3
Lcd "(c) robotikhardware.de"
End Sub
---------------------------------------------
Das ist ein Teil der Demo. im Prinzip funktioniert damit die ausgabe aufs LCD nur das es flackert. Wenn ich die Zeile mit Config pind.6/portd.6 = 0 weglasse dann geht gar nichts mehr. Es piepst dann nur und es erscheint nichts auf dem LCD.
Woran kann das flackern des Textes und das damit auch verbundene Flackern mancher LEDs zusammenhängen?
muss ich beim Code etwas ergänzen?
Timo
Hallo
Das Display hat einen KS0066 Controller, vielleicht geht es deshalb mit dem LCD Befehl nicht, bin aber kein Experte auf diesem Gebiet.
mfg Luca
timo1105
03.01.2007, 20:03
Ahja, vielleicht weiß ja jemand anders, was im obigen code ändern muss bzw. wie ich es ohne Fehler hinbekomme einen Text auszugeben. Würde mich jedenfalls sehr freuen! :-)
Timo
linux_80
03.01.2007, 20:06
Hallo,
Du kannst mal versuchen:
Config Lcd = 16 * 4, chipset=KS077
Ist zwar wieder ein anderer Chip, aber evtl. hilft ein anderes Timing schon :-k
Das E2 bei Config LCDPin kannst Du weglassen, das gibts sowieso nicht am LCD.
Das mit dem RW-Pin bzw. PortD.6 stimmt schon so, man kann es entweder fest auf Gnd legen, aber da das Kabel schon fertig ist, gehts nur so.
timo1105
04.01.2007, 10:04
Moin,
mit dem anderen Timing geht gar nichts mehr:(
Was bewirkt denn die Zeile: Config Pind.6 = Output
Portd.6 = 0
und warum bräuchte ich die im ersten Beispiel nicht? Da wurden ja nur die Pins konfiguriert und das LCD mehr nicht.
Wie kommt das blinken bzw. rütteln zu stande? warum wechselt er immer die Ports (LED an, LED aus) ?
Sollte ich mir ein anderes LCD kaufen?
Timo
timo1105
04.01.2007, 10:10
Hi!
Ich habe etwas rausgefunden, vielleichr hilft es weiter. Es reicht wenn ich folgenden Code eingebe. Es ändert sich nichts im Vergleich zum letzten:
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 9600
Config Pind.6 = Output
Portd.6 = 0
Config Lcdpin = Pin , E = Portc.3 , Rs = Portc.2 , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5
Config Lcd = 16 * 4
CLS
Lcd "Das neue Experimentierboard"
Locate 2 , 4
Lcd "** RN-MEGA 8 V1.4 **"
Es blinken dann im gleichzeitigen Takt die LED's 5 und 7 von Der Balkenanzeige beim Quarz (PD5 und PB3 vgl. https://www.roboternetz.de/wissen/index.php/RN-Mega8 )
EDIT: Wichtig! Wenn ich ein End hinter das letzte "LCD" setze, dann zeigt er mir nur witzige Zeichen an wie z.B: " ??>-:.."?OOoo" und so etwas?! Hilft das weiter?
Es muss also irgendwie an der Config Pind.6 Zeile liegen?!
Timo
Mit Portb.6=Output schaltest du den Pin d.6 als Signaleingang und mit Portd.6=0 schaltest du den internen Pull-Up Widerstand ein.
Wenn du dir restlichen Datenleitungen nicht angeschlossen hast, und nicht an GND geschlossen hast, weiß ich nicht, ob das Display richtig funzt.
Definiere deswegen mal im Porgramm die ersten vier Datenleitungen Db0-3 und vergiss die Zeile "config lcdbus=8".
jon
P.S.:Sind die Verbindungen bei deinem selbstgebauten Stecker richtig?
timo1105
04.01.2007, 10:46
hi jon!
Habe jetzt mit dem multimeter alle leitungen geprüft. die 4 Leitungen die gesteckt waren, waren i.O.
Jetzt habe ich versucht die anderen 4 zu definieren. Habe sie in die Zeile dazugeschrieben.
Jetzt sagt mir das Programm das es ein "Invalid parameter for config parameter or value [Db0,Db1,Db2,Db3]
was hab ich denn jetzt falsch gemacht?:)
Timo
timo1105
04.01.2007, 11:06
Unter "options---compiler---LCD" in Bascom hat er auch nur die 6 Leitungen "E,RS, Db4-7" ?
woran liegt das? kann das die demoversion nicht?
Timo
Hast du die Zeile "config lcdbus=8" hinzugefügt?
Ohne die muss die Fehlermeldung kommen, da er davon ausgeht, dass du das Display im 4-bit Modus betreibt.
Du musst di etstmal kein neues Display kaufen. Das kriegen wir schon irgendwie zum laufen.
jon
P.S.:Wenn du den Code änderst stell ihn immer gleich mit rein.
timo1105
04.01.2007, 11:40
ES FUNKTIONIERT!
Der Code:
$regfile = "m8def.dat"
$crystal = 16000000
Config Pind.6 = Output
Portd.6 = 0
Config Lcdpin = Pin , E = Portc.3 , Rs = Portc.2 , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5
Config Lcd = 16 * 4
Waitms 100
Initlcd
Cls
Lcd "Warum..."
Locate 2 , 4
Lcd "..geht Nichts"
End
Waitms 100... ich habe es eben in einem anderen Beitrag gelesen und es einfach mal übernommen! Es geht!
Danke für eure Hilfe.. wenn mal wiederetwas sein sollte, schreib ich hier wieder rein.
Wie ist das wenn ich mit 8bit arbeiten möchte. Geht das mit der Demo-Version?
mfg
Timo
Da war ich wohl etwas langsam...
Kannst du denn jetzt von allein sagen, wo dein Fehler lag?
Wenn du im 8bit Modus arbeitest geht das ganze etwas schneller. Wenn du Sachen hast, die schnell ablaufen müssen, ist der 8bit Modus besser.
jon
timo1105
04.01.2007, 12:05
Hi!
wie gesagt, es lag daran, dass ich die Zeile: Waitms 100 initLCD vergessen hatte.
Irgendwie funktioniert jetzt alles ohne zu ruckeln oder irgendetwas.
Es muss daran gelegen haben.
Timo
timo1105
04.01.2007, 15:57
Hi!
wollte das Thema mit dem letzten Satz nicht schließen ;-)
Ich habe folgenden Code in Bascom eingegeben:
Declare Sub Lcd1()
Declare Sub Lcd2()
$regfile = "m8def.dat"
$crystal = 16000000
Config Pind.6 = Output
Portd.6 = 0
Config Pinc.0 = Input
Portc.0 = 1
Config Lcdpin = Pin , E = Portc.3 , Rs = Portc.2 , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5
Config Lcd = 16 * 4
Waitms 100
Initlcd
Cls
Locate 1 , 1
Lcd "Willkommen"
Wait 2
If Pinc.0 = 1 Then
Call Lcd2
Else
Call Lcd1
End If
End 'ab hier ist Ende ???????!!!!!!
Sub Lcd1()
Cls
Locate 1 , 1
Lcd "taste gedrueckt"
End Sub
Sub Lcd2()
Cls
Locate 1 , 1
Lcd "Taste nicht"
Locate 2 , 1
Lcd "gedrueckt"
End Sub
---------------------------------------
Er soll bezwecken, dass erst 2 sekunden lang ein "Willkommen" erscheint und danach über das LCD angezeigt wird ob ein taster gedrückt ist oder nicht.
Jetzt spinnt wieder alles rum sobald ich das "End" weglasse (im Code markiert).
Lasse ich das "End" weg dann springt die Anzeige wieder. Wenn ich das "End" schreibe, dann ist nach 2 sekunden schluss.
Wie müsste das Programm jetzt ungefähr aussehen? Mache ich einen großen Fehler?
mfg
Timo
Wie wäre es, wenn du das:
If Pinc.0 = 1 Then
Call Lcd2
Else
Call Lcd1
End If
in eine Do-Loop-Schleife setzt?
Also so:
Do
If Pinc.0 = 1 Then
Call Lcd2
Else
Call Lcd1
End If
Loop
jon
timo1105
04.01.2007, 19:25
Hi!
dann geht es zwar aber die Schrift Blinkt, bzw. flackert.
wie macht ihr denn das?
Timo
Ein waitms xyz einfügen.
jon
timo1105
05.01.2007, 11:47
hi!
sorry aber ich kapier das grad nicht. :)
vielelicht kannst du ja mal ein kleines Beispiel einfügen. Das wäre sehr nett.
mfg
Timo
Den Do-Loop Teil also so:
Do
waitms 100
If Pinc.0 = 1 Then
Call Lcd2
Else
Call Lcd1
End If
Loop
In diesen 100ms darfst du zwar keinen Tster drücken, aber in dieser Zeit kannst du den Taster nicht lolassen.
Wenn das nichts hilft, setzte vor die beiden "end sub" die "waitms 100".
jon
timo1105
05.01.2007, 13:12
hi!
Es geht zwar prinzipiell wenn ich alles in eine Do Loop schleife reinpacke aber die Schrift flackert noch und die eine LED von portd.4 flackert im 100ms takt genauso wie die schrift.
Das kann ja irgendwie auch nicht richtig sein alles in eine do loop-schleife zu schreiben?!
Wie macht ihr das denn, wenn man auf Tastendruck einen anderen Text bekommen will als wenn der taster nicht gedrückt ist.
Habt ihr zufällig ein Beispiel? Ich versuche ja gerade das Beispielprogramm von RN Wissen zu verstehen, wie die das da machen. Nur irgendwie erscheint mir das ganz schön schwierig?!
mfg
Timo
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.