"obrotomierz" attiny2313 problem


Witam.
Pisałem tutaj już kiedyś o moim projekcie jednak zmieniłem znacznie kod i procesor, więc założyłem osobny wątek.

Procesor ma zliczać obroty, po przekroczeniu pewnej wartości ma zapalić diodę LED.

Kod który napisałem wygląda tak:

$regfile = "attiny2313.dat"
$crystal = 8000000                                          ' fuse bity przestawione na 8MHz
 
Config Portb = Output
 
Portb = &B00000000
 
 
Config Pind.0 = Output
Config Pind.1 = Output
Config Pind.2 = Input                                       'sygnał
Config Pind.3 = Output
Config Pind.4 = Output
Config Pind.5 = Output
Config Pind.6 = Output
 
Portd = &B11111111
 
 
 
 
Dim Czas2 As Single
Dim Czas As Word
Dim Rpm As Word
Rpm = 0
 
 
 
Config Int0 = Low Level
On Int0 Licz
Enable Int0
Enable Interrupts
Config Timer1 = Timer , Prescale = 256
Enable Timer1
Stop Timer1
Timer1 = 0
 
 
Portb.0 = 1
Wait 1
Portb.0 = 0
 
Do
 
If Rpm >= 5000 Then
 
 
Portb.0 = 1
 
Else
 
Portb.0 = 0
 
End If
 
 
 
 
Loop
 
End
 
 
 
Licz:
   Czas = Timer1
   Timer1 = 0
 
   If Czas = 0 Then
     Start Timer1
   Else
     Czas2 = Czas * 0.000032
     Czas2 = 60 / Czas2
     Rpm = Round(czas2)
     End If
 
 Return

Problem w tym, że po podaniu sygnału na wejście INT dioda LED zapala się na stałe i nie gaśnie. Wydaje mi się, że coś jest nie tak z przerwaniem, podawany impuls jest za długi, timer się przepełnia lub coś podobnego. Zmieniłem timer z 8 bitowego na 16 bitowy jednak to nie pomogło :/ Ma ktoś jakieś pomysły?




Portret użytkownika mirley

Re: Obrotomierz

Po pierwsze zastosował bym przerwanie na zboczu int0 a nie na poziomie. Prawdopodobnie cały czas wykonuje się etykieta licz i timer nie ma szans poprawnie liczyć czegokolwiek. Z czego podajesz impulsy na int0. Poza tym ja bym nie wyłączał timera na starcie, niech cały czas pracuje. Coś tam policzy a będzie prostsza procedura o jednego ifa.

Podłącz to int0 na przycisk, ustaw w programie na razie taką liczbę obrotów żebyś był wstanie wyklikać i sprawdź czy działa

-

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 paavo91

Dałem wyzwalanie poziomem

Dałem wyzwalanie poziomem dlatego, że miałem obawy czy impulsator na pewno daje czystego sinusa bez innych śmieci. Dopiero czekam na oscyloskop i sprawdzę to na 100%.
Uważasz, że ten kod będzie działał? Nie przeszkadza procedura przeliczania na obr/min? Może lepiej by zrobić bez tego, tzn, liczyć takty z timera, i przyciskiem zapisywać wartość do pamięci eeprom. Wtedy po przekroczeniu wartości zapaliła by się dioda.
Dzięki.

Portret użytkownika mirley

Re; Impulsator

Impulsator na pewno nie daje sinusa, ma dawać dwa przebiegi prostokątne przesunięte o 1/4 okresu. Nie wiem czy kod będzie dizałał, zamiast pytać sprawdź. Co do przeliczeń to jeśli będziesz używał tylko progowego działania a obroty nie są nigdzie wyświetlane to wywal te przeliczenia i sprawdzaj wartośćz timera czy jest mniejsza od itp.

-

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 paavo91

No udało mi się w końcu to

No udało mi się w końcu to zrobić.
Mój problem obecnie polega na tym, że dioda mruga zamiast świecić światłem ciągłym. Zwłaszcza gdy obroty zbliżają się do ustalonych. Wiesz może, jak zrealizować programową histerezę?
Myślałem nad warunkiem, jeśli dioda się zapaliła, to zapal ją jeszcze raz i odczekaj np. 250ms. Ale nie wiem czy to by się sprawdziło.

Portret użytkownika mirley

Re: Obroty

Wklej to co napisałeś. Lepiej zrobić histerezę. Taką że wysokie obroty to np ponad 5000 a niskie to poniżej 4500 itp. Zakres trzeba dobrać. Działanie jest proste: jeżeli obroty większe niż 5000 to zapal, jesli pomiędzy 5000 a 4500 to nic nie rób a jeśli poniżej 4500 to zgaś. To typowa realizacja histerezy.

Problem może wynikać tez z tego że np pomiar jest niedokładny i kolejne wyniki to np 5021, 4532, 5021, 5032, 4053 itd. Można by było też spróbować to jakoś uśredniać.

Ps. napisałem obroty ale jak kiedys ustalaliśmy lepiej tego nie przeliczac i sprawdzać poprostu wartość timera

-

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 gosc

Pytanie takie... czy sygnał

Pytanie takie... czy sygnał można brać z fototranzystora ?

Portret użytkownika mirley

Re: obroty

Może być , tylko trzeba odpowiedni rezystor dołożyć, żeby zrobił się dzielnik.

-

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 gosc

ten program na początku

ten program na początku tematu jest sprawny czy nie ? jesli nie to bym prosił kogos miłego zeby napisał jakis obrotomierz działający...

Portret użytkownika gosc

Czy ten obrotomierz można założyć do simsona ?

I jak go podłaczyć do układu, prosiłbym o schemat żeby był na wyswietlaczu led