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

Problem z RS232 Atmega32 - BASCOM AVR

knoppers 05 Lut 2006 19:16 2102 18
REKLAMA
  • #1 2264305
    knoppers
    Poziom 11  
    Posty: 8
    Witam,

    Mam powazny problem...polaczylem 89c2051 z MAX232 , podpialem do kompa i wszystko dzialalo ok. Potem ten sam uklad musialem przepiac na ATmega32 i juz nie ruszylo :/ Sam max232 podpiety jest dokladnie tak samo jak na dzialajacej wersji, parametry transmisji ustalone po obu stronach identycznie. Procesor dziala ok. Sam soft pisalem w BASCOM AVR i podejrzewam ze w tym tkwi problem. Czy procesory AVR potrzebuja jakiejs wczesniejszej inicjalizacji RS-a ??? Tak jak np. w przypadku korzystania z portow I/O. Jesli tak to jak powinna ona wygladac w przyadku BASCOM-a ? Help...
  • REKLAMA
  • #2 2264417
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    Konfigurujesz jakoś COM (CONFIG COM....)? Podajesz częstotliwość kwarcu ($CRYSTAL) ?
  • REKLAMA
  • REKLAMA
  • REKLAMA
  • #5 2264779
    knoppers
    Poziom 11  
    Posty: 8
    ustawilem wszystko z poziomu opcji w bascomie ,ale tez dla pewnosci probowalem z $baud i pozostalymi w kodzie ,lecz dalej lipa. Ostatnio dochodzenie wykazalo ze nie bardzo zmienia poziom stan napiec na wyjsciu max232 , mimo ze na wejsciu tego ukladu pewne roznice w trakcie pracy zauwarzyc mozna...
    acha ! jeszcze jeden dosc typowy za pewne problem zwiazany z predkoscia. Standardowo do AtMega32 przypiety jest kwarc 16mb ,jednak zarowno w symulatorze jak i w ogotwym ukladzie zaleznosci czasowe nie sa zachowane. np waitms 100 powoduje opoznienie na grubo ponad sekunde zamiast dokladnie wlasnie tyle. czy ja o czyms nie wiem ?

    Dodano po 1 [minuty]:

    "ze nie bardzo zmienia sie poziom napiec na wyjsciu max232" :)
  • #6 2264805
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    Na fusebitach ustawiamy źródło i częstotliwość zegara procesora. Trzeba uważać, że by nie przyblokować sobie np. ISP czy zegara. Jeśli nie ustawiłeś - chodzi ne wewnętrznym generatorze RC (bodajże 1 MHz, więc 16 x wolniej). Szczegóły w datasheet (www.atmel.com)

    Co do maxa i sygnałów, to pozostaje woltomierz i jakiś program testowy np wysyłający na przemian serię zer i 255.

    Trzeba uważać przy programowaniu, bo bit ustawiony to zero, a różne programy programujące stosują różne oznaczenia. Punktem odniesienia mogą być ustawienia fabryczne.

    Jeśli programujesz ISPem, jak se przyblokujesz procesor, to powędruje do szuflady w oczekiwaniu na programator równoległy, czyli na wieki wieków.
  • #7 2265049
    knoppers
    Poziom 11  
    Posty: 8
    no to teraz dorobilem.... pogmeralem przy fuse bitach i programator (isp) przestal rozpoznwac CPU :)

    Dodano po 17 [minuty]:

    mozna teraz jakos przywrocic CPU do stanu uzywalnosci ?
  • #8 2265298
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    A co napisano wyżej tłustym drukiem?
    Bo było to robić w programatorze Bascoma. Są tam opisy i trudno się pomylić zachowując odrobinę uwagi. Spróbuj podać na wejście kwarcu przebieg z zewnętrznego generatora. Lecz jak przestawiłeś SPIEN albo wyłączyłeś Reset to procka ożywi Ci tylko programator równoległy. W praktyce lepiej będzie kupić nowy uC.
  • #9 2265370
    knoppers
    Poziom 11  
    Posty: 8
    to wspaniale, tego mi bylo trzeba... zwlaszcza ze w srode mam oddac skoczony projekt... eh... odnosze wrazenie ze ustawilem cksel na 0000 ,to zle czy bardzo ? sprobuje z generatorem. mam sprawnego 89c2051, da rade z niego wyciasnac potrzeby sygnal ?
  • #10 2265383
    crazy_phisic
    VIP Zasłużony dla elektroda
    Posty: 2244
    Pomógł: 278
    Ocena: 130
    marek_Łódź napisał:
    Na fusebitach ustawiamy źródło i częstotliwość zegara procesora. Trzeba uważać, że by nie przyblokować sobie np. ISP czy zegara. Jeśli nie ustawiłeś - chodzi ne wewnętrznym generatorze RC (bodajże 1 MHz, więc 16 x wolniej). Szczegóły w datasheet (www.atmel.com)


    Mozna pisać i pisać ... stoi jak byk :
    • The SPIEN Fuse is not accessible in SPI Serial Programming mode.

    Z resetem też nie ma problemu bo pełni on tylko role resetu ;)

    Został tylko oscylator kwarcowy, a raczej jego przelaczenia na zewnetrzny sygnal zegarowy.

    Pozdrawiam
  • #11 2266849
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    Jak 0000 to zewnętrzny generator powinien pomóc. Przestaw "fusy" na 1111. Jeśli możesz użyj Bascoma. Tam nie jest tak łatwo o pomyłkę.
    Co do resetu to miałem na myśli M8 (ich najczęściej używam).
  • #12 2267191
    knoppers
    Poziom 11  
    Posty: 8
    Widz w tym ze nie jestem w posiadaniu takiego generatora :(
  • #13 2267484
    crazy_phisic
    VIP Zasłużony dla elektroda
    Posty: 2244
    Pomógł: 278
    Ocena: 130
    przeciez mozesz go sobie napisac na '51 ;) albo pobrac sygnał zegarowy z jego oscylatora ;) rozwiazan jest pelno... do boju ;)
    Pozdrawiam
  • #14 2267570
    Mirek D
    Poziom 15  
    Posty: 120
    Pomógł: 8
    Ocena: 12
    Polecam BASCOM College P. Raabe (na stronach Elektroniki Praktycznej.
    Najprawdopodobniej jest problem przy podziale częstotliwości używanej przy komunikacji przez RS-232, nie wszystkie prędkości chcą chodzić. W podanych powyżej źródłach jet dokładny opis jak to sprawdzić i jak dobrać odpowiednią prędkość.
    życzę powodzenia
  • #15 2268126
    knoppers
    Poziom 11  
    Posty: 8
    Kurcze, kiepska sprawa. Nie chcialbym uchodzic za szczegolnie malo inteligetnego ale przeszukalem zasoby edw ,bascom callague, helpa do bascoma i slowa o generowaniu sygnalu via '51 nie znalazlem :(
  • #16 2268217
    crazy_phisic
    VIP Zasłużony dla elektroda
    Posty: 2244
    Pomógł: 278
    Ocena: 130
    hheheh tu nie ma zadnej filozofii ;) ustawiasz pin np X na 1 czekasz "chwilke" i ustawiasz spowrotem na 0 zowu czekasz momencik i tak w kolko... to takie miganie diodą, ale z większą częstotliwością.
  • #17 2268526
    knoppers
    Poziom 11  
    Posty: 8
    Tak wlasnie podejrzewalem ;) Zastanawia mnie tylko kwestia tej 'chwilki' a raczej jak ja zmierzyc bez odpowiedniego srzetu. tak sobie mysle ze moze jakby policzyc ilosc cykli zegarowych potrzebnych na jeden obieg petli w ktorej cala rzecz sie dzieje to bylby to jakis wyznacznik. Tylko czy 89c2051, z zegarem 11mhz jest wstanie dac oczekiwany rezultat... ?
  • #18 2268660
    crazy_phisic
    VIP Zasłużony dla elektroda
    Posty: 2244
    Pomógł: 278
    Ocena: 130
    czestotliwosc nie jest krytyczna i zawiera sie bodajrze w granicach od 100kHz w zwyż... wiec wystarczy że zrobisz dowolny układ na '51 podepniesz kwarc na 1MHz i pociagniesz z tego układu (a dokładniej z wyprowadzenia XTAL2) sygnał zegarowy i podlaczysz do Megi (w XTAL1). Pozdrawiam
  • #19 2280795
    Mirek D
    Poziom 15  
    Posty: 120
    Pomógł: 8
    Ocena: 12
    Po skompilowaniu progrymu należy włączyć OPTION/ENVIRONMENT/PROGRAM AFTER COMPILE, następnie klikamy przycisk PRGRAM i wybieramy opcię SHOW RESULTS.
    W wyświetlonych informacjach szukamy BAUD error, jeśli jest powyżej 1% to jesteśmy w domu-problem z doborem szybkości. Zdażają się błędy nawet ponad 20 %.
    Polecam przeczytanie artykułu ELEKTRONIKA PLUS 1(2) 2004 str. 102.
    Niestety nie załączam skanu bo prawa autorskie raczej na to nie pożwalają.
    pozdro

Podsumowanie tematu

✨ Problem dotyczy migracji układu z mikrokontrolera 89c2051 do ATmega32 w kontekście komunikacji RS232 z użyciem MAX232 oraz programowania w BASCOM AVR. Pomimo identycznego podłączenia MAX232 i ustawień transmisji, komunikacja nie działa poprawnie na ATmega32. Podejrzewa się brak odpowiedniej inicjalizacji portu szeregowego w BASCOM AVR. Dyskusja wskazuje na konieczność poprawnego ustawienia fuse bitów, zwłaszcza źródła i częstotliwości zegara procesora (np. kwarc 16 MHz), gdyż nieprawidłowe ustawienia mogą powodować błędy w czasie i prędkości transmisji, co objawia się m.in. nieprawidłowym działaniem funkcji waitms. Problemy z programatorem ISP po zmianie fuse bitów sugerują zablokowanie mikrokontrolera, co wymaga użycia programatora równoległego lub zewnętrznego generatora sygnału zegarowego do przywrócenia funkcjonalności. Zalecane jest sprawdzenie błędu BAUD po kompilacji w BASCOM oraz dostosowanie prędkości transmisji do rzeczywistej częstotliwości zegara. Proponowane rozwiązania obejmują generowanie sygnału zegarowego z innego układu (np. 89c2051) lub użycie zewnętrznego generatora, a także dokładne ustawienie fuse bitów i konfiguracji COM w BASCOM. Wskazano również na dostępne materiały edukacyjne, takie jak BASCOM College oraz artykuły w Elektronice Praktycznej, które omawiają problematykę podziału częstotliwości i doboru prędkości transmisji RS232.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA