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



Teraz jest 11 sty 2025, o 12:47


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 2 lip 2014, o 00:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

Zastanawiam się jak wyswietlić na lcd jakiś napis przesłany przez RS 232 nadany prze program napisany w C#

Załużmy ze w programie C# jest taki kod:

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 AVR taki:

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


Na LCD pojawia się jeden i ten sam jakiś chiński znaczek...
Gdy w C# jest :
Składnia: [ Pobierz ] [ Ukryj ]
język csharp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

To wtedy wyświetla sie odpowiedni znak... ale nie cały string tylko ostatni wysłany znak.

W linicje a = uart_getc(); pojawiasię ostrzezenie:
Kod:
../TERMINAL/terminal.c: In function 'uart_gets':
../TERMINAL/terminal.c:75:4: warning: implicit declaration of function 'uart_getc' [-Wimplicit-function-declaration]

Lecz znika ono z każdym razem gdy jeszcze raz skompiluje program.
Jak prawidłowo odebrać string? Myślałem tak by w programie w C# wysyłany był string z dołączonym znakiem "\r". Po stronie AVR byłaby funkcja, która używałaby funkcji uart_getc(); i zapełniała tablice, , która następnie byłaby wyświetlona na lcd poprzez lcd_str(). Do czasu gdy pętla nie natrafiłaby na znak końca linii. Tak to zrobiłem jednakże nie chce to poprawnie działać



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2014, o 01:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sty 2013
Posty: 272
Pomógł: 3

Krzaczki? Zacznij od sprawdzenia prędkości, czy wszystko ustawiłeś jak należy.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2014, o 02:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

Jeśli chodziło prędkość to jest ona ustawiona prawidłowo. komunikacja w normalnym terminalem przebiega prawidłowo.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2014, o 09:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 581
Pomógł: 17

Po pierwsze, z tego co kojarzę funkcja :
uart_getc();
Jest funkcją 'blokującą' czyli więc jeśli coś ci się posypie w twojej aplikacji okienkowej, to program na AVR nie pójdzie dalej, bo będzie cały czas oczekiwał na znak, który nie nadejdzie.

Najlepszy sposobem jest użycie buforu cyklicznego(jest o nim w BB) i wtedy elegancko program na AVR może robić inne rzeczy, a gdy pojawi się jakiś znak, to wtedy go obsłużyć i wsyłac na LCD ;-)

Przecież w BB jest opisany ładnie bufor cykliczny, to czemu z niego nie skorzystać :> ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2014, o 10:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

witam, włąsnie uzywam biblioteki mirka z BB, funkcja uart_getc() jest chyba czescia tego bufora tak ?

W skrócie program sypie się tylko w tedy gdy w kodzie w C# jest dopisek "\r" w funkcji wysyłającej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2014, o 11:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

do biblioteki z książki (mkuart.c) do przerwania odpowiadającego za odbieranie danych dodałem:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


a do funkcji "składającej stringa" dodałem tez ifa:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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



dalej mi nei wyswietla stringa, ale po klikaniu przycisku "wyslij" w programie, pokzuje mi teraz na lcd losową literę z mojego wisanego słowa - za kazdym razem gdy nacisnę "wyslij". :/


EDIT:

cos drgneło.

w fukncji uart_gets zamiast lcd_str() dałem lcd_char, teraz wyswietla mi cały tekst ale gdy jets długi np powyzej 2 znaków to dzili mi ten wyraz: pierwsza połowa po pierwszym wcisnieciu "wyslij" druga połowa po drugim wciśnięciu. I nakoncu dodaje mi jakis krzaczek. Widze ze długość wyświetlanego za pierwszym rzem wyrazu zalezy od tego jaka wartosc cnt wpisze do petli for np for(cnt=0;cnt<20;cnt+++) to wtedy meisci sie nieco dłuzysz tekst, ale to nie ejst tekst 20 - znkaowy.. :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2014, o 12:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 581
Pomógł: 17

Jak chcesz już brnąć dalej tym dziwnym sposobem, to możesz zrobić sobie to tak:

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

Ale było naprawdę mnóstwo poradników w jaki sposób parsować stringi..
Pooglądaj je, tam jest naprawdę fajnie opisane w jaki sposób radzić sobie z odbiorem stringów;-)
A nie taka kaszana którą tu robimy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2014, o 13:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

szukam szukam,, ale jak powiem ze nie moge znalesc to wiecie... podobno w greenboku o tym pisze. Nie mam go niestety :/

Mi tez sie wydaje dziwny sposób ale poki co nie wiem jak to rozwiazac i naczej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2014, o 15:21 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Po pierwsze: z każdym obrotem pętli 'for' zwiększasz wartość cnt o 2, tym samym tablica 'buf' ma wypełniony co drugi element.
Po drugie: gdzie jest zakończenie CStringa w tablicy 'buf'? Czy jest wysyłany przez 'serialport1.Write(kontrolka.Text);'?

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2014, o 16:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 mar 2013
Posty: 333
Pomógł: 10

wysylam tak:

serialport1.write(element_tekstowy + "\r");

powinienem zmienic na "\0" ?


a co do "cnt" masz racje, jak mogłem to przeoczyc..



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 10 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