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



Teraz jest 2 wrz 2026, o 21:40


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 3 sty 2016, o 13:15 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

Cześć koledzy i koleżanki. Czasami na filmikach p. Mirek używa delay, żeby opóźnić główną funkcję programu. Kiedy jest coś takiego potrzebne i kiedy trzeba tego używać?
Pytanie 2:
https://www.youtube.com/watch?v=tIS1LX6if3E poradnik pt: "Mikrokontrolery AVR - ćwiczenia - diody LED"
minuta 38 z hakiem.
p. Mirek używa rzutowania:
Było:
PORTA = 128;
a potem nie mogło być PORTA = ~128; a musiało być PORTA = (uint8_t)~128;



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2016, o 13:23 
Offline
Użytkownik

Dołączył(a): 04 cze 2013
Posty: 517
Pomógł: 26

elektronikq napisał(a):
Cześć koledzy i koleżanki. Czasami na filmikach p. Mirek używa delay, żeby opóźnić główną funkcję programu. Kiedy jest coś takiego potrzebne i kiedy trzeba tego używać?

Kolego delay nie opóźnia funkcji tylko ją zatrzymuje na czas delay i w tedy nic się nie wykonuje w kodzie. Kiedy używać? Jak potrzebujesz coś na szybko przetestować i wiesz że zatrzymanie programu nie spowoduje komplikacji w pracy twojego kodu
Czyli delay używać można w bardzo prostych programach np: miganie diodą

_________________
Przewodnik|Sterownik akwariowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2016, o 14:20 
Offline
Moderator
Avatar użytkownika

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

elektronikq napisał(a):
p. Mirek używa rzutowania:
Było:
PORTA = 128;
a potem nie mogło być PORTA = ~128; a musiało być PORTA = (uint8_t)~128;

Zajrzyj tutaj:
http://atnel.pl/domyslna-promocja-do-typu-int.html

bo to właśnie z tym jest związane - z domyślną promocją do int


Autor postu otrzymał pochwałę

_________________
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: 3 sty 2016, o 14:53 
Offline
Użytkownik
Avatar użytkownika

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

Liczba 128 w reprezentacji binarnej wygląda tak 0b10000000.
Mając na uwadze domyślna promocje do int, tą liczbę można by zapisać tak 0b00000000 10000000.
Po negacji bitowej otrzymamy coś takiego 0b11111111 01111111.

Nas interesuje młodszy bajt ale kompilator o tym nie wie. I przy próbie przypisania tej liczby do 8-bitowego rejestru (PORTA), kompilator ostrzeże nas, że w wyniku tej operacji utracimy starszy bajt. Aby poinformować kompilator o naszych zamiarach robimy właśnie to rzutowanie.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2016, o 15:12 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

matekogon napisał(a):
elektronikq napisał(a):
Cześć koledzy i koleżanki. Czasami na filmikach p. Mirek używa delay, żeby opóźnić główną funkcję programu. Kiedy jest coś takiego potrzebne i kiedy trzeba tego używać?

Kolego delay nie opóźnia funkcji tylko ją zatrzymuje na czas delay i w tedy nic się nie wykonuje w kodzie. Kiedy używać? Jak potrzebujesz coś na szybko przetestować i wiesz że zatrzymanie programu nie spowoduje komplikacji w pracy twojego kodu
Czyli delay używać można w bardzo prostych programach np: miganie diodą

Dzięki za odzew w temacie.

Był taki filmik z diodami, i pewnie dalej jest! W nim p. Mirek po wgraniu programu miał problemy, diody zaczęły świecić od razu tak jak nie powinny. Wklepał tego delay na początku bodajże 10ms i wszystko było ok. Komentarz jak pamiętam był taki:
Procesor nie zdążył podciągnąć pinów do VCC... i teraz pytanie skąd mam widzieć kiedy zdąży a kiedy nie zdąży.
Co do delay to kolega ma rację, że pauza. Dziękuje za poprawkę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2016, o 19:45 
Offline
Użytkownik

Dołączył(a): 04 cze 2013
Posty: 517
Pomógł: 26

elektronikq napisał(a):

Był taki filmik z diodami, i pewnie dalej jest! W nim p. Mirek po wgraniu programu miał problemy, diody zaczęły świecić od razu tak jak nie powinny. Wklepał tego delay na początku bodajże 10ms i wszystko było ok. Komentarz jak pamiętam był taki:
Procesor nie zdążył podciągnąć pinów do VCC... i teraz pytanie skąd mam widzieć kiedy zdąży a kiedy nie zdąży.
Co do delay to kolega ma rację, że pauza. Dziękuje za poprawkę.



Kolego piny podciąga się do VCC w tedy gdy wykorzystuje się je jako wejścia aby ustalić na nich stan. Tzn gdy nic nie jest podawane na te piny to stan jest niski(bo są podciągnięte przez rezystor wewnętrzny do VCC). Natomiast gdy nie podciągniemy to na pinie będzie stan nie ustalony i może wariować avr.
Jeśli chodzi o miganie diodą i wstawianie delay. Wyobraź sobie że program wykonuje się z ogromna prędkością i następuje przy tej prędkości zmiana stanu diody czyli włącz, wyłącz. Przy takiej prędkości nie jesteś w stanie zauważyć kiedy dioda zapali się kiedy zgaśnie co w efekcie wyglada jak by dioda świeciła słabo. Natomiast jak wstawisz delaya to program zaświeci diodę poczeka czas określony przez delaya następnie pętla się zacznie od nowa i nastąpi zgaszenie diody kolejne czekanie poprzez delay i tak w nieskończoność.

_________________
Przewodnik|Sterownik akwariowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2016, o 21:29 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

Rozumiem działanie delay. On pauzuje.
Chodzi mi o całkiem co innego, nie mogę znaleźć tego filmiku, chodziło o opóźnienie pętli głównej, czy coś takiego.
Co do podciągania do VCC to nie tylko przy przyciskach, jak np. dioda się podłączona katodą do pinów AVR to jedynka podana na katodę spowoduje zgaszenie diody.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2016, o 23:16 
Offline
Użytkownik
Avatar użytkownika

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

elektronikq napisał(a):
Był taki filmik z diodami, i pewnie dalej jest! W nim p. Mirek po wgraniu programu miał problemy, diody zaczęły świecić od razu tak jak nie powinny. Wklepał tego delay na początku bodajże 10ms i wszystko było ok. Komentarz jak pamiętam był taki:
Procesor nie zdążył podciągnąć pinów do VCC... i teraz pytanie skąd mam widzieć kiedy zdąży a kiedy nie zdąży.


Spójrz na poniższy kod i wyjaśnienie odnośnie obecności delaya przed pętlą while
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Cytuj:
W powyższym kodzie, dziwnym może wydawać się ten _delay_ms(10), ale tak jak w opisie okazuje się, że wprowadziłem po prostu sztuczne opóźnienie po załączeniu podciągania programowego, bo czas narastania stanu wysokiego był tak powolny, że szybciej zadziałał pierwszy IF i po starcie programu, okazywało się, że klawisz jest prawie zawsze wciśnięty. Gdy dodamy byle jakie opóźnienie albo zewnętrzny rezystor np 4,7K to można zapomnieć o tym _delay'u ;)


Kod i cytat pochodzą z tego artykułu http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html


Autor postu otrzymał pochwałę


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

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