Znalazłem w sieci kod do enkodera z mikrokontrolerem ATtiny. Kod w załącznikach.
Potrzebuję, aby po podaniu napięcia na układ mikrokontrolera programowo wygenerował 3 mechaniczne przekręcenia w prawo enkodera.
Jak zmodyfikować program?
Do you prefer the English version of the page elektroda?
No, thank you Send me over theremiszcz310 wrote:...to jest kod do czytania enkodera, a Ty chcesz generować.
miszcz310 wrote:
1. Jaki enkoder chcesz generować (kwadraturowy? Jakiś kod Graya?)
miszcz310 wrote:
2. 3 mechaniczne przekręcenia, to znaczy 3 pełne obroty? (jeżeli tak, to musisz wiedzieć ile impulsów jest na obrót), 3 kliknięcia?
mzuber wrote:[/quote]miszcz310 wrote:
Taki jak enkoder głośności w radyjku Renault 281156412R. Nie mam jeszcze schematu.
mzuber wrote:Ogólnie chcę nadpisać kod w mikrokontrolerze w enkoderze radyjka Renault 281156412R. Po podaniu napięcia na układ mikrokontrolera ma on programowo wygenerować 3 mechaniczne przekręcenia w prawo enkodera i zwiększyć programowo poziom dźwięku o 3, a dalej enkoder ma działać bez zmian czyli mikrokontroler ma czytać. Nie potrafię ogarnąć tych wszystkich modułów w radyjku więc pomyślałem że to ciekawe rozwiązanie problemu.
miszcz310 wrote:...To radio nie zapamiętuje ustawień?...
miszcz310 wrote:...jak nie wiesz jaki tam jest to nic nie można zrobić...
miszcz310 wrote:...dla mnie trochę przerost formy nad treścią...
miszcz310 wrote:
Czy nie ma jakiś pilotów do tego radia?
mzuber wrote:miszcz310 wrote:
Sprawdzę. To też niezła zabawa i bez programowania się nie obejdzie.
gps79 wrote:Wymyśl jeszcze coś, aby Twój ATtiny nie zakłócał się wzajemnie z oryginalnym enkoderem
miszcz310 wrote: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.
miszcz310 wrote:No, niby tak, ale robienie man-in-the-middle z attiny i enkodera jest moim zdaniem strasznym wyzwaniem hardwarowym.
miszcz310 wrote:Jakbyś mógł zmienić procek z attiny na np. STM32C011x4/x6 (chyba najmniejszy stm32 z linii "po taniości") to tam masz sprzętową obsługę enkoderów kwadraturowych i ładnie, albo w przerwaniu byś to sobie zrobił, albo może jakoś chytrze przez DMA dałoby się to zrobić (raczej na pewno przez dma da radę bo robisz tablicę ze stanami pinów i jak wykryjesz nowy impuls od enkodera to wystawiasz nową wartość na port z tablicy a tablica chodzi w trybie circular). Można w sumie zrobic też jakieś cuda (niepotrzebne) jak np. zwiększanie rozdzielczości tego enkodera (wyślij jeden impuls po tym jak dostaniesz jeden), nie wiem po co, ale być może ma to jakiś sens...
tmf wrote:miszcz310 wrote:
Co ty opowiadasz... Mamy enkoder, który generuje max kilka impulsów na sekundę i to ma być problem?
tmf wrote:A na czym wg ciebie to wyzwanie miałoby polegać? Łączysz enkoder z pinami MCU, po przetworzeniu na inne piny wystawiasz to co odczytałeś z enkodera. Parę linii kodu...
tmf wrote:Nie, to nie ma żadnego sensu. Jeśli jest sprzętowa obsługa enkodera to robi się to na timerze, a nie na DMA. Czemu miałoby to służyć?
Ogólnie problem jest dosyć prosty. Jak pisałem - autor powinien połączyć wyjścia A i B enkodera pod IO MCU. Nawet nie trzeba dekodować kodu enkodera, bo to co się odczyta z IO należy przekazać po prostu na kolejne dwa piny IO, które się włączy tam gdzie oryginalnie był enkoder. W czasie normalnej pracy procek ma po prostu przekazywać to co odczytał na swoje wyjścia. Jedynie przy detekcji POR ma wstrzyknąć 3 impulsy, co nie jest żadnym problemem - można taką sekwencję wygenerować przy pomocy paru delay + machanie pinem IO.
miszcz310 wrote:No właśnie zależy od enkodera. Dlatego zapytałem się w pierwszym moim poście. Ja kiedyś trafiłem na taki enkoder z jakiejś wieży albo wzmacniacza, że miał bardzo dużo impulsów na obrót. To miało chyba symulować 'analogowosc'. Jak zrobiłem odczytując stan portu (notabene na atmedze chyba 8), to jak się szybciej przekręciło to się gubił procek I nie działało to dobrze.
tmf wrote:Na obrót enkodery generują sporo impulsów, ale takie mechaniczne do sterowania to do kilkuset maks. Czyli zakładając, że ktoś kręci jak szalony, to wyjdzie maks. 1000-2000 impulsów/s. Kod musiałby być fatalnie napisany, żeby tego nie obsłużyć, co jest oczywiście możliwe...
Gdybyśmy mówili o dziesiątkach-setkach kHz, to można by użyć do forwardowania impulsów np. event system, dostępny na nowszych AVR i ARM SAM, na innych ARMach są podobne funkcjonalności.
gps79 wrote:ja zrozumiałem, że autor chce "wstrzyknąć" impulsy w linie sygnałowe enkodera. Może nie doczytałem, albo autor mógłby dopisać, jaki ma zamysł.
tmf wrote:
Nawet nie trzeba dekodować kodu enkodera, bo to co się odczyta z IO należy przekazać po prostu na kolejne dwa piny IO, które się włączy tam gdzie oryginalnie był enkoder. W czasie normalnej pracy procek ma po prostu przekazywać to co odczytał na swoje wyjścia. Jedynie przy detekcji POR ma wstrzyknąć 3 impulsy, co nie jest żadnym problemem - można taką sekwencję wygenerować przy pomocy paru delay + machanie pinem IO.
gps79 wrote:
Wymyśl jeszcze coś, aby Twój ATtiny nie zakłócał się wzajemnie z oryginalnym enkoderem, oraz pomyśl, dlaczego 4 impulsy będą lepsze od 3. Postudiuj, jak działa enkoder, co jest właściwie przekazywane do mikrokontrolera, gdy wykonasz obrót o 1 impuls i dowiedz się, jaki typ enkodera siedzi w Twoim radiu
mzuber wrote:Enkoder który jest w radyjku ma 16 pozycji na obrót.
mzuber wrote:Nawet nie chciałem przekazywania robić, tylko równolegle podpiąć w linię enkodera.