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

[atmega32] predkosci rs232

Vampir8 13 Sie 2008 20:55 2855 18
REKLAMA
  • #1 5436490
    Vampir8
    Poziom 16  
    Witam.

    Mam taki problem, napisalem prosty programik ktory wysyla to co odbierze, inicjuje port na predkosci 9600bps, niestety przy tej predkosci otrzymuje krzaki, a jezeli na pc uruchomie port na 1200bps a w avr 9600bps to normalnie odbiore wszystko. Czy to moze byc przez to ze nie uzywam zew kwarcu?? jaka predkosc da sie wycisnac przy 8mhz i nieduzych bledach??

    Pozdrawiam,
    Vampir8
  • REKLAMA
  • #2 5436505
    dawid512
    Poziom 32  
    U mnie przy wew. generatorze na 8MHz i predkosci transmisji na kompie i w uc 9600 dziala pieknie. Ustaw taka sama predkosc na kompie jak i uc.
  • #3 5436521
    krzychS
    Poziom 29  
    Pamiętaj że oprócz ustawienia prędkości transmisji trzeba ustawić: parzystość, bity stopu, ilość bitów danych :)
  • #4 5436565
    Vampir8
    Poziom 16  
    mam takie ustawienia
    PC
    baud: 9600
    stop bits: one stop bit
    parity: none
    databits: eight

    AVR
    baud: 9600
    stop bits: one stop bit
    parity: none
    databits: eight

    i na tych ustawieniasz mam krzaki a najczesciej "€"
    a przy ustawieniach

    PC
    baud: 1200
    stop bits: one stop bit
    parity: none
    databits: eight

    AVR
    baud: 9600
    stop bits: one stop bit
    parity: none
    databits: eight

    komunikacja jest ok, ale predkosc za mala jak na moje potrzeby, ile mega wycianie?? czy to jakos sie oblicza??
  • REKLAMA
  • #5 5436595
    markosik20
    Poziom 33  
    Na pewno masz ustawione 8Mhz w Atmedze? :wink:.
    Przy 8Mhz można wyciągnać 38400b ale trzeba czasami ręcznie "dokalibrować" oscylator wewnetrzny.
    Od strony 163 dokumentacji masz rozpisaną tabelę z przykładowymi nastawmi.
  • #6 5436616
    Vampir8
    Poziom 16  
    przy kazdym wgrywaniu programu mam ustawione fusebity na 8mhz wew, uzywam avrdude z lini komend plikiem wsadowym
    avrdude.exe -p m32 -c stk500v2 -P avrdoper -U flash:w:d:\avr\avrdude\cpm.hex:i -U hfuse:w:0xD9:m -U lfuse:w:0xe1:m
  • #7 5436634
    krzychS
    Poziom 29  
    Jest to możliwe że masz niestabilny zegar. Zastosuj zewnętrzny kwarc.
  • #8 5436706
    markosik20
    Poziom 33  
    krzychS napisał:
    Jest to możliwe że masz niestabilny zegar. Zastosuj zewnętrzny kwarc.


    Ale nie aż tyle (8x) :wink:.
    Ja obstawiam że RC jest ustawione na 1Mhz.
  • #9 5437056
    crazy_phisic
    VIP Zasłużony dla elektroda
    Vampir8 napisał:
    przy kazdym wgrywaniu programu mam ustawione fusebity na 8mhz wew, uzywam avrdude z lini komend plikiem wsadowym
    avrdude.exe -p m32 -c stk500v2 -P avrdoper -U flash:w:d:\avr\avrdude\cpm.hex:i -U hfuse:w:0xD9:m -U lfuse:w:0xe1:m


    A sprawdziłeś co oznacza 0xe1 dla lfuse? Jeśli nie, patrz post wyżej :)
  • #10 5438112
    markosik20
    Poziom 33  
    Właśnie miałem podobne zjawisko w Atmega162. Okazało się że preskaler zegara CLKPR jest fabrycznie ustawiony na max (dzielił przez 8 ).
    A i tak jakieś dziwne się cuda dzieją, Atmega na zapytanie z 9600 odpowiada prawidłowo....ale już z jakąś dziwną prędkością :(. No nic szukam dalej.
  • #11 5438166
    maly_elektronik
    Poziom 23  
    A próbowałes użyć bitów kalibracji wewnętrzengo oscylatora :?: To też może być przyczyną twojego problemu :idea: albo masz złe kondensatorki na układzie max232(przypuszczam że użyłeś czegoś takiego)
  • REKLAMA
  • #12 5438270
    markosik20
    Poziom 33  
    Ja lecę na kwarcu 11,059Mhz :wink:. Trzeba było przemyć izopropanolem płytkę konwertera USB<->RS232 (pewnie jakieś syfy się dostały). Oba UARTY już pięknie smigają :). Oba na 115200b.
  • REKLAMA
  • #13 5438492
    Vampir8
    Poziom 16  
    crazy_phisic napisał:

    A sprawdziłeś co oznacza 0xe1 dla lfuse? Jeśli nie, patrz post wyżej :)


    w avrdude wybieram sobie z listy jaka predkosc ma byc i jaki zegar wew czy zew i to mi generuje komendy.

    maly_elektronik napisał:

    A próbowałes użyć bitów kalibracji wewnętrzengo oscylatora Question To też może być przyczyną twojego problemu Idea albo masz złe kondensatorki na układzie max232(przypuszczam że użyłeś czegoś takiego)


    jak zrobic kalibracje??

    nie uzywam max232, uzywam przejsciowki pod USB na ukladzie FT232BL kabel laczacy oba uklady ma najwyzej 10cm i jest ekranowany, wogole dziwne rzeczy sie dzieja bo jak odlacze mase to wiecej krzakow przesyla ;)

    mysle ze moze to byc tez przez to bo chyba jak cos robilem chyba zetknelo mi sie 12V do Vcc ;/ bo nawet programuje sie wolniej wczesniej 2000b to jakeis 5s a tera prawie 25s, ale odziwo dziala wszytko tylko wolniej??
  • #14 5438842
    maly_elektronik
    Poziom 23  
    No ale myśle że wiesz jak się instaluje sterowniki do ft232 :?: :D I że wiesz że ww uklad pracuje na napięciu 3V :idea:
  • #15 5439011
    Vampir8
    Poziom 16  
    maly_elektronik napisał:
    No ale myśle że wiesz jak się instaluje sterowniki do ft232 :?: :D I że wiesz że ww uklad pracuje na napięciu 3V :idea:

    Uklad zasilany z USB cos takiego [atmega32] predkosci rs232
    a mega z osobnego zasilacza

    ze sterownikami nie ma problemu, przez virtual com driver lub d2xx po zlaczeniu lini tx i rx w przejsciowce wszystko idzie dobrze;
  • Pomocny post
    #16 5439035
    markosik20
    Poziom 33  
    Vampir8 napisał:

    ...a jezeli na pc uruchomie port na 1200bps a w avr 9600bps to normalnie odbiore wszystko.


    Problem sprzętowy to raczej nie będzie.
    Odpal któryś z timerów żeby migał Ci diodą co 1sekudnę i sprawdź czy RC rzeczywiście ma te 8MHz :wink:.
  • #17 5439069
    Vampir8
    Poziom 16  
    program led_blinking;
    begin
      DDRB:=$FF;
      DDRC:=$FF;
      DDRD:=$FF;
      while true do
        begin
          PORTB:=$FF;
          PORTC:=$FF;
          PORTD:=$FF;
          delay_ms(1000);
          PORTB:=$00;
          PORTC:=$00;
          PORTD:=$00;
          delay_ms(1000);
        end;
    end.


    hmm 1000ms = 8 sek ;)
  • Pomocny post
    #18 5441815
    crazy_phisic
    VIP Zasłużony dla elektroda
    :arrow: Vampir8, zacytuję sam siebie:
    "A sprawdziłeś co oznacza 0xe1 dla lfuse?"
  • #19 5441957
    Vampir8
    Poziom 16  
    crazy_phisic napisał:
    :arrow: Vampir8, zacytuję sam siebie:
    "A sprawdziłeś co oznacza 0xe1 dla lfuse?"


    Uzywam GUI dla avrdude i tam sobie wybieram czy zegar wew czy zew i jaka predkosci, nigdy z tym nie mialem problemu zawsze sie ustawioalo tak jak chcialem, ustawinie 0xe1 dla lfuse onacza prace zegara wew na 1mhz stad taki przypadek.

    Myslalem ze to przyczyna hardware ale jak widac nie ;)

    A co do predkosci to udalo mi sie uzyskac na poziomie 19200bps przy 34800bps odbieram tylko pusty znak po wyslaniu ciagu ;/

    Dzięki wszystkim za zainteresowanie,

    Pozdrawiam,
    Vampir8
REKLAMA