와이프가 면 삶을때 시계보고 맞추기 불편하다고 해서 요리할때 사용할수 있는 타이머를 만들어봤습니다.
시간이 정확하진 않겠지만 그리 중요하지 않으니 무시했습니다 ^^;

동작은 SW2 버튼으로 시간을 설정하고 SW1 버튼을 누르면 시계가 거꾸로 가고, 시간이 0이 되면 알람이 울리는 것입니다.

부품도 몇 가지 안됩니다. 
ATTiny26L, 스피커, 스위치 두개, 풀업저항두개, 가변저항 10k ohm, LCD 입니다.

동작시키면 시간(분:초)과 현재 상태를 표시 했습니다.

전원을 9v 배터리로 사용하기 위해 레귤레이터를 이용하여 5v로 다운 하였습니다.



주방에서 사용하기 위해 케이스를 만들었습니다만....
상당히 엉성하네요. ㅠㅠ
어떻게 깔끔하게좀 안될까요?

브레드보드에 있던 회로는 만능기판으로 옮겼습니다.

역시나 이번에도 회로가 막판에 바뀌는 바람에(핑계ㅡㅡ;) 좀 보기 흉합니다. ^^;

SW1 : Start/Stop/time Reset
SW2 : +30 sec

1번 스위치를 한번 누르면 시계가 동작하고 다시 한번 누르면 멈추면서 원래 설정한 시간으로 돌아옵니다.
1번 스위치를 길게 누르면 시간이 0으로 리셋됩니다.

2번 스위치를 한번 누를때마다 설정시간이 30초씩 증가합니다.

옆에 있는 전원 스위치를 없에고 싶었으나 sleep모드를 어떻게 쓰는건지 몰라 포기하고 다음으로 미루었습니다.

작업중 가장 어려웠던 점은 tiny칩의 메모리가 너무 적다는것입니다.
아래 소스보면 아시겠지만 몇줄 안되는데 메모리를 100% 다 사용하더군요.
그래서 소스를 이리 바꾸고 저리 바꾸고 해서 겨우 구겨넣었습니다.
기능을 더 넣고 싶어도 생략하고 최대한 간단하게 넣었습니다.

별건 아니지만 써먹을수 있는걸 만들었다고 생각하니 흐뭇하군요.
얼마나 유용하게 써먹어 줄지는 미지수지만요. ㅎㅎㅎ

$regfile = "attiny26.dat"
$crystal = 4000000
'$sim
$hwstack = 32                                       ' default use 32 for the hardware stack
$swstack = 10                                       ' default use 10 for the SW stack
$framesize = 40                                     ' default use 40 for the frame space

Dim Lsec0 As Long , Lsec1 As Long , Lsec2 As Long , Ltmp As Long , Lmin As Long
Dim Startcooktimer As Byte , Presstime As Long , J As Byte
Dim Idletime As Long

Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0 , E = Porta.6 , Rs = Porta.7
Config Portb = Input

Initlcd
Cls
Cursor Off

'Locate 1 , 1 : Lcd "Cooking"
'Locate 2 , 2 : Lcd "Timer"
'Waitms 1000

Lsec0 = 120

Main:
   Startcooktimer = 0
   Gosub Initcooktimer

   Do
      ' SW 6 : Start/Stop/Reset
      If Pinb.6 = 1 Then
         Waitms 20
         If Pinb.6 = 1 And Lsec0 > 0 Then
            Waitms 200
            If Pinb.6 = 0 Then
               Startcooktimer = 1
               Exit Do
            End If
            Waitms 400
            If Pinb.6 = 0 Then
               Startcooktimer = 1
               Exit Do
            End If
            Waitms 400
            ' Reset
            If Pinb.6 = 1 Then
               Lsec0 = 0
               Gosub Initcooktimer
               Waitms 500
            End If
         End If
      End If
      ' SW 5 : +30 sec
      If Pinb.5 = 1 Then
         Waitms 20
         If Pinb.5 = 1 Then
            Lsec0 = Lsec0 + 30
            If Lsec0 >= 60000 Then
               Lsec0 = 0
            End If
            Gosub Initcooktimer
            Waitms 400
         End If
         'Idletime = 0
      End If
   Loop Until Startcooktimer = 1

   'run timer
   Do
      Decr Lsec1
      Gosub Displaycooktimer

      For J = 1 To 20
         If Pinb.6 = 1 Then
            Waitms 20
            If Pinb.6 = 1 Then
               Do
               Loop Until Pinb.6 = 0
               Startcooktimer = 0
               Gosub Initcooktimer
            End If
         End If
         Waitms 50
      Next J

      If Lsec1 <= 0 Then
         Gosub Playsound
         Exit Do
      End If
   Loop Until Startcooktimer = 0
Goto Main

Playsound:
   Sound Portb.4 , 80 , 500
   Waitms 100
   Sound Portb.4 , 80 , 600
   Waitms 100
   Sound Portb.4 , 80 , 700
   Waitms 500

   If Pinb.6 = 1 Then
      Waitms 20
      If Pinb.6 = 1then
         Do
         Loop Until Pinb.6 = 0
         Return
      End If
   End If
   If Pinb.5 = 1 Then
      Waitms 20
      If Pinb.5 = 1 Then
         Do
         Loop Until Pinb.5 = 0
         Return
      End If
   End If
   Goto Playsound
Return

Initcooktimer:
   Lsec1 = Lsec0
   Gosub Displaycooktimer
Return

Displaycooktimer:
   Cls
   Lmin = Lsec1 / 60
   Ltmp = Lmin * 60
   Lsec2 = Lsec1 - Ltmp
   Locate 1 , 1 : Lcd Lmin
   Locate 1 , 3 : Lcd ":"
   Locate 1 , 5 : Lcd Lsec2
   If Startcooktimer = 1 Then
      Locate 2 , 1 : Lcd "Start"
   Else
      Locate 2 , 1 : Lcd "Stop "
   End If
Return



  1. BlogIcon 푸른해아 2009.10.15 10:33 신고

    ㅎㅎ 나무나 아크릴등으로 간단하게 케이스를 주면 더 예쁠 것 같은데요.

    그런데 점점 실용화 되어가네요. 작동은 잘 되나요? 저도 요새 강력한 알람이 필요해요..ㅎㅎ

    • BlogIcon pepsiman 2009.10.15 10:38 신고

      강력한....이라면 혹시 자명종??? ^^

      제 사촌동생도 아침에 정말 못 일어나는데
      알람 시계를 선물받았어요. 근데 따르르르르르르릉...하는 단순한 소린데 정말 무서울 정도로 시끄럽더라구요.
      나중에 일어나는거 보니깐 알람 울리기 전에 일어나서 끄고 바로 계속 자더라는....
      그 시계 이름이 아마 battle 이었을꺼에요 ㅋ

    • BlogIcon 푸른해아 2009.10.15 11:10 신고

      아, battle요? ㅋㅋ

      제 자명종 시계는 일본산 전파알람시계인데..

      알람이 울리면 온건물에 들릴 지경이예요. 그래서 알람이 울리기전에 벌떡 일어납니다. ㅋㅋ

      아,그런데 자명종은 미세하게는 조절이 안되니까..
      저도 타이머나 이런 걸 장만할까 하거든요.
      얼마전에 몇 번이나 집에 불을 냈었어요. ㅋㅋ

    • BlogIcon pepsiman 2009.10.15 11:14 신고

      세상에 온건물에 들릴정도의 알람도 있단 말인가요??? 대단하군요
      푸른해아님도 요리 좋아하시는거 같던데..타이머 하나정도는 필요하실거 같아요. 가격도 얼마 안하는거 같던데요.
      사실 만드는거보다 사는게 싸요...중국산의 위력...ㄷㄷㄷ

      갑자기 "까스불 끄셨나요?" 광고가 생각나네요...정말 재밌는 광고였는데...^^

    • BlogIcon 푸른해아 2009.10.15 13:24 신고

      아,요리할 때는 타이머가 필요가 없는데..

      빨래를 삶거나 할 때 넋을 놓고 있다가 집에 불을 내네요.

      지난번에 뵌 조모님께서 '너는 낭비가 심하다'라고 야단을 치셨는데, 여러모로 정신적인 문제가 있는 것 같습니다.ㅋ

      여하간 타이머를 구입을 할까요? ㅎ
      아니면 펩시맨님의 게시물을 참고로 해서, 한 번 도전?
      워낙 게으른 인간이라 실행시기가 미지수겠지만요.ㅋ

    • BlogIcon pepsiman 2009.10.15 13:32 신고

      아하 빨래군요...
      그 귀찮은 빨래 삶기를 하시는걸 보니 깨끗한걸 좋아하시나보네요.

      정말 만들어 보시겠어요?? ^^
      가격 대비로야 사는게 싸겠지만....
      시간은 많은데 할 일이 없다거나...잡념이 많아 머리가 아플때...
      인두를 잡고 한번 만들어보세요....
      그러면 아마도........................ 집을 태울지도...ㅋ

    • BlogIcon 푸른해아 2009.10.15 13:38 신고

      그렇네요.

      작은 화재를 방지하려다가, 정말로 집을 전소할 지도..

      인두는 여러모로 쓰임새가 좋긴 한데 저랑 궁합도 별로고.

      여하간 요새 불과 관련된 일을 피하고 있습니다. ㅋ

      어우 어디로든 날아간 멘탈을 찾아서 제대로 심어야 할텐데요.

+ Recent posts