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

ATMega8 i PCF8574P - Diody świecą słabo, problem z I2C i rezystorami

gpi_unit 13 Lis 2012 20:36 3201 12
  • #1 11525790
    gpi_unit
    Poziom 12  
    Witam

    Od kilku dni usiłuje się połączyć układ ATMega8 z PCF8574P.
    Na początek chciałbym migać wszystkimi diodami podłączonymi pod wyjścia układu PCF...

    Napisałem program, ale co bym nie zrobił to i tak tylko lekko świecą diody.
    A0 A1 A2 podłączone do masy. Rezystory podciągające są i próbowałem różnych wartości 2,7k, 1k, 10k, ale i tak nie działa.
    ATMega8 taktowana jest wew. oscylatorem 8 MHz

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    Biblioteka:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    A układ jest na pewno sprawny, bo sprawdzałem pod Arduino i działa.
    Czytałem już chyba wszystkie wątki na forum odnośnie PCF8574, ale nie wiem już co może być nie tak.
  • #2 11525888
    mirekk36
    Poziom 42  
    No a jak żeś pan podłączył te diody LED ? coś mi pachnie że katodą do wyjścia pinu a anodą przez rezystor do GND ??? ;)

    jeśli tak ? to szybko zmień czyli katodą do pinu i przez rezystor anodą do VCC i nagle stanie się cud ;) zaczną normalnie świecić ? a dlaczego ? spróbuj jeszcze raz zajrzeć do PDF i doczytać n/t "quasi bidirectional" - z czym to się wiąże.
  • #3 11525909
    gpi_unit
    Poziom 12  
    Jak podłączam odwrotnie to w ogóle nic nie świeci i to jest dla mnie niepojęte.
    Co może być nie tak?
  • #5 11526237
    gpi_unit
    Poziom 12  
    Schemat: Link

    Tylko na schemacie jest podłączone A0 A1 i A2 do zasilania (adres by był inny zamiast 0x40 to 0x4E). Reszte mam tak jak na schemacie

    P.S. Co najlepsze, że kiedyś na płytce stykowej to wszystko działało, a teraz nic co do I2C podłączam nie odpowiada (nawet RTC po I2C [PCF8583] )
  • #6 11526313
    mirekk36
    Poziom 42  
    A no to ja myślałem że ty piszesz że komunikacja jest bo diody migają sobie co 400ms tylko słabo świecą, więc uznałem że komunikację masz OK ... a teraz co? okazuje się że ci nie migają ?

    napisz może jeszcze raz po kolei co i jak robisz - bo pewnie jakiś czeski błąd strzeliłeś i kręcisz się w kółko.
  • #7 11526327
    gpi_unit
    Poziom 12  
    Komunikcja mi nie działa. Wszystko podłączyłem tak jak na schemacie. Diody podłączyłem tak jak zalecałeś. Czuje, że zaczyna działać prawo Murphy'ego, że to jest jakaś "pierdoła" nad która siedzę już 3 dni.
  • #8 11526329
    mirekk36
    Poziom 42  
    a tak przy okazji jak spojrzałem na twój schemat to na pewno przydałoby ci się to dokładnie przeczytać bo masz babole z podłączaniem procka:

    http://mirekk36.blogspot.com/2012/04/mikrokontroler-prawidowe-zasilanie.html

    ale też to obejrzeć (video) polecam:

    http://atnel.pl/kurs-cadsoft-eagle.html

    Dodano po 1 [minuty]:

    no też tak myślę że pierdółka typu np brak styku albo coś takiego - tym bardziej, że jak piszesz na stykówce już raz to zrobiłeś.

    Ale jak mówię już po schemacie widać że popełniasz sporo różnych drobnych błędów więc na prawdę te dwa linki ci się przydadzą - zobaczysz ;)
  • #9 11526377
    gpi_unit
    Poziom 12  
    Ale nawet na stykówce to teraz nie działa. Myślę czy te rezystory przy SDA i SCL to za małych wartości nie mają... Na niektórych projektach widziałem określenie prędkości transmisji może coś w tą stronę...
  • #10 11526526
    JarekC
    Poziom 32  
    Witam,

    I to jest dobry trop, brakuje inicjalizacji częstotliwości pracy szyny I2C.

    Częstotliwość szyny I2C = Fcpu/(16+2*TWBR*4^TWPS).

    Po resecie uP TWBR=0,TWPS=0,Fcpu = 8MHz

    Podstawiając do wzoru otrzymujemy Fi2c=8MHz/16= 500kHz.
    Czyli 5 razy za dużo. PCF8574 może pracować z maksymalną częstotliwością 100kHz.

    Pozdrawiam
    JarekC
  • #11 11526619
    gpi_unit
    Poziom 12  
    Zrobie tak

    TWPS = 1
    TWBR = 2

    Zobacze wtedy czy zadziała. Rozumiem, że to można jeden raz w funkcji Main wklepać, nie trzeba za każdym wywołaniem funkcji twistart() tego robić...

    Nie ma takiego rejestru TWPS chyba chodziło o TWSR
    Ale i tak nie działa. Dioda nie miga
  • #13 11527568
    gpi_unit
    Poziom 12  
    Robi się ciekawiej. Podłączyłem A0 A1 A2 tym razem do zasilania, zmieniłem adres, dodałem inicjalizacje TWI i dioda zaczęła migać, ale jak wyciągłem z podstawki i włożyłem ponownie to już układ nie odpowiada. Ja już wymiękam z tą magistralą. Takie łatwe, a takie trudne za razem.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Makro TWI_INIT()
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    #define TWI_INIT() TWBR = (unsigned char)(F_CPU / (8ul * TWI_BAUD) - 2);
    [/syntax]


    Myślę, że na tym etapie trzeba pomyśleć nad różnymi wartościami rezystorów przy liniach SDA i SCL, bo program działa.

    Zmieniłem rezystory i wszystko już działa jak natura chciała, dziękuje wszystkim za cenne wskazówki.
REKLAMA