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



Teraz jest 25 lis 2024, o 21:42


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 21 lut 2013, o 15:57 
Offline
Użytkownik

Dołączył(a): 19 lut 2013
Posty: 50
Pomógł: 0

Witam, chciał bym na początek przesłać do termianala cały wyraz w postaci łańcuchu znaków string, następnie nauczyć się odebrać go z komputera, a następnie na bierząco odczytywać zmieniającą się w czasie wartość zmiennej.

Zbieram informacje z całego internetu o przesyłaniu, odbieraniu stringów, w miarę to rozumiem ale bez pomocy nie dam rady niestety :?

To na początek tylko wysłać wyraz, w pętli, funkcje wysyłającą sobie później stworzę. Mam tyle kodu:

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


Przed wyrazem występuje mnóstwo krzaków,

<0><0>ÇťgöŻ×˙}Ů÷ýŮćîż·~¶?Üďň33żźV?^ťź}—¶®ßó_ü^ůnĽű5ßCd{ÂŻ7|uřůźľ»˙ýşîűí_ďŻ:7OýăyçĎçöŢßďź#Óż˙–KŻ·ý?×Ůšď˝ţďÓ˙sÇżűÖV˙ŻűÝŢŻ\çČí÷î[ż‡˝Ĺß«˙ťý:ż˙Ţ÷Köľäű˙ţgÜşűŇă˙˜Ď+WmOqjľkľ¸s§ßlÝ߃O»ýŰoo˙zŻfzsź˙_Ţý»ëkż–×–ővuz·˝ůďađő)ţ]?wŻóîU~ţßŢ:ô˙ݶ)ß˙É?Ö[§ďd˙wyraz<0><0><0><0>ÇťgöŻ×

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lut 2013, o 16:47 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27313
Lokalizacja: Szczecin
Pomógł: 1041

Posłuchaj - popełniasz tak ogromną ilość błędów i to jeśli chodzi o totalne PODSTAWY że na prawdę - hmmm zacznij może od książki. Bo tak na szybko kilka pytań do ciebie:

1. po co ci volatile tutaj ??? wiesz do czego to jest ? (raczej na pewno nie wiesz) :(

2. co to jest ?

Kod:
PORTD = TXD;        //pullup na TXC


???? nie dość że to nie żaden pullup , nie dość że nie działa w ogóle tak jak chcesz ? to jeszcze w ogóle zastanowiłeś się jak działa UART ? i czy potrzebny jest pullup ? ...

3. odpalasz przerwania których nie ma - więc masz fantomowe przerwania i procek bryka wciąż na resecie

4. co to jest ???

Kod:
if(wyraz[znak] != '\n')


:( spróbuj chociaż w dwóch zdaniach wyjaśnić co tu robisz :( ???

-------------------

nie dziw się więc że to ci nie działa - to NIE MOŻE działać .... po prostu skoczyłeś na zbyt głęboką wodę - nie znając kompletnie podstaw C ani obsługi UART'a .... program jest całkowicie źle napisany - nie to że tam coś jest źle - wszystko jest źle

tzn no może poza jednym tym razem - samą inicjalizacją UBRR

------------------------ [ Dodano po: 1 minucie ]

więc widzisz pomóc można - ale tu trzeba byłoby zacząć w ogóle od podstaw wszystko tłumaczyć ... a nie zwrócić uwagę na jakiś tam drobny błąd.

Nie traktuj tego jako docinki - po prostu spróbuj mniejszymi kroczkami - będzie łatwiej bo podpowiem że wysyłanie to jeszcze nic - ale przy takim podejściu zanim zrobisz prawidłowy odbiór stringów na przerwaniach .....

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lut 2013, o 17:19 
Offline
Użytkownik

Dołączył(a): 19 lut 2013
Posty: 50
Pomógł: 0

Braki mam bo z internetu się uczę, kupię książkę to pewnie uzupełnię wiedzę.

1. No tak to nie jest potrzebne, wcześniej próbowałem z przerwaniami i zostało poprostu.
2. Czytałem, że jeśli ustawi się sam PORTx, to pin podłączony jest jako wejście przez wewnętrzny rezystor do VCC, czyli pull up, no ale nie wiem może źle czytałem.
3. Wcześniej próbowałem na przerwaniach odbierać znak i wysyłać znaki, nie sądziłem że jak są włączone to robią taką sieczkę z procesorem.
4. Czytałem, że funkcja wczytuje znaki, aż do wystąpienia '\n'.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lut 2013, o 17:57 
Offline
Użytkownik

Dołączył(a): 27 lis 2012
Posty: 291
Pomógł: 6

Po pierwsze musisz mieć książkę Mirka.
Najważniejsze żeby dobrze zrozumieć RS2332. Dla mnie UART też był trudny. Efektem tego były te potworki na forum.
topic1944.html
topic2294.html
topic2189.html
topic1920.html
Podobne rzeczy piszę o następnym temacie I2C
Radzę przejrzeć.



Ostatnio edytowano 21 lut 2013, o 18:04 przez mg101, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lut 2013, o 18:03 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

2. To prawda, ale nie potrzebujesz nic robić z TXD i RXD, bo zaraz masz USART_init, a tam aktywujesz te linie, a to oznacza, że USART przejmuje nad nimi kontrolę i to co jest w DDRD i PORTD dla tych linii jest nieistotne.
4. Stringi są zakończone '\0' i to sprawdzaj.
Odnośnie programu:
- volatile niepotrzebne
- while(warunek); kończy pętle i nie wiem po co tam masz klamry {}. Chyba dla zmylenia przeciwnika ;)
- w warunku z kolei by się przydały, bo zmienna znak się przekręci i wyślesz jeszcze raz wyraz
Wprowadź poprawki i powinno działać.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2013, o 16:47 
Offline
Użytkownik

Dołączył(a): 19 lut 2013
Posty: 50
Pomógł: 0

Dzięki za pomoc ;)
Cytuj:
Nie traktuj tego jako docinki - po prostu spróbuj mniejszymi kroczkami - będzie łatwiej bo podpowiem że wysyłanie to jeszcze nic - ale przy takim podejściu zanim zrobisz prawidłowy odbiór stringów na przerwaniach .....


Kiedy staram się opanować jakiś temat, robię to właśnie krok po kroku, a kiedy coś wyjdzie jest satysfakcja, wtedy robie krok do przodu, czyniąc postęp.

Wracając do tematu, wysyłam stringi, ale udaje mi się to tylko w pętli nieskończonej, kiedy próbuję wysłać znak w funkcji main, na terminalu nic się nie pojawia, jaki może być tego powód?

Funkcja wysyłająca wysyła jeden znak, resztę wysyła przerwanie, wzoruje się na pewnej stronie. Dodałem w związku z tym volatile ;)

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: 24 lut 2013, o 21:57 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Kod jest dobry, więc sprawdź MCU Clock Frequency w ustawieniach projektu.
- volatile nie jest potrzebne. Ten przedrostek używa się dla zmiennych, które zmieniają się w przerwaniu, a używane są również w gdzie indziej. Chodzi o to, że procesor jak sprawdza jakąś zmienną np. porównując ją z liczbą to wczytuje ją z pamięci do rejestrów. To można zobaczyć podglądając kod w asemblerze i jak w przerwaniu ta zmienna się zmieni to w innym miejscu nie zostanie to zauważone, bo zmienna została wczytana do rejestru i kompilator uznał, że niech tam sobie ciągle siedzi, bo nie potrzeba jej co chwilę odczytywać. Zatem w rejestrze jest inna wartość a w pamięci inna co jest niedobre. Jak użyjesz volatile to kompilator nie decyduje że może sobie zmienną raz wczytać do rejestru tylko tak tworzy kod, że jest ona wczytywana za każdym razem.
- możesz tworzyć takie stringi "jakiś wyraz\r" lub "jakiś wyraz\r\n" nie potrzeba tego rozbijać jak ty to robisz

_________________
Dragonus Cracovus: Biomagia



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

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