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



Teraz jest 6 kwi 2026, o 14:48


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
 Tytuł: Symulacja USART
PostNapisane: 2 maja 2017, o 19:48 
Offline
Nowy

Dołączył(a): 12 lut 2017
Posty: 3
Pomógł: 0

Witam,
Mam pytanie, czy da się jakoś "oszukać" procek, że coś przyszło na USART? Generalnie chodzi mi o to, że w pętli głównej programu mam funkcje, które czytają znak po znaku co przychodzi z RS-a( i w zależności na jakiś ciąg znaków mają określoną reakcję). Chciałbym dodać funkcjonalne działanie przycisku, że na przykład jak go przycisnę to na serial jest podawany jakiś ciąg znaków, czy też na przykład jakaś dioda się zapala. I tutaj zaczynają się schody, gdyż próbowałem już bawić się z przerwaniami(zewnętrzne poprzez INT0) to albo działała mi funkcja główna a funkcja w przerwaniu nie wywoływała się, albo na odwrót funkcja w przerwaniu działała wyśmienicie, lecz funkcja główna nie dawała znaków życia. Pojawiało się też takie coś, że jakby procek ciągle wracał na początek, widać to było poprzez ciągłe pojawianie się ciągu znaków który miał się pojawiać przy starcie procka na RS. Odpuszczając sobie przerwania napisałem prostą funkcję która sprawdza stan na pinie który ustawiłem jako wejście i podpiąłem przez pullup do 5V. Teraz reakcja na przycisk pojawia się tylko wtedy gdy przytrzymuję go a jednocześnie poprzez RS-a wysyłam znaki na procek. I stąd moje pytanie czy jest jakiś sposób na "oszukanie" procka, że jakiś znak pojawił się na RS ? Dziękuję za pomoc i pozdrawiam.


--Edit:
Chciałbym dodać, że kod ten pracuje prawidłowo, gdy nie próbuję łapać znak po znaku na USART. Ale niestety muszę pogodzić te dwie rzeczy i musi działać zarówno odbieranie poprzez USART i reakcja na przycisk.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 maja 2017, o 20:00 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2605
Pomógł: 129

wstaw kod (na początek ten najprostszy), który Ci nie działa.

Nie wiem czy dobrze Cie zrozumiałem, ale żeby zasymulować transmisję, najlepiej jest użyć przejściówki USB i sygnały cyfrowe TX/RX podpiąć
do RX/TX (przeplot).
Ustawiasz sobie w terminalu parametry transmisji i wysyłasz. Jak chcesz wysyłać coś okresowo, to możesz użyć np. Realterm'a (notabene
ciekawy terminal o dużych możliwościach).

Polecam darmowy program Atnel Video Player w którym znajdziesz zestawienie
poradników Mirka - polecam te o RS232 dla początkujących.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 maja 2017, o 21:01 
Offline
Nowy

Dołączył(a): 12 lut 2017
Posty: 3
Pomógł: 0

Generalnie symulacje USART chodziło mi, że programowo oszukać, że coś przyszło na serial, jakiś losowy znak. Bo w docelowym urządzeniu układ ma sam działać, w tym momencie mam FTDI i sam jestem w stanie "z palca" poprzez terminal wysłać jakiś znak, lecz jeżeli patrząc przyszłościowo chciałbym, żeby to było autonomiczne :) Generalnie tak jak mówiłem, układ ma reagować na jakiś ciąg znaków(nie przypadkowych, tak jak w kodzie poniżej np ciąg "AB" ) i wykonywać określone instrukcje w zależności od przychodzącego ciągu znaków. Poniżej zamieszczam kod, oraz screen z terminala, co uzyskuję na wyjściu. Niestety tak jak pisałem, żeby była jakaś reakcja na naciśnięcie przycisku muszę wysłać z komputera chociaż pusty enter. I siedząc kilka godzin nad tak błahą zapewne sprawą, zaczynam wątpić czy powinienem zaczynać robić coś praktycznie, czy powinienem wrócić do lektury książek.

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


Generalnie, może ktoś wie jak sobie poradzić by przycisk współdziałał z odbiorem danych z RS :)?

Obrazek



Ostatnio edytowano 3 maja 2017, o 02:07 przez Rethie, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 maja 2017, o 21:21 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3230
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 91

topic7402.html

_________________
http://www.jaglarz.info



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 maja 2017, o 17:18 
Offline
Nowy

Dołączył(a): 12 lut 2017
Posty: 3
Pomógł: 0

Generalnie odpowiem od końca :D

Nie wiem czego kod w poście wyżej był ucięty, gdyż prawidłowo inicjacja usarta wygląda tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Zdecydowałem się na użycie przerwania generowanego timerem. Udało mi się uruchomić timer który po jakimś czasie zmienia stan diody na przeciwny. Niestety zadam następne pytanie, niestety prawdopodobnie bardzo głupie. Jak wpakować do bufora ten znak w tym przerwaniu?Bo szczerze mówiąc nie mam pojęcia, jak to zaimplementować kodem.

Kod który mam do generowania przerwania timerem:

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





==============
EDIT:

Bez obsługi seriala wszystko śmiga, nie ma żadnych problemów, wraz z dołączeniem do projektu przerwania generowanego timerem serial wariuje, nie nie chodzi tu o sławne drgania styków :D nie reaguje na podawany ciąg znaków, lub też reaguje w taki sposób, że resetuje się i wyświetla to co było zdefiniowane przed pętlą główną programu.

tutaj kod tego, co działa bez obsługi seriala, już powoli zaczynam się załamywać, gdyż siedzę nad tym już dobrych kilka godzin i nie potrafię sobie poradzić... Z tym serialem dzieje się po tym jak uruchamia się globalne obsługiwanie przerwań.
Generalnie od tego, jak będzie wariować decyduje gdzie umieści się sei(); po tym jak umieści się go tuż przed while(1) jest ten reset.

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  
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 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO