Multiplex 7Segment, eine Anzeige flackert, andere leuchtet richtig

OP #2016593
Lesenswert?
• ▲
▼
Hallo!

Ich möchte gern zwei 7-Segment-Anzeigen per Multiplex ansteuern.
Dabei soll eine Anzeige eine Null ausgeben, während die andere von 0 bis 
9 hochzählt.
Das Problem ist aber nun, dass die eine Anzeige (die gibt null aus) 
während des weiterschalten immer stark flackert. D.h. es kommt keine 
konstant leuchtende Anzeige zum vorschein.

Die letzte While-Schleife scheint da das problem zu sein.

Vieleicht könnt ihr mir helfen?

Danke schon im voraus

Hier der C-Code:
1
//gemeinsame Anode
2

3
#include <avr/io.h>
4
#include <util/delay.h>    // definiert _delay_ms() 
5

6
void delay_ms(uint16_t);
7
void digit (uint8_t, uint8_t);
8
int main (void);
9

10
const int8_t numbers [10] =
11
{
12
//    1gfedcba
13
  0b11000000,    // 0
14
  0b11111001,    // 1
15
  0b10100100,    // 2
16
  0b10110000,    // 3
17
  0b10011001,    // 4
18
  0b10010010,    // 5
19
  0b10000010,    // 6
20
  0b11111000,    // 7
21
  0b10000000,    // 8
22
  0b10010000,    // 9
23
};
24

25
// wartet ms Millisekunden
26
void delay_ms (uint16_t ms)
27
{
28
  for(uint16_t t=0; t<=ms; t++)
29
  _delay_ms(1);
30
}
31

32
void digit (uint8_t wert, uint8_t pin)
33
{
34
  PORTC |= (1 << PC0) | (1 << PC1);          // 0..1 High = Digits aus
35
  PORTD = numbers[wert];                // Zahl ausgeben
36
  PORTC &= ~(1 << pin);                // Low = entsprechendes Digit an
37
  _delay_ms (5);                    // Multiplex-Zeit
38
}
39

40
int main()
41
{
42
  DDRD = 0xFF;                    // PortB alles als Ausgang
43
  DDRC |= (1 << DDC0) | (1 << DDC1);          // PortC 0..1 als Ausgang
44
  
45
  while (1)  // Endlos
46
  {
47
    digit (0, PC0);
48
    digit (0, PC1);
49
    _delay_ms(2000);
50
    
51
    digit (0, PC0);
52
    digit (1, PC1);
53
    _delay_ms(2000);
54
    
55
    digit (0, PC0);
56
    digit (2, PC1);
57
    _delay_ms(2000);
58

59
    digit (0, PC0);
60
    digit (3, PC1);
61
    _delay_ms(2000);
62
  }
63
  return 0;
64
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.