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



Teraz jest 13 mar 2025, o 08:43


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 21 ] 
Autor Wiadomość
PostNapisane: 22 lut 2015, o 21:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 gru 2014
Posty: 25
Pomógł: 0

No i zaczęły się pierwsze problemy.
Oglądałem sobie wprawki Mirka na temat diod i zabrałem się za to sam. Problem mam już na samym początku:

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


Dioda ładnie się zapala, ale po tej sekundzie nie gaśnie.
Dodanie kolejnego delaya po zgaszeniu gasi diodę na czas określony w nawiasach, ale ja chcę zgasić diodę na wieki, a raczej wpisywanie miliarda milisekund, żeby zupełnie zgasić diodę jest bez sensu.
Pomożecie? ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2015, o 21:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 lip 2012
Posty: 157
Pomógł: 8

Źle wstawiony listing - Różowo-zielony J.




Gasisz diodę a zaraz po tym bez delaya ja zapalasz. Daj jeszcze jednego delaya i powinno być OK.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2015, o 21:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 gru 2014
Posty: 25
Pomógł: 0

A już wiem dlaczego... Pętla... tak jakoś zapomniałem...
Ale jeśli chcę tą diodę zapalić w tej pętli tylko na sekundę i zgasić ją i już nigdy nie zapalić, to jak to najprościej rozwiązać?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2015, o 21:31 
Offline
Użytkownik
Avatar użytkownika

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

To może tak:

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


Autor postu otrzymał pochwałę

_________________
Migracja z punktu B do punktu C
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2015, o 21:32 
Offline
Nowy

Dołączył(a): 17 paź 2014
Posty: 23
Pomógł: 1

Po sekundzie dioda gaśnie. Problemem jest to, że tego nie widzisz. W pętli while(1) zapalasz diodę, czekasz jedną sekundę, gasisz diodę, a następnie znowu ją zapalasz. Rozwiążesz swój problem dodając po PORTA |=(1<<PA0); opóźnienie _delay_ms(1000);
Źle wstawiony listing - Różowo -zielony J.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2015, o 21:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 lip 2012
Posty: 157
Pomógł: 8

Mikroklocek nie śpi, on zawsze coś robi, więc jak nie chcesz nic więcej jak tylko zapalenie diody na 1s to zapal ja, odczekaj 1s, zgaś i wprowadz program w pętlę nieskończoną while(1) i ze tak powiem w tej pętli go zajmiesz i nie wypuścisz.



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

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

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


Teraz dioda będzie się zapalać i gasnąć co 1000 milisekund.

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



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

Dołączył(a): 30 gru 2014
Posty: 25
Pomógł: 0

@matw
Coż, nie da się ukryć, najprościej będzie w ogóle nie umieszczać takiej instrukcji w pętli :)
@WoodPaker
Tak, to już wiem, ale ja nie chce nią migać, tylko zapalić na sekundę i zgasić na zawsze.

Ale, czysto hipotetycznie, gdybym chciał już w trakcie trwania programu zapalić tą diodę na sekundę i zaraz ją na wieki zgasić to jak to ugryźć?
Zacząłem coś kombinować z if else, ale nie mogę doprowadzić tego do działania:

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


Wprowadziłem zmienną "i" i zainicjowałem ją zerem. Dałem warunek w if, że jeżeli i==0 (czyli na początku) to dioda zapali się, poczeka 1s, zainkrementuje zmienna "i" i po inkrementacji ten warunek będzie nie spełniony, ale będzie spełniony warunek else if i==1. Tam zawarłem instrukcję, która ma wyłączyć diodę. Ale dioda zapala się i nie gaśnie. Na początku myślałem, że to wina pętli nieskończonej, ale zapisałem te warunki bez pętli i też dioda zapala się i nie gaśnie.
Tak jakby to "i" się nie zwiększało... Dlaczego?



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

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

Daj uint8_t i=0; przed pętle while.


Autor postu otrzymał pochwałę


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

Dołączył(a): 08 kwi 2013
Posty: 38
Pomógł: 2

"i" się zwiększa prawidłowo, dioda tez gaśnie, ale ma mikro sekundy, dodaj w 18 linii "_delay_ms(1000);", ale efektem będzie miganie tej diody, ponieważ za każdym razem w pętli (w linii 8) zeruje "i"


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


Autor postu otrzymał pochwałę


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

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

Daj przed zapaleniem flagę "zapal" i sprawdzaj warunek. Zaraz po zapaleniu ustawisz flagę i już nigdy dzięki temu jej więcej nie zapalisz po zgaszeniu. Ewentualnie po spotkaniu jakiegoś kryterium (np przycisk) zerujesz flage i wtedy na początku pętli znów się zapali.


Autor postu otrzymał pochwałę

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



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

Dołączył(a): 30 gru 2014
Posty: 25
Pomógł: 0

Oj flagi to chyba jeszcze nie mój poziom :)
Gdy przeniosłem uint8_t i; przed pętle while, to program działa tak jak chciałem. Oczywiste, że "i" mi się zerowało, ale jakoś ciężko mi było na to wpaść. Długa droga przede mną :)
Dziękuję wam bardzo :)



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

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

Paplo napisał(a):
Długa droga przede mną

Nie taka długa ;)

przy okazji ... oglądaj sobie na blogu np te poradniki:
http://mirekk36.blogspot.com/2014/05/mi ... rawki.html

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

Dołączył(a): 30 gru 2014
Posty: 25
Pomógł: 0

Właśnie od tego zacząłem i na tym bazuję :D
Przy okazji, jest coś o tych flagach w BB? Tak po spisie treści nie zauważyłem, może się inaczej nazywa?

EDIT:
Można w Eclipsie mieć w jednym projekcie dwa pliki main.c i wybierać który ma zostać skompilowany?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2015, o 23:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

Flaga to zmienna
Czyli robisz tak

flaga=0
Nieskończona_pętla
{
jeśli flaga jest równa 0 zapal_LED
jeśli_nie to nie zmieniaj jej stanu
flaga=1
_delay(1000ms)
zgaś_LED
}

I tak w kółko (specjalnie nie pisałem w C żebyś sam poćwiczył)

Teraz jak zmienisz flage na 0 to znów będzie można zapalić gdy dojdzie na początek nieskończonej pętli
Łapiesz?

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2015, o 23:18 
Offline
Moderator
Avatar użytkownika

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

Paplo napisał(a):
Przy okazji, jest coś o tych flagach w BB?

Pewnie, że jest - tylko pewnie popełniasz ten błąd jak wielu - że nie przeczytasz JEDEN RAZ całej książki, a później dopiero na wyrywki. To ważne - bo później nawet jakbyś zapomniał gdzie "o czymś" było napisane - to jednak w głowie utkwiłoby - że jednak było o tym .... w tym o tym co to jest flaga i jak w najprostszy sposób można wyjaśnić jej działanie. To proste to zwykła zmienna .... Podpowiedź: - rozdział o RTC ... propozycja - weź najpierw RAZ (jeden raz na spokojnie przeczytaj całą książkę) zobaczysz że to działa - bo startując z jej czytaniem na wyrywki albo próbując oceniać ją po spisie treści będziesz się wkurzał albo zniechęcał

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

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Paplo napisał(a):
Przy okazji, jest coś o tych flagach w BB?

:) ...jest, ale to nie jest jakiś dział o tym; to takie umowne oznaczenie jakiegoś sygnału/znaku najczęściej zero-jedynkowe że coś się wykonało (tak w uproszczeniu). I teraz znając tą flagę można ją wykorzystać np. tak:
przy deklaracjach piszesz:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

i tak: na początku flaga ma wartość różną od zera to "wejdziesz" w if'a, wykonujesz coś_tam, coś_tam i zerujesz tą flagę nie mając już do niego ( tego if'a :) ) dostępu; chyba że sam gdzieś znów napiszesz flaga_wl (liczbowo) różna od zera.

Pozdr.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2015, o 23:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 gru 2014
Posty: 25
Pomógł: 0

Mirku, czytam BB, ale należę do takich osób, że jak tylko będę czytał to wtedy zacznę się zniechęcać. Po prostu muszę zrobić sobie taki przerywnik, gdzie coś popiszę, pomigam. Muszę zobaczyć, że to działa. Do tego mam taką przypadłość, że jak czegoś nie zastosuję w praktyce to tego nie zapamiętam i ciężko mi tak wyciągnąć tą wiedzę z samej książki. Ale BB zapewne nie raz przeczytam, aż w końcu pojmę :)

@WoodPaker
Taka metoda jaką podałeś nie jest podobna do tego co ja napisałem? Jak analizuję twój "kod" to działanie chyba jest identyczne, ale trochę inaczej napisane :)

I ponawiam pytanie:
Można w Eclipsie mieć w jednym projekcie dwa pliki main.c i wybierać który ma zostać skompilowany? :)

EDIT:
Już wszystko rozumiem. Dzięki!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2015, o 23:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

Paplo napisał(a):
@WoodPaker
Taka metoda jaką podałeś nie jest podobna do tego co ja napisałem? Jak analizuję twój "kod" to działanie chyba jest identyczne, ale trochę inaczej napisane :)



Chyba nie. U ciebie nie ma sprawdzania zmiennej flaga, dzięki której wiesz czy dioda już była zaświecona czy jeszcze nie. Zobacz jak to napisał kicajek. On "ubrał" w C to co ja napisałem pseudoalgorytmicznie. W Twoim kodzie brak tego warunku.

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2015, o 23:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 gru 2014
Posty: 25
Pomógł: 0

Już teraz załapałem.
Znalazłem tez "exclude from build".
Dzięki za pomoc!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lut 2015, o 00:24 
Offline
Moderator
Avatar użytkownika

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

Cytuj:
Mirku, czytam BB, ale należę do takich osób, że jak tylko będę czytał to wtedy zacznę się zniechęcać.

Ale widzisz - ty źle rozumiesz - bo myślisz - że jak ja proponuję żeby na początku RAZ przeczytać nawet tak na sucho ... to ty jak niektórzy myślisz sobie - nieeee no ja przecież nic nie zapamiętam i nie zrozumiem ....

Panie zapamiętałby to może jakiś gieniusz ... nikt ot tak nie zapamięta i nie zrozumie, ale ma pewien pogląd - na całość - o co chodzi w książce i jak prowadzę czytelnika - to warto zrozumieć ....

a tak ? ... no jeśli nie wierzysz że to działa - to walcz po swojemu - pewnie stracisz więcej czasu ale jak go masz to spoko ;) ...

_________________
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: 21 ] 

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO