Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD soll Werte und "Text" in einer Zeile schreiben
hallo RN,
mittlerweile funktioniert die Wetterstation auf meinem RP6, aber bisher kommen die gemessenen Daten aus dem Terminal und nicht vom Display.
Das soll sich ändern, aber ich hab keine Idee wie ich auf dem Display (an der M32) so etwas zeigen kann:
Zeile 1: Variable stemp, dann "°C"
Zeile 2: Variable rlicht, dann "L", dann Variable rrF, dann "% rF"
radbruch
05.01.2010, 11:31
Hallo
Schön, dass dein Sensor nun funktioniert. Wenn du gleich zu Beginn den Schaltplan gepostet hättest, wäre die fehlende Vcc-Verbindung wohl eher aufgefallen.
Zum LCD: Wenn du ein Standart-LCD mit paralleler 4-Bit-Schnittstelle am M32 verwendest, sollte ein erster Test mit RP6Control_LCD (bei den Demos fürs M32) funktionieren. Abhängig vom Kontroller im LCD muss man allerdings eventuell das Setup in initLCD() der M32-Lib (RP6ControlLib.c) anpassen. Dazu benötigt man aber den Kontrollertyp des LCDs und dessen Datenblatt.
Wenn das Demo funktioniert, kannst du auch selbst Daten ausgeben. Die Funktionen dazu stehen alle in RP6ControlLib.c. Sie sind ähnlich wie die USART-Funktionen aufgebaut. Dazu kommen noch Funktionen zur Cursorsteuerung (=Schreibposition), löschen und scrollen. Zusätzlich kann man bei einigen LCDs noch eigene Zeichen definieren.
Gruß
mic
hi Radbruch,
zum Sensor:
ich hatte keinen Schaltplan, nur ein Layout für meine EXP.
Da ist die fehlende Leitugn drin untergegangen.
Ich hab das LCD von Conrad, extra für den RP6,
das Beispielprogramm und eigenses Ansteuern klappt auch,
nur hab ich keine Ahnung wie ich eine Variable und einen "Text" in einer Zeile Schreiben kann, dann bekomm ich von Programmers Notepad im output immer zu viele Argumente angezeigt.
radbruch
05.01.2010, 13:53
Hallo
Ich besitze kein M32 und kann es deshalb nicht testen:
#include "RP6ControlLib.h"
uint8_t c='a';
int main(void)
{
initRP6Control(); // M32 initialisieren
initLCD(); // Display initialisieren
setCursorPosLCD(0,0); // Schreibposition Zeile 0 Spalte 0
writeNStringLCD_P("Test:");//Zeichenkette ausgeben
writeIntegerLCD(c, 10); // Integer ausgeben
setCursorPosLCD(1,5); // Schreibposition Zeile 1 Spalte 5
writeCharLCD(c);
writeCharLCD('B');
writeCharLCD('1');
while(1);
return(0);
}
Keine Ahnung, ob das so funktioniert.
Gruß
mic
Pack es beides in einen String rein den du dann, je nach Bedarf aktualisierst
Oder:
Es gibt doch bestimmt die Funktion gotoxy Dann schreibst du z.B an der Position 0,0 deinen Text und dann je nach Text Länge z.B an der Position 6,0 deinen Wert.
setCursorPosLCD(0,0);
writeIntegerLCD(stemp,DEC);
writeCharLCD('°');
writeCharLCD('C);
setCursorPosLCD(1,0);
writeIntegerLCD(rlicht,DEC);
writeCharLCD('L');
setCursorPosLCD(1,8);
writeIntegerLCD(rrF,DEC);
writeCharLCD('%');
writeCharLCD('r');
writeCharLCD('F');
Du könntest das dann z.B. auch mit Kommastelle machen.
Im Selbsttest der Base ist kommen solche Ausgaben vor ... allerdings auf die serielle Schnittstelle.
nur hab ich keine Ahnung wie ich eine Variable und einen "Text" in einer Zeile Schreiben kann, dann bekomm ich von Programmers Notepad im output immer zu viele Argumente angezeigt.
Ich habe so etwas in Bascom mit der STR(x) Funktion gemacht
X= 12345
STR (X) ; wandelt dann die Zahl 12345 in einen String um und
den kann man dann als Text ausgeben. ie mann unter C eine
Zahl in einem String wandelt?
Gruß Richard
Die Ausgabe müsste eigentlich mit writeIntegerLCD(Variable,Typ) funktionieren
Hi,
du könntest für jede Zeile deines LCDs ein char Array anlegen und die entweder mit sprintf füllen oder über den Index auf das Feld zugreifen.
Da würde dann vermutlich erstmal etwas drin stehen wie:
"T: 00°C"
"000L 000%rF"
Wenn sich dan den Werten etwas ändert, schreibst du die neuen Werte an die entsprechenden Positionen des Arrays.
Dazu läuft noch ein Task, der jede Sekunde oder jede halbe Sekunde den Inhalt der Arrays aufs Display schreibt.
Natürlich könntest du auch die Arrays einsparen und schreibst einmal deine Einheiten auf das Display raus. Die Werte schreibst du dann nur noch mit den, hier schon genannten, setCursorPosLCD() und WriteIntegerLCD() Methoden aufs Display.
Grüße,
Jan
vielen Danke euch allen,
besonders dir Xandi11,
deinen Programmschnipsel habe ich noch ein wenig ergänzt,
weil doch noch mehr Platz auf dem LCD war, und dieses "°" nicht schreiben konnte.
setCursorPosLCD(0,0);
writeIntegerLCD(stemp,DEC);
writeCharLCD('G');
writeCharLCD('r');
writeCharLCD('a');
writeCharLCD('d');
writeCharLCD(' ');
writeCharLCD('C');
writeCharLCD('e');
writeCharLCD('l');
writeCharLCD('s');
writeCharLCD('i');
writeCharLCD('u');
writeCharLCD('s');
setCursorPosLCD(1,1);
writeIntegerLCD(slicht,DEC);
writeCharLCD('L');
writeCharLCD('i');
writeCharLCD('c');
writeCharLCD('h');
writeCharLCD('t');
setCursorPosLCD(1,8);
writeIntegerLCD(srF,DEC);
writeCharLCD('%');
writeCharLCD('r');
writeCharLCD('F');
@Virus:
Danke ... für das gibt es ja dieses Forum
Bei sovielen "Zeichen" täte sich der Befehl writeStringLCD_P("text").
Bin mir allerdings nicht ganz sicher ob das gemeinsam mit dem Befehl setCursorPosition(y,x).
Müsste man ausprobieren ...
so wie es jetzt ist ist es gut denke ich.
jetzt kann ich auch mal die Wetterstation erproben,
die werte müssen sicher noch angepasst werden,
es ist allerdings nicht ganz einfach,
wenn man mit 2meter kabel am Home-PC hängt, praxisnah messwerte zu sammeln.
Den Home-PC auf den Rücken hängen,
den Bildschirm in eine Hand,
Maus und Tastatur in die andre.
Die Kabeltrommel darf man natürlich nicht vergessen !!!
:mrgreen: :mrgreen: :mrgreen:
radbruch
06.01.2010, 16:20
http://www.spaceconnection.de/twod/tragbarer_pc.jpg
genial ... und hinten nach am Boden der RP6
Edit:
verdammt ... unten mit und verwechselt
ich würde mal fast sagen das ist ein Freak
Virus: ... und dieses "°" nicht schreiben konnte.
Das Display kann dieses Zeichen sehrwohl ausgeben. Allerdings ist das Symbol nicht das Selbe, wie das Gradzeichen auf der Tastatur.
Siehe:
Beschreibung Display RP6 (http://www2.produktinfo.conrad.com/datenblaetter/175000-199999/197622-da-01-en-OLED_Textdisplay_RP5_und_RP6.pdf)
schau mal auf Seite 19/27, Zeile 3, Spalte 11
gut, und was muss dann ins programm damit °auf dem Display erscheint?
Das versuche ich gerade herauszufinden ...
aber mit der Anleitung komme ich noch nicht ganz zurecht ...
werde nochmals was schreiben wenn ich draufgekommen bin.
Wenn ich aufgebe natürlich auch (hoffe ich natürlich nicht). :mrgreen:
Ich habs geschafft, wenn auch mehr zufällig wie gekonnt.
mit writeStringLCD_P("ßC") kannst du °C schreiben.
geht auch mit writeCharLCD('ß')
vielen Dank,
ich habs grade mal ausprobiert, und naja jetzt hab ich wieder platz für neue sachen wie uhrzeit oder Luftdruck auf dem LCD
[quote=Virus] ... wie uhrzeit oder ... [quote]
Kannst man die Uhrzeit auf dem LCD ausgeben oder nur ein Programm dafür schreiben?
Wenn die Ausgabe der Uhrzeit ohne (zusätzliches) Programm möglich wäre ... das wär ne Sache
ein DCF empfänger und dann ein Programm zur ausgabe,
soll nicht leicht sein, aber möglich
Das ist aber "etwas" Aufwand.
... ist es das Wert.
Ich hätte da ne andre Idee:
Im Excel kann man mit einer Funktion die aktuelle Systemzeit ins Programm laden.
Vl kann man die aktuelle Systemzeit über den RP6 Loader "eingeben".
Ich versuche mal ein Programm zu schreiben, bei dem die Uhrzeit einmal am Anfang eingegeben werden muss und dann soll er die Zeit ausgeben und immer aktualisieren (mit Stopwatch vl).
Ich habe jetzt die Suchfunktion etwas beansprucht und folgendes gefunden:
Library für DCF77 (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=34240&highlight=uhrzeit)
Es gibt 2 Libraries jeweils eine für die Base und eine für die Erweiterung.
Man kann dann im Programm einfach die Zeit abfragen (wenn man den Empfänger hat).
RobotMichi
11.01.2010, 15:58
Das mit der Uhrzeit kann ja gar nicht funktionieren, denn wenn der RP6 keinen Strom hat, läuft ja die Uhr nicht mit. Und wie man mit einem Programm die Uhrzeit ermitteln kann, weiß ich auch nicht.
lg
Michi
Das ist logisch, aber er kann die Uhrzeit nach einem Neustart ja über die UART Schnittstelle abfragen ... das ist ja auch per M32 möglich.
oder der RP6 wird zu einer Funkuhr!
beim anmachen wartet er auf das normale Zeitsignal aus Frankfurt und zeigt dieses auf dem LCD oder gibt es im Terminal aus.
Mit den Libs von Dirk und mit der Hilfe vom WWW geht das, ist arbeit, aber nicht unmöglich
Ich werd mal gucken, dass ich so einen DCF77-Empfänger bekomme ... eventuell aus ner kaputten Funkuhr auslöten, etc.
Mal bei Conrad schaun ...
Bei Conrad gäbe es ein fertiges Modul zu kaufen
DCF Empfängerplatine (http://shop.conrad.at/ce/de/product/641138/)
Kostet 11€ ... ist nicht der Weltuntergang
Mit nen Uhrenbaustein, Uhrenquarz und ner kleinen Batterie
sollte das relativ einfach machbar sein.Habe ich mal vor ca
20 Jahren gebastelt, aber ob ich da noch Unterlagen finde?
Gruß Richard
Mit nen Uhrenbaustein, Uhrenquarz und
ner kleinen Batterie sollte das relativ einfach machbar sein.
Habe ich mal vor ca 20 Jahren gebastelt, aber ob ich da noch
Unterlagen finde?
Uhrenbausteine gibt es aber auch für I²c, das dürfte noch
einfacher sein.
Gruß Richard
Über einen ADC einen "Zeitsensor" auszulesen sollte ja auch (hoffentlich) nicht wirklich ein Problem sein ...
Zuzeit beschäftige ich mich sowieso lieber mehr mit den Servos ... das gibt mehr her, als ein Sensor.
... aber nochmal zu deiner Idee: das wäre ja im Prinzip das selbe od. so ähnlich wie beim Bios am Motherboard
bei pollin gibt es einen DCF für 5euro
naja das wärs doch eigentlich wert ... da ist nicht viel verschmissen wenns nicht funktionieren sollte
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.