Hilfe - Küchentimer

Hallo Andreas,

Donnerwetter ... das ist ja mal ein Großformat-"Wecker". Der dürfte auch in deiner Großküche kaum zu übersehen sein.


@all
Ein Treffen im Harz-Hotel finde ich auch eine gute Idee und das gern auch mit Brockenwanderung. Bei nur rund 100km Entfernung wäre das für mich ja fast schon ein Heimspiel ...

Gruß
Pirx
 
Hallo zusammen,

der Thread entwickelt sich doch langsam heftig in Richtung AVR-Harz-Treffen :rolleyes:

Wollen wir die Diskussion da drüber beim Thread vom AVR-Stammtisch weiterführen oder nen eigenen Thread aufmachen?

Es driftet doch stark vom eigentlichen Thema ab, wobei ich mich auch über die Resonanz auf diese Idee freue :cool:

Gruß
Dino
 
Hi Leute,

gibt ein kleines Update der Software. Auf Wunsch einiger Angestellten von mir, habe ich die Sekunden zum Voreinstellen mit einbezogen(z.B. Eier kochen 4,5Min).

Gruß Andreas



CodeBox BascomAVR
 '******************************************************************************
 '*** Küchentimer - mit Alarm- und Standbyzeiteinstellung **********************
 '*** mit Atmega8 und 6 x LED 7 Segment-Anzeigen SA 23-12 RT *******************
 '*** Andreas Hickmann - www.harzererlebnishof.de ******************************
 '*** Anregung und Grundlagen von http://www.elektronik-radio.de ***************
 '*** besonderer Dank gilt Daniel(molleonair) vom Roboternetz.de-Forum *********
 '******************************************************************************
 '
 '***Konfiguration der Ports****************************************************
 '
 '******************************************************************************
 '
 ' Port B:
 ' PB0 = Encoder A (Zeiteinstellung)
 ' PB1 = Encoder B (Zeiteinstellung)
 ' PB2 = Encoder D (Taste-Digitwechsel Stunden/Minuten)
 ' PB3 = Taster(Start/Stop Countdown)
 ' PB5 = Summer
 ' PB6 = XTAL1 Quarz
 ' PB7 = XTAL2 3,6864 Mhz
 '
 ' Port C:
 ' Treiber = UDN2981A
 ' PC0 = Ziffer 1 gem.Anode
 ' PC1 = Ziffer 2 gem.Anode
 ' PC2 = Ziffer 3 gem.Anode
 ' PC3 = Ziffer 4 gem.Anode
 ' PC4 = Ziffer 5 gem.Anode
 ' PC5 = Ziffer 6 gem.Anode
 ' PC6 = Reset
 '
 ' Port D:
 ' Treiber = ULN2803A
 ' PD0 = Segment "a"  Kathode
 ' PD1 = Segment "b"  Kathode
 ' PD2 = Segment "c"  Kathode
 ' PD3 = Segment "d"  Kathode
 ' PD4 = Segment "e"  Kathode
 ' PD5 = Segment "f"  Kathode
 ' PD6 = Segment "g"  Kathode
 ' PD7 = frei
 '
 '******************************************************************************

'*** Hardware ******************************************************************
$regfile = "m8def.dat"
$crystal = 3686400  '3,6864 Mhz

'*** Ports konfigurieren********************************************************
Config Portb.5 = Output  'Buzzer
Buzzer Alias Portb.5
Config Portb.4 = Output  '7Seg Doppelpunkt nicht belegt
Doppelpunkt Alias Portb.4
Portb = &B00001111  '1=PullUp eingeschaltet
Ddrc = &B11111111  'PC => Multiplexen der Anzeige
Ddrd = &B11111111  'PD => 7-Segmente
Drehtaster_pin Alias Pinb.2

'Sekundentakt erzeugen
On Timer1 Ontimer1
Config Timer1 = Timer , Prescale = 64  ' siehe unten!)=1Hz
Enable Timer1
Start Timer1

'Blinktakt erzeugen für die Zahlenstellen Minuten-Einer bis Stunden-Zehner
On Timer2 Ontimer2
Config Timer2 = Timer , Prescale = 1024  ' siehe unten!)=2Hz
Enable Timer2
Stop Timer2

'Multiplexfrequenz erzeugen
On Timer0 Ontimer0
Config Timer0 = Timer , Prescale = 256  '3,6864 Mhz = 400Hz
Enable Timer0

Enable Interrupts

'*** Variablen *****************************************************************
Dim Wert As Byte  'Ziffer die ausgegeben wird
Dim Multiplex As Byte  'Stellenwert (1,2,4,8,16,32)
Dim Sek_einer As Byte
Dim Sek_zehner As Byte
Dim Min_einer As Byte
Dim Min_zehner As Byte
Dim Std_einer As Byte
Dim Std_zehner As Byte
Dim Sekunden As Byte
Dim Minuten As Byte
Dim Stunden As Byte
Dim Alarmzeit As Byte
Dim Alarmtimer As Byte
Dim Alarmzeit_einer As Byte
Dim Alarmzeit_zehner As Byte
Alarmzeit = 60  'Vorgabe - Alarmzeit
Alarmtimer = Alarmzeit + 1
Dim Standbyzeit As Byte
Standbyzeit = 5  'Vorgabe - Standbyzeit
Dim Standbytimer As Byte
Dim Standby_sek As Byte
Dim Standbyzeit_einer As Byte
Dim Standbyzeit_zehner As Byte
Dim Uhr_lauft As Bit
Dim Standby As Bit
Dim Enc As Byte
Dim Enc_zaehler As Byte
Dim Digit_active As Byte
Dim Timer2_zaehler As Byte
Dim 2hz_zaehler As Bit
Dim Uhr_stellen As Bit
Dim Anzeigeblinken As Bit
Dim Beepton As Bit
Dim Drehtaster_drueck_zeit As Byte
Set 2hz_zaehler
Digit_active = 2
Declare Sub Start_stopp
Declare Sub Count_up
Declare Sub Count_down
Declare Sub Drehtaster


Multiplex = 1  'Startwert
Timer1 = 7936  'Für den Start der Uhr nach 1 Sekunde

'*** Main (Zeit einstellen) ****************************************************
Do
  Enc = Encoder(pinb.0 , Pinb.1 , Count_up , Count_down , 0)  'Drehimpulsgeber
  Debounce Pinb.3 , 0 , Start_stopp , Sub  'Taste Starten und Stoppen Timer1
  Debounce Pinb.2 , 0 , Drehtaster , Sub  'Taste vom Drehimpulsgeber
  If Alarmtimer < Alarmzeit Then
  Buzzer = 2hz_zaehler
  Else
  Reset Buzzer
  End If
  If Beepton = 1 And Stunden = 0 And Minuten = 0 And Sekunden < 11 And Sekunden > 0 And Uhr_lauft = 1 Then  'Auswertung Alarm-Buzzer-Beepton;Beepton die letzten 10 Sekunden
  Set Buzzer
  Waitms 20
  Reset Buzzer
  Reset Beepton
  End If
Loop

'*** Sub-Routinen (Zeit einstellen) ********************************************
Sub Start_stopp  'Starten und Stoppen des Küchentimers/Ausschalten Buzzer  '
  Reset Standby
  Standbytimer = 0
  If Digit_active = 3 Or Digit_active = 4 Then Digit_active = 2  'zurückspringen aus dem Alarm- und Standbystellen-Modus in den Stunden- Minutenstellen-Modus mit der Start/Stopptaste
  If Uhr_lauft = 0 Then
  If Stunden > 0 Or Minuten > 0 Or Sekunden > 0 Then  'Auswertung des Timers
  Uhr_lauft = 1
  Reset Uhr_stellen
  Stop Timer2
  Set 2hz_zaehler
  Digit_active = 2
  End If
  If Alarmtimer < Alarmzeit And Anzeigeblinken = 1 Then
  Reset Buzzer  'Buzzer abschalten
  Alarmtimer = Alarmzeit + 1
  End If
  Else
  Uhr_lauft = 0
  End If
End Sub

Sub Count_up  'Drehimpulsgeber - Zeit stellen(hochzählen)
  If Enc_zaehler = 4 Then
  Reset Standby
  Standbytimer = 0
  Reset Buzzer
  Alarmtimer = Alarmzeit + 1
  Start Timer2
  Reset Uhr_lauft
  Set Uhr_stellen
  Reset Anzeigeblinken
  If Digit_active = 1 And Stunden < 23 Then
  Incr Stunden
  Elseif Digit_active = 2 And Minuten < 59 Then
  Incr Minuten
  Elseif Digit_active = 3 And Sekunden < 59 Then  'neu - Sekunden stellen
  Incr Sekunden
  Elseif Digit_active = 4 And Alarmzeit < 99 Then  'Buzzerzeit stellen(hochzählen)
  Incr Alarmzeit
  Elseif Digit_active = 5 And Standbyzeit < 99 Then  'Standbyzeit stellen(hochzählen)
  Incr Standbyzeit
  End If

  Enc_zaehler = 0
  Else
  Incr Enc_zaehler
  End If
End Sub

Sub Count_down  'Drehimpulsgeber - Zeit stellen(runterzählen)
  If Enc_zaehler = 4 Then
  Reset Standby
  Standbytimer = 0
  Reset Buzzer
  Alarmtimer = Alarmzeit + 1
  Start Timer2
  Reset Uhr_lauft
  Set Uhr_stellen
  Reset Anzeigeblinken
  If Digit_active = 1 And Stunden > 0 Then
  Decr Stunden
  Elseif Digit_active = 2 And Minuten > 0 Then
  Decr Minuten
  Elseif Digit_active = 3 And Sekunden > 0 Then  'neu - Sekunden stellen
  Decr Sekunden
  Elseif Digit_active = 4 And Alarmzeit > 0 Then  'Buzzerzeit stellen(runterzählen)
  Decr Alarmzeit
  Elseif Digit_active = 5 And Standbyzeit > 1 Then  'Standbyzeit stellen(runterzählen)
  Decr Standbyzeit

  End If
  Enc_zaehler = 0
  Else
  Incr Enc_zaehler
  End If
End Sub

Sub Drehtaster  'digit 1=stunden stellen , digit 2=minuten stellen , digit 3=sekunden stellen , digit 4=Alarmzeit stellen . digit 5=Standbyzeit
  Drehtaster_drueck_zeit = 0
  Reset Standby
  Standbytimer = 0
  Do
  Loop Until Drehtaster_pin = 1
  If Drehtaster_drueck_zeit > 5 And Uhr_lauft = 0 Then  'drücke Drehimpulsgeber länger als 5s - aktiviert Alarm- und Standbyzeiteinstellung
  Digit_active = 4
  Start Timer2
  Elseif Drehtaster_drueck_zeit < 3 Then  'drücke Drehimpulsgeber kürzer als 3s - schaltet die Zahlenstellen Minuten bis Stunden oder Alarm- und Standbyzeit durch
  If Digit_active = 1 Then
  Digit_active = 2
  Elseif Digit_active = 2 Then
  Digit_active = 3
  Elseif Digit_active = 3 Then
  Digit_active = 1
  Elseif Digit_active = 4 Then
  Digit_active = 5
  Elseif Digit_active = 5 Then
  Digit_active = 4
  End If
  Elseif Drehtaster_drueck_zeit >= 3 And Uhr_lauft = 0 Then  'drücke Drehimpulsgeber länger als 3s und max.5s - setze Anzeige zurück auf 00:00:00
  Stunden = 0
  Minuten = 0
  Sekunden = 0

  End If

End Sub

'*** Interrupt-Routinen ********************************************************
Ontimer1:  'Aufruf im Sekundentakt
  Set Beepton
  Timer1 = 7936  '65536-7936=57600 => 1Hz

  If Standby_sek <= 60 Then  'Umwandeln der Sekunden für die Standbyzeit in Minuten
  Standby_sek = Standby_sek + 1
  Else
  Standby_sek = 1
  If Standbytimer < Standbyzeit Then
  Incr Standbytimer
  End If
  End If
  If Drehtaster_drueck_zeit < 255 Then Incr Drehtaster_drueck_zeit  'Drehtasterdrückzeit begint mit hochzählen
  If Alarmtimer <= Alarmzeit Then Incr Alarmtimer  'Alarmtimer beginnt mit hochzählen
  If Uhr_lauft = 1 Or Alarmtimer < Alarmzeit Then Standbytimer = 0
  If Standbytimer >= Standbyzeit Then
  Set Standby
  End If
  Toggle Doppelpunkt  'Doppelpunkte blinken im Sekundentakt - LED´s sind nicht angeschlossen
  If Stunden = 0 And Minuten = 0 And Sekunden = 1 Then  'Auswertung Countdown 00:00:00
  Reset Uhr_lauft
  Alarmtimer = 0
  Sekunden = 0
  Set Anzeigeblinken
  Start Timer2
  End If
  If Stunden = 0 And Minuten = 0 And Sekunden = 0 And Alarmtimer = Alarmzeit Then  'bei erreichen der Alarmzeit Standbytimer auf Null setzen
  Standbytimer = 0
  End If
  If Sekunden < 60 And Uhr_lauft = 1 Then Decr Sekunden  'Uhrenroutine
  If Sekunden > 60 Then
  Sekunden = 59
  If Minuten < 60 Then Decr Minuten
  If Minuten > 60 Then
  Minuten = 59
  If Stunden < 23 Then Decr Stunden
  End If
  End If
Return

Ontimer0:  'Der Multiplexer!
  Timer0 = 1000  '= 400Hz
  'Hier wird die Umschaltsequenz (Multiplexen) der 6 Segmente erzeugt!
  Multiplex = Multiplex * 2
  If Multiplex = 64 Then Multiplex = 1

  '400Hz/6Segmente=> 66Hz. Die kpl. Anzeige wird also mit 66Hz gemultiplext!
  Sek_zehner = Sekunden / 10  'Stellenanzeigeroutine für Sekunden(00), Minuten(00) und Stunden(00)
  Sek_einer = Sek_zehner * 10
  Sek_einer = Sekunden - Sek_einer
  Min_zehner = Minuten / 10
  Min_einer = Min_zehner * 10
  Min_einer = Minuten - Min_einer
  Std_zehner = Stunden / 10
  Std_einer = Std_zehner * 10
  Std_einer = Stunden - Std_einer

  Portd = &B00000000  'Alle Segmente vor dem Umschalten ausschalten
  Portc = Multiplex  'Das anzusteuernde Segment auswählen

  If Multiplex = 1 Then Wert = Sek_einer  'Ab hier erfolgt die Zuordnung von Anzeige und Wert
  If Multiplex = 1 And 2hz_zaehler = 0 And Digit_active = 3 And Anzeigeblinken = 0 Then Wert = 10  'Zahlenstelle(Sekunden-Einer) beim stellen blinken
  If Multiplex = 2 Then Wert = Sek_zehner
  If Multiplex = 2 And 2hz_zaehler = 0 And Digit_active = 3 And Anzeigeblinken = 0 Then Wert = 10  'Zahlenstelle(Sekunden-Zehner) beim stellen blinken
  If Multiplex = 4 Then Wert = Min_einer
  If Multiplex = 4 And 2hz_zaehler = 0 And Digit_active = 2 And Anzeigeblinken = 0 Then Wert = 10  'Zahlenstelle(Minuten-Einer) beim stellen blinken
  If Multiplex = 8 Then Wert = Min_zehner
  If Multiplex = 8 And 2hz_zaehler = 0 And Digit_active = 2 And Anzeigeblinken = 0 Then Wert = 10  'Zahlenstelle(Minuten-Zehner) beim stellen blinken
  If Multiplex = 16 Then Wert = Std_einer
  If Multiplex = 16 And 2hz_zaehler = 0 And Digit_active = 1 And Anzeigeblinken = 0 Then Wert = 10  'Zahlenstelle(Stunden-Einer) beim stellen blinken
  If Multiplex = 32 Then
  If Std_zehner = 0 And Uhr_stellen = 0 And Anzeigeblinken = 0 And Uhr_lauft = 1 Then  'Wenn Std.zehner 0 soll die Anzeige dunkel bleiben
  Wert = 10  '10 bedeutet => Segment aus
  Else
  Wert = Std_zehner
  End If
  End If

  If Multiplex = 32 And 2hz_zaehler = 0 And Digit_active = 1 And Anzeigeblinken = 0 Then Wert = 10  'Zahlenstelle(Stunden-Zehner) beim stellen blinken
  If Anzeigeblinken = 1 And 2hz_zaehler = 0 And Alarmtimer < Alarmzeit Then Wert = 10  'alle Anzeigen blinken 00:00:00 solange wie Buzzer aktiv

  If Digit_active = 4 Then  'Stellenanzeigeroutine für Alarmzeitanzeige(00)
  Alarmzeit_zehner = Alarmzeit / 10
  Alarmzeit_einer = Alarmzeit_zehner * 10
  Alarmzeit_einer = Alarmzeit - Alarmzeit_einer
  If Multiplex > 2 Then
  Wert = 10
  Elseif Multiplex = 1 Then
  Wert = Alarmzeit_einer
  If Multiplex = 1 And 2hz_zaehler = 0 And Digit_active = 4 Then Wert = 10  'Zahlenstelle(Alarmzeit-Einer) beim stellen blinken
  Elseif Multiplex = 2 Then
  Wert = Alarmzeit_zehner
  If Multiplex = 2 And 2hz_zaehler = 0 And Digit_active = 4 Then Wert = 10  'Zahlenstelle(Alarmzeit-Zehner) beim stellen blinken
  End If
  End If

  If Digit_active = 5 Then  'Stellenanzeigeroutine für Standbyzeitanzeige(00)
  Standbyzeit_zehner = Standbyzeit / 10
  Standbyzeit_einer = Standbyzeit_zehner * 10
  Standbyzeit_einer = Standbyzeit - Standbyzeit_einer
  If Multiplex > 8 Or Multiplex < 4 Then
  Wert = 10
  Elseif Multiplex = 4 Then
  Wert = Standbyzeit_einer
  If Multiplex = 4 And 2hz_zaehler = 0 And Digit_active = 5 Then Wert = 10  'Zahlenstelle(Standbyzeit-Einer) beim stellen blinken
  Elseif Multiplex = 8 Then
  Wert = Standbyzeit_zehner
  If Multiplex = 8 And 2hz_zaehler = 0 And Digit_active = 5 Then Wert = 10  'Zahlenstelle(Standbyzeit-Zehner) beim stellen blinken
  End If
  End If

  If Standby = 1 Then Wert = 10  'wenn Standby aktiviert - alle Anzeigen aus
  'Hier erfolgt die die Auswahl (Dekodierung) welche Segmente leuchten sollen
  Select Case Wert
  Case 0
  Portd = &B00111111  '0
  Case 1
  Portd = &B00000110  '1
  Case 2
  Portd = &B01011011  '2
  Case 3
  Portd = &B01001111  '3
  Case 4
  Portd = &B01100110  '4
  Case 5
  Portd = &B01101101  '5
  Case 6
  Portd = &B01111101  '6
  Case 7
  Portd = &B00000111  '7
  Case 8
  Portd = &B01111111  '8
  Case 9
  Portd = &B01101111  '9
  Case Else
  Portd = &B00000000  'Anzeige dunkel schalten
  End Select
Return

Ontimer2:  'Timer2(14Hz) für Zahlenblinker(2Hz) beim stellen
  Incr Timer2_zaehler  'Zähler zählt bis 7 dann wieder 0
  If Timer2_zaehler = 7 Then
  Timer2_zaehler = 0
  Toggle 2hz_zaehler  'durch toggle werden 2Hz Blinkfrequenz erreicht
  End If
Return
 

Anhänge

  • Küchentimer_fertig_mit_Sekunden_stellen_02.08.2015_fertig.zip
    3,9 KB · Aufrufe: 15
Zuletzt bearbeitet:
  • Like
Reaktionen: maik und Dirk

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)