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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 24 maja 2025, o 12:31


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
    Autor Wiadomość
    PostNapisane: 5 sty 2015, o 17:15 
    Offline
    Użytkownik

    Dołączył(a): 27 sty 2014
    Posty: 73
    Pomógł: 0

    Witam,

    Mam problem z wyświetlaniem pomiaru odległości który wykonuje za pomocą czujnika SHARP podłączonego do mikrokontrolera Atmega16. Pomiar w postaci wartości ADC wysyłany jest przez RS232 do aplikacji napisanej w C# otóż pomiar wykonuje na odległości od 40[mm] do 310[mm] wartości ADC z Atmega16 i odpowiadająca im wartość odległości mam zapisane w tablicach. Wszystko jest w porządku z pomiarami od 310[mm] do 100[mm] tak jak na zdjęciu poniżej:

    https://www.dropbox.com/s/8pvtn6xpq2qv1b3/20150105_164455.jpg?dl=0

    niestety gdy pomiar wyniesie poniżej 100[mm] dane wyświetlane w aplikacji zaczynają "szaleć" coś jak na zdjęciu poniżej:

    https://www.dropbox.com/s/uj5811adg0bmb7f/20150105_164515.jpg?dl=0

    Poniżej wklejam fragment kodu z C# za pomocą którego wyświetlam dane:

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


    Czy może ktoś się spotkał z podobnym przypadkiem? Czy jest to problem z kodem w C# czy może w programie w mikrokontrolerze? Do wysyłania danych korzystam z bibliotek Mirka. Będę wdzięczny za wszelką pomoc.

    Pozdrawiam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 sty 2015, o 17:49 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 28 maja 2012
    Posty: 471
    Lokalizacja: ZGY/ZS
    Pomógł: 30

    To co pokazałeś to tylko odebranie i wyświetlenie informacji, nie wykonujesz tutaj żadnych obliczeń. Pokaż jak w uC przeliczasz wartość ADC na dane końcowe i sposób konstruowania i wysyłania ramki.

    Najprawdopodobniej nie wykrywasz poprawnie początku i końca ramki i dane są źle interpretowane (wartości przypisywane do nie swoich pól)

    _________________
    eDiyCraft.blogspot.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 sty 2015, o 19:55 
    Offline
    Użytkownik

    Dołączył(a): 27 sty 2014
    Posty: 73
    Pomógł: 0

    Poniżej kilka fragmentów kodu z uC
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 sty 2015, o 20:35 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 28 maja 2012
    Posty: 471
    Lokalizacja: ZGY/ZS
    Pomógł: 30

    Na podstawie screenów widać, że to co wysyłasz to nie zawsze jest odczytywane w całości w C#

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

    a w tym czasie dane jeszcze lecą z uC. Nie zdążył wysłać całości, więc odczytałeś część, a reszta trafiła do bufora wejściowego C#.
    Jeśli wykonasz kolejny odczyt danych to tych informacji odczyta więcej (spóźnione dane) niż oczekujesz i stąd ten bałagan.

    Zdefiniuj sobie proste pola start/stop ramki i będziesz mógł wtedy zweryfikować czy ramka nadleciała poprawnie. Może to wyglądać np.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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

    _________________
    eDiyCraft.blogspot.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 sty 2015, o 20:41 
    Offline
    Użytkownik

    Dołączył(a): 27 sty 2014
    Posty: 73
    Pomógł: 0

    Hmm jeżeli chodzi o mikrokontroler to rozumiem ale jak to sprawdzić w C# kodem który podesłałeś to nie łapię za bardzo :(

    ------------------------ [ Dodano po: 7 minutach ]

    Chociaż chwila chyba już złapałem o co chodzi ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 sty 2015, o 20:53 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 28 maja 2012
    Posty: 471
    Lokalizacja: ZGY/ZS
    Pomógł: 30

    Próbuj próbuj, jak coś to pomogę.

    _________________
    eDiyCraft.blogspot.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 sty 2015, o 21:08 
    Offline
    Użytkownik

    Dołączył(a): 27 sty 2014
    Posty: 73
    Pomógł: 0

    Jest postęp już poniżej 100 mi wyświetla dane ;) ale nie jestem przekonany czy dobrze napisałem kod w C#:

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


    No i wyświetla mi teraz jeszcze te dwa znaki "<>"



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 sty 2015, o 21:36 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 28 maja 2012
    Posty: 471
    Lokalizacja: ZGY/ZS
    Pomógł: 30

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


    zdebuguj sobie taki kawalek kodu "na sucho" i zobacz ja to działa

    Dodam, żebyś dane z portu dopisywał do zmiennej dane zamiast inicjalizować ją zawsze na nowo, wtedy będziesz "obrabiał" wszystkie dane które nadlecą (będzie ciągłość zamiast sieczki)


    Autor postu otrzymał pochwałę

    _________________
    eDiyCraft.blogspot.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 sty 2015, o 20:13 
    Offline
    Użytkownik

    Dołączył(a): 27 sty 2014
    Posty: 73
    Pomógł: 0

    Dzięki wielkie za pomoc :) działa jak trzeba :) Trochę to buforowanie zwolniło mi odczyt tych pomiarów ale po zastosowaniu opóźnienia za pomocą Timera w kodzie mikrokontrolera + twoj kod rozwiązał całkowicie problem :) Jeszcze raz WIELKIE DZIĘKI :)



    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: 9 ] 

    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:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO