PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : c-control MainUnitPlus + Lcd ansteuerung



matlxxx
31.03.2007, 22:59
Hallo!
Ich will an meine Main unit Plus(die mit dem Start und Resettaster) das Wintek 4*27 zeichen lcd von pollin ansteuern.
Hab es mit Basic++ versucht, klappt aber nicht.
Elektrische verbindung zum display dürfte in Ordnung sein
Jetzt ist meine Vermutung, dass die Anweisungen
LCD.init
lcd.pos
lcd.print usw.
meine unit plus nicht versteht
ist das möglich??

Also hab ich mich mal dran gewagt die Initialisierung selbst zu schreiben:
define dis byteport[2]
define en port[15]
dis = 11000000b
en = 1
en = 0
pause 1
dis = 11000000b
en = 1
en = 0
pause 1
dis = 11000000b
en = 1
en = 0
pause 50
dis = 01000000b
en = 1
en = 0
pause 50

Print "System Set"

dis = 01000000b
en = 1
en = 0
pause 50
dis = 00010000b
en = 1
en = 0

pause 50

Print "display ein"

dis = 00000000b
en = 1
en = 0

pause 50
dis = 00110000b
en = 1
en = 0

pause 50

Print "clear display"

dis = 00000000b
en = 1
en = 0

pause 50
dis = 10000000b
en = 1
en = 0

pause 50
pause 100


Print "entry mode set"
dis = 00000000b
en = 1
en = 0

pause 50
dis = 01100000b
en = 1
en = 0

pause 50
do
Print "A"
dis = 01000010b
en = 1
en = 0

pause 50
dis = 00010010b
en = 1
en = 0

pause 1
Pause 20
loop until 1=2

Das funktioniert aber auch nicht richtig
Es blinkt zwar was aber ich seh noch in der ersten zeile den Balken (macht das lcd wenn es mit strom versorgt wird)
Wahrscheinlich hab ich die binärcodes verdreht!!???
kann jemand meinen code mal berichtigen oder tipps geben an was es liegen könnte??

Danke im voraus,
gruß martin

Dierk
31.03.2007, 23:29
Hallo Martin,
ja die LCD-Befehle verstehen nur die neuere Units.
M-Unit 1.2, M2.00 und Station2 unterstützen diese LCD-Ansteuerung.

matlxxx
01.04.2007, 10:26
Hi Dierk!
danke für deine schnelle Antwort!
Gibt es eine andere möglichkeit mit basic++(ich weiß du willst das nicht gerne hören, aber ich find mich zurzeit mit basic++ auch ganz gut zurecht)
das lcd anzusteuern, manuell mit den binärzahlen wie ich es schon versucht habe, könnte das klappen?
irgendwie muss es ja gehen, denn auf dem applicationsboard is ja extra ein displaystecker...

gruß martin

Dierk
02.04.2007, 09:30
Schau mal hier unter "LCD Ansteuerung manuell".
https://www.roboternetz.de/wissen/index.php/LCD_an_C-Control_M-Unit_2
Das müsste auch mit einer Unit 1 funktionieren, wenn Du das so anschließt.


(ich weiß du willst das nicht gerne hören, aber ich find mich zurzeit mit basic++ auch ganz gut zurecht)
??? :-s

matlxxx
02.04.2007, 10:32
Ok Danke, haut hin(hätt ich auch selber finden können)


(ich weiß du willst das nicht gerne hören, aber ich find mich zurzeit mit basic++ auch ganz gut zurecht)vergiss es

gruß martin

matlxxx
10.05.2007, 16:49
Hallo,
auf der cc-plus is doch auch ein eeprom drauf, wo glaub ich mal gelesen zu haben, auch das programm gespeichert wird. kann ich darauf auch variablen dauerhaft speichern und das ganze noch mit basic++??
meine suche im netz ergab nur was mit iic, oder ccbasic, jedenfalls bin ich nicht schlauer geworden, kann mir da jemand helfen??
wäre sehr nett,
gruß martin

Dierk
10.05.2007, 22:26
Das geht ganz einfach mit fprint und finput oder mit dem EEPROM-Objekt. Letzteren kann aber nur für einmaliges Schreiben oder Llesen genutzt werden. Mehrere Werte können mit fprint/finput geschrieben/gelesen werde.


' schreibe irgendwas:

open for write
fprint 1
fprint 2
fprint 3
close

define x as word

open for read
do
finput x
print x
loop until eof
close

matlxxx
12.05.2007, 11:33
hi dierk!
danke für deine hilfe!
ok bytes kann ich schon speichern, aber
1) bei word Variablen speichert er über 255 andere zahlen, d.h. wenn ich zb. die zahl 350 speichern will, speichert er aber irgendeine andere zahl.
oder geht das mit der alten cc-plus wieder nicht?

und zum eeprom-objekt:
2) in der basic++ anleitung steht:
i = EEPROM.READ
da sagt der compiler aber "Befehl unbekannt"
jetzt schreib ich EEPROM.READ i <= das geht

2)und warum gibt er mir read befehl 150 aus??
i=150
EEPROM.WRITE i
EEPROM.CLOSE
EEPROM.APPEND 200
EEPROM.CLOSE
EEPROM.READ i <= hier 150??
EEPROM.CLOSE

gruß martin

Dierk
13.05.2007, 10:39
Hi,
vergiss mal die Bezeichnung CCPlus. Du hast eine Main-Unit. Die Bezeichnung CCPlus verwirrt nur.
Ich kann aber nicht wirklich sagen, ob das EEProm Objekt richtig funktioniert.
Beim Read-Befehl müssen aber immer die Variablen danach kommen, weil nicht nur eine übergeben werden kann.
http://www.csslabs.de/ccontrol/help/eeprom.html

Mit write schreibst Du 150 rein. Danach schreibst Du 200 mit append noch hinten dran. Dann liest einmal (den ersten Wert) und schließt dann das EEProm Objekt.

Zu den eventuellen Bugs: Die würde ich dem Stefan im Basic++ Forum ( www.fdos.de/forum ) mal direkt posten.

matlxxx
22.05.2007, 14:08
hallo,
tut mir leid dass ich so spät schreibe, aber ich hab ein bisschen rumprobiert,...
noch ne frage:
ich habe 3 variablen die ich zu unterschiedlichen zeiten speichern, und auslesen will.
bisher hab ich immer alle 3 variablen auf einmal gespeichert und auch ausgelesen und zwar so:
eeprom.write a, b, c
eeprom.read a, b, c
kann ich das auch einzeln mit adressangabe(so wie beim I2C eeprom)?

gruß martin

Dierk
27.05.2007, 09:12
ich habe 3 variablen die ich zu unterschiedlichen zeiten speichern, und auslesen will.
bisher hab ich immer alle 3 variablen auf einmal gespeichert und auch ausgelesen und zwar so:
eeprom.write a, b, c
eeprom.read a, b, c
kann ich das auch einzeln mit adressangabe(so wie beim I2C eeprom)?

Nein. Das Betriebssystem der C-Control I kann das leider nicht.

matlxxx
27.05.2007, 20:21
hi,
ich weis nicht wie ich das beschreiben soll, aber ich hab massive probleme bei der programmierung von meiner "main unit". Es ist nicht so dass der controller hängen bleibt, sondern er führt das programm fehlerhaft aus.
hauptsächlich hängt es mit dem eeprom beschreiben und auslesen zusammen. wenn ich mehr als sieben Word-Variablen speichere, dann funktioniert das programm nicht mehr richtig.
die anzahl wie viele word-variablen ich speichern kann ist auch abhängig von der größe meines programms.
erstaunlich ist auch wenn ich bei einem funktionierendem programm, dass ich auf meiner unit getestet habe, die anzahl der zu speichernden variablen erhöhe, dann wieder teste, dann führt die unit auch die anweisungen vor den eepromanweisungen fehlerhaft aus.

mit fehlerhaft meine ich zb. einen neustart des programms wenn ich eine function aufrufe, oder gar keinen funktionsdurchlauf, ...

könnte es eventuell sein, dass basic++ doch nicht so gut mit den alten units verträgt??

option cc1.0 <==habe ich im code miteingebaut

ich weis einfach nicht mehr weiter, sitz schon seit tagen an diesen problemen

meine hardware:
tastatur die über ein widerstandsnetzwerk an einem ad hängt
display an byteport 2
relaiskarte an byteport 1

in der hoffnung auf hilfreiche antworten
martin

Dierk
27.05.2007, 23:01
Das lass die EEPRom-Funktionen und verwende fprint/finput wie oben schonmals beschrieben. Ich glaube dass mit dem Speichern über EEprom alles aufeinmal auf den Stack gepackt wird und bei 7 Word-Variablen 14 Bytes an Stackspeicher zu viel sind. Die Main-Unit hat so viel ich weiß nur 12 Bytes Stack.???

Verwende fprint und finput und Dein Problem wird weg sein.


' schreibe irgendwas:

open for write
fprint 1
fprint 2
fprint 3
close

define x as word

open for read
do
finput x
print x
loop until eof
close

matlxxx
03.06.2007, 15:33
hallo!
war diese woche auf montage, drum konnte ich nicht schreiben..

fprint/read statt dem eeprom objekt hat das problem am anfang auch nicht gelöst.

ich hab jetzt ein paar nicht unbedingt benötigte variablen gelöscht und jetzt haut wieder alles hin!
aber warum??
kann es sein dass es ab einer bestimmten anzahl von variablen probleme gibt???
gruß martin

Dierk
03.06.2007, 15:53
Darum:

Ich glaube dass mit dem Speichern über EEprom alles aufeinmal auf den Stack gepackt wird und bei 7 Word-Variablen 14 Bytes an Stackspeicher zu viel sind. Die Main-Unit hat so viel ich weiß nur 12 Bytes Stack.???

matlxxx
03.06.2007, 17:09
nein, nicht die zu speichernden variablen,
ich hab die mit define definierten variablen gelöscht, also die gesamte variablenanzahl vermindert
gruß martin

Dierk
03.06.2007, 21:10
Die Main-Unit hat nur 21 Byte bzw. 12 Word User-Variablenspeicher.
Wenn aber mehr definiert werden, geht es schief.

matlxxx
04.06.2007, 14:24
so a gfrast!!! O:)
aber warum 21 byte und nicht 24(12word *2=24byte)????

gruß martin

Dierk
04.06.2007, 14:48
Ähm Schreibfehler: Natürlich 24Byte...

matlxxx
06.06.2007, 20:49
hallo,
noch 2fragen:
zählen die lokalen Variablen in functionen auch zu den 24 bytes?

gibt es irgendeinen trick, mit dem ich mehr variablen verwenden kann??

gruß martin

matlxxx
23.06.2007, 09:56
hallo!
tut mir leid dass ich schon wieder frage, aber für die alten main units find ich keine ausreichende beschreibung!
Also ich möchte über IIC ein serielles eeprom ansprechen, welche befehle muss ich jetzt bei der MUnit1.1 verwenden, dass ich bytes über den IIC bus senden und empfangen kann??
die iic.send usw. befehle werden wahrscheinlich nicht funktionieren oder??

vielen dank für eure(deine) hilfe
gruß martin