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

Odbiór/wysyłanie danych z AVR z/do telefonu przez BT

Movalis 20 Sty 2016 01:19 1209 13
  • #1 20 Sty 2016 01:19
    Movalis
    Poziom 10  

    Cześć.
    W programowaniu jestem początkującym, stąd oczywiście ten dział.
    Chce stworzyć program, na Atmega8A, który będzie dokonywał pomiaru na kilku pinach ADC i wysyłał dokonane pomiary przez BT HC-05 do aplikacji na telefon z androidem. Z telefonu ma być możliwość sterowania innymi opcjami, czyli AVR musi reagować na wydaną komendę, np. wysłanie wartości do innego układu po SPI. Problem polega na tym, że wartości które przesyłam(chwilowo podglądam to na terminalu na kompie)są cały czas przerzucane w konsoli. Ja chciałbym, żeby po każdym wysłanym pomiarze ekran był czyszczony, tak żeby wyniki stały w jednym miejscu(kodowanie z dodawaniem \33 itp. nie działa). Źródło napięcia ustawione na wewnętrzne, ale pomiary dostaje w oklicy 120ADC, a powinno być 215ADC.
    W tej chwili mój kod wygląda następująco: (jest to zlepek dwóch kodów)

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Pozdrawiam i proszę o jakąkolwiek pomoc.

    1 13
  • Sklep HeluKabel
  • #2 22 Sty 2016 01:33
    dondu
    Moderator Mikrokontrolery Projektowanie

    Dla porządku podam, że Twój temat rozpoczął się tutaj
    Przepraszam, że z opóźnieniem odpowiadam.

    Jeżeli używasz Realterm, to nie ma on opcji (chyba, że o czymś nie wiem), która umożliwiałaby osiągnięcie efektu pojawiania się wyników w jednym miejscu. Terminalem, który to potrafi jest Putty obsługujący VT100, a przykłd znajdziesz tutaj: http://mikrokontrolery.blogspot.com/2011/03/DIY-Gra-REFLEX-ATmega16-terminal-PuTTY-VT100.html


    Masz różnicę pomiędzy początkowym ustawieniem:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    a późniejszymi pomiarami:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Jeśli to jest ATmega8, to pierwszy pomiar jest z napięcia odniesienia 2,56V a pozostałe z AVcc. I to jest zapewne przyczyna w różnicach pomiarów.


    Nie definiuj F_CPU w kodzie z tych powodów: http://mikrokontrolery.blogspot.com/2011/03/fcpu-gcc-gdzie-definiowac.html

    0
  • Sklep HeluKabel
  • #3 22 Sty 2016 17:21
    Movalis
    Poziom 10  

    Na początku, dziękuję za odzew Dondu :)
    W RealTerm, można to osiągnąć zaznaczając ANSII. Niestety w przypadku ASCII wszystko się rozjeżdża, domyślnie ma być to aplikacja na androida, którą stworzyłem w AppInventorze idąc częściowo za Twoimi poradami :). Jest dosyć prosta, ale wyświetla znaki właśnie w formacie ASCII, który uniemożliwia mi formatowanie tekstu. Coś podobnego zrobił Mirekk36, ale działało to właśnie tylko na terminalu.
    Czy da się stworzyć aplikację na androida, która odbierała by dane właśnie tak aby wyświetlać je w jednym miejscu?
    Dziękuję za zwrócenie uwagi, poprawiłem już to, z tym że wszystko jest na płytce stykowej i niestety szaleje, a mam podpięty układ z dławikiem oczywiście według strony jeśli chodzi o ADC. Zasilanie jest z programatora, zmierzyłem napięcie w tej chwili przy sparowanym BT napięcie na szynie zasilającej jest 3.5-3.6V(tak niestety skacze), na dzielniku ok. 1.6V.
    Dodatkowo nie wiem za pomocą jakiej funkcji przekazać te wartość dalej, teraz jest to putlong, w którym przekazywana jest wartość ADC1 itd,, gdy dodam wynik w miejsce adc kompliator wurzuca ostrzeżenie"passing argument 1 of 'uart_putlong' makes integer from pointer without a cast,". Zauważyłem właśnie dodatkowo, że wszystkie wartości są do siebie podobne, po wyciągnięciu przewodu z dzielnika, skaczą wszystkie pomiary :(

    0
  • #4 22 Sty 2016 19:02
    dondu
    Moderator Mikrokontrolery Projektowanie

    Movalis napisał:
    Na początku, dziękuję za odzew Dondu :)

    Nie ma za co :)


    Movalis napisał:
    ... domyślnie ma być to aplikacja na androida, którą stworzyłem w AppInventorze idąc częściowo za Twoimi poradami :). Jest dosyć prosta, ale wyświetla znaki właśnie w formacie ASCII, który uniemożliwia mi formatowanie tekstu.
    ...
    Czy da się stworzyć aplikację na androida, która odbierała by dane właśnie tak aby wyświetlać je w jednym miejscu?

    Nie bardzo rozumiem, z czym masz problem pisząc aplikację. Z otrzymywanymi danymi za pomocą aplikacji możesz zrobić wszystko co zechcesz.


    Movalis napisał:
    Dodatkowo nie wiem za pomocą jakiej funkcji przekazać te wartość dalej, teraz jest to putlong, w którym przekazywana jest wartość ADC1 itd,, gdy dodam wynik w miejsce adc kompliator wurzuca ostrzeżenie"passing argument 1 of 'uart_putlong' makes integer from pointer without a cast,".

    Bez podglądu w program nie pomożemy.


    Movalis napisał:
    Zauważyłem właśnie dodatkowo, że wszystkie wartości są do siebie podobne, po wyciągnięciu przewodu z dzielnika, skaczą wszystkie pomiary :(

    Schemat by się przydał ... zdjęcia także:


    Movalis napisał:
    Dziękuję za zwrócenie uwagi, poprawiłem już to, z tym że wszystko jest na płytce stykowej i niestety szaleje, a mam podpięty układ z dławikiem oczywiście według strony jeśli chodzi o ADC. Zasilanie jest z programatora, zmierzyłem napięcie w tej chwili przy sparowanym BT napięcie na szynie zasilającej jest 3.5-3.6V(tak niestety skacze), na dzielniku ok. 1.6V.

    0
  • #5 22 Sty 2016 19:45
    Movalis
    Poziom 10  

    Jeśli chodzi o aplikację problem mam właśnie z ustawieniem tych danych tak żeby były czytelne, to znaczy znajdowały się i odświeżały w jednym miejscu. To jest moja pierwsza aplikacja w appinventorze, więc nie wiem jak to ogarnąć :|

    Program wygląda tak jak w pierwszym poście, no może poza zmianą, która wskazałeś i wspomnianą funkcją:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Jeśli chodzi o schemat to użyłem tego:

    Odbiór/wysyłanie danych z AVR z/do telefonu przez BT
    Dodatkowo jedynie pod PC5, idzie sygnał z dzielnika rezystorowego składającego się z wartości R1=10k i R2=10k. PC4 i PC3 są wpięte do masy, a PC2 wisi w powietrzu.
    W terminalu uzyskuję takie wyniki:

    Odbiór/wysyłanie danych z AVR z/do telefonu przez BT
    ADC to odpowiednio:

    ADC4 - PC5,
    ADC3 - PC4,
    ADC2 - PC3,
    ADC1 - PC2.
    Jeśli przepnę ADC4(PC5) do masy, to ADC1(PC2), również ma wartość 0.

    Tak wygląda układ na płytce:
    Odbiór/wysyłanie danych z AVR z/do telefonu przez BT
    A tak wyglądała aplikacja, gdy chciałem przesyłać znaki odpowiedzialne właśnie za pozycjonowanie itd.:
    Odbiór/wysyłanie danych z AVR z/do telefonu przez BT

    Przepraszam za jakość zdjęć, ale nie mam odpowiedniego sprzętu.
    W appinventorze wygląda to tak:(zrobiłem tabele, w która dałem nazwy, a obok dane, które miały być dzielone.
    Odbiór/wysyłanie danych z AVR z/do telefonu przez BT

    Odbiór/wysyłanie danych z AVR z/do telefonu przez BT
    Niestety pomysł ten nie zadziałał :|

    0
  • #6 28 Sty 2016 15:39
    Movalis
    Poziom 10  

    Jest ktoś w stanie coś podpowiedzieć jeszcze? :)

    0
  • #7 28 Sty 2016 20:58
    dondu
    Moderator Mikrokontrolery Projektowanie

    Ten zielony tekst jest w jakimś pojedynczym polu tekstowym?

    0
  • #8 29 Sty 2016 14:46
    Movalis
    Poziom 10  

    Tam gdzię są te krzaczki było wrzucone w label normalnie. Na tym drugim uporządkowałem to i wrzuciłem w tabele. Adc i brak danych są w oddzielnych kolumnach.
    Błąd, który wyskakiwał to: Segment: Start (3) + length (3) – 1 exceeds text length (0)

    Odbiór/wysyłanie danych z AVR z/do telefonu przez BT

    W tej konfiguracji wyskakuje: list index too large, select list item: Attempt to get item number 2 of a list of length 1:(*empty-string*). Ale przynajmniej wyświetla się w odpowiednim miejscu, z tym, że maksymalnie 2 wartości jednocześnie.

    0
  • #9 30 Sty 2016 17:26
    dondu
    Moderator Mikrokontrolery Projektowanie

    Index jest spoza zakresu tablicy chyba dlatego, że definiujesz ją jako pustą dodając do niej odebrany tekst.

    0
  • #10 01 Lut 2016 12:31
    Movalis
    Poziom 10  

    Dodałem czystego stringa do zmiennej "przychodząca_główna", po "create empy list". Niestety nic to nie dało...
    Mam jeszcze problem z wysyłaniem prawidłowych danych, tzn. wyświetlanie się tych samych wyników ADC na wszystkich kanałach. Mianowicie chodzi o funkcje put_long, którą wysyłam zmienne adc1 itd., a według przykładu ze strony wysyłana była zmienna wynik i kasowana po każdym wysłaniu na ekran. Niestety, gdy próbuje ją wysłać funkcją put_long mam błąd kompilacji.

    0
  • #11 01 Lut 2016 18:38
    dondu
    Moderator Mikrokontrolery Projektowanie

    Movalis napisał:
    Niestety, gdy próbuje ją wysłać funkcją put_long mam błąd kompilacji.

    Bez szczegółów możemy tylko gdybać.

    0
  • #12 01 Lut 2016 19:56
    Movalis
    Poziom 10  

    Kod poniżej: ;)

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #13 01 Lut 2016 20:06
    BlueDraco
    Specjalista - Mikrokontrolery

    Kompilator pisze zapewne jaki to błąd. Zareaguj.

    A tsk w ogóle to po co używasz funkcji putlong, a w niej ltoa() do konwersji danej 8-bitowej?

    0
  • #14 01 Lut 2016 23:12
    Movalis
    Poziom 10  

    Niestety, jestem dosyć początkujący w tym co próbuję zrobić. Ale się nie poddaję. Funkcji tej użyłem, ponieważ widziałem ją bodajże w przykładach Mirka i stwierdziłem, że nada się do wysyłania danych. Tak jak wspominałem kod jest złożeniem dwóch kodów z jakimiś tam moimi niewielkimi zmianami, czyt. próba wysyłania danych.

    0