Witam. 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?
|
|||
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.
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.
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.
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.
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.
Pytanie takie... czy sygnał
Pytanie takie... czy sygnał można brać z fototranzystora ?
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.
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...
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