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

Zakłócenia w transmisji SPI z kartą MMC na ATmega32, 125kHz, 5V/3.3V, 20cm taśma

mazdziez 19 Sie 2006 23:11 2082 15
REKLAMA
  • #1 2932681
    mazdziez
    Poziom 11  
    Posty: 54
    Pomógł: 2
    Witam,

    Mam następujący problem. Zajmuje się obsługą karty mmc przy użyciu mikrokontrolera ATmega32. Kartę obsługuje przez interfejs SPI taktowany z częstotliwością 125kHz. Zegar do mikrokontrolera to 16Mhz. Cały układ montuje przy użyciu płytki:

    http://www.kamami.pl/?id_prod=6691

    Kartę mmc podpinam przy użyciu ok. 20 cm`owej tasiemki.

    Mój układ jest zasilany napięciem 5V dla potrzeb karty zrzucam napięcie zasilania do 3.3 przy użyciu stabilizatora a napięcie na liniach transmisyjnych przy użyciu dzielników napięciowych. Wygląda to mniej więcej tak:

    http://www.captain.at/electronic-atmega-mmc.php

    Mikrokontroler ma wgrany program, który dla celów testowych ma odczytać 100 sektorów karty. Po odczytaniu każdego sektora mikrokontroler ma wysłać informację potwierdzającą do komputera przez rs232.

    Po włączeniu zasilania nie dzieje się nic. Jeżeli dotknę kabla transmisyjnego(SPI), układ nagle ożywa i przesyła potwierdzenia dla wszystkich 100 sektorów. Jeżeli zresetuję układ nadal trzymając kabel program ponownie wykona się poprawnie natomiast jeżeli puszczę kabel nie dzieje się nic.

    Ważne jest to iż po zresetowaniu układu mogę uruchomić transmisję dotykając kabla. No i oczywiście zadziała ona od razu po resecie jeżeli trzymam już kabel.

    Próbowałem zekranować kabel zwyczajną folią aluminiową i podłączyć ja do masy lub do zasilania. Niestety to nie pomaga ale nadal pomaga wręcz lekkie dotknięcie ekranu kabla. Próbowałem także pojedyncze linie SPI odkłócić kondensatorem 100nF do masy. Także bez rezultatu chociaż układ zachowywał się inaczej nieraz dotknięcie kabla już nie pomagało.

    Płytka na której montuje układ ma wyprowadzone złącza SPI do programatora. Dotykanie ich pomaga tak samo jak dotykanie ekranu kabla.

    Moim zdaniem problem leży w jakichś zakłóceniach bądź stanach nie ustalonych i nie wiem za bardzo jak to pokonać. Może ma ktoś jakiś pomysł?

    Pozdrawiam!
  • REKLAMA
  • #2 2932762
    orson-pl
    Poziom 17  
    Posty: 250
    Pomógł: 18
    Ocena: 6
    Rozumiem, że dotykasz do miedzianej części kabla lub do punktów lutowniczych?
    Jeśli tak - może jakiś opornik i do masy, który będzie symulował dotknięcie?
    Jeśli nie - sprawdź omomierzem kable, może któryś przerywa.
  • #3 2932773
    mazdziez
    Poziom 11  
    Posty: 54
    Pomógł: 2
    Nie koniecznie do miedzienaj częsci kabla. Wystarczy ze dotkne do izolacji kabli transmisyjnych. Kable sprawdzałem kilka razy. Napewno nie przerywają.
  • #4 2932820
    Jaca
    Poziom 32  
    Posty: 1332
    Pomógł: 239
    Ocena: 217
    Kilka szybkich pytań:

    - czy z innym programem np "nieśmiertelnym miganiem LED'a" też jest taki objaw ?
    - czy RESET uC masz podciągnięty do VCC przez rezystor 4.7k ?
    - czy w układzie jest kondensator 100 nF między zasilaniem uC i MMC ?
    - czy AVCC jest podpięte do VCC ?
    - czy podczas prób masz podłączony programator ISP ?
    - czym to zasilasz ?

    Pozdrawiam...
  • REKLAMA
  • #5 2932867
    mazdziez
    Poziom 11  
    Posty: 54
    Pomógł: 2
    Jaca napisał:
    Kilka szybkich pytań:

    - czy z innym programem np "nieśmiertelnym miganiem LED'a" też jest taki objaw ?
    - czy RESET uC masz podciągnięty do VCC przez rezystor 4.7k ?
    - czy w układzie jest kondensator 100 nF między zasilaniem uC i MMC ?
    - czy AVCC jest podpięte do VCC ?
    - czy podczas prób masz podłączony programator ISP ?
    - czym to zasilasz ?

    Pozdrawiam...


    -nigdy wczesniej nie miałem podobnych problemów, nie jest to mój pierwszy program.
    -reset jets podciagnięty tak jak na schemacie układu w dokumentacji
    -tak jak wyżej
    -nie programator mam odłączony, gdy jest podłączony SPI nie działa prawidłowo
    -płytka startowa jets zasilana stabilizowanym zasilaczem transformatorowym (9V)
  • #6 2932896
    Jaca
    Poziom 32  
    Posty: 1332
    Pomógł: 239
    Ocena: 217
    Spróbuj rozdzielić poszczególne żyły taśmy SPI i oddalić je od siebie.

    ps. albo oblej całość święconą wodą :)

    Pozdrawiam...
  • REKLAMA
  • #7 2933196
    mazdziez
    Poziom 11  
    Posty: 54
    Pomógł: 2
    Jaca napisał:
    Spróbuj rozdzielić poszczególne żyły taśmy SPI i oddalić je od siebie.


    Przed zastosowaniem tasiemki, kable transmisyjne były luźno ddzielone od siebie. Efekt był podobny. Próbowałem także podciągnąć wewnętrznie linię MISO do 5V. Efekt jets taki ze dotykanie nie pomaga ale nadal układ nie działa.
  • #8 2933426
    migod
    Poziom 21  
    Posty: 462
    Pomógł: 29
    Ocena: 8
    Hej,

    1. O ile dobrze pamiętam - SPI nie nadaje się do transmisji na dłuższe odległości.. Jak długa jest ta tasiemka?
    2. Oczywiście dolutowałeś masę do "podstawek" gniazda?
    3. Uwspólniłeś masy komputera i układu?
    4. Debug w postaci migania LED (układ całkowicie odseparowany od komputera) daje taki sam efekt?

    Miałem robić w/g tego schematu. Ostatecznie wybrałem naprawdę proste rozwiązanie (http://www.roland-riegel.de/sd-reader/doc/, oraz http://www.ulrichradig.de/ AVR > MMC-SD > Minimal). Żadnych problemów. Nawet go uprościłem. Całość (uC + SD) zasilam z 3.3 V (LM317), przez co pozbyłem się 2x diod, spadki napięcia na nich stwarzały same problemy. Nie zauważyłem żadnych problemów, karty też nie upaliłem.
    Na czas programowania uP / komunikacji z kartą nie jest konieczne u mnie odpinanie programatora ISP.

    Ale fakt - czytnik ma budowę "zwartą". Żadnych tasiemek. Gniazdo SD/MMC dolutowałem po drugiej stronie płytki z mikroprocesorem (ATmega8L + 3.6864MHz). Tak więc długość linii ma co najwyżej 2-3 cm. SPI pracuje z pełną prędkością. Całość ma wielkość pudełka od zapałek.

    pozdro,
    --
    migod
  • REKLAMA
  • #9 2933531
    mazdziez
    Poziom 11  
    Posty: 54
    Pomógł: 2
    migod napisał:


    1. O ile dobrze pamiętam - SPI nie nadaje się do transmisji na dłuższe odległości.. Jak długa jest ta tasiemka?



    tasiemka ma długość ok. 10 cm

    migod napisał:

    2. Oczywiście dolutowałeś masę do "podstawek" gniazda?


    Dokońca nie rozumiem gdzie miałbym dolutować mase? Jest doprowadzona do odpowiednich pinów karty.

    migod napisał:

    3. Uwspólniłeś masy komputera i układu?


    tak

    migod napisał:

    4. Debug w postaci migania LED (układ całkowicie odseparowany od komputera) daje taki sam efekt?


    Bardzo podobny. Chociaż trzeba dotykać dłużej.

    Zdjagnozowałem problem dokładniej i wygląda na to ze pomaga dotykanie tylko jednej lini: MISO. Czyli lini na której karta wysyła dane do uC. Moze problem leży w tym ze procek jets zasilany z 5V a karta odpowiada w standardzie 3.3? Może trzeba by to spowrotem zaminić na 5V?
  • #10 2933551
    Prymulka
    Poziom 18  
    Posty: 378
    Pomógł: 9
    Ocena: 8
    Pewnie tak. Ja tą linię z karty podłączam zwykle przez bufor 74AHCT1G125 o ile niczego nie pomyliłem :)
  • #11 2933588
    migod
    Poziom 21  
    Posty: 462
    Pomógł: 29
    Ocena: 8
    mazdziez napisał:

    tasiemka ma długość ok. 10 cm

    niespecjalnie długa.. powinno to działać.


    mazdziez napisał:

    migod napisał:

    2. Oczywiście dolutowałeś masę do "podstawek" gniazda?


    Dokońca nie rozumiem gdzie miałbym dolutować mase? Jest doprowadzona do odpowiednich pinów karty.

    to zależy jakim gniazdem dysponujesz..moje ma 2 metalowe "uszy" służące do mocowania gniazda do druku, oprócz tego w kilku projektach zalecali dolutować tam masę..

    mazdziez napisał:

    Zdjagnozowałem problem dokładniej i wygląda na to ze pomaga dotykanie tylko jednej lini: MISO. Czyli lini na której karta wysyła dane do uC. Moze problem leży w tym ze procesor jets zasilany z 5V a karta odpowiada w standardzie 3.3? Może trzeba by to spowrotem zaminić na 5V?

    hm.. zależnie od procesora, ale w sporej części z nich 3.3V jest już stanem wysokim.. jakie dokładnie napięcia masz po konwersji stanów z 3.3 -> 5V? (inaczej niz oscyloskopem chyba tego nie wylapiesz..)

    Czy mozesz "zejsc" z napieciem calosci do 3.3V?
  • #12 2934094
    mazdziez
    Poziom 11  
    Posty: 54
    Pomógł: 2
    migod napisał:


    hm.. zależnie od procesora, ale w sporej części z nich 3.3V jest już stanem wysokim.. jakie dokładnie napięcia masz po konwersji stanów z 3.3 -> 5V? (inaczej niz oscyloskopem chyba tego nie wylapiesz..)

    Czy mozesz "zejsc" z napieciem calosci do 3.3V?


    Nie przeprowadzam konwersji w drugą stronę. Karta jest bezpośrednio podpięta do MISO. Niestety nie mogę sprawdzić jakie napięcia wystawia karta. Nie dysponuje oscyloskopem.

    Nie mogę zejść z napięciem całości do 3.3 to jest niestety wada tej płytki. Nie chce zmieniać stabilizatora.

    Jutro postaram się kupić jakiś bufor żeby przejść z 3.3V z powrotem na 5V i dam znać jakie są tego skutki.

    Dodano po 1 [godziny] 2 [minuty]:

    Moze ktoś mógłby polecić jakiś bufor do tego celu? Najlepiej w obudowie DIP.
  • #13 2946816
    mazdziez
    Poziom 11  
    Posty: 54
    Pomógł: 2
    Witam,

    No cóż po długich bojach udało mi się uruchomić układ z kartą mmc. Problem najwidoczniej leżał w niedopasowanych poziomach napięć karty i uC. Próbowałem dopasować wyjście karty do poziomu +5V przy użyciu bramki z serii 74HCTxxxx ale to nie pomogło.

    Układ ruszył gdy wszystko zasiliłem napięciem 3.3V z procesorem atmega32L. Więc nie polecam łączyć karty i procka przy różnych poziomach napięć.

    Pozdrawiam!
  • #14 2947869
    Piotrek_P
    Poziom 18  
    Posty: 253
    Pomógł: 24
    A do RS'a użyłeś MAX232 czy MAX3232. Czy przy zasilaniu 3,3V transmisja do PC działa Ci prawidłowo? Pytam bo miałem z tym problemy, z MAX232 w terminalu miałem krzaki.

    pozdrawiam
    Piotrek
  • #15 2947909
    migod
    Poziom 21  
    Posty: 462
    Pomógł: 29
    Ocena: 8
    u mnie to działa.. krzaki są, ale od 115kb/s.. wszystko co poniżej działa poprawnie.

    MAX232 (nie pamiętam który producent) jest zasilany z komórki SE (chyba 3.6V), a procesor ze stabilizatora LM317 (3.3V).
  • #16 2948164
    mazdziez
    Poziom 11  
    Posty: 54
    Pomógł: 2
    Piotrek_P napisał:
    A do RS'a użyłeś MAX232 czy MAX3232. Czy przy zasilaniu 3,3V transmisja do PC działa Ci prawidłowo? Pytam bo miałem z tym problemy, z MAX232 w terminalu miałem krzaki.


    Ja korzystam nadal z MAX232 ale zasilanego z 5V. Wszystko działa przy prędkości 9600.

Podsumowanie tematu

✨ Problem dotyczył zakłóceń w transmisji SPI między mikrokontrolerem ATmega32 a kartą MMC przy częstotliwości 125 kHz, zasilaniem 5V dla mikrokontrolera i 3.3V dla karty oraz użyciem około 20 cm tasiemki do połączenia. Układ nie działał poprawnie, a dotykanie linii MISO powodowało poprawę działania, co wskazywało na problem z poziomami napięć i zakłóceniami sygnału. Próby rozdzielenia żył taśmy, podciągania linii MISO do 5V oraz stosowania dzielników napięć nie rozwiązały problemu. Ostatecznie problemem okazało się niedopasowanie poziomów napięć między kartą MMC (3.3V) a mikrokontrolerem (5V). Rozwiązaniem było zasilenie całego układu, w tym ATmega32L, napięciem 3.3V, co zapewniło poprawną komunikację. W dyskusji poruszono także kwestie stosowania buforów poziomów logicznych, np. układu 74AHCT1G125, oraz problemów z interfejsem RS232 przy zasilaniu 3.3V, gdzie stosowano układy MAX232 lub MAX3232. Zalecano unikanie łączenia urządzeń o różnych poziomach napięć bez odpowiedniej konwersji sygnałów.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA