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 6 kwi 2025, o 20:37


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
    Autor Wiadomość
    PostNapisane: 22 kwi 2014, o 20:11 
    Offline
    Użytkownik

    Dołączył(a): 05 lip 2013
    Posty: 26
    Pomógł: 0

    Witam!
    Piszę aplikację w C# która służy do komunikacji PC-uC. O ile wysyłanie danych nie stanowi problemu, o tyle odbiór już jak. Z mikrokontrolera wysyłam wartości ADC ramka wygłąda tak: "X(wartość1)X(wartość2)X(wartość3)". Dane są przez chwile odbierane poprawnie, po czym za chwile jest odbierana tylko jakaś część ramki i tak w kółko. Dodatkowo czas odświeżania jest dosyć wolny(ponad 1s).
    W Putty ramka jest odbierana prawidłowo przez cały czas.
    Czy ktoś wie w czym leży problem i jak to naprawić?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 kwi 2014, o 20:43 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 maja 2012
    Posty: 174
    Lokalizacja: Gliwice
    Pomógł: 19

    Spróbuj zmienić ramkę wysyłaną do PC, dodaj na końcu jakiś znak np '$' i w aplikacji na PC zrób coś takiego

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


    edit: Łatwiej będzie jak pokażesz kod albo chociaż jego fragment


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 kwi 2014, o 21:01 
    Offline
    Użytkownik

    Dołączył(a): 05 lip 2013
    Posty: 26
    Pomógł: 0

    Wielkie dzięki sz4t4n!
    Teraz wszystko działa jak należy :D
    A ja przez tyle godzin kombinowałem i nic :(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 mar 2015, o 16:41 
    Offline
    Nowy

    Dołączył(a): 15 mar 2015
    Posty: 9
    Pomógł: 0

    Wątek stary, ale mam nadzieję że ktoś tu jeszcze zaglądnie.

    Mam dokładnie ten sam problem jak kamil7417 - przynajmniej na to wygląda. Kod programu który tworzę, jest oparty o wzór na stronie http://forbot.pl/blog/artykuly/programo ... rem-id1122. Niezależnie od mojego programu ściągnąłem ten dostępny na stronie (pisany przez autora) i błąd w nim również występuje. Program szatkuje przychodzące dane. Wyświetlając wartość maksymalną z ADC powinienem w każdym cyklu otrzymać wartość 1023 jednak wynik jest taki:
    Obrazek
    W ww programie wartości są dopisywane do ReachTextBoxa więc można się domyślić co przyszło, jednak dalszego kodu o takie wyniki nie będzie można budować.

    Pytanie moje do tego wątku jest takie: Co zrobić po stronie programu aby odczyt działał w sposób prawidłowy:?: Dlaczego putty odczytuje wartości w sposób prawidłowy:?:

    Nie chciałby po stronie uC dopisywać dodatkowych znaków gdyż za chwilę będę chciał dokonać implementacji jakiegoś przemysłowego protokołu i dopisywanie czegoś może źle wpływać na całość.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 mar 2015, o 19:44 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 12 maja 2014
    Posty: 1089
    Pomógł: 34

    A Czym konczy sie Twoja ramka z uC?


    Sent from my iPhone using Tapatalk

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 mar 2015, o 20:11 
    Offline
    Nowy

    Dołączył(a): 15 mar 2015
    Posty: 9
    Pomógł: 0

    Nie bardzo wiem jak odpowiedzieć na twoje pytanie jednak zasugerowałem się twoim zapytaniem o zakończenie ramki w uC i stwierdziłem że po raz kolejny zrewiduję program.
    Do czego doszedłem:
    Korzystając z dostępnych materiałów (www/YT) czyli kursów Mirka :D , mam zamiar wysłać jakiś string. Poniżej zamieszczam funkcje z ich "składowymi" wycięte z całości mojego kodu.
    Kod:
    void uart0_putc(unsigned char data)
    {
       /* Wait for empty transmit buffer (czekanie na opróznienie bufora) */
       while( !( UCSR0A & (1<<UDRE0)) );
       /* Put data into buffer, sends the data (wrzucenie danych do bufora, wysłanie danych)*/
       UDR0 = data;
    }

    void uart0_puts(char *s)
    {
       while(*s)uart0_putc(*s++);
    }

    uart0_puts("Hello World \r\n");
     

    Oczywiście wynik w putty jest prawidłowy, natomiast program widzi to w zupełnie inny sposób z tym że przy wysyłaniu łańcucha z parametrami "\r\n" widać prawidłowość jak na rysunku poniżej.
    Obrazek
    Jak widać jest pewna prawidłowość gdyż w każdym z wysłanych stringów pojawia się dodatkowy znak spacji przesunięty o jeden znak. Nie bardzo wiem czym to jest spowodowane.
    Czy jeszcze jakoś mogę pomóc w diagnozie mojego problemu?



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

    Dołączył(a): 12 maja 2014
    Posty: 1089
    Pomógł: 34

    Ok a teraz jak wyglada Twoj program w C# :D ?

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 mar 2015, o 20:43 
    Offline
    Nowy

    Dołączył(a): 15 mar 2015
    Posty: 9
    Pomógł: 0

    OK :D i tu nastąpiło drugie z mojej strony "zerżnięcie" :D
    http://forbot.pl/blog/artykuly/programo ... rem-id1122

    Program jest na tej stronce widoczny w całej swojej okazałości z jedną małą poprawką wprowadzoną z mojej strony:
    Kod:
    port.ReadByte().ToString("X")

    zamieniam na poniższy aby dopasować format danych
    Kod:
    port.ReadExisting()

    więc cała linijka w tym miejscu wygląda następująco
    Kod:
    DodajKolorowy(rtbTerminal, port.ReadExisting() + " ", System.Drawing.Color.Blue);



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 mar 2015, o 22:40 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 12 maja 2014
    Posty: 1089
    Pomógł: 34

    Zamien na

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


    A sugeruje zmiane bo na swoim uC masz
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Co sprawia ze wysylasz linie :D

    Zrodlo https://msdn.microsoft.com/en-us/librar ... 10%29.aspx

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 mar 2015, o 21:36 
    Offline
    Nowy

    Dołączył(a): 15 mar 2015
    Posty: 9
    Pomógł: 0

    Super :) W przypadku łańcucha znaków pomogło. Wracając jednak do początku to problem z pomiarem z ADC dalej występuje. Zamiana na ReadLine nie działa, gdyż program się "wyburacza".

    Ale po koleii:
    Funkcja wykonująca pomiar:
    Kod:
    uint16_t pomiar (uint8_t kanal)
    {
       //Ustawieniie kanalu do odpytania odbywa sie na 3 najmłodszych bitach rejestru MUX
       //Iloczyn logiczny (maskowanie) zeruje trzy najmłosze bity, a suma logiczna ustawia kanał do "odczytu"
       ADMUX |= (ADMUX & 0b11111000) | kanal;
       ADCSRA |= (1 << ADSC);   // start konwersji

       while (ADCSRA & (1 << ADSC) );

       return ADCW;   //ADCW - funkcja pozwalająca na odczyt dwóch bitów z danymi (odpowiednio przekonwertuje  porozrzucane bity)
    }

    Deklaracja zmiennej przechowującej wynik z pomiaru:
    Kod:
    uint16_t WynikADC=0;
    WynikADC = pomiar (PA7);

    Wysłanie:
    Kod:
    uart0_putlong (WynikADC, 10);
    void uart0_putlong (uint32_t liczba, uint8_t radix)
    {
       char buf[17];
       ltoa(liczba, buf, radix);
       uart0_puts (buf);
    }


    uart0_puts tak jak w poprzednim poście.

    Jak zatem to odczytywać w C# :?: Poprzednio odczytywałem ReadExisting(), ale w takiej konfiguracji występował problem...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 mar 2015, o 21:48 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 12 maja 2014
    Posty: 1089
    Pomógł: 34

    Dodaj sobie uart0_puts(buf); uart0_puts('\r\n'); I masz kazdy wynik jako nowa linie?


    Sent from my iPhone using Tapatalk

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 24 mar 2015, o 19:05 
    Offline
    Nowy

    Dołączył(a): 15 mar 2015
    Posty: 9
    Pomógł: 0

    Nie miałem jeszcze okazji przetestować. Zakładam jednak że zadziała.

    Zastanawia mnie jednak dalej dlaczego putty wyświetla to w sposób prawidłowy. Zmian po stronie uC nie muszę robić a on wie jak to wyświetlić.

    Dzięki RafPe za pomoc i chęci. Pozdrawiam.



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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


    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