Archiv verlassen und diese Seite im Standarddesign anzeigen : CCRP5 -> CC2 - LCD Ansteurung
Flauschi
17.01.2006, 12:16
Hallo liebe Freunde,
habe heute das LC-Display für den Robby bekommen.
Habe es auf der Basiserweiterung montiert doch es reagiert nicht.
Ich habe es an LCD1 angeschlossen.
Hier ein Code ausschnitt.
thread main
{
ccrp5.init ( );
ccrp5.initLCD();
ccrp5.clearLCD();
ccrp5.writeLCD(1);
ccrp5.printLCD("LCD Ausgabe");
}
Benötigt das LCD eine externe Stromverbindung?`
Bitte helft mir.
Vielen Dank.
Gruß Ronny
Hallo Ronny,
ich sehe schon, du bist weiter fleissig!
An der BE des RP5 kann man ja 2 LCDs anschließen:
Am Stecker LCD1 (der rechte) wird das LCD von der CC1 auf dem Robby angesteuert.
Mit deinem Codeschnipsel sprichst du dieses LCD an, und zwar von der CC2 aus, über die serielle Schnittstelle zur CC1, die dann den Text ausgibt. Wenn nix zu sehen ist, dreh mal den Kontrast höher am Poti auf der BE rechts hinten.
An den Stecker LCD2 (links) wird das LCD für die CC2 angeschlossen. Sie kann darauf direkt über die Lib lcdext zugreifen. Alle Befehle fangen also mit z.B. lcdext.init(); o.ä. an. Wenn du nur ein LCD hast, solltest du es hier anschliessen (schneller und ohne den Umweg über die CC1).
P.S.:
Ein Tip noch für deine Test-Progs:
Du solltest sie mit loop {} beenden, damit das Programm in einer Endlosschleife stehen bleibt. Ein Neustart geht dann über RESET.
Alternativ kannst du deinen ganzen Code in
loop
{
Code
}
einschließen, dann wird er immer von vorn ausgeführt (z.B. ein Lauflicht o.ä.
Gruß Dirk
In der Anlage noch ein Ladeprogramm für den Robby mit BE und LCD (an LCD2)! Ich nehme es immer, wenn der RP5 geladen werden muss (.txt entfernen!).
Hallo Dirk,
vielen Dank werde es gleich mal ausprobieren :).
Kurze Frage noch zu den Loops.
wenn ich das in einen eigenen Thread schreibe benötige ich die Loop-Anweisung doch nicht oder?
Wenn ich in den Thread schreibe lcdext.init ...
wird doch eigentlich der init bei jedem durchlauf neu ausgeführt.ist denn das überhaupt notwendig.es sollte doch reichen wenn er einmal ausgeführt wird oder?
Vielen Dank.
Grüße Ronny :)
Hi Dirk,
Super es lag am Poti :)
ps. Wie bekomme ich es denn hin das der Text aufhört zu blinken?
Vielen Dank
Hallo Ronny,
ps. Wie bekomme ich es denn hin das der Text aufhört zu blinken?
... eben durch loop {} am Ende!!
Wenn du das Programm nicht beendest, fängt es immer wieder von vorn an.
Gruß Dirk
... also müsste ich praktisch das ganze in einen thread packen und anschließend loop{} schreiben.
Aber genau das macht er nicht :(
// Thread für LCD-Ansteuerung
thread lcd
{
lcdext.print("C-CONTROL ROBOT");
lcdext.line(2);
lcdext.print(" AKKU-LADER 2.2");
loop {}
}
// Einsprungspunkt
thread main
{
// Prüfen ob CCRP5 erfolgreich initialisiert wurde
if ( Initialize ( ) == 1 )
{
run lcd;
}
}
:( Vielen Dank für deine Hilfe
Hallo Ronny,
jetzt müßtest du dich erst einmal mit c2 beschäftigen (Anleitung der CC2).
Dann sieh dir ccrp5.html an, die Hilfe zum Modul.
Es gibt nur einen Thread main, siehe Demos oder auch das charge.c2.
Dein Prog wird besser, wenn du lcd als function deklarierst:
function lcd();
{}
(In charge.c2 wäre das wie die Funktion showCHARGING!)
Im Hauptprogramm thread main wird die Funktion dann mit lcd(); aufgerufen.
Probiers aus.
Die Zeile "if ( Initialize ( ) == 1 )" verstehe ich nicht. Was soll da bewirkt werden?
Gruß Dirk
Flauschi
18.01.2006, 09:49
Hallo Dirk,
die Funktion Initialize () ist von mir.
Codeschnippsel:
// CCRP5 initialisieren
function Initialize ( ) returns int
{
int result;
result = 0;
ccrp5.init ( ); // CCRP5 initialisieren
// Prüfen ob die Softwareschnittstelle korrekt arbeitet
if ( ccrp5.checkFAIL ( ) == 0 )
{
result = 1;
}
return result;
}
... damit der Mainthread nicht zulang wird.
Wenn ich keinen Thread verwende dann wird aber kein nachfolgender Befehl mehr durchlaufen. Da ja in der lcd-Funktion ein loop {} steht damit der Text nicht blinkt. Also müsste das ja irgendwie mit einem Thread zu machen sein.Oder gibt es da einen andere Möglichkeit?
Codeschnippsel:
// Thread für LCD-Ansteuerung
function lcd ( )
{
lcdext.print("LCD Ausgabe");
loop {};
}
thread main
{
// Prüfen ob CCRP5 erfolgreich initialisiert wurde
if ( Initialize ( ) == 1 )
{
lcd ( );
ccrp5.Lon ( 1 );
}
}
Das Programm kommt durch denn Loop nicht zu dem Schritt das ccrp5.Lon ( 1 ) auszuführen.
Vielen Dank für Eure Hilfe.
Gruß Ronny
Hallo Ronny,
Das Programm kommt durch denn Loop nicht zu dem Schritt das ccrp5.Lon ( 1 ) auszuführen.
... stimmt.
Das loop {} ist dazu gedacht, den thread main zu terminieren, damit er nicht von vorn anfängt.
In Funktionen hat das nichts zu suchen, weil die Programmabfolge ja dadurch geblockt würde.
Also so:
thread main
{
// Prüfen ob CCRP5 erfolgreich initialisiert wurde
if ( Initialize ( ) == 1 )
{
lcd ( );
ccrp5.Lon ( 1 );
}
// Hier weiterer Programmcode!
loop {}; // Hier bleibt das Programm stehen und braucht RESET, um neu zu starten
}
Aus der Funktion lcd muss das dann wieder raus.
Gruß Dirk
Hallo Dirk,
wie immer vielen Dank für deine Hilfe.
Werde es heute Abend gleich ausprobieren wenn ich von der Arbeit komme.
Kurz frage noch...
Der Displaytext soll sich dynamisch ändern.
Der Robby soll im fahren und wenn er ein Hinderniss sieht soll er das auf dem Display darstellen und anhalten.
Wie realisiere ich denn sowas am besten?
Vielen Dank :)
Gruß Ronny
ps. Alles weitere werde ich mir dann besser selber erlernen.
Will ja was lernen und dir nicht auf die nerven fallen.
:)
Der Robby soll im fahren und wenn er ein Hinderniss sieht soll er das auf dem Display darstellen und anhalten.
Wie realisiere ich denn sowas am besten?
Das ist die hohe Schule!!! :-$
Da du das LCD schon ansteuern kannst, sieh dir in ccrp5.html 'mal die Befehle getCNSTAT(), setACSLO/HI/MAX() genauer an.
Viel Erfolg!
Gruß Dirk
Flauschi
19.01.2006, 11:36
Hallo Dirk,
vielen Dank nochmal für die super Hilfe die ganze Zeit.
ps. Werde dir mein fertiges Resultat schicken :)
Viele Grüße
Ronny
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.