PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehlermeldung im DCF-Programm



HM
04.08.2006, 17:34
:-k
Hallo,
kann mir bitte jemand helfen?
Ich benutze das DCF-Teil von Conrad_Elektronik und die CC2, mit OS-Version 3.1.
Aus einen Buch habe ich dieses Programm, was ich von "lcd" in "lcdext" umgewandelt habe (das Modul "lcdext" ist aktiviert). Leider erhalte ich 4 Fehlermeldungen (bei "X").
Woran kann das liegen?
Und noch eine Frage:
Wie muß das Programm für eine Tagesanzeige z.B. Sa und Datumsanzeige erweitert werden?
Vielen Dank.
MfG. HM


/*************************
dcf1.C2
DCF-Funkuhr
**************************/

//------------
thread main
//------------
{
string std,min,sec,s;
int n, second;
second=system.second();
lcdext.init ();
lcdext.goto(0,0);
n=n+1;
std = "";
str.putintf (std,system.hour(),2);
min="";
str.putintf (min,system.minute(),2);
sec="";
str.putintf (sec,system.second(),2);
s=std+":"+min+":"+sec;
X lcdext.print(s,str.length(s));
X lcdext.clreol();
lcdext.goto (1,0);
s = "";
str.putint (s,system.dcferr());
X lcdext.print(s,str.length(s));
X lcdext.clreol();
wait (not(second==system.second()));
}

Dirk
05.08.2006, 10:19
Hallo HM,

in der lcdext gibt es die Funktionen print und clreol so nicht (mehr). Sieh dir die Hilfe (lcdext.html) an!
In der print Funktion gibts nur 1 Parameter, du kannst das str.length(s) weglassen.
Das clreol must du ganz weglassen, stattdessen kannst du einfach mehrere " " (Leerzeichen) hinter s ausgeben, die das Löschen bis zum Ende der Zeile (= clreol) machen.

Gruß Dirk

P.S.: Zum Datum kann ich nichts sagen, weil ich deine DCF-Lib nicht kenne. Falls sie auch ein DCF-Datum liefert, kann man ihn auch genauso auf dem LCD darstellen. Das System-Datum läßt sich jedenfalls auch so darstellen, wie du es mit der Zeit gemacht hast: Aus einem String zusammenbasteln.

HM
05.08.2006, 13:56
Hallo Dirk,
du scheinst wieder mal der Einzige zu sein, der mir hilft, vielen Dank.
die LCDEXT.htm hatte ich schon mal überflogen, leider reicht meine Erfahrung nur für Programme, die ich etwas verändern kann.
Ich werde es nochml probieren.
MfG. HM

HM
05.08.2006, 18:27
Hallo Dirk,
die Uhr läuft jetz mit "hh:mm:ss", sie zählt auch die Zeit.
Leider stellt sie sich nicht nach dem DCF-Signal um.
Obwohl am Oszilloskop ein Takt zu sehen ist, tut sich nichts, ich weiß
auch nicht, wie dieser Takt aussehen muß.
Das Programm sieht jetzt so aus.
MfG. HM
/*************************
dcf1.C2
DCF-Funkuhr
**************************/

//------------
thread main
//------------
{
string std,min,sec,s;
int n, second;
second=system.second();
lcdext.init ();
lcdext.goto(0,0);
n=n+1;
std = "";
str.putintf (std,system.hour(),2);
min="";
str.putintf (min,system.minute(),2);
sec="";
str.putintf (sec,system.second(),2);
s=std+":"+min+":"+sec;
lcdext.print(s);
lcdext.goto (1,0);
s = "";
//str.putint (s,system.dcferr());
lcdext.print(s);
wait (not(second==system.second()));
}

Dirk
05.08.2006, 21:35
Hallo HM,

dein Prog gibt ja nur die Systemzeit der CC2 aus. Die Ausgabe ist nur dann auch die DCF-Zeit, wenn das DCF-Signal vorher decodiert und in die Systemzeit übertragen wurde (macht das Betriebssystem).

Fragen:
1. Hast du die CC2 auf dem RP5?
2. Wo genau hast du das DCF-Modul angeschlossen?

Vielleicht hilft auch das weiter: https://www.roboternetz.de/phpBB2/viewtopic.php?t=14891

Gruß Dirk

HM
06.08.2006, 13:59
Hallo Dirk,
vielen dank für deine Antwort.
Ich habe die CC2 auf dem RP5, und das DCF- Modul auf der Experimentierplatine.
Der Ausgang des DCF-Moduls ist bei Y90 angeschlossen, die äußere Reihe wurde für das Verbindungskabel verwendet.
MfG. HM

Dirk
06.08.2006, 15:48
Hallo HM,

ja, das ist der DCF-Eingang der CC1, an dem dein DCF-Modul hängt. Du müßtest also, wenn alles elektrisch o.k. ist, schon die richtige DCF-Zeit in der CC1 auf dem RP5 haben.
Damit die Zeit in die CC2 gelangt, gibt es in der Lib ccrp5.c2 die Funktionen getRTC und getRTCDATE. Die 2 Funktionen übertragen die Zeit/das Datum aus der CC1 (also die DCF-Zeit!) via RS232 in die CC2-RTC.
Also so:
ccrp5.getRTC(); //CC1-Uhrzeit lesen
ccrp5.getRTCDATE(); //CC1-Datum lesen

Dann kann man sie mit deinem Programm auf dem LCD anzeigen.

Gruß Dirk

HM
07.08.2006, 21:37
Hallo Dirk,
das Weiterarbeiten an dem Programm wird sich leider wegen erheblichen Zeitproblemen verzögern, ich bin momentan arbeitsmäßig voll ausgelastet und muß auch am Wochenende arbeiten.
Ich habe das Programm so ausprobiert, wie du es beschrieben hast, leider funktioniert es noch nicht oder das DCF-Empfangsmodul ist defekt oder der Empfang ist schlecht.
Vielen Dank für die bisherige Hilfe, ich melde mich wieder.
MfG. HM

