Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 mar 2024, o 15:50


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 22 cze 2014, o 20:23 
Offline
Nowy

Dołączył(a): 20 cze 2014
Posty: 6
Pomógł: 0

Witam


Mój problem polega na tym, że zawsze miałem problemy z rzutowaniem zmiennych. W każdym razie na ta chwilę mam taki problem, że mam sobie Atmegę 32 i ona coś tam mierzy po ADC.
Nie będę tutaj wklejał całego kodu z uC bo jego przeanlizowanie i wyciągnięcie najważniejszych rzeczy trochę by wam pewnie zajęło.
W każdym razie dane z ADC ładuję sobie najpierw do zmiennej typu uint8_t (tylko starszą połówkę z rejestru ADC), a następnie przepakowuję to do tablicy typu char, która ma tam 2000 elementów. Jak zbiorę 2000 elementów to zatrzymuję ADC i uruchamiam USART - wypluwam te 2000 elementów na RS232. Jak odpalę realterm i przełączę terminal na odbieranie danych typu uint to wszystko działa. Dostaję na terminalu liczby z zakresu od 0 do 255, zależy co tam sobie mierzę.
Chciałem teraz napisać aplikację na komputer, wybór z różnych względów padł na C# i visual studio. Projekt piszę pod net 4.0. W każdym razie odbieram te dane i nic się nie dzieje, z moim wykresem. Podejrzewam, że problem leży w tym, że odbieram pojedynczy bajt i zapisuje go do zmiennej typu int, przez co staje się to nieczytelne.
przycisk uruchamiający pomiar:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


metoda wyślij:

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


metoda odbiór danych:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


metoda wykres:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


deklaracje zmiennych:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


oraz cały program jeśli ktoś by chciał zobaczyć:
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jeżeli nie ten dział, czy formatowanie danych to proszę powiedzieć, to poprawię.

Zmieniłem znaczniki syntax-C# na csharp :) - SunRiver



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2014, o 21:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 maja 2012
Posty: 296
Lokalizacja: Chebzie Dolne
Zbananowany użytkownik

Pomógł: 6

Zrób konwersje z bajtu na string a później sobie to zamień jeśli potrzebujesz na inta
o ile masz wartości liczbowe.

Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Tylko pamiętaj to konwertuje z bajta na ascii.

_________________
Inspekcja TV kanalizacji
Programowanie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2014, o 22:14 
Offline
Nowy

Dołączył(a): 20 cze 2014
Posty: 6
Pomógł: 0

dzięki wielkie za pomoc. Twoje rozwiązanie wydaje się dobre, ale wydało mi się też czasochłonne. Przerobiłem więc program w atmedze, tak, że pomiar z ADC trafia do tablicy int i z tej tablicy po jednym elemencie jest wysyłany.
Jednak problem jest ten sam. To znaczy program jak powyżej nie działa, a w realterm jak się przełącze na uint to pokazuje sensowne wyniki, to samo w HEX, reszta typów danych wywala jakieś śmieci, w tym int.
Czy może w programie na procesor mam coś nie tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Ewentualnie może nie rozumiem istoty problemu i popełniam jakis błąd u samych podstaw. Prosiłbym wtedy o wyprowadzenie z blędu (może być brutalne).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 17:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 maja 2012
Posty: 296
Lokalizacja: Chebzie Dolne
Zbananowany użytkownik

Pomógł: 6

Czemu nie wysyłasz próbek z adc bezpośrednio po uarcie od razu na PC?
Strasznie motasz sam sobie i problem powstaje. Wysyłaj dane i rysuj wykres z tego i po sprawie.

_________________
Inspekcja TV kanalizacji
Programowanie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 19:35 
Offline
Nowy

Dołączył(a): 20 cze 2014
Posty: 6
Pomógł: 0

Miałem taki pomysł, ale bałem się, że jak puszczę ADC we free run mode i będę realizowal wysyłanie próbek po uarcie w przerwaniu ADC to że procesor nie zdąży wysłać próbki, a już dostanie kolejne przerwanie. Chociaż twój pomysł faktycznie jest prostszy. Nie wiedzieć czemu zawsze mam jakieś skłonności do komplikowania sobie życia. Spróbuję tak zrobić.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 22:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Zawsze możesz zrobić uśrednianie wyniku ADC i dopiero takie uśrednione wartości puszczać przez UART ;)
Plus tego taki że będą rzadziej wysyłane i przy okazji dokładniejsze :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO