Beim Coprozessor gibt es eine erweiterte Paritätsprüfung, es werden jetzt 59 Impulse gezählt. In der 5 Volt Variante des Anzeigemoduls sind jetzt weniger Variablen.
This commit is contained in:
@ -2,7 +2,7 @@
|
||||
Sekunden Timer ISR
|
||||
5 Volt Variante für Peripherie
|
||||
Datenempfang vom Coprozessor
|
||||
03.05.2025
|
||||
19.05.2025
|
||||
*/
|
||||
|
||||
#define bcdA 5 // D5
|
||||
@ -16,10 +16,6 @@
|
||||
|
||||
byte selectZiffer = 0;
|
||||
byte displayPosition = 0;
|
||||
volatile int dcf77MinuteEiner = 0;
|
||||
volatile int dcf77MinuteZehner = 0;
|
||||
volatile int dcf77HourEiner = 0;
|
||||
volatile int dcf77HourZehner = 0;
|
||||
volatile byte noSignalMinutenCounter = 0;
|
||||
volatile byte noSignalStundenCounter = 0;
|
||||
volatile byte einerStunden = 7;
|
||||
@ -27,7 +23,6 @@ volatile byte zehnerStunden = 1;
|
||||
volatile byte einerMinuten = 0;
|
||||
volatile byte zehnerMinuten = 1;
|
||||
volatile byte offlineCounter = 0;
|
||||
volatile bool parityStat = 0;
|
||||
|
||||
void setup() {
|
||||
pinMode(bcdA, OUTPUT);
|
||||
@ -38,7 +33,7 @@ void setup() {
|
||||
pinMode(displayPosition2, OUTPUT);
|
||||
pinMode(displayPosition3, OUTPUT);
|
||||
pinMode(displayPosition4, OUTPUT);
|
||||
|
||||
|
||||
|
||||
digitalWrite(bcdA, HIGH);
|
||||
digitalWrite(bcdB, HIGH);
|
||||
@ -48,54 +43,59 @@ void setup() {
|
||||
digitalWrite(displayPosition2, HIGH);
|
||||
digitalWrite(displayPosition3, HIGH);
|
||||
digitalWrite(displayPosition4, HIGH);
|
||||
|
||||
|
||||
Serial.begin(9600);
|
||||
delay(100);
|
||||
|
||||
// Timer1 setzen (1 Sekunde = 49911, zwei Sekunden = 34286)
|
||||
TCCR1A = 0x00;
|
||||
TCCR1B = (1<<CS12) | (1<<CS10);
|
||||
TIMSK1 = (1<<TOIE1);
|
||||
TCCR1B = (1 << CS12) | (1 << CS10);
|
||||
TIMSK1 = (1 << TOIE1);
|
||||
TCNT1 = 49911;
|
||||
|
||||
|
||||
}
|
||||
|
||||
ISR(TIMER1_OVF_vect){
|
||||
|
||||
ISR(TIMER1_OVF_vect) {
|
||||
|
||||
TCNT1 = 49911;
|
||||
offlineCounter++;
|
||||
|
||||
if (offlineCounter > 59){
|
||||
|
||||
|
||||
if (offlineCounter > 59) {
|
||||
|
||||
offlineCounter = 0;
|
||||
|
||||
if (parityStat == 0) {
|
||||
byte m = zehnerMinuten * 10;
|
||||
noSignalMinutenCounter = m + einerMinuten;
|
||||
byte s = zehnerStunden * 10;
|
||||
noSignalStundenCounter = s + einerStunden;
|
||||
/***********************************************************************
|
||||
|
||||
noSignalMinutenCounter++;
|
||||
Die einzelnen Ziffern der vier Variablen werden in
|
||||
dekadische Zahlen umgewandelt, damit sie vom lokalen
|
||||
Minutentakt weiter gezählt werden können
|
||||
|
||||
if (noSignalMinutenCounter > 59) {
|
||||
noSignalMinutenCounter = 0;
|
||||
noSignalStundenCounter++;
|
||||
if (noSignalStundenCounter > 23) {
|
||||
noSignalStundenCounter = 0;
|
||||
}
|
||||
***********************************************************************/
|
||||
byte m = zehnerMinuten * 10;
|
||||
noSignalMinutenCounter = m + einerMinuten;
|
||||
byte s = zehnerStunden * 10;
|
||||
noSignalStundenCounter = s + einerStunden;
|
||||
|
||||
noSignalMinutenCounter++;
|
||||
|
||||
if (noSignalMinutenCounter > 59) {
|
||||
noSignalMinutenCounter = 0;
|
||||
noSignalStundenCounter++;
|
||||
if (noSignalStundenCounter > 23) {
|
||||
noSignalStundenCounter = 0;
|
||||
}
|
||||
einerStunden = noSignalStundenCounter % 10; // zerlegt die Zahl in Einer
|
||||
zehnerStunden = (noSignalStundenCounter / 10) % 10; // und Zehner
|
||||
einerMinuten = noSignalMinutenCounter % 10;
|
||||
zehnerMinuten = (noSignalMinutenCounter / 10) % 10;
|
||||
}
|
||||
/***********************************************************************
|
||||
|
||||
else {
|
||||
einerMinuten = dcf77MinuteEiner;
|
||||
zehnerMinuten = dcf77MinuteZehner;
|
||||
einerStunden = dcf77HourEiner;
|
||||
zehnerStunden = dcf77HourZehner;
|
||||
parityStat = 0;
|
||||
}
|
||||
zerlegt die dekadische Zahl wieder in einzelne Ziffern
|
||||
für die Anzeige
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
einerStunden = noSignalStundenCounter % 10;
|
||||
zehnerStunden = (noSignalStundenCounter / 10) % 10;
|
||||
einerMinuten = noSignalMinutenCounter % 10;
|
||||
zehnerMinuten = (noSignalMinutenCounter / 10) % 10;
|
||||
}
|
||||
}
|
||||
|
||||
@ -109,7 +109,7 @@ void initDisplay() {
|
||||
digitalWrite(displayPosition1, HIGH);
|
||||
digitalWrite(displayPosition2, LOW);
|
||||
digitalWrite(displayPosition3, LOW);
|
||||
digitalWrite(displayPosition4, LOW);
|
||||
digitalWrite(displayPosition4, LOW);
|
||||
|
||||
if (zehnerStunden == 0) {
|
||||
selectZiffer = 0;
|
||||
@ -126,7 +126,7 @@ void initDisplay() {
|
||||
digitalWrite(displayPosition1, LOW);
|
||||
digitalWrite(displayPosition2, HIGH);
|
||||
digitalWrite(displayPosition3, LOW);
|
||||
digitalWrite(displayPosition4, LOW);
|
||||
digitalWrite(displayPosition4, LOW);
|
||||
|
||||
if (einerStunden == 0) {
|
||||
selectZiffer = 0;
|
||||
@ -164,9 +164,9 @@ void initDisplay() {
|
||||
digitalWrite(displayPosition1, LOW);
|
||||
digitalWrite(displayPosition2, LOW);
|
||||
digitalWrite(displayPosition3, HIGH);
|
||||
digitalWrite(displayPosition4, LOW);
|
||||
digitalWrite(displayPosition4, LOW);
|
||||
|
||||
|
||||
|
||||
if (zehnerMinuten == 0) {
|
||||
selectZiffer = 0;
|
||||
}
|
||||
@ -192,9 +192,9 @@ void initDisplay() {
|
||||
digitalWrite(displayPosition1, LOW);
|
||||
digitalWrite(displayPosition2, LOW);
|
||||
digitalWrite(displayPosition3, LOW);
|
||||
digitalWrite(displayPosition4, HIGH);
|
||||
digitalWrite(displayPosition4, HIGH);
|
||||
|
||||
|
||||
|
||||
if (einerMinuten == 0) {
|
||||
selectZiffer = 0;
|
||||
}
|
||||
@ -318,16 +318,15 @@ noTime: {}
|
||||
}
|
||||
|
||||
void loop() {
|
||||
if (Serial.available()){
|
||||
dcf77HourZehner = Serial.parseInt();
|
||||
dcf77HourEiner = Serial.parseInt();
|
||||
dcf77MinuteZehner = Serial.parseInt();
|
||||
dcf77MinuteEiner = Serial.parseInt();
|
||||
if (Serial.available()) {
|
||||
zehnerStunden = Serial.parseInt();
|
||||
einerStunden = Serial.parseInt();
|
||||
zehnerMinuten = Serial.parseInt();
|
||||
einerMinuten = Serial.parseInt();
|
||||
String(DCFzeit) = Serial.readString();
|
||||
|
||||
parityStat = 1;
|
||||
|
||||
}
|
||||
|
||||
|
||||
initDisplay(); // zeigt die Uhrzeit an
|
||||
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user