HM
12.08.2006, 09:11
Hallo Dirk,
ich habe dein Programm an der von dir genannten Seite angesehen, es ist sehr gut , es zeigt auch an, ob DCF-Empfang vorhanden ist.
Genau so ein Programm hatte ich mir vorgestellt.
Ich habe es ausprobiert und die Zeilen
//-------------------------------
thread main
//-------------------------------
{
string s;
lcdext.init();

an den Anfang des Programms eingefügt.
Leider erscheint nur die Anzeige RTC1: 06:00:00
Die zweite Zeile bleibt leer, was habe ich da noch vergessen?
Ps. Ich habe schon einige Stunden herumprobiert, leider ohne Ergebnis.
MfG. HM

Dirk
12.08.2006, 10:10
Hallo HM,

wieder an Bord? Das Geldverdienen ist manchmal lästig!

Hast du aus dem anderen Post mein Prog vom 7.12.05 oder das komplette vom 10.12. genommen? Das vom 10.12. müßte so unverändert funktionieren.

Wenn es das bei dir tut, ist klar, dass die Zeit aus der CC1 zur CC2 transferiert wird und auch die Anzeige der CC2-Zeit klappt.

Wenn da aber nicht die DCF-Zeit gezeigt wird, ist etwas mit dem DCF-Empfang nicht o.k.
Wie kann man da weiter kommen? In der Demo CCRP5_DEMO2_1.c2 (ab Version 2.3 des Treibers) gibt es einen Teil "Ausgabe des CC1-Statusregisters am LCD" (showCC1STAT), mit dem man am LCD anzeigen kann, ob überhaupt ein DCF-Signal ankommt ("DCF" steht dann in der 2. Zeile) und ob die Systemzeit schon einmal durch DCF gestellt wurde (Anzeige "ADJ"). Probier das 'mal aus. Vorher must du showSYSTEMDATA(); auskommentieren (// davor).

Wenn der Anschluß des DCF-Moduls o.k. ist, muss nach kurzer Zeit das "DCF" in der 2. Zeile erscheinen und danach auch das "ADJ". Wenn das so ist, müßte die DCF-Zeit dann auch angezeigt werden (mit dem Prog vom 10.12.05).
Apropos: Anschluß des Moduls: Hast du den invertierten Ausgang, Klemme 4, genommen?

Gruß Dirk

HM
12.08.2006, 12:22
Hallo Dirk,
schön, daß du mir so schnell geantwortet hast, vielen Dank.
Das Geldverdienen ist ja auch wichtig.
Ich habe das Programm von https://www.roboternetz.de/phBB2/viewtopic.php?t=14891
Hast du noch ein anderes Programm und wo?
Ich habe natürlich den invertierten Ausgang genommen. Auf dem RP5 hatte ich schon eine DCF Uhr (ohne Erweiterungsboard).
Ich werde die Demo 2_1.c2 ausprobieren, das mit dem auskommentieren von showSYSTEMDATA() hätte ich nicht gewußt.
Ich bedanke mich für deine Geduld (da haß du dir ja was aufgehalst)!
Nochwas Grundsätzliches:
Ich würde mir als Anfänger in C2 wünschen, daß von den Autoren in den Programmen mehr Kommentare zu den Programmzeilen geschrieben werden, dann weiß man auch für was das gut ist und kann die dann selbst anwenden.
Selbst im Buch von Kainka werden schon einige Kenntnisse vorausgesetzt, ohne genaue Grundlagen ist es kaum möglich selbst Programme zu schreiben.
Durch die vielen Veränderungen beim RP5 gelten manche Befehle auch nicht mehr oder es sind welche dazugekommen, giebt es z.B. eine aktuelle Liste und Beschreibung der neuen Befehle?
Vielen Dank.
MfG. HM

HM
12.08.2006, 13:03
Hallo Dirk,
ich habe bei mir die Demo "CCRP5_DEMO2_1.c2" Version 2.1 von 2004 gefunden.
Das ist bestimmt nicht die Richtige. Wo kann ich die neuen Demos herunterladen?
Das mit dem "showSYSTEMDATA()" hätte ich doch gewußt, ich dachte, es handelt sich um eine Umänderung des Programms, muß ich zur Wiederherstellung meiner Ehre sagen.
Ich muß jetzt mal für eine Stunde weg.
MfG. HM

Dirk
12.08.2006, 15:23
Hallo HM,


Wo kann ich die neuen Demos herunterladen?
Die passenden Demos sind in der ccrp5.zip enthalten, die vom http://www.cc2net.de zu downloaden ist. Das ist die Version 2.3 ! Du must aus der zip auch ccrp5.c2 und gateway_2.bas nehmen.


Ich würde mir als Anfänger in C2 wünschen, daß von den Autoren in den Programmen mehr Kommentare zu den Programmzeilen geschrieben werden, dann weiß man auch für was das gut ist und kann die dann selbst anwenden.
Ja, sehe ich genau so. Zur Entschuldigung: Ich mache das auch so nebenbei. Das Modul ccrp5.c2 hat aber eine recht gute (denke ich) HTML-Hilfe.


Durch die vielen Veränderungen beim RP5 gelten manche Befehle auch nicht mehr oder es sind welche dazugekommen, giebt es z.B. eine aktuelle Liste und Beschreibung der neuen Befehle?
Vielen Dank.
Letztlich sind die System-Routinen und Unterprogramme des RP5 (CC1-Ebene) nicht verändert worden. Auf der CC2-Ebene gab es von Anfang an eine ccrp5.c2 vom großen C. Die jetzige Version 2.3 ist stark erweitert, aber die Befehle sind ja in der HTML-Hilfe erklärt. So eine Hilfe gab es für die originale C-Version nicht.


Hast du noch ein anderes Programm und wo?
Sieh den Thread noch 'mal durch: Eine Version hatte ich am 7.12.05 eingestellt (war nur ein Codeschnipsel) und dann eine komplette Version am 10.12.

Gruß Dirk

HM
13.08.2006, 16:12
Hallo Dirk,
ich habe doch noch die neue Demo gefunden, sie war in einem anderen Verzeichnis.
Nach einer Standortveränderung wurde im LCD angezeigt:
"DCF" dann "ADJ" dann "DCF LOW"
Ich habe ohne den RP5 auszuschalten das Uhrenprogramm vom 10.12.05 von dir auf den RP5 geladen und den RP5 wieder an die gleiche Stelle gestellt, ich erhalte folgende Anzeige:
1. Zeile:RTC1: 49:08:56
2. Zeile:Date: 56.00.2104 "blinkt"
Ich bin bald am verzweifeln und du bestimmt auch.
Was die Hilfe und Kommentare in Programmen betrifft, sollte es an dich kein Vorwurf sein, wenn man das alles nebenbei macht ist die Zeit eben begrenzt.
Die genannten Hilfen habe ich zum Teil gelesen, dort werden die Befehle für das Programm beschrieben. Leider nicht im Zusammenhang mit anderen Befehlen und wie sie zusammen wirken, aber das ist sicherlich auch nicht die Aufgabe des Forums, deshalb würde ich mir ein ausführliches Buch für den RP5 wünschen, man könnte ja mal den Bedarf feststellen.
Ich hatte auf einer Seite gelesen, daß du wissen wolltest, wieviele noch mit dem RP5 arbeiten, daß hängt meiner Meinung nach hauptsächlich von der Puplikation von Programmen und Büchern ab, wenn mann nähmlich keine Grundlagen beherrscht gibt man auch schnell auf. Irgendwann will man ja auch mal was selbst zu Stande bringen.
Eine große Hilfe ist bestimmt auch dieses Forum, deshalb auch an Alle mein Dank.
MfG. HM

Dirk
13.08.2006, 17:41
Hallo HM,


Irgendwann will man ja auch mal was selbst zu Stande bringen.

ja, und es ist sehr ärgerlich, wenn das nach vielen Versuchen doch nicht so klappt. Eine bessere Doku würde da sicher Verbesserungen bringen.

Mit meinen Ideen bin ich auch fast am Ende, so dass ich nur noch sagen kann, was ich machen/testen/fragen würde, um den Fehler einzukreisen:

1. ccrp5.c2 und gateway_2.bas haben DIESELBE Version (am besten 2.3)?

2. Funktionieren mehrere Demo-Teile aus CCRP5_DEMO2_1.c2 (V2.3)?

3. Klappt DCF am RP5? Evtl. CC2 runternehmen und mit einem CC1-Programm die Zeit (HOUR, MINUTE, SECOND) anzeigen. Wird die DCF-Zeit empfangen und richtig von der CC1 angezeigt?

4. Funktioniert der Zeittransfer CC1 -> CC2 mit getRTC()? Wenn 1., 2. und 3. o.k. sind, müßte es klappen, die Zeit mit der CC2 anzuzeigen.

Viel Erfolg!!!

Gruß Dirk

HM
13.08.2006, 17:58
Hallo Dirk,
vielen Dank für dein Verständnis, ich werde deine guten Tipps ausprobieren, daß kann aber etwas dauern.
Die ccrp5.c2 und gateway_2.bas haben DIESELBE Version (V2.3).
Ich habe auch die Neueste "ZIP" 2.13 oder ähnlich, die genaue Bezeichnung habe ich jetzt nicht im Kopf.
Wird eigentlich die empfangene DCF - Zeit in der CC1 bei einen Reset der CC2 gelöscht?
Vielen Dank, bis bald. MfG. HM

Dirk
13.08.2006, 18:32
Hallo HM,


Wird eigentlich die empfangene DCF - Zeit in der CC1 bei einen Reset der CC2 gelöscht?
Ja! Bzw. macht die Funktion ccrp5.init() ein Reset der CC1.

Gruß Dirk

HM
15.08.2006, 16:12
Hallo Dirk,
vielen Dank für deine Antwort, gut daß es dich gibt, jetzt weis ich wieder etwas mehr.
Ich habe vorläufig wenig Zeit, muß wieder etwas Geldverdienen.
MfG. HM

HM
17.08.2006, 09:13
Hallo Dirk,
ich habe das DCF-Modul an der Erweiterungsplatine ohne CC2 angeschlossen.
Die richtige Uhrzeit wird nach sehr sehr langer Zeit angezeigt, scheinbar ist der Empang schlecht.
Ich habe eine kleine DCF-Standuhr, bei der die Stärke des Empfangs im Display angezeigt wird. Die Uhr stellt sich nach einem Reset nach ca 3-4 Min automatisch um.
Den RP5 habe ich dann genau auf diesen Standort gestellt, leider dauert die Zeitumstellung immer noch sehr lang, auch ein anderer Montageort des DCF-Moduls auf dem RP5 hat nichts gebracht.
Kann es sein, daß das DCF-Modul weniger empfindlich für den DCF-Empfang ist, als meine kleine Standuhr?
Übrigens hat sich die CC2 gegenüber des Vorjahres um 20€ verteuert, daß sind bei mir immer noch "40DM", ich frage mich was daß soll?
Diese Preispolitik dient nicht zur Verbreitung der CC2, im Gegenteil, sollte das Absicht sein?
MfG. HM

Dirk
17.08.2006, 16:33
Hallo HM,

ja, der DCF-Empfang auf dem RP5 kann gestört sein, ich habe das nach vielen Versuchen mit einem Abstand von ca. 5 cm von der Experimentierplatine hingekriegt. Das Modul sitzt dabei noch etwa 1 cm über einer kupferkaschierten Platine, die nur etwas größer als das Modul ist. Das Kupfer liegt an Masse. Die Platine soll das Modul nach unten abschirmen. Die Verbindung vom Modul zum RP5 ist geschirmt (Mic-Kabel, beide Innenleiter: + und Ausgang), an +- sitzt auf der Experimentierplatine noch ein Blockkondensator. Es gab 'mal einen Thread, der u.a. auch um Empfangsprobleme ging:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=14891

Der Preis der CC2 ist ziemlich unverschämt. Du hast sicher recht, dass die CC2 zum Auslaufen verdammt wird. Die Position im Katalog ist ja auch schon nicht mehr beim C-Control-Programm, wo die CC2 eigentlich hingehört, sondern nur noch in einer kleinen "Ecke" beim RP5.

Gruß Dirk

HM
17.08.2006, 21:42
Hallo Dirk,
selbstverständlich habe ich schon ein abgeschirmtes Kabel benutzt.
Ich werde den Aufbau so, wie du ihn beschrieben hast anbringen, dadurch wird aber der RP5 ziehmlich hoch.
Noch zwei Fragen?
Wie und wo hast du eigentlich so gut programmieren gelernt?
Kennst du Bücher, die das Programmieren ohne Vorkenntnisse beschreiben?
Vielen Dank. MfG. HM

Dirk
18.08.2006, 18:34
Hallo HM,


Wie und wo hast du eigentlich so gut programmieren gelernt?

:oops: :oops: :oops:
Im Ernst: Ich bin halt schon lange dabei, habe beim Apple ][ schon in den 80ern im BIOS rumgefummelt, war in 6502-Assembler. Aber habe den Anschluß schon lange verloren: Keine Ahnung von Systemprogrammierung und moderner Kommunikation. Bin da reiner Anwender.


Kennst du Bücher, die das Programmieren ohne Vorkenntnisse beschreiben?

Für die CC2 ist das Buch von Kainka Standard, aber das hast du ja, oder?
Es gibt auch noch andere C2-Einführungen, soweit ich weiss, sieh dich 'mal bei amazon und Konsorten um. (Beim großen C war da wohl auch was). Ich selbst habe da kein Buch als alter Autodidakt. Auch im CC2net gibt's eine Bücherecke.

Gruß Dirk

HM
20.08.2006, 15:44
Hallo Dirk,
ich bin auch nicht mehr der Jüngste, vor einigen Jahren habe ich mich mit Elektronik beschäftigt, bin aber auch nicht mehr auf dem Laufenden, es beschränkt sich, auch aus Zeitgründen nur noch auf den Nachbau von "Bastelsätzen".
Jetzt ist bei meinem RP5 auch noch das Display defekt, es blinkt und es erscheinen Streifen, ohne daß ich das Programm geändert habe. Es hat höchstens 100h gehalten, zum Glück habe ich noch eins, daß funktioniert.
Leider gibt es wenig Bücher, das von Kainka habe ich, mal sehen, was ich so finde, denn ohne richtige Grundlagen kann das nichts werden, besonders, wenn man wenig Zeit hat.
Leider muß ich heute noch arbeiten (Urlaubsvertretung).
Vielen Dank.
MfG. HM

HM
25.08.2006, 13:43
Hallo Dirk,
ich bin wieder da.
Du hattest mit deinem Beitrag recht, es lag tatsächlich an dem Abstand des DCF-Moduls von der Experimentierplatine, ich konnte die DCF-Zeit und das Datum mit deinem Programm empfangen "super". Der Abstand nach oben beträgt bei mir 5cm.
Es ist mir auch noch aufgefallen, daß der DCF-Empfang ausblieb, wenn ich meinen Laptop der neben den RP5 stand eingeschaltet hatte.
Ich habe da aber noch Fragen:
Es wird trotz DCF-Empfangs (die Zeit u. Datum stellen sich etwa nach 3min.) "DCF not active!!" im Display angezeigt, diese Anzeige verlischt erst nach der Übertragung der Zeit von der CC1 in die CC2, zeigt also nicht den realen Empfang an, ist das richtig?
Ist es möglich die reale Empfangsstärke des DCF-Signals mit Sonderzeichen oder mit einem Balken anzuzeigen, das wäre extrem hilfreich?
Kann man das Datumsdisplay dazu bringen, daß es mit blinken aufhört?
Wenn man einen guten Programmierer kennt, könnte er das Programm so erweitern, daß sich der RP5 durch langsames Rotieren zum besten Empfang des DCF-Signals dreht. Die Rotationen müßten in der Anzahl natürlich begrenzt werden, sonst sind die Accus bald leer, wäre das möglich?
Vielen Dank Dirk für deine bisherige Hilfe, ohne dich hätte ich wahrscheinlich irgendwann aufgeben müssen.
MfG. HM

Dirk
28.08.2006, 17:45
Hallo HM,

schön, dass es jetzt klappt! O:)

Das Prog ist sicher noch verbesserungsfähig!

-> Blinken: Am ruhigsten steht die Anzeige, wenn sie nur dann neu geschrieben wird, wenn die nächste Sekunde kommt. Probier 'mal, die Sek. in eine Variable zu speichern und nur dann das LCD neu zu beschreiben, wenn Variable <> Sek. wird.

-> Empfangsstärke: Das Modul gibt das so nicht her. Man kann also da keinen Meßwert hernehmen.

-> Drehen des RP5 zur besten Empfangsposition: Da gabs hier viele Versuche und auch erfolgreiche Programme, die noch im Download Bereich stehen müßten. Geh mal auf die Suche!

-> "Realer DCF-Empfang": In einem Prog könnte man indirekt auf die Empfangsqualität schließen, indem man die Zeit vom Programmstart bis zum DCF-Empfang (mit dem Timer) mißt.
Das Problem ist: "Wann habe ich DCF-Empfang?"
Antwort: Wenn Bit 0 im CC1-Statusregister auf 1 geht, dann liegt ein DCF-Signal an.
Das Problem 2: "Wann wird die Uhr richtig nach DCF gestellt?"
Antwort: Wenn Bit 4 im CC1-Statusregister auf 1 geht, wurde die interne Uhr erstmalig nach DCF gestellt.
Das Problem 3: "Wie kommt man ans CC1-Statusregister dran?"
Antwort: Da du ja die CC2 drauf hast, kannst du das CC1-Statusregister mit der Funktion getCC1STAT() lesen. In der CCRP5_DEMO2_1.c2 wird gezeigt, wie das gehen kann unter ...
//-------------- Ausgabe des CC1-Statusregisters am LCD ------------------------

