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



Teraz jest 19 sty 2026, o 15:27


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 22 wrz 2014, o 21:22 
Offline
Użytkownik

Dołączył(a): 09 cze 2013
Posty: 34
Pomógł: 0

Witam serdecznie

Mam pewną niejasność jeśli chodzi o działanie funkcji USART_Init przy inijcalizacji RS-485 z bluebooka. Program piszę na Atmedze8.
Na podstawie przykładu z bluebooka napisałem funkcję
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Po tak napisanej funkcji zauważyłem, że nie działa prawidłowo pin sterujący sygnałem DI.
W celu sprawdzenia wstawiłem sobie diodkę LED pod całkowicie nie związany z naszą obsługą RS-485 pin PC5 i obsłużyłem wejście klawisza PB0 aby sprawidzć czy poprawnie działają porty I/O.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Ku mojemu zdzieniwu nie działały poprawnie. Kiedy wykasowałem funkcję USART_Init to wszystko zaczęło działać.
Po kolejnych próbach zauważyłem, że jeżeli uaktywniam przerwania od transmisji i otrzymania danych przed ustawniem bitów RXEN i TXEN to wszystko 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.

Jeżli tylko przeniose aktywacje tych przerwań za
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
to moje testowe szybkie miganie diodą przestaje działać.
Nie wiem dlaczego tak się dzieje. Bardzo proszę o wyjaśnienie jeżeli ktoś się z czymś takim spotkał.

Z góry dzięki i pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 wrz 2014, o 19:16 
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

Cytuj:
Po tak napisanej funkcji zauważyłem, że nie działa prawidłowo pin sterujący sygnałem DI.

Pokaż co masz w pliku h odnośnie tego pinu. Może inny jest DDRx, a inny PORTx
Rafael86 napisał(a):
Po kolejnych próbach zauważyłem, że jeżeli uaktywniam przerwania od transmisji i otrzymania danych przed ustawniem bitów RXEN i TXEN to wszystko działa:

Bo są wyłączane w kolejnej instrukcji ponieważ nie ma tam operatora |=

Dodatkowo na samym początku (przed USART_Init) wystaw sobie 3 mignięcia jakimś LEDem. Może masz reset.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 wrz 2014, o 14:42 
Offline
Użytkownik

Dołączył(a): 09 cze 2013
Posty: 34
Pomógł: 0

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


Mam książkę z 2011 roku i tam nie widzę nigdzie ustawionego bitu UDRIE. Na stronie atnela : "uaktualnienia do programów do DVD" jest uaktualniona wersja programu do uarta do rs485 i tam też nie jest ustawiane to przerwanie w funkcji inicjalizującej.
Natoamist odkryłem w czym jest problem, przynajmniej częściowo. zauważyłem, że jak wykasuje: UCSRB |= (1<<RXCIE); to zaczyna wszystko działać. Pomyślałem
, że w jakiś sposób to przerwanie recieve complete interrupt jest cały czas wywoływane i program "grzęźnie" w tym przerwaniu. Zrobiłem test nastęujący test:

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


i faktycznie diodka miga cały czas. Albo powiniennem kasować jakąś flagę z tego przerwania bo jest cały czas ustawiona, albo w jakiś sposób cały czas
wywołuje to przerwanie. Jak dojde co dokładnie się dzieje to napiszę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 wrz 2014, o 14:58 
Offline
Użytkownik

Dołączył(a): 10 sie 2013
Posty: 66
Lokalizacja: Szczecin
Pomógł: 7

W obsłudze przerwania nie widzę, abyś odbierał cokolwiek z uarta, a odczyt danej jest warunkiem do skasowania flagi wywołującej przerwanie.

_________________
Build:succeeded or up-to-date, 0 failed, 0 skipped



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 wrz 2014, o 15:05 
Offline
Użytkownik

Dołączył(a): 09 cze 2013
Posty: 34
Pomógł: 0

Tak, to prawda , tylko w tej chwili nie mam co odbierać, bo nic nie jest wysyłane do uC , piny TXD i RXD nie są wogóle podłączone. Chciałem na razie dokonać samej inicjalizacji RS485. W dalszym ciągu nie wiem
gdzie jest problem :/

------------------------ [ Dodano po: 5 minutach ]

Ale w sumie racja. Dodałem teraz w przerwaniu RXD:
char data;
data = UDR;
i teraz jest ok. Tylko nie rozumiem chyba mechanizmu tych przerwań. To znaczy, że niezależnie czy cokolwiek jest nadawane do uC to i tak trzeba cały czas odczytywać w przerwaniu dane z bufora odbiorczego?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 wrz 2014, o 15:16 
Offline
Użytkownik

Dołączył(a): 10 sie 2013
Posty: 66
Lokalizacja: Szczecin
Pomógł: 7

Czyli Twój progs działa prawidłowo. Jeśli wywołasz przerwanie z UARTA, a nie odczytasz danej, to led z przykładu wyżej będzie migał.
Ustaw jeszcze w nicjalizacji RX jako wejscie z Pull-upem


Autor postu otrzymał pochwałę

_________________
Build:succeeded or up-to-date, 0 failed, 0 skipped



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 wrz 2014, o 15:28 
Offline
Użytkownik

Dołączył(a): 09 cze 2013
Posty: 34
Pomógł: 0

Ok, dzięki za pomoc:)



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 8 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