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

Karta MMC, Atmega16L, wyświetlacz - problem z napięciami

PGrzesiek 28 Lip 2007 13:02 2358 12
REKLAMA
  • #1 4122393
    PGrzesiek
    Poziom 10  
    Posty: 30
    Witam
    Karta wymaga zasilania 3.3V - procesor ruszy bez problemu na 3.3V zgodnie z notą katalogową. Ale jak dogadać cpu z wyświetlaczem wymagającym zasilania 5V (http://www.artronic.pl/o_produkcie.php?id=583)? Nie będzie problemu, czy trzeba jakiś "translator" 3.3V <-> 5V?

    Jak z 3.3V odpalić MOSFET'a? Pozostaje tylko driver?
  • REKLAMA
  • #2 4122515
    BoskiDialer
    Poziom 34  
    Posty: 1530
    Pomógł: 353
    Ocena: 42
    Można też inaczej... ja u siebie zastosowałem na każdej ścieżce dzielnik rezystorowy 4k7/10k - uC (u mnie atmega128) jest zasilany z 5V - na wyjściu dzielnika mam 3,4V - praktycznie w sam raz na wejście cmos karty. w drugą stronę mam dokładnie to samo (pierwotnie chciałem się komunikować z kartą SD po szynie 4-bit, ale okazało się, że nie można wyłączyć mechanizmu liczenia sum kontrolnych, a więc przeszedłem w tryb MMC - zresztą dzielnik na wejściu uC jest abezpieczeniem, gdyby pin stał się wyjściem) - pin karty obciążony opornikiem 10k do masy, 4k7 do pinu - na wejściu uC mam 3V3 - według dokumentacji atmegi128 najmniejsze napięcie gwarantujące odczyt pinu jako stan wysoki, to 0.6Vcc = 3V więc spokojnie trzymam się w zakresie. karta zasilana z osobnego stabilizatora 3v3. Jedynie trzeba jeszcze uwzględnić pojemność wejść karty i pojemność wejść uC - ograniczenie u siebie wyliczyłem jakoś na 30MHz, ale i tak programowo wyciągam tylko koło 2MHz...
    W dokumentacji atmegi16 jest ten sam próg napięcia gwarantującego odczyt jako stan wysoki - więc można by zastosować ten pomysł. Można też zmienić wartości oporników na 2k2/4k7.
  • REKLAMA
  • #3 4122529
    johny_w
    Poziom 24  
    Posty: 673
    Pomógł: 80
    Ocena: 63
    Witam. Miałem kiedyś podobny problem z mega8 i lcd. Było to rok temu i nie pamiętam rozwiązania, ale zdaje się że lcd zasiliłem z 5V a linie sterujące podciągnąłem również do 5V przez rezystory.

    Raz miałem również styczność z lcd typu OLED lub PLED. Pamiętam ze ruszał bez problemu na 3.3V.

    Można również zastosować konwerter poziomów, np. 74HC245. Lub wykonać to na diodach zenera (było o tym na forum).

    Co do mosfetów to przeważnie stosuje się jakieś drivery (scalone lub na tranzystorach). Chociażby ze względów ochrony uC. Też szukałem kiedyś takiego, co by poszedł z 3.3V. Było ciężko, a że projekt nie był priorytetowy - odpuściłem sobie.

    pozdr, JnS
  • #4 4122547
    PGrzesiek
    Poziom 10  
    Posty: 30
    BoskiDialer napisał:
    Można też inaczej... ja u siebie zastosowałem na każdej ścieżce dzielnik rezystorowy 4k7/10k - uC (u mnie atmega128) [...].


    Czyli tak jak w załączniku i dla każdego "pinu" karty MMC osobny dzielnik robimy, tak?

    No to jeśli dobrze załapałem do biorę się do roboty :)
    Załączniki:
    • Karta MMC, Atmega16L, wyświetlacz - problem z napięciami Bez nazwy.jpg (12.85 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #5 4122556
    PGrzesiek
    Poziom 10  
    Posty: 30
    Jj_Johnys napisał:
    Witam. Miałem kiedyś podobny problem z mega8 i lcd. Było to rok temu i nie pamiętam rozwiązania, ale zdaje się że lcd zasiliłem z 5V a linie sterujące podciągnąłem również do 5V przez rezystory.
    [...]

    Co do mosfetów to przeważnie stosuje się jakieś drivery (scalone lub na tranzystorach). Chociażby ze względów ochrony uC. Też szukałem kiedyś takiego, co by poszedł z 3.3V. Było ciężko, a że projekt nie był priorytetowy - odpuściłem sobie.

    pozdr, JnS


    Poszukam odnośnie zenerek.
    Ten MOSFET nie będzie pracował z zawrotnymi f, ma tylko załączać wyświetlacz. Drugi ma być sterowany PWM do "wygaszania" podświetlenia po pewnym czasie i to tyle;)
  • #6 4122561
    BoskiDialer
    Poziom 34  
    Posty: 1530
    Pomógł: 353
    Ocena: 42
    Tak właśnie to u mnie wygląda...
  • REKLAMA
  • #7 4127697
    William Bonawentura
    Poziom 34  
    Posty: 2424
    Pomógł: 190
    Ocena: 619
    BoskiDialer napisał:
    pierwotnie chciałem się komunikować z kartą SD po szynie 4-bit, ale okazało się, że nie można wyłączyć mechanizmu liczenia sum kontrolnych, a więc przeszedłem w tryb MMC


    Możesz trochę przybliżyć ten temat ?
  • #8 4128158
    BoskiDialer
    Poziom 34  
    Posty: 1530
    Pomógł: 353
    Ocena: 42
    Przybliżać nie ma co... przestudiowałem całą dokumentację na temat kart sd i zacząłem robić płytkę - 4 piny z szny danych na 4 dolne bity portu, wyżej pin z szyny poleceń/odpowiedzi, sygnał segara i 2 sygnały z gniazda - karta włożona i karta zabezpieczona przed zapisem... 6 sygnałów połączone na dzielniku rezystorowym(4 przewody z danych jak i przewód poleceń/odpowiedzi są dwukierunkowe) z tego powodu, że chciałem uzyskać maksymalną prędkość transmisji - karty SD mogą pracować w trybie 4-bit przy zegarze 25MHz, co teoretycznie daje prędkość wymiany danych na poziomie 12,5MB/s... problem się zaczął, kiedy doszedłem do wniosku, że nie da się wyłączyć mechanizmu sprawdzania sum kontrolnych, a ten jest naprawdę bardzo zmyślny - suma kontrolna jest liczona z generatora x16+x12+x5+1, ale żeby było zabawniej, to nie ze strumienia danych, tylko z poszczególnych bitów każdej linii z osobna - czyli trzeba na raz liczyć 4 sumy kontrolne - na jakimś układzie programowalnym to zrobić pewnie by nie problem, tyle że u siebie miałem tylko możliwość rozwiązania programowego, a poza tym nie znam vhdl'a. Z prostych obliczeń wynikło mi, że liczenie tak skomplikowanej sumy kontrolnej będzie bardziej spowalniać niż pobieranie danych za pomocą jednego pinu - dlatego przeszedłem na komunikację w trybie spi.
    Przy pierwszym podejściu napisałem też funkcje do liczenia sum kontrolnych (crc16+crc7) i zoptymalizowałem je do tego stopnia, że nie wymagają tablic LUT ani nie wykorzystują pętli (w obrębie przetwarzania jednego bajtu), a jednocześnie są bardzo szybkie - jak ktoś chce, to tu je zamieszczam (pierwotnie napisane były w delphi - do testów. w takiej formie je zamieszczam):


    function crc7(const AData;ALen: integer): Byte;
    var vData: array[0..0] of byte absolute AData;
        vByte: Integer;
        ct: Byte;
    begin
      result := 0;
      for vByte := 0 to ALen-1 do
      begin
        ct := result xor vData[vByte];
        result := (ct         shl 4) xor
                  (ct         shl 1) xor
                  (ct and $F0      ) xor
                  (ct and $70 shr 3) xor
                  (ct and $80 shr 6);
      end;
      // crc w górnych 7 bitach, dolny bit skasowany - ta forma może być dogodna, gdyż w protokole sd/mmc suma crc7 jest przesyłana jako 7 bitów crc i jeden bit końca polecenia (i odpowiedzi - tylko w sd)
      result := result shr 1;
    end;


    function crc16(const AData;ALen: integer): word;
    var vData: array[0..0] of byte absolute AData;
        vByte: Integer;
        vCrcM: Word;
    begin
      result := 0;
      for vByte := 0 to ALen-1 do
      begin
        vCrcM := (result shr 8) xor vData[vByte];
        vCrcM := vCrcM xor (vCrcM shr 4);
        result := vCrcM xor (vCrcM shl 5) xor (vCrcM shl 12) xor (result shl 8);
      end;
    end;


    ps. mam też kilka innych funkcji do crc zoptymalizowanych do granic - np odwrócone crc przy generatorze 0x8408 - na procku avr przetworzenie stanu zajmuje 15 cykli i wykorzystuje 4 rejestry - jak by ktoś chciał, to mogę zamieścić wraz z obszernym opisem jak przebiegała optymalizacja
  • #9 4268923
    firefox_PL
    Poziom 17  
    Posty: 235
    Pomógł: 21
    Ocena: 2
    co do komunikacji AVR + MMC to jest dobry kurs w archiwum EP o nazwie "Obsługa kart pamięci Flash za pomocą mikrokontrolerów" częsci 4 do 7 są o MMC i AVR, w ostatniej części jest kod w C obsługi w trybie SPI
  • #10 4269820
    William Bonawentura
    Poziom 34  
    Posty: 2424
    Pomógł: 190
    Ocena: 619
    BoskiDialer napisał:
    Przybliżać nie ma co... przestudiowałem całą dokumentację na temat kart sd i


    Przepraszam, nie doczytałem że pisałeś o transmisji 4bit.
  • REKLAMA
  • #11 4271888
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    Witam
    Temat MMC juz chyba koledzy rozjaśnili
    Co do MOSFETÓW to poczytaj sobie (pooglądaj wykresy) np.IRF7455
    Dopasowanie poziomów logicznych to prosty temat, jeśli chcesz oszczędzić energie to użyj np. VHC244
    Wyświetlacz z drugiej strony:
    liczyłeś predkości komunikacji z kartą... na pewno nie osiągniesz wiecej niz 6Mbodów przy zasilaniu procka 3,3V. Chcesz mieć max? musisz go zasilić 5V. Wtedy masz SPI 12MHz/8bit Jednocześnie odpada problem z wyświetlaczem.
    Pozdrawiam
  • #12 4447512
    przem_mo
    Poziom 11  
    Posty: 18
    Witam,
    Czy ktoś posiada dokumentacie kart sd/mmc? Planuje uzyć jej w projekcie, a słabo mi idzie znajdowanie opisu .
    potrzebuje dokładnie opisu komend, interfejsu, czyli noty katalogowej.
    z góry dziękuję i pozdrawiam
  • #13 4447842
    firefox_PL
    Poziom 17  
    Posty: 235
    Pomógł: 21
    Ocena: 2
    polecam na stronie elektroniki praktycznej jest kurs obsługi MMC przez AVR (w C), wszystko tam jest ładnie opisane

Podsumowanie tematu

✨ Dyskusja dotyczy problemu współpracy mikrokontrolera Atmega16L zasilanego napięciem 3,3V z wyświetlaczem wymagającym zasilania 5V oraz kartą MMC/SD. Wskazano, że procesor Atmega16L może pracować stabilnie na 3,3V, jednak sygnały sterujące między układami o różnych poziomach napięć wymagają konwersji poziomów logicznych. Proponowane rozwiązania to stosowanie dzielników rezystorowych (np. 4,7kΩ i 10kΩ) na liniach sygnałowych do obniżenia napięcia 5V do 3,3V oraz konwerterów poziomów, takich jak układ 74HC245 lub VHC244, które umożliwiają dwukierunkową komunikację i oszczędność energii. Wspomniano również o możliwości użycia diod Zenera do ochrony i konwersji napięć. W kontekście sterowania MOSFET-ami z poziomu 3,3V zalecane jest stosowanie driverów tranzystorowych lub scalonych, zwłaszcza gdy MOSFET ma załączać wyświetlacz lub sterować PWM podświetleniem. Zwrócono uwagę, że przy zasilaniu mikrokontrolera 3,3V maksymalna prędkość komunikacji SPI z kartą MMC/SD może być ograniczona do około 6 Mb/s, a dla wyższych prędkości (np. 12 MHz SPI) konieczne jest zasilanie 5V, co jednocześnie upraszcza kompatybilność z wyświetlaczem. Dodatkowo podano źródła wiedzy, takie jak kursy w Elektronice Praktycznej dotyczące obsługi kart MMC przez AVR w trybie SPI oraz dokumentacje kart SD/MMC z opisem interfejsu i komend.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA