Pages: 1 [2] 3   Go Down
Author Topic: Arduino UNO - Rainbowduino und weitere (LED-Uhr)  (Read 3570 times)
0 Members and 1 Guest are viewing this topic.
NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So, weiter gehts!
Ich schreibe gerade alles um auf ein Serielles LCD. (Pins sparen)
Leider komme ich da an einer stelle nicht weiter:

Folgendes mache ich:
Code:
// ############################ Initalisieren (klappt super)
#include <SoftwareSerial.h>
#define txPin 12                     // serLCD PIN
SoftwareSerial LCD = SoftwareSerial(0, txPin);   // init mit txPin (rx wird nicht benötigt)
pinMode(txPin, OUTPUT);                // serLCD PIN als OUTPUT einrichten
LCD.begin(9600);                       // Serielle Übertragung zum LCD starten
clearLCD();                            // LCD löschen


// ####################### wird jede Sekunde aufgerufen (klappt super)
void mainScreen(){
  goTo(1);                                                         //klappt auch
  lcdDigits(hour());                                             // hour() kommt von der systemzeit klappt auch
  
  LCD.print(weekdayNames[weekday()-1]);   // <--- klappt nicht!!!!!!
}

weekdayNames:
Code:
String weekdayNames[7] = {"   Sonntag    ","    Montag    ","   Dienstag   ","   Mittwoch   ","  Donnerstag  ","   Freitag    ","   Sammstag   "};

Fehlermedung:
Code:
serLCD_RTC_DCF77_Joy.cpp: In function 'void mainScreen()':
serLCD:4: error: no matching function for call to 'SoftwareSerial::print(String&)'
/Applications/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial/SoftwareSerial.h:37: note: candidates are: void SoftwareSerial::print(char)
/Applications/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial/SoftwareSerial.h:38: note:                 void SoftwareSerial::print(const char*)
/Applications/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial/SoftwareSerial.h:39: note:                 void SoftwareSerial::print(uint8_t)
/Applications/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial/SoftwareSerial.h:40: note:                 void SoftwareSerial::print(int)
/Applications/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial/SoftwareSerial.h:41: note:                 void SoftwareSerial::print(unsigned int)
/Applications/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial/SoftwareSerial.h:42: note:                 void SoftwareSerial::print(long int)
/Applications/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial/SoftwareSerial.h:43: note:                 void SoftwareSerial::print(long unsigned int)
/Applications/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial/SoftwareSerial.h:44: note:                 void SoftwareSerial::print(long int, int)
Ich verstehe schon das er Probleme hat mit dem String, denke ich 8-)
Nur bekomme ich nicht raus wie ich es schreiben muss.
Und irgendwie finde ich im Internet nur Beispiele mit "Text", das geht bei mir ja auch.

Und es sieht schon wieder so aus als ob die DCF77 Auswertung nicht klappt sobald ich auch was am Display ausgebe.
der Rainbow ist im mom deaktiviert.
Logged

Italy
Offline Offline
Full Member
***
Karma: 3
Posts: 142
jayduino rox
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ersetze String mit char * NB: mit dem Sternchen
oder die objekt orientierte Loesung:

Code:
   char buffer[16];
   weekdayNames[1].toCharArray(buffer,sizeof(buffer));
   LCD.print(buffer);
Logged

Juergen

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Irgendwie sieht das mit dem * einfache aus!
Deshalb hab ich das mal genommen und es klappt.

Danke
Logged

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hmmm, also sieht ja schon mal ganz gut aus:
RTC klappt!
DCF77 klappt!
serLCD  klappt!
Joystick klappt!

Aber:
Wenn ich den Rainbow dazu nehme dann schafft er es nicht mehr das DCF77 Signal auszuwerten.
Wenn ich das richtig verstehe mus der alle 15ms das signal abtasten.
Dafür scheint der schon zu viel anderen Kram zu machen.

Das DCF77-Modul wird einmal am Tag um 0 Uhr (also bei Tageswechsel) aktiviert.
Ich hätte auch kein Problem damit wenn zu dieser Zeit der Rainbow aus ist.
Habe das gerade mal zu Testzwecken gemacht.

Wenn DCF77Status == 0 (also aus) dann rainbowSecond() ausführen sonst halt nicht!

Irgendjemand einen Tip wie ich das sons regeln könnte?
Logged

Italy
Offline Offline
Full Member
***
Karma: 3
Posts: 142
jayduino rox
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset


Na, so ohne Kristallkugel ist das schwierig zu uebersehen!!
Bisschen Kode zum einschauen?


Logged

Juergen

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sorry, dachte das ist was generelles und hat im Prinzip nichts mit einem bestimmten Code zu tun!
Code kommt...

hmm ist zu groß
Logged

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

In der zip sind alles 5 Files drinne.
Weiß sonst erstmal nicht wie ich hier rein bekomme.

* Archiv.zip (6.36 KB - downloaded 9 times.)
Logged

Italy
Offline Offline
Full Member
***
Karma: 3
Posts: 142
jayduino rox
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ok.
Also, du hast in sendWireCommand ein
while(!OK)

Wenn es zum timeout kommt, wartest do 5ms, und das machst du 5000 mal wenn die Kommunikation hinkt.
Das koennte dein 'Hauptprogramm' fuer 25 Sekunden sperren, oder auch mehr, weil du auch gar nicht die routine verlaesst sondern es nochmal veruschst (setze da auch mal ein Serial.print(timeOut) ein ob er da tatsaechlich haengt).

Beste Loesung: das sendWireCommand aufbroeseln und besser mit den states zu arbeiten (typischerweise sollten microcontrollers mit statemachine-gedanken programmiert werden).

Nicht so nette loesung, aber koennte schnell gehen: nach 5 timeouts raus aus der ganze routine und das sendWireCommand nochmal probieren. Timeout sollte uebrigens auf 0 gesetzt werden wenn du einen neuaufbau versuchst.

Du benutzt uebrigens viele int variablen wo du besser bytes benutzen solltest um Platz su sparen, ist aber soweit ich das einsehe nicht ein aktuelles problem. Siehe auch PROGMEM als Stichwort nach, das kann mal wichtig werden wenn ploetzlich nichts mehr funktioniert.

HTH
Juergen

Logged

Juergen

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke schon mal für deine Hinweise!
Werde mir das morgen Vormittag (hab Spätdienst) mal genau anschauen!

Die leichte Lösung bekomme ich bestimmt hin aber was du mit dem state meinst
musst Du mir dann eventuell nochmal genauer erklähren.

Gruß
MueThoS
Logged

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Habe folgendes gemacht:

Habe den TimeOut beobachtet und es gab eigentlich keine Problem! Blieb auf 0.
Habe den Counter dann auch 10 begrenzt. Wenn es dann nicht geht ist es egal.
Ich setze dann den TimeOut auf 0 beim verlassen.

Zeit auf dem Rainbow anzeigen nur wenn die DCF77 nicht läuft.
Ich glaube das Problem was ich damit habe könnte auch an Störungen des Empfangs liegen.
Mache ich den Rainbow Stromlos empfange ich halt besser. Könnte doch sein oder (liegen ja direkt nebeneinander)

Ich habe auch die Lib ein kleines bisschen verändert damit ich besser Empfangsfehler erkennen kann.
myDCF.valid = 0 wenn gerade ausgewertet wird
myDCF.valid = -1 wenn ein Empfangsfehler kommt
myDCF.valid = 1 wenn das Signal richtig ausgewertet wurde.
Dadurch habe ich die Möglichkeit nach 20 Fehlern einfach abzubrechen.
Desweiteren Prüfe ich ob die Daten die vom DCF kommen auch im Bereich des Möglichen liegen!
Stunden < 25, Minuten < 60....
Da mir aufgefallen ist das es Möglich ist von der DCF auch ganz Falsche Werte als Richtig zurück zu bekommen!
48:78:55 34.55.2098 so was in der Art.

Temperaturmessung eingebaut mit einem LM35.
Funktioniert prima nachdem ich herausgefunden habe das ich den Wert zweimal lesen muss mit einem delay drinnen.
Sonst schwankt der extrem.

Was mir noch nicht gefällt ist das wenn gerade zwei "Zeiger" auf die selbe Stelle zeigen wird im moment nur die Sekunde als blau dargestellt.
Ich hätte gerne eine Mischfarbe. Da weiß ich noch nicht genau wie ich das am besten löse.
Code:
// ############################### Sekundentakt ##############################
void rainbowSecond(){
  sendCMD(0x10, CMD_CLEAR_PAPER);
  sendCMD(0x10, CMD_SET_INK, 0xF,0,0);
  sendCMD(0x10, CMD_DRAW_PIXEL,toByte(matrixX[hour()]),toByte(matrixY[hour()]));
  sendCMD(0x10, CMD_SET_INK, 0,0xF,0);
  sendCMD(0x10, CMD_DRAW_PIXEL,toByte(matrixX[minute()]),toByte(matrixY[minute()]));
  sendCMD(0x10, CMD_SET_INK, 0,0,0xF);
  sendCMD(0x10, CMD_DRAW_PIXEL,toByte(matrixX[second()]),toByte(matrixY[second()]));
  sendCMD(0x10, CMD_SWAP_BUF);
}


Problem ist auch das manchmal (nicht immer) die Sekunden auf dem Rainbow nur alle zwei Sekunden aktualisiert werden.
Die Anzeige stimmt dann nur fehlt eben immer eine Sekunde (wird übersprungen).

Mit den Variablen ist mir bewusst. Bin da nicht immer sicher was ich nehmen muss. Da ist int immer schön einfach.
Werde ich aber mal versuchen anzupassen.

Code habe ich wieder angehängt für die die es interessiert.

Gruß
MueThoS


* Archiv.zip (6.48 KB - downloaded 8 times.)
Logged

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So, muss das hier nochmals aufwärmen!
Ich bin mir nicht ganz sicher ob man mir jetzt bei diesem Problem überhaupt weiter helfen kann.
Aber ich schildere es einfach mal vielleicht hat doch einer einen Tip für mich.

Ich bin ja immer noch an der Uhr dran. Die mit den 60 RGB-Leds und ich habe in der Letzten Zeit ein bisschen am Holz gearbeitet.
Habe aus Biegesperrholz einen Ring hergestellt und in diesem die Leds eingebaut.
Habe auch schon Pläne für Rückwand und Frontplatte aus Holz, aber das ist hier erstmal nicht so wichtig.

Jetzt habe ich also 60 Leds quer in einer Reihe.
Daraus muss ich wieder eine Matrix machen. Aus Verdrahtungsgründen sind sie so angeordnet das ich die Kathoden von jeweils 8 Leds durchschleife
und die Anoden immer 8 Leds springen.
Ich habe das versucht mal darzustellen auf den Bildern.

Nachdem ich alles fertig gelötet hatte habe ich ein kleines Testprogram geschrieben welches mir nacheinander alle LEDs durch geht und musste feststellen das Fehler drinnen sind.
Hab dann nochmals alles kontrolliert, dann noch mal unter einer Lupe und ich drehe hier noch durch.

Und deshalb jetzt meine Frage:
Hat irgendeiner eine Idee wie ich das besser verdrahten kann?
Am liebsten währe mir eine Folienplatine die einmal rund geht und die Matrix halt auf der Folie liegt.
Nur so was wird's nicht geben und ist sicher auch nicht herzu stellen.

Aber was kann ich anders machen damit das nicht so anfällig ist.

Wenn das so weiter geht muss ich mir Beruhigungsmittel einwerfen!!!


* Foto-1.JPG (125.51 KB, 1024x343 - viewed 21 times.)

* Foto.JPG (161.03 KB, 1024x583 - viewed 31 times.)

* Untitled Sketch 2_Schaltplan.jpg (116.93 KB, 1586x990 - viewed 21 times.)

* Untitled Sketch 2_Steckplatine.jpg (108.28 KB, 2306x1440 - viewed 23 times.)
Logged

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hab noch mal eine Frage zur DS1307  RTC:
Und zwar habe ich jetzt alles vom Steckbrett umgebaut in mein Holzgedöns.
Und das währe auch ganz toll wenn es denn gehen würde!

Leider habe ich Probleme, ich glaube es liegt an der RTC.
Die gibt mir ja über SQW einen Sekundentakt.
Zumindest war das so.
Jetzt kommt da nix mehr raus. Hab mit meinem DSO Nano nachgeschaut: tote Hose.
Ist das Ding irgendwie sehr sensibel?
Ich meine ich habe da keine 230V Wechselstrom drauf gegeben aber ich glaube das ding ist kaput.
Hab noch eine zweite gehabt. Hab die eingelötet geht auch nicht(mehr).

Jetzt bin ich weider fast so weit den sch.. an die Wand zu werfen.
Gut da gehört ne Uhr hin aber .....
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 269
Posts: 21840
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

RTC geht sonst (ansperchbar über Interface? Zählt die Zeit richtig?) und Bits für SQR-Ausgang richtig gesetzt?

Quote from: ds1307 Datasheet
SQW/OUT (Square Wave/Output Driver) – When enabled, the SQWE bit set to 1, the SQW/OUT pin
outputs one of four square wave frequencies (1Hz, 4kHz, 8kHz, 32kHz). The SQW/OUT pin is open
drain and requires an external pull-up resistor. SQW/OUT will operate with either Vcc or Vbat applied.
und
Quote
Please note that the initial power-on state of all registers is not defined. Therefore, it is important
to enable the oscillator (CH bit = 0) during initial configuration.

Ansonsten tippe ich auf den Quarz, daß der nicht schwingt wegen Störungen.
Grüße Uwe
« Last Edit: May 13, 2011, 08:42:03 am by uwefed » Logged

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Was ich dazu sagen kann:
Es hat mal funktioniert!
Also sollten die Bits richtig gesetzt sein.
Auslesen kann ich im mom auch nicht aber das kann auch an mir liegen.
Der Chip ist auf einer kleinen Platine drauf (fertig gekauft) da sind wiederstände schon drauf.
Ich habe das Modul gerade versucht alleine nochmal aufs Steckbrett zu bekommen.
Irgendwie bekomme ich das nicht mehr hin.

Kann ich mit meinem Ossi auch einfach an den Quarz gehen um zu schauen ob der schwinkt?

Ich muß aber jetzt aufhören sonst dreh ich wirklich am Rad.
Manchmal währe es dann doch schön wenn man mal das internet aus lassen könnte und mal jemanden im reallife treffen könnte der Ahnung hat und sich das Live anschauen kann.

Gruß
Torti
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 269
Posts: 21840
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Kann ich mit meinem Ossi auch einfach an den Quarz gehen um zu schauen ob der schwinkt?
Bringt nichts; der Oszy wird den Quarz stören und der wird darum nicht schwingen.
Weiß jetzt auch nicht was Dir raten. Vieleicht alles ma 2 Tage liegen lassen.
Gerüße Uwe
Logged

Pages: 1 [2] 3   Go Up
Jump to: