Kuchenny Timer


8.28571
Ocena: None Średnia: 8.3 (7 głosujących)

Urządzenie to jak sama nazwa wskazuje jest timerem kuchennym. Ma za zadanie odliczać ustalone przedziały czasu podczas przygotowywania różnorodnych potraw. Przyda się każdemu oddanemu nauce studentowi i uchroni jego obiad przed spaleniem lub chociaż kuchnię przed nadmierną ilością dymu. Timer posiada pięcioprzyciskową klawiaturę na której w prosty sposób można ustawić czas od 1 minuty do 99 godzin!. Odliczanie czasu rozpoczyna się automatycznie gdy skończymy ustawiać rządany czas (po 3 sekundach). Urządzenie zbudowane jest w oparciu o mikrokontroler ATMega8. Głośny Buzzer sprawi że użytkownik napewno usłyszy alarm :)

Działanie:


Schemat ideowy Timera przedstawiony jest na rysunku poniżej:

Sercem urządzenia jest mikrokontroler U1 (ATMega8) wraz z rezonatorem kwarcowym X1 (16MHz) i dwoma kondensatorami C1 (22pF) i C2 (22pF). Stabilizator U2 (7805) oraz kondensatory C3 (100uF) i C4 (47uF) dostarczają napięcia na poziomie 5V wymaganego do poprawnej pracy mikrokontrolera i współpracujących elementów. Do złącza Zas podpinamy napięcie stałe o wartości ok 7-12V. Buzzer B1 oraz anody wyświetlacza W1 sterowane są za pomocą tranzystorów T1 - T5 (BC556) i rezystorów R1 - R8 (3,3k) oraz R17 (3,3k) i R18 (3,3k). Prąd segmentów wyświetlacza ograniczają rezystory R9 - R16 (330R). Złącze Prog (goldpin) i pojedynczy pin R służą do podłączenia programatora (kabla programującego). Klawiaturę timera podłączamy do złącza Sw (Goldpin). Klawiaturę stanowi 5 przycisków chwilowych podłączonych do masy i pinów B.0...B.4, co odpowiada przyciskom w kolejności: 1,5,10,20,CL.

Budowa:


Timer można zbudować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj. Montaż należy rozpocząć od wlutowania dwóch zworek. Następnie montujemy wszystkie rezystory i pozostałe elementy w kolejności od najmniejszych do największych. Rezonator kwarcowy X1 powinien być w wersji "niskiej" gdyż w przeciwnym wypadku nie zmieści się pod wyświetlaczem. Pod mikrokontroler U1 dobrze jest zastosować podstawkę DIP28 a pod wyświetlacz podstawkę DIP14 przeciętą na dwie części. Buzzer B1 może być wlutowany w płytkę, tak jak to jest przedstawione na zdjęciach, jednak gdyby okazało się później że po zamknięciu w obudowie jest zbyt cichy (nawet pomimo dziury wywierconej nad nim w obudowie), można przykleić go do boku obudowy (tak jak widać na ostatniej fotografii), łącząc przewodami z płytką. Klawiaturę składającą się z 5 przycisków uSwitch 12x12mm przyklejamy bezpośrednio do przodu obudowy, tak aby były równo z jej powierzchnią. Do zasilania urządzenia dobrze jest zastosować ładowarkę mini z telefonu, ze względu na mały ciężar i wymiary. Pomocą przy budowie może okazać się schemat montażowy dostępny tutaj

Wykaz Elementów:


1x Listwa Goldpin 1x2 (Zas)
1x Listwa Goldpin 1x4 (Goldpin)
1x Listwa Goldpin 1x6 (Goldpin)
5x uSwitch 12x12mm

10x 3,3k
8x 330R
2x 22pF

1x 47uF Elektrolit
1x 100uF Elektrolit

1x Rezonator Kwarcowy 16MHz
5x BC556
1x Stabilizator 7805
1x Mikrokontroler ATMEGA8 + Podstawka
1x Buzzer z Generatorem 5V
1x Wyświetlacz LED poczwórny, wspólna anoda
1x Ładowarka mini do Telefonu

Programowanie:


Mikrokontroler do sterownika został zaprogramowany w wersji demo programu BASCOM AVR firmy MCS Electronics (http://www.mcselec.com/). Program przedstawiony jest poniżej:

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "m8def.dat"
$crystal = 16000000
Config Portb = &B00000000 : Portb = &B11111111
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B11111111 : Portd = &B11111111
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
Enable Interrupts
Buzzer Alias Portc.0
'********** Konfiguracja uC Koniec  ************
'******************  Zmienne *******************
'***********************************************
Dim Flaga_4ms As Bit
Dim Mig As Bit
Dim Dwukropek As Bit
Dim Odliczanie As Bit
Dim Wyswietlanie As Bit
Dim Alarm As Bit
Dim Ktory_w As Byte
Dim Wartosc(2) As Byte                                      'godziny minuty : minuty sekundy
Dim W(4) As Byte                                            '4 cyfry wyswietlane po przeliczeniu z powyzszych
Dim Co4ms As Byte , Co1s As Byte
Dim G As Byte , M As Byte , S As Byte
Dim Buz_sygnal As Byte
Dim Sw_port As Byte , Stan_portu As Byte , Licznik_sw As Byte
Dim Autostart As Word
Dim Autooff As Word
Dim Licznik_mig As Byte
'*************  Zmienne Koniec  ****************
'**************  Petla glowna ******************
'***********************************************
Do
If Flaga_4ms = 1 Then
  Flaga_4ms = 0
 
  If Buz_sygnal > 0 Then
    Buzzer = 0
    Decr Buz_sygnal
  Else
    Buzzer = 1
  End If
 
  If Odliczanie = 0 Then
    If Autostart > 0 Then                                   'uruchomienie autostart=750
      Decr Autostart
      If Autostart = 1 Then
        Buz_sygnal = 40
        Odliczanie = 1
        Timer0 = 6
        Co4ms = 0
        S = 0
      End If
    End If
  Else
    Autostart = 0
  End If
 
  If Wyswietlanie = 1 Then
    Gosub Wyswietl
    If Odliczanie = 0 And Alarm = 0 Then
      Incr Autooff
      If Autooff = 2500 Then
        Wyswietlanie = 0
      End If
    Else
      Autooff = 0
    End If
  Else
    Portd = 255
    Portc = 255
  End If
 
  Gosub Przyciski
End If
Loop
End
'************ Petla glowna Koniec **************
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:                                                  'co 4ms
Timer0 = 6
Set Flaga_4ms
Incr Co4ms
If Co4ms = 250 Then
  Co4ms = 0
  If Odliczanie = 1 Then
    Dwukropek = Not Dwukropek
    Decr S
    If S = 255 Then
      S = 59
      Decr M
      If M = 255 Then
        M = 59
        Decr G
      End If
    End If
 
    If G = 0 And M = 0 And S = 0 Then
      Odliczanie = 0
      Alarm = 1
    End If
  Else
    Dwukropek = 0
  End If
End If
Return
'******** Przerwanie timer 0 Koniec ************
Przyciski:
Sw_port = Pinb And &B00011111
 
If Sw_port <> 31 And Stan_portu = Sw_port Then
    Incr Licznik_sw
    If Licznik_sw = 120 Then
      Licznik_sw = 0
      Buz_sygnal = 10
      Autooff = 0
      Wyswietlanie = 1
      Select Case Stan_portu
        Case 30:
         If Alarm = 0 Then
           Incr M
           Autostart = 750
         End If
        Case 29:
         If Alarm = 0 Then
           M = M + 5
           Autostart = 750
         End If
        Case 27:
         If Alarm = 0 Then
           M = M + 10
           Autostart = 750
         End If
        Case 23:
         If Alarm = 0 Then
           M = M + 20
           Autostart = 750
         End If
        Case 15:
         Odliczanie = 0
         Autostart = 0
         S = 0
         M = 0
         G = 0
         Alarm = 0
      End Select
 
      If M > 59 Then
        Incr G
        M = M Mod 60
      End If
 
    End If
  Else
    Stan_portu = Sw_port
    Licznik_sw = 70
  End If
Return
'*************************************************
Wyswietl:
 Incr Ktory_w
  If Ktory_w = 4 Then Ktory_w = 0
 
  If G > 0 Then
    Wartosc(1) = G
    Wartosc(2) = M
  Else
    Wartosc(1) = M
    Wartosc(2) = S
  End If
 
  W(1) = Wartosc(1) / 10
  W(2) = Wartosc(1) Mod 10
  W(3) = Wartosc(2) / 10
  W(4) = Wartosc(2) Mod 10
  If W(1) = 0 Then W(1) = 10
 
  If Alarm = 1 Then
    Incr Licznik_mig
    If Licznik_mig = 50 Then
      Licznik_mig = 0
      Mig = Not Mig
    End If
 
    If Mig = 0 Then
      W(1) = 11
      W(2) = 11
      W(3) = 11
      W(4) = 11
      Dwukropek = 0
      Buzzer = 0
    Else
      W(1) = 10
      W(2) = 10
      W(3) = 10
      W(4) = 10
      Dwukropek = 1
      Buzzer = 1
    End If
  End If
 
  Select Case Ktory_w
  Case 0:
    Set Portc.2
    W(4) = Lookup(w(4) , Tabela)
    Portd = W(4)
    Portd.7 = Dwukropek
    Reset Portc.5
  Case 1:
    Set Portc.5
    W(3) = Lookup(w(3) , Tabela)
    Portd = W(3)
    Portd.7 = Dwukropek
    Reset Portc.4
  Case 2:
    Set Portc.4
    W(2) = Lookup(w(2) , Tabela)
    Portd = W(2)
    Portd.7 = Dwukropek
    Reset Portc.3
  Case 3:
    Set Portc.3
    W(1) = Lookup(w(1) , Tabela)
    Portd = W(1)
    Portd.7 = Dwukropek
    Reset Portc.2
  End Select
 
Return
*************************************************
Tabela:
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 , 255 , 191
'znak:    0     1     2     3     4     5     6     7     8     9    pusty  -

Zdjęcia Projektu:

ZałącznikWielkość
Schemat67.59 KB
Płytka15.08 KB
Płytka (odbicie lustrzane)15.08 KB
Płytka (6 na stronie)76.61 KB
Montowanie20.21 KB
Kod Źródłowy5.39 KB
Program po Kompilacji (BIN)1.84 KB
Program po Kompilacji (HEX)5.2 KB
Nadruk na obudowę115.87 KB



Portret użytkownika Mat

to o co chodzi z tym że można

to o co chodzi z tym że można ustawić np. kwarc zewnętrzny a potem już się nie skomunikować z procesorem?
Zależy od programatora? Jeśli bym np. ustawił zewnętrzny kwarc 16MHz, to przy kolejnym wpięciu procesora w podstawkę gdzie nie będzie kwarcu, możemy się nie dogadać z procesorem? to o to chodzi??
Fusebity można kilkakrotnie zmieniać? Bo słyszałem że jak coś źle ustawimy to potem procek tylko w kosz.

Portret użytkownika mirley

Re: Timer kuchenny

Zmień crystal na 8000000, w procedurze obsługi timera tam gdzie masz timer0= 6 napisz timer0 = 131 i powinno działać na wewnętrznym 8MHz

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gość

timer

witam czy da sie do tego podłączyć przekaźnik, który podczas odliczania czasu będzie sie zwierał a gdy czas dobiegnie końca wyłączy przekaźnik??

Portret użytkownika mirley

Re: przekaźnik

wykorzystaj wolny np portc.1 i przypisz do niego wartośc zmiennej odliczanie. W pętli glównej dopisz w miejscu:

  ......
  Gosub Przyciski
  portc.1 = not odliczanie           'to dopisz

portc.1 będzie 0 w momencie odliczania a 1 jak odliczanie będzie zatrzymane

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Johny

Kwarc

Powracam do problemów z kwarce. Mianowicie czy ma jakies znaczenie jak zamontuje kwarc 8 Mhz zewneczny a 4 Mhz wewnetrzny. Wiem ze trzeba pozmieniac w programie. jaki jest błąd dokładności i jak najlepiej zrobic (zwenetrzy czy wewnetrzny) ??

Portret użytkownika mirley

Re: Kwarc

Zewnętrzny kwarc jest dość dokładny.... wewnątrz nie ma kwarca a rezonator RC więc jego dokładność pozostawia wiele do życzenia. Osobiście timera bym nie robił. Jak daz kwarc zewnętrzny 8MHz to trzeba zmienić linijkę Timer0 = 6 na Timer0 = 131 żeby była ta sama częstotliwość przerwań. Dla 4 MHz powinno teoretycznie działać jak tylko zmienisz preskaler w konfiguracji timera z 256 na 64

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gosc421

Ten wyświetlacz będzie do

Portret użytkownika mirley

Re: wyswietlacz

Tak mam dokładnie ten od tego samego sprzedawcy

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika shoter09

obojętnie jak przylutuje

obojętnie jak przylutuje rezonator czy trzeba go jakoś dobrze włożyć ?

Portret użytkownika mirley

Re: Timer

Rezonator kwarcowy może być wlutowany dowolnie, nie ma polaryzacji (+ i -)tak jak np. dioda

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika shoter09

mirley zrobiłem wszystko tak

mirley zrobiłem wszystko tak jak Ty i jak podłącze zasilanie (12V) to nie działa a jak sprawdze miernikiem to na procesorze jest +5V o co w tym chodzi ?

Portret użytkownika mirley

Re: Timer

A zaprogramowałes procesor? ustawiłeś fusebity? czy sam wyświetlacz działa jak wyjmiesz procesor z podstawki i przytkniesz odpowiednie piny do masy?

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika shoter09

procek zaprogramowałem,

procek zaprogramowałem, wyświetlacz działa a fuse bitów nie zmieniałem

Portret użytkownika mirley

Re: Fusebity

Ustaw fusebity na zewnętrzny kwarc.... patrz artykuł na temat fusebitow na mojej stronie.

Potem włącz układ i kliknij któryś z przycisków.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika shoter09

zmieniłem fusy na takie jak

zmieniłem fusy na takie jak tu http://mirley.firlej.org/files/ART_fuseM8_02B.gif i teraz nie moge nic zaprogramowac na procku i nie moge odczytac fuse bitów

Portret użytkownika mirley

Re: Kwarc

A masz podłączony do procka kwarc i kondensatory 22pF?

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika shoter09

tak, mam wszystko podłączone

tak, mam wszystko podłączone tak jak podałeś w opisie

Portret użytkownika mirley

Re: Timer

TO musi wszystko działać bo fusebity są dobrze. Sprawdź kondensatory i czy nie ma zwarć przy kwarcu

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Łukasz

pytanie ??

Mam pytanie co trzeba zmienic w programie zeby buzer po skonczeniu odliczania pikal np. tylko 10sekund i zostawaly tylko te kreski --:-- lub poprostu wygaszal wyswietlacz ??

Portret użytkownika mirley

Re: timer

W tym fragmencie dopisz:

 
  If Alarm = 1 Then
    Incr Licznik_mig
    If Licznik_mig = 50 Then
      Licznik_mig = 0
      Mig = Not Mig
      incr czas_alarm
      if czas_alarm = 10 then
        czas_alarm = 0
        Odliczanie = 0
        Autostart = 0
        S = 0
        M = 0
        G = 0
        Alarm = 0
      end if
    End If

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Łukasz

dzieki za szybką odpowiedz testowałem działa .. ale

testowaęłm zmieniony program na nowym procku wgrałem wsad ustawiłem fusbity na "External Crystal, High Frequency wszystko przeleciało i wydawalo mi sie ze jest ok. progrqam działa tak jak należy ale teraz mam problem nie moge sie dostac do procka procesor nie widzi atmegi :( zrobilem układ rc bo go wystartowac ale tym razem nie zadziałał :( tera mi chyba tylko pozostał programator równoległy ?? czy jakś można go ożywić

Portret użytkownika mirley

Re: Timer kuchenny

Do zaprogramowania procka potrzebny jest kwarc. Podłącz programator do płytki timera do złącza prog i zaprogramujesz. Albo dołącz zewnętrznie do procka kwarc i dwa kondensatory. Wnioskuje że programowałeś poza układem

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Łukasz

Układ był programowany twoim

Układ był programowany twoim programatorem Programator z którego mam wyciagniete kable do programowania w układzie procesora , dziwna sprawa bo programa działa bez zarzutu zreszta programator słuzy mi juz ponad rok i nie bylo z nim problemow .Sprawdzalem dzis inny procek ATmega8A-PU wgrałem orginalny wsad do procka z twojej strony fusy na "External Crystal, High Frequency" i znów to samo program działa bez zarzutów a do procesora nie mam juz dostępu.. i niestety troche mnie to martwi ..

Portret użytkownika darek793

Timer dziwne zachowanie

Zrobiłem układ wg. schematu. Zaprogramowałem megę i niestety timer zwariował. Po podłączeniu zasilania zaczął liczyć do przodu co 20. Wcześniej zrobiłem go na innej płytce(psełdoprototypowej) i wszystko działało, a teraz nie. Nie wiem w czym problem. Kwarc, kondensatory, poprawne zasilanie - obecne. Może miałeś, lub ktoś z forum, podobny problem i znasz rozwiązanie. Aby wyeliminować błędy Atmega programowana kilkukrotnie.Proszę o pomoc

Portret użytkownika IMEX2

Szukaj ..

Szukaj Zwarcia gdzieś na płytce - jeSli ja sam robiłeś ?

-

Grzesiek - miasto Ostróda

GG 12372371 dom
tel 502812675 SMS

Portret użytkownika darek793

re szukaj

Dziękuje za zainteresowanie. W chwili wolnego od kieratu przejrzę PCB. Mam inny wyświetlacz niż w projekcie , dlatego też musiałem zaprojektować nieco inną płytkę, więc jest szansa, że coś sknociłem. Powiadomię o rezultacie. W międzyczasie jednak pojawił się następny, równie dziwny problem. Zakupiłem Atmegę8A. Jak wiadomo ma być godną następczynią popularnej 8. By ją sprawdzić wgrałem prosty program do migania diodą ale niestety nic się nie dzieje.
Ten sam program na zwykłej "ósemce", w tym samym układzie, jest realizowany poprawnie. Pinout obu scalaków zgodny, więc nie ma mowy o pomyłce portów. Fusy nie ruszane. Zastanawiam się czy przypadkiem mega nie jest uszkodzona. Teoretycznie przecież powinna działać. Ma ktoś może jakieś sugestie?

Portret użytkownika mirley

Re: m8

M8A powinna się normalnie programować, używałem jej już wielokrotnie. Samochodzący timer do przodu jest zwiastunem zwarcia na pinach klawiatury. Podczas odliczania słychać buzzer pikający?

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika darek793

Re: m8

Dziękuję za poradę. Niestety nie miałem podpiętego buzera, więc nie wiem czy pikał. Tymczasowo miałem w jego miejsce podpiętą diodę led i ona migała. Idąc najprostszą drogą rozebrałem cały układ i mam zamiar zrobić go od nowa. Zmieniam trochę koncepcję i umieszczam wyświetlacz wraz z driverami i rezystorami na oddzielnej płytce a następnie połączę wszystko taśmą. Mam obudowę z odzysku i chcę ją jakoś wykorzystać. Może tym razem mi się uda:) Odnośnie m8A to na 99% jest uszkodzona. Normalnie się programuje, normalnie jest rozpoznawana ale stany portów się nie zmieniają. Miałem pecha trafić na jedną z milionów.

Portret użytkownika Andre

+ odliczanie do przodu

Tak sobie myślę (projektując w międzyczasie płytkę), czy możnaby, po skończonym odliczaniu wstecz, wysyłać przerywany sygnał do buzera, i czas odliczać do przodu? Chodzi o dźwiękową sygnalizację czasu, który upłynął, oraz odliczanie czasu, który upłynął od momentu osiągnięcia punktu "0".
Chciałoby Ci się?

-

Andre

Portret użytkownika mirley

Timer

Spróbuj w procedurze wyświetlania zmienić:

   If Mig = 0 Then
      W(1) = 11
      W(2) = 11
      W(3) = 11
      W(4) = 11
      Dwukropek = 0
      Buzzer = 0
    Else
      W(1) = 10
      W(2) = 10
      W(3) = 10
      W(4) = 10
      Dwukropek = 1
      Buzzer = 1
    End If
  End If

na:
   If Mig = 0 Then
      Dwukropek = 0
      Buzzer = 0
    Else
      W(1) = 10
      W(2) = 10
      W(3) = 10
      W(4) = 10
      Dwukropek = 1
      Buzzer = 1
    End If
  End If

oraz w timerze zmienić If z odliczaniem:

If Odliczanie = 1 Then
    Dwukropek = Not Dwukropek
    Decr S
    If S = 255 Then
      S = 59
      Decr M
      If M = 255 Then
        M = 59
        Decr G
      End If
    End If
 
    If G = 0 And M = 0 And S = 0 Then
      Odliczanie = 0
      Alarm = 1
    End If
  Else
    Dwukropek = 0
    if Alarm = 1 then
      incr S
      if S = 60 then
        S = 0
        incr M
        if M = 60 then
          M = 0
          incr G
        End if
      End if
    End If
  End If

Teraz po doliczeniu do końca wyświetlacz będzie migał i pokazywał czas jaki upłynął od włączenia alarmu. Po nacisnięciu CL czas się skasuje..... Sprawdź czy działa bo nie testowałem

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Andre

Kropki

Czy aby kropki (DP) świeciły cały czas (lub tylko jedna z nich), wystarczy nóżkę 3 podpiąć pod zasilanie przez rezystor 470R? A może da się tym jeszcze sterować (wolne PC1?)? Wtedy przy korzystaniu z urządzenia, kropki byłyby wygaszone, a zapalałyby się w momencie wygaszenia cyfr na wyświetlaczu.
Chodzi mi o to, żeby urządzenie wskazywało cały czas (najlepiej na wyświetlaczu), że żyje.

No chyba, że robi to już dwukropek :)

-

Andre

Portret użytkownika mirley

Re: Timer Kuchenny

Można podłączyć do nóżki 3 rezystor do masy. Wszystkie kropki powinny wtedy zawsze świecić. Prościej jest zrobić aby dwukropek się zaświecił... w programie w miejscu:

.....
      Odliczanie = 0
      Alarm = 1
    End If
  Else
    Dwukropek = 0
  End If
End If
Return

Zmień Dwukropek = 0 na Dwukropek = 1 i powinno wystarczyć

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Andre

Kod po zmianach - program nie działa

Hej.

Już działa - za dużo dobrego chciałem uzyskać :)
Niepotrzebnie wrzuciłem "mryganie po odliczeniu".

Po kilku miesiącach udało mi się przysiąść i skończyć urządzenie :)

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "m8def.dat"
$crystal = 16000000
 
Config Portb = &B00000000 : Portb = &B11111111
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B11111111 : Portd = &B11111111
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
Enable Interrupts
 
Buzzer Alias Portc.0
 
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Flaga_4ms As Bit
Dim Mig As Bit
Dim Dwukropek As Bit
Dim Odliczanie As Bit
Dim Wyswietlanie As Bit
Dim Alarm As Bit
Dim Ktory_w As Byte
 
Dim Wartosc(2) As Byte                                      'godziny minuty : minuty sekundy
Dim W(4) As Byte                                            '4 cyfry wyswietlane po przeliczeniu z powyzszych
 
Dim Co4ms As Byte , Co1s As Byte
Dim G As Byte , M As Byte , S As Byte
 
Dim Buz_sygnal As Byte
Dim Sw_port As Byte , Stan_portu As Byte , Licznik_sw As Byte
Dim Autostart As Word
Dim Autooff As Word
Dim Licznik_mig As Byte
'*************  Zmienne Koniec  ****************
 
'************ Warunki Poczatkowe ***************
'***********************************************
 
'*******  Warunki Poczatkowe Koniec  ***********
 
'**************  Petla glowna ******************
'***********************************************
Do
 
If Flaga_4ms = 1 Then
  Flaga_4ms = 0
 
  If Buz_sygnal > 0 Then
    Buzzer = 0
    Decr Buz_sygnal
  Else
    Buzzer = 1
  End If
 
  If Odliczanie = 0 Then
    If Autostart > 0 Then                                   'uruchomienie autostart=750
      Decr Autostart
      If Autostart = 1 Then
        Buz_sygnal = 40
        Odliczanie = 1
        Timer0 = 6
        Co4ms = 0
        S = 0
      End If
    End If
  Else
    Autostart = 0
  End If
 
  If Wyswietlanie = 1 Then
    Gosub Wyswietl
    If Odliczanie = 0 And Alarm = 0 Then
      Incr Autooff
      If Autooff = 2500 Then
        Wyswietlanie = 0
      End If
    Else
      Autooff = 0
    End If
  Else
    Portd = 255
    Portc = 255
  End If
 
 
 
  Gosub Przyciski
 
End If
 
 
Loop
End
'************ Petla glowna Koniec **************
 
 
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:                                                  'co 4ms
Timer0 = 6
Set Flaga_4ms
Incr Co4ms
If Co4ms = 250 Then
  Co4ms = 0
 
'zastąpienie - odliczanie do przodu po osiągnięciu pierwotnie ustawionego czasu
 
'  If Odliczanie = 1 Then
'    Dwukropek = Not Dwukropek
'    Decr S
'    If S = 255 Then
'      S = 59
'      Decr M
'      If M = 255 Then
'        M = 59
'        Decr G
'      End If
'    End If
'
'    If G = 0 And M = 0 And S = 0 Then
'      Odliczanie = 0
'      Alarm = 1
'    End If
'  Else
'    Dwukropek = 1
'  End If
 
If Odliczanie = 1 Then
    Dwukropek = Not Dwukropek
    Decr S
    If S = 255 Then
      S = 59
      Decr M
      If M = 255 Then
        M = 59
        Decr G
      End If
    End If
 
    If G = 0 And M = 0 And S = 0 Then
      Odliczanie = 0
      Alarm = 1
    End If
  Else
    Dwukropek = 0
    if Alarm = 1 then
      incr S
      if S = 60 then
        S = 0
        incr M
        if M = 60 then
          M = 0
          incr G
        End if
      End if
    End If
  End If
 
 
End If
 
Return
'******** Przerwanie timer 0 Koniec ************
Przyciski:
Sw_port = Pinb And &B00011111
 
If Sw_port <> 31 And Stan_portu = Sw_port Then
    Incr Licznik_sw
    If Licznik_sw = 120 Then
      Licznik_sw = 0
      Buz_sygnal = 10
      Autooff = 0
      Wyswietlanie = 1
      Select Case Stan_portu
        Case 30:
         If Alarm = 0 Then
           Incr M
           Autostart = 750
         End If
        Case 29:
         If Alarm = 0 Then
           M = M + 5
           Autostart = 750
         End If
        Case 27:
         If Alarm = 0 Then
           M = M + 10
           Autostart = 750
         End If
        Case 23:
         If Alarm = 0 Then
           M = M + 20
           Autostart = 750
         End If
        Case 15:
         Odliczanie = 0
         Autostart = 0
         S = 0
         M = 0
         G = 0
         Alarm = 0
      End Select
 
      If M > 59 Then
        Incr G
        M = M Mod 60
      End If
 
    End If
  Else
    Stan_portu = Sw_port
    Licznik_sw = 70
  End If
Return
 
 
'*************************************************
Wyswietl:
 Incr Ktory_w
  If Ktory_w = 4 Then Ktory_w = 0
 
  If G > 0 Then
    Wartosc(1) = G
    Wartosc(2) = M
  Else
    Wartosc(1) = M
    Wartosc(2) = S
  End If
 
  W(1) = Wartosc(1) / 10
  W(2) = Wartosc(1) Mod 10
  W(3) = Wartosc(2) / 10
  W(4) = Wartosc(2) Mod 10
  If W(1) = 0 Then W(1) = 10
 
  If Alarm = 1 Then
    Incr Licznik_mig
    If Licznik_mig = 50 Then
      Licznik_mig = 0
      Mig = Not Mig
    End If
 
'zastąpienie - odliczanie do przodu po osiągnięciu pierwotnie ustawionego czasu
 
'    If Mig = 0 Then
'      W(1) = 11
'      W(2) = 11
'      W(3) = 11
'      W(4) = 11
'      Dwukropek = 0
'      Buzzer = 0
'    Else
'      W(1) = 10
'      W(2) = 10
'      W(3) = 10
'      W(4) = 10
'      Dwukropek = 1
'      Buzzer = 1
'    End If
'  End If
 
   If Mig = 0 Then
      Dwukropek = 0
      Buzzer = 0
    Else
      W(1) = 10
      W(2) = 10
      W(3) = 10
      W(4) = 10
      Dwukropek = 1
      Buzzer = 1
    End If
  End If
 
 
 
 
  Select Case Ktory_w
  Case 0:
    Set Portc.2
    W(4) = Lookup(w(4) , Tabela)
    Portd = W(4)
    Portd.7 = Dwukropek
    Reset Portc.5
  Case 1:
    Set Portc.5
    W(3) = Lookup(w(3) , Tabela)
    Portd = W(3)
    Portd.7 = Dwukropek
    Reset Portc.4
  Case 2:
    Set Portc.4
    W(2) = Lookup(w(2) , Tabela)
    Portd = W(2)
    Portd.7 = Dwukropek
    Reset Portc.3
  Case 3:
    Set Portc.3
    W(1) = Lookup(w(1) , Tabela)
    Portd = W(1)
    Portd.7 = Dwukropek
    Reset Portc.2
  End Select
 
Return
'*************************************************
Tabela:
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 , 255 , 191
'znak:    0     1     2     3     4     5     6     7     8     9    pusty  -

-

Andre

Portret użytkownika początkujący

Literówka

W akapicie budowa zrobiłeś literówkę napisałeś "Klawiaturę składającą się z 5 prxycisków ...".

Portret użytkownika jakub

brak zasilania

Co się stanie w przypadku chwilowego braku zasilania???Dobre byłoby aby procesor zapamiętał ostatnio zliczony czas i dalej kontynuował liczenie.

Portret użytkownika EDC

Odp. Brak zasilania

W przypadku urządzeń z odliczaniem czasu najczęściej nie stosuje się zapisu do pamięci co sekunde/minutę ponieważ ilośc zapisów w pamięci jest ograniczona. Zapisując te dane ciągle w jednym miejscu szybko pamięć uległaby uszkodzeniu. Są takie wirusy komputerowe które uszkadzają dyski przez to że zapisuja ciągle dane w jednym miejscu.
Znany jest też przypadek fabrycznego błedu radii samochodowych w Audi gdzie poziom głośności był zapisywany do pamięci za każdym kręceniem gałka głośności. Po jakimś czasie radia same zwiększały głośność :D
Jeśli zależy nam na odliczaniu to najrozsądniej, chyba, byłoby podtrzymać zasilanie z baterii lub akumulatorka. Wyświetlacze nie muszą wtedy działać.
Napomknę jeszcze tylko o tym że Atmel opracował sposób na przedłużenie życia pamięci poprzez zapis danych w kolejnych komórkach.

-

BARTek
Moja strona

Portret użytkownika mirley

Re: Timer

Żeby zrobić podtrzymanie bateryjne wystaczy zasilacz procesor przez diodę schotkiego i dołączyc drugą diodę szeregowo z baterią równolegle do zasilania samego procesora..... Chodzi o to żeby wyświetlacz nie pracował na baterii

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika galica01

liczenie czasu pracy silnika

Witam
Mam prośbę o pomoc w zmianie kodu aby ten timer odliczał czas od 00:00 tylko wtedy gdy jeden z przycisków (obojętnie który) jest naciśnięty puszczając przycisk zegar stoi reszta funkcji mnie nie interesuje.Potrzebuję liczyć czas pracy silnika w podajniku kotła Pozdrawiam

Portret użytkownika EDC

Odp. liczenie czasu pracy silnika

Masz już te płytkę wykonaną czy jak? Z jaką dokładnością ma być pomiar czasu, a z jaka wyświetlanie?

-

BARTek
Moja strona

Portret użytkownika galica01

Dziękuje za

Dziękuje za zainteresowanie.Tak płytkę mam wykonaną jeszcze nie wlutowałem części ale to zrobię dziś jak znajdę chwilkę.Pomiar czasu musi być w sekundach a wyświetlanie w minutach.Pozdrawiam

Portret użytkownika EDC

Odp. liczenie czasu pracy silnika

Proszę, powinno działać na tym hardware. Zrobiłem sobie tez wersję na LCD :)

$regfile = "m8def.dat"
$crystal = 16000000
Config Portb = &B00000000 : Portb = &B11111111
Config Portc = &B11111100 : Portc = &B11111111              'nieużywane ustawione jako wejścia
Config Portd = &B11111111 : Portd = &B01111111              'dwukropek wlaczony
 
Config Timer2 = Timer , Prescale = 256 , Compare = Disconnect , Clear Timer = 1
Enable Compare2 : On Compare2 Timer2_isr : Compare2 = 249
 
Dim Ktory_w As Byte
Dim Wartosc(2) As Byte                                      'godziny minuty : minuty sekundy
Dim W(4) As Byte                                            '4 cyfry wyswietlane po przeliczeniu z powyzszych
Dim G As Byte , M As Byte , S As Byte
 
Dim 4ms_flag As Byte , Count As Byte
Const Int_counts = 250                                      ' 4ms x250 = 1s
 
Enable Interrupts
 
'************************* START ***************************
Do
If 4ms_flag = 1 Then
   4ms_flag = 0
 
If Pinb <> 255 Then Incr Count                              'jakikolwiek pin portu B
If Count >= Int_counts Then
    Count = 0
    Incr S
    If S = 60 Then
       S = 0
       Incr M
       If M = 60 Then
          M = 0
          If G < 99 Then Incr G
       End If
    End If
End If
 
Incr Ktory_w
  If Ktory_w = 4 Then Ktory_w = 0
 
  If G > 0 Then
    Wartosc(1) = G
    Wartosc(2) = M
  Else
    Wartosc(1) = M
    Wartosc(2) = S
  End If
 
  W(1) = Wartosc(1) / 10
  W(2) = Wartosc(1) Mod 10
  W(3) = Wartosc(2) / 10
  W(4) = Wartosc(2) Mod 10
  If W(1) = 0 Then W(1) = 10
 
 
  Select Case Ktory_w
  Case 0:
    Set Portc.2
    W(4) = Lookup(w(4) , Tabela)
    Portd = W(4)
    Reset Portc.5
  Case 1:
    Set Portc.5
    W(3) = Lookup(w(3) , Tabela)
    Portd = W(3)
    Reset Portc.4
  Case 2:
    Set Portc.4
    W(2) = Lookup(w(2) , Tabela)
    Portd = W(2)
    Reset Portc.3
  Case 3:
    Set Portc.3
    W(1) = Lookup(w(1) , Tabela)
    Portd = W(1)
    Reset Portc.2
  End Select
 
 
End If
 
Loop
End
 
'**************** KONIEC ********************
 
Timer2_isr:
4ms_flag = 1
Return
 
Tabela:
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 , 255 , 191
'znak:    0     1     2     3     4     5     6     7     8     9    pusty  -

Dwukropek nie miga, a świeci na stałe. Na początku pokazuje sekundy i minuty do momentu aż będzie jakaś godzina.
W razie problemów ze skompilowaniem uaktualnij BASCOM (starsze nie mają Compare dla Timer2 w Mega8).
Miłego użytkowania.

-

BARTek
Moja strona

Portret użytkownika galica01

Coś nie działa i nie wiem gdzie problem

Bartek Płytka poskładana i niby wszystko ok ale ale coś nie działa nie wiem czy coś źle robię czy problem jest po stronie programu.Dwukropek nie świeci a czas jest odliczany do przodu ciągle przyciski nie działają.Mirka program działa poprawnie

Portret użytkownika EDC

Odp. liczenie czasu pracy silnika

Hahaha bo to czwarta w nocy była i mnie poniosło z optymizmem :D
Tę linię:

If Pinb <> 255 Then Incr Count                              'jakikolwiek pin portu B

spróbuj zamienieć na:
If Pinb.0 = 0 Then Incr Count                              'wybierz sobie numer portu Pinb.x

...a dwukropek nie działa bo później operuje sie całym portem i ustawienie go na początku nic nie daje. Podmień więc na coś takiego i powinno być gitara :D
 Select Case Ktory_w
  Case 0:
    Set Portc.2
    W(4) = Lookup(w(4) , Tabela)
    Portd = W(4)
    Portd.7 = 0
    Reset Portc.5
  Case 1:
    Set Portc.5
    W(3) = Lookup(w(3) , Tabela)
    Portd = W(3)
    Portd.7 = 0
    Reset Portc.4
  Case 2:
    Set Portc.4
    W(2) = Lookup(w(2) , Tabela)
    Portd = W(2)
    Portd.7 = 0
    Reset Portc.3
  Case 3:
    Set Portc.3
    W(1) = Lookup(w(1) , Tabela)
    Portd = W(1)
    Portd.7 = 0
    Reset Portc.2
  End Select

Powinno juz ruszyć po tych zabiegach. Dobrze ze zdjagnozowałeś Mirka programem :D

Miłego dnia.

-

BARTek
Moja strona

Portret użytkownika galica01

Teraz działa poprawnie

Teraz działa poprawnie wielkie dzięki Bartek:)
Płytka fajnie działa a że są jeszcze przyciski to mam jeszcze jeden pomysł jak byś miał ochotę mi jeszcze pomóż to bym się ucieszył.

Chciałbym dodać jeszcze ilość spalonego węgla w kg. Pomysł mam taki podajnik podaje węgiel ze stałą prędkością i już to sprawdziłem że gdzieś około 0.27kg na minutę pracy podajnika więc fajnie aby to atmega przeliczyła i podawała wynik w kg na trzech segmentach wyświetlacza a czwarty segment po kropce dekagramach.Fajnie by było jak by zegar został tak jak jest teraz a przyciskiem zmieniać z czasu na kg zależy na co się chce popatrzeć. A już wogóle było by fajnie jak by ten przelicznik czasu na kg dało się ustawić pozostałymi przyciskami wykładnikiem przeliczania była by minuta pracy podajnika a zmieniać tylko dekagramy.

Nie wiem co na to Mirek ale jestem wstanie postawić flachę wiem że to korupcja :D ale czasy są takie że nie bardzo się chce komuś coś robić za free :D

Portret użytkownika EDC

Odp.liczenie czasu pracy silnika

Zawsze apetyt rośnie w miare jedzenia :D Dam rade, tylko żeby nie dać plamy potestuję najpierw u siebie, ale dopiero jak coś innego skończe. Zajrzyj jutro ;)

-

BARTek
Moja strona

Portret użytkownika galica01

Fajnie dzięki za

Fajnie dzięki za zainteresowanie tematem.
czekam z niecierpliwością :D

Portret użytkownika EDC

Odp. Licznik do podajnika

Proszę kolego. Byłem zajęty praca nad innymi rzeczami. Przepraszam za spóźnienie :) Pod tym linkiem (bo nie chcę śmiecić tu pod projektem) znajdziesz listing programu który napisałem. Nie mam tylu wyświetlaczy by przetestować, ale sprawdziłem kilka rzeczy na wyświetlaczu LCD. Powinno działać tak: Wyświetla albo Czas, jak przedtem, albo Kilogramy (przeliczone z czasu pracy w minutach * porcja). Jeśli naciśniesz przyciski góra lub dół to na chwilę wyświetlona będzie porcja w dekagramach na minute :) Dla wygody zmian wszystkie konfigurowalne sprawy łącznie z przydzieleniem funkcji przyciskom umieściłem na początku listingu. Program pamięta tez wartość kilogramów i wartość dekagramów na minutę.
Zapomniał bym o kropce ;) Jest oprogramowana i powinna działać jeśli podłączysz DP wyświetlacza do portu obsługującego wcześniej Buzzer (poprzez rezystor tak jak katody abcdefgh).

Daj znać co i jak ;)
Miłej zabawy.

PS. Po chwili wydaje mi się że program będzie wymagał małej korekty. Przy dzieleniu zmiennej typu Word lub Integer wynik powinien być przypisywany zmiennej tego samego typu czyli Integer a dopiero potem rzutowany na Byte. W jednym miejscu nie zostało to zachowane. Zależy mi jednak na razie na tym jak zachowuje się wyświetlanie.

-

BARTek
Moja strona

Portret użytkownika galica01

Zegar działa poprawnie jak

Zegar działa poprawnie jak było wcześniej zmiana z czasu na kg też działa ok przyciski zmiany ilości dekagramów działają ok zakres jest od 15 do 40 ok problem jaki zauważyłem to jak nacisnę którykolwiek z przycisków do zmiany dekagramów to nie można z tego wyjść samo też nie wychodzi. Fajnie by było jak by przyciski reagowały mniej czule na przycisk.Czasem po resecie występuje coś takiego że licznik kg zostaje na jakiejś liczbie i nie można tego wykasować nawet po odłączeniu prądu pomaga tylko zmiana wsadu atmegi
Jestem pod wrażeniem działania:D Dzięki za zainteresowanie się tematem:)

Mam taką jeszcze jedną prośbę jak by się dało do po załączeniu czy restarcie wyświetlało kg a nie minuty.
Pozdrawiam

Portret użytkownika EDC

Odp. Licznik do podajnika

Okay :D Takie sprawy zawsze wychodzą dopiero w praniu. Program zapamiętywał wyświetlany własnie tryb w momencie pierwszego nacisnięcia przycisku, ale przy drugim wpisywał tryb ustawiania jako właściwy - naprawiłem to - chyba :)
Ustawiony jest też tryb startowy jako wpis bo nie chciałem mącić w programie który i tak działa u mnie tylko wirtualnie w głowie :D.
Co do przycisków. Mało z nich korzystam, ale dodałem instrukcję "Config debounce" - ona konfiguruje deelay dla przycisków.
Dla przycisków na pięciu różnych pinach procesora postanowiłem z niej skorzystać bo widuję ją w wielu rozwiązaniach zagranicznych a niechęć do jej zastosowania może bierze się z nieznajomości jej konfiguracji. Na mojej stronie zrobiłem skrót do Wiki Bascoma - bardzo fajna sprawa bo wszystko jest pod ręką, na jednej stronie i alfabetycznie ..no i nie trzeba przewijać PDF`a :D
Do przeliczeń dodałem jedną pomocniczą zmienną bo nie muszę chyba w takim projekcie na nich oszczędzać :D
Link pozostał ten sam. W folderze są pliki z przedrostkiem "poprawiony". Tak już na sam koniec, na wszelki wypadek dopisałem możliwość zmiany trybu wyświetlania nawet w momencie bycia w trybie ustawiania.

Miłego dnia.

-

BARTek
Moja strona

Portret użytkownika galica01

Teraz wyjście z przycisków

Teraz wyjście z przycisków jest ok samo wychodzi po chwili lub przez naciśnięcie innego przycisku ale to zwolnienie przycisków spowodowało miganie oraz jaśniejsze świecenie cyfr na wyświetlaczu w momencie naciskania ja bym powrócił do poprzedniego jeśli chodzi o przyciski:).Mam jeszcze takie pytanie czy da się zrobić żeby po resecie zapamiętywało ustawienia jakie były wprowadzone przyciskami albo gdzie można wpisać stałą wartość w programie która się będzie ustawiać po resecie. Jest jeszcze jeden problem jak dojdzie do 10kg to licznik kg idzie od początku tak jak by świeciły tylko dwa segmenty wyświetlacza czas jest ok Jak narazie reszta ok :) Bartek podaj maila :D