logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] [Atmega8][C] HC-05 nie wymienia danych z telefonem - co robić?

mikmas 29 Mar 2019 17:57 1332 32
  • #1 17874281
    mikmas
    Poziom 18  
    Podłączyłem Atmegę pod HC-05 wg poniższego schematu
    [Atmega8][C] HC-05 nie wymienia danych z telefonem - co robić?

    Po włączeniu dioda na HC szybko miga, po sparowaniu z telefonem i aplikacją BlueTooth terminal HC-05 jest ciągle zapalone (czyli ok). Jednak jak wysyłam znaki z/do komórki to nic się nie dzieje. Oto kod:
    UART.cpp
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Oraz test:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Program wisi. Niestety nie mam oscyloskopu, więc nie mam jak sprawdzić, czy sygnał w ogóle jest wysyłany/odbierany. Kod do obsługi uart jest wzięty z działającego (w sensie na pewno poprawnie w nim hula UART) układu opartego o attiny2313. Obsługa w tych dwóch mikrokontrolerach jakoś się różni? Co jeszcze mogę robić źle? Podłączenia sprawdzałem 101 razy

    EDIT
    LFuse mam na 0xFF
    Kwarc 20MHz
    F_CPU = 20000000

    EDIT2
    Odbieram na komórce dane, ale wysyłając w pętli "abc" dostaję krzaki
  • #3 17874537
    mikmas
    Poziom 18  
    Mogę to samo zrobić z poziomu mikrokontrolera. Jako że układ nowy, a komend AT nie wysyłałem, więc powinno być 9600. Ogólnie COŚ się wysyła, bo na komórce odbierane są krzaki. Powoli tracę cierpliwość do tego układu
  • #4 17874568
    kaczakat
    Poziom 34  
    Na PC po protu widać co się wysyła, a nie że coś. Podłączasz konwerter do HC-05, potem tak samo do Atmega8, jak oba nadają tak samo to szukaj w połączeniu. Możesz zacząć grzebać w kodzie albo od najprostszych rzeczy do sprawdzenia. Poza tym jak używasz popularnych modułów "arduinowych" HC-05 to konwerter 3.3V-5V jest opcjonalny, te moduły tolerują 5V na RX. Lepiej nie używać żadnego konwertera niż niepewnego przez rezystor 2k.
    Mam na myśli taki moduł:
    [Atmega8][C] HC-05 nie wymienia danych z telefonem - co robić?
    Pomogłem? Kup mi kawę.
  • #5 17874585
    mikmas
    Poziom 18  
    Nie posiadam konwertera RS-232 <-> UART, więc z tym wolałbym dopiero w ostateczności kombinować (może gdzieś bym wygrzebał układ 232CPE, ale wolałbym wyeliminować najpierw łatwiejsze do zrobienia rzeczy). COŚ w sensie wiem co - krzaki. Na komórce w terminalu wyświetlają się krzaki. W drugą stronę nic nie dostaję (wyświetlam to na LCD alfanumerycznym, więc też bym widział dokładnie co dostaję).
    Co do arduinowych układów - zbijanie napięcia diodą zenera jest w stronę HC-05, gdzie podkreślają na każdym kroku, że jego RxD jest na 3.3v. Stąd dałem diodę zenera. Nie wiem, gdzie widzisz jakiś niepewny konwerter 2k
  • #6 17874587
    LChucki
    Poziom 31  
    mikmas napisał:
    Mogę to samo zrobić z poziomu mikrokontrolera.

    Ale jednak
    mikmas napisał:
    Ogólnie COŚ się wysyła,

    Więc posłuchaj rady i spróbuj np na PC. Jak zadziała to wiesz, ze masz zły soft na uC.
  • #7 17874596
    mikmas
    Poziom 18  
    Widzę, że to "COŚ" działa jak płachta na byka :D
    #define COŚ:
    Przy wysyłaniu
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Dostaję takie coś:
    0xd0 a1 e8 a2 d1 a3 f4 a4 d2 a5 e9 a6 d3 a7 fa a8 d4 a9 ea aa d5 ab f5 ac

    Pewna korelacja jest, bo każdy kolejny co drugi znak jest o 1 większy, jednak nie mogę zrozumieć skąd taka wartość i śmieci po drodze. W drugą stronę - jak już pisałem - nic nie dostaję. Na razie jednak się skupiam na wysyłaniu do komórki
  • #8 17874621
    kaczakat
    Poziom 34  
    Po prostu to dodatkowe połączenie i 2k, przecież przez to musi przepłynąć jakiś prąd by ustawić potencjał 3.3V a potem z powrotem 0V. Nie wiem jaki masz moduł HC-05, wszystkie swoje przetestowałem w 5V, na każdym jest napis 3.3V. Choć przy prędkości 9600 to nie powinno być powodem. Może dioda nie jest na 3.3V, może w stykówce coś nie łączy.
    Ale najważniejsze i czego nie ma na schemacie, GND połączyłeś? Nie pytałem o to, ale jak nie masz konwertera i analizatora logicznego to tak mi przyszło do głowy.
    Pomogłem? Kup mi kawę.
  • #9 17874637
    LChucki
    Poziom 31  
    kaczakat napisał:
    Choć przy prędkości 9600 to nie powinno być powodem.

    Tu sie zgodzę, nawet 115200 powinno działać.

    kaczakat napisał:
    może w stykówce coś nie łączy.

    To częsty problem.


    PS
    Oscyloskop prawdę Ci powie.
  • #10 17875040
    mikmas
    Poziom 18  
    Zbudowałem na płytce prototypowej na prędkości konwerter napięcia na MAX232 i podpiąłem ustrojstwo pod COM-a i... działa. Na komórce pojawiają się poprawne znaki. Coś z odbiorem jest nie tak, ale może się machnąłem przy budowie.
    Tak więc ogólnie BT działa, problem jest z wysyłaniem poleceń z atmegi. Jutro sprawdzę połączenia, ale prośba o przyjrzenie się kodu. Może jakoś źle ustawiam to połączenie?
  • #11 17875292
    kaczakat
    Poziom 34  
    Pokaż cały kod albo hexa to wgram do Atmega8 i sprawdzę. A i 20MHz to też nie gwarantuje sukcesu, w PDF jest max 16MHz. Ewentualnie tu jest fajna biblioteka (bufory, przerwania, dużo AVR), ale faktycznie do C: http://homepage.hispeed.ch/peterfleury/avr-software.html#libs.
    Pomogłem? Kup mi kawę.
  • #12 17875456
    mikmas
    Poziom 18  
    Oto cały kod (tylko nie analizuj co się odwala w LCD.cpp :D z powodów hardwareowych musiałem odwrotnie piny podłączać). W międzyczasie przejrzę ten kombajn od Fluery-ego
  • #13 17875682
    kaczakat
    Poziom 34  
    Kod działa OK dla 8MHz, 16MHz, a dla 20 trafia w osobliwość i się załamuje. Po zamianie zgodnie PDF:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Także porównaj sobie formuły na obliczanie UBRR z podaną w linku biblioteką. Kiedyś porównywałem różne wzory w excelu i wiem, że krążą po necie również błędne. Najwyżej jak już zniszczę nieco przyrodę w ogrodzie to jeszcze poszukam tego na dysku.
    Pomogłem? Kup mi kawę.
  • #16 17875780
    mikmas
    Poziom 18  
    Jak przeczytałem, że 16MHz to max dla atmegi to się szczerze ucieszyłem i poleciałem do elektronicznego po 16MHz kwarc. Przekroczenie max taktowania wyjaśniałoby ten brak stabilności. Wymieniłem na 16MHz, F_CPU zmieniłem na 16 000 000 i dupa :(. To samo. Mogę spróbować na innej atmedze, ale ta jest nowa więc nie powinno być takiego efektu. Zastosowałem też wzór który podałeś do obliczania dzielnika, ale nic to nie zmieniło. Przełączyłem się też fusami na wewnętrzny RC 8MHz (F_CPU oczywiście też zmieniony), ale dalej krzoki

    EDIT!
    Inna atmega dała ten sam wynik :(
  • #17 17875786
    LChucki
    Poziom 31  
    mikmas napisał:
    Przełączyłem się też fusami na wewnętrzny RC 8MHz (F_CPU oczywiście też zmieniony), ale dalej krzoki

    AVR to nie STM32, wewnętrzny RC w AVR nie da rady przy 8N1. Przy 5N1 jakoś tam działa ale przy 8N1 pojawiają się błędy.
  • #18 17875979
    mikmas
    Poziom 18  
    Zrobiłem na szybko układ na Attiny2313, gdzie wcześniej często i gęsto używałem UART-a, jednak i tutaj nie działa. Przy kodzie:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Dostaję 0x98. Kurna jak to możliwe...
  • #19 17876043
    kaczakat
    Poziom 34  
    No to możesz mieć błąd jeszcze w podłączeniu. Tak jak napisałem, Twój kod działał (testowałem tylko odbiór w terminalu Arduino ustawionym na 9600) na 8,16 i 20MHz, przy 20MHz jedynym błędem była wyliczona wartość UBRR. Wysyła wielkie litery alfabetu A,B,C itd. Co prawda ja to skompilowałem i wgrałem przez Eclipse, ale to nie powinno mieć związku.
    Pomogłem? Kup mi kawę.
  • #20 17876092
    mikmas
    Poziom 18  
    Mógłbyś jeszcze sprawdzić poniższy wsad? Ustawione pod 16MHz. Może coś z moim kompilatorem jest nie 5. Absurd, ale już nie mam kompletnie pomysłu. 2 układy oba źle by wysyłały, ale jednak komputer potrafi poprawnie
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #21 17876141
    LChucki
    Poziom 31  
    mikmas napisał:
    Może coś z moim kompilatorem jest nie 5.

    Obejrzyj plik "*lss" i dowiesz się czy kompilator nie bruździ.
  • #23 17877911
    mikmas
    Poziom 18  
    Już kombinuję na wszelkie możliwe sposoby. Co ciekawe attiny zaczęło <<nagle>> nadawać poprawnie znaki po wymianie kwarcu (też 16MHz). Po przelutowaniu do atmegi oczywiście nie działał, a dodatkowo po przyczepieniu z powrotem do attiny znowu było źle. Wychodzi, że coś z taktowaniem ma nie 5. Jednak wtedy problem rozwiązywałoby przełączenie się na RC wewnętrzne. Układ jest na płytce zrobionej termotransferem, w karierze mam już z "myljon" układów i nigdy nie było problemów z taktowaniem. Użyte kondonki to 22pF, reset na 5k oporniku do +, także wszystko powinno być si. Może znacie jakieś dziwne sytuacje, kiedy to XTAL błędnie działał?

    A akcie desperacji jutro kupię po prostu generator kwarcowy, aby mieć 100% stabilny sygnał taktujący niezależnie od widzimisię procka. Jak to nie pomoże to porzucę projekt (a szkoda, bo 90% jest zrobione)
  • #24 17877925
    LChucki
    Poziom 31  
    mikmas napisał:
    Wychodzi, że coś z taktowaniem ma nie 5. Jednak wtedy problem rozwiązywałoby przełączenie się na RC wewnętrzne.

    Przeczytaj jeszcze raz, ze zrozumieniem #17 https://www.elektroda.pl/rtvforum/topic3568279.html#17875786

    mikmas napisał:
    Może znacie jakieś dziwne sytuacje, kiedy to XTAL błędnie działał?

    Kwarc overtonowy.
  • #25 17878316
    kaczakat
    Poziom 34  
    Ja to mam na płytce stykowej, układ używałem na wewnętrznym oscylatorze więc w ogóle nie było kondensatorów przy kwarcu, dołożyłem na szybko sam kwarc 16, potem 20 i działa. W innej stykówce kiedyś podłączyłem 22pF i nie chciało działać, styki też mają jakąś pojemność, zaczęło chodzić z mniejszymi kondensatorami - w PDF masz zakres 12-22pF. Z wewnętrznym rezonatorem to jednak nie ma związku. Dla kwarcu może być lepiej bez kondensatora niż z za dużym.
    No i ciągle nie napisałeś, co z tym podłączeniem GND. Jak już byłeś w elektronicznym to trzeba było kupić sobie jakiś konwerter USB-UART z FTDI za dychę (czy tam dwie, jak to sklep stacjonarny). A wewnętrzny oscylator można sobie jeszcze dopasować, odczytaj po starcie OSCCAL (bajt), zwiększ go krokami powiedzmy o 20, wróć na początkowy, zmniejsz krokami o 20, zobacz czy komunikacja się poprawia. To oczywiście jak znajdziesz środek między wartościami gdzie komunikacja znika to będzie to optymalne ustawienie dla danej prędkości UART (niekoniecznie równe 8MHz).
    Jak LCD działa prawidłowo to na niego możesz wyrzucić jakie wartości obliczyłeś i wpisałeś do rejestrów UBRR. Jak nie masz pewności to wpisz stałe z PDF. No i puki nie będziesz miał chociaż jakiegoś klona/oryginału Salae (analizator logiczny) to będzie szukanie po omacku. Może podłącz ten słynny led-debug, migając nim przynajmniej z grubsza będziesz widział, czy masz 1, 8, czy może 16MHz.
    UART używałem na Attiny (softowy) i Atmegach z wewnętrznych oscylatorem i tylko 8N1, nie zauważyłem nigdy żadnych problemów.
    Pomogłem? Kup mi kawę.
  • #26 17878450
    mikmas
    Poziom 18  
    Próbowałem z radami, które daliście (m.in. nie sugerować się, że na RC nie działa). To co teraz się dzieje to już kompletny brak logiki - atmega działa po podłączeniu do kompa. 16MHz bez kondonków (chociaż wcześniej zawsze używałem 22pF i było ok. Bez nich pamiętam miałem raz problem ze wzbudzeniem). Czyli podsumowując:
    1. Podpinam atmegę pod kompa - działa; dostaję a..z
    2. Podpinam BT pod kompa - działa; rozmowa idzie w obie strony ładnie
    3. Podpinam atmegę pod BT - nie działa; krzaki
    Póki co wielkie dzięki za poświęcony czas

    Nie rozumiem o co chodzi z GND? Jest wspólne dla całego układu
  • #27 17878521
    trol.six
    Poziom 31  
    mikmas napisał:
    16MHz bez kondonków (chociaż wcześniej zawsze używałem 22pF i było ok. Bez nich pamiętam miałem raz problem ze wzbudzeniem)

    mikmas napisał:
    LFuse mam na 0xFF

    i HFUSE ckopt - 0 ?
  • #28 17878525
    mikmas
    Poziom 18  
    Tak, próbowałem także CKOPT 1, ale bez zmian
  • Pomocny post
    #29 17878536
    trol.six
    Poziom 31  
    Może jest na granicy błędu zegarowego. Możesz ustawić w atmedze nie 9600 ale 9500 albo 9700.
  • #30 17878545
    mikmas
    Poziom 18  
    Faktycznie tak może być jak mówisz - trol.six. Najpierw popróbuję na pałę wpisać trochę wyższe/niższe wartości, a jak to nie pomoże to tak jak kaczakat radzi - UBRR-a pomolestować dynamiczną zmianą wartości
REKLAMA