Rezystory powinny byc 10k. Sciag sobie biblioteke Rotary, masz gotowa i precyzyjnie dzialajaca obsluge enkodera, albo w przerwaniu, albo normalnie, do wyboru. Pozdr
Brniesz w ślepą uliczkę. Zaprogramuj timer na zgłaszanie przerwań z częstotliwością rzędu 50..100 Hz. W przerwaniu timera sprawdzaj stan wejść enkodera, porównuj z poprzednim i reaguj.
Nie widzę problemu. 32 enkodery to 64 bity, 8 rejestrów przesuwnych. Ponieważ SPI działa z max CLK/2 to masz przerwanie co 16 taktów. No ale przecież enkoder możesz czytać wolniej, w zależności od założonej max prędkości pewnie nie trzeba częściej niż co 1ms, czyli przerwania ci wyjdą co 0,25ms - kupa czasu. Dekodowanie enkoderów zrobiłbym w przerwaniu...
skoro wykrywasz zmiany w przerwaniu to można tam ustawić flagę (zmienną bool) i wtedy wyświetlać w głównej pętli i ją kasować. Prawdę mówiąc obsługa enkodera w przerwaniu od pinu też nie jest najlepszym pomysłem - chyba, że to enkoder optyczny. Lepiej użyć przerwania timera.
Jeszcze tu: http://www.elektroda.pl/rtvforum/topic18... Ale te zwykłe impulsatory stykowe to są paskudne. Drgania styków trwają dłużej niż czas wygaszania. Zrobiłem też impulsator z silnika krokowego- lepiej ale nie doskonale. Kierunek trzyma- ale co jakiś czas gubił kroki. Trzeba by zastosować jakiś co 7.5 stopnia- a nie mam. Jednak enkoder...
Raczej jednak w przerwaniu bo zabezpiecza to przed zgubieniem impulsów. Dodano po 1 W przerwaniu od jakiegoś licznika oczywiście
Kolego andrzej_nied, Proponuję zastosować timer do generowania przerwań co około 2.5ms. W przerwaniu testujemy wejścia portów nie zawracając sobie głowy jakimiś 'drganiami styków'. Sprawdzone, pewne, proste. Czas 2.5ms dobrany jest tak aby zwykły enkoder 20-32imp./obrót obracany energicznie ręką nie zgubił impulsu (gdy czas pomiędzy przerwaniami za...
Ja bym zrobił na przerwaniu + timer.
Panowie, proszę o pomoc w poprawnym odczycie pozycji enkodera inkrementalnego przez Arduino. Czemu nie użyjesz gotowej biblioteki [url=https://github.com/PaulStoffregen/E... dla Arduino? Będziesz miał wtedy możliwość obsługi tego enkodera z przerwań (dla obu pinów enkodera lub tylko jednego ) lub też bez przerwań. Natomiast w tym [url=https://www.electroschematics.com/1...
Kompilator nie dodaje SEI. Flaga I w SREG jest automatycznie - sprzętowo , a nie programowo - czyli procesor sam ją ustawia w momencie wyjścia z procedury obsługi przerwania. ... a konkretnie robi to rozkaz powrotu z funkcji obsługi przerwania: RETI (Interrupt Return) i tym właśnie różni się od rozkazu RET (Subroutine Return) dla zwykłych powrotów...
Witam. Mam maleńką prośbę. Czy mógłby ktoś z bardziej doświadczonych kolegów podpowiedzieć mi w następującej sprawie?? Mianowicie zliczam impulsy (na zew. przerwaniach) z enkodera i teraz chciałbym ruszyć silnikiem o ileś impulsów i aby ten samoczynnie sie zatrzymał. Problem w tym, że kod na pewno działa poprawnie ale niestety silnik ignoruje moj warunek...
1. z tego co piszesz to przerwanie o najwyższym piriorytecie będzie występowało z częstotliwością 4kHz. Zakładając że będziesz miał zegar 8MHz to na obsługe przerwania (zapisanie 8 bajtów) i obsługe innych przerwań będziesz miał: 8MHz/4kHz = 2000 cykli zegarowych co w przypadku procesorów typu RISC daje jakieś 1500 instrukcji. A to jest całkiem sporo....
Witam, przecież wskazanie enkodera nie zależy od wartości na pinie, tylko od zmiany tej wartości. Teraz przerwanie wywołuje enkoder drugi, a Ty przy okazji zmieniasz pozycję dla pierwszego. Pozdrawiam.
OK, mam nadzieję, że zegar ustawiłeś w opcjach. Ponieważ muszę wyjść, to dam Ci wskazówki, a resztę wymyślisz sam lub koledzy pewnie podpowiedzą. Gdy pierwsze zbocze drgania styku ustawi flagę przerwania i mikrokontroler wejdzie w funkcję jego obsługi, to zaraz na początku automatycznie kasuje (w tym mikrokontrolerze) flagę przerwania. Ty w swoim programie...
Witam. Enkoder na jednym przerwaniu [url=http://www.elektroda.pl/rtvforum/to...
Nie, tego z obsługi enkodera. Jak sądę przejściu 0->top i top->0 towarzyszy przerwanie nadmiaru. Ew. można wykorzystać przerwanie compare z kanałów A-D.
(at)krzysztofh Tak jak pisał kol. (at)BlueDraco wykorzystanie przerwań do obsługi impulsatora nie jest dobrym pomysłem. Raczej należałoby odpalać co określony czas przerwanie sprawdzające stan enkodera. Jeśli upierasz się na wykorzystaniu przerwań to należy dodać chociaż filtr RC na wejście.
Witam... i temat zamykam :-) Zastosowałem jednak obsługę enkodera na przerwaniu Int1. Jedno z wyprowadzeń podpiąłem pod Int1, przerwania ustawiłem na wyzwalane opadającym zboczem a w samym przerwaniu sprawdzam co jest na drugiej "nodze" enkodera i zmniejszam lub zwiększam wybraną daną a którą wiem po indeksie zmienianym w petli głównej do loop. W przerwaniu...
(at)cinek_14 Jak rozumiem masz gotową płytkę, więc to implikuje jakie masz możliwości rozwiązania problemu. Koledzy upierają się, aby wszystko wrzucić do przerwań, co IMHO nie tylko nie rozwiązuje problemu, ale go całość niepotrzebnie komplikuje. Skoro już masz płytkę, to zrobienie 1-wire na UART raczej nie wchodzi w grę. Zresztą nie jest to potrzebne....
Nie wnikając w resztę kodu - w przerwaniu ustawiaj flagę (w zmiennej) na podstawie której zostanie wykonana procedura w funkcji, a na koniec, następuje zmiana flagi na przeciwną. Zatem w przerwaniu nie wykonujesz obsługi serial'a, ustawiasz tylko wartość zmiennej. [syntax=c] #define LED_R 10 #define LED_G 11 #define LED_B 12 #define ENKODER 2 int impulses;...
bo dane na porcie szeregowym pojawiają się dopiero po zakończeniu ruchu( domyslam się, że to przez funkcję delay) i to w "bliżej nieokreślonym" języku. Tak jakbym pomylił się w określeniu prędkości w Serial. begin . Drugą częścią komplikacji jest to, że nie ma mam pojęcia ( gdy uda mi się rozgryźć enkoder ) jak opisać ograniczenie obrotu. To co jest...
Ja coś podobnego zrobiłem na ATmedze16. Podłączyłem enkoder pod wejścia generujące przerwania zewnętrzne i odpaliłem tajmer, zliczam różnice czasu między przerwaniami. W AT90S2313 masz przerwania zewn z PD2 i PD3. w obsłudze przerwania zewn. robisz: prędkość = (obwód_koła / rozdzielczość_tarczy_enkodera) / różnica_czasu_między_przerwaniami lub pomiar...
Witam, [syntax=c]attachInterrupt(ENK1, enkoder, FALLING);[/syntax] Na pinie 3 (PB3), nie ma przerwania INT, które włącza ta funkcja. Attiny85 ma przerwanie INT0 na pinie 2 (PB2), więc wystarczy pozamieniać piny, np. tak: [syntax=c]#define ENK1 2 #define ENK2 4 #define RST 0 #define DATA 1 #define CLK 3[/syntax] Później zmienić to: [syntax=c]attachInterrupt(ENK1,...
Witam. Kupiłem wczoraj enkoder obrotowy EC11SP. Mam problem z odpowiednim podłączeniem go do mikroprocesora AVR. Szukałem jego specyfikacji technicznej, ale znalazłem tylko to: http://www.tokyoden.com/Drawings/EC-11SP... Niewiele ten plik mi pomógł. W dalszym ciągu nie wiem, do których pinów mam podłączyć VCC, GND. Przecieżna tym rysunku masz wszystko...
chce się pozbyć enkodera ze względu na przerwania które potrafią zatrzymać mi prace całego układu Enkoder nie musi być obsługiwany w przerwaniach, ale podobnie, jak przyciski w pętli loop().
Panowie, Prosty temat. Dotychczas sprzętowo-software'ową obsługę enkodera robiłem w najprostszy sposób. Obie nogi z układem całkującym R/C (10k/100nF), jedna noga do przerwania zewnętrznego Falling, w przerwaniu czytamy stan drugiej i na tej podstawie detekcja kierunku. Ale w ATtiny 1604 działa to jakoś dziwnie: czyta co drugie "pyknięcie" enkodera....
witam! To niestety nic nie daje, bo właśnie o to chodzi aby podczas wykonywania przerwania od timer2(enkoder), gdy Timer0 się przepełni, procesor powinien zawiesić przerwanie (enkoder) i przejść do obsługi przerwaia od Timer0(czekaj).
Przebiegi te są najprawdopodobniej delikatnie przesunięte w czasie... Można np ustawić (w uP) przerwanie na jeden z pinów, jeżeli w chwili przerwania na drugim 0 - obroty prawe, jeżeli 1 lewo.
Po pierwsze enkoder możesz obsługiwać sprzętowo na XMEGA - w tym celu konfigurujesz event system na QDEC, a dowolny timer będzie ci zliczał impulsy i pracował jako enkoder. Co do transmisji USART - można paczki odbierać przez DMA, co jest wygodne, można to zrobić w oparciu o przerwania. W tym celu odblokowujesz przerwanie RXComplete sygnalizujące gotowy...
zrob enkoder na przerwaniach. Nie warto bawic sie opcja enkoder bascoma. Gdzies na elektrodzie sa moje przykladu kodu ktore dobrze dzialaja Dodano po 11 http://www.elektroda.pl/rtvforum/topic14...
Sprawdzałeś czy jeden obrót motoreduktora to tyle samo impulsów enkodera? Użyte są HSC ? W jakim przerwaniu odczytujesz te impulsy? Sam enkoder w sobie jest sprawny? Zakłócenia? Wrzuć jakieś zdjęcia?
Aktualny czas cyklu programu możesz zobaczyć w diagnostyce. Obliczenie timer'a zależy od cyklu programu, stąd wynikają niedokładności, na dodatek stan wyjścia ustawiany jest na końcu OB1. Spróbuj użyć wbudowanego generatora PWM (jak HSC jest obsługiwany poza programem) albo ustawiaj wyjście jako P w przerwaniu.
Poprostu enkoder podłączony do samego arduino Musisz jeszcze pamiętać o czymś takim, jak bouncing na stykach enkodera, więc w wypadku generowanie przerwań przez enkoder mogą się pojawiać takie dziwne zachowania. Lepiej skorzystaj ze sprawdzonych bibliotek do obsługi enkodera.
Cóż, nie jest to znana mi metoda obsługi enkodera, ale chyba ciekawsza... Natomiast nie widzę tu operacji na przerwaniach.... To prawdopodobnie powoduje błędy, chyba, że się mylę. Ale enkodery to zawsze zagadka dla mnie były więc wiele nie pomogę.. Pozdrawiam.
Zakładami że to enkoder inkrementalnyy i do obsługi używasz szybkiego licznika HSC. Wtedy masz obsługę zdarzenia typu wartość licznika=wartość zadania przez przerwanie. Np dla HSC0 jest to zdarzenie (przerwanie) 12
Przykłady z pierwszego postu należy przenieść do działu "Jak nie pisać programów". Program w miarę poprawnie zadziała przy niskiej częstotliwości taktowania uC (brak eliminacji drżenia styków) lub gdy pętla główna będzie wykonywać się długo. Tak jak napisał (at)rs6000, enkoder najlepiej obsłużyć na przerwaniach.
W przerwaniu timera, powiedzmy 1000razy na sekundę, sprawdzany jest stan pinu i porównywany ze stanem odczytanym poprzednio, jeśli jest inny to zwiększany jest odpowiedni licznik, a stany aktualne są przepisywane jako poprzednie. Robiłem tak setki razy i zawsze działało dobrze, tylko miałem do czynienia z gotowymi układami impulsatorów ze sprzętową...
Masz rację, nie ma, może to nie jest ten typ przerwania, który pasuje do enkodera poczytam w dokumentacji może coś znajdę jeszcze. Na razie nic nie znalazłem, może po prostu enkoder nie obsługuje przerwań i tyle. Posiedziałem jeszcze dziś nad tym wychodzi na to, że TIM8_UP_IRQHandler jest wywoływany jak pokrętło wraca do pozycji początkowej. Jak pokręcę...
Czy zmienna kierunek jest globalna i volatile? Już po pierwszym przerwaniu powinna przyjąć wartość 1 lub 2, a nie być cały czas 0. Czy zaobserwowałeś zwiększanie wartości zmiennej enkoderA ?
Witam, Piszę obsługę enkodera optycznego w przerwaniu jednak natrafiłem na dziwny problem! Otóż kiedy program uruchamiam w "debugerze" to wszystko śmiga jak należy, gdy wrzucam program na procka to wywoła się kilka-kilkanaście razy przerwanie nagle koniec, nie przyjmuje tego przerwania, wiem bo wynik wyświetlam na wyświetlaczu, sprawdzałem też i program...
Pin ICP nadaje się jeśli chcesz określić np. długość impulsu. Dla enkodera się nie nada - enkoder daje sygnał w kodzie Graya, ponieważ M8 nie ma sprzętowego dekodera tego kodu musisz to zrobić programowo. Aby nie czekać w pętli i ciągle nie sprawdzać czy coś się nie zmieniło wyjścia z enkodera trzeba podpiąć pod wejścia generujące przerwania. W handlerze...
Jeżeli masz na PCB sygnały na wszystkich liniach, jak zmierzysz oscyloskopem, to enkoder działa. Może jest tylko kwestia przerwanych przewodów lub problem z wtyczką, co tam masz podłączone... jaka wtyczka, przewody... Miernik na piszczałkę i ruszać przewodami kablem, zapewne tam masz problem z niedziałaniem maszyny... A może masz przerwane przewody...
Na Mega328 z KB RAM uruchamianie OS nie bardzo ma sens. Zrób wielowątkowość opierając cały program o maszynę stanów. Zapomnij, że istniej delay. Owszem, krótkich delay (mikrosekundy) w AVR przeważnie nie da się przeskoczyć ale nie zawsze. Na 1-Wire, można obsłużyć USARTem. Nie ma żadnych delay i 1-Wire działa na przerwaniach. Masz więc już pierwszy...
Mi się wydaje, żeby zrobić to na jednym przerwaniu. Mamy stan 11 Ustawiamy na przerwanie na zboczu opadającym. Kiedy się wykona przerwanie, sprawdzić drugi pin. Jeśli wyjdzie 01 ro znaczy ze obrót był w jedną stronę, jeśli 00 to znaczy, że był w drugą. Teraz trzeba zmienić na przerwanie zboczem narastającym. Jeśli po obrocie mamy 11, to obrót w jedną...
Nie należy popadać w skrajności. Do elektroniki sterującej wystarcza 2.5mm2. Kłopot zaczyna się przy większych mocach zainstalowanych urządzeń. Drugi koniec przewodu wyrównującego potencjał to obudowy urządzeń i masy, ekrany. Tylko, że tu też nie ma jednoznacznej odpowiedzi gdzie się wpiąć. Czasem punkty masowe/ekranowe muszą zostać odizolowane (np....
ale wykorzystując przerwania dam rade podłączyć tylko jeden enkoder do atmegi8. Chyba że są tam przerwania o których nie wiem
Pokazaną tam funkcję (ReadEncoder) po prostu zamień na ISR z przerwań enkodera, albo zrealizuj obie funkcje oddzielnie - tzw. wykorzystaj przerwania do wybudzania, a odczyt enkodera zrób niezależnie od przerwań pinu, np. w przerwaniu timera
Fakt, ze jest milion różnych sposobów na zrobienie tego. Ok spróbuję tym sposobem co mi podsunąłeś. W sumie nawet lepiej tak. Dzięki. Dodano po 5 Ok, coś tam skleciłem, jest to niepełny program, bo nie ma w nim np. ustawień dla Mute i trybu, oraz nie pokazuje na LCD wartości, ale to później. Póki co mam dziwny problem z wyświetlaniem, ale o tym za chwile....
Witam mam prośbę do osób bardziej doświadczonych w temacie mikrokontrolerów zrobiłem opisywane enkoder na przerwaniach z noty znalezionej na stronie bascoma i chodzi jak należy jednak chce zrobić to tak jak opisywałem wcześniej nie chce przerabiać urządzenia i przyznam się ze mam problem z wrzuceniem tego co kolega napisał powyżej do procka może ktoś...
Witam, Możesz częściej wywoływać przerwanie ale nie licz na więcej ;) . Do odczytu enkodera w PLC masz specjalne wejścia i bloki. Pozdrawiam,
Jak już robić koniecznie na przerwaniach zewnętrznych to na nowszych układach z PCINT, podpinając tylko jedno przerwanie na enkoder, drugie jest całkowicie zbędne. Obsługujemy tylko jedno zbocze w przerwaniu, drugie odrzucamy. W obsłudze przerwania należy pamiętać poprzedni stan, aby nie odczytywać drobnych drgań jako pełnoprawnego impulsu.
Dla enkoderów ze stykami mechanicznymi, jeśli nie podłączasz go do uC za pomocą prostego filtru RC, wykorzystywanie timera czy przerwań to ślepa uliczka. Z racji, że takie enkodery nie generują impulsów o dużej częstotliwości, to najlepiej zrealizować odczyt programowo, np. cyklicznie w systicku sprawdzać czy mamy stan wysoki przez minimalny czas i...
->tmf Chyba masz rację, ale nie zmuszaj mnie już do zaglądania do słownika... :) Przyznam, że już dość długo załatwiam obsługę enkodera przerwaniem na zboczu i z dobrym enkoderem, nawet mechanicznym, działa to zadawalająco, chociaż ostatnio musiałem dodawać jakiś filtr RC na wejściu.
A kto to napisał: Zrób sobie przerwanie EXTI na zbocze narastajace na linii A enkodera, w przerwaniu sampluj linię B, dzięki czemu ustalasz kierunek - w tym samym przerwaniu ustalasz stan linii U/D i odpalasz timer, ktory wygeneruje impuls STEP. Niestety trzeba reagować na narastające i opadające zbocza obydwóch linii.
to ja też coś od siebie dołożę spróbuj wszystko zapisać w postaci liczbowe tj nie baw się w przesunięcia bitów i takie tam tylko na sztywno w pisz co masz wpisać do rejestrów, wnioskuje ze używasz darmowego kompilatora spróbuj wyłączyć optymalizacje kodu, ewentualnie spróbuj dopisać w obsłudze przerwania czy to wejście faktycznie ma stan niski. Swego...
Enkoder można na kilka sposobów oprogramować..PCINT (przerwania) albo POOLING (testując stan co jakiś czas Timerem). Wszystko sie dobrze sprawdzi gdy dobrze zastosowane :D
Przede wszystkim PCINT wymaga większego nakładu programowego. Przy włączonych wielu źródłach danego przerwania PCINT trzeba analizować, który pin zgłosił przerwanie i w jaki sposób się to odbyło (które zbocze). PCINT jest niżej w hierarchii przerwań, zatem na obsługę tego przerwania trzeba czasem dłużej poczekać (w zależności od konstrukcji programu)...
Witam Pisalem kiedys program do sterowania robotem (manipulatorem ) w bascomie. Zliczal on miedzy innymi impulsy z 3 enkoderow. i wszystko ladnie chodzilo: Fragment kody ktory zlicza impulsy z 3 enkoderow: //enkoder 1 Enk1_a Alias Pinb.0 Enk1_b Alias Pinb.1 //enkoder 2 Enk2_a Alias Pinb.2 Enk2_b Alias Pinb.3 //enkoder 3 Enk3_a Alias Pinb.4 Enk3_b Alias...
Ale wtedy to pewnie już z jakimś innym procesorem? Z80, 8088 albo 68000. 68k fajne procki. Zrobiłem system na 68000/12MHz. Dekodowanie adresów, sygnały BUSERROR , reset itp robił GAL, kolejny enkoder priorytetów przerwań. Później wszystko realizował CPLD. Pisanie w Asseblerze na 68k to przyjemność a kompilator C potrafi rozwinąć skrzydła. Niestety...
Witam, Konfiguracja wejścia oraz bloku jest pod tym adresem: [url=http://www.automation.siemens.com/m... [url=http://support.automation.siemens.c... Pozdrawiam
Twojego programu nie analizowałem, nie chciało mi się, albowiem od razu Ci powiem, że ja bez przerwań w ogóle bym się za to nie zabierał i dotyczy to nie tylko enkodera ale także zwykłych przycisków. Tak jak napisał tmf , każdy zestyk ma tendencję do drgań, a więc enkoder również, jest to opisane w książce Pieńkosa i Turczyńskiego "Układy scalone TTL...
Jest parę błędów które widzę już teraz. Pozwoliłem sobie wstawić to w syntax bo nie dało się czytać :) unsigned char ilosc_imp=0; powinno zostać opatrzone jeszcze etykietką volatile. Czyli: [syntax=c] volatile unsigned char ilosc_imp=0; [/syntax] Volatile wyłącza dla tej konkretne zmiennej optymalizację. Jest to konieczne jeżeli korzystasz ze zmiennej...
Sprawdź kod w załączniku. Warunkiem użycia jest wykonanie kodu w przerwaniu od timera. Im szybsze będzie przerwanie tym szybsze impulsy będą wychwytywane. Testowałem kod z enkoderem optycznym 360 imp. oraz przerwanie było ustawiane na poziomie 0.1 ms - 1 ms kręcąc nim "jak szalony". Przy Twoim enkoderze pewnie szaleństwo będzie bardziej ograniczone,...
Sygnał na dwóch wejściach enkodera jest w zależności od kierunku obrotu przesunięty w fazie. A ten kod to wykrywanie sekwencji. Na początku wpisujesz stany pinów do zmiennej i na jej podstawie (o obecnego stanu) zmieniasz stan na kolejny. Drgania styków eliminowane są poprzez przejścia wewnątrz danej sekwencji. Wystarczy wrzucić go w przerwanie co ileś...
Zrobiłem po swojemu czujnik PAS, dwa czujniki hall A3144, dwa rezystory pullup i attiny13. Prosty program mieści się w 700B i działa super, na wyjście układu wystawia impulsy tylko wtedy, gdy tarcza z magnesami kręci się w jednym kierunku. Odczyt impulsów w przerwaniu, z użyciem kodu Graya jak dla enkoderów. Płytka będzie malutka, projektuję tarczę...
0,000000069s - 1/14,475MHz - czas jednej instrukcji procesora 0,000086806s - (1/115200) *10 - najkrótsza ramka(8 bitów danych + start + stop) - co taki okres może przyjść przerwanie od portu szeregowego. Jak widać czasu jest dość(ponad 1000 instrukcji na przerwanie) pytanie co jeszcze robi procesor. Jak odbierasz impulsy z enkodera?
Zastosowałem rozwiązanie oparte na mikrokontrolerze z rodziny ATmega + zmodyfikowany przez Briana Lowa szkic autorstwa Bena Buxtona. Wyjście na 2 mikroprzekaźniki. Działa bez zarzutu. Jest debouncing, nie ma gubienia impulsów. Układ działa nawet przy "wariackim" kręceniu pokrętłem enkodera (choć nie do tego został stworzony). W przyszłości: - przepisanie...
Szczerze mówiąc impulsator w dalszym ciągu nie działa jak powinien :/ Nie mogę sobie z nim poradzić :/ Co do przerwania to nie mogę obsługiwać impulsatora w przerwaniu.
Według mnie najlepiej było by do procka doprowadzić dwie linie. Program i tak w 99% przypadków musi reagować na każdy przeskok enkodera więc wydaje mi się, że najlepszym rozwiązaniem było by wyprowadzenie sygnału impulsu oraz kierunku. Impulsy podpinamy pod przerwanie zewnętrzne mikroprocesora a w jego obsłudze sprawdzamy wejście odpowiadające za kierunek...
Zrób obsługę tego encodera w przerwaniu, a nie w pętli typu for(1). (Na stronie, z której masz ten kod jest przykład z przewaniem ang. interrupt). Polecam przeczytać całą tą stronę z arduino playground. Dla innych, chodzi o [url=http://playground.arduino.cc/Main/R... P.S. Moim zdaniem najprościej to napisać w gołym C, a nie w tym całym...
Wpisywanie $CRYSTAL bez rzeczywistej zmiany taktowania procesora będzie powodować, że wszelkie opóźnienia i obliczenia kompilatora dotyczące liczników nie będą zgodne ze stanem faktycznym. GETRC5() korzysta aktywnie z licznika TIMER0. Tak manewruje wartością wpisaną do rejestru licznika oraz preskalerem by otrzymać jednakowe odcinki czasu zliczane później...
Jaki będziesz miał wyświetlacz? Alfanumeryczny że string będzie ok? Czy może LED lub LCD segmentowy? Żeby zmieniać wartość enkoderem trzeba go obsłużyć... Enkoder ma przycisk? Zatem weź zmienną Word w której będziesz zmieniał nastawy np. [syntax=vbnet]dim wartosc as word dim index_wartosc as byte if index_wartosc =1 then wartosc=wartosc + 1 end if if...
No ciężko to jeszcze bardziej uprościć. Bo to są podstawy podstaw. Po prostu uruchamiasz przerwania dla pinów 8 i 9. Oraz 13 i 14. Z reakcją zarówno na zbocza narastające jak i opadające. W STM32F10x przerwania dla pinów 5...9 oraz 10...15 są wspólne. Czyli mają jeden wektor przerwania i nie wiadomo który pin spowodował wystąpienie przerwania. Więc...
(at)bigmaster Dla 50 Hz masz jakieś 24.7 mm/s Czyli dla każdej innej częstotliwości masz 24.7 * f /50 na sekundę lub lub 2.47 * f/50 na 100ms Jeśli chcesz śledzić ruch to co każde przerwanie dodajesz do zmiennej wartość 2.47 * f/50 [mm]
Ja obsługę takich enkoderów wykonuje zawsze na jednym przerwaniu. Jeden z impulsów wywołuje przerwanie, w obsłudze przerwania sprawdzam tylko stan drugiego kanału. Jeśli jest wysoki to ++licznik, jeśli jest niski to --licznik.
To jest zwykła fizyka. Silnik ma ograniczoną prędkość i tego nie przeskoczysz ale można łatwo to rowiązać. Tak to robię na enkoderach W przerwaniu enkodera inkrementuję zmienną "W_lewo" albo "W_prawo" zależnie od kierunku pokrecenia. Zmienne są inkrementowane w dowolnym tempie i żadnego kroku nie zgubisz. Następnie w przerwaniu Timera, albo nie częsciej...
No to wg. mnie wywazasz otwarte drzwi. Skoro w wiatraku masz enkoder to wystarczy dowiedziec sie co to za rodzaj enkodera i napisac aplikacje. Jezeli zwykly impulsowy enkoder 2-fazowy to musisz znac ilosc impulsow na obrot. Szybkim licznikiem liczysz z niego imulsy a timerem liczysz czas i ustawiasz przerwanie na wartosc zadana timera. W tym przerwaniu...
Nie da się tego precyzyjnie wyliczyć. Dekodowanie impulsów z enkodera na M328 odbywa się programowo - np. tak, że impulsy z jednego kanału generują przerwania (nie jest to idealne rozwiązanie, ale na początek nie komplikujmy). W efekcie to jak często mogą się one pojawiać zależy od czasu jaki MCU spędza w funkcji obsługi tego przerwania, ale także od...
Mam problem jeszcze z enkoderem, mianowicie jedno kliknięcie jest liczone jako 2. kod jest z ksiazki Tomasza Francuza. Gdzie mogłbym szukać błędu? Niekoniecznie jest to błędem. Zależy to od budowy enkodera - są takie, które generują nawet 4 impulsy na jedno "kliknięcie" - po prostu trzeba podzielić wynik przez 4 lub 2 w zależności od typu enkodera.
Takie ustawienie enkodera jest mozliwe. Reagowanie na stan to bład. Powinieneś reagować na zbocze. Np. przerwanie zewnętrzne AVR'ów potrafi reagować zarówno na zbocze narastajace i/lub opadające. Jak odczytywac w którą strone następuje ruch?. Najlepiej jak sobie znajdziesz gdzieś w internecie opis takiego enkodera z wykresami sygnałów wyjściowych, bo...
Zacznij od początku, to znaczy weź jakieś Menu z Enkoderem, jako przykład i zapanuj nad nim. A później do działającego przykładu dorobisz swój program. Generalnie albo robisz Switch-Case, albo duużo bardziej skomplikowane rozwiązania na obiektach, które w kodzie będą bardziej eleganckie, ale trudniejsze dla zrozumienia dla początkujących. Ja zrobiłem...
Ponieważ PD2 nie da się skonfigurować jako UART5_TX to nie można zrealizować pół-automatycznego zegara. Pozostaje tylko działanie rdzenia lub przesłanie ciągu danych z użyciem DMA do GPIOD->BSRR dla PD2. Odczyt danych z PA15 będzie wtedy synchronicznie ze zmianą stanu pinu PD2. Obsługa w przerwaniu będzie kosztować trochę więcej, ale też jest możliwa....
roblem jaki widzę to że czasem taki uklad drga minimalnie np 1-2 piki enkodera i jak to się trafi na progu przepełnienia, układ będzie ciagle w pętli przerwań. Nie, gdyż dla wejść enkodera można w XMEGA włączyć sprzętowy filtr. Ponadto to mogłoby się zdarzyć wyłącznie, gdyby dochodziło do cyklicznych zmian 0xffff-0, co jest niezbyt prawdopodobne. Enkodery...
Witam, W przerwaniu czasowym jak jest dostępne. Jak nie zostają timery. Pozdrawiam,
w ten sposob pozbylem sie delaya w ogole Jeżeli nie masz żadnych delay w loop() to tym bardziej możesz przenieść obsługę przycisku w to miejsce. Proponuję użycie EasyButton: https://github.com/evert-arias/EasyButto... Funkcja read() z tej biblioteki też nie wprowadza żadnych delay(), a detekcję naciśnięcia przycisku można sobie elegancko podpiąć pod...
szukaj jest 50 postów gotowców za free
Kompilator sam inicjalizuje domyślnie zmienne wartościami 0. Dopiero jak chcesz to nadajesz wartość. Z portami powinno być tak samo, ale nie zawsze. To są takie niuanse czasem. Na przykład jeśli użyjesz biblioteki LCD4BUSY.lib po to by użyć pinu WR lcd i przy okazji zaoszczędzić kodu to ona automatycznie wpisze Ci do całego rejestru DDR jedynki. Żeby...
Aha zapomniałem napisać,funkcja encoder jest w przerwaniu bo gdyby byla w pętli , za wolno by sie wykonywała ze względu na odpowiedni czas odświeżania dla lcd... to spróbuj odwrotnie lcd w przerwaniu a enkodery w pentli
Czy w ogóle ten układ z bramek xor to właśnie układ filtrujący, czy może ma inną funkcję? Nie jest to układ filtrujący, jego zadaniem jest zamiana sekwencji sygnałów z enkodera na jawne sygnały STEP / DIR. W swoim projekcie też wykorzystałem enkoder podpięty bezpośrednio do przerwania zewnętrznego arduino i był on niezwykle czuły na zakłócenia (włączenie...
Raczej utrudnienie, łatwiej pisać soft na jeden uC niż na kilka. Twierdzisz kolego, że łatwiej napisać soft jednocześnie obsługujący enkoder, LCD oraz generowanie sygnału niż 2 osobne ? Naturalnie. Jaki problem aby DMA generowało przebieg, pętla główna obsługiwała LCD a przerwania modyfikowały DMA aby uzyskać modulację? Powyższe stwierdzenie jest chyba...
Problemem przy sterowaniu programowym jest np. obsługa enkodera czy innych przerwań. Wtedy efekty już ciężej zrobić bez "mignięć i przycięć". Ale ogólnie cena/jakości i możliwości wymiata.
Witam. Do Atmegi mam podłączony enkoder z drukarki na INT0 (obsługuje przerwanie). oraz rs232 , który komunikuje się z aplikacją na PC(też przerwanie). Opcja pierwsza: czytam dane z enkodera manualnie : mam o programie guzik "daj dane". Gdy kręcę enkoderem jak szalony to w lewo to w prawo a potem wciskam guzik "daj dane" to dostaje to co trzeba - znaczy...
Cześć, mam pytanie odnośnie Timerów w uC ATmega. Potrzebuję następujących opcji: - zliczanie impulsów z dwóch enkoderów - generowanie dwóch przebiegów PWM - generowanie przerwania co kilka ms. ..............? Czy są jakieś AVR'y mające 4 timery? ........... Pozdrawiam, Bartek Wystarczy ci Atmega48/88/168 Dla 2-ch sygnałów PWM wystarczyłby 1 timer z...
Takie coś jest w kontrolerach przerwań ale szukając dekodera priorytetowego wskazało na enkoder priorytetowy 8 na 3 (74148) i jak do tego dołączysz demultiplekser 3 na 8 to w zasadzie aktywna będzie jedna linia - tylko trzeba zadbać o negacje i sygnały informujące, że przynajmniej jedna linia wejściowa jest aktywna.
Blokować przerwania na czas odczytu, lub zrobić tak, żeby w ogóle nie czytać tego poza przerwaniem, np. tylko wyświetlanie na LCD w pętli, a konwersja w przerwaniu. Nowy C ma słowo kluczowe _Atomic, które dałoby plokadę przerwań na czas odczytu.
Niespecjalnie, chyba, że to będzie przerwanie wyzwalane zboczem, a nie poziomem. Niemniej gorąco cię zniechęcam do robienia obsługi enkodera na przerwaniach wyzwalanych zboczami z pinów IO. Lepszym pomysłem jest przerwanie timera co określony czas i w nim badanie stanu pinów IO. Niemniej gotowca znajdziesz w darmowych przykładach do mojej książki (do...
Najprawdopodobniej udało mi się rozwiązać. Problemem jednak było środowisko, pomogła reinstalacja. Mam jeszcze problem z enkoderem, działa tylko w jedną stronę- nie da się zmniejszać wartości zmiennej a jeśli od komentuję linijkę "pozycja_menu--; w przerwaniu INT1 wartość stoi w miejscu. Obsługę enkodera wrzuciłem w przerwania, deboucing zrobiony jest...
(at)jta gdzieś wyżej pisałeś o czasach rzędu 30uS. przy zegarze rzędu 16MHz i cyklu 1/16MHz=62,5ns bez problemu ztestujesz takie rzeczy po odpaleniu przerwania. Chyba że wymyśliłeś czasy zbliżone do cyklu procesora, to wtedy zaczynają się schody. Ogólnie prosty odczyt enkodera robi się tak, że jeden pin wyzwala "normalne" przerwanie, ale w obsłudze...
Niestety przy takiej prędkości obrotowej enkoder nie "łapie" już wszystkich punktów. Jeśli dobrze rozumiem, to chodzi Ci o to że nie widzisz wszystkich liczb co jeden po drugiej stronie portu szeregowego. A to akurat nie jest niczym dziwnym bo klasa Serial zapewnia (na UNO) transmisję mniejszą niż 50 tysięcy znaków na sekundę. A Ty potrzebujesz (600RPM/60s*720imp)...
Szanowni Forumowicze, mam problem z regulacją prędkości obrotowej silnika DC wyposażonego w enkoder za pomocą przerwań INT. Enkoder to czujnik Halla i odbiera impulsy z magnesu neodymowego na wale silnika (magnes 8-polowy). Prędkość kontroluję za pomocą generowanego PWM na atmedze podawanego na mostek L293DNE. Atmega pracuje na 1MHz, a licznik to Timer/Counter0...
enkoder zliczanie impulsów przerwaniu opóźnienie przerwaniu rs232 przerwaniu
diody odwrotnej polaryzacji przewód licznika rozdzielnicy vaillant podtrzymanie
parrot ck3100 aktualizacja opryskiwacz akumulatorowy
Płyta główna EVA MAIN 454050200 w ekspresach Siemens EQ.7 Seat Altea - niestabilny tempomat: przyczyny i rozwiązania