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



Teraz jest 31 sty 2025, o 18:51


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 17 ] 
Autor Wiadomość
PostNapisane: 19 paź 2012, o 17:02 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Witam
Mam taki problem z przerwaniem zewnętrznym INT0
Napisałem program na procesor Atmega32 że jeśli dostanie stan niski na INT0 to program zrobi jeden krok silnika krokowego.
Czyli że ile jest impulsów tyle kroków silnika krokowego. Jednak to mi nie działa jak powinno. Wiem o tym że jeśli INT0 podłącze pod przycisk to będzie źle działać bo są drgania styków i INT0 szaleje (sprawdziłem).

Więc na próbę na innym scalku napisałem program który co sekundę na 1 ms daje stan niski na porcie A0 potem podłączyłem ten port z portem INT tego pierwszego scalka. Program chodzi trochę lepiej jednak nie tak jak powinien ciągle tylko włącza raz jedną cewkę raz drugą ale w zły sposób.
Być może jest to wina źle ustawionego INT0. Proszę o pomoc w czym tkwi kłopot.

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

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 paź 2012, o 18:27 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

I jeszcze jedno pytanie.
W pdf Atmega32 pisze że krótkie impulsy nie będą uznawane do przerwania lecz nie mogę znaleźć ile to ms czy us ma być. Czy w tym przypadku to jest kłopot czy nie?

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 paź 2012, o 18:45 
Offline
Moderator
Avatar użytkownika

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

Pewnie, że wina ustawienia przerwania - ale w zasadzie to wina w ogóle pomysłu aby obsługę klawisza robić w ten sposób na przerwaniu ....

Powiedz mi czy nie czytasz czasem tych artykułów na moim blogu ? .... toż akurat ten:

http://mirekk36.blogspot.com/2012/10/dr ... ak-to.html

który jest aż w 3 częściach byłby wręcz IDEALNY dla ciebie i twoich zastosowań ....

Tymczasem ty ustawiasz sobie wyzwalanie przerwania NISKIM POZIOMEM logicznym i robisz sobie tym dodatkowo masakrę amerykańską piłą tarczową :(

Pomyśl sobie, biorę swojego palucha i klikam na taki klawisz, który ty zrobiłeś - jak go wcisnę, to jak myślisz (nawet jeśli postaram się to krótko zrobić) ..... ile czasu będzie trwało to WCIŚNIĘCIE ????

na pewno kilkadziesiąt do KILKUSET milisekund !!!

a skoro tak, to twoje przerwanie - nawet GDYBY w ogóle na świecie nie było drgań styków - wykona się SETKI TYSIĘCY razy w trakcie tego mojego krótkiego niby kliknięcia paluchem w ten klawisz ....

dodatkowo co nie DZIWNE - dojdą jeszcze drgania styków po wciśnięciu (co przy obsłudze klawiszy jaką proponuję w tych artykułach nie ma akurat żadnego znaczenia praktycznie) .....

Ktoś mi niedawno na blogu w tym właśnie temacie zarzucił że ja źle uczę przyszłych inżynierów że opowiadam bzdury - o tych drganiach styków i że one są - i właśnie w takich procedurach m.in jak ty teraz sobie zrobiłeś - ujawnią się ..... Więc jak mogę mówić takie bluźnierstwa w tym artykule ????

Tymczasem ja - nie twierdzę że drgań styków nie ma - tylko po prostu mnóstwo ludzi (więc się nie martw że tobie teraz się nie udało) .... wybiera tragiczne sposoby programistyczne - które niestety są narażone na te drgania. A po co ????? skoro można inaczej ...

reasumując poczytaj uważnie te artykuły, daj sobie SPOKÓJ z tą obsługą klawisza na przerwaniu INTx bo to wręcz kuriozalny pomysł .... i zastosuj pomysły zaczerpnięte z tych artykułów....

zresztą zobacz inni uczestnicy tego forum już dawno to poczytali i możesz zobaczyć że z powodzeniem korzystają z tych sposobów nie tylko do obsługi klawiszy mechanicznych - nie zaglądasz do naszych forumowych konkursów ??? a szkoda - bo to też kopalnia wiedzy, szczególnie że teraz forumowicze prezentują w pełni swoje kody źródłowe na konkursach - zobacz sam:

topic1509.html

poczytaj ten wątek i obejrzyj prezentację prac w nim zrobionych ok ? ;) myślę że da to tobie dużo do myślenia, da ci inspirację i szybko sobie poradzisz z tak błahymi problemami jak obsługa NIEBLOKUJĄCA klawiszy w swoich przeróżnych programach OK ?

-----------------

PS .... a na przyszłość - jeśli już do czegoś innego będziesz używał przerwań INTx - to miej na uwadze, że w 90% przypadków wykorzystuje się wyzwalanie ich ZBOCZEM - opadającym albo narastającym a nie poziomem logicznym. Bo żeby wykorzystać wyzwalanie poziomem logicznym to jeszcze trzeba umieć dobrze napisać do tego obsługę ..... Ale o tym kiedy indziej.

_________________
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: 19 paź 2012, o 18:59 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Czytałem te artykuły.
Hmmm...
Źle to opisałem. Przez co źle zrozumiałeś. Zacznę od początku :)

Mam procesor który jest zaprogramowany żeby co 1s dawał impuls do drugiego procesora który odbiera to poprzez INT i jeśli nadleci 1impuls to ten procek okręci silnikiem o 1krok. To wszystko tylko jak to ustawić.
Napisałeś ze ma się reagować zboczem opadającym ok zmienię na to (już wcześniej tak robiłem)
Teraz mama pytanie jak długo ma trwać ten impuls z pierwszego procesora by ten drugi każdy impuls zliczał? Ile us? jak najmniej? Np.1us? ale czy wtedy ten 2 procesor wykryje ten impuls? bo w nocie pisze że jak szybko będą impulsy to może ominąć? Czy to prawda?
I czy oprócz tego zbocza opadającego to INT jest dobrze ustawiony?
Teraz powinieneś dobrze zrozumieć :)

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 paź 2012, o 19:10 
Offline
Moderator
Avatar użytkownika

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

Ok - zakładając że tam ma nie być klawisza to jeszcze raz

czy nie rozumiesz jak działa wyzwalanie zboczem ????

Po co ci myśleć o tym ile ma trwać impuls - ile ms itp żeby drugi je zliczał ..... ???

Tzn pewnie że nie może być krótszy niż (bodajże 4 takty zegara), trzeba zajrzeć do noty PDF, ale możesz być dowolny np od 1us nawet do 10 sekund - co za różnica jeśli będzie wyzwalany zboczem np opadającym ???


Autor postu otrzymał pochwałę

_________________
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: 19 paź 2012, o 19:15 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

AAA to teraz lepiej to rozumie.
No to dam na początek1ms potem zmniejszę .
A czy ten program będzie chodził? czy coś jeszcze w nim jest nie tak?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


------------------------ [ Dodano po: 8 minutach ]

Wgrałem ten program lecz nie działa tak jak powinno. Robi np kilka razy każdy z kroków(nie po kolei) a jeden omija całkiem.
W czym może tkwić kłopot?

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 paź 2012, o 19:54 
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

Źle ustawiasz bit. Można powiedzieć, że zerujesz wyzerowany na starcie bit ISC01, czyli masz wyzwalanie poziomem niskim. Tak powinno być:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 paź 2012, o 20:04 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Dzięki.
Ale musiałem jeszcze no połowę programu zmienić i teraz działa o wiele lepiej ale nie tak jak powinno.
Dziś jest już późno jutro dam znać czy działa :)

------------------------ [ Dodano po: 14 minutach ]

Zrobiłem jeszcze jedna próbę i działa lepiej ale nie tak jak powinno na początku liczy pięknie do 4 potem już ostatnia sie zaświeca świeci i po tym od nowa idzie raz szaleje nawet. Co może być przyczyną? Czy to jest oznaka ze procesor się wysłużył? Ja nigdy go nie resetowałem przyciskiem na płytce.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


------------------------ [ Dodano po: 24 minutach ]

Zrobiłem w programie kolejną zmianę i działa tak jak ma działać tyle że co jakiś czas co 8kroków chyba ostatni krok ciągle świeci(zamiast silnika zamontowałem 4 diody LED które imitują silnik krokowy bipolarny) po chwili gaśnie albo zapala się kolejny, w skrócie program zaczyna szaleć po tym ustępuje i znów podziała dobrze na 8kroków i znów się knoci.
Nie mam już pojęcia co może być nie tak.
Proszę o pomoc.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 paź 2012, o 21:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 gru 2011
Posty: 449
Pomógł: 4

Być może nie pomogę, ale może nie zaszkodzę.
Do rzeczy: Jak ja robiłem inicjalizację INT0, to raczej nie konfigurowałem PD2 jako wejścia (linia 25 i 28). O ile dobrze pamiętam, to procek i tak prawidłowo zinterpretuje przerwanie, mimo takich deklaracji, ale chyba te linie są nie potrzebne.

To jest rzecz w zasadzie druga. Bo pierwsza, to mimo, że relatywnie rzecz biorąc kod programu nie jest długi, to ja bym podzielił go na pliki *.c i *.h. Naprawdę, mimo, że wielu osobom wydaję się to skomplikowane, to jednak porządkuje to każdy projekt, nawet dość mały. Potem wystarczy śledzić zapisy kodu w każdym pliku osobno i bardzo szybko można go zdebugować nie używając nawet diody, że o kolegach z forum nie wspomnę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 paź 2012, o 21:39 
Offline
Moderator
Avatar użytkownika

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

worner napisał(a):
....., to mimo, że relatywnie rzecz biorąc kod programu nie jest długi, to ja bym podzielił go na pliki *.c i *.h. Naprawdę, mimo, że wielu osobom wydaję się to skomplikowane, to jednak porządkuje to każdy projekt, nawet dość mały. Potem wystarczy śledzić zapisy kodu w każdym pliku osobno i bardzo szybko można go zdebugować nie używając nawet diody, że o kolegach z forum nie wspomnę.


Bardzo bardzo cenna garść uwag ;) .... zresztą wystarczy spojrzeć na konkursowe kody kolegi worner.

_________________
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: 19 paź 2012, o 21:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 gru 2011
Posty: 449
Pomógł: 4

Mirku dziękuję za uznanie, ale swoimi ustami powtarzamy Twoje słowa. Tyle, że jest nas już coraz więcej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 paź 2012, o 21:59 
Offline
Moderator
Avatar użytkownika

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

Więcej - to fakt - ale nie przesadzaj, że powtarzacie moje słowa. Ja tam może w jakiś mały sposób gdzieś coś komuś pomogłem, tym co piszę tu i tam - ale teraz sam patrzę z ogromną przyjemnością na to co panowie wyprawiacie tworząc swoje projekty, kody ;) itp

_________________
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: 19 paź 2012, o 22:05 
Offline
Użytkownik
Avatar użytkownika

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

no dobra ......... a gdzie resetujesz licznik krok, przecie on sobie przy 5-ciu wartosciach dziala , a pózniej przez 250 kolejnych nic nie robi.

Druga sprawa ja bym sobie poszczególne kroki wrzucił do jednej tablicy i na niej realizował przełączanie cewek .........
zresztą dzięki temu kod by się troszkę uprościł ;)
To tak luźno przyszło mi do głowy ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 paź 2012, o 22:12 
Offline
Moderator
Avatar użytkownika

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

Tym bardziej, że w pierwszej książce są przykłady w jaki sposób można o wiele prościej realizować to uruchamianie kroków ... zamiast tak jak tutaj rozbudowywać pod niebiosa setkami IF'ów pętlę główną programu. Wiem wiem, że to na razie tylko testy - ale zebrać potem coś takiego do tzw "kupy" będzie ciężko ...

_________________
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: 19 paź 2012, o 22:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 gru 2011
Posty: 449
Pomógł: 4

No, ale kolega postęp poczynił moim skromnym zdaniem. Chciałem mu doradzić, aby silnik krokowy chwilowo przerobił na diody led. Mógłby łatwo obserwować, co się dzieje z jego programem. I doszedł do tego samodzielnie, brawo, ale niestety dalej poległ, bo nie zrobił analizy tego, gdzie występują błędy w działaniu programu, nie błędy kodu. A są to dwie różne sprawy, prawda?
I tu się ujawniła zawiłość jednego ciągu kodu, obsługa przerwań w pliku głównym i inne błędy, które moi koledzy wymieniają. Więc moja rada jest prosta: trzeba zacząć od początku, ale trzymając się reguł i zasad. Pójdzie szybciej, prościej i nie będzie tak bolało.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 paź 2012, o 07:52 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Dzięki za odp.

Co do podzielenia pliku na .c .h to w tym przypadku nie ma to sensu bo oprócz tego programu dojdzie tylko funkcja która okręca albo w prawo silnik albo w lewo.(W zależności od stanu portu) I oto cały program na Atmega32 nic więcej nigdy nie będzie dodawane. Oczywiście można podzielić na .c .h ale jest tak krótki że nie potrzeba moim zdaniem.

Malutki_27- licznik krok resetuje się tam gdzie odbywa się ostatni krok.
mirekk36- to prawda są w 1 książce takie kody ale one się nie nadają bo trzeba by było wszystko przerobić. A czemu? Bo u mnie to
jeden impuls to ma być 1 krok silnika a w twoim przykładzie jeśli by się dodało sterowanie impulsem to 1impuls = 4kroki silnika.
Wszędzie gdzie ktoś wrzucił program na silnik krokowy to jest że minimum silnik robi 4 kroki. A u mnie musi być 1 krok minimum.
GwynBleidD- Hmmm... niezły pomysł dałeś :)A co do tego kto ma dawać te impulsy na INT to ja pisałem wcześniej że inna Atmega32.

Przemyślę te propozycję,uwagi i napisze program od nowa.
Jednak co do użycia timerów to jeśli na tak mało skomplikowany przypadek użyć timer to co dopiero na bardzo skomplikowany? Timerów może braknąć :)

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 paź 2012, o 18:34 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Spokojnie już dawno poznałem te timery programowe

Program napisałem i działa tylko no niestety tranzystory w mostach się strasznie grzeją. Musze jeszcze inną koncepcję zrobić.

_________________
Programowanie to styl życia :D



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO