Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

PIC16F877A - Sprzętowa komunikacja po I2C

pawel_na_chwile 09 Jan 2016 14:44 2538 9
  • #1
    pawel_na_chwile
    Level 11  
    Witam, mam problem z komunikacją I2C przy wykorzystaniu sprzętowego układu zaimplementowanego w mikrokontrolerze PIC16F877A, przekopałem forum i wujka GOOGLE, ale nic nie znalazłem co rozwiązuje mój problem. Zacznę po kolei, wielokrotnie komunikowałem się tym protokołem z RTC, EEPROM czy od niedawna testy z cyfrowym radyjkiem TEA5767, ale nigdy nie udało mi się uruchomić sprzętowego modułu do komunikacji po I2C, zawsze program staje już w miejscu wysłania bitu startu. Cały czas piszę w asemblerze, ale w akcie desperacji sięgnąłem po C i także lipa, komunikacja nie działa, ani fizycznie na mikrokontrolerze, ani w symulatorach, wymiana procesorków także nic nie dała, poszedłem dalej i ściągnąłem gotowy program już skompilowany do hex i wrzuciłem najpierw do symulatora i nic wszystko stanęło już na bicie startu, więc zmontowałem układ i wrzuciłem program do procesorka a na SCL i SDA dałem oscyloskop i także nic, komunikacja zrobiona programowo działa niezawodnie, sprzętowo w ogóle nie startuje, na liniach portu cały czas linia prosta, wymieniałem rezystory podciągające do +5V, w zakresie od 4,7k do 10k i nic. Tu rodzi się moje pytanie, czy jest możliwe że trafiłem na jakąś serię mikrokontrolerów (mam ich 7 nówek z TME) które mają uszkodzony moduł, bo ja już nie rozumiem co jest nie tak, tym bardziej że z strony microchipa ściągnąłem dokumentacją AN976 wraz z plikiem asm, program dostępny na suporcie nie forum microchipa i to także nie działa, może ktoś mi wytłumaczyć co się dzieje, w necie ludzie budują układy i przeglądając kody wykorzystują sprzętowy moduł i to niby działa a u mnie nic. Dodam że korzystam z programatora PICKit3 i ICD2 oryginalne żadne podróby.
  • #3
    User removed account
    User removed account  
  • #4
    pawel_na_chwile
    Level 11  
    Dorzucam prosty programik którym testuję komunikację pomiędzy mikrokontrolerem a PCF8583, dodam że przy programowym rozwiązaniu i2c wszystko działa, ale jak próbuję uruchomić sprzętowy moduł, wszystko zarówno na symulatorze jak i w rzeczywistości zawiesza się na bicie startu, w symulatorze cały czas jest sprawdzany bit SEN potwierdzający czy wysłano bit startu, a na rzeczywistym układzie oscyloskop jak uruchamiam komunikację sprzętową nic nie pokazuje, proste kreski, a jak wykonuję protokół i2c programowo, idą normalne przebiegi, może ktoś jest wstanie wskazać co robię źle.
  • #6
    pawel_na_chwile
    Level 11  
    Z uwagi na szaleństwo w pracy, musiałem na kilka dni zmienić temat, przez co się nie odzywałem. Więc tak, sytuacja jak wcześniej nadal nie potrafię uruchomić tego nieszczęsnego modułu, pobrałem z suportu microchipa dokumentację plus cały kod źródłowy do komunikacji z I2C na PIC16F877A, kupiłem jeszcze jeden procesorek, pamięć 24LC256, złożyłem układzik na płytce stykowej i wgrałem pobrany program (jest w załączniku), podłączyłem przed uruchomieniem oscyloskop na SCL i SDA poprzez rezystory 100k, podciągnąłem obie linie przez 4,7k do plusa i uruchomiłem program, oscyloskop nic nie wykrył, mimo że miałem włączoną rejestrację i podłączonego do kompa, przez 1 minutę pracy układu na SDA i SCL proste linie, według oscyloskopu nic się nie wydarzyło, więc napisałem programową obsługę i2c wszystko poszło bez jednego zacięcia, piękne przebiegi na oscyloskopie. Mało myślący pobrałem program zegarka na PIC16F877A i na 18F2450 gdzie jako RTC zastosowano PCF8583, na filmikach obu autorom, to pięknie działało, oba kody w C już gotowe i skompilowane do hex, na płytce stykowej uruchomiłem oba układy zgodnie z schematem, dokupiłem dodatkowo 18F2550 i 18F4550, załadowałem programy i totalny brak komunikacji, wyświetlacz 2x16 chodzi tylko brak odczytu z PCFa, uznałem że to może wina programatorów tak jak pisałem posiadam IC2 oryginał i 2 letni PICkit 3 oryginał, więc odgrzebałem starego poczciwego Brennera 8 który kiedyś tam zbudowałem i ten także niby ładuje, weryfikacja kodu OK sprzętowe I2C nie działa. Mi już puszczają nerwy i tracę nadzieję że to uruchomię, nie potrafię powiedzieć co robię źle, czy trzeba jakieś ekstra bity ustawić czy co. Ja powoli się poddaję, ale mam ostatnią prośbę, jeżeli ktoś posiada napisaną komunikację po I2C wykorzystującą moduł sprzętowy na któryś z procesorów 16F877a/18F2550/18F4550 do komunikacji z PCF8583/24C32/24LC256 którą osobiście testował i mu działa, kod w C lub asemblerze błagam o podzielenie się kodem, plus bibliotekami które stosował. Zakładam że robię coś źle bo niemożliwe żeby wszędzie był uszkodzony ten moduł, ale nerwy powoli dają o sobie znać i logiczne myślenie się wyłącza, zaczynam potrzebować kogoś kto poprowadzi mnie za rękę. W załączniku kod do asm z suportu Microchipa
  • #8
    avital
    Level 15  
    Dodam może nie celując konkretnie w rozwiązanie problemu :

    Po wielu latach pisania na AVR, przesiadka na PICe i zaczęły się problemy z portami (konfiguracja) i ustawianiem peryferii , włączaniem lub wyłączaniem danego interfejsu zaimplementowanego sprzętowo i jest jedna odpowiedz zawsze PDF od procesora i szukanie bitu który włącza wyłącza dana funkcjonalność, w moim przypadku 100% podobnych kłopotów było nieprawidłowe ustawienie bitów dotyczących konfiguracji portów lub układów peryferyjnych.
  • #9
    pawel_na_chwile
    Level 11  
    Jeżeli chodzi o kwarc próbowałem z różnymi od 4 do 20 MHz, próbowałem również wykorzystywać oscylator wewnętrzny i nic to nie dało, co do noty od procesorka to po nieudanych pierwszych próbach tylko oparłem się na notach od producenta wraz z pobraniem przykładowego kodu z suportu a nie z forum microchipa i także nic nie ruszyło. Szczerze mówiąc olałem co robię nie tak i postanowiłem pozostać przy rozwiązaniu programowym, nie wiem co robię źle, przypuszczam że problem to ustawienie lub brak ustawienia jakiegoś bitu, może kiedyś problem rozgryzę, ale na razie nie mam na to czasu.
  • #10
    Urgon
    Editor
    AVE...

    Obacz noty aplikacyjne:
    AN734: http://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en011798
    AN735: http://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en011802
    Konkretnie obacz kody źródłowe. Z pomocą AN734 udało mi się doprowadzić mój układ do przynajmniej częściowej komunikacji z MCP2221.
    Bardzo przydatnym do tego wszystkiego narzędziem jest analizator stanów logicznych. Kompatybilny z Saleae analizator kosztuje 40 zeta z wysyłką na alledrogo...