Gruß Dirk

HM
29.08.2006, 18:58
Hallo Dirk,
danke für deine Antwort. Ich habe da noch eine Frage und zwar, wenn ich den RP5 nicht fahren lasse, erhält er die Versorgungsspannung aus einen Netzteil. Manchmal, wenn ich den Stecker ziehe (am RP5), kann es passieren, daß die "Gateway.bas neu geladen werden muß, sonst funktioniert nichts mehr, kann man das evtl. verhindern.
Was deine anderen Hilfen betrifft, werde ich das mal versuchen, habe aber Bedenken, daß ich damit zurechtkomme, ich bin eben ein Anfänger.
Vielen Dank. HM

Dirk
29.08.2006, 20:18
Hallo HM,


Manchmal, wenn ich den Stecker ziehe (am RP5), kann es passieren, daß die "Gateway.bas neu geladen werden muß, sonst funktioniert nichts mehr, ...

So etwas ähnliches gab es bei mir, wenn der RP5 bei schwächer werdendem Akku abgestürzt ist. Dann war manchmal das CC1-Programm kaputt.
Evtl. passiert das auch, wenn die Spannung vom Netzgerätbetrieb (9V) auf Akkubetrieb (7,2V) einbricht.
Abhilfe: Keine Ahnung. Vielleicht würde ein großer (1000uF) Kondensator helfen?

Gruß Dirk

HM
31.08.2006, 08:41
Hallo Dirk,
an einen Kondensator hatte ich auch schon gedacht, leider würde der nichts nützen, denn in der alten Beschreibung des C-Control/Basic Steuercomputers Version 1 hatte ich gelesen, daß man vor dem Ausschalten erst einen Reset ausführen muß. Der Kondensator würde auch ohne entsprechende Gegenmaßnahmen eine Spannungsspitze erzeugen.
"Die Versorgungsspannung darf bei einem laufenden Anwenderprogramm im Steuercomputer nicht ausfallen oder abgeschaltet werden! Zuvor muß ein Reset ausgelöst werden."
Für die CC1 ist in der Beschreibung eine Transistorschaltung, angegeben, die bei einer Unterschreitung von 4,55V einen Reset auslöst.
Die Frage ist nun, ob der RP5 so eine Transistorschaltung hat oder ob die CC2 so einen Reset automatisch auslöt wenn die Versorgungsspannung unterbrochen wird, denn sonst wird das Programm auf dem RP5 immer wieder mal zerstört werden.
Der Hinweis von Programmen, für die Rotation des RP5 zum DCF-Signal hin konnte ich im Downloadbereich leider nicht finden, wo hast du diese Programme gesehen?
Könnte man nicht den zweiten Frequenzeingang dafür nutzen, um festzustellen ob überhaupt ein Signal ankommt?
Noch ein Hinweis von mir:
Ich bin mir bewußt, daß ich manchmal ganz schön nerven kann, wenn es dir zuviel wird, teile es mir bitte mit, dann beenden wir das Ganze.
Vielen Dank. HM

Dirk
01.09.2006, 20:16
Hallo HM,


... ganz schön nerven ...

Nervt überhaupt nicht! Wenn's mir keinen Spaß machen würde, wär's kein Hobby!

Der RP5 hat keine Reset-Schaltung. Damit dürfte es auch eigentlich keine Probleme geben. Auch wenn du den Ladestecker abziehst, dürfte die Spannung ja nicht so tief einbrechen. Aber auch dann müßte das Prog eigentlich intakt bleiben (wie beim Ausschalten). Wie auch immer ...

Die Progs für das Drehen des RP5 waren CC1-Programme, ich geh mal auf die Suche.

Ob überhaupt ein DCF-Signal ankommt, sagt das Bit 0 im Statusregister. Das ist die einfachste Methode. Also so:

stat=ccrp5.getCC1STAT();
if (stat and 1) {lcdext.print("DCF ");}
Gruß Dirk

P.S.: Was macht dein DCF-Prog inzwischen???

Dirk
02.09.2006, 10:59
So, ich bin fündig geworden:

Da gab's ein Prog von Jan-Peter Müller (LCD_DCFUhrsuche1_1.bas) für den RP5 mit Erweiterungsplatine (aber ohne CC2!):


' Jan-Peter Müller
' 28.12.2003
' DCFUhrsuche V 1.1
'
'
' --------------------------------------------------------------------------
' FUNKTION DES PROGRAMMS
' --------------------------------------------------------------------------
' Beispiel 1
' Robby wird hingestellt, und sucht sich das DCF-Signal selbstständig.
'
' Meine Messungen haben ergeben , dass das DCF-Modul von Conrad
' Best.-Nr.:641138 einen Erfassungsbereich von 60 Grad hat.
'
' Da Robby sich ja drehen kann , sucht er alleine das Signal !
'
' Achtung kann bis zu 20 Minuten dauern !!!!!!!!!!!!!!!!!!!!!!!!!
'
' Abruch nach 24 Minuten (evtl. kein Empfang)
'
' Anzeige der Minuten über LED 1...8 , auf der Erweiterungsplatine
' pro Minute ein LED
'
'---------------------------------------------------------------------------
'Hardware:
' Robby
' Erweiterungsplatine
' Experimentierplatine
' DCF-Modul Best.-Nr.:641138
'
'Achtung DCF-Modul im Abstand von ca. 5 cm montieren zur Experimentierplatine
' , sonst kein Empfang !!!!!!!!!!!!!!!!!!
'
'-----------------------------------------------------------------------
'RESOURCEN:
'Sie finden in allen Beispielen sämtliche Systemroutinen die zum Betrieb des
'Roboters notwendig sind.
'----------------------------------------------------------------------------

