Desöfteren habe ich bereits Prjekte mit dem R8C Elektor Board
realisiert, welche bisher auch einwandfrei funktionieren.
Jetzt stehe ich jedoch vor einem Problem, das mich schon mehrere Tage
beschäftigt.
Im Grunde soll das Projekt eine simple Uhr darstellen, die mithilfe von
vier 7-Segmentanzeigen die Uhrzeit anzeigen soll (Stunde und Minute).
Nun hier mal die grundlegenden, dafür zuständigen Codeausschnitte:
Variablen:
1 | #define SEG1_sperren p0_4
|
2 | #define SEG2_sperren p0_5
|
3 | #define SEG3_sperren p0_6
|
4 | #define SEG4_sperren p0_7
|
5 |
|
6 | int Stunde_Zehner = 0;
|
7 | int Stunde_Einer = 0;
|
8 | int Minute_Zehner = 0;
|
9 | int Minute_Einer = 0;
|
10 | int Sekunde_Zehner = 0;
|
11 | int Sekunde_Einer = 0;
|
12 | int Sekunde = 0;
|
13 |
|
14 | int SEG1_neu = 0;
|
15 | int SEG1_alt = 0;
|
16 | int SEG2_neu = 0;
|
17 | int SEG2_alt = 0;
|
18 | int SEG3_neu = 0;
|
19 | int SEG3_alt = 0;
|
20 | int SEG4_neu = 0;
|
21 | int SEG4_alt = 0;
|
Funktionen:
1 | void SEG1_Ausgabe(int Wert1)
|
2 | {
|
3 | SEG1_neu = Wert1;
|
4 |
|
5 | if(SEG1_neu != SEG1_alt)
|
6 | {
|
7 | SEG1_sperren = FALSE; // Sperre SEG1 aufheben
|
8 | BCD_Ausgabe(Wert1); // BCD Wert ausgeben
|
9 | SEG1_sperren = TRUE; // Sperre SEG1 aktivieren
|
10 |
|
11 | SEG1_alt = Wert1;
|
12 | }
|
13 | }
|
14 |
|
15 | void SEG2_Ausgabe(int Wert2)
|
16 | {
|
17 | SEG2_neu = Wert2;
|
18 |
|
19 | if(SEG2_neu != SEG2_alt)
|
20 | {
|
21 | SEG2_sperren = FALSE;
|
22 | BCD_Ausgabe(Wert2);
|
23 | SEG2_sperren = TRUE;
|
24 |
|
25 | SEG2_alt = Wert2;
|
26 | }
|
27 | }
|
28 |
|
29 | void SEG3_Ausgabe(int Wert3)
|
30 | {
|
31 | SEG3_neu = Wert3;
|
32 |
|
33 | if(SEG3_neu != SEG3_alt)
|
34 | {
|
35 | SEG3_sperren = FALSE;
|
36 | BCD_Ausgabe(Wert3);
|
37 | SEG3_sperren = TRUE;
|
38 |
|
39 | SEG3_alt = Wert3;
|
40 | }
|
41 | }
|
42 |
|
43 | void SEG4_Ausgabe(int Wert4)
|
44 | {
|
45 | SEG4_neu = Wert4;
|
46 |
|
47 | if(SEG4_neu != SEG4_alt)
|
48 | {
|
49 | SEG4_sperren = FALSE;
|
50 | BCD_Ausgabe(Wert4);
|
51 | SEG4_sperren = TRUE;
|
52 |
|
53 | SEG4_alt = Wert4;
|
54 | }
|
55 | }
|
Wenn ich nun in der Main folgendes aufrufe...
1 | while(1)
|
2 | {
|
3 | SEG1_Ausgabe(1);
|
4 | SEG2_Ausgabe(2);
|
5 | SEG3_Ausgabe(3);
|
6 | SEG4_Ausgabe(4);
|
7 | }
|
...funktioniert alles perfekt.
Auch bei anderen Werten die ich direkt (ohne Variable) der Funktion
übergebe.
Nun zum Problem:
wenn ich die übergegebenen Werte testweise durch meine Variablen
ersetze...
1 | while(1)
|
2 | {
|
3 | SEG1_Ausgabe(1);
|
4 | SEG2_Ausgabe(2);
|
5 | SEG3_Ausgabe(Minute_Zehner);
|
6 | SEG4_Ausgabe(Minute_Einer);
|
7 | }
|
...in der bereits die richtigen Werte stehen, wird immer der Wert vom
vorhergehenden Element übernommen.
Kurz:
Übergebe ich von 1 nach 4 zum Beispiel 5, 6, Variable1, Variable2
steht auf den Segmenten 5666
Oder:
Übergebe ich von 1 nach 4 zum Beispiel 3, Variable1, Variable2, 6
steht auf den Segmenten 3336
Zu geringe Umschaltzeiten an den Segmenten konnte ich bereits
ausschließen-
Es ist etwas schwer auszudrücken, aber ich hoffe ihr versteht mein
Problem.
Hat jemand eine Idee?