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



Teraz jest 17 cze 2025, o 21:02


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 17 gru 2017, o 15:22 
Offline
Nowy

Dołączył(a): 26 lut 2017
Posty: 9
Pomógł: 0

Witam.

Proszę o analizę kodu (procesor ATmega328p)

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


Program ma na zadanie sterować dwoma przekaźnikami oraz przełączać za pomocą jednego przycisku, po kolei pwm1 i pwm2 ... docelowo chcę dorobić jeszcze z trzy szybkości zmian PWM.
Problem pojawił się podczas obsługi 1 przycisku:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Niby działa, ale nie do końca, bo zamiast po naciśnięciu włączyć "pwm2", a przy następnym naciśnięciu włączyć "pwm1" to od razu przełącza do "pwm1".

Próbowałem różnych wariacji kodu, ale wynik zawsze był taki sam czyli wykonuje się pierwsza pętla i zaraz po niej druga. W skrajnych przypadkach nie działo się nic.
A i jeszcze jeden mały problem z PWM po zainicjowaniu cały czas na wyjściu mam pik około 3V, co skutkuje świeceniem diody.
Czy to jest normalne podczas kiedy OCR0A jest ustawione na 0?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 gru 2017, o 15:32 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2596
Pomógł: 129

Żeby zlikwidować pik przy pwm=0 musisz ustawić PWM w trybie zanegowanym i odpowiednio sterować.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 gru 2017, o 15:36 
Offline
Moderator
Avatar użytkownika

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

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


Jak się robi tak tragiczne wcięcia w kodzie to nie dziwota, że się swojego BABOLA nie widzi. Pomijam już fakt, że tragicznie podchodzisz do obsługi przycisków no ale ok ... jak się uprzeć to tak też można - tyle że ty przez te wcięcia nie widzisz, że schowałeś obsługę drugiego przycisku "w brzuchu" obsługi pierwszego przycisku - o ile ja też dobrze widzę - bo ciężko coś dojrzeć przy takich wcięciach jak mówię.

Zainteresuj się po pierwsze moim blogiem a szczególnie tym artykułem:

http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html

i zrób obsługę przycisków jak się należy ;) a zobaczysz, że pójdzie ci później z górki

a ogólnie jeśli chodzi o pisanie takiego kodu to polecam obserwuj bieżący poradnik:

http://mirekk36.blogspot.com/2017/12/au ... iczne.html

bo będzie w nim mnóstwo szczególnie dla ciebie interesujących informacji jak podchodzić do programowania NIEBLOKUJĄCEGO - bez żadnych kocich delayów ;)

_________________
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: 17 gru 2017, o 18:21 
Offline
Nowy

Dołączył(a): 26 lut 2017
Posty: 9
Pomógł: 0

Ok dziękuję za podpowiedzi i za linki.
Zabieram się za czytanie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2017, o 15:03 
Offline
Nowy

Dołączył(a): 26 lut 2017
Posty: 9
Pomógł: 0

Poczytałem oglądałem i mam kolejne pytania:

kod z bloga o drganiach styków;
Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Działa jak najbardziej.

Chciałem dopiąć kolejną diodę do tego kodu i już nie działa dlaczego? Nie widzę błędu swojego mimo usilnych prób zrozumienia dlaczego tak to działać nie chce;
Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Dlaczego nie chce działać dioda podpięta pod PD2? Nie rozumiem tego :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2017, o 15:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1173
Lokalizacja: Kraków
Pomógł: 94

Linia 20 i linia 31.
Nie możesz tak zapisać. Powinno być:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
analogicznie dla drugiej wymienionej linijki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2017, o 16:06 
Offline
Nowy

Dołączył(a): 26 lut 2017
Posty: 9
Pomógł: 0

Ok. A dlaczego kompilator nie stwierdził, że jest coś nie tak... jest więcej takich zapisów gdzie nie można używać przecinka?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2017, o 16:14 
Offline
Użytkownik

Dołączył(a): 24 kwi 2013
Posty: 454
Pomógł: 30

Poza tablicami i argumentami funkcji, to raczej nigdzie nie można.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2017, o 16:17 
Offline
Nowy

Dołączył(a): 26 lut 2017
Posty: 9
Pomógł: 0

Ok dziękuje.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2017, o 16:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1173
Lokalizacja: Kraków
Pomógł: 94

Manekj napisał(a):
Ok. A dlaczego kompilator nie stwierdził, że jest coś nie tak... jest więcej takich zapisów gdzie nie można używać przecinka?
Przecinek jest operatorem. Opis pod linkiem: https://pl.wikibooks.org/wiki/C/Operato ... _przecinek
A dlaczego kompilator nie zwrócił błędu? Bo go nie ma. Wg podanego opisu, wykonują się poszczególne działania, czyli ustawiasz kierunek/zmieniasz wartość dla pinu LED. Natomiast sam zapis LED_1 nie robi w zasadzie nic.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2017, o 17:23 
Offline
Nowy

Dołączył(a): 26 lut 2017
Posty: 9
Pomógł: 0

Dziękuję jeszcze muszę sporo poczytać i zapamiętać.
I przede wszystkim najtrudniejsze dla mnie to nauczyć się czytać kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2017, o 20:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1173
Lokalizacja: Kraków
Pomógł: 94

Manekj napisał(a):
Dlaczego nie chce działać dioda podpięta pod PD2? Nie rozumiem tego :(
Autor twierdzi inaczej ;)
Przecinek ma niższy priorytet niż "|="?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2017, o 20:48 
Offline
Moderator
Avatar użytkownika

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

roske napisał(a):
Masz rację - odszczekuję

Na tym forum nawet w stosunku do samego siebie wypadałoby stosować mniej agresywne wypowiedzi

_________________
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: 27 gru 2017, o 22:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1173
Lokalizacja: Kraków
Pomógł: 94

roske napisał(a):
Marhef czy ja Cię jakoś obraziłem, albo ogólniej: czy moja odpowiedź wzbudziła w Tobie jakiekolwiek negatywne odczucia?
Nie, sam pisałem z głowy, więc nie wiedziałem, czy dobrze piszę. Stąd pytanie o priorytety operatorów. A uwaga, który pin jest ustawiany, żeby wskazać, na podstawie czego wysnułem taki wniosek.
Gdyby Twoja wypowiedź była obraźliwa, odezwałbym się na pw. Staram się nie kłócić na forum.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2018, o 19:31 
Offline
Nowy

Dołączył(a): 26 lut 2017
Posty: 9
Pomógł: 0

Dziękuję za wyjaśnienia związane z operatorami.

Od poprzedniego posta walczę z zrozumieniem timerów i dla ćwiczeń przerobiłem przykład z tej strony, co podał Pan mirekk36

Cytuj:
Zainteresuj się po pierwsze moim blogiem a szczególnie tym artykułem:

http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html
dokładnie z trzeciej części.

Kod przerobiłem z ATmega32 na swój procesor ATmega328P (F-CPU 16MHz). Starałem się aby wcięcia były poprawne, ale nie wiem czy wszędzie takie są.

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


Mo i nie działa, a przynajmniej nie tak jak powinien.

Zastosowałem Timer 16 Bitowy.
Ustawienia szukałem w noce katalogowej ATmegi328P po kolei:

Strona 172 ustawienie trybu CTC:
Obrazek

Strona 173 ustawienie prescaler:

Obrazek


Strona 184 ustawienie przerwania CompareMatch i tu wystąpił problem po parunastu próbach doszedłem jak to ustawić:

Obrazek

i przeszukałem AVR Device Explorer

Obrazek

oraz

Obrazek


niestety nie znalazłem wzmianki w nocie ja ustawić TIMSK1 oraz jaki rejestr ustawić tak aby kompilator nie zgłaszał błędu.
Ustawiłem tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

inne ustawienia kompilator nie przyjmował dlatego opisałem na rzutach, co zmieniłem aby kompilator chciał to kompilować opisy z noty nie działały.


Czyli całe ustawienie timera TC1 16bit wygląda tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Przestawiam schemat jak to podłączyłem:

Obrazek


I teraz jak to działa:

Po skompilowaniu i wgraniu w do procesora mrugnie dioda LED3 (1<<PD7), a po chwili miga , co około 4s i nie blokuje się gdy nacisnę przycisk czyli działa, ale jakoś bardzo długo.


Po krótkim naciśnięciu przycisku KEY1 (1<<PB4) zmienia mi się tylko stan diody LED1, a po dłuższym nienacinaniu przycisku nie dzieje się nic, a miała zapalać się dioda LED2.

Według opisu Pana mirekk36 po krótkim naciśnięciu inicjalizujemy zmienna "flag" po naciśnięciu i odczekaniu ustalonego czasu (wait_time_s = 3;) powinna zrealizować się druga akcja czyli zaświecić LED2. I teraz nie wiem czy ta część dobrze zrozumiałem Aktualnie 2 akcja nie działa.

Mogę liczyć na doprecyzowanie, co jest nie tak z tymi moimi ustawieniami?



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

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