Forum: Mikrocontroller und Digitale Elektronik Bascom - Atmega16 Led-Uhr


von TomTom (Gast)


Lesenswert?

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

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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"?

von TomTom (Gast)


Lesenswert?

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

von TomTom (Gast)


Lesenswert?

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!

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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.

von Frank S. (_frank_s_)


Lesenswert?

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

von TomTom (Gast)


Lesenswert?

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

von TomTom (Gast)


Lesenswert?

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

von Frank S. (_frank_s_)


Lesenswert?

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

von TomTom (Gast)


Lesenswert?

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

von Frank S. (_frank_s_)


Lesenswert?

Hallo TomTom,
na super! Das Programm läuft! Problem erledigt!?

MfG von der Spree
Frank

von leo (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.