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



Teraz jest 24 mar 2026, o 00:27


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 25 lut 2015, o 11:33 
Offline
Użytkownik

Dołączył(a): 28 lis 2014
Posty: 79
Pomógł: 0

Witam serdecznie :)

Po dość długiej przerwie z uC postanowiłem wrócić gdyż mogę już przeznaczyć na to więcej czasu.
Postanowiłem przypomnieć sobie podstawy. Zaczołem od prostej diody LED:

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



Na płytce stykowej wszystko dobrze podpięte. Mam pytania i wątpliwości do tego kodu, który napisałem.

1. Ustawiłem czas zwłoki między włączeniem a wyłączeniem diody 100ms czyli 0,1 sekundy w rzeczywistośći dioda miga co 1s. Nie spotkałem się z czymś takim jeszcze dlatego tutaj o tym piszę.
2. Procedura obsługi klawisza chyba ma jakieś nie dociągnięcie, mianowicie w zasadzie to jest brak reakcji a dioda miga raz o wartość 100 ms a raz o 10 ms i tak w kółko. Gdzie popełniłem błąd??


Jestem pewny, że popełniłem jakieś trywialne błędy których nie potrafię się doszukać. Z góry dziękuję za wskazówki ale i przepraszam za takie błędy. Postanowiłem napisać gdyż męcze się z tym od jakiegoś czasu (od wczoraj). Swój zasób pomysłów co może być źle wykorzystałem.

Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lut 2015, o 11:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2014
Posty: 448
Lokalizacja: DKL
Pomógł: 53

Co do czasów i rozbieżności w tym zakresie to sprawdź jakie taktowanie ustawiasz w projekcie i porównaj je z rzeczywistym taktowaniem uC.

W kwestii obsługi przycisku to nie zastosowałeś żadnej obsługi drgań styków. Polecam lekturę: http://mirekk36.blogspot.com/2012/10/dr ... ak-to.html

_________________
Migracja z punktu B do punktu C
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lut 2015, o 11:46 
Offline
Moderator
Avatar użytkownika

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

Ghann napisał(a):
(!(PORTB & (1<PB0)))

A to jest "najciekawszy" stwór w tym programie - w jednej linii aż kilka błędów ....

Posiada kolega Bluebooka?

_________________
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: 25 lut 2015, o 14:23 
Offline
Użytkownik
Avatar użytkownika

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

Z kodu wynika, że podłączyłeś przycisk do pinu PB0. No i ustawiłeś ten pin jako wyjście w stanie niskim a nie wejście podciągnięte do Vcc.

Jeśli już dobrze podłączysz przycisk to program będzie działał w następujący sposób:
- bez wciśniętego przycisku dioda będzie migać co 100ms
- z wciśniętym przyciskiem jedno mignięcie będzie co 100ms a drugie co 10ms, następne znowu co 100ms itd.

Jeśli program miał działać tak, że bez wciśniętego przycisku dioda miała migać co 100ms a z wciśniętym co 10ms to powinieneś zainteresować się instrukcją else.

Musi sobie kolega dużo podstaw poprzypominać :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2015, o 14:39 
Offline
Użytkownik

Dołączył(a): 28 lis 2014
Posty: 79
Pomógł: 0

Zapomniałem dodać, że przed przerwą nie byłem zbyt dobrym programistą tylko zwykłym początkującym.
Przypomniałem sobie jak obsługiwać przyciski. Napisałem taki program:

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


Założenie proste, dwa przyciski każdy z nich zapala tą samą diodę. Moje pytanie do Was: Jak zrobić, żeby tym samym przyciskiem wyłączyć daną diodę?? Czyli klikam raz i dioda się zapala, klikam drugi raz i dioda gaśnie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2015, o 14:56 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Możesz to zrobić na przykład za pomocą "flagi". Powołujesz przed pętlą główną, dodatkową zmienną która będzie pełnić rolę flagi, i wykorzystujesz ją w warunku z przyciskiem.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Tak bym to zrobił ja, początkujący :)

PS.
Mam nadzieję że nigdzie się nie walnąłem, piszę na "sucho" :)

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2015, o 15:01 
Offline
Użytkownik

Dołączył(a): 16 sty 2015
Posty: 84
Pomógł: 6

wystarczy po wciśnięciu przycisku zrobić zamiast sumy logicznej (zwanej też alternatywą) OR alternatywę wykluczającą czyli XOR znaczek tej operacji to ^

(a ja nie będę pisał Ci kodu bo to nie ma sensu ;) )



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2015, o 19:15 
Offline
Użytkownik

Dołączył(a): 28 lis 2014
Posty: 79
Pomógł: 0

No tak suma modulo 2 działa bez zarzutu. Ale bardziej interesują mnie flagi, gdyż można to wykorzystać w dalszych projektach, a mam takie w planach. Mianowicie żeby móc jednym przyciskiem obsługiwać kilka funkcji.

No ale niestety nie działa ten kod z flagami. Diody się zapalają ale po drugim wciśnięciu już nic się nie dzieję. A co to jest ta flaga tak łopatologicznie ??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2015, o 19:59 
Offline
Użytkownik

Dołączył(a): 16 sty 2015
Posty: 84
Pomógł: 6

flaga to jest takie ustrojstwo które informuje o czymś ...
zwykle flaga ma 2 stany - włączony, wyłączony czy też aktywny, nieaktywny więc często jest to robione jako zmienna boolean (w języku C inicjalizowana przez skrót bool z biblioteki stdbool.h)
co można tam sobie zapisać? co tylko chcesz a z natury jest dualne czyli właśnie np poprzedni stan diody albo czy wielki zderzać hadronów zniszczył już ziemię (polecam stronę http://hasthelargehadroncolliderdestroy ... ldyet.com/).
Flagi przydają się np. przy robieniu programowego zbocza (narastającego/opadającego) czyli zapisujesz sobie poprzedni stan sygnału i jeśli jest on różny od obecnego stanu to znaczy ze wydarzyło się zbocze
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i dzięki tak skonstruowanemu warunkowi będziesz wykrywał moment wciśnięcia przycisku (oraz wszystkie ew. drgania zestyków) oraz moment puszczenia

to np jest wykorzystanie flagi (flagą jest poprzedni stan)
flaga to jest po prostu zapis jakiegoś wydarzenia itp.
Nie potrafię tego lepiej wytłumaczyć - z tym tematem jest tak że jak się nie wie co to jest to wydaje się to wiedzą tajemną a w momencie jak już pojmiesz zasady wykorzystywania tego to nie będziesz widział w tym nic niesamowitego - flagi to flagi i już ;P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2015, o 22:14 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Ghann napisał(a):
... No ale niestety nie działa ten kod z flagami. Diody się zapalają ale po drugim wciśnięciu już nic się nie dzieję. A co to jest ta flaga tak łopatologicznie ??


Właśnie wgrałem ten kod u siebie, i działa. Co prawda nie idealnie, ale jednak działa.

Drobne zmiany i działa tak jak sobie tego życzysz :) Nie będzie to jednak miało nic wspólnego z kodem nieblokującym :( , no ale do testowania może się przyda.

Rozwiązanie które podał kolega rekon będzie stokroć lepsze :)

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

_________________
http://www.marcingibas.pl



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

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