Timerek Sportowca


5.66667
Ocena: None Średnia: 5.7 (3 głosujących)

Ten prosty układzik ma za zadanie generować sygnały dźwiękowe w określonych ustawianych niekoniecznie regularnych odstępach czasu (przedziały te wyznaczają czasy biegania w szybkim lub wolnym tempie). Programowanie timerka (wprowadzanie przedziałów czasu między kolejnymi sygnałemi dźwiękowymi) odbywa się za pomocą portu RS232, najlepiej do tego wykorzystać RS232 Tester. Urządznie mimo iż zbudowane jest z klasycznych elementów przewlekanych jest stosunkowo niewielkie i lekkie. Z łatwością zmieści się w kieszeni podczas biegania. Zasilane jest z baterii typu CR2032 a podczas programowania z portu USB.

Działanie:


Schemat ideowy Timerka przedstawiony jest na rysunku poniżej:

Sercem układu jest mikrokontroler U1 (ATTINY2313) wraz z rezonatorem kwarcowym X1 (4MHz) i dwoma kondensatorami C1 (22pF) i C2 (22pF). Tranzystory T1 (BC557B) i T2 (BC547B) wraz z rezystorami R1 - R3 (10k) stanowią interfejs RS232 potrzebny do komunikacji z komputerem PC. Złącze czteropinowe RS232 służy do podłączenia linii TxD i RxD portu COM oraz zasilania 5V potrzebnego podczas programowania pamięci EEPROM mikrokontrolera. Przełącznik W1 podczas programownia umożliwia dołączenie zasilania 5V do procesora i odłączenie baterii. Natomiast w czasie normalnej pracy służy jako wyłącznik zasilania. Kondensator C3 (22uF) filtruje napięcie zasilające układ. Brzęczyk z generatorem B1 sygnalizuje upłynięcie kolejnego odcinka czasu, jest on sterowany za pomocą tranzystora T3 (BC557) i rezystorów R4 (100R) i R5 (3,3k).

Budowa:

Timerek można zbudować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym można ściągnąć tutaj. Montaż układu jest bardzo prosty i nie wymaga większego komentarza. Pod mikrokontroler U1 bezwzględnie należy zastosować podstawkę, gdyż na płytce nie ma złącza programującego (z braku miejsca). W przeciwnym wypadku jego zaprogramowanie może się stać trudne lub wręcz niemożliwe. Płytka została tak zaprojektowana aby pasowała do obudowy KM-57, Należy w niej tylko wywiercić dziurkę nad brzęczykiem B1 i wyciąć miejsce na wyłącznik i złącze. Pomocą w lutowaniu płytki może okazać się dostępny tutaj schemat montażowy. Płytka drukowana umieszczona na stronie jest ulepszona w stosunku do tej widocznej na zdjęciach.

Wykaz Elementów:


1x Listwa Goldpin Kątowy 1x4 (Goldpin)
1x Bateria 3V(CR2032) + Podstawka
1x Przełącznik 2-pozycyjny
1x 3,3k
3x 10k
1x 100R
2x 22pF
1x 22uF/6V Elektrolit
1x Rezonator Kwarcowy 4Mhz
1x BC547B
2x BC557B
1x Mikrokontroler ATTINY2313 + Podstawka
1x Buzzer z Generatorem 3V

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 = "attiny2313.dat"
$crystal = 4000000
$baud = 9600
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111111 : Portd = &B11111111
Buzzer Alias Portb.0
Config Timer0 = Timer , Prescale = 64
Enable Timer0 : On Timer0 Prztimer0
Stop Timer0
'********** Konfiguracja uC Koniec  ************
'******************  Zmienne *******************
'***********************************************
Dim Rs_wartosc As Byte
Dim N As Byte , Ilosc As Byte , Adres As Byte
Dim Dzielnik As Word
Dim Sygnal As Bit
Dim Licznik As Byte , Czas As Byte
'*************  Zmienne Koniec  ****************
'**************  Petla glowna ******************
'***********************************************
Printbin 254
Waitms 100
Readeeprom Ilosc , 5
If Ilosc > 0 And Ilosc <= 100 Then     'jezeli w komorce 5 zapisana jest ilosc
  Buzzer = 0
  Waitms 100
  Buzzer = 1
 
  N = 1
  Licznik = 0
  Dzielnik = 0
  Readeeprom Czas , 11
  Enable Interrupts
  Timer0 = 6
  Start Timer0
 
