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

[ATmega8][C] FT232 dziwna komunikacja

Baz1988 19 Paź 2011 21:01 2167 10
  • #1 10044807
    Baz1988
    Poziom 10  
    Witam,
    Zbudowałem układ w oparciu o mikrokontroler ATmega8 oraz układ scalony FT232. Oba układy są sprawne i działają poprawnie. Niestety jak się okazało prawidłowy przesył danych z mikrokontrolera do terminalu w komputerze jest możliwy dla wbudowanego rezonatora o częstotliwości pracy 1MHz. Chciałem dołączyć zewnętrzny rezonator 16MHz i pomimo prawidłowej konfiguracji oraz przeliczeniu wszystkich wartości niezbędnych do komunikacji poprzez RS232 w terminalu dostaję krzaki, ponowna zmiana na wewnętrzny rezonator i powrót do poprzednich wartości niweluje ten problem i układ nadaje prawidłowo. Niestety zależy mi na tym, żeby układ pracował na zewnętrznym rezonatorze i nie wiem co robić. Rezonator jest maksymalnie blisko mikrokontrolera. Dobrałem kondensatory 22pF. Ilość bitów w terminalu się zgadza niestety są one bezużyteczne.
    Może ktoś spotkał się już z takim problemem i wie jak go rozwiązać?
  • #2 10044826
    Konto nie istnieje
    Konto nie istnieje  
  • #3 10044903
    Baz1988
    Poziom 10  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Powyżej zamieszczam Kod programu. Niczym się on nie różni dla 1MHz i dla 16MHz. Jedyna różnica to zmiana F_CPU z 1MHz na 16MHz. Schematu aktualnie nie posiadam bo wszystko podłączyłem z notą aplikacyjną układu FT232 i jak już wcześniej wspomniałem układ działa dla 1MHz a dla 16MHz wysyła śmieci. W programie mam także zadeklarowaną funkcje odbiór ale obecnie jej nie używam, aczkolwiek ona również działa w ten sam sposób co nadawanie.
  • #4 10044975
    mirekk36
    Poziom 42  
    Tak problem można łatwo rozwiązać, wystarczy przejrzeć tabelki na ostatniej stronie rozdziału USART w nocie PDF dowolnego procesora AVR i zapoznać się bliżej z taktowaniem różnymi częstotliwościami a zależnością procentu błędów.

    Pomocne może być rzucenie okiem na procenty błędów równe ZERO dla takich kwarców jak np 11,0592MHz
  • #5 10045210
    Baz1988
    Poziom 10  
    Przeglądałem te tabelki i dla mojej prędkości transmisji wynika ze mam 0,2% błędu. Wydaje mi się, że to nie jest dużo skoro dopuszczalny błąd może wynosić 2%, ale sprawdzę to na innym rezonatorze, dziękuję za rade.
  • #6 10063900
    pawel-jwe
    Poziom 30  
    Zmieniałeś ustawienia w Fuse Bit'ach? Nie mam tu na myśli F_CPU - to jest jedynie informacja dla kompilatora. Żeby sam procesor przełączył się z wewnętrznego RC 1MHz na zewnętrzny kwarc 16MHz trzeba przestawić wspomniane Fuse Bit'y.
    Jakich programów używasz (pisanie, kompilacja, wgrywanie)?
  • #7 10065902
    Baz1988
    Poziom 10  
    Oczywiście, że przestawiłem Fuse Bit'y co do programów:

    Pisanie kodu: AVRvStudio
    Kompilacja: WinAVR
    Wgrywanie: AVR Burn-O-Mat

    Jutro dostanę rezonatory o zerowym procencie błędu i sprawdzę czy w tym był problem, przy rezonatorze 16MHz każda konfiguracja komunikacji zawodzi.
  • #8 10066221
    pawel-jwe
    Poziom 30  
    W kodzie nie podajesz wartości "F_CPU" więc pobiera ją z ustawień kompilatora, w AVRStudio to ustawisz(Project->Configuration Options->Frequency).
    Ewentualnie kiedyś spotkałem się z przypadkiem, że w dołączonej bibliotece była zadeklarowana wartość F_CPU i jeśli jest inna to też będzie się sypać.
  • #9 10072377
    Baz1988
    Poziom 10  
    Dziękuję za rady. Wartość F_CPU w AVR Studio oczywiście ustawiłem, okazało się dla rezonatora 16MHz występuje 0,2% błędu jak pisałem wcześniej. Wartość ta była zdecydowanie za duża dla mojego układu, dlatego otrzymywałem błędy, zmiana rezonatora na 11,059MHz rozwiązała ten problem.
  • #10 10072413
    mirekk36
    Poziom 42  
    Baz1988 napisał:
    Dziękuję za rady. Wartość F_CPU w AVR Studio oczywiście ustawiłem, okazało się dla rezonatora 16MHz występuje 0,2% błędu jak pisałem wcześniej. Wartość ta była zdecydowanie za duża dla mojego układu, dlatego otrzymywałem błędy, zmiana rezonatora na 11,059MHz rozwiązała ten problem.


    Wartość 0,2% jest pomijalna i to nie mogło być powodem twoich niepowodzeń. Musiałeś robić coś innego źle i szkoda, że nie próbujesz dojść przyczyny tylko omijasz problem. Bo to wcześniej czy później się zemści.

    Problemem mogą być te prędkości dla kwarca 16MHz gdzie procent błędu przekracza 2%

    spójrz sobie na tą tabelkę, źle mogły działać ci takie prędkości jak:

    57,6
    115200
    230,4

    w pozostałych przypadkach musi być ok - no chyba że sam kwarc trafił ci się jakiś uszkodzony albo dobrałeś jakieś totalnie złe kondensatory.
  • #11 10072688
    Baz1988
    Poziom 10  
    Też mi się wydało to dziwne i wiem ze 0,2% jest znikome ale w moim przypadku miało to znaczenie. Kondensatory dobrałem 22pF więc powinny być ok. Procedura za każdym razem była taka sama i na rezonatorze z zerową stopą błędu działa ale domyślam się ze to wina rezonatora bo na wewnętrznym 1MHz i stopie błędu 0,2% działało bez problemu.

    Udało się rozwiązać ten problem. Okazało się, że nie było dobrego połączenia pomiędzy mikrokontrolerem a zasilaniem przez co układ nie był zasilany z 5V a z 3V poprawiłem wszystkie połączenia lutując jeszcze raz i teraz wszystko działa nawet na 16MHz. Dziękuję wszystkim za pomoc. Temat uważam za zamknięty.
REKLAMA