Mam silnik z przekładnią który daje 5 impulsów na jeden obrót przekładni, obrotów jest 139 to liczyłem na piechotę ale chcę wykorzystać Atmege 8 do sterowania tym silnikiem i nie mogę dojść do ładu z liczeniem tych impulsów.
Próbowałem liczyć impulsy funkcja DEBOUNCE i szło dobrze dopóki nie zwiększyłem prędkości obrotowej, zaczęło gubić impulsy
Następnie próbowałem przerwania INT1 ale z racji tego ze impuls podawany na to przerwanie utrzymuje się przez dłuższa chwile to cały program się ścinał (na osi przekładni jest kółko magnetyczne i kontaktron przez to w położeniach skrajnych przekładni po wyłączeniu się krańcówki ciągle jest zwarty kontaktron to powodowało zwiechę procesora)
Próbowałem też funkcji IF...Then ale własnie w położeniach skrajnych ciągle liczyło a gdy procesor dostał impuls to zwiększał zmienną wiele razy w czasie jego trwania a nie tylko raz
Próbowałem liczy impulsy za pomocą TIMER1 ale po wystąpieniu impulsu timer liczy aż do jego zaniku a to tez jest źle
Proszę o jakąś pomoc z tym programem bo ja już nie mam pomysłów
to jest mój aktualny kod bez funkcji zliczania tylko sterowanie silnikiem
Poprawiłem tytuł. - arnoldziq
Przeniesiono z Programowanie Ogólne. - arnoldziq
Próbowałem liczyć impulsy funkcja DEBOUNCE i szło dobrze dopóki nie zwiększyłem prędkości obrotowej, zaczęło gubić impulsy
Następnie próbowałem przerwania INT1 ale z racji tego ze impuls podawany na to przerwanie utrzymuje się przez dłuższa chwile to cały program się ścinał (na osi przekładni jest kółko magnetyczne i kontaktron przez to w położeniach skrajnych przekładni po wyłączeniu się krańcówki ciągle jest zwarty kontaktron to powodowało zwiechę procesora)
Próbowałem też funkcji IF...Then ale własnie w położeniach skrajnych ciągle liczyło a gdy procesor dostał impuls to zwiększał zmienną wiele razy w czasie jego trwania a nie tylko raz
Próbowałem liczy impulsy za pomocą TIMER1 ale po wystąpieniu impulsu timer liczy aż do jego zaniku a to tez jest źle
Proszę o jakąś pomoc z tym programem bo ja już nie mam pomysłów
to jest mój aktualny kod bez funkcji zliczania tylko sterowanie silnikiem
$regfile = "m8def.dat"
$crystal = 8000000
Config Lcd = 16 * 2 'konfiguracja wyświetlacza
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Int0 = Low Level 'konfiguracja przerwania INT0
Config Rc5 = Pind.2 'konfiguracja lini odbioru z pilota
Config Pinb.2 = Output 'wyciągarka gora
Config Pinb.3 = Output 'Wyciagarka Dol
Config Pinb.4 = Output 'ściskanie
Config Pinb.5 = Output 'rozciaganie
Portb.2 = 0
Portb.3 = 0
Portb.4 = 0
Portb.5 = 0
On Int0 Pobr_rc5 'przerwanie na odbiór z pilota
Dim Adres As Byte , Komenda As Byte 'zmienne do rc5
Dim Odebr_kod As Bit 'flaga potwierdzajaca odebranie kodu
Enable Interrupts 'odblokowanie przerwań
Enable Int0
Reset Odebr_kod 'wyzerowanie flagi odebrania kodu
Dim Impuls As Integer 'zmienna pamietająca liczbe impulsów z siłownika
Impuls = 0
Cursor Off Noblink
Cls
Do
Upperline : Lcd "impulsy:" ; Impuls
If Odebr_kod = 1 Then
If Adres = 0 And Komenda = 1 Then 'komenda podniesienia głosników do góry
Gosub Gora 'skok do obsługi podnoszenia
Elseif Adres = 0 And Komenda = 7 Then 'komenda opuszczenia glosników na doł
Gosub Dol 'skok do obslugi opuszczania
Elseif Adres = 0 And Komenda = 3 Then 'komenda ściśniecia głosników
Gosub Scisk 'skok do podprogramu
Elseif Adres = 0 And Komenda = 9 Then 'komenda rozciagnięcia
Gosub Rozciag 'skok do podprogramu
Elseif Adres = 0 And Komenda = 5 Then 'komenda STOP
Gosub Zatrzymaj 'skok do zatrzymania
End If
Enable Int0
End If
Loop
End
Pobr_rc5: 'podprogram odbioru danych z pilota
Disable Int0
Enable Interrupts
Getrc5(adres , Komenda) 'odbiór adresu i komendy
Komenda = Komenda And &B01111111
Set Odebr_kod 'ustawienie flagi odebrania
Return
Gora:
Portb.2 = 1
Portb.3 = 0
Return
Dol:
Portb.2 = 0
Portb.3 = 1
Return
Scisk:
Portb.4 = 1
Portb.5 = 0
Return
Rozciag:
Portb.4 = 0
Portb.5 = 1
Return
Zatrzymaj:
Portb.2 = 0
Portb.3 = 0
Portb.4 = 0
Portb.5 = 0
Return
Poprawiłem tytuł. - arnoldziq
Przeniesiono z Programowanie Ogólne. - arnoldziq