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

동작은 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 신고

      그렇네요.

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

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

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

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

별거는 아니지만 ATTiny26으로 장난감을 만들어봤습니다.
애들 신발에 붙이려고 만들었으나......^^;;;

만능기판에 대충 땜질했습니다...그래봐야 led와 저항이 대부분이고 
나머지는 기울기 스위치하나 3v 동전전지 케이스가 전부네요. 전지 케이스를 너무 큰걸 샀네요.

브레드보드에서 테스트했을때는 잘 되서 무작정 만능기판에 납땜했는데
납땜이 끝나고 전지로 하니 동작을 안하지 멉니까...OTL

원인을 몰라 아두이노 카페분들에게 도움을 얻은 결과 led를 싱크로 연결해보라는 조언을 듣고 그렇게  하니 동작이 잘 됩니다.

led를 전부 거꾸로 다시 연결하느라 배선이 난장판이 됐습니다.
머...첨에도 그리 깨끗하진 않았습니다만...^^;

포멕스로 나름 깔끔하게 케이스를 만들어보려고 했으나....좌절...
깨끗하게 안잘라 지더구요...어떻게 잘라야 깨끗하게 자르는지 아시는분 조언좀 해주세요



(핸드폰 동영상이라서 화일이 않좋습니다. 이해해 주세요 ^^)
기울기 스위치가 민감해서 약간의 충격만으로도 스위치가 동작합니다.


일단 이렇게 완성은 했으나....
와이프가 보더니..."이렇게 큰걸 어떻게 신발에 달아!!"
여기서 한번더 좌절 OTL
무심코 던진돌에 개구리가 맞아 죽는다는....

그래서 운동화에 다는건 포기했습니다. ㅠㅠ
시간 될때 작게 다시 만들어봐야겠습니다. smd를 써야 하나....

추가 : 요청으로 회로도를 그려봤습니다.
죄송합니다. 아직 회로도 프로그램을 못다루는 관계로 발로 그렸습니다. 그래도 도움이 되셨으면 합니다. ㅠㅠ



$regfile = "attiny26.dat"
$crystal = 8000000

Dim I As Byte
Dim J As Byte
Dim Sw As Bit
Sw = 0
Dim Swold As Bit
Swold = 0
Dim Interval As Integer
Interval = 4

Config Porta = Output
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output
Config Pinb.6 = Input

Set Porta
Set Portb.0
Set Portb.1
Set Portb.2
Set Portb.3

Do
   If Pinb.6 = 1 Then
      Set Sw
   Else
      Reset Sw
   End If

   If Sw <> Swold Then
      For J = 0 To 3
         For I = 0 To 3
           Reset Porta.i
           Waitms Interval
           Set Porta.i
           Waitms Interval
         Next I
         For I = 3 To 0 Step -1
           Reset Portb.i
           Waitms Interval
           Set Portb.i
           Waitms Interval
         Next I

         For I = 3 To 0 Step -1
           Reset Porta.i
           Waitms Interval
           Set Porta.i
           Waitms Interval
         Next I
         For I = 0 To 3
           Reset Portb.i
           Waitms Interval
           Set Portb.i
           Waitms Interval
         Next I
      Next J
      Swold = Sw
   End If
Loop
  1. 윤영준 2009.08.12 09:15 신고

    smd에 기판 떠서 작업해야 신발에 들어가겠군요.ㅋㅋ
    걸리버 신발이라면 가능~~
    잘봤습니다. ^^;

    • BlogIcon pepsiman 2009.08.12 09:19 신고

      걸리버....윤영준님까지....
      계속되는 데미지 누적 ㅠㅠ

    • BlogIcon 푸른해아 2009.08.12 09:32 신고

      ㅋㅋ
      음,최홍만씨 운동화라면 가능할지도.
      어쨌든 즐거운 시도는 계속되어도 좋을 것 같군요.

    • BlogIcon pepsiman 2009.08.12 09:35 신고

      푸른해아님까지...
      연속 데미지....@.@
      K.O !!

      홍만씨한테 선물할까나....ㅋ
      그나저나 홍만씨는 머하고 있을려나요...?

  2. 심플멘 2009.08.23 13:10 신고

    펩시멘님도 다방면에 능통하신것 같습니다 자료검색하다 방문했습니다
    아기자기하게 재미있는거 많이 만드셨네요 제가모르던것도 알게해주시고 감사^^

    • BlogIcon pepsiman 2009.08.24 09:34 신고

      만들고 싶은건 많은데 능력이 안따라 주네요.
      초반에 너무 버닝해서...이제는 좀 쉬엄쉬엄 하려고요.
      자주 놀러 오세요 심플멘님...^^

  3. 2009.12.19 10:16

    비밀댓글입니다

    • BlogIcon pepsiman 2009.12.19 10:23 신고

      회로도라고 할만한것도 없습니다.
      공개 못할 이유도 없고요 ^^;
      문제는 제가 회로도 그리는 프로그램을 잘 사용 못해서 그리질 못하고 있습니다 ㅠㅠ
      일단 LED 켜는것부터 시작하시고
      그걸 tiny의 발 하나에 LED 1개씩 8개 연결하시면되요.
      스위치도 하나 연결...일단 말로는 그러네요.
      회로도는 함 그려볼께요.

  4. 2009.12.19 11:25

    비밀댓글입니다

  5. BlogIcon pepsiman 2009.12.21 00:42 신고

    저젼력으로 구동되는 ATTiny 26 L 타입니다. 'L'을 확인하세요.

  6. 2009.12.21 09:24

    비밀댓글입니다

    • BlogIcon pepsiman 2009.12.21 09:28 신고

      회로도 어제 대강 그려 첨부했는데 못보셨나보네요.
      소스 위에 있습니다. 참고하세요 ^^

  7. BlogIcon pepsiman 2009.12.21 09:29 신고

    avr에 관해 지식이 없으시다면 avr 부터 알아야 tiny를 사용할수 있습니다.

    tiny26에 위에 있는 소스코드를 프로그램해서 넣어야 하고요.
    프로그램을 하기 위해선 SW로는 bascom avr 이라는 프로그램과 HW로는 ISP 프로그래머 라는 장비(모듈)가 있어야 합니다. 그리고 배경지식으로는 기본적인 AVR로 LED 켜는 회로 구성하기 , 스위치 회로 구성하기를 먼저 습득하시고 tiny26 사용법을 익히셔야 합니다.

    참고하실만한 포스팅으로는 "저항계산기", "풀업풀다운"에 관련된 포스팅이 있으니 관련 지식을 먼저 습득하세요.
    ----------------------------------------------------------------------------------------------
    쓰고나니 제가 봐도 막막하네요...ㅡㅡ;;
    우섭님은 그냥 회로만 그려드리면 따라하면 되는데...라고 생각하시는거 같은데...
    그냥 제가 회로도하나만 그려드리면 되는데 말이죠...
    잠시만 기다리세요...제가 잘 못그려도 하나 그려드릴께요 ^^;

  8. 2009.12.21 09:47

    비밀댓글입니다

  9. BlogIcon pepsiman 2009.12.21 09:56 신고

    기울기 센서인데 스위치로 표현 했습니다.
    기울기 센서도 내부구조가 쇠구슬이 두 접점을 연결하는 구조라서 스위치와 같습니다.

    공부하셨군요.^^ 네 평상시 LOW니까 풀 다운저항이고요. 저도 아직도 해깔려요 ^^;
    이해가 빠르신거보니 기본센스는 있으신가보네요.
    공부하시면서 막혀서 물어보시는 거라면 언제나 환영입니다.
    공부도 안하고 물어보시는 분들도 많거든요.

    한가지 더 부탁드리자면...댓글에 특별히 사적인 정보나, 감추고 싶으신게 없으시다면 비밀글로 안해주셨으면 합니다.
    댓글도 다른분들한테 도움이 되는 내용이거든요.
    감사합니다. ^^

  10. 준아빠 2009.12.22 09:21 신고

    안녕하세요..도움이 필요합니다...
    책을 사서 공부하려는데...
    교재 "Bascom-AVR 로봇 스터디" 이 책으로 공부하면 도움이 될까해서요..
    아님 다른 추천할만한 책이 있는지요... 책값이 비싸더군요.. 투자라 생각하고 ^^
    펩시맨님은 어떤식으로 공부하셨는지 어떤 교재로 공부하셨는지.. 힌트좀 주세요.
    기본적인 AVR로 LED켜는 회로 추천할 만한 교재가 있는지요..
    전자관련 학과를 안나와서 어렵네요...도움이 필요합니다..
    회사에서 계속 인터넷으로 공부하려니 눈치도 보이고.. 여러모로 교재가 나을듯해서요...
    이름을 앞으론 준아빠로 하겠습니다 ^^

    • BlogIcon pepsiman 2009.12.22 09:36 신고

      안녕하세요 준아빠님
      준아빠님의 프로그래언어, 전자쪽 지식이 어느정도 인지 몰라 추천이 좀 애매하긴하지만...

      먼저 저의경우 C, basic언어는 알고 있었고요. 전자쪽은 학교에서 배운게 다인 상태에서 시작했습니다.
      무엇보다도 전자쪽 지식이 부족한 상태에서 개념잡기가 어렵더군요

      그래서 선택한게 아두이노(HW)와 '피지컬 컴퓨팅'(책) 으로 시작했습니다.
      아두이노는 c언어와 비슷하고요.
      아두이노와 usb케이블만 있으면 시작할수 있기 때문에 전자쪽을 처음 접하시는 분들이 접근하기 좋습니다.
      피지컬 컴퓨팅 책은 아두이노와 직접 연관이 있는 책은 아니지만 전자쪽을 어떻게 접근해야 하는지 그 감을 아주 쉽게 설명하고 있습니다.
      저는 아두이노쪽 하다가 tiny 칩으로 avr쪽으로도 공부했고요
      교육용 보드인 채리보드로 mega128도 보고 이때 전자회로이론 책과 atmega128 정보 책을 봤습니다.

      언어를 잘 모르신다면 아두이노 소스나 bascom 소스를 보고 간단한거 부터 하나씩 따라 하시면 도움이 될껍니다.
      아두이노는 약간 비싸고요. avr은 싼데 부가장비(isp같은)나 회로를 구성하는것등이 처음에는 약간 힘들수 있습니다.

      자신의 지식과 재정상태, 난이도를 고려해서 결정해야 합니다.
      선택하고시 다시 댓글 주시면 또 답변 드리겠습니다.

    • BlogIcon pepsiman 2009.12.22 09:40 신고

      http://pepsiman.tistory.com/50 avr 선택에 관하여
      http://pepsiman.tistory.com/39 피지컬 컴퓨팅
      참고하세요

  11. BlogIcon 이닝 2012.05.26 17:30 신고

    글을 너무 잼있게 적으셔서 중간에 빵하고 터졌습니다. >ㅂ<;
    요즘 아두이노에 대한 글들을 너무 잘 보고 있습니다.
    감사합니다.

    • BlogIcon pepsiman 2012.06.14 13:41 신고

      시간이 없어 영 포스팅을 못하고 있네요.
      그래도 종종 놀러오세요 ^^

tiny은 가격도 싸고 칩 단독으로 회로구성이 가능해서 꼭 한번 해보고 싶었는데
ISP를 구입하게 되서 프로그래을 해봤습니다.

간단히 LED 8개가 순차적으로 왔다 갔다 하는 예제 입니다.
tiny와 isp를 연결한 모습입니다.
tiny의 1, 2, 3, 5, 6, 10 번핀을 ISP에 각 핀에 연결합니다.
VTG가 VCC 입니다.
저는 매번 결선하기 귀찮아서 핀헤더로 연결했습니다.



led는 11 ~ 20번 즉 PA0 ~ PA7번에 저항과 같이 연결했습니다.
sw는 PB6에 풀다운저항으로 연결하였습니다.
핀헤더와 isp를 제거하고 칩과 led만 남아있는 모습입니다.
전원은 충전지 4개 4.8v를 연결했습니다.
ATTiny26L-8PI는 2.7-5.5V의 전압을 허용하므로 활용도가 높습니다. 
스위치를 누르면 led가 왔다 갔다 합니다.

bascom-avr 소스

+ Recent posts

티스토리 툴바