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

[Atmega8A][C/Eclipse][USART] - zapisywanie danych odebranych przez bluetooth

Rudy_1002 16 Gru 2012 15:16 1506 4
  • #1 16 Gru 2012 15:16
    Rudy_1002
    Poziom 2  

    Witam serdecznie. Jestem początkującym programistą mikrokontrolerów avr. Większość wiedzy czerpię z internetu, więc nie mam się kogo poradzić w sprawach merytorycznych odnośnie napotkanych problemów. Stąd prośba o pomoc na tym forum.
    Wymyśliłem sobie projekt współpracy modułu bluetooth HC-06 (były poruszane wątki tego modułu na tym forum) z Atmegą8A. Idea jest następująca: Przez rs-232 wysyłam cyfrę, znak jest obierany w przerwaniu USARTA, zapisywany w zmiennej globalnej, a następnie przy urzyciu multipleksowania dany znak (konkretniej cyfra) wyświetlana jest na 7-segmentowym wyświetlaczu złożonym z dwóch cyfr.
    Wszystko ładnie smiga: funkcje odpowiedzialne za odbior znaku, wysylanie echa odebranego znaku, wyświetlanie konkretnych cyfr przez wyswietlacz. Jedynym problemem jest to, że nie mogę sprawić aby odebrany znak zapisany został do zmiennej globalnej a nastepnie byl wyswietlany.

    Uzywająć terminala wysyłam znak, przychodzi echo wyslanego znaku, natomiast wyswietlacz wyswietla caly czas cyfrę odpowiadającą tej, którą zainicjalizowana została zmienna globalna.

    Oto i kod:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    I jeszcze dla dopelnienia funkcje odpowiedzialne za wyswietlanie na wyswietlaczu:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Bardzo prosze o pomoc. Uzywam zmiennych Volatile, nawet wylaczam na chwile mozliwosc przerwan globalnych (ochrona operacji nieatomowych).
    Ciekawa natomiast rzeczą jest, iż jesli przytrzymam dana cyfre na terminalu to wyswietlacz przez krotka chwile wyświetla to co chcę. Natomiast gdy przestane ciągle wysyłac znaku, wyświetlacz zacznie z powrotem wyswitlac stan początkowy zmiennej globalnej.
    Proszę o pomoc.

    0 4
  • Arrow Multisolution Day
  • Pomocny post
    #2 16 Gru 2012 15:58
    Andrzej__S
    Poziom 28  

    Rudy_1002 napisał:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Ustawiasz bit zezwolenia na przerwanie TXCIE, a gdzie masz procedurę obsługi tego przerwania?

    Po odesłaniu znaku flaga TXC zostaje ustawiona i ze względu na brak procedury obsługi tego przerwania program najprawdopodobniej startuje od początku. Nie ustawiaj bitu TXCIE lub napisz dla tego przerwania chociaż pustą procedurę obsługi:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • Arrow Multisolution Day
  • #3 16 Gru 2012 16:25
    BlueDraco
    Specjalista - Mikrokontrolery

    Zlituj się nad procesorem i czytelnikami tego wątku i zastąp switche i if-then-else prostym dostępem do tablicy - jedna linijka kodu zamiast dwudziestu paru i brak skoków.

    0
  • #4 16 Gru 2012 16:29
    mirekk36
    Poziom 42  

    Rudy__1002 ---> a może tak do tego podejdź: LINK
    To powinno pomóc ci rozwiać sporo twoich różnych problemów i wątpliwości w tym względzie.

    0
  • #5 16 Gru 2012 18:04
    Rudy_1002
    Poziom 2  

    Dzięki wielki za pomoc i rozwiązanie mojego problemu. Również bardzo cienie sobie pozostałe sugestie, aczkolwiek użyłem switchów tylko dlatego ze chcialem mieć jak najdokładniejszy pogląd na sytuacje w momencie kiedy nie potrafiłem poradzic sobie z powyższym problemem. Oczywiscie nie taki kształt miał mój finalny program, tylko doszukiwałem się błędów we wszystkime tylko nie tam gdzie trzeba. Wiem, ze strasznie to wyglada dlatego jak najszybciej to zmieniam.
    Jeszcze raz dziekuje.

    0