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

Jak zbudować konwerter I2C na RS232 z AT89C2051 jako slave?

billy_ 24 Kwi 2006 10:28 4129 11
REKLAMA
  • #1 2559759
    billy_
    Poziom 11  
    Posty: 16
    Potrzebuję skonstruować konwerter na procesorze np. AT89C2051.
    Zastosowanie procesora na szynie I2C, jako urządzenia master nie rodzi żadnego problemu.
    Natomiast mi jest potrzebne zastosowanie procesora, jako urządzenie slave.
    Miałby on na celu "nasłuchiwanie" szyny I2C i jeśli pojawią się dane o konkretnym adresie, przechwycić je i przesłać dalej po transmisji szeregowej RS232.
    Może ktoś zna jakiś uklad scalony, który realizuje taką funcję?
    Może był taki temat poruszany już na forum (ja nie znalazłem)?
    Może ktoś ma już opracowany taki konwerter?

    Za wszelkiego typu pomoc będę bardzo wdzięczny.

    pozdrawiam

    Billy
  • REKLAMA
  • #2 2559855
    max_gg
    Poziom 26  
    Posty: 631
    Pomógł: 83
    Ocena: 26
    Witam!

    Zainteresuj się układem PCF8584 Philipsa.
    Na w/w stronie znajdziesz datasheet oraz noty aplikacyjne, w których opisane są różne sposoby wykorzystania tego układu.
    Drugim, w/g mnie łatwiejszym w użyciu, jest PCA9564, również Philips'a.

    No i oczywiście zostają Google, ale tu myślę że sobie poradzisz ;)

    Pozdrawiam!

    Marcin "Max" G.
  • #3 2559942
    billy_
    Poziom 11  
    Posty: 16
    Dziękuję za notkę.

    Znam istnienie tych scalaczków, tylko nie o to mi chodzi.
    Bo prezentowane powyżej pozycje mogą pracować jako slave ale pod określonym adresem, z góry określonym przez producenta (A0 i A1), natomiast ja potrzebuję uniwersalnego konwertera, który odbiera dane z dowolnego, ustawianego adresu, czyli poprostu kontroluje wszystkie "biegające" dane po szynie I2C i pobiera tylko te, ktore go interesują i dalej robi z nimi to co chcę, czyli np. wysyła po rs232. Dlatego też od razu zasugerowałem uP.
    Może ktoś coś podobnego robił??
  • #4 2560047
    Sam Sung
    Poziom 33  
    Posty: 2052
    Pomógł: 227
    Ocena: 611
    Moim zdaniem do tego celu spokojnie wystarczy sam AT89C2051 (no i oczywiście MAX232). Trzeba go tylko odpowiednio oprogramować ;)
  • REKLAMA
  • #5 2560060
    max_gg
    Poziom 26  
    Posty: 631
    Pomógł: 83
    Ocena: 26
    No, jeśli tak :)

    Ja w tym przypadku wykorzystałbym np. tiny2313 (wbudowany USI) lub mega8 (wbudowany TWI) - oba mogą pracować sprzętowo z I2C, także w trybie "slave" (mega8 nawet ma większe możliwości)

    Ale jeśli chcesz zrobić to na '2051 - to są jeszcze Google.

    Pozdrawiam!
  • REKLAMA
  • #6 2560665
    szymtro
    Poziom 30  
    Posty: 1421
    Pomógł: 101
    Ocena: 59
    Tylko że chyba żadne sprzętowe TWI w tym wypadku sienie sprawdzi. Bo niby jak to ustawić? master - nie bo generuje zegar, slave - tez nie bo generuje ack. Tu jest potrzebne napisanie własnego programu do rozpoznawania kolejnych stanów I2C i przechwytywania tego co dzieje sie na magistralki - narazie proponuje bez rozróżniania w którą stronę.
    Nie jest to specjalnie trudne ale trzeba biegle posługiwac sieprzerwaniami i tajmerami w '51.

    Nie łąm sie - dasz radę, moze zejdzie ci troche dłużej ale napewno sie da.
  • REKLAMA
  • #7 2561000
    DosinskY
    Poziom 19  
    Posty: 332
    Pomógł: 24
    Ocena: 9
    Ja to na szybkiego bym napisal tak:
    - uC czeka na warunek startu na I2C (SDA->0 gdy SCL=1)
    - uC czyta pierwsze 8-bitow z I2C (adres slave wysylany przez master) i porownuje go z adresem "zadanym"
    - jezeli adres inny niz zadany to uC czeka na kolejny warunek startu
    - jezeli adres zgodny z zadanym to uC nasluchuje.

    Nalezaloby sprytnie rozwiazac problem wysylu danych przez UART. Wysyl musi odbywac sie szybko, by mikrokontroler nie tracil nic z nadawanych bitow na I2C. Tak jak pisal szymtro - nalezalo by tu zastosowac jakies przerwanka. Moze by tak ladowac dane do bufora uart (w '51 to chyba SBUF) po odebraniu bajtu z I2C w chwili, gdy SCL jest w stanie niskim. Dla I2C czas SCL_LOW to min 4,7µs, wiec '51 z odpowiednim kwarcem powinien sie wyrobic ;)

    to takie szybkie przemyslenia wiec moge sie gdzies mylic....pozdro,
    dosinsky
  • #8 2562020
    olekewaagata
    Poziom 25  
    Posty: 638
    Pomógł: 64
    Ocena: 28
    A mnie się wydaje że nie jest to takie proste jakby się wydawało tylko na podstawie analizy lini. A piszę tak dlatego, że jesli I2C będzie pracowało z dopuszczalną dla niej (i to z wolniejszą szybkoscią) czyli 100 kbitow/s to czy przeciętna 51-ka wyrobi się z analizą każdego stanu na lini SDA i SCL, nawet gdyby do tego użyc przerwań, to powrót z nich też zajmuje cenny czas. Nie widziałbym problemu tylko w tym przypadku , gdybym miał uP co najmniej 10-20 razy szybszy od normalnej 51-ki.
    Podane wartości to tylko moje przypuszczenia ale procek analizujący musi być szybszy.
  • #9 2562118
    szymtro
    Poziom 30  
    Posty: 1421
    Pomógł: 101
    Ocena: 59
    No i sama kwestja wysyłania danych do kompa. Teoretycznie 115200 powinno być minimalnie szybsze niż I2C ale pasowało by też ubrać to jakoś ładnie aby było czytelne w terminalu - a to juz napewno bedzie wolniesze.
    Można by zapisywać całą transmisję i wysyłać ja na żądanie.
    Tylko ze jak wiemy czasami tych danych jest sporo - odczyt z pamieci I2C praktycznie mozna pociagnać tylko z jednym startem i adresowaniem - i co wtedy?

    Czy potrzebujesz to do jakiegoś konkretnego urządzenia czy uniwersalne?

    Byćmoze rozwiazanie podane wcześniej (ze specjalna kostka pcf) jest sensowniejsze gdyż ma wyjscie równoległe (wsam raz do LPT) no i wyrobi sie on-lien złapać wszystko. To tylko prblem z napisaniem obsługi LPT.
    Albo dołączyc cos takiego do ft245 - duza szybkosć i łątwość obsługi w projekcie (biblioteki do vb6, builder - tak twierdzi producent).
  • #10 2564336
    DosinskY
    Poziom 19  
    Posty: 332
    Pomógł: 24
    Ocena: 9
    Fakt. Jezeli zaczniemy ladnie ubierac wysylane dane (a wypadaloby by z tego ubierania nie rezygnowac ;) )......cykl maszynowy 500ns (dla AT89C2051 z kwarcem 24MHz) moze nie wystarczyc.... Autor tematu nie precyzuje rodziny mikrokontrolera a '51 Atmela podaje tylko jako przyklad. Moze wiec jakas szybsza '51 Dallasa albo '51 od AD....a jak nie, to moze znane, tanie i powszechnie lubiane AVR....albo PIC16FXXX???? Jest w czym przebierac ;)
  • #11 2564415
    juntom
    Poziom 19  
    Posty: 216
    Pomógł: 35
    Ocena: 27
    poszukaj pod haslem "i2c sniffer". Calkiem niedawno byl projekt takiego ukladu na elektrodzie zdaje sie z wykorzystaniem atmega8. Kiedys zajmowalem se troszke tym tematem, bez asemblera sie nie obeszlo ;) 100 kbit nie udalo mi sie osiagnac... Na avrfreaks.net tez znajdziesz projekt do "podsluchiwania" szyny i2c
    pozdr.
  • #12 2654973
    billy_
    Poziom 11  
    Posty: 16
    szymtro napisał:
    No i sama kwestja wysyłania danych do komputera. Teoretycznie 115200 powinno być minimalnie szybsze niż I2C ale pasowało by też ubrać to jakoś ładnie aby było czytelne w terminalu - a to juz napewno bedzie wolniesze.
    Można by zapisywać całą transmisję i wysyłać ja na żądanie.
    Tylko ze jak wiemy czasami tych danych jest sporo - odczyt z pamieci I2C praktycznie mozna pociagnać tylko z jednym startem i adresowaniem - i co wtedy?

    Czy potrzebujesz to do jakiegoś konkretnego urządzenia czy uniwersalne?

    Byćmoze rozwiazanie podane wcześniej (ze specjalna kostka pcf) jest sensowniejsze gdyż ma wyjscie równoległe (wsam raz do LPT) no i wyrobi sie on-lien złapać wszystko. To tylko prblem z napisaniem obsługi LPT.
    Albo dołączyc cos takiego do ft245 - duza szybkosć i łątwość obsługi w projekcie (biblioteki do vb6, builder - tak twierdzi producent).


    Nie chodzi mi tutaj o transmisję konkretnie do komputera.
    mam urządzenie, ktore obsługuje wyswietlacz LED na scalaczku pcf8576, a ja chcę założyć wielkogabarytowy wyświetlacz (podpiąć go w miejsce istniejącego), problem tylko w tym, że odbiera on dane z rs232

    Dodano po 1 [minuty]:

    olekewaagata napisał:
    A mnie się wydaje że nie jest to takie proste jakby się wydawało tylko na podstawie analizy lini. A piszę tak dlatego, że jesli I2C będzie pracowało z dopuszczalną dla niej (i to z wolniejszą szybkoscią) czyli 100 kbitow/s to czy przeciętna 51-ka wyrobi się z analizą każdego stanu na lini SDA i SCL, nawet gdyby do tego użyc przerwań, to powrót z nich też zajmuje cenny czas. Nie widziałbym problemu tylko w tym przypadku , gdybym miał uP co najmniej 10-20 razy szybszy od normalnej 51-ki.
    Podane wartości to tylko moje przypuszczenia ale procesor analizujący musi być szybszy.

    prędkośc jaka jest mi potzebna to 4800 większa jest mi zbędne i nie musi odbierać dokladnie wszystkich danych, może opuszczać te dane.

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy konstrukcji konwertera I2C na RS232 z wykorzystaniem mikrokontrolera AT89C2051 pracującego jako urządzenie slave na magistrali I2C. Autor potrzebuje uniwersalnego rozwiązania, które będzie nasłuchiwać dane na magistrali I2C pod dowolnym, konfigurowalnym adresem, przechwytywać je i przesyłać dalej przez interfejs RS232. Wskazano, że popularne układy scalone PCF8584 i PCA9564 Philipsa mogą działać jako slave, ale mają stałe adresy i nie spełniają wymagań uniwersalności. Proponowano użycie samego AT89C2051 z odpowiednim oprogramowaniem, jednak pojawiły się wątpliwości dotyczące wydajności procesora przy analizie sygnałów I2C w czasie rzeczywistym, zwłaszcza przy standardowej prędkości 100 kbit/s. Sugerowano alternatywne mikrokontrolery z wbudowanym sprzętowym interfejsem I2C, takie jak Atmel ATtiny2313 lub ATmega8, które mogą pracować w trybie slave i ułatwić implementację. Podkreślono konieczność stosowania przerwań i timerów do efektywnego przechwytywania danych oraz problem z synchronizacją transmisji UART, aby nie utracić danych z magistrali I2C. Wspomniano także o projektach typu "I2C sniffer" dostępnych na forach i w sieci, które mogą stanowić inspirację. Autor dodatkowo wyjaśnił, że docelowo prędkość transmisji RS232 ma wynosić 4800 bodów, a dokładność odbioru danych nie musi być pełna, co może ułatwić implementację. Rozważano również alternatywne rozwiązania sprzętowe, takie jak układy z wyjściem równoległym (np. PCF8576) lub konwertery USB (np. FT245) dla łatwiejszej obsługi i większej szybkości transmisji.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA