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

atmega8 &pcf8574a - Jak odczytać stany na pcf'ie 8574A

MrChewe 19 Gru 2015 03:42 948 5
REKLAMA
  • #1 15252672
    MrChewe
    Poziom 8  
    Witam
    Od kilku dni męczę się z magistralą i2c(twi) w atmega8 ,chcę podpiąć expander PCF8574a. Znalazłem bibliotekę i2c.h do obsługi pcfa,działa na niej zadawanie stanów, problem jest z odczytem gdy zmienie stan fizycznie przyciskiem np.(z niskiego na wysoki) on i tak odczyta to co miał wpisane poleceniem.

    Mam wrażenie, że coś jest nie tak z tą biblioteką , ale sam nie jestem w stanie tego sprawdzić(zbyt mała wiedza :cry: ),
    Jeżeli ktoś ma dobrą bibliotekę lub jest w stanie coś doradzić to proszę o pomoc

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    main.c

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 15252685
    Alana
    Poziom 37  
    Jezeli dobrze pamietam ta PCFke to odczyt danych polegal na tym ze zapisujesz do niej stan wysoki i dajesz "odczytaj" i wtedy wykrywa ci ewentualne sciagniecie jakiegos pinu do masy zewnetrznym sygnalem.
    Moim zdaniem biblioteka jest dobra...
  • REKLAMA
  • #3 15252942
    MrChewe
    Poziom 8  
    Jak zapisze stan wysoki i dam do masy to jest to samo ,też odczytuje to co wpisałem i2c_write

    Sprawdzałem adresy bo w nocie pcf'a znalazłem, że
    Pin connectivity Address of PCF8574A Address byte value 7-bit

    A2 A1 A0 A6 A5 A4 A3 A2 A1 A0 Write Read/ Hex address without R/W
    VSS VSS VSS 0 1 1 1 0 0 0 70h 71h 38h

    Sprawdzałem te adresy, nawet robiłem osobno na adresie 0x70 zapis, a na adresie 0x71 odczyt, wtedy nic mi nie wyświetla

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #4 15253127
    Alana
    Poziom 37  
    Wyglada na to ze masz nakopane w twoim kodzie.
    Sprobuj takiego:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Ogolnie chodzi o to ze najpierw ustawiasz 0xffh na wyjsciu pcf a pozniej w petli odczytujesz pcf ale w taki sposob ze w samej petli jest cala transmisja a nie tylko odczyt.
    Kod pisalam z pamieci wiec moga byc bledy, cokolwiek sprawdzic u siebie bede mogla dopiero z wieczora.
  • REKLAMA
  • #5 15253194
    MrChewe
    Poziom 8  
    Sytuacja wygląda następująco , teraz na wyświetlaczu nie pojawia się nic:
    Próbowane z adresami: (w)0x38,(r)0x39 ;(w)0x70,(r)0x71 ;(w)0x20,(r)0x21 .
    Jak ustawię adres (w) i (r) taki sam czyli np.(w)0x38,(r)0x38 to wyświetla mi na lcd adres pcfa ,a powinno odczytać to co wpisałem przez i2c_write

    Zauważyłem w bibliotece i2c.h pewną pętelkę :
    -jak daję i2c_start to do TWDR przypisany jest adres pcfa
    -jak dam i2c_write() to do TWDR przypisuje tą wartość którą podam
    -jak odczytuje to i2c_read zwraca wartość TWDR

    Więc jeżeli ja wywołam wrait'a, a później wywołuję read'a to i tak będę miał zawsze wartość jaką podałem w write .

    Poprawcie mnie jeśli się mylę.
    I jeszcze raz proszę o pomoc
  • #6 15258394
    MrChewe
    Poziom 8  
    Problem rozwiązany , błąd biblioteki a konkretnie odczytu
REKLAMA