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

[Atmega8][ASM]USART - błędy przy transmisji do PC-ta

matt.b 04 Gru 2010 20:53 2426 12
REKLAMA
  • #1 8826155
    matt.b
    Poziom 11  
    Napisałem taki prosty programik , atmegE mam połączoną z komputerem (max232, adapter bluetooth, ) , na komputerze jak odczytuje port to mi wyskakują jakieś krzaczki ,
    używam jakiś terminal , ustawiam boud rate co może być nie tak ?
    
    .equ RS=51 //4MHz ,4800
    .CSEG
    .include "m8def.inc"
    .def zero=r2
    .def tmp1=r16
    .def Dana=r19
    
    ;////////////////////////////////////////////////////
    out UCSRA,zero
    ldi tmp1,(1<<RXEN)|(1<<TXEN)
    out UCSRB,tmp1
    ldi tmp1,(1<<URSEL)|(3<<UCSZ0)
    out UCSRC,tmp1
    ldi tmp1,RS
    out UBRRH,zero
    out UBRRL,tmp1
    Loop:
    	ldi Dana,'f'
    	Send:
    	sbis UCSRA,UDRE
    	rjmp Send
    	out UDR,Dana
    
    rjmp Loop
  • REKLAMA
  • #2 8826245
    Konto nie istnieje
    Poziom 1  
  • #3 8826308
    matt.b
    Poziom 11  
    zewnętrzny kwarc
  • #4 8826677
    Andrzej__S
    Poziom 28  
    Definiujesz .def zero=r2, ale nie inicjujesz wartości tego rejestru. Po włączeniu procesora rejestr zawiera wartość przypadkową. Aby mieć pewność, że jego wartość jest równa zero musisz w kodzie dopisać (przed pierwszym użyciem tego rejestru) instrukcję clr zero.
  • REKLAMA
  • #5 8827036
    matt.b
    Poziom 11  
    Niestety nic to nie pomogło .
  • #6 8827744
    Andrzej__S
    Poziom 28  
    matt.b napisał:

    Niestety nic to nie pomogło .

    Niemniej inicjowanie wartości rejestrów i SRAM jest niezbędne.

    Więcej błędów nie zauważyłem, więc raczej to nie wina programu. Sprawdź (albo pokaż) jeszcze ustawienia fusebit'ów, czy aby na pewno masz ustawione źródło zegara na zewnętrzny oscylator. Nieprawidłowo ustawiony zegar to najbardziej prawdopodobne źródło problemów. Druga sprawa to ustawienia terminala. Nie napisałeś jakiego używasz, ale musisz ustawić nie tylko "baud rate". Należy też ustawić 8 bit, bez bitu parzystości, 1 bit stopu, bez sterowania przepływem.
    No i może przydałby się jakiś schemat, jak to masz połączone...
  • REKLAMA
  • #7 8828707
    matt.b
    Poziom 11  
    Układ raczej działa poprawnie , zwierając wyjscia z MAX232 do procka otrzymuje echo, używam jakiegoś terminala znalezionego w necie ustawiam wszystko baud rate=4800, 8bit itp. Może macie jakiś terminal lepszy to bym sprawdził czy to wina jego?
  • #8 8829449
    Andrzej__S
    Poziom 28  
    Cytat:

    ...zwierając wyjscia z MAX232 do procka otrzymuje echo...

    Nie bardzo rozumiem co zwierasz i gdzie otrzymujesz to echo (w terminalu?). Zresztą to świadczy może o prawidłowości połączeń, ale echo otrzymasz nawet wtedy, gdy prędkości transmisji i/lub ustawienia w procesorze i w PC będą się różnić. Taka sytuacja może mieć miejsce np. jeżeli nieprawidłowo ustawiłeś fusebit'y i procesor jest w rzeczywistości taktowany inną częstotliwością niż oczekujesz, więc jeśli to nie tajemnica, to podaj może Twoje ustawienia fusebit'ów.

    A tak właściwie: czy ten program wygląda dokładnie tak, jak go przedstawiłeś, czy masz tam jeszcze jakieś inne procedury? Nie ustawiłeś wskaźnika stosu (SP), a akurat w ATmega8 jest to konieczne. Jeżeli wywołujesz jakieś procedury (np. instrukcją 'rcall') lub korzystasz z przerwań, to już w ogóle nie można tego pominąć.

    Co do terminali, to ja używam np. Bray Terminal lub Hercules.
  • REKLAMA
  • #9 8833091
    matt.b
    Poziom 11  
    Fuse-bity i ustawienia terminala:
    [Atmega8][ASM]USART - błędy przy transmisji do PC-ta
    [Atmega8][ASM]USART - błędy przy transmisji do PC-ta
  • #10 8834110
    Andrzej__S
    Poziom 28  
    Teoretycznie jest prawie dobrze, chociaż zgodnie z tabelką na stronie 27 datasheet to przy CKOPT=1 (unprogramed) powinieniś mieć (dla zegara 4MHz) CKSEL3..1=111, więc chyba należałoby chyba wybrać 'Ext. Crystal/Resonator High Freq. ; Start-up Time: 16K CK + 64ms', bo u Ciebie jest CKSEL3..1=110. Ewentualnie spróbuj zaznaczyć CKOPT. Nie wiem, czy któraś z tych operacji pomoże, ale nie zaszkodzi spróbować.

    Proponowałbym jeszcze próbnie podłączyć MAX232 bezpośrednio do komputera, żeby stwierdzić czy problem nie leży po stronie bluetooth. Napisz jaki dokładnie masz ten adapter bluetooth.
  • #11 8834409
    BoskiDialer
    Poziom 34  
    U mnie dość często wysyłając dane ciurkiem odbiornik się gubi i pojawiają się krzaki. W takim przypadku używam dwóch bitów stopu oraz (jeśli protokół na to pozwala) wciskam w niektóre miejsca bajt o wartości 0xFF (który jako jedyny umożliwia odzyskanie synchronizacji nie wliczając oczywiście ciszy na łączu).
  • #13 8847482
    Andrzej__S
    Poziom 28  
    matt.b napisał:

    A co masz od strony PC? Taki sam adapter, czy może jakiś USB bluetooth dongle?

    OK. Skonfigurowałeś procesor na 4800bps i komputer na 4800bps. A jak skonfigurowałeś adapter bluetooth? Zauważyłem, że jego specyfikacja nie dopuszcza pracy z prędkością mniejszą od 9600bps. Jesteś pewien, że masz to wszystko dobrze skonfigurowane? Tutaj na wszelki wypadek masz dokładny opis konfiguracji adaptera (trochę inny symbol - BT-0240 - ale myślę, że pasuje również do Twojego modelu).

    Próbowałeś wykonać połączenie kablem bezpośrednio do komputera? Dzięki temu upewniłbyś się, czy wina leży po stronie Twojego programu, czy to sprawa konfiguracji adaptera bluetooth.
REKLAMA