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



Teraz jest 29 gru 2024, o 01:39


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 41 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 5 kwi 2012, o 09:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 243
Lokalizacja: wlkp
Pomógł: 2

Chciałbym prosić o jakąś podpowiedź jak zrealizować sterowanie jasnością diody poprzez przyciski w trybie PWM.
Zrobiłem już pierwsze ćwiczenie z książki z PWM'em. Jak zrobić żeby dioda zachowywała się tak, że gdy wcisnę przycisk do pewnego czasu i nagle puszczę, to dioda świeci z taką jasnością, przy której puściłem przycisk.
Fragment kodu najmilej widziany, chciałbym żeby ktoś mnie naprowadził.. ;P
Dziwnie to działa, bo jak puszczam przycisk to i tak dalej dioda się rozjaśnia.
Mieszałem coś z "else" i negowałem pin diody, ale nic to nie dawało.

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: 5 kwi 2012, o 09:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Zainteresuj sie innym rodzajem pętli :), bo petla for zawsze będzie tak działać.
A najlepiej rozpisz sobie co własciwie się dzieje po wcisnieciu przycisku a wszystko okaże się jasne :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2012, o 09:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 243
Lokalizacja: wlkp
Pomógł: 2

ah, do... while. Spróbuję coś wykombinować..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2012, o 09:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Akurat za tą pętlą to ja osobiście nie przepadam ;). Ale to ten kierunek :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2012, o 12:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 243
Lokalizacja: wlkp
Pomógł: 2

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


Na razie spróbujmy samo rozjaśnianie. Jakoś działa, ale trochę gorszy efekt dla oka niż przy pętli for.
Co należałoby zrobić żeby po osiągnięciu i=255 - dioda ma się świecić ciągle, a pętla ma się już nie kręcić przy przyciśniętym przycisku?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2012, o 12:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Pokombinować z warunkiem while .... dla podpowiedzi " && "

Edit:

I może wywalić zmienną "i", a zamiast tego "pobawić" się rejestrem OCR ( tak mi teraz wpadło do głowy )

Edit_1: Aż mnie świerzbi język żeby ci powiedzieć jak można to rozwiązać :) Ale twardy będę ;P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2012, o 12:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 243
Lokalizacja: wlkp
Pomógł: 2

daj proszę jeszcze jedną podpowiedź, ale bardziej trafiająca w sedno :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2012, o 12:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2012
Posty: 193
Pomógł: 6

Jeśli się nie mylę chodziło o dodanie jeszcze jednego warunku do pętli while sądząc po tym && :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2012, o 12:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Sedno uchwycił kolega KoreX :)
a dla jasnosci chodzi o
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: 5 kwi 2012, o 12:48 
Offline
Użytkownik
Avatar użytkownika

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

hmmm no tego ten teges ... ja bym to ...
a dobra zanim podam swój kod poczekam jeszcze trochę bo można ..... a && to bardzo trafne spostrzeżenie :)

_________________
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: 5 kwi 2012, o 18:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 243
Lokalizacja: wlkp
Pomógł: 2

Po ciężkich bojach zrobiłem 4 opcje:
*załącz na max
*wyłącz
*rozjaśnić
*ściemnić
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Chciałbym zobaczyć Wasze podejście do takiego zadania. Na pewno można to zrobić jakoś inaczej i lepiej.
Każdy chętny kto nawet nie brał udziału w temacie, a chciałby przedstawić swoją koncepcję, to też mile widziane :).
Nie mogłem już wykombinować żeby załącz/wyłącz zrobić na jednym klawiszu. Ukręciłem głowę, ale ostatecznie poddałem się i zrobiłem to na dwóch osobnych. XOR'em chyba to nie pójdzie... A może jednak, hm?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2012, o 18:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 paź 2011
Posty: 307
Lokalizacja: Lbt
Pomógł: 8

Moja koncepcja jest taki.
Przyciskiem wywoływać zewnętrzne przerwanie, w którym będzie instrukcja iteracji dla zmiennej globalnej. Zmienna ta będzie zmieniać się w zakresie 0-1 i w zależności od tego w pętli głównej będzie warunek while dla 2 różnych wartości zmiennej-kolejno wykonywanie instrukcji rozjaśniania i ściemniania.
Może się nie znam, ale ja bym kombinował w ten sposób :D

