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



Teraz jest 18 kwi 2024, o 18:02


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 19 ] 
Autor Wiadomość
PostNapisane: 16 maja 2015, o 11:09 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Witam wszystkich ;)
Prosiłbym o sprawdzenie mojego kodu.
Zbudowałem prostą aplikację w c# wysyłającą na μC dane i odbierającą je z niego.
Jest to wstęp do mojego projektu, w którym mam zamiar sterować kilkoma serwami z poziomu aplikacji w c#. Wprowadzając dane w aplikacji mam zamiar sterować wyhyleniem kolejnych serw podłączonych do μC.

Wstępnie postanowiłem wykonać samą komunikację oraz sprawdzić ją na diodach.
Korzystam z "Mirkowych" funkcji do obsługi UART.

Może przedstawię moje wypociny. (choć trudno nazwać je w 100% "moimi")
Aplikacja:
Obrazek

(Button2 ma za zadanie wysyłać wprowadzone do labelka dane)

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

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

funkcja uartgetc() (zamieszczona w uart.c)
Edit.
W sumie może nie będę jej umieszczać, ze względu na P.Mirka, nie prosił mnie o to bezpośrednio ale chyba tak będę mieć czystsze sumienie ;)
Ogółem problem polega na tym, że moje diody wcale nie zmieniają swojego stanu. diody są podpięte prawidłowo (sprawdziłem zwykłą funkcją PORTB ^=LED1)
Inne funkcje działają poprawnie.
Np. gdy wysyłam z mikroklocka wartość int a=10; poprzez uart_putint(a,10); to w textboxie pojawia mi się ta wartość.
Co prawda... Gdy na przemian wysyłam:

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


To w textboxie wyświetla się raz 237 potem 10 potem 237 potem 10 (to byłoby ok) a tu nagle pojawia się 7! i dalej...10...237...10...
Jak to wyjaśnić?

No i główny problem, ten odbiór danych przez mikroklocka..
Poradzi ktoś?



Ostatnio edytowano 17 maja 2015, o 10:52 przez Czapek, łącznie edytowano 4 razy

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

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

1.. prosze o czytanie zasad działów , a nie pisanie gdzie się podoba ... topic5809.html
2.. Pisałem o tym na forum i ja i kolega developer ....

zanim ci podpowiemy ... zapoznaj się z:

---->> DLA C++
topic100.html
topic97.html

--->> DLA C#
topic93.html
topic93.html#p42386
topic2232.html

w obu przypadkach zasada jest taka sama...
podejrzyj sobie

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 maja 2015, o 15:01 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Kurde, sorka ^^ Tak przeleciałem działy, zauważyłem ze ktoś pisał i o c# i o c na mikroklocu i uznałem, że można ;p
Tak czy siak sporo szukałem, być może i na jeden z tych zamieszonych przez Ciebie linków już się natknąłem, dzięki ;)
Poczytam dokładnie to co zamieściłeś i dam znać jakie wyniki ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 maja 2015, o 16:51 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

No dobra, sprawdziłem dokładnie kod, który umieszczony jest tutaj:
topic2232.html
w sumie na bazie tego budowałem apkę w c#.
No i co... nie działa odbiór danych.
Wysyłanie bezpośrednio z mikroklocka do apki działa. Wyniki są wyświetlane.
W drugą stronę już nie działa...
Znając życie mam jakiś prosty błąd którego nie widzę ;/

Edit.
Sprawdzam też apkę która jest zamieszona w całości w powyższym temacie.
Wyświetlanie danych w danej aplikacji również mi nie działa. Gdy wysyłam bezpośrednio z mikrokontrolera -> dane są wyswietlane (co prawda krzaczki ale jednak).
Gdy robię pętlę tzn wysylam na mikrokontroler i bez żadnych przeróbek wysyłam z powrotem do aplikacji to nie wyświetla.

I co dziwne, w mojej aplikacji jak wysyłam tak jak wyżej - bezpośrednio z mikrokontrolera na aplikację to nie ma krzaczków - są ładnie wyświetlone dane.

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


a w przypadku bezpośredniego z mikroklocka na aplikację:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


W tym drugim przypadku CZASEM zamiast 7000 wyświetla mi się 0. ( w mojej aplikacji)

Edit.
Czy jest mozliwość przeniesienia posta do właściwego działu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2015, o 10:16 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Sprawdziłem teraz samą apkę (zwarłem Tx z Rx w ft232).
Działa bez zarzutów.
Więc problem tylko z kodem na µC. µC odbiera jedynie zera.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2015, o 10:50 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Taktowanie wewnętrznym oscylatorem 8Mhz.
W przypadku, gdy wysyłam na sztywno wartości z mikroklocka na aplikację->odbiór jest bezproblemowy.
mam na myśli:
Składnia: [ Pobierz ] [ Ukryj ]
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: 17 maja 2015, o 10:58 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Już to poprawiłem ;)
Był to nieznaczny błąd w kodzie w c#.

Nie wiem, może to ma znaczenie. pracujuę na atmedze8..
Ale wydaje mi się, ze gdyby miało to znaczenie to w terminalu odbierałbym zawsze krzaki..

Edit

Tak dla sprawdzenia podpiąłem kwarc 16Mhz.
UBRR liczę tak jak P. Mirek pokazał:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

I działa wciąż tylko wysyłanie "sztywnych" wartości z mikrokontrolera na aplikację.
Gdy próbuję odebrać dane, odbierane są tylko zera, nie ważne czy używam putty czy swojej aplikacji.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2015, o 11:33 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

W sumie usunąłem wszystko co związane z RS485.
Podesłać Ci cały projekt? Nie chciałbym tu umieszczać całych bibliotek P.Mirka.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2015, o 11:53 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Nie trzeba... Sprawdziłem wszystko raz jeszcze.
Aż głupio przyznać.
Przez zwykły pośpiech usunąłem linijkę odpowiadającą za ustawienie bitów UCSRB w przypadku gdy nie używamy RS485.
W związku z czym były problemy z odbiorem danych przez mikrokontroler.

Dzięki Antystatyczny, pytając o bibliotekę obsługi RS485 zwróciłeś moją uwagę właśnie na sprawdzenie tego.

I dzięki SunRiver, duuużo poczytałem, a nie tak na gotowca ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 maja 2015, o 12:05 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Do najlepszych na pewno nie należę ;)
Ale cieszę się, że mogę wreszcie ruszyć dalej z projektem, kolejny mały kroczek ;)
Pozdrawiam gorąco!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 cze 2015, o 21:34 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Hej.
Nie wiem czy warto zakładać nowego posta ;)
Przeleciałem filmiki z linku:
http://mirekk36.blogspot.com/2015/01/wi ... start.html
No i napotkałem mały problem...
Otóż komunikacja po uarcie działa bez zarzutów ale tylko jeśli wykorzystuję putty. Moja aplikacja natomiast już robi jakiś problem...
(Do tej pory wszystko fajnie działało, dopiero jak przerzuciłem się na poniższy kod - coś się posypało- ale tylko dla mojej aplikacji, w putty działa..)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


I dla lepszej analizy.
Poniższy kod działa:

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


Dlaczego dalej drążę?
Bo zależy mi na przesyłaniu stringów a nie pojedynczych znaków. W dalszej części mam zamiar przesyłać stringi zawierające dane liczbowe do sterowania serwami.

edit. Oczywiście korzystam z bibliotek Pana Mirka.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 cze 2015, o 08:51 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Git, znalazłem.
Problem polegał na braku znaku \n\r. Wystarczyło w apce po wysłanym ciągu wysłać Environment.NewLine i wszystko działa ;)



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

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

otóż to ... program zwykle oczekuje końca i tu ja np stosuję CR/LF jednocześnie :)
dlatego też polecałem poczytać oczywiście bo zabawa jest naprawdę fajna z C# i mikroklockiem
jak chcesz na szybko na kilku komach pracować zassaj Debunala z mojej strony to taki dziwny terminal :)


Autor postu otrzymał pochwałę

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2015, o 17:12 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Największa radość zawsze gdy zaczyna działać jak należy ;)
Drążę temat dalej, jak na razie udało się ruszyć przerwania na rf12b, dioda świeci się gdy dojdzie JAKIKOLWIEK sygnał. Teraz kwestia zbadania dlaczego sygnał nie jest taki jaki chcę.
Prosty if pozwala mi na sprawdzenie czy dany string jest taki jaki wysylam. Gdy jest taki sam ma zapalić diodę. Nie zapala.
Rozkminiam, może uda się bez pomocy. Jak nie uda się to będę precyzować ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2015, o 22:37 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

No i męczę się od jakiegoś czasu.
Przybliżę sprawę.
Z aplikacji wysyłam znak "a" ( po prostu wpisuje go z klawiatury) Jest on zakończony znakiem enter (konkretnie Environment.NewLine)
Odbierane jest to przez pierwszy mikrokontroler i bez żadnych zmian wysyłan przez rfm12b do drugiego mikroklocka. Sprawdzam tu diodą czy:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W tym miejscu wszystko się zgadza. Dioda zapala się.
Jednak wysyłając dane z pierwszego do drugiego mikrokontrolera sygnał jest odbierany, ale nie dokładnie taki jak wysłany? Sprawdzam to znów prostym warunkiem:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Dioda nie zapala się. Niezgodność danych. Zastanawia mnie to, co dokładnie zostaje wysłane funkcją send() (z bibliotek do RFM12 Pana Mirka).
Gdybym miał możliwośc obserwacji tego ;D (jakiś LCD czy coś)

Na dziś mam dość. Jutro może coś wymyślę. Jakby ktoś miał ochotę przeanalizować moje wypociny, chętnie pokażę kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2015, o 22:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

A nie powinno się znaku porównywać w ten sposób ?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2015, o 11:22 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

Próbowałem i tak i tak. Nie działało.
W dalszym celu mam porównywanie stringów, a potem porównywanie danych liczbowych uzyskanych z zamiany stringów na liczby przy pomocy atoi();
Dlatego też takie porównanie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2015, o 14:04 
Offline
Użytkownik
Avatar użytkownika

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

Sprobuj tak w miejscu gdzie odbierasz dane z RFM

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


Autor postu otrzymał pochwałę

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2015, o 16:29 
Offline
Użytkownik

Dołączył(a): 25 mar 2015
Posty: 105
Pomógł: 2

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

Rozwiązało problem.



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

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