Hallo zusammen
Momentan habe ich ein Problem damit die Zeit, die von einer DS1307-RTC ausgelesen wird über den Arduino auf einer 4-digit 7-Segment-Anzeige darzustellen.
Die 7-Segment-Anzeige wird durch einen MAX7219 gesteuert.
Was ich schon geschafft habe:
-Auf der 7-Segment-Anzeige Zahlen darstellen
-Ausgabe der Zeit auf dem Seriellen Monitor
Was passiert wenn ich das zusammenfüge:
Die 7-Segment-Anzeige flackert. Die Segmente bilden keine Zahl.
Dies ist mein Code:
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
//7-Segment
#include <LedControl.h>
void setup () {
Serial.begin(9600);
//RTC - Vom Beispiel einfach übernommen
#ifdef AVR
Wire.begin();
#else
Wire1.begin()
#endif
rtc.begin();
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
}
void loop () {
DateTime now = rtc.now();
LedControl seg = LedControl (11, 13, 7, 0);
seg.shutdown(0, false);
seg.setIntensity(0, 15);
//// ANZEIGE DER UHRZEIT
//wie oben: führende 0 bei der Stunde
byte hourOnes = now.hour();
byte hourTens = 0;
while (hourOnes > 9) {
hourOnes = hourOnes - 10;
hourTens = hourTens + 1;
}
seg.setDigit (0, 3, hourTens, false);
seg.setDigit (0, 2, hourOnes, false);
//wie oben: führende 0 bei der Minute
byte minuteOnes = now.minute();
byte minuteTens = 0;
while (minuteOnes > 9) {
minuteOnes = minuteOnes - 10;
minuteTens = minuteTens + 1;
}
seg.setDigit (0, 1, minuteTens, false);
seg.setDigit (0, 0, minuteOnes, false);
}
Ich verwende die LedControl-Library für die 7-Segment-Anzeige.
Die Anzeige ist die CC56-21EWA von Kingbright und das RTC-Modul ist von Sparkfun.
Kann mir jemand helfen? Im Internet habe ich bis jetzt noch keine Infos zu diesen Fehlern gefunden.
Vielen Dank
techniclover
Was ich schon geschafft habe:
-Auf der 7-Segment-Anzeige Zahlen darstellen
-Ausgabe der Zeit auf dem Seriellen Monitor
Was passiert wenn ich das zusammenfüge:
Die 7-Segment-Anzeige flackert. Die Segmente bilden keine Zahl.
LedControl seg = LedControl (11, 13, 7, 0);
würde ich global machen und nicht innerhalb loop definieren.
Da du nur max jede Sekunde eine neue Anzeige brauchst, mach mal in loop() zum Test ausnahmsweise ein delay(1000);rein. Dann kannst du auch Serial-Testausgaben einbauen und schnell genug mitlesen.
Generell würde ich nur verstandenen Code verwenden
Den Code habe ich verstanden. Ich verstehe blos nicht weshalb die Zeit nicht stabil bleibt. Könnte es an ungenügender Stromversorgung liegen?
Mit dem delay (1000); funktioniert es teilweise und teilweise nicht. Es blinkt nun einfach alle Sekunden.
void setup() {
/*
The MAX72XX is in power-saving mode on startup,
we have to do a wakeup call
*/
lc.shutdown(0,false);
/* Set the brightness to a medium values */
lc.setIntensity(0,8);
/* and clear the display */
lc.clearDisplay(0);
}
Das würde ich mal so übernehmen, also von loop nach setup bewegen.