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.

Atmega8 + btm-112 komunikacja po usart

ANFO 04 Lip 2012 23:53 2761 21
  • #1 04 Lip 2012 23:53
    ANFO
    Poziom 11  

    Witam.
    Mam problem z komunikacją między btm-112 a atmega8 po usart, między btm - PC i Atmegą - PC nie ma problemów. Gdy z PC wysyłam komendy na uC to reaguje tak jak powinien, czyli gasi i zapala diodę, natomiast po połączeniu btm z uC zero reakcji.
    W czym problem?
    Prędkość transmisji się zgadza.
    Proszę o odp. na temat, taktowanie zostaje 1MHz!

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 21
  • #2 05 Lip 2012 00:15
    mirekk36
    Poziom 42  

    A przestawiłeś BTM'a na prędkość 4800 ? Nie wiesz że fabrycznie jest ustawiony na 19200 ?

    0
  • #3 05 Lip 2012 00:45
    ANFO
    Poziom 11  

    btm, PC i uC ustawione są na te same parametry transmisji, czyli baud: 4800.

    0
  • #4 05 Lip 2012 06:54
    MArSTER_1
    Poziom 18  

    Gdy z PC wysyłam komendy na uC to reaguje tak jak powinien, czyli gasi i zapala diodę, natomiast po połączeniu btm z uC zero reakcji. W czym problem?

    Czy to znaczy, że najpierw wysyłasz przewodowo komendy przez MAX232 i działa a gdy zamieniasz przewód na BT przestaje?
    Jeśli tak, to powinieneś podłączyć PC do BTM i napisać ati1 i zamieścić listing odpowiedzi modułu.

    0
  • #5 05 Lip 2012 11:14
    ANFO
    Poziom 11  

    Code:
    >: ati1
    
    <:

    <:
    OK

    <:
    ATC=1, HARDWARE FLOW CONTROL

    <:
    ATD=3C8B-FE-B3B59B, SET BLUETOOTH ADDRESS CONNECT TO

    <:
    ATE=0, NEVER ECHO CHARACTERS

    <:
    ATG=1, ENABLE ALL PAGE AND INQUIRY SCAN

    <:
    ATH=0, NEVER BE DISCOVER

    <:
    ATK=0, ONE STOP BIT

    <:
    ATL=0, BAUD RATE is 4800.

    <:
    ATM=0, NONE PARITY_BIT

    <:
    ATN=Serial Adaptor, LOCAL NAME

    <:
    ATO=0, ENABLE  AUTO CONNECTING

    <:
    ATP=NNNN, PIN CODE

    <:
    ATQ=0, SEND RESULT CODE

    <:
    ATR=0, SPP MASTER ROLE

    <:
    ATS=1, ENABLE AUTO-POWERDOWN OF RS232 DRIVER

    <:
    ATX=1, ALWAYS CHECK '+++' 

    0
  • #6 05 Lip 2012 11:43
    MArSTER_1
    Poziom 18  

    Masz wpisany adres MAC pod ATD, to specjalnie?
    Kolejna sprawa. Masz wybraną pracę modułu jako Master. Nie wywołasz w ten spodób modułu z PC. Musisz zmienić na Slave i jeśli w ATD adres MAC nie jest adresem BT w PC to się nie połączysz.

    0
  • #7 05 Lip 2012 16:19
    ANFO
    Poziom 11  

    Wszystkie ustawienia są poprawne i celowe! Moduł ma się automatycznie łączyć z adresem MAC w ATD, i łączy się wyświetlając powiadomienie
    CONNECT '3C8B-FE-B3B59B' lub
    DISCONNECT '3C8B-FE-B3B59B'.
    Miedzy urządzeniem 3C8B-FE-B3B59B a modułem BT, uC lub PC nie odbywa się żadna komunikacja, moduł BT ma się tylko bezprzewodowo łączyć i wyświetlać status połączenia.
    uC powinien reagować na te komendy i reaguje gdy wysyłam taki łańcuch bezpośrednio z PC na uC(kablem szeregowym). Gdy połącze moduł BT z uC(kablem szeregowym) to teoretycznie program powinien też działać, ale nie działa. Dlaczego? czy Moze chodzi o jakieś inne kodowanie znaków?

    0
  • #8 05 Lip 2012 16:48
    MArSTER_1
    Poziom 18  

    W porządku. Umknęło mi wcześniej w opisie, że to moduł ma się łączyć nie PC. W takim razie ustawienia masz oczywiście dobre. Co dalej? Moim zdaniem powinieneś na próbę zmienić podprogram odbierania znaków. Nie filtrować od razu LF i reagować na CR a wczytać napływające bajty do tablicy i je wyświetlić. Znasz komunikat, wiesz ile jest bajtów zapamietaj je w tablicy i zobaczysz bajt o jakiej wartości odpowiada LF, CR i tak dalej. Będziesz mógł to porównac z tablicą ASCII czy te kody odpowiadają im.

    Dodano po 8 [minuty]:

    Kiedyś sprawdzałem według jakiej strony kodowej działa Hyperterminal i wyszło mi, że Hyperterminal działa według strony kodowej DOS czyli 852. Może sprawdź to?

    0
  • #9 05 Lip 2012 18:35
    LordBlick
    VIP Zasłużony dla elektroda

    MArSTER_1 napisał:
    Hyperterminal działa według strony kodowej DOS czyli 852. Może sprawdź to?
    Dopóki wchodzą w grę tylko podstawowe znaki alfabetu łacińskiego oraz znaki interpunkcyjne i cyfry, to strona kodowa nie ma znaczenia.
    ANFO napisał:
    Gdy połącze moduł BT z uC(kablem szeregowym) to teoretycznie program powinien też działać, ale nie działa.
    Póki co i tak nic nie wysyłasz do BT, więc wyjście TxD podepnij w stronę PC i odsyłaj już w przerwaniu dodatkowo, to co przyszło "na obserwację". Co do kodu, ja bym włączył pullupa na PORTD0, oraz zamiast starej konwencji SIGNAL dał ISR.
    http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html

    0
  • #10 05 Lip 2012 19:11
    ANFO
    Poziom 11  

    Ok. Dzięki za odpowiedzi, zrobię tak jak napisałeś i zobaczę co uC odbiera.

    0
  • #11 06 Lip 2012 10:57
    ANFO
    Poziom 11  

    uC odsyła takie krzaki na połączeniu ¨ĘĘCT'3(µFQůB&¨S 'Cá i przy rozłączeniu Tj5=NNQ('3(µFEK¨Ő9BRHř. czym to jest spowodowane? przecież ustawienia połączenia są chyba zgodne?

    0
  • #12 06 Lip 2012 11:10
    mirekk36
    Poziom 42  

    ANFO napisał:
    uC odsyła takie krzaki na połączeniu ¨ĘĘCT'3(µFQůB&¨S 'Cá i przy rozłączeniu Tj5=NNQ('3(µFEK¨Ő9BRHř. czym to jest spowodowane? przecież ustawienia połączenia są chyba zgodne?


    Taki efekt to jak nic, tylko ustawione różne prędkości w nadajniku i odbiorniku.

    0
  • #13 06 Lip 2012 11:11
    MArSTER_1
    Poziom 18  

    Te "krzaczki" są zawsze takie same, czy zmieniają się przy każdym połączeniu? No i jak rozumiem postąpiłeś tak jak radził Lord czyli dane odbiera procesor i natychmiast odsyła do Hyperterminala?

    0
  • #14 06 Lip 2012 11:29
    LordBlick
    VIP Zasłużony dla elektroda

    Przestaw hyperterminal na tą samą prędkośc komunikacji co mikrokontroler. JAk nie pomoże, to trzeba się zabrać za podłączenie zewnętrznego rezonatora kwarcowego 11.0592MHz z kondensatorami 20pF do masy i przestawieniem wszystkich fusebitów CKSEL na "1111", CKOPT na "0"(F_CPU>8MHz) i SUT na "11".

    MArSTER_1 napisał:
    postąpiłeś tak jak radził Lord czyli dane odbiera procesor i natychmiast odsyła do Hyperterminala?
    No raczej tak, inaczej byśmy nic o krzaczkach nie wiedzieli... ;)

    0
  • #15 06 Lip 2012 11:43
    MArSTER_1
    Poziom 18  

    Ale ANFO pisał, że gdy wysyła dane po kablu to procesor odbiera. To może znaczyć, że częstotliwości są dobre.

    0
  • #16 06 Lip 2012 14:33
    ANFO
    Poziom 11  

    terminal, BT i uC są ustawione na 4800. Te krzaczki są zawsze takie same, tzn. różne dla connected i disconnected.

    0
  • #17 06 Lip 2012 14:42
    MArSTER_1
    Poziom 18  

    No to zrób tak jak pisałem. Zapisz napływające dane do tablicy w procesorze i po odebraniu wyswietl je na LCD procesora. Wtedy będziesz miał wartości odbieranych bajtów. Może da się wtedy to zinterpretować.

    Dodano po 5 [minuty]:

    A jak je zamieścisz na forum to może więcej osób się nad nimi pochyli?

    0
  • #18 06 Lip 2012 14:44
    mirekk36
    Poziom 42  

    MArSTER_1 napisał:


    Dodano po 5 [minuty]:

    A jak je zamieścisz na forum to może więcej osób się nad nimi pochyli?


    Tu za bardzo nie ma nad czym się pochylać ani analizować bajtów, niestety to:

    - albo różne prędkości lub inne parametry transmisji
    - albo złe ustawienia fusebitów
    - albo zły program

    ale ja obstawiam na to pierwsze

    0
  • #19 06 Lip 2012 14:57
    MArSTER_1
    Poziom 18  

    Ale jak wyjasnić to, że zawsze "krzaczki " są takie same?
    A jeśli różne prędkości to tylko w BT, bo po kablu program działa. Ale w BT wyraźnie w listingu widać, że jest 4800.
    Chciałbym obejrzeć te bajty.

    Dodano po 6 [minuty]:

    "char data = UDR; "
    Jak rozumiem jest to kodowanie zmiennej odebranej przez port szeregowy. A gdyby była to zwykła zmienna bajtowa i wtedy wyszukiwać wartości 10 i 13. A może , jeśli jeszcze funkcjonuje połączenie zaproponowane przez Lorda to zmienić tylko tą jedna instrukcję? Zamiast char niech zmienna będzie Byte i odesłać do PC? Czy nadal będą "krzaczki"?

    0
  • #20 06 Lip 2012 15:04
    mirekk36
    Poziom 42  

    A co to za różnica czy zmienna char czy byte ? ;) żadna

    0
  • #21 06 Lip 2012 15:10
    MArSTER_1
    Poziom 18  

    Jeśli po zamianie tej instrukcji i odesłaniu bajtów do PC pozostaną "krzaczki" to okaże się, że faktycznie żadna. Ten sposób ma jednak tą zaletę, że nie wymaga prawie żadnych działań poza niewielką zmianą w programie.

    0
  • #22 14 Lip 2012 13:45
    ANFO
    Poziom 11  

    uC był prawdopodobnie uszkodzony, niezależnie od ustawień cały czas pracował 8bitów danych, 2 stopu i parity even.
    Zastąpiłem go attiny2313 i wszystko już dobrze działa.
    Zamykam temat.

    Dzięki za pomoc!

    0