Hirdetés

Új hozzászólás Aktív témák

  • atesss

    addikt

    Üdv !
    Használt már itt valaki PCF8574 alapú I2C-s I/O modult ?
    Azon belül is a különálló Interrupt Pin működése érdekelne.
    Én ugyan most Raspberry Pi-n használom, Python kóddal, de ez a probléma nem úgy néz ki hogy ettől függene, a modul működésében lehet valami hiba vagy furcsaság.

    Ez az Interrupt pin arra szolgálna, hogy ha történik bármelyik PIN-en változás, akkor ez a pin megváltozik. A fő kontroller így elég ha csak annyit csinál, hogy ezt a pin-t figyeli (akár interrupt-al, de akár csak polling-al). És csak akkor állok neki az I2C-n keresztül kiolvasni a bemenetek állapotát, ha ez a pin jelzi hogy változás történt.
    Az hátrány, hogy egy külön pin-t fel kell használni hozzá.
    Cserébe a kód gyorsabb tud lenni, meg kevesebb erőforrást használ (nem használom folyamatosan az I2C buszt). Egy Arduino-n ez szerintem még inkább fontos tud lenni.

    Én konkrétan ezt a modult használom: [link]
    Ahogy láttam, nem mindegyik modulnál van sajnos kivezetve ez az Interrupt pin.
    Az IC adatlapja [link] elég részletesen leírja a működését (az INT működése részletesen: 11.old).
    A 15. oldali példakapcsolás alapján kötöttem be (10 kOhm pullup VC-re). Annyi, hogy nálam nem rögtön megy a fő kontrollerre, hanem még van ott egy 330 Ohm ellenállás is sorosan (ezt biztonsági okból a Raspberry-nek minden használandó GPIO pinjére felraktam, kapásból, fixen).
    Én úgy vettem ki a leírásból (meg ez is lenne a logikus), hogy ahogy csinálsz a modulról egy kiolvasást, akkor az INT pin rögtön "nullázódik" is. Ez elvileg mindössze 4us kéne legyen (adatlap: 5.old).
    Amikor változás van, rendben 1-be vált az INT pin. Utána kiolvasom az összes bemenetet, rendben látszik is hogy a PCF8574-nek melyik bemeneti pinje változott meg.
    De az INT 0-ban marad ez után is, nagyon sokáig.
    Direkt beraktam sleep-et, hogy teszteljem ezt, és még 0.1s után is maradt.
    A programkódom ennek ellenére jelenleg ellátja a feladatát, és épp a következő gomb-megnyomáskor vagy elengedéskor mégis újra meghívja a kiolvasó függvényt. Ezt még nem teljesen értem hogyan, most próbálom kideríteni :)
    De attól még a modul nem működik úgy ahogy kellene.
    Multiméteren is felugrik az érték az INT pin-t mérve (ha pár msec lenne, akkor ezt nem mutatná ki), de szkóppal sajnos most pont nem tudom megnézni pár napig.
    Van valakinek ötlete ?

    [ Szerkesztve ]

Új hozzászólás Aktív témák