Else
  Buzzer = 0
  Waitms 250
  Waitms 250
  Waitms 250
  Waitms 250
  Buzzer = 1
End If
 
Do
  Rs_wartosc = Inkey()
  If Rs_wartosc = 255 Then Gosub Programowanie
 
  If Sygnal = 1 Then
    Buzzer = 0
    Waitms 100
    Buzzer = 1
    Waitms 100
    Buzzer = 0
    Waitms 100
    Buzzer = 1
    Sygnal = 0
  End If
 
Loop
End
'************ Petla glowna Koniec **************
 
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:                                                  'co 4ms
  Timer0 = 6
  Incr Dzielnik
  If Dzielnik = 2500 Then                                   'co 10s
    Dzielnik = 0
    Incr Licznik
    If Licznik >= Czas Then
      Licznik = 0
      Sygnal = 1
      Incr N                                                'kolejna wartosc przerwy
      If N > Ilosc Then N = 1
      Adres = N + 10
      Readeeprom Czas , Adres
    End If
 
  End If
Return
'******** Przerwanie timer 0 Koniec ************
Programowanie:
  Printbin 253
  Disable Interrupts
  Stop Timer0
  Rs_wartosc = Inkey()                                      'czyszczenie
  Rs_wartosc = Inkey()                                      'czyszczenie
  Inputbin Ilosc
  Writeeeprom Ilosc , 5
 
  For N = 1 To Ilosc
    Inputbin Rs_wartosc
    Adres = N + 10
    Writeeeprom Rs_wartosc , Adres
    Printbin Rs_wartosc
  Next N
 
  Waitms 250
  Printbin 252
Return

Obsługa i Komunikacja:
Do obsługi Timerka nie przewidziałem żadnego specjalistycznego programu. Z powodzeniem można go zaprogramować programem RS232 Tester przez wysłanie odpowiedniej sekwencji liczb.

Na początku należy w programie RS232 Tester ustawić następujące parametry transmisji:

Szybkość: 9600
Bity Stopu: 1
Bity Danych: 8

Po podłączeniu Timerka do portu COM i zasilania do USB przełączamy wyłącznik do pozycji w której zasilanie podłączone jest do usb(patrz schemat). Klikamy "Otwórz Port" i wysyłamy liczbę 255 do urządzenia. Po krótkiej chwili Timerek powinien wysłać liczbę 253, co jest informacją że pracuje w trybie programowania. Następnym krokiem jest wysłanie liczby (1-100) będącej ilością przedziałów czasu jekie będą odliczane w jednym okresie pracy Timerka. Kolejnymi wartości jakie musimy wysłać są długościami odcinków czasu (wartość *10s), ich ilość zależy od wcześniej wysłanej liczby przedziałów. Na końcu Timerek wyśle do programu liczbę 252 co sygnalizuje że wszystko jest ok.

Zdjęcia Projektu:

ZałącznikWielkość
Schemat39.65 KB
Płytka9.49 KB
Płytka (odbicie lustrzane)9.46 KB
Płytka (8 na stronie)57.86 KB
Montowanie12.28 KB
Kod Źródłowy3.08 KB
Program po Kompilacji (BIN)874 bajty
Program po Kompilacji (HEX)2.42 KB



Portret użytkownika mały19

Pytanie

Witam. Jak mam przekształcić program aby timer piszczał przez 15sekund a następnie była przerwa 60sekund??

Portret użytkownika mirley

Re: Timerek

Trzeba zostawić w programie tylko obsługę timera, wydłużyć podział na zmiennej Dzielnik do 15 sekund. Następnie liczyc do 5 i jak będzie 0 to ustaw port a jak 1-4 to zgaś port, jak dojdzie do 5 to niech się ustawi znowu 0

-

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 nały19

Timerek

Czy mógłbyś trochę badziej mi to wytłumaczyć. Programuję dopiero od miesięca i jeszcze nie bardzo wszystko rozumiem a chciałbym mieć taki timerek jeszcze przed zimą.

Portret użytkownika mirley

Re: timerek

Spróbuj na początek tak:

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny2313.dat"
$crystal = 4000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111111 : Portd = &B11111111
 
