Skocz do zawartości

Komunikacja Pi Pico <-> Pi Pico W


Pomocna odpowiedź

Napisano

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
 

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.

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.

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

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...