'--------------------------
'------ I/O PORTS ---------
'--------------------------
'- INTERFACE LCD/EXTPORT --
define sdio port[1]
define sclio port[3]
define strobe port[4]
define LSTROBE port[7]
'-- INTERFACE COM/NAV -----
define DATALINE port[1]
define CLOCKLINE port[2]
'-- CC2 INTERFACE -------
define CC2POWER port[8]
'------ LCD INTERFACE ------
define lcd_port byteport[2]
define lcd_rs port[14]
define lcd_rw port[13]
define lcd_e port[15]
'--------------------------
'------ SENSORS ---------
'--------------------------
define LIGHT_L ad[7]
define LIGHT_R ad[6]
define SYS_VOLTS ad[3]
define CHRG_CURRENT ad[2]
define SYS_CURRENT ad[1]
define MIC ad[4]
define TOUCH ad[5]
'---------------------------
'------ DRIVE -------------
'---------------------------
define SPEED_L da[1]
define SPEED_R da[2]
define REV_L port[6]
define REV_R port[5]
'--------------------------
'---- SYSTEM MEMORY -------
'--------------------------
'--- INTERFACE BUFFER ----
define LBYTE byte[1]
define HBYTE byte[2]
define SUBCMD byte[3]
'---- OPERATION DATA ------
define EXTPORT byte[4]
define LED1_F bit[29]
define LED2_F bit[30]
define LED3_F bit[31]
define LED4_F bit[32]
define SYSTEM_STATUS byte[5]
define LEDPORT byte[6]
define L1_F bit[41]
define L2_F bit[42]
define L3_F bit[43]
define L4_F bit[44]
define L5_F bit[45]
define L6_F bit[46]
define L7_F bit[47]
define L8_F bit[48]
'---- LCD DRIVER -------------
define lcd_buf byte[7]
define lcd_param byte[8]
'--------------------------
'---- USER MEMORY -------
'--------------------------
'--- BIN-DEZIMAL-CONVERTER ---
define hunderter byte [10]
define zehner byte[11]
define einer byte[12]
define value byte[13]
define minutealt byte [14]
'--- SYSTEMROUTINEN -----------
define PLM_SLOW &H01C2
define SYSTEM &H01C7
define LED_DRIVE &H01CA
define COMNAV &H0144
'- ERWEITERTE SYSTEM ROUTINEN -
define REVR &H0101 'ANTRIEB RECHTS RÜCKWÄRTS
define REVL &H0106 'ANTRIEB LINKS RÜCKWÄRTS
define FWDR &H010B 'ANTRIEG RECHTS VORWÄRTS
define FWDL &H0110 'ANTRIEB LINKS VORWÄRTS
define ROTR &H0115 'RECHTS DREHEN
define ROTL &H0119 'LINKS DREHEN
define REV &H011D 'RÜCKWÄRTS
define FWD &H0121 'VORWÄRTS
define COMNAV_STATUS &H0125 'UPDATED ALLE FLAGS IM STATUS-REGISTER
define ACS_LO &H01E0 'ACS POWER LO
define ACS_HI &H01E8 '
define ACS_MAX &H01F0 '
define SEND_TLM &H013A 'SENDET TELEMETRIE (CH=HBYTE,DATEN=LBYTE)
define SEND_SYSSTAT &H0134 'SENDET TLM KANAL 0,SYSTEM STATUS
'(FLAGS für ACS,FWD/REV, ACS_LO/HI/MAX)
'---------- INIT---------------
LSTROBE=off
gosub SUBSYS_PWR_ON:REV_L=on:REV_R=on:sys PLM_SLOW 'Muss immer im Programm stehen !
gosub lcd_init
beep 400,10,50
minutealt = minute
gosub LOFF
gosub LED4OFF
LBYTE=0
'----------------------------------------------------------
'- Programmanfang DEMO Uhrzeit Synchronisieren --
'----------------------------------------------------------
#start
gosub CLR_DISTANCE

'#LCD_Laufschrift '1.Zeile
lcd_param = &H80
lcd_buf = OFF
gosub LCD_WRITE
gosub Nachricht1 'Zeichenausgabe

for einer = 1 to 40 '40 mal nach Links schieben

lcd_port = 1
tog lcd_e
tog lcd_e
lcd_port = 8
tog lcd_e
tog lcd_e
pause 5
next einer
#loop
SPEED_R=0:SPEED_L=0
if hour <> 0 then goto ende 'Sprung wenn DCF-Uhr gestellt hat
'geht nicht zwischen 00:00:00 und 00:59:59 sorry!
if (minute - 4) = minutealt then gosub dreh1
if (minute - 8) = minutealt then gosub dreh1
if (minute - 12)= minutealt then gosub dreh1
if (minute - 16)= minutealt then gosub dreh1
if (minute - 20)= minutealt then gosub dreh1
if (minute - 24)= minutealt then goto Fehler
if minute = 1 then gosub L1ON 'LED 1 an , nach einer Minute
If minute = 2 then gosub L2ON 'LED 2 an , nach zwei Minuten
If minute = 3 then gosub L3ON 'LED 3 an , nach drei Minuten
If minute = 4 then gosub L4ON 'LED 4 an , nach vier Minuten
if minute = 5 then gosub L5ON 'LED 5 an
If minute = 6 then gosub L6ON 'LED 6 an
If minute = 7 then gosub L7ON 'LED 7 an
If minute = 8 then gosub L8ON 'LED 8 an
If minute = 9 then gosub L9ON 'LED 8 an und LED 1
If minute = 10 then gosub L10ON 'LED 8 an und LED 2
If minute = 11 then gosub L11ON 'LED 8 an und LED 3
If minute = 12 then gosub L12ON 'LED 8 an und LED 4
lcd_param = 2 : gosub lcd_gotoline
lcd_param = &H20 : gosub lcd_writechar '4 Leerzeichen
lcd_param = &H20 : gosub lcd_writechar '
lcd_param = &H20 : gosub lcd_writechar '
lcd_param = &H20 : gosub lcd_writechar '
value=hour ' Ausgabe Stunden
gosub convert2
lcd_param = &H3A : gosub lcd_writechar ':
value=minute ' Ausgabe Minuten
gosub convert2
lcd_param = &H3A : gosub lcd_writechar ':
value=second ' Ausgabe Sekunden
gosub convert2

goto loop

#dreh1
gosub LOFF
gosub CLR_DISTANCE
minutealt=minute
SPEED_R=100:SPEED_L=100:sys ROTR 'Rotieren nach rechts

#rot1
SYS COMNAV_STATUS ';Abfrage des NAV
gosub L_DISTANCE 'Abfrage Linker Distanz-Sensor
if LBYTE >= 1 then return 'Wenn grosser 1 ,Sprung (60 Grad Drehung)
goto rot1 'Schleife, bis 1 erreicht ist

#ende
gosub LOFF
for einer = 50 to 250 step 5
beep einer,0,0:next
for einer = 50 to 250 step 5
beep einer,0,0:next
for einer = 50 to 250 step 5
beep einer,0,0:next
beep 200,1,1
gosub LCD_CLS

#loop1
lcd_param = 1 : gosub lcd_gotoline
lcd_param = &H20 : gosub lcd_writechar ' 3 Leerzeichen
lcd_param = &H20 : gosub lcd_writechar '
lcd_param = &H20 : gosub lcd_writechar '
value=hour ' Ausgabe Stunden
gosub convert2
lcd_param = &H3A : gosub lcd_writechar ':
value=minute ' Ausgabe Minuten
gosub convert2
lcd_param = &H3A : gosub lcd_writechar ':
value=second ' Ausgabe Sekunden
gosub convert2
lcd_param = &H20 : gosub lcd_writechar '
lcd_param = &H20 : gosub lcd_writechar '
on DOW gosub So,Mo,Di,Mi,Do,Fr,Sa
lcd_param = &H20 : gosub lcd_writechar '
lcd_param = 2 : gosub lcd_gotoline
lcd_param = &H20 : gosub lcd_writechar '
lcd_param = &H20 : gosub lcd_writechar '
lcd_param = &H20 : gosub lcd_writechar '
value=DAY ' Ausgabe Tag
gosub convert2
lcd_param = &H2E : gosub lcd_writechar '.
value=MONTH ' Ausgabe Monat
gosub convert2
lcd_param = &H2E : gosub lcd_writechar '.
value=YEAR ' Ausgabe Jahr
gosub convert2

goto loop1

#Fehler
gosub lcd_cls
lcd_param = 1 : gosub lcd_gotoline
lcd_param = &H20 : gosub lcd_writechar '
lcd_param = &H20 : gosub lcd_writechar '
lcd_param = &H4B : gosub lcd_writechar 'K
lcd_param = &H65 : gosub lcd_writechar 'e
lcd_param = &H69 : gosub lcd_writechar 'i
lcd_param = &H6E : gosub lcd_writechar 'n
lcd_param = &H20 : gosub lcd_writechar '
lcd_param = &H45 : gosub lcd_writechar 'E
lcd_param = &H6D : gosub lcd_writechar 'm
lcd_param = &H70 : gosub lcd_writechar 'p
lcd_param = &H66 : gosub lcd_writechar 'f
lcd_param = &H61 : gosub lcd_writechar 'a
lcd_param = &H6E : gosub lcd_writechar 'n
lcd_param = &H67 : gosub lcd_writechar 'g
lcd_param = &H20 : gosub lcd_writechar '
lcd_param = &H20 : gosub lcd_writechar '
beep 200,1,50
beep 400,1,50
beep 600,1,50
end
'-------------------------------------------
'IIIIIII Nachricht 1 IIIIIIIIIII
#Nachricht1
gosub lcd_cls
lcd_param = &H20 : gosub lcd_writechar
lcd_param = &H20 : gosub lcd_writechar
lcd_param = &H20 : gosub lcd_writechar
lcd_param = &H20 : gosub lcd_writechar
lcd_param = &H20 : gosub lcd_writechar
lcd_param = &H20 : gosub lcd_writechar
lcd_param = &H20 : gosub lcd_writechar
lcd_param = &H20 : gosub lcd_writechar
lcd_param = &H20 : gosub lcd_writechar
lcd_param = &H20 : gosub lcd_writechar
lcd_param = &H20 : gosub lcd_writechar
lcd_param = &H20 : gosub lcd_writechar
lcd_param = &H20 : gosub lcd_writechar
lcd_param = &H20 : gosub lcd_writechar
lcd_param = &H20 : gosub lcd_writechar
lcd_param = &H20 : gosub lcd_writechar
lcd_param = &H43 : gosub lcd_writechar 'C
lcd_param = &H2D : gosub lcd_writechar '-
lcd_param = &H43 : gosub lcd_writechar 'C
lcd_param = &H4F : gosub lcd_writechar 'O
lcd_param = &H4E : gosub lcd_writechar 'N
lcd_param = &H54 : gosub lcd_writechar 'T
lcd_param = &H52 : gosub lcd_writechar 'R
lcd_param = &H4F : gosub lcd_writechar 'O
lcd_param = &H4C : gosub lcd_writechar 'L
lcd_param = &H20 : gosub lcd_writechar '
lcd_param = &H20 : gosub lcd_writechar '
lcd_param = &H20 : gosub lcd_writechar '
lcd_param = &H20 : gosub lcd_writechar '
lcd_param = &H20 : gosub lcd_writechar '
lcd_param = &H20 : gosub lcd_writechar '
lcd_param = &H52 : gosub lcd_writechar 'R
lcd_param = &H4F : gosub lcd_writechar 'O
lcd_param = &H42 : gosub lcd_writechar 'B
lcd_param = &H4F : gosub lcd_writechar 'O
lcd_param = &H54 : gosub lcd_writechar 'T
lcd_param = &H20 : gosub lcd_writechar '
lcd_param = &H52 : gosub lcd_writechar 'R
lcd_param = &H50 : gosub lcd_writechar 'P
lcd_param = &H35 : gosub lcd_writechar '5
return

'IIIIIIIIIII LED DRIVER IIIIIIIIIIIIIIIII
#LED1ON
LED1_F=on:goto EXTPORT_WRITE
#LED1OFF
LED1_F=off :goto EXTPORT_WRITE
#LED2ON
LED2_F=on:goto EXTPORT_WRITE
#LED2OFF
LED2_F=off:goto EXTPORT_WRITE
#LED3ON
LED3_F=on:goto EXTPORT_WRITE
#LED3OFF
LED3_F=off:goto EXTPORT_WRITE
#LED4ON
LED4_F=on:goto EXTPORT_WRITE
#LED4OFF
LED4_F=off:goto EXTPORT_WRITE
#LEDSOFF
EXTPORT=EXTPORT and &H0F
#EXTPORT_WRITE
SYS SYSTEM:pulse STROBE:RETURN
'--- LEDS AUF DER BASIS ERWEITERUNG ------
#L1ON
L1_F=on:goto LEDPORT_WRITE
#L1OFF
L1_F=off :goto LEDPORT_WRITE
#L2ON
L2_F=on:goto LEDPORT_WRITE
#L2OFF
L2_F=off :goto LEDPORT_WRITE
#L3ON
L3_F=on:goto LEDPORT_WRITE
#L3OFF
L3_F=off :goto LEDPORT_WRITE
#L4ON
L4_F=on:goto LEDPORT_WRITE
#L4OFF
L4_F=off :goto LEDPORT_WRITE
#L5ON
L5_F=on:goto LEDPORT_WRITE
#L5OFF
L5_F=off :goto LEDPORT_WRITE
#L6ON
L6_F=on:goto LEDPORT_WRITE
#L6OFF
L6_F=off :goto LEDPORT_WRITE
#L7ON
L7_F=on:goto LEDPORT_WRITE
#L7OFF
L7_F=off :goto LEDPORT_WRITE
#L8ON
L8_F=on:goto LEDPORT_WRITE
#L8OFF
L8_F=off :goto LEDPORT_WRITE
#LOFF
LEDPORT=0
#LEDPORT_WRITE
SYS LED_DRIVE:pulse LSTROBE:RETURN
'---------------------------------------------
#L9ON
gosub L8ON:gosub L1ON
return
#L10ON
gosub L8ON:gosub L2ON
return
#L11ON
gosub L8ON:gosub L3ON
return
#L12ON
gosub L8ON:gosub L4ON
return
'--------------------------------------------
'++++++++++++ CONVERT BINARY TO DECIMAL +++++++++++++++
#convert2
'zehner abfragen
zehner=(value-(hunderter*100))/10
lcd_param=zehner+&H30
gosub lcd_writechar
'einer abfragen
einer=value-(hunderter*100)-(zehner*10)
lcd_param=einer+&H30
gosub lcd_writechar
return
'---------------------------------------------------
#convert3
hunderter=value/100
if hunderter>0 then lcd_param=hunderter+&H30 else lcd_param=&H20
gosub lcd_writechar
'zehner abfragen
zehner=(value-(hunderter*100))/10
lcd_param=zehner+&H30
gosub lcd_writechar
'einer abfragen
einer=value-(hunderter*100)-(zehner*10)
lcd_param=einer+&H30
gosub lcd_writechar
return
'----------------------------------------
'------------- LCD ROUTINE -------------
'----------------------------------------
#LCD_INIT
' alle ports 0
lcd_port = OFF

' 8-Bit-Modus aktivieren
lcd_param=&H38 : gosub LCD_WRITECMD

' mit 8-Bit-Command in 4-Bit-Modus umschalten
lcd_port=&B00000010
tog lcd_e
tog lcd_e

' ab jetzt 4-Bit-Modus
lcd_param = &H28 : gosub LCD_WRITECMD
lcd_param = &H0C : gosub LCD_WRITECMD

' Display loeschen
#LCD_CLS
lcd_param = &H02 : gosub LCD_WRITECMD
lcd_param = &H01 : gosub LCD_WRITECMD
return
' Zeilenwechsel
#LCD_GOTOLINE
if lcd_param = 1 then lcd_param = &H80
if lcd_param = 2 then lcd_param = &HC0
goto LCD_WRITECMD

' LCD-Kommando
#LCD_WRITECMD
lcd_buf = OFF
goto LCD_WRITE

' Zeichenausgabe
#LCD_WRITECHAR
lcd_buf = &B00100000

' Kommando oder Zeichen an Display senden
#LCD_WRITE
lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
tog lcd_e
tog lcd_e
lcd_port = lcd_buf or (lcd_param and &H0F) ' Lo-Nibble
tog lcd_e
tog lcd_e
return

'--------------------------------------------
'-------------------- Wochentage für LCD-Ausgabe --------------------------

#So
lcd_param = &H53 : gosub lcd_writechar 'S
lcd_param = &H6F : gosub lcd_writechar 'o
return
#Mo
lcd_param = &H4D : gosub lcd_writechar 'M
lcd_param = &H6F : gosub lcd_writechar 'o
return
#Di
lcd_param = &H44 : gosub lcd_writechar 'D
lcd_param = &H69 : gosub lcd_writechar 'i
return
#Mi
lcd_param = &H4D : gosub lcd_writechar 'M
lcd_param = &H69 : gosub lcd_writechar 'i
return
#Do
lcd_param = &H44 : gosub lcd_writechar 'D
lcd_param = &H6F : gosub lcd_writechar 'o
return
#Fr
lcd_param = &H46 : gosub lcd_writechar 'F
lcd_param = &H72 : gosub lcd_writechar 'r
return
#Sa
lcd_param = &H53 : gosub lcd_writechar 'S
lcd_param = &H61 : gosub lcd_writechar 'a
return
'--------------------------------------------------------------
'IIIIII SYSTEMROUTINEN COMM/NAV SYSTEM IIIII
#GET_IRDATA
SUBCMD=1:sys COMNAV:return
#SEND_IRDATA
SUBCMD=0:sys COMNAV:return
#RC5
SUBCMD=4:sys COMNAV:LBYTE= HBYTE and &HFC
HBYTE=00:SUBCMD=2:sys COMNAV:return
#RC5_INT
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE and &HFE)or 2
HBYTE=00:SUBCMD=2:sys COMNAV:return
#REC80
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H01)and&HFD
HBYTE=00:SUBCMD=2:sys COMNAV:return
#REC80_INT
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H03)
HBYTE=00:SUBCMD=2:sys COMNAV:return
'IIIIII SYSTEMROUTINEN SYSTEM IIIIIIIIIIII
#NO_ACS_INT
SUBCMD=4:sys COMNAV:LBYTE= HBYTE and &HFB
HBYTE=00:SUBCMD=2:sys COMNAV:return
#ACS_INT_200
SUBCMD=4:sys COMNAV:LBYTE= HBYTE or &H04
HBYTE=50:SUBCMD=2:sys COMNAV:return
#SUBSYS_PWR_ON
sdio=on:sclio=on:strobe=off:EXTPORT=(EXTPORT and &HFE)or 8
sys SYSTEM:return
#SUBSYS_PWR_OFF
EXTPORT=(EXTPORT and &HF7)or 1:sys SYSTEM
deact sdio:deact sclio:return


#CLR_DISTANCE
SUBCMD=3:sys COMNAV:return
#L_DISTANCE
SUBCMD=6:sys COMNAV:return
#R_DISTANCE
SUBCMD=7:sys COMNAV:return
'---------COM/NAV GERÄTETREIBER -------------
'syscode "p5driv12.s19"

Vielleicht hilft es beim Abgucken der Programmidee.
Bei mir half das Prog nicht so wirklich, weil mein Aufbau schon nach wenigen Minuten DCF-Empfang hatte (auch wenn das Modul nicht genau nach Frankfurt ausgerichtet war).

Gruß Dirk

HM
04.09.2006, 10:46
Hallo Dirk,
schön daß du soviel Geduld mit mir hast und bei der Suche nach Programmen geholfen hast.
Meine Uhr stellt sich nach ca. 3min. auf die DCF-Zeit um, aber nur wenn die Antenne genau ausgerichtet ist. Ich habe wahrscheinlich schlechten Empfang, was ich eigentlich bei Langwelle nicht so richtig verstehen kann, es könnte eigentlich nur noch an Störsignalen liegen.
Leider muß ich momentan einige Zeit paussieren, mein anderer Computer ist defkt und arbeitsmäßig bin ich voll ausgelastet, auch in meiner Freizeit.
Vielen Dank inzwischen, ich melde mich wieder, kann aber einige Zeit dauern.
MfG. HM