INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
RTC und 7 Segmentanzeige
25.12.2020, 17:48
Beitrag #1
RTC und 7 Segmentanzeige
Hallo zusammen,
hier im Forum habe ich einen schönen Sketch für eine Uhr mit einer 7-Segmentanzeige gefunden.
Habe an meinem Arduino Uno, 2 Stück der 7-Segmentanzeigen angeschlossen, welche über Schieberegister auch schon erfolgreich angesteuert werden (hochzählen von 0 bis 99). Vor ein paar Tagen habe ich eine RTC (DS1307) initialisiert und wollte nun mit den folgenden Sketch verwenden. Leider bleibt die Anzeige nach dem Hochladen aus Huh
Als Schieberegister benutze ich zwei TPIC6B595 (seriell zusammengeschaltet), dessen Drains sind dann mit den entsprechenden Pins der beiden Anzeigen (Common Anode) geschaltet. Ich habe nur zwei von den 7-Segentanzeigen und möchte zuerst "Stunden" und danach die "Minuten" anzeigen lassen.
Bei diesem Sketch wird ja der Teil für "Stunde" und "Minute", von der RTC einfach mit ShiftOut ans Schieberegister abgegeben. Aber irgendwas muss ich falsch machen, da die Anzeige aus bleibt.
Wenn ich meinen Sketch zum Hochzählen lade, sehe ich, dass die Verkabelung im Prinzip korrekt ist...
Wäre über jeden Tipp sehr dankbar und wünsche schon mal ein paar schöne Festtage!

Hier der Sketch, den ich verwende:
Code:
#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

int serin = 6;  //Serial Data Input
int rck = 4;    //Register Clock
int srck = 5;   //Shift Register Clock
int g = 3;      //Output Enable (active low)
int srclr = 2;  //Shift Register Clear (active low)

byte dec_digits[] = {0b00111111,0b00000110,0b01011011,0b01001111,0b01100110,0b01101101,0b01111101,0b​​00000111,0b01111111,0b01101111};

void setup() {
  
   Wire.begin();
  RTC.begin();
  if (! RTC.isrunning()) {
    
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
  
  pinMode(rck, OUTPUT);
  pinMode(srck, OUTPUT);
  pinMode(serin, OUTPUT);

  digitalWrite(g, LOW);
  digitalWrite(srclr, HIGH);
  }

void loop() {
  DateTime now = RTC.now();
  int thehour = now.hour();
    
  int hour_tens = thehour / 10;
  int hour_ones = thehour % 10;
  int minute_tens = now.minute() / 10;
  int minute_ones = now.minute() % 10;

  digitalWrite(rck, LOW);
  shiftOut(serin, srck, MSBFIRST, dec_digits[hour_ones]);
  shiftOut(serin, srck, MSBFIRST, dec_digits[hour_tens]);
  digitalWrite(rck, HIGH);
  delay(1000);

   digitalWrite(rck, LOW);
  shiftOut(serin, srck, MSBFIRST, dec_digits[minute_ones]);
  shiftOut(serin, srck, MSBFIRST, dec_digits[minute_tens]);
  digitalWrite(rck, HIGH);
  delay(1000);

}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.12.2020, 17:55
Beitrag #2
RE: RTC und 7 Segmentanzeige
Darauf hatte ich Dir bereits geantwortet, dass Du uns doch mal den funktionierenden Sketch zum Hochzählen zeigen sollst. Auf dem könnte man ja aufbauen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.12.2020, 18:02
Beitrag #3
RE: RTC und 7 Segmentanzeige
(25.12.2020 17:55)Tommy56 schrieb:  Darauf hatte ich Dir bereits geantwortet, dass Du uns doch mal den funktionierenden Sketch zum Hochzählen zeigen sollst. Auf dem könnte man ja aufbauen.

Gruß Tommy
Ok, sorry. Habe ich übersehen.
Mit diesem Sketch funktioniert meine Anzeige:

Code:
byte off    =0b00000000;
byte sero   =0b00111111;
byte one    =0b00000110;
byte two    =0b01011011;
byte three  =0b01001111;
byte four   =0b01100110;
byte five   =0b01101101;
byte six    =0b01111101;
byte seven  =0b00000111;
byte eight  =0b01111111;
byte nine   =0b01101111;

byte digitone[10]={sero,one,two,three,four,five,six,seven,eight,nine};
byte digittwo[10]={sero,one,two,three,four,five,six,seven,eight,nine};

#define serin 6    
#define srclr 2  
#define g 3      
#define rclk 4    
#define srclk 5  


void setup() {
   for (int j=2; j<=11; j++) {
    pinMode(j, OUTPUT);  
      for (int i=2; i<=11; i++) {
    pinMode(j, OUTPUT);
      }  
  }
  digitalWrite(g, LOW);
  digitalWrite(srclr, HIGH);
}

void loop() {
   for(int i=0; i<10; i++){
    for(int j=0; j<10; j++){
    digitalWrite(rclk, LOW);
    shiftOut(serin, srclk, MSBFIRST, digitone[j]);
    shiftOut(serin, srclk, MSBFIRST, digittwo[i]);
    digitalWrite(rclk, HIGH);
    delay(1000);
    }
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.12.2020, 18:19
Beitrag #4
RE: RTC und 7 Segmentanzeige
(25.12.2020 18:02)ellecks schrieb:  
(25.12.2020 17:55)Tommy56 schrieb:  Darauf hatte ich Dir bereits geantwortet, dass Du uns doch mal den funktionierenden Sketch zum Hochzählen zeigen sollst. Auf dem könnte man ja aufbauen.

Gruß Tommy
Ok, sorry. Habe ich übersehen.
Mit diesem Sketch funktioniert meine Anzeige:

Code:
byte off    =0b00000000;  // Brauchst Du das?

const byte digit[] = {0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110,
                      0b01101101, 0b01111101, 0b01111101, 0b01111111, 0b01101111};

const byte serin = 6;    
const byte srclr = 2;  
const byte  g = 3;      
const byte rclk = 4;    
const byte srclk = 5;  

void setup() {
   for (int j=2; j<=11; j++) {
      pinMode(j, OUTPUT);  
   }  
  digitalWrite(g, LOW);
  digitalWrite(srclr, HIGH);
}

void printByte(byte first, byte second) {
    digitalWrite(rclk, LOW);
    shiftOut(serin, srclk, MSBFIRST, digit[first]);
    shiftOut(serin, srclk, MSBFIRST, digit[second]);
    digitalWrite(rclk, HIGH);
}

void loop() {
   for(int i=0; i<10; i++){
    for(int j=0; j<10; j++){
      printByte(j,i);
      delay(1000);
    }
  }
}

Ich habe das Ganze mal etwas umgeschrieben, damit wir eine Funktion zur Ausgabe der beiden Digits haben. Es kann sein, dass first und second noch getauscht werden müssen. Diese Funktion könntest Du dann nutzen, um die Ziffern in der Uhr auszugeben.

Teste mal bitte ob es so noch funktioniert.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.12.2020, 18:55
Beitrag #5
RE: RTC und 7 Segmentanzeige
Danke Tommy für deine Hilfe.
Habe deinen Sketch geladen und er funktioniert noch. Blush

"byte off =0b00000000;" wird eigentlich nicht benötigt...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.12.2020, 19:05
Beitrag #6
RE: RTC und 7 Segmentanzeige
Dann probieren wir damit mal weiter:
Code:
#include <Wire.h>
#include "RTClib.h"

const byte digit[] = {0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110,
                      0b01101101, 0b01111101, 0b01111101, 0b01111111, 0b01101111};

const byte serin = 6;    
const byte srclr = 2;  
const byte  g = 3;      
const byte rclk = 4;    
const byte srclk = 5;  

RTC_DS1307 RTC;

void setup() {
  Wire.begin();
  RTC.begin();
  if (! RTC.isrunning()) {
    
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
  for (int j=2; j<=11; j++) {
    pinMode(j, OUTPUT);  
  }  
  digitalWrite(g, LOW);
  digitalWrite(srclr, HIGH);

}

void printByte(byte first, byte second) {
    digitalWrite(rclk, LOW);
    shiftOut(serin, srclk, MSBFIRST, digit[first]);
    shiftOut(serin, srclk, MSBFIRST, digit[second]);
    digitalWrite(rclk, HIGH);
}

void loop() {
  DateTime now = RTC.now();
    
  int hour_tens = now.hour() / 10;
  int hour_ones = now.hour() % 10;
  int minute_tens = now.minute() / 10;
  int minute_ones = now.minute() % 10;
  printByte(hour_tens,hour_ones);
  delay(1000);
  printByte(minute_tens,minute_ones);
  delay(1000);
}

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.12.2020, 20:59
Beitrag #7
RE: RTC und 7 Segmentanzeige
Tommy, besten Dank !
Es funktioniert. Big Grin

Die Zahlen sind nur noch vertauscht.
Also anstatt 20:56 wird angezeigt 02:65...
Aber das ist wirklich nur noch eine Kleinigkeit und das sollte ich hinkriegen.

Tausend dank schon mal dafür!

Grüße
Markus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.12.2020, 21:17
Beitrag #8
RE: RTC und 7 Segmentanzeige
Schön, dass es funktioniert. Da ich es nicht testen kann, musste ich die 1. und 2. Stelle schätzen. Aber das bekommst Du allein gedreht.

Danke für die Rückmeldung.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  7 Segmentanzeige und 20er Ledbar synchronisieren Thor Wallhall 10 546 07.02.2021 16:06
Letzter Beitrag: Corvus
  Uhr mit 7 Segmentanzeige ottii50 18 5.761 24.12.2020 19:20
Letzter Beitrag: Bitklopfer
  8x7 Segmentanzeige, Dezimalpunkt "in Zahl" Marco.R 2 1.616 18.12.2018 16:35
Letzter Beitrag: Marco.R
  DHT22 min max Temperatur 7-Segmentanzeige bastelbert 50 15.571 14.01.2017 11:46
Letzter Beitrag: Tommy56
Smile Datum Anzeige mit 7 Segmentanzeige ottii50 11 4.530 16.05.2016 19:12
Letzter Beitrag: Mathias
  Funkthermometer mit 7 Segmentanzeige-bitte um Hilfe ottii50 45 13.608 27.07.2015 14:02
Letzter Beitrag: ottii50
  Hilfe bei 7-Segmentanzeige und Shift-Register knut 4 3.914 01.06.2014 15:58
Letzter Beitrag: knut

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste