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



Teraz jest 4 gru 2024, o 21:11


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
 Tytuł: Początki ;)
PostNapisane: 21 lis 2011, o 17:34 
Offline
Użytkownik

Dołączył(a): 05 lis 2011
Posty: 81
Pomógł: 0

Witam
Na wstępie muszę powiedzieć, że książka ładnie opisuje składnię języka C dla AVR ( tylko jakos wskaznikow nie zrozumialem, ale muszę doczytać) jak i również taktowanie procesora oraz fuse :D
Lecz nie o to mi chodziło mianowicie już na początku mam problem (może nie do końca problem, ale wątpliwość).
Mam taki kod: dioda podłączona jest + do PD0
I wersja i tu nie działa tak ja powinno - nie gaśnie tylko świeci non-stop
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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

dlaczego I wersja nie działa ? - oto moje pytanie ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2011, o 18:01 
Offline
Moderator
Avatar użytkownika

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

Zobacz w pierwszym przykładzie masz tak:

ON; ----> czyli zapalasz diodę LED - świeci sobie
_delay_ms(1000); ---> teraz trwa przerwa 1s, procek nic nie robi a dioda świeci
OFF; ---> teraz gasisz diodę LED

.....> teraz pętla przechodzi od razu do pierwszej linijki bez żadnego oczekiwania - czyli znowu zapala diodę.

Zatem czas pomiędzy wyłączeniem a zapaleniem diody (czas gdy NIE ŚWIECI) trwa zaledwie kilka taktów zegara !!! - hmmm musiałbyś wejść do MATRIXA żeby gołym okiem zobaczyć, że ta dioda LED przygaśnie w ogóle ;)

a jeśli zrobisz tak:

ON; ---> zapalam LED
_delay_ms(1000); ---> czekam 1s z zapaloną diodą LED
OFF; ---> gaszę diodę LED
_delay_ms(1000); ----> a teraz ładnie czekam sekundę ze zgaszoną diodą

....> i sytuacja się powtarza

teraz jaśniej ????

A co drugiego przykładu to spróbuj już sam go rozszyfrować - tylko przyjrzyj się i doczytaj czym różnią się operatory

^=

od

|= oraz &= ~

bo chyba te rozdziały z operacjami logicznymi też troszkę hmmm pominąłeś? zgadłem ? ;)

_________________
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: 21 lis 2011, o 18:04 
Offline
Użytkownik

Dołączył(a): 05 lis 2011
Posty: 81
Pomógł: 0

aaa no wlasnie juz wiem czemu nie swieci ;P a co do tej II wersji to wiem jak działa czyli zmienia stan na przciwny watpliwosci mialem tylko co do I wersji :P, ale teraz zastanawiam sie nad zapalaniem diody po kolei i gaszenie z powrotem <mysli> ;)
operatory logiczne dobrze przyswoilem - tak mi sie zdaje



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2011, o 20:18 
Offline
Moderator
Avatar użytkownika

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

No to życzę miłego zastanawiania się i prób a w razie czego można tu śmiało dopytać ;) powodzenia

_________________
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: 22 lis 2011, o 18:02 
Offline
Użytkownik

Dołączył(a): 05 lis 2011
Posty: 81
Pomógł: 0

To co planowalem zrobione ;) tylko teraz sie zastanawiam czy dalo by rade to zrobic jakos w jednej petli for ?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Mam jeszcze pytanie mianowicie jak podlaczyc takie micro-switch (ten pierwszy) http://matsuyamaco.com/ts.htm zeby dzialalo bo juz rozne kombinacje probowalem i nie daje rady :?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lis 2011, o 18:54 
Offline
Moderator
Avatar użytkownika

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

jeśli chodzi o te dwie pętle, to ta druga jest zła ;) sam zastanów się dlaczego ? (tzn przypadkowo ci działa niby tak jak byś chciał ale nie wiesz tak naprawdę dlaczego - tak mi się zdaje. Podpowiedź: sprawdź co by się działo z tą drugą pętlą gdybyś zmienną i zdefiniował np tak: int8_t i zamiast uint8_t i. Zrób sobie próbę to się przekonasz)

Poza tym oczywiście, że można w jednej pętli i to na kilka różnych sposobów. Jeden i najprostszy to zrobić tablicę a drugi to dwa if'y wewn. takiej pętli.

Natomiast jeśli chodzi o ten micro-switch - to w ogóle ale to w ogóle już nie rozumiem twojego pytania więc nie jestem w stanie pomóc.

_________________
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: 22 lis 2011, o 19:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8587
Pomógł: 337

zależy o jakie podłączenie ci chodzi :)

typowe użycie to zwieranie pinu do masy czyli wymuszenie na pinie z przyciskiem np PB1 stanu niskiego (1 lub 2 do procka a 3 lub 4 do masy) mozna tez do plusa :)

w takt switchach masz to proste zwierane jest 1 i 3 bo miedzy 1 i 2 oraz 3 i 4 masz zworki ładnie to widać na nocie , a na fotce zaznaczyłem ci miedzy którymi jest włacznik

Obrazek

a programowo to na wypranym pinie musisz sprawdzić czy jest stan niski (przycisk wciśniety) odczekac chwilke dla eliminacji drgań i sprawdzic ponownie .

np:

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


a tu masz schemat podłaczenia przycisku do powyższego programu
Obrazek

Mam nadzieję ze jasne jest wszystko
tu jak widzisz właczamu przycisk miedzy pin a mase z użyciem wbudowanego w atmege
rezystora podciagającego pin do VCC. To najłatwiejsza i najczesciej stosowana metoda na przycisk. Ale można też tak :

Obrazek

w tym wypadku nietrzeba juz stosowac właczenia pull-upa w atmedze .

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Ostatnio edytowano 22 lis 2011, o 19:24 przez SunRiver, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lis 2011, o 19:10 
Offline
Użytkownik

Dołączył(a): 05 lis 2011
Posty: 81
Pomógł: 0

mirekk36: no wlasnie widze ze juz nie dziala poprawnie tzn zapala zasi i na tym koniec - musze do tego dojsc czemu :P
SunRiver: thx ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lis 2011, o 19:51 
Offline
Użytkownik

Dołączył(a): 05 lis 2011
Posty: 81
Pomógł: 0

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

mysle, ze tamta wersja nie bylo poprawna dla int8_t, poniewaz zalozeniem bylo, ze i<=7 (co bylo spelnione samo w sobie, bo i=7), a przedzial dla int8_t jest od-128 do 255 wiec jeszcze "lecialo" od 0 do tego -128. czy dobrze mowie ? :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lis 2011, o 20:21 
Offline
Użytkownik

Dołączył(a): 05 lis 2011
Posty: 81
Pomógł: 0

a czy taka wersja z tablica jest dobra ? :)
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: 22 lis 2011, o 20:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8587
Pomógł: 337

Coś sie tak michał uparł na to int8??
zacznij od uint8_t :)

pętla for jest obliczalna i zawsze liczy warunek w kroku od 0 do wartości czyli np w twoim przypadku gdzie i=7 masz wiec moze isc od 0 do 7 albo od 7 do 0 :) niesłysząłem o przypadku zliczania w zakresie wartości zadanej. w zmiennej typu int8 masz 1 bajt czyli 8 bitów wiec mozesz tam przechować wartość FF czyli 255 maxymalnie.

ale nie znaczy to ze petla bedzie biegła do -127

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lis 2011, o 20:40 
Offline
Użytkownik

Dołączył(a): 05 lis 2011
Posty: 81
Pomógł: 0

nie uparlem sie tylko kolega mirekk36 chcial mi pokazac ze ta petla nie do konca jest poprawna przy typie int8_t tak jak bylo w przypadku uint8_t :P
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: 22 lis 2011, o 20:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8587
Pomógł: 337

na oko wygląda poprawnie , ale nie wiem co na to kompilator
zdefiniowałes zmienną i i tablice 16 elementową z przypisaniem wartości

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lis 2011, o 21:13 
Offline
Moderator
Avatar użytkownika

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

Michal_PB1 --> oczywiście, że chodziło mi o to abyś świadomie użył takiej konstrukcji:

Kod:
for(i=7;i>=0; i--)



;) więc teraz już wiesz o co chodzi w tym przypadku.

A z tablicą też dobry sposób wymyśliłeś ;) ... więc szybko idziesz do przodu i o to chodziło ... powodzenia

_________________
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  
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ł: 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