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



Teraz jest 2 sie 2026, o 20:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 29 maja 2014, o 16:59 
Offline
Nowy

Dołączył(a): 29 maja 2014
Posty: 5
Pomógł: 0

Witam,

Uczę się programować mikrokontrolery AVR i w ramach pewnego projektu muszę wyzwolić generator częstotliwości w momencie otrzymania stanu niskiego na wejściu. Czytałem poradniki Pana Mirosława i testowałem z płytką stykową. Problem w tym, że program ze zmianą stanu diody jest ok, natomiast potrzebuję w obsługę klawisza wrzucić timer generatora i tu powstaje problem: po włączeniu przycisku generator pracuje cały czas. Napisałem taki program na podstawie programów z książki i poradników:

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


Ew jest jeszcze takie coś na obsłudze przerwań i po jednym ustaleniu do 0 wykonuje się cały czas
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 maja 2014, o 17:34 
Offline
Użytkownik
Avatar użytkownika

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

A czy ten generator ma pracować tylko wtedy gdy przycisk jest wciąż wciśnięty? Czy jedno wciśnięcie włącza a drugie wyłącza?

Jeśli ta pierwsza opcja to wypróbuj poniższy programik
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Programu nie testowałem więc nie wiem czy działa dobrze.

Napisz jeszcze na jakim procku to uruchamiasz.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 maja 2014, o 17:38 
Offline
Użytkownik

Dołączył(a): 22 lut 2014
Posty: 205
Lokalizacja: Poznań
Pomógł: 22

Jeśli przycisk wciśnięty to dioda mruga, jeśli nie to nie mruga :) .
Pozdrawiam

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 maja 2014, o 17:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Nie za szybki ten timer? Obawiam się, że migania nie zauważysz. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 maja 2014, o 18:10 
Offline
Nowy

Dołączył(a): 29 maja 2014
Posty: 5
Pomógł: 0

Dzięki, zaraz przetestuję. Odpalam na attiny85 , mruganie jest dostosowane do częstotliwości odbiornika ir, ktory domyślnie ma odbierać sygnał.

Dzięki Panowie, Jacek Twój program działa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 maja 2014, o 20:30 
Offline
Użytkownik
Avatar użytkownika

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

Jeśli chcesz tylko "migać" diodą to zamiast zmieniać jej stan w przerwaniu możesz wykorzystać do tego jedno z wyjść OCx np. OC0A. Ma to tę zaletę, że przebieg jest generowany w sposób czysto sprzętowy. Program ulegnie tylko nieznacznej modyfikacji.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 maja 2014, o 20:45 
Offline
Nowy

Dołączył(a): 29 maja 2014
Posty: 5
Pomógł: 0

Mam jeszcze taki program do skonsultowania. Wyjście PB1 steruje odtykaniem zatykaniem Mosfetu, a PB0 wyzwala generator częstotliwości widziany powyżej.
PB2 jest podłączony do mechanicznego coś w stylu microswitcha.
Chcę zliczać 30 zwarć po czym na 9 sekund zablokować mosfet.
Proszę o konsultację programu

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


Dobra widzę, że całkowicie przerwanie INT0 nie działa. Może ktoś widzi dlaczego może nie działać?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 maja 2014, o 21:12 
Offline
Moderator
Avatar użytkownika

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

Pontar napisał(a):
_delay_ms(9000);


coś takiego w przerwaniu - przeczy w ogóle zdrowemu rozsądkowi .... :(

PODSTAWA to NIGDY nie używać opóźnień ani nawet żadnych długotrwałych operacji w przerwaniach ...

program warto pisać w pętli głównej programu a nie zostawiać jej pustej i korzystać z flag i ew timerów programowych

_________________
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: 29 maja 2014, o 21:16 
Offline
Nowy

Dołączył(a): 29 maja 2014
Posty: 5
Pomógł: 0

Tylko tu chodzi o obsługę tranzystora typu mosfet, który przez ok 9 sekund ma być zablokowany i ma to nastąpić po zliczeniu 30 strzałów. Buduję laser tag'a w oparciu o replikę ASG. Uderzenie tłoka gazowego w głowice cylindra zwiera do masy. Jako, że w spoczynkowym położeniu tłok dotyka do głowicy cylindra chcę by wyzwolenie następowało wraz z jego ruchem po "rozwarciu". W jaki inny sposób tego dokonać?



Ostatnio edytowano 29 maja 2014, o 21:20 przez Pontar, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 maja 2014, o 21:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

taka mała uwaga
blokujesz nie tylko mosfet ale także cały procek
wstawiając delay do przerwania i to na całe dziewięć sekund :shock:

moim zdanie lepiej wstawić zmienną i ją dekrementować w przerwaniu
a ifem sprawdzać czy minął czas
tak na szybko :
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 okaże się że zakres jednej zmiennej jest nie wystarczający to można to robić na dwóch
lub oddzielnym timerem programowym.



Ostatnio edytowano 29 maja 2014, o 21:25 przez Zaba, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 maja 2014, o 21:25 
Offline
Moderator
Avatar użytkownika

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

Zaba napisał(a):
i to na całe dziewięć sekund


ja tylko dodam - że nawet to nie będzie żadne 9 sekund .... tylko dużo dużo mniej

------------------------ [ Dodano po: 2 minutach ]

Pontar napisał(a):
Tylko tu chodzi o obsługę tranzystora typu mosfet


Tylko kolega musi zrozumieć, że nie ważne o co tu chodzi czy o tranzystor czy o przekaźnik czy o gaźnik czy nie wiadomo co jeszcze - TAK SIĘ NIGDY NIE pisze programów na procki ....

Pontar napisał(a):
W jaki inny sposób tego dokonać?


Polecam jednak na spokojnie zaopatrzyć się w Bluebooka ...

http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

w niej po kolei ... krok po kroku wprowadzam czytelnika - jak właśnie sobie radzić żeby nie programować LINIOWO .... tak tak ... a takie delaje w przerwaniach to coś jeszcze gorszego niż programowanie liniowe

_________________
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: 29 maja 2014, o 21:37 
Offline
Nowy

Dołączył(a): 29 maja 2014
Posty: 5
Pomógł: 0

Zrozumiałem, delay odpada, mój błąd.
Dekrementacja niestety nie pomaga. Poczytam więc w blue booku i poszukam rozwiązania.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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