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.

Attiny2313 UART HC-05 - Niepoprawne działanie komunikacji Rs232

daminnes 15 Paź 2013 22:01 2082 7
  • #1 15 Paź 2013 22:01
    daminnes
    Poziom 8  

    Witam. Problem dotyczy mikrokontrolera Attiny 2313 oraz komunikacji UART , chodzi o to, że o ile wysyłanie znaku z mikrokontrolera działa, o tyle mam problem z doprowadzeniem sygnału z modułu bluetooth HC-05 do kanału Rx.

    Chcę sprawić, aby przez smartfona z zainstalowanym androidem, przesłać znak i przez moduł bluetooth doprowadzić go do uC ;)

    Do tej pory, połączyłem na płytce stykowej podstawowe zasilanie z USB, przez programator, do tego kondensatory, oraz diodę LED na PB0, PB1, (sygnalizuje ona stan pracy)

    załączam kod źródłowy, jest on prosty, jednak uprzedzam, że napisany trochę "lamersko" :)

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Myślę, iż głównym problemem z którym sobie nie radzę, jest sposób w jaki mikrokontroler odbiera dany znak (czy znak 1 musi być w apostrofach '' ?)
    oraz jak to można podłączyć z HC-05


    Jeszcze jedno : Gdy podłączam kanał Tx HC-05 do kanału Rx uC, dioda sygnalizująca zapala się i gaśnie cały czas, (nie powinna przesyłać żadnych danych, a z tego wynika że coś się przesyła) jednak w miarę poprawnie to działa ( gdy dotykam kanału Rx przez nieizolowany kabel trzymając go w palcach, dioda zapali się raz, i zgaśnie)

    Proszę o pomoc z programem, oraz o wyjaśnienie tych zagadnień. Z góry dziękuję za wszystko.

    0 7
  • #2 17 Paź 2013 16:54
    daminnes
    Poziom 8  

    Czy na prawdę nikt nie potrafi mi pomóc? problem cały czas ten sam chociaż zagłębiam się w literaturę rs232

    0
  • #3 17 Paź 2013 19:08
    Vampir8
    Poziom 16  

    Poczytaj o przerwaniach bo _delay_ms sie tutaj nie sprawdzi.
    http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html
    Sprawdź czy na pewno masz dobrze ustawione parametry transmisji, baudrate, bits, stopbits.

    Kod pisany z pamięci, ale coś takiego powinno to przypominać

    Code:

    UCSRB = (1<<RXEN) |(1<<TXEN)|(1<<RXCIE);

    ISR(USART_RX_vect)
    {
       uint8_t data;
       data = UDR;

       if (data==0x31) PORTB |=(1<<PB0); //dla odebranego znaku "1" numer z tablicy ASCII
       if (data==0x30) PORTB &= ~(1<<PB0); //dla odebranego znaku "0"

    0
  • #4 20 Paź 2013 21:01
    daminnes
    Poziom 8  

    Prawdopodobnie znalazłem odpowiedź na moje pytanie, i jest ono związane z wzorem na obliczanie UBRR

    zgodnie ze wzorem F_CPU/16/9600-1 UBRR powinno wynieść ~5.5104 co nie jest liczbą całkowitą ( a jak mniemam chyba ma być ).

    Dodatkowo przy USART_Init(SUBRR); wyrzuca mi błąd: integer overflow in expression, ale to chyba jedno z drugim się wiąże. spróbuje z tym jeszcze trochę pokombinować.

    0
  • #6 20 Paź 2013 23:16
    daminnes
    Poziom 8  

    dondu napisał:


    Widziałem już tę stronę wcześniej ;) jednakże zrobiłem tak jak pisałem, czyli:

    Wstawiłem cyfrę 6 zamiast wzoru na obliczanie UBRR, próbowałem czy działa - nie działało.

    Potem popatrzyłem do tablic z danymi wartościami UBRR dla danej częstotliwości i prędkości transmisji, błąd wynoszący dla 1Mhz i baud rate 9600 wynosił aż 7%, zmieniłem częstotliwość na 8Mhz, UBRR ustawiłem jak dobrze pamiętam na 51 a baud rate zostawiłem taki jaki był (moduł bluetooth tak pracuje) - próbowałem przesłać znak "1" przez smartfona, udało się ;)

    Zostało mi tylko teraz rozwiązanie problemu: Dlaczego raz zadziała funkcja zgaśnięcia diody (zmieniłem trochę program) a raz nie zadziała ;/ Macie jakieś pomysły? dalej bazowałem na _delay_ms(); nie próbowałem jeszcze z przerwaniami, a wstępnie uważam że problem jest w tym kawałku kodu:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Jakieś sugestie co do poprawności działania?

    0
  • #7 21 Paź 2013 00:09
    dondu
    Moderator Mikrokontrolery Projektowanie

    Przerwania nie mają tutaj nic do rzeczy. Funkcja którą Ci wskazałem pokazuje jak należy inicjować USART wykorzystując nagłówek setbaud.h, który pozwala policzyć i skonfigurować USART poprawnie (w sposób wskazany w linku), na podstawie BAUD i F_CPU. Po co więc ryzykować własne niekoniecznie prawidłowe makra?

    Jak masz podłączoną diodę?

    0
  • #8 21 Paź 2013 20:09
    daminnes
    Poziom 8  

    Dioda podłączona do PB0 i PB1. PB1 jest cały czas na niskim a PB0 zmienia się w zależności od funkcji ( jeżeli odbiera '1' to dioda gaśnie )

    0