Guten Abend zusammen, Ich habe eine kleine Aufgabe für Bascom-AVR bekommen unzwar handelt es sich um folgendes: Ich habe einen Atmega16, dieser Steuert über die Ausgänge LED´s an die die Uhrzeit im 12h Format darstellen sollen. Es handelt sich um 12 Bicolour LED´s in Rot/Grün. Die Stundenanzeige soll über eine Blinkende einzelne Rote LED realisiert werden. In 5min Schritten sollen die Minuten mit den Roten LED´s dargestellt werden und zusätzlich mit den Grünen LED´s die 1er schritte. Da die Grünen und Roten LED´s nicht gleichzeitig leuchten dürfen soll nach einer Zeit die Anzeige umspringen. Leider bin ich nicht wirklich Fit in Bascom. Falls mir einer von euch weiter helfen kann bin ich wirklich Dankbar :) Ich habe es bis zum Folgenden Code geschafft, komme aber nicht weiter: $regfile = "m16adef.dat" 'Definitionsdatei für Admega16 $crystal = 1000000 Dim Sekunde As Word Dim Minutee As Word Dim Minutef As Word Dim Stunde As Word Ledr0 Alias Porta.0 Config Ledr0 = 1 Ledr1 Alias Porta.1 Config Ledr1 = 1 Ledr2 Alias Porta.2 Config Ledr2 = 1 Ledr3 Alias Porta.3 Config Ledr3 = 1 Ledr4 Alias Porta.4 Config Ledr4 = 1 Ledr5 Alias Porta.5 Config Ledr5 = 1 Ledr6 Alias Porta.6 Config Ledr6 = 1 Ledr7 Alias Porta.7 Config Ledr7 = 1 Ledr8 Alias Portb.0 Config Ledr8 = 1 Ledr9 Alias Portb.1 Config Ledr9 = 1 Ledr10 Alias Portb.2 Config Ledr10 = 1 Ledr11 Alias Portb.3 Config Ledr11 = 1 Ledg0 Alias Portc.0 Config Ledg0 = 1 Ledg1 Alias Portc.1 Config Ledg1 = 1 Ledg2 Alias Portc.2 Config Ledg2 = 1 Ledg3 Alias Portc.3 Config Ledg3 = 1 Ledg4 Alias Portc.4 Config Ledg4 = 1 Taster1 Alias Pind.6 Taster2 Alias Pind.7 Config Taster1 = Input Config Taster2 = Input Portd.6 = 1 Portd.7 = 1 '------Timer konfigurieren----------------------------------------------------------- -- On Timer1 Takt 'Hier wird Timer 1 aktiviert Config Timer1 = Timer , Prescale = 64 Enable Timer1 Enable Interrupts Timer1 = 51474 '----------------------------------------------------------------------- -------- Main: Do '------------ Uhrzeit In Sekunde Minute Stunde --------------------------------- If Sekunde = 60 Then Sekunde = 0 Incr Minutee End If If Minutee >= 5 Then Minutee = 0 Incr Minutef End If If Minutef >= 12 Then Minutef = 0 Incr Stunde End If If Stunde >= 12 Then Stunde = 0 End If '--------------Uhr einstellen Minute ------------------------------------------ If Taster1 = 1 Then Incr Stunde End If '--------------Uhr einstellen Stunde ------------------------------------------ If Taster2 = 1 Then Incr Minutee End If '------------- Ausgabe der Zeit in Stunden ----------------------------------- If Stunde = 1 Then Ledr1 = 1 Waitms 500 Ledr1 = 0 End If If Stunde = 2 Then Ledr2 = 1 Waitms 500 Ledr2 = 0 End If If Stunde = 3 Then Ledr3 = 1 Waitms 500 Ledr3 = 0 End If If Stunde = 4 Then Ledr4 = 1 Waitms 500 Ledr4 = 0 End If If Stunde = 5 Then Ledr5 = 1 Waitms 500 Ledr5 = 0 End If If Stunde = 6 Then Ledr6 = 1 Waitms 500 Ledr6 = 0 End If If Stunde = 7 Then Ledr7 = 1 Waitms 500 Ledr7 = 0 End If If Stunde = 8 Then Ledr8 = 1 Waitms 500 Ledr8 = 0 End If If Stunde = 9 Then Ledr9 = 1 Waitms 500 Ledr9 = 0 End If If Stunde = 10 Then Ledr10 = 1 Waitms 500 Ledr10 = 0 End If If Stunde = 11 Then Ledr11 = 1 Waitms 500 Ledr11 = 0 End If '----------- Ausgabe der Mínuten in 5er Schritten ----------------------------- If Minutef = 1 And Sekunde < 30 Then Ledr0 = 1 Ledr1 = 1 End If If Minutef = 2 And Sekunde < 30 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 End If If Minutef = 3 And Sekunde < 30 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 Ledr3 = 1 End If If Minutef = 4 And Sekunde < 30 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 Ledr3 = 1 Ledr4 = 1 End If If Minutef = 5 And Sekunde < 30 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 Ledr3 = 1 Ledr4 = 1 Ledr5 = 1 End If If Minutef = 6 And Sekunde < 30 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 Ledr3 = 1 Ledr4 = 1 Ledr5 = 1 Ledr6 = 1 End If If Minutef = 7 And Sekunde < 30 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 Ledr3 = 1 Ledr4 = 1 Ledr5 = 1 Ledr6 = 1 Ledr7 = 1 End If If Minutef = 8 And Sekunde < 30 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 Ledr3 = 1 Ledr4 = 1 Ledr5 = 1 Ledr6 = 1 Ledr7 = 1 Ledr8 = 1 End If If Minutef = 9 And Sekunde < 30 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 Ledr3 = 1 Ledr4 = 1 Ledr5 = 1 Ledr6 = 1 Ledr7 = 1 Ledr8 = 1 Ledr9 = 1 End If If Minutef = 10 And Sekunde < 30 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 Ledr3 = 1 Ledr4 = 1 Ledr5 = 1 Ledr6 = 1 Ledr7 = 1 Ledr8 = 1 Ledr9 = 1 Ledr10 = 1 End If If Minutef = 11 And Sekunde < 30 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 Ledr3 = 1 Ledr4 = 1 Ledr5 = 1 Ledr6 = 1 Ledr7 = 1 Ledr8 = 1 Ledr9 = 1 Ledr10 = 1 Ledr11 = 1 End If '----------- Ausgabe der Mínuten in 1er Schritten ----------------------------- If Minutee = 1 And Sekunde > 30 Then Ledg1 = 1 End If If Minutee = 2 And Sekunde > 30 Then Ledg1 = 1 Ledg2 = 1 End If If Minutee = 3 And Sekunde > 30 Then Ledg1 = 1 Ledg2 = 1 Ledg3 = 1 End If If Minutee = 4 And Sekunde > 30 Then Ledg1 = 1 Ledg2 = 1 Ledg3 = 1 Ledg4 = 1 End If Loop '-------------Subs------------------------------------------------------ ------- Takt: Timer0 = 51474 Incr Sekunde Return Vielen Dank im voraus ;) TomTom
TomTom schrieb: > Die Stundenanzeige soll über eine Blinkende einzelne Rote LED realisiert > werden. > > In 5min Schritten sollen die Minuten mit den Roten LED´s dargestellt > werden und zusätzlich mit den Grünen LED´s die 1er schritte. Wie wird 1:04 dargestellt? Und 11:58? > Da die Grünen und Roten LED´s nicht gleichzeitig leuchten dürfen soll > nach einer Zeit die Anzeige umspringen. Nach welcher Zeit und wie "umspringen"?
Marc V. schrieb: > Wie wird 1:04 dargestellt? Ledr1 soll Blinken, und Ledg1-ledg4 konstant leuchten. > Und 11:58? Ledr11 soll Blinken, Ledr0-10 soll Konstant leuchten, Ledg1-3 soll konstant leuchten. Da mit einer LED zwei Farben dargestellt werden muss es ein entweder/oder geben. Ich dachte einfach nach 30s ein Wechsel. Mir war nur keine Möglichkeit bewusst wie ich das darstellen kann. TomTom
Marc V. schrieb: > Wie wird 1:04 dargestellt? Ledr1 soll Blinken, und Ledg0-ledg3 konstant leuchten. > Und 11:58? Ledr11 soll Blinken, Ledr0-10 soll Konstant leuchten, Ledg1-3 soll konstant leuchten. Da mit einer LED zwei Farben dargestellt werden muss es ein entweder/oder geben. Ich dachte einfach nach 30s ein Wechsel. Mir war nur keine Möglichkeit bewusst wie ich das darstellen kann. TomTom !Richtig Stellung!
TomTom schrieb: > Marc V. schrieb: >> Wie wird 1:04 dargestellt? > > Ledr1 soll Blinken, und Ledg0-ledg3 konstant leuchten. Wo befinden sich ledg0-ledg3 überhaupt ? >> Und 11:58? > > Ledr11 soll Blinken, Ledr0-10 soll Konstant leuchten, Ledg1-3 soll > konstant leuchten. Ledr11 stellt 12 Uhr dar. Es wäre logischer, leds von 1-12 zu numerieren. > Da mit einer LED zwei Farben dargestellt werden muss es ein > entweder/oder geben. > Ich dachte einfach nach 30s ein Wechsel. Mir war nur keine Möglichkeit > bewusst wie ich das darstellen kann. Bis da irgendjemand die Anordnung deiner Leds entziffert hat, vergeht bestimmt eine weitere Minute.
TomTom schrieb: > Ich habe es bis zum Folgenden Code geschafft Hallo TomTom, das sieht doch schon mal gut aus, trotzdem möchte ich gerne ein paar Denkanregungen und Hinweise geben. Eine Anweisung, ob die Ports A-C Eingäne oder Ausgänge sind fehlt mir irgendwie. Ich kenne den Unterschied zwischen PortX.Y und PinX.Y. Sauberer wäre eine Implementierung der Form: ...
1 | 'definiere die Pins von Port A ( 1 = ausgang; 0= eingang) |
2 | DdrA = &B11111111 |
3 | 'setze der einzelnen Pins an Port A( 0= ausschalten; 1= einschalten) |
4 | PortA = &B00000000 |
... Analog für PortB und Port C. Für die Eingänge der Taster dann mit ...
1 | 'definiere D.6 und D.7 als Eingang, Rest als Ausgang |
2 | DdrD = &B00111111 |
3 | 'setze für D.6 und D.7 den Pullup, restliche Ausgänge ausschalten |
4 | PortA = &B11000000 |
... Damit wird dein Deklarationsteil schmaler:
1 | DdrA = &B11111111 'definiere PortA als Ausgang |
2 | PortA = &B00000000 'schalte alle Ausgänge aus |
3 | DdrB = &B11111111 'definiere PortB als Ausgang |
4 | PortB = &B00000000 'schalte alle Ausgänge aus |
5 | DdrC = &B11111111 'definiere PortC als Ausgang |
6 | PortC = &B00000000 'schalte alle Ausgänge aus |
7 | DdrD = &B00111111 'definiere C.6 und C.7 als Eingabg, Rest als Ausgang |
8 | PortD = &B11000000 'setze für D.6 und D.7 den Pullup, restliche Ausgänge ausschalten |
9 | |
10 | Ledr0 Alias Porta.0 |
11 | Ledr1 Alias Porta.1 |
12 | Ledr2 Alias Porta.2 |
13 | Ledr3 Alias Porta.3 |
14 | Ledr4 Alias Porta.4 |
15 | Ledr5 Alias Porta.5 |
16 | Ledr6 Alias Porta.6 |
17 | Ledr7 Alias Porta.7 |
18 | Ledr8 Alias Portb.0 |
19 | Ledr9 Alias Portb.1 |
20 | Ledr10 Alias Portb.2 |
21 | Ledr11 Alias Portb.3 |
22 | Ledg0 Alias Portc.0 ' wird im Programm nicht verwendet! |
23 | Ledg1 Alias Portc.1 |
24 | Ledg2 Alias Portc.2 |
25 | Ledg3 Alias Portc.3 |
26 | Ledg4 Alias Portc.4 |
27 | |
28 | Taster1 Alias Pind.6 |
29 | Taster2 Alias Pind.7 |
TomTom schrieb: > If Minutef = 1 And Sekunde < 30 Then > Ledr0 = 1 > Ledr1 = 1 > End If Leuchte da nicht schon 2x fünf Minuten? TomTom schrieb: > '--------------Uhr einstellen Minute > ------------------------------------------ > If Taster1 = 1 Then > Incr Stunde > End If Wenn deine Taster nicht prellen, kannst du das machen. Leider hat kaum ein Taster von Hause aus diese Eigenschaft. Verwendest du eine RC-Kombination um das Prellen zu verhindern? Wenn nein, sieh dir bitte den DEBOUNCE Befehl an. TomTom schrieb: > $crystal = 1000000 Ich hoffe du verwendest einen externen Quarz und nicht den internen Oszillator. Ansonste ärgerst du dich über die Gangabweichung der Uhr. Für Kurzzeitgeschichten fällt die Ungenauigkeit nicht auf, sollte die Uhr aber mehrere Stunden laufen, ergeben sich abweichungen von mehreren Sekunden. Ich hoffe, ich habe dein Programm nicht zu sehr kritisiert. Für den Einstieg ist das doch schon völlig ok. Du zeigst, was du dir erarbeitet hast, wir helfen dir auf dem Weg zu Erfolg. MfG von der Spree Frank p.s. Darüber schon mal nachdenken TomTom schrieb: > If Minutee = 2 And Sekunde > 30 Then > Ledg1 = 1 > Ledg2 = 1 > End If
Mahlzeit Frank, erstmals vielen dank für die Hilfe ;) Ich habe deinen Deklarationsteil in mein Programm übernommen, sieht viel besser und übersichtlicher aus als zuvor. Frank S. schrieb: >> If Minutef = 1 And Sekunde < 30 Then >> Ledr0 = 1 >> Ledr1 = 1 >> End If > > Leuchte da nicht schon 2x fünf Minuten? Ja da ist ein Fehler, ich habe im ganzen Programm immer eine LED zu viel angesteuert. Frank S. schrieb: > Wenn deine Taster nicht prellen, kannst du das machen. Leider hat kaum > ein Taster von Hause aus diese Eigenschaft. Verwendest du eine > RC-Kombination um das Prellen zu verhindern? Wenn nein, sieh dir bitte > den DEBOUNCE Befehl an. Ich habe das ganze jetzt mit dem Debounce Befehl probiert. Declare Sub Sub_taster1 . . '--------------Uhr einstellen Minute ------------------------------------------ Debounce Taster1 , 0 , Sub_taster1 , Sub . . . . Sub_taster1: Incr Stunde Return Frank S. schrieb: > TomTom schrieb: >> $crystal = 1000000 > Ich hoffe du verwendest einen externen Quarz und nicht den internen > Oszillator. Ansonste ärgerst du dich über die Gangabweichung der Uhr. > Für Kurzzeitgeschichten fällt die Ungenauigkeit nicht auf, sollte die > Uhr aber mehrere Stunden laufen, ergeben sich abweichungen von mehreren > Sekunden. Ich verwende den Internen Quarz, das ganze ist aber nur als Lernprojekt gedacht. Frank S. schrieb: > Ich hoffe, ich habe dein Programm nicht zu sehr kritisiert. Für den > Einstieg ist das doch schon völlig ok. Du zeigst, was du dir erarbeitet > hast, wir helfen dir auf dem Weg zu Erfolg. Ich hatte doch gehofft das jemand mein Programm zerpflückt :D danke dafür ;) Mit freundlichen Grüßen Tom Tom PS. Das mit dem If Minutee = 2 And Sekunde > 30 Then habe ich erstmal verbannt :D
Meine Aktuelle Version: Leider funktioniert das Hochzählen der 1er Minuten nicht, die LEDs leuchten nicht auf. Des weiteren bleiben nach 12h alle LEDs an :D ich habe irgendwo einen fehler beim Hochzählen... (Zum Testen habe ich den Timer auf 0,1s gestellt) '------Definitionen/Konfigurationen------------------------------------- -------------- $regfile = "m16def.dat" 'Definitionsdatei für Admega16 $crystal = 1000000 Config Debounce = 1 Dim Sekunde As Integer Dim Minutee As Integer Dim Minutef As Integer Dim Stunde As Integer Dim Blinken As Bit Ddra = &B11111111 'definiere PortA als Ausgang Porta = &B00000000 'schalte alle Ausgänge aus Ddrb = &B11111111 'definiere PortB als Ausgang Portb = &B00000000 'schalte alle Ausgänge aus Ddrc = &B11111111 'definiere PortC als Ausgang Portc = &B00000000 'schalte alle Ausgänge aus Ddrd = &B00111111 'definiere C.6 und C.7 als Eingabg, Rest als Ausgang Portd = &B11000000 'setze für D.6 und D.7 den Pullup, restliche Ausgänge ausschalten Ledr0 Alias Porta.0 Ledr1 Alias Porta.1 Ledr2 Alias Porta.2 Ledr3 Alias Porta.3 Ledr4 Alias Porta.4 Ledr5 Alias Porta.5 Ledr6 Alias Porta.6 Ledr7 Alias Porta.7 Ledr8 Alias Portb.0 Ledr9 Alias Portb.1 Ledr10 Alias Portb.2 Ledr11 Alias Portb.3 Ledg1 Alias Portd.0 Ledg2 Alias Portd.1 Ledg3 Alias Portd.2 Ledg4 Alias Portd.3 Taster1 Alias Pind.6 Taster2 Alias Pind.7 Declare Sub Sub_taster1 Declare Sub Sub_taster2 Declare Sub Stundenanzeige Declare Sub 5erminuten Declare Sub 1erminuten Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1 Enable Timer1 'schalte den Timer1 ein On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1 Enable Interrupts Timer1 = 65145 'Timer1 soll schon von 61630 wegzählen '----------------------------------------------------------------------- -------- Do '------------ Uhrzeit In Sekunde Minute Stunde --------------------------------- If Sekunde = 60 Then Sekunde = 0 Incr Minutee End If If Minutee = 5 Then Minutee = 0 Incr Minutef End If If Minutef = 12 Then Minutef = 0 Incr Stunde End If If Stunde = 12 Then Stunde = 0 End If '--------------Uhr einstellen Minute ------------------------------------------ Debounce Taster1 , 0 , Sub_taster1 , Sub '--------------Uhr einstellen Stunde ------------------------------------------ Debounce Taster2 , 0 , Sub_taster2 , Sub '------------- Ausgabe der Zeit in Stunden ----------------------------------- Gosub Stunenanzeige If Stunde = 0 Then Porta = &B00000000 Portb = &B00000000 End If '----------- Ausgabe der Mínuten in 5er Schritten ----------------------------- Gosub 5erminuten If Minutef = 0 Then Porta = &B00000000 Portb = &B00000000 End If '----------- Ausgabe der Mínuten in 1er Schritten ----------------------------- Gosub 1erminuten If Minutee = 0 Then Portd = &B11000000 End If Loop '--------------Timer1--------------------------------------------------- ------- Isr_von_timer1: 'ISR von Timer1 Timer1 = 65145 'Timer1 soll wieder von 61630 wegzählen Incr Sekunde Toggle Blinken 'blinken für Stundenanzeige Return '-------------Subs------------------------------------------------------ ------- Sub_taster1: Incr Stunde Return Sub_taster2: Incr Minutee Return Stunenanzeige: If Stunde = 0 And Blinken = 1 Then Ledr0 = 1 End If If Stunde = 1 And Blinken = 1 Then Ledr1 = 1 End If If Stunde = 2 And Blinken = 1 Then Ledr2 = 1 End If If Stunde = 3 And Blinken = 1 Then Ledr3 = 1 End If If Stunde = 4 And Blinken = 1 Then Ledr4 = 1 End If If Stunde = 5 And Blinken = 1 Then Ledr5 = 1 End If If Stunde = 6 And Blinken = 1 Then Ledr6 = 1 End If If Stunde = 7 And Blinken = 1 Then Ledr7 = 1 End If If Stunde = 8 And Blinken = 1 Then Ledr8 = 1 End If If Stunde = 9 And Blinken = 1 Then Ledr9 = 1 End If If Stunde = 10 And Blinken = 1 Then Ledr10 = 1 End If If Stunde = 11 And Blinken = 1 Then Ledr11 = 1 End If Return 5erminuten: If Minutef = 1 Then Ledr0 = 1 End If If Minutef = 2 Then Ledr0 = 1 Ledr1 = 1 End If If Minutef = 3 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 End If If Minutef = 4 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 Ledr3 = 1 End If If Minutef = 5 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 Ledr3 = 1 Ledr4 = 1 End If If Minutef = 6 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 Ledr3 = 1 Ledr4 = 1 Ledr5 = 1 End If If Minutef = 7 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 Ledr3 = 1 Ledr4 = 1 Ledr5 = 1 Ledr6 = 1 End If If Minutef = 8 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 Ledr3 = 1 Ledr4 = 1 Ledr5 = 1 Ledr6 = 1 Ledr7 = 1 End If If Minutef = 9 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 Ledr3 = 1 Ledr4 = 1 Ledr5 = 1 Ledr6 = 1 Ledr7 = 1 Ledr8 = 1 End If If Minutef = 10 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 Ledr3 = 1 Ledr4 = 1 Ledr5 = 1 Ledr6 = 1 Ledr7 = 1 Ledr8 = 1 Ledr9 = 1 End If If Minutef = 11 Then Ledr0 = 1 Ledr1 = 1 Ledr2 = 1 Ledr3 = 1 Ledr4 = 1 Ledr5 = 1 Ledr6 = 1 Ledr7 = 1 Ledr8 = 1 Ledr9 = 1 Ledr10 = 1 End If Return 1erminuten: If Minutee = 1 Then Ledg1 = 1 End If If Minutee = 2 Then Ledg1 = 1 Ledg2 = 1 End If If Minutee = 3 Then Ledg1 = 1 Ledg2 = 1 Ledg3 = 1 End If If Minutee = 4 Then Ledg1 = 1 Ledg2 = 1 Ledg3 = 1 Ledg4 = 1 End If Return
Hallo TomTom, das sieht doch schon mal "verschlimmbessert" aus. ;-) Ich habe die Schaltung jetzt auf dem Steckbrett, allerdings mit einem M32. Stimmt, die grünen LED leuchten nicht. Es ist aber mühsam, den gesamten Quelltext aus aus dem Beitrag rauszukopieren und dann die fehlerhaften Umbrüche der Darstellung zu beseitigen. Gewöhne es dir bitte an, Quelltexte als anzuhängen. TomTom schrieb: > '--------------Uhr einstellen Minute > ------------------------------------------ > Debounce Taster1 , 0 , Sub_taster1 , Sub > > '--------------Uhr einstellen Stunde > ------------------------------------------ > Debounce Taster2 , 0 , Sub_taster2 , Sub > > '------------- Ausgabe der Zeit in Stunden > ----------------------------------- und passen vom Kommentar nicht zueinander zu TomTom schrieb: > Sub_taster1: > Incr Stunde > Return > > Sub_taster2: > Incr Minutee > Return TomTom schrieb: > Declare Sub Stundenanzeige > ... > Gosub Stunenanzeige > ... > Stunenanzeige: passt so gar nicht. Warum die SUB 1erminuten nicht läuft weiß ich noch nicht. MfG von der Spree Frank
Fehler ausgebessert, Ich habe zum Testen andere LED´s bei Grün genommen. Da funktioniert es. Ich hoffe die Formatierung ist jetzt richtig
1 | '------'------Definitionen/Konfigurationen--------------------------------------------------- |
2 | |
3 | $regfile = "m16def.dat" 'Definitionsdatei für Admega16 |
4 | $crystal = 1000000 |
5 | Config Debounce = 1 |
6 | |
7 | Dim Sekunde As Integer |
8 | Dim Minutee As Integer |
9 | Dim Minutef As Integer |
10 | Dim Stunde As Integer |
11 | Dim Blinken As Bit |
12 | |
13 | Ddra = &B11111111 'definiere PortA als Ausgang |
14 | Porta = &B00000000 'schalte alle Ausgänge aus |
15 | Ddrb = &B11111111 'definiere PortB als Ausgang |
16 | Portb = &B00000000 'schalte alle Ausgänge aus |
17 | Ddrc = &B11111111 'definiere PortC als Ausgang |
18 | Portc = &B00000000 'schalte alle Ausgänge aus |
19 | Ddrd = &B00111111 'definiere C.6 und C.7 als Eingabg, Rest als Ausgang |
20 | Portd = &B11000000 'setze für D.6 und D.7 den Pullup, restliche Ausgänge ausschalten |
21 | |
22 | Ledr0 Alias Porta.0 |
23 | Ledr1 Alias Porta.1 |
24 | Ledr2 Alias Porta.2 |
25 | Ledr3 Alias Porta.3 |
26 | Ledr4 Alias Porta.4 |
27 | Ledr5 Alias Porta.5 |
28 | Ledr6 Alias Porta.6 |
29 | Ledr7 Alias Porta.7 |
30 | Ledr8 Alias Portb.0 |
31 | Ledr9 Alias Portb.1 |
32 | Ledr10 Alias Portb.2 |
33 | Ledr11 Alias Portb.3 |
34 | Ledg1 Alias Portd.0 |
35 | Ledg2 Alias Portd.1 |
36 | Ledg3 Alias Portd.2 |
37 | Ledg4 Alias Portd.3 |
38 | |
39 | Taster1 Alias Pind.6 |
40 | Taster2 Alias Pind.7 |
41 | |
42 | Declare Sub Sub_taster1 |
43 | Declare Sub Sub_taster2 |
44 | Declare Sub Stunden |
45 | Declare Sub 5erminuten |
46 | Declare Sub 1erminuten |
47 | |
48 | Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1 |
49 | Enable Timer1 'schalte den Timer1 ein |
50 | On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1 |
51 | Enable Interrupts |
52 | Timer1 = 65145 'Timer1 soll schon von 61630 wegzählen |
53 | |
54 | |
55 | '------------------------------------------------------------------------------- |
56 | Do |
57 | |
58 | '------------ Uhrzeit In Sekunde Minute Stunde --------------------------------- |
59 | If Sekunde = 60 Then |
60 | Sekunde = 0 |
61 | Incr Minutee |
62 | End If |
63 | |
64 | If Minutee = 5 Then |
65 | Minutee = 0 |
66 | Incr Minutef |
67 | End If |
68 | |
69 | If Minutef = 12 Then |
70 | Minutef = 0 |
71 | Incr Stunde |
72 | End If |
73 | |
74 | If Stunde = 12 Then |
75 | Stunde = 0 |
76 | End If |
77 | |
78 | '--------------Uhr einstellen Minute ------------------------------------------ |
79 | Debounce Taster1 , 0 , Sub_taster1 , Sub |
80 | |
81 | '--------------Uhr einstellen Stunde ------------------------------------------ |
82 | Debounce Taster2 , 0 , Sub_taster2 , Sub |
83 | |
84 | '------------- Ausgabe der Zeit in Stunden ----------------------------------- |
85 | Gosub Stunden |
86 | |
87 | If Stunde = 0 Then |
88 | Porta = &B00000000 |
89 | Portb = &B00000000 |
90 | End If |
91 | |
92 | |
93 | '----------- Ausgabe der Mínuten in 5er Schritten ----------------------------- |
94 | Gosub 5erminuten |
95 | |
96 | If Minutef = 0 Then |
97 | Porta = &B00000000 |
98 | Portb = &B00000000 |
99 | End If |
100 | |
101 | '----------- Ausgabe der Mínuten in 1er Schritten ----------------------------- |
102 | Gosub 1erminuten |
103 | |
104 | If Minutee = 0 Then |
105 | Portd = &B11000000 |
106 | End If |
107 | |
108 | Loop |
109 | |
110 | '--------------Timer1---------------------------------------------------------- |
111 | Isr_von_timer1: 'ISR von Timer1 |
112 | Timer1 = 65145 'Timer1 soll wieder von 61630 wegzählen |
113 | Incr Sekunde |
114 | Toggle Blinken 'blinken für Stundenanzeige |
115 | Return |
116 | |
117 | '-------------Subs------------------------------------------------------------- |
118 | Sub_taster1: |
119 | Incr Minutee |
120 | Return |
121 | |
122 | Sub_taster2: |
123 | Incr Stunde |
124 | Return |
125 | |
126 | |
127 | Stunden: |
128 | If Stunde = 0 And Blinken = 1 Then |
129 | Ledr0 = 1 |
130 | End If |
131 | |
132 | If Stunde = 1 And Blinken = 1 Then |
133 | Ledr1 = 1 |
134 | End If |
135 | |
136 | If Stunde = 2 And Blinken = 1 Then |
137 | Ledr2 = 1 |
138 | End If |
139 | |
140 | If Stunde = 3 And Blinken = 1 Then |
141 | Ledr3 = 1 |
142 | End If |
143 | |
144 | If Stunde = 4 And Blinken = 1 Then |
145 | Ledr4 = 1 |
146 | End If |
147 | |
148 | If Stunde = 5 And Blinken = 1 Then |
149 | Ledr5 = 1 |
150 | End If |
151 | |
152 | If Stunde = 6 And Blinken = 1 Then |
153 | Ledr6 = 1 |
154 | End If |
155 | |
156 | If Stunde = 7 And Blinken = 1 Then |
157 | Ledr7 = 1 |
158 | End If |
159 | |
160 | If Stunde = 8 And Blinken = 1 Then |
161 | Ledr8 = 1 |
162 | End If |
163 | |
164 | If Stunde = 9 And Blinken = 1 Then |
165 | Ledr9 = 1 |
166 | End If |
167 | |
168 | If Stunde = 10 And Blinken = 1 Then |
169 | Ledr10 = 1 |
170 | End If |
171 | |
172 | If Stunde = 11 And Blinken = 1 Then |
173 | Ledr11 = 1 |
174 | End If |
175 | |
176 | Return |
177 | |
178 | |
179 | 5erminuten: |
180 | If Minutef = 1 Then |
181 | Ledr0 = 1 |
182 | End If |
183 | |
184 | If Minutef = 2 Then |
185 | Ledr0 = 1 |
186 | Ledr1 = 1 |
187 | End If |
188 | |
189 | If Minutef = 3 Then |
190 | Ledr0 = 1 |
191 | Ledr1 = 1 |
192 | Ledr2 = 1 |
193 | End If |
194 | |
195 | If Minutef = 4 Then |
196 | Ledr0 = 1 |
197 | Ledr1 = 1 |
198 | Ledr2 = 1 |
199 | Ledr3 = 1 |
200 | End If |
201 | |
202 | If Minutef = 5 Then |
203 | Ledr0 = 1 |
204 | Ledr1 = 1 |
205 | Ledr2 = 1 |
206 | Ledr3 = 1 |
207 | Ledr4 = 1 |
208 | End If |
209 | |
210 | If Minutef = 6 Then |
211 | Ledr0 = 1 |
212 | Ledr1 = 1 |
213 | Ledr2 = 1 |
214 | Ledr3 = 1 |
215 | Ledr4 = 1 |
216 | Ledr5 = 1 |
217 | End If |
218 | |
219 | If Minutef = 7 Then |
220 | Ledr0 = 1 |
221 | Ledr1 = 1 |
222 | Ledr2 = 1 |
223 | Ledr3 = 1 |
224 | Ledr4 = 1 |
225 | Ledr5 = 1 |
226 | Ledr6 = 1 |
227 | End If |
228 | |
229 | If Minutef = 8 Then |
230 | Ledr0 = 1 |
231 | Ledr1 = 1 |
232 | Ledr2 = 1 |
233 | Ledr3 = 1 |
234 | Ledr4 = 1 |
235 | Ledr5 = 1 |
236 | Ledr6 = 1 |
237 | Ledr7 = 1 |
238 | End If |
239 | |
240 | If Minutef = 9 Then |
241 | Ledr0 = 1 |
242 | Ledr1 = 1 |
243 | Ledr2 = 1 |
244 | Ledr3 = 1 |
245 | Ledr4 = 1 |
246 | Ledr5 = 1 |
247 | Ledr6 = 1 |
248 | Ledr7 = 1 |
249 | Ledr8 = 1 |
250 | End If |
251 | |
252 | If Minutef = 10 Then |
253 | Ledr0 = 1 |
254 | Ledr1 = 1 |
255 | Ledr2 = 1 |
256 | Ledr3 = 1 |
257 | Ledr4 = 1 |
258 | Ledr5 = 1 |
259 | Ledr6 = 1 |
260 | Ledr7 = 1 |
261 | Ledr8 = 1 |
262 | Ledr9 = 1 |
263 | End If |
264 | |
265 | If Minutef = 11 Then |
266 | Ledr0 = 1 |
267 | Ledr1 = 1 |
268 | Ledr2 = 1 |
269 | Ledr3 = 1 |
270 | Ledr4 = 1 |
271 | Ledr5 = 1 |
272 | Ledr6 = 1 |
273 | Ledr7 = 1 |
274 | Ledr8 = 1 |
275 | Ledr9 = 1 |
276 | Ledr10 = 1 |
277 | End If |
278 | |
279 | Return |
280 | |
281 | |
282 | 1erminuten: |
283 | If Minutee = 1 Then |
284 | Ledg1 = 1 |
285 | End If |
286 | |
287 | If Minutee = 2 Then |
288 | Ledg1 = 1 |
289 | Ledg2 = 1 |
290 | End If |
291 | |
292 | If Minutee = 3 Then |
293 | Ledg1 = 1 |
294 | Ledg2 = 1 |
295 | Ledg3 = 1 |
296 | End If |
297 | |
298 | If Minutee = 4 Then |
299 | Ledg1 = 1 |
300 | Ledg2 = 1 |
301 | Ledg3 = 1 |
302 | Ledg4 = 1 |
303 | End If |
304 | |
305 | Return |
Hallo TomTom, na super! Das Programm läuft! Problem erledigt!? MfG von der Spree Frank
TomTom schrieb: > If Stunde = 0 And Blinken = 1 Then > Ledr0 = 1 > End If ... Du moechtest einmal die neuesten Erfindungen der Computerei wie Array und Schleife anwenden. leo
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.