-
1. Data: 2023-03-20 19:57:24
Temat: RP2040 PIO
Od: Mirek <m...@n...dev>
Potrzebuję zrobić enkoder kwadraturowy na Raspberry Pi Pico.
Spróbowałem tego:
https://github.com/jamon/pi-pico-pio-quadrature-enco
der/blob/main/python/quadrature.py
i to działa, ale ma jedną wadę: zmienia stan tylko na podstawie
opadającego zbocza jednej linii - to bez sensu, bo traci się
czterokrotnie rozdzielczość.
Próbowałem to:
https://github.com/raspberrypi/pico-examples/blob/ma
ster/pio/quadrature_encoder/quadrature_encoder.pio
przerobić na Pythona, ale nie działa - coś tam pojawiają się jakieś
bzdury a później zamiera.
Czy problem może być w tej dyrektywie .origin 0?
Bo w Micropythonie nie ma możliwości takiej deklaracji albo o tym nie wiem.
Oczywiście chcąc nie chcąc zacząłem rozgryzać jak to PIO działa -
dlaczego w ogóle nazywają to maszyną stanów?
Maszyna stanów to ja bym rozumiał jakiś rejestr do zapamiętania stanu i
jeżeli maszyna jest w danym stanie to wykonuje jakiś tam kod, następnie
sprawdza w kółko jakieś warunki, które powodują przejścia do innych
stanów - przynajmniej ja to tak rozumiem i tak zawsze programowałem.
Oczywiście taka sprzętowa maszyna powinna sprzętowo sprawdzać np. piny i
zmieniać stan jaki się tam ustawi.
Niestety w tym PIO czegoś takiego nie ma - sprawdza jedynie jeden pin
blokujący warunek wait i instrukcja jmp, która jest jeszcze bardziej
ograniczona, bo można jej przyporządkować tylko raz konkretny pin.
--
Mirek.
-
2. Data: 2023-03-21 14:54:49
Temat: Re: RP2040 PIO
Od: "J.F" <j...@p...onet.pl>
On Mon, 20 Mar 2023 19:57:24 +0100, Mirek wrote:
> Potrzebuję zrobić enkoder kwadraturowy na Raspberry Pi Pico.
> Spróbowałem tego:
>
> https://github.com/jamon/pi-pico-pio-quadrature-enco
der/blob/main/python/quadrature.py
> i to działa, ale ma jedną wadę: zmienia stan tylko na podstawie
> opadającego zbocza jednej linii - to bez sensu, bo traci się
> czterokrotnie rozdzielczość.
> Próbowałem to:
>
> https://github.com/raspberrypi/pico-examples/blob/ma
ster/pio/quadrature_encoder/quadrature_encoder.pio
> przerobić na Pythona, ale nie działa - coś tam pojawiają się jakieś
> bzdury a później zamiera.
> Czy problem może być w tej dyrektywie .origin 0?
> Bo w Micropythonie nie ma możliwości takiej deklaracji albo o tym nie wiem.
>
> Oczywiście chcąc nie chcąc zacząłem rozgryzać jak to PIO działa -
> dlaczego w ogóle nazywają to maszyną stanów?
>
> Maszyna stanów to ja bym rozumiał jakiś rejestr do zapamiętania stanu i
> jeżeli maszyna jest w danym stanie to wykonuje jakiś tam kod, następnie
> sprawdza w kółko jakieś warunki, które powodują przejścia do innych
> stanów - przynajmniej ja to tak rozumiem i tak zawsze programowałem.
> Oczywiście taka sprzętowa maszyna powinna sprzętowo sprawdzać np. piny i
> zmieniać stan jaki się tam ustawi.
> Niestety w tym PIO czegoś takiego nie ma - sprawdza jedynie jeden pin
> blokujący warunek wait i instrukcja jmp, która jest jeszcze bardziej
> ograniczona, bo można jej przyporządkować tylko raz konkretny pin.
Ogolnie: taki enkoder najlepiej sie obsluguje automatem/maszyną
stanów. Tylko musi miec osobny zegar i odpowiednią szybkosc.
Wydaje sie, ze w procku z takim wspomagaczem PIO powinno sie dać to
zrobic, ale moze sa tam za duze ograniczenia/chcą zrobic oszczedniej.
Jesli jedno z wejsc musi byc "zegarem" do tego automatu, to sprawa sie
komplikuje.
Ten drugi program chyba realizuje pierwszą koncepcje, i jest tym,
czego szukasz, tylko faktycznie wymaga tego .origin
Nie wiem, czy w pythonie jest nad tym jakas kontrola.
A moze połączyc jakos pythona z C?
J.
-
3. Data: 2023-03-21 19:36:16
Temat: Re: RP2040 PIO
Od: Mirek <m...@n...dev>
On 21.03.2023 14:54, J.F wrote:
> Ten drugi program chyba realizuje pierwszą koncepcje, i jest tym,
> czego szukasz, tylko faktycznie wymaga tego .origin
No tak - on ma działać trochę jak ten "komputer diy" z niedawnego wątku:
stan pinów obecny i poprzedni jest przesyłany jako 4 bity do licznika
programu i wykonuje się wskazany przez ten licznik skok do odpowiedniej
procedury.
> Nie wiem, czy w pythonie jest nad tym jakas kontrola.
No ale z drugiej strony czemu program nie miał by się zaczynać od adresu 0?
Chyba że tam już jest jakiś program przeznaczony dla innej maszyny
obsługującej coś w Pythonie - bo pamięć jest chyba wspólna dla 4-ech maszyn?
>
> A moze połączyc jakos pythona z C?
>
Już prędzej przerobię swoją część na C - ale to już w finalnej wersji,
bo póki co tak wygodniej mi się pisze i testuje,
--
Mirek.
-
4. Data: 2023-03-22 14:38:21
Temat: Re: RP2040 PIO
Od: "J.F" <j...@p...onet.pl>
On Tue, 21 Mar 2023 19:36:16 +0100, Mirek wrote:
> On 21.03.2023 14:54, J.F wrote:
>> Ten drugi program chyba realizuje pierwszą koncepcje, i jest tym,
>> czego szukasz, tylko faktycznie wymaga tego .origin
>
> No tak - on ma działać trochę jak ten "komputer diy" z niedawnego wątku:
> stan pinów obecny i poprzedni jest przesyłany jako 4 bity do licznika
> programu i wykonuje się wskazany przez ten licznik skok do odpowiedniej
> procedury.
>
>> Nie wiem, czy w pythonie jest nad tym jakas kontrola.
> No ale z drugiej strony czemu program nie miał by się zaczynać od adresu 0?
> Chyba że tam już jest jakiś program przeznaczony dla innej maszyny
> obsługującej coś w Pythonie - bo pamięć jest chyba wspólna dla 4-ech maszyn?
Na ile wyczytałem - jest tam jakis system ładowania tych programów do
pamieci, i python ładuje tam, gdzie mu sie wydaje najlepiej.
I kontroli na tym nie masz, trzeba by grzebac w źródlach i poprawiac.
Albo hasło rzucic - może ktos poprawi.
>> A moze połączyc jakos pythona z C?
> Już prędzej przerobię swoją część na C - ale to już w finalnej wersji,
> bo póki co tak wygodniej mi się pisze i testuje,
Ale tu masz jeden obiekt z C do uzycia w Pythonie ...
J.
-
5. Data: 2023-03-23 23:13:28
Temat: Re: RP2040 PIO
Od: Mirek <m...@n...dev>
On 22.03.2023 14:38, J.F wrote:
> Ale tu masz jeden obiekt z C do uzycia w Pythonie ...
Coś w tym rodzaju?
https://docs.micropython.org/en/latest/develop/exten
dingmicropython.html
Na chwilę obecną jednak dam sobie spokój - chyba wystarczy mi taka
rozdzielczość jak mam teraz. Jest mniejsza tylko dwukrotnie a nie
czterokrotnie jak wcześniej pisałem. Do tego zwiększyłem liczbę
przesłon: transoptory mam w rozstawie 6mm, więc pierwotnie zrobiłem 12mm
przesłonę i 12mm otwór, Okazuje się, że równie dobrze mogę zrobić 4mm
przesłony i 4mm otwory (ale nie potrafię tego matematycznie uzasadnić
;)), powiększyłem trochę tarczę enkodera i jest prawie 4 razy gęściej.
Jeszcze pozostaje precyzja wykonania tej tarczy. Sprawdzałem
oscyloskopem i ciężko jest uzyskać idealnie symetryczny przebieg, tzn
żeby wypełnienie było 50/50 i zbocza jednego czujnika wypadały dokładnie
w połowie drugiego.
--
Mirek.