Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięEncoder i Atmel
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Witam,
Chce podlaczyc encoder o rozdzielczosci 1000 imp./obrot do procka - mysle o 2313 bo chce wykorzystac go jako licznik. Problemem jest predkosc dzialania przerwan. Po napisaniu prostego programu, w ktorym na jedno przerwanie podpialem kanal A enkodera zas na inny port kanal B (przesuniety o 90 stopni w fazie wzgledem A), powstja nastepujace problemy: uklad za wolno liczy, gubi sie i na dodatek nie potrafi w trakcie wykonywania przerwania sprawdzic stanu portu do ktorego podpiety zostal kanal B. Przerwanie jest realizowane na opadajacym zboczu sygnalu z A.
Max czestotliwosc wysylanych przez enkoder impulsow to okolo 3kHz
Zastanwiam sie:
- czy wersja demo Bascoma ma jakis bug i zle kompiluje na jezyk maszynowy (zbyt dlugie ciagi operacji)
- czy w takim razie program nalezy napisac w asemblerze
Do programowania procka wykorzystuje programator oparty jedynie na porcie LPT plus kilka rezystorow i kondensatorow. Jest to uklad recznej roboty znaleziony gdzies w sieci rzekomo oparty na projekcie z EP.
Z gory dzieki na pomoc
Chce podlaczyc encoder o rozdzielczosci 1000 imp./obrot do procka - mysle o 2313 bo chce wykorzystac go jako licznik. Problemem jest predkosc dzialania przerwan. Po napisaniu prostego programu, w ktorym na jedno przerwanie podpialem kanal A enkodera zas na inny port kanal B (przesuniety o 90 stopni w fazie wzgledem A), powstja nastepujace problemy: uklad za wolno liczy, gubi sie i na dodatek nie potrafi w trakcie wykonywania przerwania sprawdzic stanu portu do ktorego podpiety zostal kanal B. Przerwanie jest realizowane na opadajacym zboczu sygnalu z A.
Max czestotliwosc wysylanych przez enkoder impulsow to okolo 3kHz
Zastanwiam sie:
- czy wersja demo Bascoma ma jakis bug i zle kompiluje na jezyk maszynowy (zbyt dlugie ciagi operacji)
- czy w takim razie program nalezy napisac w asemblerze
Do programowania procka wykorzystuje programator oparty jedynie na porcie LPT plus kilka rezystorow i kondensatorow. Jest to uklad recznej roboty znaleziony gdzies w sieci rzekomo oparty na projekcie z EP.
Z gory dzieki na pomoc
Kompilatory z wersji DEMO i FULL (O TAKIM SAMYM NUMERZE WERSJI!!!) nie różnią się zasadniczo, więc o błędach teoretycznie nie ma mowy.
Tak. Wypadałoby program napisać w asemblerze. Bascom nie jest zbyt efektywnym kompilatorem.
Przerwania w Bascom szczególnie się "wleczą" się gdyż program odkłada masę rejestrów na stos. Można to wyłączyć przez dodanie klauzury NOSAVE, ale i tak treść przerwania powinno się wtedy napisać w asemblerze.
Tak. Wypadałoby program napisać w asemblerze. Bascom nie jest zbyt efektywnym kompilatorem.
Przerwania w Bascom szczególnie się "wleczą" się gdyż program odkłada masę rejestrów na stos. Można to wyłączyć przez dodanie klauzury NOSAVE, ale i tak treść przerwania powinno się wtedy napisać w asemblerze.
Enocder itd.
Wielkie dzieki. W takim razie kolejne pytanie, czy jest jakis programik - kompilator do AVR by moc pisac w asemblerze. Moj programator oparty jest na prostej konstrukcji pod LPT.
Alternatywnie możesz wykorzystać LS7166 czyli specjalizowany, 24bitowy licznik, przeznaczony właśnie do zliczania impulsów z enkoderów:
http://www.wobit.com.pl/download/pdf/ul ... ls7166.pdf
Do kupienia w Wobicie.
--
MDz
http://www.wobit.com.pl/download/pdf/ul ... ls7166.pdf
Do kupienia w Wobicie.
--
MDz
eee tam schemat...
Jeżeli używasz konkretnego enkodera a nie części z myszki to można wywalić "szmity" z wejścia. Układ z tej aplikacji (AN 115) zlicza rosnące i opadające zbocza sygnału z enkodera. Czyli liczy razy dwa. Jeśli masz enkoder 1K, to chyba nie musisz liczyć obydwu zboczy sygnału. Czyli, nie trzeba używać obydwu przerwań.
1. Na pierwsze przerwanie (INT 1) podajesz opadające zbocze fazy A z enkodera.
2. Na pind4 podajesz sygnał fazy B enkodera.
3. W przerwaniu INT 1 sprawdzasz stan na pind4. Jeśli jest 1 to zmniejszasz licznik impulsów, jeśli nie to go zwiększasz.
4. Jeśli twój enkoder daje jeszcze impuls przy przejściu przez 0 to możesz go podłączyć do INT 0 i wyzwalać rosnącym zboczem sygnału. Zerowe przerwanie (INT 0) zeruje licznik impulsów.
Jeżeli używasz konkretnego enkodera a nie części z myszki to można wywalić "szmity" z wejścia. Układ z tej aplikacji (AN 115) zlicza rosnące i opadające zbocza sygnału z enkodera. Czyli liczy razy dwa. Jeśli masz enkoder 1K, to chyba nie musisz liczyć obydwu zboczy sygnału. Czyli, nie trzeba używać obydwu przerwań.
1. Na pierwsze przerwanie (INT 1) podajesz opadające zbocze fazy A z enkodera.
2. Na pind4 podajesz sygnał fazy B enkodera.
3. W przerwaniu INT 1 sprawdzasz stan na pind4. Jeśli jest 1 to zmniejszasz licznik impulsów, jeśli nie to go zwiększasz.
4. Jeśli twój enkoder daje jeszcze impuls przy przejściu przez 0 to możesz go podłączyć do INT 0 i wyzwalać rosnącym zboczem sygnału. Zerowe przerwanie (INT 0) zeruje licznik impulsów.
Re: Enocder itd.
Jako kompletne środowisko dla asemblera to jest firmowe AVR Studio (do ściągnięcia ze strony Atmela). Można nim także symulować programy pisane w Bascomie (Polecam gdy nie da się czegoś zasymulować w Bascom - np. Config Servos, licznik w trybie PWM itd.) czy wspomiane w dalszych postach AVRGCC.W takim razie kolejne pytanie, czy jest jakis programik - kompilator do AVR by moc pisac w asemblerze.
Do programu w Bascomie możesz także bezpośredno dodawać instrukcje mnemoniczne, nawet nie stosując dyrektyw $ASM i $END ASM. Po prostu piszesz (przykładowo)
Kod: Zaznacz cały
OUT 0x21,R10
p.s. Lepiej śćiągnij sobie AVR Studio 3.56, gdyż AVR Stuidio 4(RC1) niekiedy nie potrafi się "dogadać" z Windowsami - przestaje kompilować kod
Ostatnio zmieniony 21 gru 2003, o 20:31 przez ZbeeGin, łącznie zmieniany 1 raz.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 47 gości