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



Teraz jest 8 sty 2025, o 07:03


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