logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Zmiana definicji I2C dla RP Pi Pico, Wire.begin(1) czy Wire1.begin()?

ArturAVS 13 Lut 2024 12:33 489 11
REKLAMA
  • #1 20959464
    ArturAVS
    Moderator
    Posty: 26147
    Pomógł: 2295
    Ocena: 7749
    Próbuję uruchomić do eksperymentów oraz późniejszych modyfikacji pewien projekt. Projekt wymaga drobnych zmian w definicji płytki, tu konkretnie jest to RP Pi Pico. W opisie jest podane co zmienić;

    Kod: Arduino
    Zaloguj się, aby zobaczyć kod


    Oczywiście wskazane zmiany wprowadziłem, jednak występuje błąd kompilacji;

    Kod: Arduino
    Zaloguj się, aby zobaczyć kod


    W kodzie wygląda to tak;

    Kod: Arduino
    Zaloguj się, aby zobaczyć kod


    I tu moje pytanie, czy nie powinno to być Wire.begin(1); zamiast Wire1.begin();? Jeśli 1 wstawię w nawias, to wszystko się kompiluje jednak na żadnej z magistral I2C nie ma jakichkolwiek sygnałów. Chodzi o ten projekt; https://github.com/kaefe64/Arduino_uSDX_Pico_FFT_Proj Chcę go zmodyfikować do pracy tylko jako odbiornik i dodać wyższe pasma i zanim zaprojektuję dedykowane PCB to wszystko łączę na stykówce. Dodatkowa AtMega sterująca filtrami pasmowymi jest nie podłączona. Czyli Pico, ILI9341 i Si5351A.
  • REKLAMA
  • Pomocny post
    #2 20959608
    jarekgol
    Poziom 40  
    Posty: 5145
    Pomógł: 642
    Ocena: 1135
    To może Ci pomoże:
    https://forum.arduino.cc/t/which-library-to-u...r-sda1-and-scl1-second-i2c-arduino-due/210628
    w skrócie spróbować zadeklarować to Wire1 i ewentualnie użyć extern
    i dodatkowo na tym githubie w dziale Arduino_I2C_BPF_RX https://github.com/kaefe64/Arduino_uSDX_Pico_FFT_Proj/tree/master/Arduino_I2C_BPF_RX wygląda że mają swoją bibliotekę "wire", być może używasz wbudowanej, a trzeba tej ich?
  • REKLAMA
  • #3 20959640
    ArturAVS
    Moderator
    Posty: 26147
    Pomógł: 2295
    Ocena: 7749
    W skrócie jest obecnie tak; wyłączyłem obsługę filtrów BPF oraz syntezera Si5351. Pokazuje się na wyświetlaczu obsługa podglądu sygnałów IQ i mic, i tylko tyle. Chat GPT podpowiedział mi że najprawdopodobniej jest literówka w Wire. Nie mam kwarca 8 Mhz żeby podmienić w Uno i go podłączyć. Może właśnie brak tego BPF robi problem, może reszta programu czeka na I2C i się wiesza?

    jarekgol napisał:
    To może Ci pomoże:

    No właśnie to się nie odnosi do RP Pi Pico. Wszystkie pliki zmodyfikowałem zgodnie z zaleceniami i na komunikacji I2C stoi :-(. Już myślałem że Pico uwaliłem lub wyświetlacz, początkowo odwrotnie podłączyłem TFT. Ale po podstawieniu drugiego Pico oraz tym co na początku wyświetla, czyli Pico i wyświetlacz ok. (na szczęście +5V nie poszło na GPIO wyświetlacza ani Pico). Jutro poszukam kwarca na podmiankę i spróbuję. Po prostu chcę zbudować przenośny odbiornik SDR aby z komputerem się nie ciągać. Ten TRX, po prostu wpadł mi w oko, a że wszystko prawie mam w "przydasiach"... To czemu nie? Już na dziś mam dość walki...
  • #4 20959697
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1461
    jarekgol napisał:
    w skrócie spróbować zadeklarować to Wire1 i ewentualnie użyć extern


    Bałbym się takich rad gdy dotyczny przypadkowych wklejek bez zrozumienia.
    MOŻE doprowadzi do zniknięcia błędów kompilacji, ale nie sposób przewidzieć wykonania.
  • REKLAMA
  • #5 20959710
    ArturAVS
    Moderator
    Posty: 26147
    Pomógł: 2295
    Ocena: 7749
    JacekCz napisał:
    Bałbym się takich rad gdy dotyczny przypadkowych wklejek bez zrozumienia.
    MOŻE doprowadzi do zniknięcia błędów kompilacji, ale nie sposób przewidzieć wykonania.


    Możesz jaśniej?
  • REKLAMA
  • Pomocny post
    #6 20959725
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1461
    ArturAVS napisał:
    JacekCz napisał:
    Bałbym się takich rad gdy dotyczny przypadkowych wklejek bez zrozumienia.
    MOŻE doprowadzi do zniknięcia błędów kompilacji, ale nie sposób przewidzieć wykonania.


    Możesz jaśniej?


    Błąd kompilacji jest bardzo prosty i powszechnie znany.
    Ale ja nie wiem co chcesz od tych klas Wire, ile egzemplarzy chcesz mieć, co jest celem, a co przypadkiem - zbawczej rady nie udzielę.
  • #7 20959766
    ArturAVS
    Moderator
    Posty: 26147
    Pomógł: 2295
    Ocena: 7749
    Wyjaśniłem w poście tytułowym, czy to literówka, czy tak ma być. Proste chyba?
  • Pomocny post
    #8 20959792
    jarekgol
    Poziom 40  
    Posty: 5145
    Pomógł: 642
    Ocena: 1135
    Na mój gust masz 2 kanały I2C więc potrzebujesz 2 obiektów do ich obsługi, stąd Wire1 i na moje nie jest to literówka. Być może trzeba poszukać biblioteki na Raspbbery z obługą więcej niż jednego kanału.
    Z moich niewielkich doświadczeń używania gotowców w Arduino, wyszło że nie zawsze wiadomo co ten któremu zadziałało miał w komputerze (wersje, podmienione pliki, itd) i parę razy pisałem sobie obsługę sprzętu sam, jak za dawnych lat.
  • Pomocny post
    #9 20960367
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #10 20960565
    gps79
    Poziom 37  
    Posty: 2190
    Pomógł: 495
    Ocena: 792
    W pliku Twojego projektu masz podane rozwiązanie Twojego problemu:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Poprawne wprowadzenie tej zmiany pozwala na bezbłędną kompilację:
    Okno Arduino IDE z otwartym projektem i kodem.
  • #11 20960729
    ArturAVS
    Moderator
    Posty: 26147
    Pomógł: 2295
    Ocena: 7749
    gps79 napisał:
    W pliku Twojego projektu masz podane rozwiązanie Twojego problemu:

    A co napisałem?
    ArturAVS napisał:
    Oczywiście wskazane zmiany wprowadziłem,


    @khoam definicja którą przytoczyłeś nie współpracuje z tym projektem, nie mniej dziękuję.

    Edit;

    Sprawa się wyjaśniła :D. Przy porannym spożywaniu kawy, przejrzałem jeszcze raz na spokojnie wszystkie pliki i sprawa się wyjaśniła. Pomyliłem sekcje w pliku pins_arduino.h.
    Zamiast w #define WIRE_HOWMANY to zrobiłem to w #define SERIAL_HOWMANY. Poprawiłem i jest ok.


    Wyświetlacz TFT z częstotliwością 7050.0 i wykresami, podłączony do prototypowej płytki z kolorowymi przewodami.


    Chyba za stary się robię :-(. Dziękuję wszystkim za podpowiedzi. Temat niech na razie "powisi" bo mogą pokazać się inne kwiatki.
    Jeszcze raz dziękuję i przepraszam za zawracanie głów.
  • #12 20961204
    jarekgol
    Poziom 40  
    Posty: 5145
    Pomógł: 642
    Ocena: 1135
    Luzik, każdy czasem potrzebuje gumowej kaczuszki do debugowania.

Podsumowanie tematu

✨ Użytkownik próbował skonfigurować projekt na bazie Raspberry Pi Pico, który wymagał modyfikacji definicji pinów dla magistrali I2C. Wskazano, że należy zmienić definicje w pliku pins_arduino.h, aby uwzględnić dwa kanały I2C (I2C0 i I2C1). W trakcie dyskusji pojawiły się sugestie dotyczące użycia obiektów Wire i Wire1 oraz konieczności poszukiwania odpowiednich bibliotek. Ostatecznie problem został rozwiązany przez poprawienie błędnej definicji w pliku, co umożliwiło prawidłowe działanie projektu.
Wygenerowane przez model językowy.
REKLAMA