Buzzer Alias Portb.0
 
Config Timer0 = Timer , Prescale = 64
Enable Timer0 : On Timer0 Prztimer0
Start Timer0
'********** Konfiguracja uC Koniec  ************
'******************  Zmienne *******************
'***********************************************
Dim Dzielnik As Word
Dim Licznik As Byte
'*************  Zmienne Koniec  ****************
'**************  Petla glowna ******************
'***********************************************
licznik = 0
 
Do
 
Loop
End
'************ Petla glowna Koniec **************
 
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:                                                  'co 4ms
  Timer0 = 6
  Incr Dzielnik
  If Dzielnik = 3750 Then                                   'co 15s = 4ms *3750
    Dzielnik = 0   
    If Licznik ==0 Then buzzer = 0 else buzzer = 1
    Incr Licznik
    if licznik = 5 then licznik = 0
 
 
  End If
Return
'******** Przerwanie timer 0 Koniec ************

-

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 mały19

timerek

Niestety po wgraniu tego programu do uprocesora timerek nie działa. Program jest dla mnie zrozumiały ale nie mam pojęcia dlaczego timerek nie chodzi.

Portret użytkownika mirley

Re: timerek

Zaraz po start timer0 dodaj:

Enable Interrupts

Chyba sobie zapomniałem, reszta wygląda wporządku

-

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 mały19

timerek

Działa dokładnie tak jak chciałem tylko teraz mam jeszcze jeden problem. Mam 2 uprocesory attiny2313. Jeden mam na płycie testowej a drugi kupiłem niedawno w sklepie. Programuje oba i ten który kupiłem działa tek że po 60s buzzer zaczyna piszczeć i nie przestaje zaś ten z płytki testowej działa poprawnie. Czym to może być spowodowane??

Portret użytkownika rafliczek22

Złymi fusami, uszkodzonym

Złymi fusami, uszkodzonym procesorem.

Portret użytkownika mały19

Miałem ustawiony wewnętrzny

Miałem ustawiony wewnętrzny oscylator i dlatego układ źle pracował. Dzięki za pomoc.

Portret użytkownika jarekk

Witam, Może mi ktoś

Witam,
Może mi ktoś powiedzieć czemu przerwanie jest co 4 ms i co daje Timer0=6.
Pozdrawiam

Portret użytkownika gość

Timer

Do Timera0 jest wpisana 6 ponieważ skraca to cykl jego zliczania (w tym wypadku 256-6=250). Co 4ms program wchodzi do przerwania od Timera0 (Prztimer0).

Portret użytkownika jarekk

Czy dobrze

Czy dobrze rozumiem.
Częstotliwość zegara dzielimy przez prescale (4000000 / 64 = 62500 Hz)
Następnie tą wartość dzielimy przez wielkość przepełnienia licznika (62500 / 250 = 250 Hz)
Zamiana częstotliwości na czas (1 / 250 = 0.004 s)

Czy timer1 też jest 8 bitowy czy zawsze jest 16 bitowy.
Czy zawsze trzeba używać polecenia Start TimerX

Portret użytkownika gość

Timer

Polecenia Start TimerX musimy używać zawsze. Timer1 zawsze jest 16bitowy. Oblicza się to dokładnie tak jak podałeś.

Portret użytkownika gość

Czy wszędzie trzeba wcisnąć

Czy wszędzie trzeba wcisnąć uC? i ten interfejs... Programowanie po RS232...

eh

Portret użytkownika Darek J.

Schemat - cos tu nie gra...

Witam.
Zaczynam zabawe z uC i traktuje Twoja strona jako baza do pierwszych projektow.
Schemat zawiera trzy tranzystory... wg opisu BC547 i dwie sztuki BC557.
Dziwnym trafem dwa 557 wg schematu posiadaja rozne polaryzacje pnp / npn.
Dla roztropnej osoby to nie problem, jednak dla kogos kto dopiero raczkuje w temecie moze to ztanowic zagadke...
To tylko tak informacyjnie.
Dobra robota Panie Mirku!
Pozdrawiam

Portret użytkownika mirley

Timerek

Masz rację tranzystor T3 ma zły symbol.... to tak jak się na szybko kopiuje symbol.. Ma tam być PNP zgodnie z podpisem

-

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.