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.

Magistrala I2C w PCF8574, kłopot z przerwaniem

11 Paź 2003 15:48 2606 14
  • Poziom 14  
    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 :)
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • Poziom 42  
    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.
  • Poziom 14  
    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.
  • Poziom 35  
    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
  • Poziom 14  
    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
  • Poziom 35  
    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 ???
  • Poziom 14  
    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.
  • Poziom 35  
    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
  • Poziom 14  
    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 .
  • Poziom 35  
    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)
  • Poziom 14  
    :? 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)
  • Poziom 35  
    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
  • Poziom 14  
    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.
  • Poziom 35  
    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
  • Poziom 14  
    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 .