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



Teraz jest 29 lis 2024, o 00:03


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 23 ] 
Autor Wiadomość
PostNapisane: 6 sie 2012, o 21:55 
Offline
Nowy

Dołączył(a): 05 sie 2012
Posty: 16
Pomógł: 0

Witam,

napisałem taki program z użyciem przerwania. Są to moje początki w tym temacie dlatego prosiłbym o wyjaśnienie gdzie jest błąd.

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


Nie za bardzo też rozumiem o co chodzi z tym że funkcja obsługi przerwań powinny być jak najkrótsza? Jeśli na przykład chciałbym aby po wystąpieniu przerwania np. diody zaczęły cyklicznie migać powiedzmy co min. to jak to zrealizować? Albo jeśli po naciśnięciu przycisku chciałbym żeby serwo wykonało jakąś sekwencję...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sie 2012, o 22:01 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

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

Kobuz napisał(a):
Nie za bardzo też rozumiem o co chodzi z tym że funkcja obsługi przerwań powinny być jak najkrótsza? ...


Nie koniecznie najkrótsza, ale powinna skończyć działanie przed nadejściem następnego przerwania i jeszcze powinno zostać trochę czasu dla programu głównego.

Jak chyba wiesz, przerwania wystepują cyklicznie, co jakiś czas. Wyobrażasz sobie co by się stało gdyby procedura obsługi przerwania była za długa? Po pierwsze przyszłoby następne przerwanie, po drugie nie wykonał by się kod z programu głównego.

_________________
http://www.jaglarz.info



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sie 2012, o 22:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Dlatego nigdy nie używamy _delay_xx w przerwaniach..........



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sie 2012, o 22:49 
Offline
Nowy

Dołączył(a): 05 sie 2012
Posty: 16
Pomógł: 0

Niestety program ten nie działa poprawnie, spowodowane jest to tylko wystąpieniem tego opóźnienia w funkcji?
uC to oczywiście ATtiny13



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sie 2012, o 21:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Ale co w tym programie nie działa poprawnie?
Bo najpierw w pętli głównej co 33ms zmieniasz stan diody na przeciwny. Co i tak jest dość trudne do zaobserwowania gołym okiem.
A potem obsługa przerwania. Zmiana stanu diody na przeciwny dwa razy pod rząd, sekunda przerwy i znowu podwójna zmiana stanu diody. Żeby to zaobserwować to bez oscyloskopu chyba się nie da.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sie 2012, o 21:10 
Offline
Nowy

Dołączył(a): 05 sie 2012
Posty: 16
Pomógł: 0

W takim razie podłączę oscyloskop i zerknę jak to wygląda. Dzięki, nie przyzwyczaiłem się jeszcze do sprawdzania takich rzeczy oscyloskopem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sie 2012, o 21:34 
Offline
Moderator
Avatar użytkownika

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

Kobuz napisał(a):
W takim razie podłączę oscyloskop i zerknę jak to wygląda. Dzięki, nie przyzwyczaiłem się jeszcze do sprawdzania takich rzeczy oscyloskopem.


No bo kolega wyżej chciał ci bardziej przez to powiedzieć, że zdecydowanie lepiej wymyślić inny i prostszy przykład programowy niż coś takiego do czego trzeba oscyloskopu zaraz. Przecież żeby trzeba było do tak prostych celów zaraz targać oscyloskopy to zabawa w programowanie procków byłaby tylko dla ludzi z super zasobną kieszenią.

Ja mam całkiem inną propozycję dla kolegi autora wątku. Napisz lepiej co chcesz uzyskać ? opisz to ? co ma pokazać ci taki prosty test - to my tu postaramy się ciebie naprowadzić jaką drogą iść i jak tworzyć taki pierwszy testowy program 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: 8 sie 2012, o 10:15 
Offline
Nowy

Dołączył(a): 05 sie 2012
Posty: 16
Pomógł: 0

Głownie chce nauczyć się przerwań, żeby stwierdzić że przerwanie wystąpiło, muszę to jakoś zaobserwować. Żeby mieć pewność że całość działa tak jak zaplanowałem diody świecą i w głównej pętli programu i w pętli przerwania. To, jak miałem nadzieję, pozwoli zaobserwować zmiany.

Generalnie robię to na ATtiny13 bo z nim mam problem... jak korzystam z jakiegoś większego uC w którym mam na przykład na porcie C przyciski a na D wyjścia nie ma problemu. W przypadku gdy mam tylko jeden port i na przyciski i na wyjścia program nie działa mi prawidłowo.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sie 2012, o 10:54 
Offline
Moderator
Avatar użytkownika

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

Zaraz zaraz - masz pierwszą książkę moją ? chyba masz z tego co piszesz - więc co za problem zapuścić bodajże drugą lekcję i dodać do niej przewanie jak wyżej z tym że nie wpisuj że Pan do tego przerwania żadnych delayów - po co ?

W przerwaniu ZAPAL po prostu sobie jakąś diodę LED - czy to nie da ci znać że przerwanie wystąpiło

bo teraz to ty zmieniasz w kółko i wszędzie stan diody na przeciwny - przecież to dla oka się nie nadaje ;)

Weź że dwie diody LED i zrób sobie tak:

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


i proszę program ma sobie normalnie migać diodą LED1 co pół sekundy a nie tam jakieś 33ms, których nie jesteś już w stanie prawie zobaczyć ;)

a jak wciśniesz klawisz podpięty do przerwania to druga dioda LED2 będzie sobie niezależnie zmieniać stan na przeciwny

czy coś więcej potrzeba żeby zobaczyć podstawy działania INTx ? ;)

_________________
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 sie 2012, o 18:35 
Offline
Nowy

Dołączył(a): 05 sie 2012
Posty: 16
Pomógł: 0

Dziękuję bardzo, faktycznie taki sposób lepszy :oops: nie wiem w sumie dlaczego sobie tak życie utrudniłem...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lis 2013, o 13:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 paź 2013
Posty: 62
Pomógł: 2

Witajcie.
W wolnych chwilach kombinuję sobie z niebieska ksiażką i czytam tutejsze forum. Zazwyczaj idzie mi nieźle. Ale obecnie własnie jestem na etapie rozkminiania przerwań. Machnąłem sobie do Eclipse`a przykład Mirka i za jasną ciasną nie mogę się pozbyć tej cholernej czerwonej pchełki :P
ATTINY13A, atmel toolchain

o co kaman?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lis 2013, o 13:36 
Offline
Moderator
Avatar użytkownika

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

rescue1 napisał(a):
o co kaman?

http://www.fotosik.pl/pokaz_obrazek/pel ... 7e704.html


Na początek bardzo bardzo uprzejmie cię proszę - ładuj zdjęcia na nasz serwer ok ? - w każdym dziale masz instrukcję prostą jak :

topic44.html



a jeśli chodzi o co kaman ? ;) .... to:

1. czy na 100% masz wybrany właściwy procek w ustawieniach projektu?
2. Jeśli właściwy procek to utwórz nowy workspace - czysty i zaimportuj do niego ten projekt i wtedy sprawdź kompilację i daj znać 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: 3 lis 2013, o 13:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 paź 2013
Posty: 62
Pomógł: 2

Nowiutki workspace. Zaimportowałem i..... na początku zrobiło sie milion pchełek. Po "clean project" została ta jedna :lol:
Procek ustawiony poprawnie na ATTINY13A

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lis 2013, o 14:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

A może kolega wrzuciłby log z Konsoli ?
Tam musi coś być ...

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lis 2013, o 14:06 
Offline
Moderator
Avatar użytkownika

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

rescue1 napisał(a):
Procek ustawiony poprawnie na ATTINY13A


A jakiego toolchaina używasz ? WinAVR czy Atmelowskiego ?

Bo jeśli tego pierwszego to procek jest źle ustawiony ...

Ustaw ATtiny13

I jeśli nie korzystasz z dodatkowych fiuczerów ATtiny13A - to w żadnym z toolchainów nie ustawiaj ATtiny13A

_________________
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: 3 lis 2013, o 14:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 paź 2013
Posty: 62
Pomógł: 2

Atmel toolchain.

Kurde... magia.

Zmieniłem na 13 i pchełka znikła. Przestawiłem znów na 13A i pchełki nie ma a kompilacja poszła bez błędów.

Kod:
**** Build of configuration Release for project przerwanie ****

make all
Building file: ../main.c
Invoking: AVR Compiler
avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=attiny13a -DF_CPU=8000000UL -MMD -MP -MF"main.d" -MT"main.d" -c -o "main.o" "../main.c"
Finished building: ../main.c
 
Building target: przerwanie.elf
Invoking: AVR C Linker
avr-gcc -Wl,-Map,przerwanie.map -mmcu=attiny13a -o "przerwanie.elf"  ./main.o   
Finished building target: przerwanie.elf
 
Invoking: AVR Create Extended Listing
avr-objdump -h -S przerwanie.elf  >"przerwanie.lss"
Finished building: przerwanie.lss
 
Create Flash image (ihex format)
avr-objcopy -R .eeprom -O ihex przerwanie.elf  "przerwanie.hex"
Finished building: przerwanie.hex
 
Create eeprom image (ihex format)
avr-objcopy -j .eeprom --no-change-warnings --change-section-lma .eeprom=0 -O ihex przerwanie.elf  "przerwanie.eep"
Finished building: przerwanie.eep
 
Invoking: Print Size
avr-size --format=avr --mcu=attiny13a przerwanie.elf
AVR Memory Usage
----------------
Device: attiny13a

Program:     126 bytes (12.3% Full)
(.text + .data + .bootloader)

Data:          0 bytes (0.0% Full)
(.data + .bss + .noinit)


Finished building: sizedummy
 

**** Build Finished ****


Nic z tego nie rozumiem. Wybrałem 13A bo do stykówki mam włożony własnie 13A.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 lis 2013, o 15:03 
Offline
Moderator
Avatar użytkownika

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

rescue1 napisał(a):
Wybrałem 13A bo do stykówki mam włożony własnie 13A.


Co z tego że masz 13A jeśli nie korzystasz z nowszych bitów konfiguracyjnych w wersji A ... Dlatego jeśli nie wiesz jakie są różnice a w niektórych prockach z literką A na końcu jak np ATmega8A, 32A 16A nie ma ŻADNYCH różnic od strony programowej to nie ustawiaj wersji z A bo po co ?

_________________
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: 3 lis 2013, o 15:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 paź 2013
Posty: 62
Pomógł: 2

Nie no teraz będę wiedzieć. Tylko lipa trochę taka. Bo wiesz, człowiek stara się być dokładny. Jak mam A to wybieram A. Aż tu nagle okazuje się, że jak wybiorę poprawnie to Eclipse mi rzuca kłody pod nogi. Co więcej jest niekonsekwentny bo po przestawieniu z 13 na 13A błędu już ponownie nie pokazał. Gdyby nie to forum to tak naprawdę taki świeżak jak ja w życiu by nie doszedł czemu tam jest błąd... a raczej czemu jest a go nie ma. No bo program jest poprawny. Ech...
Jakby nie było, WIELKIE DZIĘKI i idę przerywać ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 20:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 paź 2013
Posty: 62
Pomógł: 2

To mam jeszcze takie pytanie.

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


Wrzuciłem do procka powyższy program. W założeniu miało być tak, że błyska sobie LED1 (PB4)a po podaniu stanu niskiego na INT0 błyskanie się zatrzymuje a LED2 (PB0) zmienia stan. No i w zasadzie tak jest. ALE jak zwarłem na stałe INT0 (PB1) do masy to LED2 zapala się na stałe (znaczy pewnie super szybko zmienia stany więc widać świecenie) a LED1 zapala się na sekundę co 10 sekund. Dlaczego? Nie powinno być tak, że dopóki jest stan niski na INT0 to główny program jest przerwany? A tu na dokładkę główny program zaczął działać inaczej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2013, o 22:57 
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

Tu jest tak, że wykonywana jest funkcja przerwania i program wraca do głównego programu i wykonuje jedną instrukcję (asemblerową) po czym zabiera się za wykonywanie funkcji obsługi oczekującego przerwania.

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

To nie ma żadnego efektu, bo masz ten sam bit 2 razy i ~ ma wyższy priorytet niż |

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lis 2013, o 09:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 paź 2013
Posty: 62
Pomógł: 2

Krauser napisał(a):
Tu jest tak, że wykonywana jest funkcja przerwania i program wraca do głównego programu i wykonuje jedną instrukcję (asemblerową) po czym zabiera się za wykonywanie funkcji obsługi oczekującego przerwania.


A, to już wiem skąd to wydłużenie czasu przy podaniu na stałe niskiego stanu na INT0. Bo rozkłada się na zmianę stanu diody (w wektorze) i skok do głównej funkcji. Dobrze myślę?
Czyli jeśli chcę wstrzymać wykonywanie błyskania na czas występowania stanu niskiego na jakimś pinie to użycie do tego przerwania jest chybionym pomysłem tak?


EDIT....

A z MCUCR to faktycznie zamieszałem :D wyzwolenie INT0 niskim stanem powinno być tak? :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Użyłem niskiego stanu a nie zbocza opadającego bo chciałem, żeby niski stan blokował wykonywanie głównego programu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lis 2013, 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

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


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

Czegoś takiego się nie używa, bo to nic nie robi, 0 po przesunięciu to nadal 0. Twój przykład wyzeruje cały rejestr, a jak dodasz ~() to nic nie zrobi.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lis 2013, o 20:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 paź 2013
Posty: 62
Pomógł: 2

Ale po poprawce mam &= przed :roll:

Wiem, że nie muszę. Bez przerwań ogarniam bez problemu (ale zabrzmiało ;) )
Sęk w tym, ze teraz właśnie ćwiczę sobie przerwania i chciałem tak ich użyć. Jak się okazało trochę na siłę. No i widać, ze jeszcze ustawianie bitów muszę porządnie przemielić.

Dzięki wielkie za zainteresowanie!



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

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