_________________
Ujemna delta to dopiero początek zabawy...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2012, o 19:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 243
Lokalizacja: wlkp
Pomógł: 2

Koncepcja - miałem na myśli oczywiście działający kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2012, o 19:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

No to jeszcze drgania styków masz do wyeliminowania. I if'y są też całkiem fajne do on/off;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2012, o 19:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 243
Lokalizacja: wlkp
Pomógł: 2

Fakt, brakuje eliminacji drgań. Do tej pory on/off robiłem tylko na if'ach i tutaj też próbowałem, i tak nie mogłem zrobić on/off na 1 przycisku. Pokaż Twoje wypociny, naprawdę jestem ciekaw innego podejścia :).
A układ przetestowałem bez przycisków tylko na drutach na stykówce, bo najszybciej. ;P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2012, o 20:24 
Offline
Użytkownik
Avatar użytkownika

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

czemu masz problem z ifem do wyłączenia

przecież wystarczy warunek if else if i zewnętrzne podciągnięcie pinu ze switchem do VCC (Aktywny LOW)
i wtedy już się możesz bawić :)

możesz też prosto zrobić na if- ach warunek ze zliczaniem naciśnięć :)
1 włącza 2 wyłącza

_________________
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: 5 kwi 2012, o 20:54 
Offline
Moderator
Avatar użytkownika

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

SunRiver napisał(a):
możesz też prosto zrobić na if- ach warunek ze zliczaniem naciśnięć :)
1 włącza 2 wyłącza


Dokładnie bo tymi pętlami while() w środku w ogóle blokujesz wszystko na maxa. Mi z kolei ciężko coś podpowiadać jak widzę w kodzie makra _BV() albo takie rzeczy: bit_is_clear(PINA,0).

_________________
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: 5 kwi 2012, o 21:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 243
Lokalizacja: wlkp
Pomógł: 2

mirekk36 napisał(a):
Mi z kolei ciężko coś podpowiadać jak widzę w kodzie makra _BV() albo takie rzeczy: bit_is_clear(PINA,0).


A co jest złego w tych makrach?

Proszę o podpowiedź do tego warunku na zliczanie naciśnięć. Jak to mniej więcej należy zrealizować?

Wydaje mi się, że w książce Mirka gdzieś coś podobnego opisane, ale nie mogę znaleźć.. ;P
_____________________________
EDIT.
Znalazłem to o czym myślałem - str 125, kombinować coś w tym kierunku, robiąc funkcję z tym licznikiem, i teraz pomyślałem, że może coś dać z modulo2, żeby odróżnić wciśnięcie parzyste od nieparzystego, czy jednak nie tędy droga?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2012, o 22:48 
Offline
Moderator
Avatar użytkownika

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

Wrangler napisał(a):
A co jest złego w tych makrach?


A co jest złego w przesunięciach bitowych ? np: (1<<PA0) ;)

Złego w _BV() nie ma nic, ale mi się osobiście źle taki kod czyta, to wszystko.

_________________
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: 5 kwi 2012, o 23:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 243
Lokalizacja: wlkp
Pomógł: 2

Nie no jasne, że przesunięcia są czytelniejsze.
Ale np bit_is_clear(PINA,0) czy różni się czymś od !(PINA & (1<<PA0)) ?
Mnie się to drugie makro nawet podoba, taki skrót, ale ja się nie znam.. ^^



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 kwi 2012, o 13:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

I jak walczysz jeszcze ??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 kwi 2012, o 15:06 
Offline
Moderator
Avatar użytkownika

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

Widzę, że walka przeniosła się na elektrodę.... a tam jak zwykle zaczyna się reklama własnych blogów i podpowiedzi .....

ale ok ....

w takim przypadku nawet nie ma co myśleć i walczyć z jakimiś drganiami styków, a problem można rozwiązać w super prosty sposób że aż strach.....

Wyjątkowo podaję przykład pomimo tego że kolega prezentuje kody pisane niezgodnie proponowanym przeze mnie stylem, przez co są jak dla mnie przynajmniej mało czytelne i dlatego jak mówiłem, nie jestem zbyt chętny pomagać i analizować takie kody na tym forum....

Mam nadzieję, jednak że tym przykładem jak to może przejrzyście wyglądać zachęcę jednak kolegę do stosowania się do dobrych zasad programowania w C dla AVR ;)

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


i niech mi ktoś powie, że tak napisany kod nie jest zdecydowanie bardziej czytelny i przejrzysty - a do tego działa w sposób hmm prawie nieblokujący - bo jak wspominałem wcześniej ten pomysł z tymi pętlami while() jako warunkami to było jakby lekkie nieporozumienie ..... na czas przyciskania klawisza BLOKOWAŁEŚ całą pętlę główną !!! a tymczasem nawet tak proste rzeczy można pisać w sposób nieblokujący jak widać. Dzięki czemu kod można szybko wzbogacić o kolejne np jakieś procesy współbieżne działające w tym samym czasie. I trzymanie wciśniętego klawisza nie będzie tego zbyt blokować

a jak dojdziesz do ostatnich rozdziałów książki a szczególnie do rozdziału o "Podstawach systemów czasu rzeczywistego" to takie programy będziesz pisał bez żadnego polecenia _delay_xx() .... i tego ci życzę żebyś to załapał jak najszybciej .... tylko proponuję z doświadczenia pisać kody jak się należy bo sam na tym szybko polegniesz a mi się już nawet nie chce tu tłumaczyć dlaczego.

_________________
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: 6 kwi 2012, o 15:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Ech co to robi z człowkieka czytanie pewnej książki ;)

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: 6 kwi 2012, o 15:32 
Offline
Moderator
Avatar użytkownika

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

Malutki_27 napisał(a):
Ech co to robi z człowkieka czytanie pewnej książki ;)


Ale za to jak się wygodnie czyta taki kod jaki napisałeś ;)

_________________
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: 6 kwi 2012, o 16:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 243
Lokalizacja: wlkp
Pomógł: 2

No dokładnie tak właśnie chciałem żeby mi to chodziło jak w Twoim kodzie Malutki_27. :)
Mnie się nie udało... ;/
W jakim celu jest "stan=2", można chyba było to pominąć?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 kwi 2012, o 19:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Można, ale wtedy nie będzie działać w 100% jak powinno :)
I teraz deczko nauki: powiedz dlaczego i jak to działa.
Tak na zachętę powiem ze wymyślenie tego sposobu zajęło mi jakieś 3 godziny :| .
Co prawda należy pamiętać o tym ze też się uczę programowania.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 kwi 2012, o 19:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 243
Lokalizacja: wlkp
Pomógł: 2

A dlaczego zainicjalizowałeś zmienną "stan" zerem, a następnie w if'ach i tak zmieniałeś jej wartość?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 kwi 2012, o 20:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Ojjj wyczuwam lenistwo :( jeżeli liczysz na to ze dostaniesz odpowiedź bez wysilenia swoich szarych komorek to się mylisz. Przesledz co się dzieje z ta zmienna w poszczególnych częściach programu, a odpowiedz kasynie się sama.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 kwi 2012, o 20:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 243
Lokalizacja: wlkp
Pomógł: 2

No właśnie nie bardzo rozumiem :P.
Usunąłem z Twojego kodu, co dla mnie było niejasne (w sensie zbędne) m.in. usunąłem inicjalizację "stan", po prostu zdefiniowałem zmienną, usunąłem również stan=2, i u mnie wszystko chodzi?
Stąd moje pytanie po co, bo chodzi na obu wersjach, a tej Twojej pierwotnej jak wspomniałem nie rozumiem do końca, i po tym co usunąłem stało się jasne.
Dam znać jak w 100% będę Ci w stanie napisać jak rozumiem Twój kod. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 kwi 2012, o 21:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

To podpowiem ci jeszcze tylko tyle, że ty używasz jako wlączników dwóch "drutów", a ja uzywam switchy ...



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: 41 ]  Przejdź na stronę 1, 2  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 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