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

PCF8574A i PIC16F876: brak przerwania na pinie 13 przy zmianie wejść

bodek111 11 Paź 2003 15:48 2945 14
REKLAMA
  • #1 356974
    bodek111
    Poziom 14  
    Posty: 168
    Ocena: 1
    Witam Kolegów :D
    Mam problem z układem PCF8574A, a konkretnie mówiąc z przerwaniem , które powinno się pojawiać na nóżce 13 wraz z jakąkolwiek zmianą na ośmiu liniach wejściowych . Konkretnie to mam podłączony układ 8574 do PIC16F876 pod wejścia RC3, RC4, wszystkie rejestry do I2C są skonfigurowane dobrze (sspcon, sspcon2, sspsat , sspadd), piny na porcie C mam ustawione jako wejścia , pin do przerwania RB0 jest też ustawiony jako wejście z wewnętrznym podciągniętym rezystorem . Do ośmiu lini 8574 mam podłączoną klawiaturkę i niestety nie mogę uzyskać żadnej zmianu stanu na przerwaniu z n. 13 gdy naciskam jakiś klawisz, a podobno według książki pana Jabłońskiego przerwanie powinno działać niezależnie od tego co się dzieje na magistrali . Transmisji narazie jeszcze nie sprawdziłem bo jeśli nie uda mi się uzyskać tego przerwania z 13 nóżki to będę musiał znaleźć jakiś inny układ , który najpierw sygnalizuje że nastąpiła zmiana na ośmiu wejściach 8574 , a dopiero wówczas w programie występuje skok do podprogramu , który musi wykonać jakąś określoną transmisję pomiędzy pic a 8574. Może jednak mam złą teorię i niepowinno tak być. Jeśli ktoś ma doświadczenie jakieś z tym układem to prosiłbym o poradę , gdyż muszę zaprojektować w ramach pracy dyplomowej na politechnice opolskiej układ dydaktyczny w którym , diody, przełączniki, wyśw LCD no i klawiaturka działa na jednej magistrali , a co za tym idzie bez uzyskania tego przerwania z 8574 nie może ten układ pracować na wspólnej magistrali , gdzie są różne urządzenia podłączone.

    Pozdrawiam Bogusław :)
  • REKLAMA
  • #2 357012
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    A może najpierw układ sygnalizuje zmiane stanu wynikająca ze stanów nieustalonych przy włączaniu? Jeśli jest stan niski na tym wyprowadzeniu to sygnalizuje on wywołanie przerwania które trzeba skasować przez odpowiednią komunikacje z układem.
  • REKLAMA
  • #3 357094
    bodek111
    Poziom 14  
    Posty: 168
    Ocena: 1
    No właśnie w tym problem , że nie ma żadnej zmiany stanu. Według książki , po włączeniu zasilania na n.13 powinien być stan wysoki, a po zmianie stanu ośmiu wyjść 8574 powinien pojawić się stan niski , który jest informacją że coś się stało na ośmiobitowej lini . No więc u mnie jest ten stan wysoki na tej nóżce i nie ma żadnej reakcji , gdy na przykład naciskam jakiś klawisz w klawiaturce podłączonej do tych wyjść. Mam podłączony oscyloskop pod nóżkę z przerwaniem , a więc gdyby cokolwiek się pojawiło to zaraz bym to widział, niestety nic się nie dzieje.
    Czytając niektóre tematy doszedłem do tego że sam układ podobno transmisję ma dobrą i nie ma większych problemów ale z tych schematów , którymi ja dysponuję wyjście z przerwania nie jest wogóle wykorzystywane, po prostu dwie linie SDA iSCL są na stałe podpięte i tylko służą do komunikacji , a więc przerwanie nie jest w takim przypadku potrzebne . U mnie z twgo względu że pod jedną magistralę ma być podpiętych kilka różnych urządzeń , nie mogę na stałe skonfigurować tego układu z mikrokontrolerem . Muszę mieć najpierw jakieś wywołanie dopiero potem programowo zablokować pozostałe urządzenia na magistrali a odblokować transmisję pomiędzy pic a 8574. Sam układ jest dobry bo podmieniałem go już innym i dalej nic.
  • #4 357158
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 573
    a zerknołeś w pdf 8574 tam jest napisane że należy podciągnąć je do + 4,7k czas tego impulsu 4 mikrosekundy i wystapi on jeżeli na scl jest sygnał zegarowy opóźnienie sygnału 4 mikrosekundy wszystko podyktowane jest tym że pcf nie posiada wewnętrznego zegara i taktuje sie magistralą może na scl nie ma sygnału zegarowego poza czasem transmisji i wtedy kicha
  • #5 357622
    bodek111
    Poziom 14  
    Posty: 168
    Ocena: 1
    Faktycznie , tego nie doczytałem o zegarze taktującym , tylko , że jeżeli na SCL jest konieczny zegar to wówczas odpada stosowanie tej lini na magistrali bo nie mógłbym z niej korzystać do innych urządzeń w czasie gdy nie używam transmijji , tylko są przesyłane jakieś inne dane do innych urządzeń.
    Jeśli chodzi o rezystor to po prostu port B w 876 ma tę możliwość by sonfigurować go jako wejście by wewnętrznie był podłączony rezystor i z tego właśnie skorzystałem . Ja zakładałem że jeden impuls na nóżce 13 8574 może pojawić się bez żadnego dodatkowego zegara no ale może się myliłem . Dzięki za odpowiedź , jednak nadal muszę coś kąbinować w kierunku uzyskania przerwania bez tego sygnału zegarowego, bo jeśli to będzie niemożliwe to po prostu będę musiał zrezygnować z zastosowania tego układu na wspólnej magistrali.

    Pozdrawiam
  • REKLAMA
  • #6 357685
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 573
    wystarczy że zainicjujesz magistrale i2c dopuki nie wydasz komendy o jej zatrzymaniu wszystko będzie chodzić normalnie i powinno grać poza tym w pętli głuwnej możesz sprawdzać stan pcfa i wsztstko bedzie grało nie zapomnij o zezwoleniu na obsługe zewnętrznego przerwania poza tym do czego innego chcesz wykorzystać porty sda scl ???
  • #7 357865
    bodek111
    Poziom 14  
    Posty: 168
    Ocena: 1
    No tak wszystko się zgadza bo linie SDA iSCL na porcie C chcę wykorzystać do komunikacji z pcf 8574 ale port C w moim projektowanym zestawie dydakytcznym w całości ma pracować jako magistrala danych 8-bitowych , jednym z urządzeń miał być układ 8574 do którego potrzebne są tylko dwie linie . Sugerowałem się tym , że jak nacisnę jakiś klawisz na klawiaturce podłączonej do 8574, to pojawi się przerwanie (n. 13) , następnie poprzez wejście RB0 nastąpi wywołanie tego przerwania a co za tym idzie programowe zablokowanie innych urządzeń i zainicjowanie I2C , wtedy miał nastąpić poprzez SDA i SCl odczyt tego klawisza , który nacisnąłem i znów nastąpiłby powrót do progamu głównego , gdzie linie Sda i SCl znowu wchodziły by w skład portu C gdzie pojawiają się równolegle dane 8-bitowe.
    Przy projektowaniu zasugerowałem się zapisem w książce Jabłońskiego "Mikrokontrolery PIC16f8x w praktyce " (str201) , który napisał że na nóżce 13 8574 powinno pojawić się przerwanie niezależnie od magistrali I2C. Więc gdyby tak było to miałbym kłopot z głowy , no a tak będę musiał chyba szukać jakiegoś innego układu , który obsłuży mi klawiaturkę i wystawi na magistralę daną 8-bitową odnośnie klawisza który nacisnęłem bo innego układu pewnie nie znajdę który pracował by w trybie I2C i nie było potrzeby ciągłej pracy zegara na lini SCL.
  • #8 358807
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 573
    skorzystaj z 2 układów pcf tylko nadaj osobne adresy z jednego zrób port 8 bitowy a z drugiego klawiature i po sprawie
  • #9 358972
    bodek111
    Poziom 14  
    Posty: 168
    Ocena: 1
    2 układy, tak też można ale w między czasie byłem na politechnice i kolega doradził mi że problem tkwi w źle podłączonej klawiaturce . ja wziąłem schemat podłączenia z "Elektroniki praktycznej " nr 3/2001-zakładałem że tam są sprawdzone rzeczy , niestety okazało się inaczej . Tam jest schemat pewnej centralki gdzie klawiaturka jest kąbinacją 4 lini z 4 iniiami wejściowumi 8574 na których są stany wysokie , a więc jaka kolwiek kąbinacja nic nie wnosi (brak zmian na wejściu ) dlatego nie mogłem uzyskać przerwania. Należy tak podłączyć klawiaturkę by po prostu na port wejściowy pcfa dostawały się stany niskie i wtedy problem jest rozwiązany , przez czas naciśnięcia przycisku przerwanie zmienia swój stan na niski , a więc mój problem jest rozwiązany. Teraz mam czystą magistralę danych z mikrokontrolera, a po naciśnięciu klawisza w klawiaturce pojawia się przerwanie niezależnie od tego czy na magistrali coś jest czy nie . Zegar na wejściu SCL nie jest do tego przerwania potrzebny . Dziękuję za zainteresowanie moim tematem .
  • #10 359075
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 573
    a tu się mylisz i to bardzo klawiatura tam napewno działa a jak to już piszę wykonując skanowanie klawiatury cztery porty sa wejsciami a na 1 z 4 nastepnych wystawiasz 0 logiczne i czytasz jesli odczytana liczba jest taka jak wyslana to nic nie przyciśnięto jak mniejsza to nacisnieto 1 z klawiszy 1 rzędu następnie wszystkie porty do + poza 2 linią i to samo tyle że to drugi rząd i następne cztery klawisze i znowu w tem sposób skanujesz zawsze 1 z czterech rzędów klawiszy klawiaturka matrycowa (4 na 4)
  • #11 359202
    bodek111
    Poziom 14  
    Posty: 168
    Ocena: 1
    :? Faktycznie , nie pomyslałem o tym że można najpierw wysłać zera logiczne na cztery piny a potem to odczytać ale nie mam doświadczenia z magistralą I2C dlatego nie bardzo się orientuję w kombinacjach jakie tam można zastosować. Nie mniej jednak to dobry sposób na realizację klawiaturek matrycowych.
    :wink: Skoro już kontynuujemy temat to może kolega posiada jakiś najprostszy programik do mikrokontrolera 876 tak żeby jeden bajt wysłać do 8574 i jeden bajt odczytać bo ja dysponuję dużym programem na 16f84 gdzie programowo jest realizowana magistrala I2C , natomiast w moim 876 jest to sprzętowo realizowane no więc żeby uruchomić transmisję nie powinno być wiele poleceń w programie , bo podobno moduł sam realizuje większość funkcji, a skoro tak jest to nie będę korzystał z programu na 16f84 bo tam wszystko jest ręcznie ustawiane . Nie mam skąd wziąć najprostszego przykładu na sprzętową realizację transmisji , tak żeby go zrozumieć i napisać swój program. Gdyby była taka możliwość to prosiłbym o podesłanie czegoś najprostszego. 8)
  • REKLAMA
  • #12 359336
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 573
    a napewno chcesz to picowac na piocu może byś to atmelował na atmelu w bascomie napisać taki programik to pestka na godzinkę albo dwie i tu mogę pomóc precyzyjniej z reszta pogadajmy na privie
  • #13 359549
    bodek111
    Poziom 14  
    Posty: 168
    Ocena: 1
    No właśnie chodzi o to , że to jest moja praca dyplomowa i musi być pic bo systemów różnych opartych na amtelach politechnika ma aż za dużo . A PIC-em jeszcze nikt się nie zajął , dlatego wybrałem sobie ten temat . Na początku miałem sporo kłopotów innego typu bo z amtelem byłem dość dobrze obeznany natomiast pic to coś nowego i jak narazie nikt się tym nie chciał zająć, a więc miałem kłopot z jakąkolwiek pomocą w tej sprawie . Na dzień dzisisjszy pozostało mi jeszcze uruchomić transmisję I2C-sprzętowo, a potem już wykonać na gotowo cały zestaw dydaktyczny.
  • #14 359608
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 573
    Mplab posiada kompilator c a wtym języku pirsze się przyjemnie poza tym 877 jest dedykowany pod c sporo pamięci wypasiony spore mozliwości przyzwoita cena itd
  • #15 359691
    bodek111
    Poziom 14  
    Posty: 168
    Ocena: 1
    No właśnie , sam nie wiem czemu tak się przyczepiłem tego asemblera skoro w C jest szybciej i przyjemniej. W C już od dłuższego czasu nic nie pisałem, a więc od nowa bym musiał sobie go przypominać , narazie dokończe mój system w asemblerze bo jako zestaw dydaktyczny jest przewidziany dla uczniów celem poznania operacji bitowych , natomiast C znacznie wszystko upraszcza .

Podsumowanie tematu

✨ Problem dotyczy braku sygnału przerwania na nóżce 13 układu PCF8574A podłączonego do mikrokontrolera PIC16F876 przy zmianie stanów na ośmiu liniach wejściowych. Układ PCF8574A jest podłączony do portu C mikrokontrolera, który jednocześnie ma pełnić funkcję magistrali danych 8-bitowych, a przerwanie ma być sygnalizowane na wejściu RB0. Pomimo poprawnej konfiguracji rejestrów I2C i ustawienia pinów jako wejścia, nie pojawia się impuls przerwania przy naciśnięciu klawisza na klawiaturze podłączonej do PCF8574A. Dyskusja ujawnia, że przerwanie na nóżce 13 wymaga obecności sygnału zegarowego na linii SCL, co jest związane z brakiem wewnętrznego zegara w PCF8574A i koniecznością taktowania magistrali I2C. Problemem okazało się również niewłaściwe podłączenie klawiatury – klawiatura musi generować stany niskie na wejściach PCF8574A, aby przerwanie mogło zostać wyzwolone. Po poprawnym podłączeniu klawiatury przerwanie pojawia się niezależnie od stanu magistrali. Wątpliwości dotyczą także wykorzystania linii SDA i SCL do innych urządzeń na wspólnej magistrali oraz sposobu implementacji obsługi I2C sprzętowo w PIC16F876. Wskazano, że można użyć dwóch układów PCF8574A z różnymi adresami, aby rozdzielić funkcje portu 8-bitowego i klawiatury. Dyskusja obejmuje także kwestie programowania w asemblerze i C oraz sugestie dotyczące narzędzi i środowisk programistycznych dla mikrokontrolerów PIC.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA