RTV forum PL | NewsGroups PL

ATTiny 12: Dekoder szerokości impulsu 1s - 2ms w BASCOMie z podziałem na strefy

bascom i rozpoznawanie szerokosci impulsu

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - ATTiny 12: Dekoder szerokości impulsu 1s - 2ms w BASCOMie z podziałem na strefy

Marek S
Guest

Wed Apr 04, 2007 2:35 pm   



Witam
chce zrobić prosty dekoder który będzie rozpoznawał szerokość impulsu od 1 s
do 2ms . W zależności od szerokości będzie na pinie 1 lub 0 . Szerokość
podzielona na jedna lub 2 strefy 1 do 1,5 = 0 i 1,5 do 2 ms . Czas pomiaru
jakieś 0,25 s .Chciałbym to zrobić na ATTiny 12
Marek S

Grzegorz Kurczyk
Guest

Wed Apr 04, 2007 4:20 pm   



Użytkownik Marek S napisał:
Quote:
Witam
chce zrobić prosty dekoder który będzie rozpoznawał szerokość impulsu od 1 s
do 2ms . W zależności od szerokości będzie na pinie 1 lub 0 . Szerokość
podzielona na jedna lub 2 strefy 1 do 1,5 = 0 i 1,5 do 2 ms . Czas pomiaru
jakieś 0,25 s .Chciałbym to zrobić na ATTiny 12

Witam
Widzę tu jakieś zastosowania modelarskie Wink
Nie znam Bascoma, ale można skorzystać tu z licznika TIMER0.
Ustawić preskaler na taktowanie licznika sygnałem o częstotliwości ok
100kHz (T~10us). Poczekać na narastające zbocze impulsu (można w
przerwaniu INT0), odczytać i zapamiętać TCNT0. Poczekać na opadające
zbocze impulsu, odczytać TCNT0 i odjąć poprzednią wartość. Masz w ten
sposób pomiar czasu impulsu z dokładnością do 10us (co daje 100 kroków w
przedziale od 1..2ms)

Pozdrawiam
Grzegorz

Konop
Guest

Wed Apr 04, 2007 5:55 pm   



Quote:
chce zrobić prosty dekoder który będzie rozpoznawał szerokość impulsu od 1
s do 2ms . W zależności od szerokości będzie na pinie 1 lub 0 . Szerokość
podzielona na jedna lub 2 strefy 1 do 1,5 = 0 i 1,5 do 2 ms . Czas pomiaru
jakieś 0,25 s .Chciałbym to zrobić na ATTiny 12

Z jakiego źródła pochodzą te sygnały 0 i 1?? Jak bardzo są dokładne?? Ja
proponuję zmienić ich szerokość, żeby mieć pewną tolerancję: powiedzmy od 1
do 1,25ms to 0, od 1,75 do 2ms to 1. Teraz robisz tak:
-zauważasz początek impulsu (np. przerwaniem)
- czekasz jakies 1,5ms i sprawdzasz, czy dalej jest impuls - jak tak, to
znaczy że jest to "1", jak nie, to "0".
Jest to najrpstszy sposób realizacji tego zagadnienia, ale może wystarczy
Smile.... . Oczekiwanie możesz zrobić na timerze albo waitms / waitus <- nie
potrzeba dużej dokładności... Jeśli nie zmienisz tych stref, to będzie
problem, bo np. 1,499ms to 0 a 1,501ms to juz 1, czyli musisz zmierzyc czas
z rozdzielczoscia 0,002ms... w moim rozwiazaniu wystarczy Ci rozdzielczosc
pomiaru rzedu 0,5ms.

Pozdrawiam
Konop

Marek S
Guest

Wed Apr 04, 2007 6:42 pm   



witam
tak to ma być przełącznik modelarski . Niestety znam trochę bascoma ale jak
widzę to na tym procku nie bardzo wiem jak to napisać
Marek S

Marek S
Guest

Wed Apr 04, 2007 7:35 pm   



Witam
nie wiem jak uruchomić timer0 z pinu PB3, nie mogę zadeklarować żadnej
zmiennej tak żeby zmienić stan wyjścia 0 lub 1 chyba to wszystko co na razie
nie wiem
Marek S


'projekt przelacznika na at tiny 12
'wejscie PB3 wyjscie PB2 oscylator 2 MHz wewnetrzny
$regfile = "at12def.dat"
$crystal = 2000000
Config Pinb.3 = Input
Config Pinb.2 = Output
Config Timer0 = Timer , Prescale = 256 'wartosc
pocztkowa timer0 244 to daje 1,53 sek
Enable Timer0
Enable Interrupts
Timer0 = 244
Waitms 150

jarek
Guest

Wed Apr 04, 2007 9:13 pm   



Użytkownik "Marek S" <samochodzik2@op.pl> napisał w wiadomości
news:ev0ra8$icf$1@nemesis.news.tpi.pl...
Quote:
Witam
nie wiem jak uruchomić timer0 z pinu PB3, nie mogę zadeklarować żadnej
zmiennej tak żeby zmienić stan wyjścia 0 lub 1 chyba to wszystko co na
razie
nie wiem
Marek S


'projekt przelacznika na at tiny 12
'wejscie PB3 wyjscie PB2 oscylator 2 MHz wewnetrzny
$regfile = "at12def.dat"
$crystal = 2000000
Config Pinb.3 = Input
Config Pinb.2 = Output
Config Timer0 = Timer , Prescale = 256 'wartosc
pocztkowa timer0 244 to daje 1,53 sek
Enable Timer0
Enable Interrupts
Timer0 = 244
Waitms 150

Uruchomic mozna go tak

If pind.3 = 1 Then 'jeżeli impuls wywola 1 na pinie to
start timer0 'wystartuje timer0
end if


--
Pozdrawiam Jarek O.
jarek54129(małpa)poczta.fm

Marek S
Guest

Wed Apr 04, 2007 10:05 pm   



Witam
na razie tyle wypociłem gdyby to był inny procesor może było by mi łatwiej .
Attiny w bascomie nie przyjmuje deklaracji zmiennych pomocniczych
Marek S
'projekt przelacznika na at tiny 12
'wejscie PB3 wyjscie PB2 oscylator 2 MHz wewnetrzny
'program powinien wystartowac timer0 i odliczyc 1,5 ms poczekac
'czy pojawi sie nastepny impuls jak sie pojawi to podac na wyjscie 1 jak nie
to 0
'$sim
$regfile = "at12def.dat"
$crystal = 2000000
Config Pinb.3 = Input
Config Pinb.2 = Output
Config Int0 = Rising 'wyzwolenie
timera0 z zbocza narastajacego
Config Timer0 = Timer , Prescale = 256 'wartosc
pocztkowa timer0 216 co przerwanie wystepuje co 150 ms
Do
On Timer0 Alias Pinb.3
Enable Interrupts
Timer0 = 244
'tu nie wiem jak
napisac procedure sprawdzenia
'czy pojawil sie
nastepny impuls i zmiany
'stanu wyjscia
Waitms 150





Disable Timer0
Timer0 = 0
Loop

jarek
Guest

Wed Apr 04, 2007 10:11 pm   



Użytkownik "Marek S" <samochodzik2@op.pl> napisał w wiadomości

Quote:
'tu nie wiem jak
napisac procedure sprawdzenia
'czy pojawil sie
nastepny impuls i zmiany
'stanu wyjscia

Ja bym to zrobil na watchdog-u... jezeli w czasie watch doga nie pojawi sie
drugi impuls znaczy sie ze trwal krocej niz 1,5s i program sie zresetuje
wystawiajac przy tym 0 jezeli pojawil sie drugi impuls to wystawi 1 i
wyzeruje watchdog-a


--
Pozdrawiam Jarek O.
jarek54129(małpa)poczta.fm

Marek S
Guest

Wed Apr 04, 2007 10:52 pm   



Witam
na razie to na dziś wymordowałem Sad ale jakby dobrać wartości czasu
przerwania to może by można zastosować np. układ pracujący na 2 pinach czyli
jeśli impuls jest od 1-1,2 ms to 0 od 1,2 do 1,4 ms to 1 np. pin 2 ,a
powyżej to na pin 4 czyli 2 pozycje wyjść .
Marek S

'projekt przelacznika na at tiny 12
'wejscie PB3 wyjscie PB2 oscylator 2 MHz wewnetrzny
'program powinien wystartowac timer0 i odliczyc 1,5 ms poczekac
'czy pojawi sie nastepny impuls jak sie pojawi to podac na wyjscie 1 jak nie
to 0
$sim
$regfile = "at12def.dat"
$crystal = 2000000
Config Pinb.3 = Input
Config Pinb.2 = Output
Config Int0 = Rising 'wyzwolenie
timera0 z zbocza narastajacego
Config Timer0 = Timer , Prescale = 256 'wartosc
pocztkowa timer0 216 co przerwanie wystepuje co 10 us
Do
On Timer0 Alias Pinb.3
Enable Interrupts
Timer0 = 244
'tu nie wiem jak
napisac procedure sprawdzenia
'czy pojawil sie
nastepny impuls i czy dobra jest procedura zmiany
'wyjscia

If Timer0 = 122 Then Set Pinb.2
Waitms 10
'If Timer0 = 200 Then Reset Pinb.2
Waitms 50
Disable Timer0
Timer0 = 0
Loop

elektroda NewsGroups Forum Index - Elektronika Polska - ATTiny 12: Dekoder szerokości impulsu 1s - 2ms w BASCOMie z podziałem na strefy

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map