PDA

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

Jon
02.01.2007, 20:00
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?

Jon
02.01.2007, 20:20
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

Spion
02.01.2007, 20:33
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

Jon
02.01.2007, 20:37
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

Jon
02.01.2007, 21:17
Was für einen Text meinst du??

jon

timo1105
02.01.2007, 21:20
"Hello world"

Spion
02.01.2007, 21:23
Hallo

Ich nehme mal an den auf dem Display.
Hast du "Config Lcdbus " = 4 gemacht?

Edit: Poste den Code

mfg Luca

Jon
02.01.2007, 21:27
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

Jon
02.01.2007, 21:34
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

Spion
02.01.2007, 21:44
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.

Spion
02.01.2007, 22:45
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

Spion
03.01.2007, 16:37
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

Jon
03.01.2007, 16:42
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

Spion
03.01.2007, 19:49
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

Jon
04.01.2007, 10:16
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

Jon
04.01.2007, 11:40
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

Jon
04.01.2007, 11:42
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

Jon
04.01.2007, 16:07
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

Jon
04.01.2007, 20:39
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

Jon
05.01.2007, 12:18
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