Ja bym zrobił na przerwaniu + timer.
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....
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...
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...
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;...
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...
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....
(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....
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)...
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...
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...
Według mnie to wychodzi tak : dla czujnika z 4 polami odbiciowymi przy prędkości 2000 rmp uzyskasz 8000 imp / min, co daje częśtotliwosć ok. 133 Hz. Przy tej wartości nie bedziesz mial problemów ze Shmittem. Wyjście z czujnika podajesz np. na wejście INT0 mikrokontrolera i w przerwaniu sterujesz wewnętrznym timerem. Po prostu przerwanie INT0 powinno...
Witam, Zacząłem pisać program na atmege8 w bascomie, do sterowania preampem tda8425 przez enkoder, wyświetlając to wszystko na LCD póki co 8x2. Program jest w fazie powstawania, ale mam kilka pytań co sądzicie o moich rozwiązaniach i czy tak w ogóle może być? Enkoder obsługuję przez INT0 i INT1, zbocze opadające. Jeśli wejdzie w procedurę przerwania...
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.
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.
Dzień Dobry Od jakiegoś czasu, po blisko 20 latach przerwy, wróciłem do majsterkowania i elektroniki i muszę przyznać, że zafascynowały mnie dzisiejsze możliwości jakie oferuje się hobbystom. Dostępne dla amatorów technologie, dostęp do wiedzy i możliwości zaopatrzenia się w narzędzia i materiały są zupełnie inne niż przed laty. Ostatnich kilkanaście...
http://obrazki.elektroda.pl/7114210100_1... Witam wszystkich serdecznie ! Z racji tego, że zbliżają się święta postanowiłem podzielić się z wami projektem elektronicznego drzewka szczęścia. Urządzenie powstało prawie rok temu i było prezentem urodzinowym dla mojej dziewczyny którą serdecznie pozdrawiam !!! :D Założenia do projektu:...
http://obrazki.elektroda.pl/9589280700_1... HPS 2014 Hybrydowy laboratoryjny zasilacz sieciowy. Parametry użytkowe zasilacza w skrócie: 1. Wykorzystanie tanich i łatwo dostępnych elementów. 2. Wydajność prądowa min 3A (dla niskich napięć może dochodzić do 5A). 3. Rozdzielczość DAC 12bit. (filtrowany PWM 4.9kHz) 4. Rozdzielczość ADC...
Witam. Enkoder na jednym przerwaniu [url=http://www.elektroda.pl/rtvforum/to...
Poza tym Zrobienie takiego man-in-the-middle, może być trudniejsze niż się na początku wydaje, a atiny nie jest też demonem prędkości, a nie ma sprzętowego licznika do obsługi enkoderów. Co ty opowiadasz... Mamy enkoder, który generuje max kilka impulsów na sekundę i to ma być problem? No, niby tak, ale robienie man-in-the-middle z attiny i enkodera...
(at)karol966 , jeśli Tobie podoba się "zwięzły kod", to tu masz obsługę dwóch enkoderów w trzech liniach:[syntax=c] const int delta[] = {0,1,-1,0, -1,0,0,1, 1,0,0,-1, 0,-1,1,0}; ... //enkoder 1 na PB0 i PB1, enkoder 2 na PB4 i PB5 void enkodery2() { baba = ((baba << 2) & 0xCC) | (PINB & 0x33); cnt0 += delta[baba & 0x0F]; cnt1 += delta[baba...
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?
... niestety nie znalazłem dobrej obsługi enkodera bez używania systemu przerwań (nie pozwala mi na to konstrukcja programu, gdyż innym przerwaniem obsługuję RS'a dla którego bardzo ważne są timingi) Bo dobra procedura enkodera musi być na przerwaniach. Spróbuj pogodzić jedne przerwania z drugimi, np. skracając czas obsługi przerwania do minimum, lub...
Bo enkoder mechaniczny generuje drgania styków - a te mogą wywołać wiele przerwań. Dużo lepszym i oszczędniejszym w zasoby uC sposobem na enkodery jest polling w przerwaniu timera.
Rzeczywiście należałoby zrobić to zgodnie z zasadami sztuki tzn. próbkować co jakiś tam czas wszystkie klawisze i enkoder w przerwaniu timera. Na tej podstawie robi się odtłumianie drgań styków. Na przerwaniach trudno zrobić to prawidłowo. Odnośnie schematu, to kolega Dondu ma rację. Jest narysowany niezbyt czytelnie. Ogromna większość rezystorów i...
Dziękuję za wszelkie sugestie. Spróbuję zastosować taki układ: http://obrazki.elektroda.pl/3146337900_1... Do tego ustawianie flagi w przerwaniu i oczekiwanie w programie. Będę wdzięczny za wszelkie uwagi dotyczące powyższego schematu filtra - dopiero przygotowuje się do wykonania PCB.
Witam, W przerwaniu czasowym jak jest dostępne. Jak nie zostają timery. Pozdrawiam,
Witam mam problem z programem do Serwa step dir na silniku DC z enkoderem , chodzi mi o pomoc w zrozumieniu zasady działania tak na chłopski rozum jak powinno się to odbywać naprawde z regulatorem PID . Ja piszę w bascomie jeśli ktoś może pomóc byłbym wdzięczny. Zrobiłem sobie enkoder do silnika o małej rozdzielczości na obrót 10 impulsów , celowo taki...
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...
Poczytaj o przerwaniach Dodano po 2 Jak ja sie bawilem enkodery posty tutaj na forum mi pomogly. Zrob to na jednym przerwaniu i napisz wlasny program. Ta komenda enkoder= jakos dzwinie dziala Dodano po 13 '******* procek ******* $regfile = "m32def.dat" $crystal = 8000000 $hwstack = 50 $swstack = 50 $framesize = 50 '******* lcd ******* Config...
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...
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...
Jeśli ten kod działa, to przez czysty przypadek i tylko czasami. Jest tam parę istotnych błędów synchronizacji. Nie użyłeś nawet niezbędnego atrybutu volatile, który w tym przypadku i tak nie wystarczy - masz modyfikację 16-bitowej zmiennej w przerwaniu na 8-bitowym procesorze.
Zasilam enkoder z 3.3V, nie tak jak rekomendują między 4,5-5,5V. Nie chciałem aby sygnał z enkodera był większy od V zasilania mikrokontrolera, żeby nic nie upalić. Czytałem w Data Sheecie że jest coś o 'five-volt tolerant' port/pin ale nie mogłem zrozumieć dokładnie o co chodzi. Spokojnie możesz podać te 5V na nóżkę z oznaczeniem FT. Jakby mógłby...
1. Nie definiuj F_CPU w kodzie z tych powodów: http://mikrokontrolery.blogspot.com/2011... 2. Dlaczego w tym przypadku: Od tego trzeba zacząć, ponieważ nie włączasz pull-up'ów wewnętrznych. Prośba kaamil1984 o schemat jest więc jak najbardziej zasadna. EDIT: Dodatkowe pytania do pkt 4: Czy zastanowiłeś się, co się dzieje...
Może wtrącę swoje 3 grosze Wynik jest taki jak przypuszczałeś (at)dondu , zmienna intliczba znacznie odbiega od wartości przechowywanej w licznik . W niektórych przypadkach zwiększa się nawet od 5 do 10 razy przy jednym skoku impulsatora. Z testu wynika że procesor reaguje na każde drgnięcie, uruchamiając kolejne przerwania, ale z powodu nieustabilizowania...
T3 nie współpracuje z enkoderem. Analogiczna konfiguracja na T1 jak najbardziej działa poprawnie: [syntax=c]//GPIO //GPIOA RCC->AHBENR |= RCC_AHBENR_GPIOAEN;//zegar dla GPIO GPIOA->MODER |= (0<<0) | (3<<2) | (1<<4) | (1<<6) | (1<<8) | (2<<10) | (2<<12) | (2<<14) | (2<<16) | (2<<18); GPIOA->OSPEEDR...
Jak dobrze rozumie to obliczenia powinny pochodzić z funkcji 148 która jest w przerwaniu i tam z kolei mam rejestry D600, D700, D800. I teraz pytanie czy te wartości obliczają się jakoś w tej funkcji. A ogólnie to ta drabinka jest prawidłowa ?? posiłkowałem się instrukcjami do fateka z przykładami. A i zaobserwowałem że jak kręcę enkoderem to w funkcji...
Marcinn212 pod Warto zauważyć, iż sygnał 1 na przewodach wyjściowych (niebieski i żółty przewód) jest przesunięty względem nich o 90 stopni. Jest to dobre rozwiązanie ułatwiające odczytanie w którą stronę obraca się tarcza enkodera, ponieważ sygnał na jednym przewodzie pojawi się wcześniej niż na drugim. Ja zrobiłbym to w następujący sposób. Przewód...
ten czujnik to po prostu enkoder na 5V, ktory wysyla impulsy na przerwania, procek w przerwaniach ink(dek)rementuje wartosc, ktora jest wyswietlana na wyswietlaczu. Czyli tak jak pisałem wcześniej zabierasz się do sprawy z niewłaściwej strony. Szkoda INT na takie cele. Trzeba planować odwrotnie. Najpierw najważniejsze sprawy, a później mniej istotne....
Ja mam program, który się długo wykonuje. Odczyt 4x INA219, 4x DS19B20 (a będzie więcej), obsługa Nokia 5110. Odczyt z 4 portów ADC (100-500, albo więcej próbek). Używałem biblioteki [url=https://github.com/0xPIT/encoder/tr... do encodera obrotowego, bo w jednej bibliotece miała wszystko. Wywoływana była z pomocą Timera i odczyt...
Albo użyj timera w tybie enkodera z włączoną filtracją, albo testuj stan enkodera programowo z częstotliwością np. 100 Hz w przerwaniu timera (SysTick lub dowolnego innego, którego i tak używasz). Nie potrzebujesz żadnych RC, jeśli to samo można osiągnąć tylko przez odpowiednie programowanie.
Według instrukcji błąd Nmax oznacza: przekroczona max. prędkość urządzenia Prędkość tą ustawia się w parametrze C0596, sprawdź co masz tam ustawione. Jako przyczynę instrukcja podaje: a) za duże aktywne obciążenie (np. przy podnoszeniu ciężarów) b) napęd nie jest sterowany prędkością, moment obrotowy jest za bardzo ograniczony c) aktualna prędkość rozpoznawana...
Enkoder chodzi pięknie bez błędów , to nie w tym problem (obsługa w przerwaniu + kond. 100n do nożek enkod.). Problemem jest sterowanie 2 wyjść (przekaźniki lewo i prawo) z tego enkodera. Nie może następować nawet chwilowe załączenie drugiego przekaźnika w czasie kręcenia w danym kierunku.
Spróbuję zaprogramować ATMEGĘ8 tak aby na dwóch przykładowych pinach pojawiały się impulsy STEP_UP, STEP_DOWN, wtedy główny MCU (ATMEGA32) będzie musiał w przerwaniu tylko zmniejszyć lub zwiększyć licznik pozycji silnika.Powinno być sporo szybciej.
Niestety nie działa - to co stworzyłeś to nie jest dekoder impuslów z enkodera - tak się nie dekoduje kodu Graya. Kolejna sprawa - w przerwaniu powinieneś liczyć impulsy, a nie ustawiać flagi goingUp i goingDown, bo to nie ma sensu. Jeśli pomiędzy przerwaniami nie dojdzie do pełnego obiegu pętli loop to efektem będzie zgubienie impulsu. Kolejna sprawa...
Wyjście A dajesz pod przerwanie, Wyjscie B pod dowolny port. W przerwaniu sprawdzasz czy na porcie jest 0 czy 1, w zależnosci od tego zwiększasz lub zmniejszasz mierzony odcinek. Jeśli przerwania będą reagowac na zbocze, to nie martw sie o enkoder w bezruchu. zacznij coś pisać to będzie się dalej myśleć.
Witam. Napisałem program sterujący pracą silnika prądu stałego do którego podpięty jest enkoder inkrementalny (najważniejsze części programu poniżej). Mój problem polega na tym, że gdy mikrokontroler zaczyna wykonywać program ruch_osi_ ma 2 możliwości: czekać określony czas, jechać do określonej pozycji. Część programu odpowiedzialna za postój i przerwanie...
Widze, ze kolega DarkMajster wstawil przyklad z polecanej przeze mnie biblioteki, jednak ja polecam tryb pooling gdyz nie zawsze jest mozliwosc korzystania z pinow przerwan ktorych za duzo nie ma, a obsluga w tym trybie dziala rowniez bardzo dobrze na "zwyklych" pinach. Oczywiscie pod warunkiem, ze sie nie naszpikuje kodu delayami. Pozdr Pooling to...
Witam ponownie Rozumiem, że będzie tylko jeden enkoder mierzący pozycję przecinanego elementu. Natomiast poruszanie się wózka z piłą będzie sterowane z analogu w trybie prędkości. Przy powyższym założeniu próbowałbym zrobić coś takiego: - enkoder odmierza odległość na jaką "wysunął" się przedmiot - na przerwaniu sprzętowym wykrywam moment odmierzenia...
Witam, posiadam serwomotor marki SKF motion. Silnik ma maksymalne obroty równe 3300 rpm, napięcie to 90V. Silnik kupiłem na aukcji i niczego się o nim więcej dowiedzieć nie mogę. Ma z tyłu zamontowany enkoder, ma cztery wyprowadzenia. Doszedłem które jest do czego, na oscyloskopie sprawdziłem że działa. Napisałem sobie teraz obsługę enkodera na Atmega8....
No i źle działa przy szybkim kręceniu. To teraz już wiesz dlaczego stykowego nie możesz używać. I choćbyś nie wiem co próbował (sprzętowo czy programowo) to i tak przy odpowiednio szybkim kręceniu napotkasz się z problemem nałożenia się na siebie drgań styków, co uniemożliwia prawidłowe wykrycie momentu zmiany stanu wyjścia enkodera. Dlatego podsumowałem...
Do sterowania 16 (a nawet 20) diod, z których świeci tylko jedna, potrzebujesz 5 linii portów mikrokontrolera i 5 rezystorów i nie trzeba do tego jakiegokolwiek multipleksowania - po prostu zapalasz tę właściwą diodę wystawiając 0 na jedno wyjście, 1 na drugie, a pozostałe trzy ustawiasz jako wejścia. Dowolny współczesny uC (czyli raczej nie stara ATmega)...
Do podlaczenia z uC wystarczy ze wykorzystasz wyjścia A i B. Sposobów sprawdzania kierunkow obrotu i impulsowe jest wiele. 1) Podlaczasz wyjscia A i B pod dowolne piny uC i w wywolaniu przerwania od jakiegos timera sprawdzasz stany tych pinow i zapamietujesz stan wyjscia np A. Np: If (A != Temp_A) then { if( A <> B ) Ile_impulsow++; else Ile_impulsow--;...
Jest tego sporo, DCF77, 7 x DS18B20 i DHT11 ( akurat jeśli chodzi o niego to mam wątpliwości, czy ten kod działa, bo jest na obydwu płytkach podpięty i zdarza się zawieszenie ) Nadajnik Atmega328p Dodano po 16 Odbiornik Atmega644P - trochę zmieniłem obsługę przerwania, wydaje mi się, że w przerwaniu nie powinno się wykonywać dużych obliczeń. [syntax=basic4gl]...
Hej Chciałem napisać programik udający enkoder obrotowo-impulsowy. Skróciłem program do takiej postaci, że nie powinien chyba nic generować. Jednak generuje prostokątny sygnał o wypełnienie 50%. Co robię nie tak? https://obrazki.elektroda.pl/7621019900_... Dodano po 55 Sam sobie odpowiem pisałem do rejestru PIN a nie PORT chociaż i...
Problem wygląda następująco, zaistniała potrzeba zrobienia stabilizacji obrotów silnika na poziomie 500 do ok 2000 obr/min enkoder 8 imp/obrót napisałem coś takiego, i pomimo tego że w teorii powinno utrzymywać obroty na poziomie ok 9000 to utrzymuje je w okolicach 1500. [syntax=vbnet]$regfile = "m8adef.dat" $crystal = 8000000 Config Portb.4 = Output...
Tak napisałeś ale wtedy mi za wolno o dziwo działał program i np. raz na 3 pstryknięcia działało z przyczyn mi do końca nie znanych. Wykrywanie stanu enkodera powinno się odbywać na przerwaniu np INT0. Zwróć uwagę, że przy tak napisanym programie przy wykonywaniu fragmentu kodu [syntax=cpp]sprintf(str, "%d", war); LCD_GoTo(1,0); LCD_WriteText(str);[/syntax]...
Witam, zrealizowałem obsługę w przerwaniu od przepełnienia timera lecz nie do końca idealnie to działa. Dodałem regulacje precyzyjną i zgróbną wartości zadanej. Przy regulacji precyzyjnej generalnie działa wszystko dobrze, lecz przy regulacji zgrubnej gdy przycisk enkodera jest wciśnięty to zawrtośc zadana potrafi niekiedy skakać o duże wartości np....
Generalnie nie odpowiadam na PW, chyba, że z jakiegoś powodu mnie zainteresują :) Co do enkodera - mylisz się, generuje on kod Graya, zmiana następuje przy każdym przejściu. Stany 00, 01,11,10 są stabilne, nie ma czegoś takiego jak stany przejściowe. Mój kod po prostu konwertuje kod Graya na kod binarny, z zachowaniem informacji o kierunku. Zmienna...
Ja wcale nie twierdziłem, że to jest sztywna granica. Właśnie dlatego że twierdziłeś że więcej się nie da: Według moich szacunków, przy częstotliwości taktowania 16MHz, detekcji na jednym zboczu, procedurach napisanych w asemblerze i niezbyt wysokich oczekiwaniach dodatkowych co do pozostałych zadań wykonywanych przez mikrokontroler można osiągnąć...
na każdym który napiszę jest tak samo, w nowym temacie powyżej podałem ustawienia fuse bitów, zaraz wkleję kawałek na którym teraz się bawię Dodano po 4 to kod na którym teraz się bawie '***************************************... '-------------------- konfiguracje ----------------------------------------... $regfile...
Zwyczajny tranzystor NPN (np. BC546) z rezystorem na bazie wystarczy. Tak się składa, że akurat miałem do czynienia z Sendix 8.5020.1351.0100 i temat był oparty na przerwaniu zewnętrznym (pomiar odległości i prędkości w pojeździe specjalistycznym). Masy wspólne dla obu obwodów zasilania. Schemat poniżej. Oryginalnie u mnie było standardowe"12V" z instalacji...
Hej To są wejścia zintegrowane na module CPU 6ES7 314-6CH04-0AB0. Jeśli chodzi o TIA Portal v12 i STEP7 5.5 to zakładki w HW są bardzo podobne, na pewno parametry do wyboru są identyczne, wiem bo mam oba i porównywałem. Wszystkie parametry wejść opisałem powyżej, więcej nie ma wg mnie (nic więcej nie znalazłem w środowisku). Bloczki też wyglądają identycznie,...
Witam, chciałem podłączyć pod ATmegę 4 enkodery z myszek PC. Znalazłem taki kod w sieci: * * ENCODER - Checks rotary encoder and returns the following: * * 0: no movement * -1: ccw rotation * 1: cw rotation * *---------------------------------------... signed char encoder(void) { static unsigned...
Ok, z niechęcią pokażę jeszcze trochę kodu. Od razu wyjaśniam - ten kod to tylko taka tymczasowa partyzantka celem sprawdzenia i wykrycia takich sytuacji jak ta powyższa. Docelowo to będzie zupełnie inaczej zorganizowane. Dane są zbierane do RAMu przy pomocy DMA do podstawy 5-5ms/kratkę. Powyżej już są wyświetlane na bieżąco. Niemniej w obu przypadkach...
Ależ szanowni koledzy, programując procesory pozbywajmy się zakłóceń (drgań styków) metodami programowymi (stosując filtrację cyfrową). A więc: 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...
Z oscylogramu wynika że przerwanie napisane masz tak że atmega reaguje na każde zbocze narastające i przy nim zmienia stan . Akurat program z oscylogramu był napisany specjalnie po to aby niwelować zakłócenia. Wykrywanie działało w przerwaniu od timera, sprawdzny był stan stan linii, w kolejnym przerwaniu sprawdzane było czy w dalszym ciągu stan się...
jakby kolega na początku napisał o co mu chodzi to było by mniej problemów. Q1. Czy jeśli ATTINY2313 jest traktowany częstotliwością 20 MHz oznacza, że przerwanie timera może być równie często generowane? niestety nie. 20MHz to czestotliwośc taktowania, timerów i rdzenia. samo wywołanie przerwania i potem wyjście z niego to około 15 cykli. jak będziesz...
Nowa wersja progarmu Zmiany w odniesieniu do starej: - obsługa LCD e trybie 4 bitowym - obsługa 6 diod (poziom głośności) funkcja - obsługa enkodera w przerwaniu INT0 (do zmiany głośności i wyboru funkcji) - wersja zoptymalizowana i okrojona ze zbednego kodu - obsluga tylko wyswietlacza 2x8 znakow (AUTOMATYCZNE PRZENOSZENIE KURSORA PO 8 ZNAKACH) - skrocony...
Witam po krótkiej przerwie, Pozmieniałem nieco czasy zmiany stanów linii !CS i pamięć działa - na razie na kabelkach i na prędkości zegara 10 kHz :D. Dodanie szeregowo rezystora 100 Ω na linię zegarową (SCK) niczego nie zmienia - te zakłócenia od linii zegarowej dalej przenoszą się na linię SO. Poniżej kod źródłowy samej obsługi pamięci flash SPI:...
No dzieki. Szczerze to wlasnie Twoj projekt mnie zainspirowal do wykorzystania tego procesora w moim projektcie. Trzeba jeszcze pamietac ze sterowanie silnikiem PMSM jest prostsze od silnika asynchronicznego bo odchodzi kontrola poslizgu. Odpowiadajac na Twoje pytania: - mam 10000 impulsow na obrot - enkoder ma znacznik przejscia przez zero. Z racji...
Bascom - wersja 1.11.95 Kod, no jest tego sporo: - zegar PCF8563 - Zapis na SD - dwa czujniki DHT11 - odczyt z PCF8574AP ( klawiatura ) - RC5 - ma być DS18B20 - ma być DCF77, ale nie doszedłem do tego momentu ( tzn testowałem na innym procesorze i działało ) Działa - zegar PCF8563 - dwa czujniki DHT11 - odczyt z PCF8574AP w przerwaniu ( klawiatura )...
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...
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.
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,...
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...
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...
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...
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....
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...
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...
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.
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
Ja mam podobnie napisaną obsługę enkodera i działa bardzo dobrze (Atmega8 enkoder EC11-1B-18T-L15 ). O ile ten enkoder daje taki same sygnały jak mój, to błąd masz tutaj: if (bit_is_set( PORTENCODER, ENCODER_B)) a powinno być PIND.
Oczywiście że możesz. Konkretne rozwiązanie wymaga podania języka w jakim piszesz. Niemniej moim zdaniem powinieneś zupełnie inaczej podejść do tematu. Opisz szerzej swoja aplikację a dokładniej w jakim celu wykorzystujesz enkoder.
Raczej jednak w przerwaniu bo zabezpiecza to przed zgubieniem impulsów. Dodano po 1 W przerwaniu od jakiegoś licznika oczywiście
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.
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).
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.
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ę...
ale wykorzystując przerwania dam rade podłączyć tylko jeden enkoder do atmegi8. Chyba że są tam przerwania o których nie wiem
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...
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ś...
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().
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...
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.
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...
Przepraszam ale w pierwszej wypowiedzi popełniłem błąd logiczny - oba przerwania powinny być ustawione na te same zbocze a nie różne. Dlaczego, bo tak jak napisałem wcześniej nie będzie można określić kierunku zmian, zawsze bedzie ta sama kolejność wywoływania przerwań. Obojętnie czy kręcimy w lewo czy w prawo. np. ChA narastanie 0->1 a ChB opadanie...
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...
enkoder zliczanie impulsów przerwaniu opóźnienie przerwaniu rs232 przerwaniu
gniazdo karty pcmcia glowica laserowa attiny 20mhz
Czy klej epoksydowy metal jest termoprzewodzący? Termostat W3001 - stopniowe gaśnięcie wyświetlacza: przyczyny i rozwiązania