RTV forum PL | NewsGroups PL

Ustawienie ATTiny 12 do pomiaru obrotów silnika i włączania lampki powyżej 5000 RPM

Prosty projekt na attiny

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Ustawienie ATTiny 12 do pomiaru obrotów silnika i włączania lampki powyżej 5000 RPM

Goto page 1, 2  Next

scx
Guest

Fri Jan 12, 2007 5:21 pm   



Witam

Kolega poprosił mnie o skonstruowanie ustrojstwa, które, m.in., po
przekroczeniu 5tys obrotów silnika w samochodzie zapali lampkę. Szczególna
dokładność czy powtarzalność nie jest wymagana.
Obroty dostaję w postaci 2 impulsów na obrót wału korbowego.

Wymyśliłem takie rozwiązanie:

Sprzęt:
ATTiny 12 pracuje z wewnętrznym generatorem (zawsze jeden element mniej na
płytce)
Zasilany przez stabilizator napięcia ujemnego 79L05. Czyli masa układu jest
na +7V względem masy samochodu. A to dlatego, żeby lampki sterowane +12V
włączać po prostu jednym tranzystorem PNP.

Soft (napisany będzie w assemblerze):
Każdy impuls wywołuje przerwanie, w którym inkrementowana jest zawartość
jednego z rejestrów, nazwijmy go OBR.
Na przerwaniach od timera umieszczę procedurę sprawdzającą wartość OBR, i
jeśli będzie ona większa od jakiejśtam wartości to włączająca lampeczkę.
Potem zerowanie OBR.
Reszta funkcji, które układ ma spełniać, jest w pętli głównej.

Teraz pytanie, czy dobrze wykombinowałem i czy nie ma to jakiegoś ukrytego
błędu. Zdaje mi się, że częstotliwość przerwań od timera będzie za duża, i
układ nie nadąży liczyć odpowiedniej liczby impulsów.
Może ugryźć sprawę z drugiej strony, i nie mierzyć częstotliwości, tylko
okres - wtedy licznik inkrementowany przez timer byłby zerowany przerwaniem
wywołanym przez sygnał z silnika.

I jeszcze jedno pytanie: czy w trakcie obsługi jednego przerwania wyłączać
obsługę innych? Zdaje mi się, że jeśli wyłączę to mogę zgubić np zerowanie
licznika, z kolei jeśli zostawię włączone to mogą się pojawić jakieś dziwne
rzeczy

T.M.F.
Guest

Fri Jan 12, 2007 6:22 pm   



Quote:
Sprzęt:
ATTiny 12 pracuje z wewnętrznym generatorem (zawsze jeden element mniej na
płytce)
Zasilany przez stabilizator napięcia ujemnego 79L05. Czyli masa układu jest
na +7V względem masy samochodu. A to dlatego, żeby lampki sterowane +12V
włączać po prostu jednym tranzystorem PNP.

Po co? I tak dajesz opornik na baze, a wbudowane diody zabezpieczajace
obetna napiecie do Vcc+0,6V. Albo daj MOSFETa.

Quote:
Soft (napisany będzie w assemblerze):
Każdy impuls wywołuje przerwanie, w którym inkrementowana jest zawartość
jednego z rejestrów, nazwijmy go OBR.
Na przerwaniach od timera umieszczę procedurę sprawdzającą wartość OBR, i
jeśli będzie ona większa od jakiejśtam wartości to włączająca lampeczkę.
Potem zerowanie OBR.
Reszta funkcji, które układ ma spełniać, jest w pętli głównej.

Moze znowu prosciej bedzie popedzac timer z zewnetrznego zrodla CLK,
jakim beda impulsy z walu. Drugi timer co jakis czas daje przerwanie i
po prostu odczytujesz ile bylo impulsow w ustalonym czasie.
Albo jeszcze inaczej, impulsy z walu generuja przerwanie, a ty
odczytujesz czas pomiedzy impulsami (jesli zalezy ci na szybkiej
reakcji, hehe:). 10000 przerwan/s spokojnie AVR pociagnie, tym bardziej,
ze i tak bedzie sie nudzil.

Quote:
I jeszcze jedno pytanie: czy w trakcie obsługi jednego przerwania wyłączać
obsługę innych? Zdaje mi się, że jeśli wyłączę to mogę zgubić np zerowanie
licznika, z kolei jeśli zostawię włączone to mogą się pojawić jakieś dziwne
rzeczy

A to zalezy od czasu przez jaki bedziesz przebywal w obsludze przerwania.


--
Inteligentny dom - http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz sie do projektu.

scx
Guest

Fri Jan 12, 2007 9:11 pm   



Dnia Fri, 12 Jan 2007 18:22:56 +0100, T.M.F. napisał(a):

Quote:
Sprzęt:
ATTiny 12 pracuje z wewnętrznym generatorem (zawsze jeden element mniej na
płytce)
Zasilany przez stabilizator napięcia ujemnego 79L05. Czyli masa układu jest
na +7V względem masy samochodu. A to dlatego, żeby lampki sterowane +12V
włączać po prostu jednym tranzystorem PNP.

Po co? I tak dajesz opornik na baze, a wbudowane diody zabezpieczajace
obetna napiecie do Vcc+0,6V. Albo daj MOSFETa.

Hmm... Jeśli mam na wyjściu AVRka +5V względem masy samochodu, to mam
względem +12V całe 7V. A -7V na bazie względem emitera to aż nadto, żeby
tranzystor PNP puścił prąd do żaróweczki.

Quote:
Moze znowu prosciej bedzie popedzac timer z zewnetrznego zrodla CLK,
jakim beda impulsy z walu. Drugi timer co jakis czas daje przerwanie i
po prostu odczytujesz ile bylo impulsow w ustalonym czasie.
No niestety, tiny12 ma tylko jeden timer Smile


Quote:
A to zalezy od czasu przez jaki bedziesz przebywal w obsludze przerwania.

"małe" przerwanie, czyli liczenie tyknięcia zegara lub półobrotu wału, to

IMPULS:
inc obr 1
ret 4

czyli 5 cykli

"duże" przerwanie to kilka instrukcji:

TIMER:
subi obr,0x11 1
brpl ALARM 1 lub 2
clr obr 1
cbi PORTB,PB2 2
ret 4
ALARM:
clr obr 1
sbi PORTB,PB2 2
ret 4

czyli 9 lub 10 cykli

Przy zegarze 1,2MHz, daje to odpowiednio 4 i 8 us. No chyba że coś źle
policzyłem. Ciekawe jakie jest prawdopodobieństwo, że wystąpi przerwanie
zwiększające obr, pomiędzy instrukcjami subi i clr - wtedy na pewno coś
zadziałoby źle

scx
Guest

Fri Jan 12, 2007 11:05 pm   



Dnia Fri, 12 Jan 2007 21:58:14 +0100, Piotr Chmiel napisał(a):


Quote:
Sprzęt:

Przedstaw to na schemacie, bo nie moge sobie wyobraźić Smile

Proszę bardzo:
http://diablo.ict.pwr.wroc.pl/~mmanski/letis.gif

L1 L2 to wyjścia na żaróweczki (tak sobie teraz pomyślałem, że BD140 to
lekkie przegięcie jak na żaróweczki-kontrolki w samochodzie Razz)

OBROTY to wejscie sygnału z komputera silnikowego

Quote:

Może ugryźć sprawę z drugiej strony, i nie mierzyć częstotliwości, tylko
okres - wtedy licznik inkrementowany przez timer byłby zerowany przerwaniem
wywołanym przez sygnał z silnika.

Ja bym mierzył czas między kolejnymi impulsami i na tej podstawie zapalał
lampkę.

A jak ten czas mierzyc? Przychodzi mi do głowy tylko timer w przerwaniu
inkrementujący jakiś rejestr, sprawdzany i zerowany w przerwaniu od impulsu
z silnika - czyli druga wymyślona przeze mnie metoda.

telmag
Guest

Fri Jan 12, 2007 11:06 pm   



Quote:

Przy zegarze 1,2MHz, daje to odpowiednio 4 i 8 us. No chyba że coś źle
policzyłem. Ciekawe jakie jest prawdopodobieństwo, że wystąpi przerwanie
zwiększające obr, pomiędzy instrukcjami subi i clr - wtedy na pewno coś
zadziałoby źle

Niewielkie ale mozesz na czas wykonywania procedury zawiesic obsluge
przerwan ... wtedy nic zlego sie nie stanie Smile

scx
Guest

Fri Jan 12, 2007 11:20 pm   



Dnia Fri, 12 Jan 2007 23:06:10 +0100, telmag napisał(a):

Quote:

Przy zegarze 1,2MHz, daje to odpowiednio 4 i 8 us. No chyba że coś źle
policzyłem. Ciekawe jakie jest prawdopodobieństwo, że wystąpi przerwanie
zwiększające obr, pomiędzy instrukcjami subi i clr - wtedy na pewno coś
zadziałoby źle

Niewielkie ale mozesz na czas wykonywania procedury zawiesic obsluge
przerwan ... wtedy nic zlego sie nie stanie Smile

Wtedy z kolei mogę przegapić któryś z impulsów....

Krzysiek
Guest

Fri Jan 12, 2007 11:46 pm   



W dniu 12-01-2007 23:20, scx napisał:

Quote:
Przy zegarze 1,2MHz, daje to odpowiednio 4 i 8 us. No chyba że coś źle
policzyłem. Ciekawe jakie jest prawdopodobieństwo, że wystąpi przerwanie
zwiększające obr, pomiędzy instrukcjami subi i clr - wtedy na pewno coś
zadziałoby źle

Niewielkie ale mozesz na czas wykonywania procedury zawiesic obsluge
przerwan ... wtedy nic zlego sie nie stanie :)

Wtedy z kolei mogę przegapić któryś z impulsów....

A czy przegapienie jednego, lub nawet kilku impulsów będzie takie
straszne w skutkach? I tak mówiłeś, że sygnalizacja ma być raczej
orientacyjna i niekoniecznie superdokładna i powtarzalna.

--
Pozdrawiam
Krzysiek

Luk@sz
Guest

Sat Jan 13, 2007 12:28 am   



scx napisał(a):
Quote:
A jak ten czas mierzyc? Przychodzi mi do głowy tylko timer w przerwaniu
inkrementujący jakiś rejestr, sprawdzany i zerowany w przerwaniu od impulsu
z silnika - czyli druga wymyślona przeze mnie metoda.


Spróbuj tak:

Impuls z silnika powoduje przerwanie. W obsłudze przerwania odczytujesz
stan licznika(czas od poprzedniego impulsu) a następnie zerujesz timer.
Dorzuć jeszcze, żeby przepełnienie timera powodowało jego zatrzymanie.
Robie tak w każdym projekcie związanym z pomiarem RPM i działa
niezawodnie. ATtiny mimo że mały to i tak będzie się nudził niesamowicie:)

Pozdro

scx
Guest

Sat Jan 13, 2007 1:53 am   



Dnia Sat, 13 Jan 2007 00:28:06 +0100, Luk@sz napisał(a):

Quote:
scx napisał(a):
A jak ten czas mierzyc? Przychodzi mi do głowy tylko timer w przerwaniu
inkrementujący jakiś rejestr, sprawdzany i zerowany w przerwaniu od impulsu
z silnika - czyli druga wymyślona przeze mnie metoda.

Spróbuj tak:

Impuls z silnika powoduje przerwanie. W obsłudze przerwania odczytujesz
stan licznika(czas od poprzedniego impulsu) a następnie zerujesz timer.
Dorzuć jeszcze, żeby przepełnienie timera powodowało jego zatrzymanie.
Robie tak w każdym projekcie związanym z pomiarem RPM i działa
niezawodnie.

Dobry pomysł z zatrzymywaniem timera. Pozwala zmiejszyć dzielnik timera ->
zwiększyć dokładność pomiaru czasu -> rozdzielczość. Tak zrobię.

Usiadłem sobie z karteczką, i wszystko policzyłem. Przy dzielniku timera
256, mam 1 "tyknięcie" co 213us. 8 bitowy rejestr liczący tyknięcia,
pozwala zmierzyć maks okres 54 ms. 54 ms, przy dwóch impulsach na obrót
wału, daje 555 rpm.
Zmiejszenie dzielnika na 128 powoduje, że minimalnie mierzę 1098 rpm. W
sumie mogłoby być - nawet gdyby zachciało mi się dorobić sygnalizację zbyt
niskich obrotów to pomiar będzie miał wystarczający zakres.

Dodatkowo pomyślałem o zerowaniu licznika wewnętrznego timera przy każdym
impulsie z wału. Gdybym tego nie zrobił, tyknięcia przerwania timera
mogłyby się nieszczęśliwie ułożyć z sygnałami wału, i miałbym 2 tyknięcia w
plecy, czyli błąd pomiaru rpm, przy dzielniku 256, jakieś 360rmp na plusie.
Czyli zamiast przy 5022 rpm układ zareagowałby przy 4662.

Zapewne wielu z Was puka się w głowę, mówiąc, że to nie miało mieć dużej
dokładności. No nie miało, ale teraz już ma Razz Po co? Zaciekawiła mnie taka
kwestia. Może kiedyś będę musiał zrobić coś dokładnego - to będę wiedział
jak.

Quote:
ATtiny mimo że mały to i tak będzie się nudził niesamowicie:)

Mały, ale wariat Razz
Cośtam mu jeszcze dorzucę, ale i tak 98% wykonywanych instrukcji to nop
będzie.

Pozdro i dziękuję wszystkim za rady!

William
Guest

Sat Jan 13, 2007 7:40 am   



Quote:
Mały, ale wariat Razz
Cośtam mu jeszcze dorzucę, ale i tak 98% wykonywanych instrukcji to nop
będzie.


od nop lepsze:

sleep
rjmp PC-1

oczywiście włącz wcześniej tryb sleep

scx
Guest

Sat Jan 13, 2007 11:55 am   



Dnia Sat, 13 Jan 2007 07:41:25 +0100, William napisał(a):

Quote:
Mały, ale wariat Razz
Cośtam mu jeszcze dorzucę, ale i tak 98% wykonywanych instrukcji to nop
będzie.


od nop lepsze:

sleep
rjmp PC-1

oczywiście włącz wcześniej tryb sleep

W głównej pętli będzie jeszcze mrygał dwiema diodami. Mógłbym go uśpić, ale
z braku drugiego timera musiałbym wszytsko robić na tym jednym. Poza tym
tiny12 budzi się przez 4 cykle :] A mnie dopadła mania dokładności.
Kwestia poboru prądu całkowicie mnie nie interesuje, a już różnica jednego
mA...

William
Guest

Sat Jan 13, 2007 12:08 pm   



scx napisał(a):
Quote:
Dnia Sat, 13 Jan 2007 07:41:25 +0100, William napisał(a):

Mały, ale wariat Razz
Cośtam mu jeszcze dorzucę, ale i tak 98% wykonywanych instrukcji to nop
będzie.

od nop lepsze:

sleep
rjmp PC-1

oczywiście włącz wcześniej tryb sleep

W głównej pętli będzie jeszcze mrygał dwiema diodami. Mógłbym go uśpić, ale
z braku drugiego timera musiałbym wszytsko robić na tym jednym. Poza tym
tiny12 budzi się przez 4 cykle :] A mnie dopadła mania dokładności.
Kwestia poboru prądu całkowicie mnie nie interesuje, a już różnica jednego
mA...

Ależ jest drugi timer Smile Wathdog. W sam raz na mruganie dwiema diodami.

scx
Guest

Sat Jan 13, 2007 1:33 pm   



Dnia Sat, 13 Jan 2007 12:08:16 +0100, William napisał(a):

Quote:

Ależ jest drugi timer Smile Wathdog. W sam raz na mruganie dwiema diodami.

Tak też pomyślałem w pierwszym odruchu... Ale watchdog wywołuje normalny
reset, nie ma dla niego oddzielnego wektora przerwania.
A tak się składa, że w momencie włączenia układ musi kilka rzeczy zrobić -
których wykonywanie za każdym cyknięciem watchdoga jest mocno
niepożądane...
No chyba że jest jakiś sposób rozróżnienia, czy reset nastąpił przez
watchdoga czy w wyniku włączenia zasilania?

Marcin Stanisz
Guest

Sat Jan 13, 2007 1:52 pm   



On Sat, 13 Jan 2007 13:33:21 +0100, scx wrote:
Quote:
No chyba że jest jakiś sposób rozróżnienia, czy reset nastąpił przez
watchdoga czy w wyniku włączenia zasilania?

Jest - w rejestrze MCU jest wskazane źródło resetu.

Pozdrawiam
Marcin Stanisz

--
"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"

T.M.F.
Guest

Sat Jan 13, 2007 4:27 pm   



Quote:
Sprzęt:
ATTiny 12 pracuje z wewnętrznym generatorem (zawsze jeden element mniej na
płytce)
Zasilany przez stabilizator napięcia ujemnego 79L05. Czyli masa układu jest
na +7V względem masy samochodu. A to dlatego, żeby lampki sterowane +12V
włączać po prostu jednym tranzystorem PNP.
Po co? I tak dajesz opornik na baze, a wbudowane diody zabezpieczajace
obetna napiecie do Vcc+0,6V. Albo daj MOSFETa.

Hmm... Jeśli mam na wyjściu AVRka +5V względem masy samochodu, to mam
względem +12V całe 7V. A -7V na bazie względem emitera to aż nadto, żeby
tranzystor PNP puścił prąd do żaróweczki.

No to zastosuj NPN, chociaz nie wiem jak to jest rozwiazane w
samochodzie i cvzy polaczenia ie ograniczaja sposobu zasialania zarowki.

Quote:
Moze znowu prosciej bedzie popedzac timer z zewnetrznego zrodla CLK,
jakim beda impulsy z walu. Drugi timer co jakis czas daje przerwanie i
po prostu odczytujesz ile bylo impulsow w ustalonym czasie.
No niestety, tiny12 ma tylko jeden timer Smile

To masz ATTiny13, 25, 45, 85, do woli. Akurat 12 jest paskudna bo nie ma
SRAM i tylko 3 pozycyjny stos, dzieki czemu musisz uwazac na przerwania,
szczegolnie jesli korzystasz z RCALL.

Quote:
Przy zegarze 1,2MHz, daje to odpowiednio 4 i 8 us. No chyba że coś źle
policzyłem. Ciekawe jakie jest prawdopodobieństwo, że wystąpi przerwanie
zwiększające obr, pomiędzy instrukcjami subi i clr - wtedy na pewno coś
zadziałoby źle

Inne ATTiny maja tez wewnetrzny zegar 9,6MHz.


--
Inteligentny dom - http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz sie do projektu.

Goto page 1, 2  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Ustawienie ATTiny 12 do pomiaru obrotów silnika i włączania lampki powyżej 5000 RPM

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map
Nasz serwis wykorzystuje pliki cookies. Korzystanie z witryny oznacza zgodę na ich zapis lub odczyt zgodnie z ustawieniami przeglądarki. Informacja o ciasteczkach