PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD soll Werte und "Text" in einer Zeile schreiben



Virus
05.01.2010, 10:26
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

Virus
05.01.2010, 13:15
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

shedepe
05.01.2010, 13:57
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.

Xandi11
05.01.2010, 14:07
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.

Richard
05.01.2010, 23:05
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

Xandi11
05.01.2010, 23:29
Die Ausgabe müsste eigentlich mit writeIntegerLCD(Variable,Typ) funktionieren

suicide
06.01.2010, 09:56
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

Virus
06.01.2010, 10:38
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');

Xandi11
06.01.2010, 11:12
@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 ...

Virus
06.01.2010, 15:50
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.

Xandi11
06.01.2010, 15:57
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

Xandi11
06.01.2010, 16:33
genial ... und hinten nach am Boden der RP6


Edit:

verdammt ... unten mit und verwechselt

Virus
06.01.2010, 19:42
ich würde mal fast sagen das ist ein Freak

Xandi11
10.01.2010, 17:00
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

Virus
10.01.2010, 18:07
gut, und was muss dann ins programm damit °auf dem Display erscheint?

Xandi11
10.01.2010, 18:37
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:

Xandi11
10.01.2010, 18:53
Ich habs geschafft, wenn auch mehr zufällig wie gekonnt.

mit writeStringLCD_P("ßC") kannst du °C schreiben.

geht auch mit writeCharLCD('ß')

Virus
10.01.2010, 20:06
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

Xandi11
10.01.2010, 20:26
[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

Virus
10.01.2010, 20:58
ein DCF empfänger und dann ein Programm zur ausgabe,
soll nicht leicht sein, aber möglich

Xandi11
10.01.2010, 21:28
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).

Xandi11
10.01.2010, 22:38
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

Xandi11
11.01.2010, 16:06
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.

Virus
11.01.2010, 16:17
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

Xandi11
11.01.2010, 17:01
Ich werd mal gucken, dass ich so einen DCF77-Empfänger bekomme ... eventuell aus ner kaputten Funkuhr auslöten, etc.
Mal bei Conrad schaun ...

Xandi11
11.01.2010, 17:06
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

Richard
11.01.2010, 18:03
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

Richard
11.01.2010, 18:07
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

Xandi11
11.01.2010, 19:10
Ü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

Virus
11.01.2010, 19:37
bei pollin gibt es einen DCF für 5euro

Xandi11
11.01.2010, 19:40
naja das wärs doch eigentlich wert ... da ist nicht viel verschmissen wenns nicht funktionieren sollte