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



Teraz jest 13 kwi 2026, o 03:06


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 4 maja 2015, o 11:49 
Offline
Nowy

Dołączył(a): 18 cze 2014
Posty: 10
Pomógł: 0

Cześć,

chciałem zrobić nieblokujący program do lampki rowerowej, podczas zmian preskalera i czasów mrugania poszczególnych diod, po kolejnym wgraniu, procek przestał się wybudzać. Po włączeniu bądź resecie działa tylko pierwsze wybudzenie, później cisza.

Dodam że w ten sam sposób budziłem go gdy w programie były delaye, nie było timerów i procedury debounce od Pana Mirka.
Wrzucam kod, jestem świadomy, potencjalnej banalności rozwiązania ale nie mogę go znaleźć od godziny.

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: 4 maja 2015, o 16:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lut 2013
Posty: 158
Lokalizacja: KTT
Pomógł: 1

załącz jeszcze bibliotekę

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


przydałby się jeszcze schemat...

_________________
Gordon



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 maja 2015, o 09:49 
Offline
Nowy

Dołączył(a): 18 cze 2014
Posty: 10
Pomógł: 0

Oczywiście, dołączam schemat. Dodanie wyżej wymienionej biblioteki nic nie daje.

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 maja 2015, o 11:26 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Babol tkwi w przepływie sterowania programu. W pętli głównej wciąż wykonuje się przypadek 'case 0;' i nie ma możliwości żeby kiedykolwiek wykonał się inny. A usypianie i wybudzanie z pewnością działa elegancko, tylko o tym nie wiesz ;-)

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 maja 2015, o 11:39 
Offline
Nowy

Dołączył(a): 18 cze 2014
Posty: 10
Pomógł: 0

Rozumiem, że babol tkwi w programie, jednak nie mogę go znaleźć , kiedy w programie były delaye to wszystko działało.
Dodałem timer i zmieniłem kod obsługi klawisza.
Mogę wrzucić poprzedni kod jeśli zajdzie taka potrzeba.

xor rozwiązanie jest pewnie banalne, mógłbyś mnie olśnić, bo ja kompletnie zgłupiałem ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 maja 2015, o 12:22 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

W 'case 0:' nie modyfikujesz zmiennej 'n', zawsze będzie równa 0 i program nigdy nie przejdzie do innego przypadku.

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 maja 2015, o 12:38 
Offline
Nowy

Dołączył(a): 18 cze 2014
Posty: 10
Pomógł: 0

Jeśli dodam inkrementację zmiennej n to procek nie zasypia tylko od razu przechodzi do dalszych case'ów.
No nie wiem gdzie jest błąd, i czemu toporny program napisany w 10 minut na delayach działał? W tym programie zmienna n była zwiększana w procedurze obsługi klawisza. Może problem leży gdzie indziej?


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



Kod starego programu:
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: 22 minutach ]

Wydaje mi się, że procesor zasypia w momencie wciśnięcia przyciusku a budzi się w momencie puszczenia.
Widziałem w, którymś poradniku Pana Mirka, że można za pomocą warunku kazać. Procesorowi reagować tylko na konkrety stan w przerwaniu PCINT. Jeśli jednak próbuję sprawdzać to za pomoćą makra !(PINx & KEYx), umieszczam makro w procedurze przerwania, nie mogę skompilować programu z powodu: Symbol KEYx coannot be resolved.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 maja 2015, o 17:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 paź 2014
Posty: 237
Lokalizacja: Rzeszów
Pomógł: 11

Nie wiem, czy to akurat powoduje Twoje problemy, ale nie podoba mi się "sekcja" przycisku.

if( !key_lock && !(PINB & KEY1 ) )

Warunek ten będzie spełniony dla key_lock = 0 i stanie niskim na porcie KEY1

następuje potem obsługa przycisku .... i:

else if( key_lock && (PINB & KEY1 ) ) key_lock++;

warunek ten będzie spełniony, gdy key_lock różne od zera i zwolniony przycisk KEY1 (stan wysoki), a potem następuje to: key_lock++

Nigdzie nie zauważyłem zerowania key_lock, a bez tego nigdy nie będzie spełniony warunek pierwszy, nawet gdy nadusimy przycisk. Nie powinno tam być key_lock=0 ?

Co do PCINT0 - jak dobrze zrozumiałem notę katalogową, przerwanie to generowane jest zmianą stanu (dowolnie w którym kierunku). Naciskając przycisk generujesz przerwanie, puszczając generujesz następne.
Przerwanie INT0 możesz zdefiniować na stan niski, zbocza lub zmianę stanu na przeciwny.

Bawiłem się ostatnio w SLEEP'em i u mnie PCINT0 nie wybudzało procka (dziwna sprawa - procek obsługiwał przerwanie i zasypiał), wybudzało go INT0.
Dlaczego - nie wiem - będę się jeszcze bawił.

_________________
Mr. Nobody



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2015, o 11:12 
Offline
Nowy

Dołączył(a): 18 cze 2014
Posty: 10
Pomógł: 0

Udało mi się ;)

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


W pierwszym ifie sprawdzam czy jest stan niski a następnie czy wykonywany jest case 0
W drugim jeśli stan jest wysoki usypiam procka (natychmiast po wybudzeniu wyłączam przerwanie PCINT3), także mam reakcję tylko na wciśnięcie ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2015, o 13:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

Na tym procku podczas słodkiego snu z włączonym BOD mam pobór pradu 25uA a bez niego 6uA. Bateria lipo 3,7V
Jak u Ciebie?

_________________
--... ...-- - --- -- . -.-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 maja 2015, o 10:58 
Offline
Nowy

Dołączył(a): 18 cze 2014
Posty: 10
Pomógł: 0

Pobór prądu przy zasilaniu bateryjnym 4,5V i 5V z USB jest na granicy rozdzielczości mojego miernika miernika.

Tryb snu jak w kodzie powyżej, pobór wygląda tak:

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 maja 2015, o 19:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

A to ślicznie działa :)

_________________
--... ...-- - --- -- . -.-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 maja 2015, o 06:10 
Offline
Użytkownik

Dołączył(a): 06 maja 2014
Posty: 415
Lokalizacja: Kraków
Pomógł: 26

Cytuj:
Na tym procku podczas słodkiego snu z włączonym BOD mam pobór pradu 25uA a bez niego 6uA. Bateria lipo 3,7V


W jaki sposób dokonałeś tak precyzyjnego pomiaru prądu?
Po prostu dobrym miernikiem, czy masz jakieś patenty na pomiar bardzo małych prądów chwilowych i średnich ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 maja 2015, o 14:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

Zwykłym żółtym chińskim i dobrym Vellemana - to samo jest więc jest pewna nadzieja że tyle około jest :)
Procek jest budzony co 8 sekund watchdogiem, wiec jest dużo czasu na pomiar.
Zamieniam też miejscami końcówki pomiarowe, też jest ok, np. 6uA i -6uA

_________________
--... ...-- - --- -- . -.-



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot], Majestic-12 [Bot] i 11 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