Gast
#179744
Hallo, ich versuche grade, eine "Kugel Uhr" mit einem ATmega8 und 4 Schieberegistern HC595 zu realisieren. Im Moment lasse ich mir die Werte Dezimal auf 7Segmentanzeigen ausgeben. Nun kommt mein Problem. Ich will die Zeit auf die Schieberegister ausgeben. Nur soll die Zeit ja dort nicht binär erscheinen, sondern je höher die Zahl, desto mehr Leds an. Ich dachte, ich nehme für jedes HC595 ein Byte als Struckt definiert, um die Bits einzeln setzen zu können. Das sieht flgendermaßen aus: struct { unsigned char led1:1; // Bit 0 unsigned char led2:1; // Bit 1 unsigned char led3:1; // ... unsigned char led4:1; unsigned char led5:1; unsigned char led6:1; unsigned char led7:1; unsigned char led8:1; } hc595_1; Setzen der einzelnen Bits manuell (später beim Uhrzeit hochzählen): hc595_1.led1 = 1 ; hc595_1.led2 = 0 ; hc595_1.led3 = 0 ; hc595_1.led4 = 1 ; hc595_1.led5 = 0 ; hc595_1.led6 = 0 ; hc595_1.led7 = 0 ; hc595_1.led8 = 0 ; Ausgabe an die HC's dann so (es soll nun in die Hc's B10010000 eingeschoben werden): SPDR = hc595_1; Nur leider meckert der compiler: error: incompatible types in assignment Also ist das struckt nicht 8 Bit lang ?! Ich dachte, das das Struckt, so wie oben, 8 Bit lang ist. Wer kann mir weiterhelfen ? Gibt es eine andere Möglichkeit die dezimalwerte an die HC' zu senden ? Die Uhr läuft so: 0 0 0 0 // Leds Minuten 0-4, wenn 5 dann 5er Minuten +1 1 2 3 4 // Dezimalwert 0 0 0 0 0 0 0 0 0 0 0 // Leds 5er minuten, = 12 Stunden +1 5 10 15 20 25 30 35 40 45 50 55 0 0 0 0 0 0 0 0 0 0 0 0 // Leds Stunden, =13 dann 1 1 2 3 4 5 6 7 8 9 10 11 12 Ach, ich zähle jede Ziffer einzeln hoch, um die Werte einfacher an die 7Segment Anzeigen auszugeben : Dort steht zb. für 03:27 Uhr 03 : 05 : 02 > 3 Stunden und 25 Minuten und 3 Minuten if(Zl_sekunde == 10) { Zl_sekunde = 0; Zh_sekunde ++; if(Zh_sekunde == 6) { Zh_sekunde = 0; Zl_minute ++; } if(Zl_minute == 5) { Zl_minute = 0; Zl_minute5 ++; } if(Zl_minute5 == 10) { Zl_minute5 = 0; Zh_minute5 ++; } if(Zh_minute5 == 1 && Zl_minute5 == 2) { Zh_minute5 = 0; Zl_minute5 = 0; Zl_stunde ++; } if(Zl_stunde == 10) { Zl_stunde = 0; Zh_stunde ++; } if(Zh_stunde == 1 && Zl_stunde == 3) { Zh_stunde = 0 Zl_stunde = 1; } } Über ein wenig Hilfe würd ich mich sehr freuen !!! Gruß Toby