Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[ATMEGA16+ATMEGA8] [BASCOM] problem z komunikacją UART

Jaco18 22 Aug 2008 09:46 4781 5
IGE-XAO
  • #1
    Jaco18
    Level 26  
    Witam, połączyłem procesor atmega8 z atmega16 za pomocą sprzetowe go interfacu UART, bezposrednio nogi PD1 i PD0 odpowiednio zamieniajac koncowki RX do TX i TX do RX Dlugosc kabla 20 cm. Procesory zasilane sa z odzielnych stabilizatorow(5V +- 5%) ale mają wspólną masę. Oba pracują z zewnetrznym kwarcem 16Mhz, maja poprawnie ustawione Fusy.

    problem polega na tym ze albo wogole niema transmisji, albo jest ona z dziwnymi bledami zaleznie od konfiguracji:

    Code:
    $regfile = "m16def.dat"                                   
    
    $crystal = 16000000                                       
    $lib "glcdKS108.lib"
    Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 1 , Ce2 = 0 , Cd = 4 , Rd = 3 , Reset = 2 , Enable = 5

    Config Com1 = 19200 , Synchrone = 0 , Parity = Odd , Stopbits = 2 , Databits = 8 , Clockpol = 0
    $baud = 19200
    Baud = 19200
    '
    'Taki konfig portu com jest wgrany do wiekszego procka jak i do małego.
    '(w malym oczywiscie jest mega8.def i nie ma Graphlcd)
    '
    'dalej nastepuje wysyłanie cyferek przez UART za pomocą mega8:

    do
      Print "a"
      waitms 20
      print "b"
      waitms 20
    loop

    i odbiór w mega16:

    Do

    For I = 2 To 8
     For J = 1 To 100 Step 30
       B = Waitkey()
       Lcdat I , J , B
       Next J
     Next I
    Cls

    Loop


    Na wyswietlaczu otrzymuje kilka srednio powtarzajacych sie cyferek przeplatanych zerami, ktore nie odpowiadaja w zadnym stopniu temu co sie wyslalo. Probowalem rozne konfiguracje predkosci, parzystosci itp i nic !!

    Proszę o poradę w czym moze lezec problem, czy trzeba dawac jakis negator miedzy atmegami, moze jakos inaczej wysylac dane itp ?? Przesiedzialem okolo 8 godzin nad roznymi konfiguracjami i nie doszedlem do interesujacych wniosków :/


    Proszę umieszczać listingi programów w znacznikach "Code", oraz korzystać z przycisku "Pisownia". [c_p]
  • IGE-XAO
  • #2
    snow
    Level 30  
    Spróbuj użyć kwarca przystosowanego do pracy z uart'em. Szczegóły w dokumentacji procesora.
  • IGE-XAO
  • #3
    Jaco18
    Level 26  
    Muszą być urzyte kwarce 16 Mhz ponieważ procesory okresowo robią jeszcze inne rzeczy wymagajace duzej szybkosci ...
  • #4
    ZbeeGin
    Level 39  
    Skorzystaj z Inkey() i IsCharWaiting().
  • #5
    JmL(TM)
    Level 24  
    Tutaj masz Baud Rate kalkulator [http://www.wormfood.net/avrbaudcalc.php] i dla 16MHz predkosc 19200 jest jak najbardziej odpowiednia, a mozesz nawet ustawic na 38400 lub 76800 i tez bedzie smigac!

    Odbior danych najlepiej zrobic wykorzystujac wskazowki ZbeeGin'a:

    Code:
    Dim jakas_zmienna As Byte
    
    Dim Uart_buffer As Byte

    Enable Interrupts

    {...}

    Do
      jakas_zmienna = Inkey()
      Uart_buffer = Ischarwaiting()

      {...}

    Loop Until Uart_buffer = 0
  • #6
    Jaco18
    Level 26  
    Dziękuję za odpowiedź, dzisiaj będę testował czy jest ok. Jeżeli to możliwe, prosiłbym o jakiś większy sprawdzony kawałek programu co by mi ułatwiło sprawę.

    Mam jeszcze pytanie czy konfiguracja COM1 (sprzętowego dla M8 i M16) jest dobra czyli: prędkość 19200, transmisja niesynchroniczna, bit parzystości: nieparzysty, 2 bity stopu, 8 bitów danych i opcja której działania za bardzo nie rozumiem ClockPol = 0.


    PS: Załączam schemat aktualnego spięcia ze sobą proców, linie TX i RX dodatkowo podciągnąłem do + rezystorami dla lekkiego zwiększenia wydajności prądowej.

    Zastanawiam się, może przyczyną błędnego działania układu jest brak negatora miedzy TX i RX ?? W układzie MAX232 takie negatory są stosowane, tyle, że używając załóżmy 2 układów w linii transmisyjnej następuje podwójna negacja czyli tak jak by jej nie było ?!

    [ATMEGA16+ATMEGA8] [BASCOM] problem z komunikacją UART