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] [atmega8][c][atmelstudio6] - USART nie wysyła danych, kod bez błędów kompilacji

kolo1500 14 Paź 2014 12:51 963 11
REKLAMA
  • #1 14040359
    kolo1500
    Poziom 10  
    Posty: 50
    witam,
    napisałem taki oto program, który ma za zadanie zaznajomienie mnie z usartem i późniejsze wykorzystanie. Większość skopiowałem z noty, kompilator nie wykrywa błędów, program sprawdzał mi też kolega który jest lepszy w programowaniu ode mnie. Problem polega na tym, że atmega nie wysyła danych (tego 0) ani nic innego. Czy kod jest na pewno całkowicie dobry ??

    pozdrawiam

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 14040466
    pietia86
    Poziom 26  
    Posty: 1126
    Pomógł: 69
    Ocena: 91
    Nie użyłeś nigdzie funkcji wysyłającej po usarcie - USART_Transmit
  • #3 14042144
    kolo1500
    Poziom 10  
    Posty: 50
    ok, jako, że nie wiedziałem gdzie dopisać usart transmit, skorzystałem dla sprawdzenia z gotowego kodu, efektem tego było wysyłanie znaczków, które trudno nawet jest nazwać , może mi ktoś wytłumaczyć dlaczego tak się dzieje ??

    źródło kodu: http://forbot.pl/blog/port-szeregowy-interfejs-usart-2-id1218

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #4 14042203
    mi14chal
    Poziom 28  
    Posty: 1021
    Pomógł: 112
    Ocena: 23
    A jak myślisz co robi ta instrukcja: UDR = PINB; ?
  • #5 14042375
    kolo1500
    Poziom 10  
    Posty: 50
    wysyła wartości z wszystkich pinów b czyli tak naprawdę z żadnego(jeśli dobrze myśle) masz rację wcześniej nie zwróciłem na to uwagi, wracając do tego pierwszego kodu, który wrzuciłem co muszę dopisać żeby działał, szukałem po różnych forach, postach, stronach ale nie moge tego znaleźć, zrozumieć

    edit: zmieniłem na pinb1 i dalej to samo więc pewnie się myliłem
  • #6 14042435
    piotrva
    VIP Zasłużony dla elektroda
    Posty: 6409
    Pomógł: 625
    Ocena: 735
    Wpisz do testów UDR = 65;
  • REKLAMA
  • #7 14042851
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    ... bo jeśli byś wpisał:
    UDR = 'A';
    - to zachodziłaby groźba, że ktoś zrozumie, co ma robić ten program. ;)
  • #8 14043504
    piotrva
    VIP Zasłużony dla elektroda
    Posty: 6409
    Pomógł: 625
    Ocena: 735
    :D Oczywiście - programy muszą być niezrozumiałe ;)
  • #9 14043679
    kolo1500
    Poziom 10  
    Posty: 50
    Dalej to samo po wpisaniu 65
    Jak wpisze 99 lub 'a' to co jakiś czas są kwadraty i dalej lecą te pola
    Załączniki:
    • [atmega8] [atmega8][c][atmelstudio6] - USART nie wysyła danych, kod bez błędów kompilacji 20141015_160214.jpg (2.42 MB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #10 14043778
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Zła szybkość transmisji - przy oscylatorze 1 MHz możesz transmitować na 4800 - przy 9600 i błędnym wzorze na podzielnik UBRR masz 9% błędu, a przy poprawnym miałbyś 7% (powinno być max 2.5%, żeby była pewna transmisja). Wyłącz podział częstotliwości - przy 8 MHz możesz transmitować do 38400.
  • #11 14044088
    piotrva
    VIP Zasłużony dla elektroda
    Posty: 6409
    Pomógł: 625
    Ocena: 735
    Poza tym jak terminal polecam Br@y terminal lub RealTerm
  • #12 14044292
    kolo1500
    Poziom 10  
    Posty: 50
    BlueDraco dzięki, podkręciłem taktowanie wewnętrzne na 8MHz i wysyła 'A'

    w zamyśle mam wysyłać maksymalnie cztery znaki, które będą zmienną max liczna to 1500 więc coś jeszcze będzie trzeba pozmieniać.

    piotrva dziękuje skorzystam z rady co do terminala

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik napotkał problem z wysyłaniem danych przez USART w mikrokontrolerze ATmega8, mimo braku błędów kompilacji. W odpowiedziach zasugerowano, że brakowało funkcji do wysyłania danych (USART_Transmit) oraz że użycie niewłaściwej prędkości transmisji mogło powodować błędy w odbiorze. Po zwiększeniu częstotliwości oscylatora do 8 MHz, użytkownik był w stanie wysłać znak 'A'. Zasugerowano również użycie terminali takich jak Br@y terminal lub RealTerm do testowania komunikacji.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA