Skocz do zawartości

PCB Expander PCF 8574 - problem ze schematem EAGLE


Pomocna odpowiedź

Witam wszystkich forumowiczów. Jestem początkujacym elektronikiem - stad tez moje pytanie.

Ostatnio zajalem sie zmontowaniem ukladu expandera I/O PCF 8574N odnoszac sukces 😉 nawet udalo mi sie podlaczyc i zaadresowac 3 szt w ukladzie. Postanowilem zrobic uklad na plytce PCB.

Zabralem sie od przygotowaniu schematu w Eaglu. Z pomoca metody termotransferu udalo mi sie przeniesc projekt na plytke (metoda wykorzystuajaca laminator). Efekt wydaje sie byc naprawde zadowalajacy jak na domowe warunki i poczatkujacego:

2cb958a4f6985f51med.jpg

wybaczcie ze taki pobrudzony cyna, ale uklad rozlutowany po odkryciu defektu w projektowaniu.

Schemat, podlaczenia, zasada dzialania jest mi znana. Jednak mam problem ze schematem. W przypadku pracy na breadboardzie adresacja pinow A0/1/2 odbywala sie poprzez przylaczenie zworki do GND lub 5V(VCC). Na plytce PCB chcialem rozwiazac to tak by moc zmieniac adresacje i nie byc ograniczony do jednego adresu. Postanowilem wykorzystac schemat podlaczeniowy, analogiczny jak w przypadku dzialania przycisku arduino: https://www.arduino.cc/en/tutorial/button

Moj schemat EAGLE:

064e43c39ac32f4dgen.png

Niestety, wiem ze gdzies w podlaczeniu adresacji czyli pinow A0/1/2 wkradl sie blad myslowy, z ktorym nie potrafie sobie poradzic. Zalozenie bylo takie: W przypadku braku dodatkowej "ingerencji" w uklad na wszystkich trzech pinach wystepuje stan niski (podlaczenie do GND). W przypadku zwarcia pinow na JP2 dla danego pinu wystepuje stan wysoki.

Czy moge prosic o pomoc w tej kwestii?

PCF8574_IO_Expander_one.sch

Link do komentarza
Share on other sites

10 k Ohm, jak pod linkiem. Pytanie ktore mnie nurtuje to czy ma znaczenie wykorzystania w tym wypadku wspolnego opornika dla wszystkich pinow czy nalezy tak jak zrobilem dac oddzielny opornik dla kazdego z pinow.

Po zlozeniu plytki efekt jest taki ze przy braku zwarcia (wszystkie piny na stan niski) scaner I2C nic nie wykrywa - ten sam uklad w breadboardzie dostaje adres - przy zwarciu dla jednego z pinownadal nic sie nie dzieje, ale proba zwarcia drugiego ewidetnie skutkuje zwarciem calego ukladu.

Pytanie jeszcze takie: w datasheecie pin INT opisany jest jako podlaczony do VCC przez rezystor podciagajacy. Na moim breadboardzie uklad dziala bedac podlaczony do GND co wymusza stan niski (informacja z jakiegos tutoriala) pytanie zatem czy jest to poprawne polaczenie? I czy moze to byc powodem bledu? Z drugiej strony uklad na plytcce stykowej dziala poprawnie

Link do komentarza
Share on other sites

Tak, musisz mieć osobne oporniki -- zastanów się chwilę co się dzieje jak je zewrzesz do VCC -- nie chcesz, żeby wszystkie na raz były zwarte.

Skaner I2C nic nie wykrywa, bo nie masz oporników podciągających na liniach SDA i SCL. One nie są opcjonalne.

Pin INT jest open-drain, więc jeśli go nie używasz, to wszystko jedno czy zostawisz niepodłączony czy zwarty do masy. Jeśli chciałbyś go używać, to też potrzebujesz na nim pull-up.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

dedeshipu, rozumiem co do mnie piszesz, bo nie chcemy zwierac wszystkich na raz, tylko nie od konca wiem jak to rozwiazac. Zgodnie ze schematem jesli zewre piny dla 0_A1 to powinno chyba zewrzec tylko 0_A1.

Druga kwestia - rezystory podciagajace w I2C - moglbys prosze podrzucic jakis link wyjasniajacy? Znalzlem tylko szczatkwoe informacje, a w rzadnym tutorialu ktory opisuje temat PCF8574 nie widzialem nigdy koniecznosci dodawania tych rezystorow. Z tego co rozumiem to jest kwestia predkosci (Hz) magistrali?

Link do komentarza
Share on other sites

Może zamiast błądzić po "tutorialach", jak zwykle warto zajrzeć do źródeł:

https://www.i2c-bus.org/specification/

http://www.nxp.com/documents/user_manual/UM10204.pdf

Magistrala I2C z założenia potrzebuje rezystorów podciągających, bo wyprowadzenia wszystkich układów do niej dołączonych są typu OC i żaden z nich "nie umie" wystawić stanu wysokiego. Natomiast wartość tych rezystorów jest z jednej strony ograniczona prądem mogącym bezpiecznie wpływać do pinu (nadającego zero) a z drugiej dopuszczanymi przez standard czasami narastania będących pochodną długości linii i ich pojemności. Te z kolei czasy są różne dla różnych prędkości, bo sygnał musi "zdążyć" dociągnąć do stanu wysokiego zanim zacznie się kolejny takt zegara.

Link do komentarza
Share on other sites

ok, poczytam w tym temacie - z drugiej strony zastanawia mnie fakt ze to dziala na breadboardzie bez rezystorow - chyba ze same kabelki stanowia mikro rezystancje 😉

druga sprawa, a w zasadzie priorytetowa - mzoesz mi pomoc bo naprawde utknalem w miejscu w kwestii schamtu pinow adresujacych?

Link do komentarza
Share on other sites

Nie pleć - kabelki mają swoje rezystancje, ale dlaczego miałyby podciągać do Vcc? Być może masz włączone w procesorze rezystory pull-up na wejściach. Bez podciągania to nie zadziała na 100%

A co na schemacie jest źle? Masz osobny rezystor i osobną zworkę do każdego wejścia więc możesz ustawić 8 kombinacji adresów - co tu nie działa? A może schemat sobie a PCB sobie?

Link do komentarza
Share on other sites

Marku, na breadboardzie, mam podlaczone 4 kabelki - VCC, GND, (Arduino UNO), pin SCL na UNO do pinu 14 na expanderze i analogicznie pin SCL na UNO do SDA do pinu 15.

po wgraniu programu I2C Scaner wykrywa adresacje expandera. W przypadku pracy na breadboardzie otrzymuje adres, w przypadku scheamtu i plytki PCB niestety nie wykrywa mi niczego - nawet w momencie kiedy zadna zworka nie jest zwarta - czyli wszystkie stany niskie wiec adresacja powina byx 0x20. Dalsza obsluga jest w tym momencie nie istotna z punktu widzenia watku.

Co do schematu - nie wiem co maja rezystory Atemgi do rzeczy w tym wypadku? Adresacja expandera nie idzie z Arduino tylko jest autonomiczna. Zwarcie pinu z VCC ustawia stan wysoki na expanderze dla pinu adresujacego. Brak zwarcia zwiera do masy przez rezystor i ustawia na expanderze stan niski.

Link do komentarza
Share on other sites

Coś tu się plącze.

1. Szyna I2C czyli linie SDA/SCL: obie wymagają podciągania. Jeśli nie widzisz nigdzie w swoim układzie rezystorów ciągnących do góry, zapewne program (zajrzyj do kodu) załącza wewnętrzne rezystory procesora na obu pinach właśnie dla takich zapominalskich. Nie ma innego wytłumaczenia. To są zbyt duże wartości do poprawnego działania tej magistrali z sensownymi prędkościami, ale do kilku kHz wystarczą.

2. Obwód wejść adresowych: masz trzy linie wejściowe i na każdą musisz podać stan niski lub wysoki. Nie jest ważne jak to zrobisz: możesz na stałe zewrzeć pin do masy lub do plusa lub dać opornik do plusa a zworkę do masy lub odwrotnie. Ważne, by 3-bitowy adres nie zmieniał się w trakcie działania układu. Przyłóż woltomierz i sprawdź co tam podałeś. Co tu wałkować? Jeśli sniffer nie wykrywa żadnego Slave'a na magistrali, to być może spaprałeś coś innego. Nie wiem: zamienione SDA z SCL, brak na nich podciągów, urwany kabelek, niepoprawne zasilanie, brak kondensatora na VCC/GND itd.. Multimetr do ręki i mierzysz.

Po co zwarłeś wyjście INT do masy??

Link do komentarza
Share on other sites

Niepotrzebnie się skupiasz na tej adresacji. To nie tutaj jest problem. Skaner I2C nie znajduje twojego urządzenia nie dlatego, że ono sobie nie ustawiło adresu (albo ustawiło zły), tylko dlatego, że jest problem z komunikacją z nim. Strzelam, że problemem jest brak rezystorów podciągających, bo to jest najczęściej powtarzana pomyłka, ale oczywiście może być też coś innego -- na przykład zamienione linie SDA i SCL, albo nawet wręcz brak zasilania dla twojego urządzenia -- zweryfikuj wszystkie połączenia i pomierz multimetrem.

Masz może dostęp do oscyloskopu albo analizatora logicznego?

[ Dodano: 08-05-2017, 15:26 ]

Po co zwarłeś wyjście INT do masy?

To tez jest open-collector, więc choć bez sensu, to nie powinno stanowić problemu.

Link do komentarza
Share on other sites

W takich domowych płyteczkach często zdarzają się podtrawienia niewidoczne gołym okiem, a przerywające ścieżki. Sprawdź całe PCB na ciągłość połączeń.

INT: Nie doszukuję się tu problemu, to raczej kategoria "zdziwienia". Dając opornik do plusa mamy dodatkowe, ciekawe wyjście które kiedyś można wykorzystać. Teraz jest zabetonowane.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.