Witajcie ! Mam sprawiające dla mnie małą trudność pytanie - chciałbym przerobić swój stary program wysyłający dane za pomocą sprzętowego uart do pracy z wyświetlaczem DWIN który wszelkie dane wysyła i odbiera za pomocą również UART. Co do konfiguracji softwarowego uartu nie mam problemu i wszystko działa mi jak należy, ale ... niestety hardwarowy uart pracuje w przerwaniach i o ile testy wyświetlacza na "gołym" programie są ok o tyle wplatając go w "stary system" zaczynają się kłopoty. Zauważyłem że jak wyłączę na czas odbierania znaku z softowego uarta wszystkie przerwania to działa to jak należy. Teraz mam zrobione tak że w głównej pętli jest : Open "comb.1:115200,8,n,1" For Input As #2 Open "comb.2:115200,8,n,1" For Output As #3 do Disable Interrupts Inputbin #2 , Ua(1) , 2 If Ua(1) = &H5A And Ua(2) = &HA5 Then Inputbin #2 , Ua(3) , 7 End If Enable Interrupts Dane = Hex(ua(1)) + Hex(ua(2)) + Hex(ua(3)) + Hex(ua(4)) + Hex(ua(5)) + Hex(ua(6)) + Hex(ua(7)) + Hex(ua(8)) Locate 1 , 1 ' te linijki są do testów na wyświetlacz lcd 2x16 czy wprowadzone dane z wyświetlacza sa prawidłowe Lcd Dane Locate 2 , 1 Lcd Hex(ua(9)) Wait 1 Cls Loop ale obawiam się że nie jest to zdrowe by tak w każdej pętli wyłączać te przerwania ... ( na razie nie testuję tego na żywym organizmie stąd ta rozterka ) Tu pojawia się główne pytanie - ponieważ ekran wysyła dane tylko w momencie gdy coś zostanie naciśnięte, czy jest możliwość sprawdzenia tego, że coś "przychodzi" na softowy uart i dopiero wtedy wyłączyć przerwania - odebrać - i włączyć je z powrotem? ...Lub może jest opcja na przerwania softowego uart'u ??
|
|||
Odp. Bascom - sprzętowy i programowy uart w tym samym czasie
Rozwiązań tyle ilu programistów. Nie napisałeś chyba jaki to mikrokontroler.
Jeśli coś co ma możliwość skorzystania z PCINT to możesz mieć przerwanie przy ruchu na porcie :)
Jeśli nie wiesz jak ich użyć zajrzyj tutaj. Jeśli to Babcia Mega8 możesz zmienić na Mega328 bo jest w tej samej obudowie i ma te same wyprowadzenia tylko jest młodsza w środku.
Możesz też nie wyłaczać wszystkich przerwań tylko po kolei wyłączać po jednym i sprawdzić które Ci bruździ. Może da się coś napisać inaczej :)
Tu możesz poczytać o selektywnym wyłaczaniu http://wiki.mcselec.com/bavr/DISABLE
Tyle chciałem wnieść do sprawy nie wiedząc nic więcej
Miłego dnia.
BARTek
Moja strona
...
Zapomniałem o typie procesora - jest to Atmega32. Dziś zgodnie ze wskazówkami próbowałem walczyć z przerwaniami ( konkretnie INT2 bo do tej nogi mam teraz podpięty uart z wyświetlacza ) - poza właściwymi komunikatami ciągle dostaję mnóstwo krzaków :( ... zastanawiam się nad wymianą tej kostki na Atmega324P która ma 2 uarty i wszystkie wyprowadzenia zgodne z Atmega32.
Przyjrzałem się i poza przerwaniami od hardwarowego UART mam jeszcze przerwania z TIMER2 - jest tego tak dużo, że chyba droga dodatkowego softowego UART może okazać się niezwykle trudną do dobrej realizacji :(
a teraz problem z przerwaniem
Witajcie !
Zmieniłem procesor na ATMEGA324P i teraz pojawił się problem z przerwaniem, a konkretnie wywala mi błąd "ISR already defined" w momencie gdy włączę buforowanie czyli CONFIG SERIALIN1 = buffered, size = 20
gdy wyrzucę tę linijkę wszystko jest ok ( bufor SERIALOUT1 też działa ) - jedynie kłopot z buforem wejściowym. Wiecie może jak to naprawić ???
poniżej pozostałe 2 przerwania które potrzebuję do prawidłowej pracy całego softu :
... EDIT ...
Poradziłem już sobie - wywaliłem przerwanie i Config serialin1 = buffered , size=20 działa :-) ... zamiast robić to w przerwaniu zastosowałem ISCHARWAITING()