Skocz do zawartości

Komunikacja Pi Pico <-> Pi Pico W


Lukasc

Pomocna odpowiedź

Cześć,

Buduję ramię robota do pomocy przy lutowaniu. Chciałem rozszerzyć sobie liczbę pinów poprzez dołączenie  do Pi Pico drugiego Pi Pico po kablu. I poległem na tak prostym temacie. Komunikacja UART udała się. Niestety występuje lag na etapie odbioru danych, który sprawia, że ruch joystickiem wykonuje się po ok. 100-500 ms. Różnie. Chciałem zmienić sposób połączenia na SPI i tu poległem. Nie mogę za nic w świecie wysłać poprawnie danych i tu proszę o pomoc. 

Kod nadajnika Pi Pico

 

import machine
import utime

# Konfiguracja SPI
spi = machine.SPI(0, 
                  baudrate=12000,  # Prędkość transmisji
                  polarity=0, phase=0, 
                  bits=8, firstbit=machine.SPI.MSB, 
                  sck=machine.Pin(18), mosi=machine.Pin(19), miso=machine.Pin(16))

cs = machine.Pin(17, machine.Pin.OUT)  

def send_data(data):
    cs.value(0)  # Aktywacja linii CS
    utime.sleep_us(10)
    spi.write(data)  # Wysłanie danych
    cs.value(1)  # Deaktywacja linii CS

while True:
    message = "Hello, Slave!"
    send_data(message.encode('utf-8'))
    print("Wysłano:", message)
    utime.sleep(2)  # Czas oczekiwania 2 sekundy

Debug wypluwa:

MPY: soft reboot
Wysłano: Hello, Slave!
Wysłano: Hello, Slave!
Wysłano: Hello, Slave!

 

 

Kod odbiornika Pi Pico W:

 

import machine
import utime

# Konfiguracja SPI (taka sama jak w master)
spi = machine.SPI(0, 
                  baudrate=12000, 
                  polarity=0, phase=0, 
                  bits=8, firstbit=machine.SPI.MSB, 
                  sck=machine.Pin(18), mosi=machine.Pin(19), miso=machine.Pin(16)) # MOSI i MISO zamienione miejscami 

cs = machine.Pin(17, machine.Pin.IN)

def receive_data():
    if not cs.value(): 
        buf = bytearray(150)  # Bufor na jeden bajt
        spi.readinto(buf)
        data = buf[0]  
        print("Odebrano:", data)

while True:
    receive_data()

I debug wypluwa:
MPY: soft reboot
Odebrano: 144
Odebrano: 144
Odebrano: 72


Czyli komunikacja jest 😉 Bo Pico W reaguje. Niestety nie potrafię albo odczytac danych albo ich wysłać poprawnie. Czy ktokolwiek jest wstanie pomóc ewentualnie zaproponowac inny sposób wysyłki danych bez lagów? Piny od 0 do 15 mam zajęte na Pi Pico W - głównym na sterownik serw 16 kanałowy. 

Dwa pico połaczone sa na pinach:
(MOSI I MISO krzyżowo)
image.thumb.png.a3702fc47ab2c9315a617c399883a3d9.png
 

Link do komentarza
Share on other sites

3 minuty temu, Lukasc napisał:

zaproponowac inny sposób wysyłki danych bez lagów?

Napisz to w C albo przynajmniej pod Arduino. Python w wykonaniu mikro nie jest demonem prędkości. A połączenie UART z prędkościami wyższymi niż 115200 działa znakomicie.

Link do komentarza
Share on other sites

1 godzinę temu, ethanak napisał:

Napisz to w C albo przynajmniej pod Arduino. Python w wykonaniu mikro nie jest demonem prędkości. A połączenie UART z prędkościami wyższymi niż 115200 działa znakomicie.

Mogę na Arduino Uno czy ESP. Wybrałem Pi Pico ze względu na sentyment, prędkość i sterownik serw 16 kanałowy jaki posiadam jako nakładka . Arduino Uno R3 jakie posiadam ma multiplekser i 6 kanałów ale nie mam wtedy jak zarządzać serwami. Poza tym nawet jakbym miał oprzeć cały projekt na Arduino to pytanie czy to czego nie zyskam szybko nie stracę na słabszej architekturze.. 

Musi być jakiś sposób na połaczenie poprzez SPI i wymiane danych poprzez Pi Pico. Rozważę przejście na C++ ale na ta chwilę same połączenie poprzez SPI nie działa.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

2 godziny temu, Lukasc napisał:

Mogę na Arduino Uno czy ESP. Wybrałem Pi Pico ze względu na sentyment

Fajnie. A teraz wróć i jeszcze raz przeczytaj to co napisałem. Potem jeszcze raz, i tak dalej aż zrozumiesz.

Nikt nie każe zmieniać platformy sprzętowej, Pico jest akurat bardzo fajny, tyle że programowanie w jakimś mikrym pytongu czegoś co ma być szybkie i sprawne to nie jest dobry pomysł i niekoniecznie musi wyjść. Pico ma bardzo ładnie zrobione SDK do C/C++. Można go od biedy programować w Arduino IDE z całym zapasem arduinowych bibliotek (chociaż w tym przypadku nie wykorzystasz wszystkich możliwości Pico). Ale w obu przypadkach jest to rozwiązanie o niebo lepsze niż µP.

  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.