Wortuhr

Hallo miteinander,

ich habe mich vor einigen Wochen schon einmal an euch gewendet bzgl. des SPI Bus.
Nach langem hin und her habe ich es nun endlich geschafft mithilfe des SPI Bus meine LED zum leuchten zu bringen.

Jetzt möchte ich die richtige Uhrzeit anzeigen lassen, allerdings weiß ich nicht genau wie ich am besten die Uhrzeit zähle und dann die jeweiligen Bits sende.
Wenn ich für jede Minute 3Byte’s übertrage bekomme ich ja am Ende eine riesen Datei raus.

Suche also dringend Lösungsansätze.

Hier mein Sketch mittels Timer:

// inslude the SPI library:
#include <SPI.h>
#include "TimerOne.h"


int channel1;
int channel2;
int channel3;
int hrs=10, mins=0, secs=0;
volatile int tc=0;
void update_time() {    tc++;}


// set pin 10 as the slave select for the digital pot:
const int slaveSelectPin = 10;

void setup() {
// set the slaveSelectPin as an output:
pinMode(slaveSelectPin, OUTPUT);
Timer1.initialize(1000000);
Timer1.attachInterrupt (update_time);
// initialize SPI:
SPI.begin();
}

void loop() {

    channel1 = 0b00000100;
    channel2 = 0b00000001;
    channel3 = 0b00000011;
    digitalPotWrite(channel1, channel2, channel3);
    delay(100);
  }

void digitalPotWrite(int channel1, int channel2, int channel3) {
// take the SS pin low to select the chip:
digitalWrite(slaveSelectPin, LOW);
//  send in the address and value via SPI:
SPI.transfer(channel1);
SPI.transfer(channel2);
SPI.transfer(channel3);
// take the SS pin high to de-select the chip:
digitalWrite(slaveSelectPin, HIGH);
}

Bitte schließe Deinen Code in Code Tags ein (edit, Code selektieren, </> klicken).

Ich sehe keine Datei in Deinem Code, die Bits flutschen über die Leitung zum Empfänger, gespeichert wird da garnichts dauerhaft.

Bis jetzt macht Dein Code ja noch garnichts, tc wird nicht verwendet und die channel werden nicht geändert. Was soll denn wann passieren?

Definiere dir doch einefach für jedes Wort das Byte Muster das denke ich ist am besten. Aber so genau sehe ich das Problem noch nicht.
Gruß
DerDani

Hallo, danke für eure Tipps.

mittlerweile läuft die Uhr, habe 2 Arrays gemacht die ich zusammen rechne.

Allerdings habe ich nun das Problem, das mein Timer1 nach einer gewissen Zeit einfach stehen bleibt und ich ihn nicht zurücksetzen kann.
Habe schon mit TimerOne.resume(), oder TimerOne.Restart() versucht, allerdings startet er mit diesen Befehlen gar nicht mehr.

Gibt es noch andere Wege um den Timer neu zu starten?

Vielen dank schon mal vorab.

Ich finde den Ansatz falsch einen Timer für die uhrzeit nehmen zu wollen. Nimm für die Uhrzeit eine RTC modul zb mit einem Ds3231.

Grüße Uwe