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



Teraz jest 21 sty 2025, o 06:03


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 22 lip 2014, o 09:20 
Offline
Nowy

Dołączył(a): 25 cze 2014
Posty: 5
Pomógł: 0

Witam,
Jestem początkujący, więc pewnie mój problem jest prosty. Niestety nie mogę sobie z nim poradzić.
Napisałem prosty program migający diodą co 2s. Ustawiłem timer na CTC na 250Hz więc co 500 zliczeń mam 2 sekundy.
I wszystko działa OK dopuki nie podepnę sprawdzania wciśnięcia przycisku.
Wtedy czas przełączenia diody potrafi się skrócić o (tak na oko) połowę, ale tylko co jakiś czas.

To się dzieje nawet jeżeli mam tylko sprawdzanie jednego warunku bez żadnego delaya i ponownego sprawdzenia.
Tutaj załączam kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Może ma ktoś jakieś pomysły?
Z góry dziękuję.
Stefan



Ostatnio edytowano 22 lip 2014, o 09:29 przez wozniak@3dsystem.pl, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lip 2014, o 09:24 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

Niech kolega użyje prawidłowy znaczników syntax przy wklejaniu kodu, bo trochę go ucięło.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lip 2014, o 09:30 
Offline
Nowy

Dołączył(a): 25 cze 2014
Posty: 5
Pomógł: 0

Zorientowałem się już po wysłaniu, ale już poprawiłem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lip 2014, o 14:38 
Offline
Użytkownik

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

Dzieje się tak ponieważ w warunku if(KEY_DOWN) masz toglowanie pinu (ACT_TOG_1). Napisz jaki efekt chcesz uzyskać. Czy naciśniecie przycisku ma powodować zatrzymanie mrugania?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lip 2014, o 16:21 
Offline
Nowy

Dołączył(a): 25 cze 2014
Posty: 5
Pomógł: 0

Wszystko po warunku if (KEY_DOWN) //czy klawicz wcisniety? jest zakomentowane, więc defakto kod wygląda tak:

if (KEY_DOWN) //czy klawicz wcisniety?
{
}

Nie ma tam nic. Wygląda jakby samo sprawdzenie warunku coś zmieniało.
Chyba, że coś jest nie tak z komentarzami.

Program ma na razie po prostu migać diodą co 2 sekundy z pustym warunkiem if, który ma być tylko sprawdzany, ale ma nic nie robić.
Później chcę dodać funkcjonalność, która po wciśnięciu przycisku przełącza diodę nie czekając 2s i zeruje odliczanie - kolejna zmiana dopiero po 2 sekundach.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lip 2014, o 16:39 
Offline
Użytkownik

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

No to u mnie samo sprawdzenie warunku nic nie zmienia. Jakiego używasz procka?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lip 2014, o 17:56 
Offline
Nowy

Dołączył(a): 25 cze 2014
Posty: 5
Pomógł: 0

Atmega88



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lip 2014, o 18:07 
Offline
Użytkownik

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

Spróbuj tak: clean project, skompiluj i wgraj na AVR.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lip 2014, o 06:24 
Offline
Nowy

Dołączył(a): 25 cze 2014
Posty: 5
Pomógł: 0

Już próbowałem. Tworzyłem nowe. Teraz zrobiłem clean i nic. Ciągle to samo.
Coś jest nie tak w tym sprawdzeniu. Może nadpisuje do portu, ale wtedy powinno być szybciej.
Jak zmieniłem warunek na
if (1)
{

}
czyli bez sprawdzania portu to jest OK
Tylko mało to przydatne do sprawdzania przycisku :/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lip 2014, o 14:29 
Offline
Użytkownik

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

Wgraj ten program (dla Atmega88 8MHz).


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lip 2014, o 16:44 

Pomógł: 0

Wydaje mi się, że wszelkie operacje na zmiennej "licznik_timera" powinny być atomowe (ATOMIC_BLOCK).



Góra
  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 

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