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



Teraz jest 1 gru 2024, o 03:40


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 10 lis 2012, o 20:23 
Offline
Nowy

Dołączył(a): 10 lis 2012
Posty: 5
Pomógł: 0

Witam
pierwszy post na forum :D
Postanowiłem przećwiczyć przerwania zewnętrzne
Naciśnięcie przycisku zmienia stan diody i wysyła "click" przez RS. Niby działa... tylko, że niechcący jakiś wykrywacz pola elektromagnetycznego zrobiłem.
Do pierwszego naciśnięcia przycisku wszytko jest cacy, ale potem, jak zbliżę rękę do kabelka, to zaczyna się szopka.
Ustawienie przerwania reagujące na zbocze:
void ExtInterrupt_init(void) {
PORTD |= (1 << PD2);
DDRD &=~(1 << PD2);
GICR |= (1 << INT0);
MCUCR |= (1 << ISC01);
}
Może ktoś doradzi jak tego uniknąć?
Docelowo przerwanie ma przychodzić z zewnętrznego czujnika (akcelerometr ADXL345), który komunikuje się przez SPI. O tym, że próbka danych jest gotowa do odebrania, czujnik informuje zmianą stanu na pinie. Takie hece jak ta tutaj uniemożliwią mi praktycznie użycie kabelka.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2012, o 21:27 
Offline
Moderator
Avatar użytkownika

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

To lepiej kolega pokaże cały swój kod testowy, bo takie szopki jak kolega mówi są zwykle spowodowane właśnie kodem a nie tam zestawem, kabelkiem czy uszkodzonym procesorem czy jeszcze inną kosmiczną przyczyną .... :( niestety

(wykluczę tu dość istotną możliwą inną przyczynę jaką jest np brak filtracji zasilania, czy problemy elektroniczne, bo pisze kolega że korzysta z zestawu ATB). Jedyne co mogę podpowiedzieć tak bez kodu - to wymienić może jeszcze przewód połączeniowy na inny bo ten może akurat egzemplarz słabo styk ma zarobiony albo coś. I dodam, że przed chwilą odpaliłem to na zestawie - a kabelek można macać do upadłego i przerwanie się nie wyzwoli.

więc najpierw kod a wtedy będziemy mogli podpowiedzieć jak tego uniknąć, albo pogłówkować o co może chodzić - ok ?

_________________
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: 11 lis 2012, o 00:13 
Offline
Nowy

Dołączył(a): 10 lis 2012
Posty: 5
Pomógł: 0

Absolutnie nie twierdzę, że to wina zestawu. Po prostu problem występuje podczas pracy na zestawie, co na wstępie eliminuje całą gamę przyczyn. Jestem prawie pewien, że coś w kodzie mam nie tak :( Przewód oczywiście zmieniłem.
Oto kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Pliki mkuart pozostawiłem bez zmian.
Jak na razie zauważyłem tyle:
- problem występuje gdy jednocześnie jest włączony USART
- czasem procedurka warunkowana przerwaniem INT0_vect wpada w pętlę nieskończoną, a czasem się zatrzymuje i wtedy reaguje na zbliżenie ręki

Może tu trzeba jakość skonfigurować I/O clock specjalnie? Oddzielnie dla UART oddzielnie dla INT0?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lis 2012, o 00:25 
Offline
Moderator
Avatar użytkownika

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

czyli co? w ogóle ci nic do terminala nie leci ?

zobacz - wgrałem teraz dokładnie twój przykład bez żadnych zmian i masz w terminalu ładnie napisy

nie mam pojęcia skąd ty np wiesz że procedura ISR() się zawiesza, albo że obsługa UDRE w czymś przeszkadza - skąd takie przypuszczenia

u mnie wgrany kod pięknie działa i nic nigdy nie reaguje na żadne dotykanie kabla

Obrazek

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

o tu wprowadziłem lekką zmianę żeby było widać numerowanie clicków i lecą ładnie po kolei, oczywiście w związku z brakiem obsługi / reakcji na drgania styków czasem po jednym kliknięciu wskoczy ich kilka no ale to normalne. Nic się nie zawiesza tak jak ty to opisujesz - zresztą nie wiem na jakiej podstawie ....

Obrazek

------------------------ [ Dodano po: 6 minutach ]

jak zasilasz zestaw ? z USB ? czy z zasilacza ?

jeśli z USB to jakie napięcie masz dokładnie w układzie - sprawdzałeś miernikiem ?

_________________
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: 11 lis 2012, o 00:33 
Offline
Nowy

Dołączył(a): 10 lis 2012
Posty: 5
Pomógł: 0

No to może ja czegoś nie rozumiem.
Wciskam klawisz, puszczam klawisz, wysyła mi na terminal "click". Ale mi to wysyła bez przerwy. Ja rozumiem, drgania styków itp. To niech wyśle 20 razy, albo 200 nawet. Ale nie 6000.
Jeśli wyłączę usart, to dioda się zapala i gaśnie jak na twoim filmiku o drganiu styków. Jak włączę usart, to mruga bez przerwy.
USB, 4,7V, dotknięcie miernikiem też wywołuje "przerwanie" i rozpoczęcie wysyłania do terminala.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lis 2012, o 01:03 
Offline
Moderator
Avatar użytkownika

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

;) zaraz zaraz - a nie masz przypadkiem pan w konfiguracji biblioteki UART włączonego RS485 i pinu do sterowania kierunkiem, który bodajże przygotowałem na PD2 ??? weź ty tam zajrzyj ;)

zobacz

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


widzisz ? pierwsza linijka w tej sekcji powinna być zakomentowana, albo mogłeś sobie to samo sprawdzić np na INT1 albo na INT2, albo mieć włączony RS485 i użyć tu innego pinu niż PD2 ..... coś mi się wydaje, że to będzie panie kochany to - ale sprawdź

_________________
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: 11 lis 2012, o 08:57 
Offline
Nowy

Dołączył(a): 10 lis 2012
Posty: 5
Pomógł: 0

No oczywiście że tak :D Dziś miałem sprawdzać przerwania na innych pinach, ale czemu nie idzie na PD2 to bym wpadł dopiero przy próbach z rs485.
Dziękuję bardzo 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 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO