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

Atmega 128: Drugi UART w Bascom AVR - problem z prędkością transmisji 115200 baud

KJ 12 Wrz 2005 01:20 5071 4
REKLAMA
  • #1 1810929
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    Witam. Skończyły mi się pomysły nie wiem już jak rozmawiać do tego uarta :| Przemęczyłem wszystko co jest w help-ie i nie działa jak powinno tj. na kompie odbieram krzaki zamiast tego co wysyłam tak jakby nie zgadzała się prędkość transmisji (pierwszy UART działa dobrze) na forum nic nie znalazłem na ten temat :cry: kwarc mam 14.7 potrzebuję aby oba uarty śmigały na 115200 baud. Przy testach powstało między innymi coś takiego.

    $regfile = "m128def.dat"
    $crystal = 14745600
    
    $baud1 = 115200
    
    Open "COM2:" For Binary As #1
    
    Do
    Print #1 , "Hello"
    Waitms 200
    Loop
    End
    
  • REKLAMA
  • Pomocny post
    #2 1813165
    hunterhouse
    Poziom 26  
    Posty: 893
    Pomógł: 84
    Ocena: 3
    kiedyś też się męczyłem i doszedłem do tego

    $baud = 9600
    Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    Config Serialin = Buffered , Size = 64
    Config Serialout = Buffered , Size = 64
    Print "COM1 INT : DONE"
    
    $baud1 = 9600
    Config Com2 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    Config Serialin1 = Buffered , Size = 64
    Config Serialout1 = Buffered , Size = 64
    Enable Interrupts
    Open "Com2:" For Binary As #1
    Print #1 , "COM2 INT : DONE"
    Close #1

    niewiem dokładnie dlaczego ale to działa

    wiem też że configuracja Buffered jest zbędna i działa bez tego
    jest to przydatne przy dużych porcjach danych
  • REKLAMA
  • #3 1813352
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    Moje porcje danych będą zawierały 241 bajtów więc pokombinuję z tym buforem czy można go zwiększać ? Do ilu ? Zastanawiam,się czy nie napisać obsługi uartów w ASM ale nie wiem czy sobie poradzę z asemblerem miałem styczność tylko w szkole i do tego tylko na 51ki a AVR to jak wiadomo całkiem inna architektura.
  • REKLAMA
  • #4 1816047
    hunterhouse
    Poziom 26  
    Posty: 893
    Pomógł: 84
    Ocena: 3
    oczywiście można go zwiększyć ale trzeba pamiętać ze dla mojego programu potrzeba 4*50=200 bajtów wolnego ramu.
    można pominąć buforowanie ale trzeba zapewnić na tyle szybki przetważanie danych ażeby procesor musiał czekac na dane a nie na odwrót.

    napisanie tego w asembleże też jest jakimś rozwiązaniem ale to troche robote jak nie masz wprawy.

    proponuje spróbowac w bascomie i jak nie wyjdzie to zająć się asemblerem. choć osobiście sądze że w pisanie tej procedury w asembleże nie będzie miała dużo lepszych osiągów od bascoma.
  • #5 1816252
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    Buforowanie rozwiązało w zasadzie wszystkie problemy :) wyrabia się zadziwiająco dobrze tyle że buforuję tylko uart 2 pierwszego nie muszę nie wiem dlaczego działa poprawnie bez buforowania. Zrobiłem eksperyment w którym w przerwaniu pierwszego uarta wysyłane jest drugim to co przyszło :D i o dziwo działa:D
REKLAMA