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
7 Segmentanzeige und 20er Ledbar synchronisieren
07.02.2021, 09:21
Beitrag #1
7 Segmentanzeige und 20er Ledbar synchronisieren
Guten Morgen,
ich mal wieder....

dieser Thread wir etwas länger.....

Ich möchte 7 Sequenzen der SvenSeg mit 7 Sequenzen der 20er Ledbar synchron ablaufen lassen.....

hier erstmal Bilder wie es zum Schluss aussehen soll

   
   
   
   
   
   
   

beim ersten Sketch für die 7 Segment Anzeige hat mir damals 2018 Tommy schon sehr weit geholfen und der läuft auch hervorragend....

Code:
#include <TimerOne.h>

const byte Anzeige[] = {A0,A1,A2,A3,A4};
const byte Segment[] = {2,3,4,5,6,7,8};

const byte ausgabe[] = {0x7f,0x7f,0x7f,0x7f,0x7f,
                        0x5e,0x3e,0x79,0x73,0x20,
                        0x75,0x79,0x57,0x1f,0x70,
                        0x42,0x24,0x09,0x30,0x41,
                        0x5e,0x3e,0x79,0x73,0x20,
                        0x76,0x6d,0x5b,0x67,0x30,
                        0x42,0x24,0x09,0x30,0x41};

//Welche Zeile
byte nummer = 1;                        


void setup() {
  // put your setup code here, to run once:
//Stellen (Kathode)
for (byte tmp = 0; tmp<5; tmp++){
  pinMode(Anzeige[tmp], OUTPUT);
  digitalWrite(Anzeige[tmp], HIGH);
}
//Segmente (Anode)
for (byte tmp = 0; tmp<7; tmp++){
  pinMode(Segment[tmp], OUTPUT);
  digitalWrite(Segment[tmp], LOW);
}
}

// Ausgabe einer Zeile aus ausgabe[]
void zeile(byte num){
  byte wert;
  // 5 Anzeigen
  for(byte anz = 0; anz < 5; anz++){
    //Anzeige ein
    digitalWrite(Anzeige[anz], LOW);
    //Ausgabewert (Zeile) + Spalte
    wert = ausgabe[5*num+anz];
    // 7 Segmente
    for(byte seg = 0; seg<7; seg++){
      digitalWrite(Segment[seg], bitRead(wert,seg));
    }
    //Anzeige aus
    digitalWrite(Anzeige[anz], HIGH);
    //Segmente aus
    for(byte seg = 0; seg<7; seg++){
      digitalWrite(Segment[seg],0);
    }
  }
}
void loop() {
  // put your main code here, to run repeatedly:
static uint8_t nummer = 0;
static uint32_t lastMillis = 0;
uint32_t aktMillis = millis();
zeile(nummer);
if (aktMillis - lastMillis >=1000){
  nummer++;
  if (nummer > 7) nummer = 0;
  lastMillis = aktMillis;
}
}


nun habe ich für die 20er Ledbar einen eigenen kleinen einfachen Sketch geschrieben...

Code:
//Pin an dem jeweils 4Leds hängen
int s1 = 2;
int s2 = 4;
int s3 = 6;
int s4 = 8;
int s5 = 10;

//Zeit für delay
int p = 1000;


void setup() {
  // put your setup code here, to run once:
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(s4, OUTPUT);
pinMode(s5, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  //Schaltet die 4er Ledblöcke ein und aus mit 1sec delay
digitalWrite(s4, HIGH);
delay(p);
digitalWrite(s4, LOW);
digitalWrite(s3, HIGH);
delay(p);
digitalWrite(s3, LOW);
digitalWrite(s5, HIGH);
delay(p);
digitalWrite(s5, LOW);
delay(p);
digitalWrite(s2, HIGH);
delay(p);
digitalWrite(s2, LOW);
digitalWrite(s1, HIGH);
delay(p);
digitalWrite(s1, LOW);
delay(p);
}

dieser läuft auch einwandfrei......nur eben nach ca 4 bis 5 Sequenzen hängt dieser hinterher und die beiden Anzeigen laufen nicht Synchron.....

Ich habe dann versucht die Ledbar in der gleichen Form wie den Sketch für die SevenSeg zu schreiben, mit dem Erfolg das es nicht wirklich funktioniert......

Code:
#include <TimerOne.h>

const byte ledbar[] = {2,4,6,8,10};

const byte sequenz[] = {0,0,0,1,0,
                        0,0,1,0,0,
                        0,0,0,0,1,
                        0,0,0,0,0,
                        0,1,0,0,0,
                        1,0,0,0,0,
                        0,0,0,0,0,};
                        
//Welche Zeile
byte zeile = 1;

void setup() {
  // put your setup code here, to run once:
//ledbarsegment
for (byte tmp = 0; tmp<5; tmp++){
  pinMode(ledbar[tmp], OUTPUT);
  digitalWrite(ledbar[tmp], LOW);
}
}

//Ausgabe einer Zeile aus ledbar[]
void seq(byte num){
  byte wert;
  //5 Sequenzen
  for(byte anz = 0; anz < 5; anz++){
    //Anzeige ein
    digitalWrite(ledbar[anz], HIGH);
    //Ausgabe der Zeile
    wert = sequenz[5*anz];
  
  //Anzeige aus
  digitalWrite(ledbar[anz], LOW);
  }
}
void loop() {
  // put your main code here, to run repeatedly:
static uint8_t nummer = 0;
static uint32_t lastMillis = 0;
uint32_t aktMillis = millis();
seq(nummer);
if (aktMillis -lastMillis >=1000){
  nummer++;
  if (nummer > 7) nummer = 0;
  lastMillis = aktMillis;
}
}

nun meine Frage.......wie bekomme ich das am besten Synchron zum laufen und am liebsten hätte ich die Ledbar in den Sketch der SevenSeg integriert so das ich das alles mit einem ATmega328P-PU laufen lassen kann, im Moment benutze ich 2 als Standalones.....

Vielen Dank schon mal im voraus für jegliche Hilfe

Gruß

Thorsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.02.2021, 10:40
Beitrag #2
RE: 7 Segmentanzeige und 20er Ledbar synchronisieren
Ohne mich jetzt durch den kompletten Code zu wühlen. Du steuerst die 7-Segment-Anzeige über nummer. Dann sollte nummer auch die Steuervariable für die Streifen sein.
7-Segment-Ausgabe, Streifen-Ausgebe und dann die gemeinsamen Pins laufen lassen.
Ist die Überschneidung der Pins zwischen 7-Segment- und Streifen so planmäßig?

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
07.02.2021, 10:54
Beitrag #3
RE: 7 Segmentanzeige und 20er Ledbar synchronisieren
(07.02.2021 10:40)Tommy56 schrieb:  Ohne mich jetzt durch den kompletten Code zu wühlen. Du steuerst die 7-Segment-Anzeige über nummer. Dann sollte nummer auch die Steuervariable für die Streifen sein.
7-Segment-Ausgabe, Streifen-Ausgebe und dann die gemeinsamen Pins laufen lassen.
Ist die Überschneidung der Pins zwischen 7-Segment- und Streifen so planmäßig?

Gruß Tommy

Um das nochmal besser zu erklären.....im Moment laufen die sevenseg separat über einen ATmega328P-PU und die ledbar läuft eigenständig über einen eigenen ATmega 328P-PU
Der dritte sketch läuft nicht....das ist ein Versuch.....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.02.2021, 10:57
Beitrag #4
RE: 7 Segmentanzeige und 20er Ledbar synchronisieren
Die ledbar sollte dann eigene Pins bekommen....am ATmega der jetzt die sevenseg steuert....das wäre das Optimum....
Wenn es einfacher ist die ledbar über den 2ten atmega zu steuern ist das auch in Ordnung....nur muss 7ch die dann synchron bekommen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.02.2021, 11:02
Beitrag #5
RE: 7 Segmentanzeige und 20er Ledbar synchronisieren
Dann musst Du von dem mit den 7-Segment die Zahl an den anderen übertragen, z.B. über I2C. Auch wenn das andere Prozessoren sind, das Prinzip bleibt gleich.

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
07.02.2021, 11:16
Beitrag #6
RE: 7 Segmentanzeige und 20er Ledbar synchronisieren
Das heisst ich muss dem 2ten atmega eigentlich nur den takt vom ersten geben.....damit de 2te weißt wann er die Pins auf high oder low setzen muss...klingt jetzt theoretisch ganz einfach....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.02.2021, 11:25
Beitrag #7
RE: 7 Segmentanzeige und 20er Ledbar synchronisieren
Es müsste doch eigentlich einfach sein....dem ATmega zu sagen....schalte die angelegten PINs in der Zeilenfolge auf den angegebenen Status und das im Takt des ATmega der die 7 Segment steuert......

das ist theoretisch bei mir angekommen....

nur die Umsetzung...... Huh
Code:
#include <TimerOne.h>

const byte ledbar[] = {2,4,6,8,10};

const byte sequenz[] = {0,0,0,1,0,
                        0,0,1,0,0,
                        0,0,0,0,1,
                        0,0,0,0,0,
                        0,1,0,0,0,
                        1,0,0,0,0,
                        0,0,0,0,0,};

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.02.2021, 12:17
Beitrag #8
RE: 7 Segmentanzeige und 20er Ledbar synchronisieren
würde gerne wissen ob das auch gehen würde.....

wenn ich die Pins für die ledbar am 7 segment steuernden ATmega anschliesse und als OUTPUT setze.....müsste ich diese doch nur noch irgendwie in die Loop mit reinbekommen das die PINs dann mit den 7Segmentzeilen gleichzeitig auf HIGH oder LOW gesetzt werden, so wie das im Array sequenz steht....

oder liege ich da total falsch....

Code:
#include <TimerOne.h>


//Pinbelegung der 7 Segmentanzeigen
const byte Anzeige[] = {A0,A1,A2,A3,A4};
const byte Segment[] = {2,3,4,5,6,7,8};

//Zeichenreihenfolge der 7 Segementanzeige
const byte ausgabe[] = {0x7f,0x7f,0x7f,0x7f,0x7f,
                        0x5e,0x3e,0x79,0x73,0x20,
                        0x75,0x79,0x57,0x1f,0x70,
                        0x42,0x24,0x09,0x30,0x41,
                        0x5e,0x3e,0x79,0x73,0x20,
                        0x76,0x6d,0x5b,0x67,0x30,
                        0x42,0x24,0x09,0x30,0x41};

//Pinbelegung der 20er ledbar, pro Pin 4leds
const byte ledbar[] = {9,10,11,12,13);                        

//pro sequenz sollen die Pins so ein-(1) oder aus-(0) geschaltet sein.
const byte sequenz[] = {0,0,0,1,0,
                        0,0,1,0,0,
                        0,0,0,0,1,
                        0,0,0,0,0,
                        0,1,0,0,0,
                        1,0,0,0,0,
                        0,0,0,0,0};                      

//Welche Zeile
byte nummer = 1;                        


void setup() {
  // put your setup code here, to run once:
//Stellen (Kathode)
for (byte tmp = 0; tmp<5; tmp++){
  pinMode(Anzeige[tmp], OUTPUT);
  digitalWrite(Anzeige[tmp], HIGH);
}
//Segmente (Anode)
for (byte tmp = 0; tmp<7; tmp++){
  pinMode(Segment[tmp], OUTPUT);
  digitalWrite(Segment[tmp], LOW);
}
//Ledbar Pins als OUTPUT
for (byte tmp = 0; tmp<5; tmp++){
  pinMode(sequenz[tmp], OUTPUT);
  digitalWrite(sequenz[tmp], LOW);
}
}

// Ausgabe einer Zeile aus ausgabe[]
void zeile(byte num){
  byte wert;
  // 5 Anzeigen
  for(byte anz = 0; anz < 5; anz++){
    //Anzeige ein
    digitalWrite(Anzeige[anz], LOW);
    //Ausgabewert (Zeile) + Spalte
    wert = ausgabe[5*num+anz];
    // 7 Segmente
    for(byte seg = 0; seg<7; seg++){
      digitalWrite(Segment[seg], bitRead(wert,seg));
    }
    //Anzeige aus
    digitalWrite(Anzeige[anz], HIGH);
    //Segmente aus
    for(byte seg = 0; seg<7; seg++){
      digitalWrite(Segment[seg],0);
    }
  }
}
void loop() {
  // put your main code here, to run repeatedly:
static uint8_t nummer = 0;
static uint32_t lastMillis = 0;
uint32_t aktMillis = millis();
zeile(nummer);
if (aktMillis - lastMillis >=1000){
  nummer++;
  if (nummer > 7) nummer = 0;
  lastMillis = aktMillis;
}
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  RTC und 7 Segmentanzeige ellecks 7 465 25.12.2020 21:17
Letzter Beitrag: Tommy56
  Uhr mit 7 Segmentanzeige ottii50 18 5.761 24.12.2020 19:20
Letzter Beitrag: Bitklopfer
  Arduino mit NTP auf Zehntelsekunden synchronisieren? pcegli82 2 542 27.10.2020 23:37
Letzter Beitrag: GuaAck
  2 Schrittmotore synchronisieren WF55 15 2.073 22.05.2020 19:03
Letzter Beitrag: WF55
  Multiple Serielle Bytes mit Startmarke synchronisieren, was mache ich falsch Mosi 8 2.613 20.12.2018 18:33
Letzter Beitrag: Mosi
  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