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



Teraz jest 4 cze 2025, o 03:36


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 27 mar 2013, o 14:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 mar 2013
Posty: 236
Lokalizacja: Warszawa
Pomógł: 5

Witam!

Nie mogę ogólnie nic zapisac do bufora przy uart. Program:
Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W terminalu wpisuje jakiis lanuch np. "co jest". Chciałbym go zapisac do bufora i chciałbym porównywać dwa stringi, ale nie wiem jak zrobić żeby działało. dzęki za pomoc.
Dla zywklego char dziala dla tablicy char juz nie, jakby tam nic nie było.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 mar 2013, o 14:28 
Offline
Moderator
Avatar użytkownika

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

Ja polecam ci jednak PRZYNAJMNIEJ takie podejście do obsługi UART - jeśli chodzi o przerwania - jakie masz zaprezentowane w książce:

http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

bo niestety to - co tu próbujesz zrobić woła o pomstę do nieba chociażby z uwagi na jedną wręcz TRAGICZNĄ rzecz, podkreślam TRAGICZNĄ - czyli sam fakt że w przerwaniu używasz

_delay_ms(1000);

ale też samo podejście do prób porównywania stringów - wręcz przenoszenia programu do przerwania - jest chybionym pomysłem. W ten sposób zawsze będziesz miał problemy - szczególnie z odbiorem danych np z terminala....

na naszym forum już było kilka prób walki i to w miarę udanych aby na podstawie chociaż tylko tej książki zrobić sobie odbiór stringów - i nawet jeden przykład kolegi zdaje się ukasz całkiem niedawno - wczoraj czy przedwczoraj - sprawdź proszę.

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

o np tutaj - masz link:

post32037.html#p32037

i tą drogą idź korzystając normalnie z buforów cyklicznych i obsługi przerwań jak w książce - a całą resztę próbuj przynajmniej w taki sposób. Jak najszybciej uciekaj z takimi pomysłami jak wyżej z przerwań UART'a :(

_________________
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: 27 mar 2013, o 14:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 mar 2013
Posty: 236
Lokalizacja: Warszawa
Pomógł: 5

Dobra, będę pamiętał!

Dzięki, może będzie działało, musze przeanalizowac tylko.

Niby działa ale mi dane uciekają i nie wiem czemu. Kod wyglada teraz tak:
Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Może żle ziinicjalizowałem uarta. Skopiowałem cala inicjalizacje z noty atmegi i wstawilem zgodnie z nota wartosc UBRR.

Dobra już działa całość jak zamierzałem od wczoraj, dzięki, teraz wiem jak korzytsac z przerwań, wielkie dzieki.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 mar 2013, o 18:45 
Offline
Nowy

Dołączył(a): 26 mar 2013
Posty: 5
Pomógł: 1

Jeśli chodzi o obsługę UART to musisz w pętli while pobierać ciągle jeden znak do zmiennej char. Potem musisz sprawdzić w if czy coś w tej zmiennej jest. Jak powszechnie wiadomo, bufor UART jest cykliczny, także jeśli odczytałeś z niego znak, automatycznie ten znak się z niego usunął i nastąpiło przesunięcie. Piszesz więc instrukcje do if dla prawdy która zapisuje zmienną ze znakiem do tablicy. Potem inkrementujesz zmienną indeksu tablicy. Teraz piszesz warunek który sprawdza czy nastąpił znak enter i jeśli tak się stało to zerujesz znak i zmienną indeksu tablicy.
Powinno działać


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 mar 2013, o 14:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 mar 2013
Posty: 236
Lokalizacja: Warszawa
Pomógł: 5

Dzieki, zrobiłem jak napisałeś odnośnie sprawdzenia czy nastąpił znak enter i teraz jest gites.

_________________
sig off ;(



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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