Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Komunikacja RS232 Atmega - brak odbioru.

nowakus 20 Cze 2015 00:25 564 5
  • #1 20 Cze 2015 00:25
    nowakus
    Poziom 19  

    Witam,
    Mam problem. Próbuję zawiązać komunikację PC z Atmegą 8. Napisałem kod w C w Atmel Studio. Nadawanie zmiennej po przyciśnieciu przycisku działa, jednak jak wysyłam literę z terminala do procesora on nie reaguje. Program ma działać tak: jak naduszę przycisk wysyła do terminala t, jak wyślę jakiś znak z terminala, ma odesłać f oraz zapisać wysłany znak do zmiennej RX_data. Co robię nie tak? Program do obsługi terminala to Hercules.

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Pozdraiwam!

    0 5
  • Pomocny post
    #2 20 Cze 2015 00:59
    Imekxus
    Poziom 17  

    tu masz błąd
    UCSRB|=(1<<RXCIE)|(1<RXEN)|(1<<TXEN);
    btw nie definiuj F_CPU w pliku main tylko w makefile

    1
  • #3 20 Cze 2015 01:37
    nowakus
    Poziom 19  

    Bo się zdenerwuję .... przez taki głupi szczególik spędziłem 4h na gapieniu się w notę katalogową i próbowaniu odebrać znak. Wiedziałem, że nie nadchodzi przerwanie od UARTU, ale odbiornik nie działa w życiu bym nie wpadł. Kombinowałem z wektorami przerwań i wogóle. Koledzę Imekxus serdecznie dziękuję!!! Teraz działa wszytko poprawnie :D mogę zabrać się za dalszą część programowania. Jeszcze raz dzięki i dobrej nocy !!! Klikam pomógł!

    0
  • #4 20 Cze 2015 18:00
    dondu
    Moderator Mikrokontrolery Projektowanie

    Dla porządku i przyszłych czytających dodam tylko, że błąd polegał na braku jednego znaku < w przypadku bitu RXEN, co jest oczywistym przypadkiem, a błąd trudno odnaleźć :)

    Prawidłowo powinno być więc tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #5 21 Cze 2015 10:10
    el2010tmp
    Poziom 25  

    Jakie jest uzasadnienie definicji funkcji wewnątrz funkcji?
    Jeżeli takowego nie ma to lepiej zdefiniować ją na zewnątrz bo jedyne co teraz zyskujesz to pogorszenie czytelności kodu i ograniczenie zakresu widoczności funkcji.
    Chodzi o void nadawanie (void) w tym przypadku możesz ją wywoływać tylko z wnętrza funkcji main().
    No, chyba że to celowe działanie.

    0
  • #6 21 Cze 2015 22:38
    nowakus
    Poziom 19  

    Jasne masz rację. To jest błąd, jednak ten program jest programem edukacyjnym, w celu trenowania komunikacji portem szeregowym odbierania i nadawania znaków. Funcje oczywiście powinny byż zdefiniowane przed mainem :) przepraszam, jest to bardzo "robocza" wersja programu. Pozdrawiam :D

    0
  Szukaj w 5mln produktów