Witam Kolegów,
Mam system mikroprocesorowy z mikrokontrolerem ATmega324 zasilanym napięciem 3.3V (z przetwornicy impulsowej), który poprzez I2C steruje pracą dwóch peryferiów: jeden zasilany tym samym napięciem co ATmega i drugi zasilany napięciem 5V (także z przetwornicy). Do współpracy ATmegi z układem zasilanym napięciem 5V zastosowałem dwukierunkowy konwerter poziomów na tranzystorach BS138 (ogólnie znany). Problem jest taki, iż układ na 5V nie zawsze odpowiada na rozkazy mikroprocesora - nie wystawia sygnału ACK, tak jak gdyby nie był obecny na magistrali (odczytuję dla testów rejestr TWSR). Odpięcie od magistrali układu zasilanego 3.3V i pozostawienie tylko tego na 5V (poprzez konwerter) poprawia nieco sytuację, ale i tak układ ten odpowiada raz na 5 czy 20 razy. Spowalniałem prędkość magistrali (oba układy mogą pracować na 400kHz), zwiększałem czas zwłoki między sygnałem Stop i Start (peryferium na 5V wymaga minimum 500µS), ale poprawy znacznej nie widzę. Oczywiście podłączę oscyloskop by zbadać napięcie 5V oraz przebiegi na magistrali, ale na tą chwilę mam następujące podejrzenia:
- duża pojemność I2C i zniekształcenia zboczy,
- zakłócenia na zasilaniu 5V.
Dodam, iż układ na 3.3V pracuje bez problemów zaś sam system mikroprocesorowy również. Macie jakieś inne sugestie? robiw
PS.
Rezystory podciągające po obu stronach konwertera 4.7K. Zmieniałem na 10K (tak, jak w na schemacie konwertera) ale bez zmian...
Dodano po 21 [minuty]:
Źródłowa aplikacja translatora: http://www.nxp.com/documents/application_note/AN10441.pdf
W odpowiedzi na prośbę Admina (piotrva): schemat to nic nadzwyczajnego: ATmega->Układ na I2C na 3.3V-> konwerter 3.3V/5V->układ I2C na 5V...czyli schemat jak konwertera!
Co zaś się tyczy obsługi TWI to podstawy podstaw!
robiw
Mam system mikroprocesorowy z mikrokontrolerem ATmega324 zasilanym napięciem 3.3V (z przetwornicy impulsowej), który poprzez I2C steruje pracą dwóch peryferiów: jeden zasilany tym samym napięciem co ATmega i drugi zasilany napięciem 5V (także z przetwornicy). Do współpracy ATmegi z układem zasilanym napięciem 5V zastosowałem dwukierunkowy konwerter poziomów na tranzystorach BS138 (ogólnie znany). Problem jest taki, iż układ na 5V nie zawsze odpowiada na rozkazy mikroprocesora - nie wystawia sygnału ACK, tak jak gdyby nie był obecny na magistrali (odczytuję dla testów rejestr TWSR). Odpięcie od magistrali układu zasilanego 3.3V i pozostawienie tylko tego na 5V (poprzez konwerter) poprawia nieco sytuację, ale i tak układ ten odpowiada raz na 5 czy 20 razy. Spowalniałem prędkość magistrali (oba układy mogą pracować na 400kHz), zwiększałem czas zwłoki między sygnałem Stop i Start (peryferium na 5V wymaga minimum 500µS), ale poprawy znacznej nie widzę. Oczywiście podłączę oscyloskop by zbadać napięcie 5V oraz przebiegi na magistrali, ale na tą chwilę mam następujące podejrzenia:
- duża pojemność I2C i zniekształcenia zboczy,
- zakłócenia na zasilaniu 5V.
Dodam, iż układ na 3.3V pracuje bez problemów zaś sam system mikroprocesorowy również. Macie jakieś inne sugestie? robiw
PS.
Rezystory podciągające po obu stronach konwertera 4.7K. Zmieniałem na 10K (tak, jak w na schemacie konwertera) ale bez zmian...
Dodano po 21 [minuty]:
Źródłowa aplikacja translatora: http://www.nxp.com/documents/application_note/AN10441.pdf
W odpowiedzi na prośbę Admina (piotrva): schemat to nic nadzwyczajnego: ATmega->Układ na I2C na 3.3V-> konwerter 3.3V/5V->układ I2C na 5V...czyli schemat jak konwertera!
Co zaś się tyczy obsługi TWI to podstawy podstaw!
Kod: C / C++
robiw
