Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Dlaczego piny arduino nie działają przy PCF8574?

07 Kwi 2017 18:37 1317 26
  • Poziom 5  
    Mam taki problem, że jak używam expandera PCF8574 to piny w arduino nie działają kiedy z kodu usune expandzer wszystko działa. Dlaczego ktoś wie?
  • Poziom 16  
    Wklej kod, to ktoś pomoże.
  • Poziom 5  
    Kod: c
    Zaloguj się, aby zobaczyć kod


    i pod pin 9 mam diode i nie chce świecić.
  • Poziom 16  
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 5  
    Ja chce pin 9 włączyć w arduino, a nie w expanderze.
  • Poziom 24  
    Z tego wynika, że biblioteka expander'a przejmuje pin9. Nie podałeś jeszcze jakie masz Arduino a to jest ważne gdyż UNO i Mega maja inaczej poukładane niektóre sygnały.
    Ogólnie zerknij do biblioteki lub jesli nie czujesz się na siłach to napisz, ktoś z nas zerknie.
  • Poziom 5  
    Mam UNO. A to wszystkie piny nie działają nie tylko 9.
  • Poziom 24  
    MKej napisał:
    Mam UNO. A to wszystkie piny nie działają nie tylko 9.


    Jeśli nie masz podłączonego expandera lub połączenie nie jest prawidłowe to program się zawiesza gdy inicjujesz expander.begin(adres);
    To normalne bo ta biblioteka nie potrafi reagować na błędy.
    A konretnie to Wire.h się zawiesza.
  • Poziom 5  
    Expander jest dobrze podłączony bo działa.
  • Poziom 24  
    MKej napisał:
    Expander jest dobrze podłączony bo działa.

    To znaczy, że Twoja biblioteka zakłóca działanie.
    Czy próbowałeś wysterować natywnie pin9?

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 5  
    Powiem szczerze, że pierwszy raz widzę coś takiego. Masz jakiś link jak tego używać?
  • Poziom 24  
    MKej napisał:
    Powiem szczerze, że pierwszy raz widzę coś takiego. Masz jakiś link jak tego używać?


    To jest normalne C w Arduino bez używania bibliotek Arduino.
    Jak popatrzysz do wnętrza biblioteki Arduino i odnajdziesz funkcję pinMode oraz digitalWrite to znajdziesz między innymi te polecenia. To nic nowego. Biblioteki Arduino ubierają te polecenia w piękne nazwy i tyle.

    Przy okazji wielkość kodu Ci mocno spadnie i wzrośnie znacznie prędkość realizacji.

    Dodano po 2 [minuty]:

    Dobra praktyka jest przeglądanie bibliotek i podpatrywanie jak są napisane.

    DDRB to nazwa rejestru kierunku działania pinów
    PORTB to nazwa portu obsługującego piny od PB0 do PB7.
    Zgodnie z schematem Arduino UNO R3, pin9 jest podłączony do PB1.

    Napisz jeszcze czy działa.
  • Poziom 5  
    Kod: c
    Zaloguj się, aby zobaczyć kod


    niestety dalej nie działa :(
  • Poziom 24  
    Wgraj to co poniżej, otwórz konsolę(Monitor portu szeregowego), ustaw ja na 9600 i napisz mi co się tam pokazuje po uruchomieniu programu w Arduino.
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 24  
    MKej napisał:
    tylko 1 sie wyświetla

    Czyli nie przechodzi przez expander.begin().
    Zawiesza się tam.
  • Poziom 5  
    Czyli co adres jest zły. Wszystkie 3 piny sa do masy podpiete.
  • Poziom 24  
    MKej napisał:
    Czyli co adres jest zły. Wszystkie 3 piny sa do masy podpiete.

    Nie wiem czy adres jest zły. Pisałeś, że układ działa poprawnie, tylko lokalne piny nie działają. Tyle, że nie wiem jakim cudem działa poprawnie skoro zawiesza się na expander.begin().
    Wiem jedno, biblioteka Wire.h nie ma dobrze napisanej obsługi błędów. Jak analizowałem treść biblioteki to niestety są miejsca, w których biblioteka będzie czekała na sygnał aż go otrzyma. Przez co zamiera reszta oprogramowania.

    Dodano po 8 [minuty]:

    MKej napisał:
    Expander jest dobrze podłączony bo działa.

    Jakim cudem działa ekspander skoro program się zatrzymuje na .begin(0x20)?
    Po czym wnioskujesz, że działa?
    Mój działa i się nie zatrzymuje. Ale tylko wówczas gdy jest dobrze podłączony.

    Ja miałem kłopot z jednym z procków bo niby PULLUP działał ale był za słaby i ruszyło jak dodałem rezystory podciągające na obu liniach i2C.
  • Poziom 24  
    ditomek napisał:
    Obsługa pcfa z l2c to chyba z pięć linijek tekstu. Już dawno byś to napisal.

    Dla jednego to proste a dla drugiego trudne. Poza tym, skoro standardowa biblioteka mu się wiesza na expander.begin() to oznacza, że wiesza się Wire.h a to oznacza problem z połączeniem. I uproszczenie do kilku linijek nic nie da.
  • Użytkownik usunął konto  
  • Poziom 21  
    zamiast dołączać jakąś bibliotekę która robi nie wiadomo co zrób to po staremu
    w sekcji setup uruchom obsługę i2c poleceniem Wire.begin();
    następnie połącz się z nim i ustaw piny wejściowe

    Kod: c
    Zaloguj się, aby zobaczyć kod


    teraz w głównej pętli musisz odpytywać pcfa o stany wejść.
    Robisz to używając expander.digitalRead a teraz musisz napisać die linijki więcej

    Kod: c
    Zaloguj się, aby zobaczyć kod

    i po tym w zmiennej piny powinieneś mieć interesującą Ciebie informacje
    Pamiętaj tylko że adres odczytu i zapisu różnią się o 1

    Niestety pisze to bez możliwości sprawdzenia Może koledzy poprawią ewentualne błędy.
  • Poziom 24  
    ditomek napisał:
    zamiast dołączać jakąś bibliotekę która robi nie wiadomo co zrób to po staremu

    I na stówę powiesi się autorowi biblioteka Wire bo jestem prawie pewien, że i2C nie zestawił prawidłowo. Tak wynika z przeprowadzonego wczesniej testu.
  • Poziom 5  
    Dziwna sprawa zaktualizowałem sobie Arduino IDE i wyskakiwał mi błąd, błędna biblioteka wszystkie nawet te które są orginalnie, to pobrałem starą wesje 1.6.2 i teraz wszystko działa a przynajmniej na razie.
  • Poziom 24  
    MKej napisał:
    Dziwna sprawa zaktualizowałem sobie Arduino IDE i wyskakiwał mi błąd, błędna biblioteka wszystkie nawet te które są oryginalnie, to pobrałem starą wersję 1.6.2 i teraz wszystko działa a przynajmniej na razie.

    I jaki z tego wniosek na przyszłość?
  • Poziom 5  
    Arduino:1.8.2 (Windows 7), Płytka:"Arduino/Genuino Uno"

    C:\Program Files\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files\Arduino\hardware -hardware C:\Users\Krzysiek\AppData\Local\Arduino15\packages -tools C:\Program Files\Arduino\tools-builder -tools C:\Program Files\Arduino\hardware\tools\avr -tools C:\Users\Krzysiek\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files\Arduino\libraries -libraries C:\Users\Krzysiek\Documents\Arduino\libraries -fqbn=arduino:avr:uno -vid-pid=0X2341_0X0243 -ide-version=10802 -build-path C:\Users\Krzysiek\AppData\Local\Temp\arduino_build_524340 -warnings=none -build-cache C:\Users\Krzysiek\AppData\Local\Temp\arduino_cache_981921 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=C:\Program Files\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Users\Krzysiek\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\4.9.2-atmel3.5.4-arduino2 -prefs=runtime.tools.avrdude.path=C:\Users\Krzysiek\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino9 -verbose C:\Program Files\Arduino\examples\01.Basics\Blink\Blink.ino
    C:\Program Files\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files\Arduino\hardware -hardware C:\Users\Krzysiek\AppData\Local\Arduino15\packages -tools C:\Program Files\Arduino\tools-builder -tools C:\Program Files\Arduino\hardware\tools\avr -tools C:\Users\Krzysiek\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files\Arduino\libraries -libraries C:\Users\Krzysiek\Documents\Arduino\libraries -fqbn=arduino:avr:uno -vid-pid=0X2341_0X0243 -ide-version=10802 -build-path C:\Users\Krzysiek\AppData\Local\Temp\arduino_build_524340 -warnings=none -build-cache C:\Users\Krzysiek\AppData\Local\Temp\arduino_cache_981921 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=C:\Program Files\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Users\Krzysiek\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\4.9.2-atmel3.5.4-arduino2 -prefs=runtime.tools.avrdude.path=C:\Users\Krzysiek\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino9 -verbose C:\Program Files\Arduino\examples\01.Basics\Blink\Blink.ino
    Using board 'uno' from platform in folder: C:\Users\Krzysiek\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.18
    Using core 'arduino' from platform in folder: C:\Users\Krzysiek\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.18
    Detecting libraries used...
    "C:\Users\Krzysiek\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\4.9.2-atmel3.5.4-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10802 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Users\Krzysiek\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.18\cores\arduino" "-IC:\Users\Krzysiek\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.18\variants\standard" "C:\Users\Krzysiek\AppData\Local\Temp\arduino_build_524340\sketch\Blink.ino.cpp" -o "nul"
    Generating function prototypes...
    "C:\Users\Krzysiek\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\4.9.2-atmel3.5.4-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10802 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Users\Krzysiek\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.18\cores\arduino" "-IC:\Users\Krzysiek\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.18\variants\standard" "C:\Users\Krzysiek\AppData\Local\Temp\arduino_build_524340\sketch\Blink.ino.cpp" -o "C:\Users\Krzysiek\AppData\Local\Temp\arduino_build_524340\preproc\ctags_target_for_gcc_minus_e.cpp"
    exec: "C:\\Users\\Krzysiek\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\4.9.2-atmel3.5.4-arduino2/bin/avr-g++": file does not exist
    Błąd kompilacji dla płytki Arduino/Genuino Uno.

    Dodano po 44 [sekundy]:

    nie da się wgrać żadnego programu

    to jest z szczegółowymi informacjami

    Dodano po 7 [minuty]:

    nie wierze nadal na 1.6 działa a na nowym nic nawet najprostszy program.
  • Poziom 25  
    MKej napisał:
    Arduino:1.8.2 (Windows 7), Płytka:"Arduino/Genuino Uno"

    Using board 'uno' from platform in folder: C:\Users\Krzysiek\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.18
    Using core 'arduino' from platform in folder: C:\Users\Krzysiek\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.18
    IC:\Users\Krzysiek\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.18\cores\arduino" "-IC:\Users\Krzysiek\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.18\variants\standard"

    Zdecyduj się jakiej wersji używasz bo albo coś się źle zainstalowało albo nie wiesz co piszesz