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



Teraz jest 3 sty 2025, o 06:04


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 15 lut 2014, o 13:00 
Offline
Nowy

Dołączył(a): 04 lut 2014
Posty: 7
Lokalizacja: Końskie/Tomaszów/Warszawa
Pomógł: 0

Witam wszystkich jest to mój pierwszy post na forum oraz pierwszy program jaki staram się stworzyć.
Na wstępie chwiałbym podziękować Panu Mirkowi za tak wspaniałą książkę oraz poradniki, bez nich nie zdecydował bym się na rozpoczęcie nauki programowania.
Teraz przejdę do sedna sprawy, mam problem z odpowiednim napisaniem programu. Składa się z dwóch części, oddzielnie działają idealnie jednak razem już nie wychodzi to co sobie zaplanowałem ;)
Program oparty jest w 99% na książce jednak przerobiłem go na Atmege 8(wiem źle zrobiłem ale tak to jest jak człowiek się nie słucha mądrzejszych..).
Pierwsza część odpowiada za szybkie mrugnięcia diodą pod kanałem PB1, druga opiera się na PWM i ma za zadanie płynnie rozjaśniać oraz przyciemniać diodę podłączoną do PB3.
Co trzeba zmienić aby wykonywanie drugiej części nie powodowało opóźnienia wykonywania pierwszej?
Jeśli brakuję jakiś informacji to bardzo przepraszam, postaram się odpowiedzieć na wszelkie pytania..jeśli je tylko zrozumiem ;)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Ostatnio edytowano 19 lut 2014, o 21:23 przez Syntezator, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2014, o 13:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

Musisz wywalić wszystkie delay, zamiast pętli for zastosować inną pracę ze zmiennymi no i przede wszystkim musisz poczytać o timerach programowych, bo one są podstawą opóźnień przy nieblokujących programach.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2014, o 14:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 gru 2012
Posty: 530
Lokalizacja: Bydgoszcz
Pomógł: 8

Zobacz jak ja steruję diodami RGB przez PWM, link znajdziesz w moim podpisie. Na dniach będę modyfikował kod, ale ten co tam jest działa bez zarzutu.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2014, o 20:57 
Offline
Nowy

Dołączył(a): 04 lut 2014
Posty: 7
Lokalizacja: Końskie/Tomaszów/Warszawa
Pomógł: 0

Dziękuję za podpowiedzi jednak muszę dalej prosić o pomoc.
Zgodnie z zaleceniami zabrałem się za same timery programowe, napisałem trzy funkcje mające za zadanie mrugać diodami.
Pierwsza zaczerpnięta jest w pewnym stopniu z Rozdziału "Wstęp do systemów czasu rzeczywistego str.443, druga "Sterowanie PWM" str.249, trzecia w oparciu o Poradnik "AVR Przerwania Cz.1".
Zgodnie z moim tokiem rozumowania obie powinny zapalać i gasić diodę co 1s, jednak występują zauważalne różnice między 2 a 1 i 3-dlaczego?
Kolejnym krokiem jaki chciałbym zrobić to wygenerowanie dwóch krótkich błysków i dłuższej przerwy w oparciu o ten timer.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Ostatnio edytowano 19 lut 2014, o 21:23 przez Syntezator, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lut 2014, o 21:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Umieść kod w znacznikach "synrax=c"
bo teraz to nic nie widać :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lut 2014, o 11:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

Syntezator napisał(a):
Kolejnym krokiem jaki chciałbym zrobić to wygenerowanie dwóch krótkich błysków i dłuższej przerwy w oparciu o ten timer.


Osobiście do takich efektów wykorzystuję dwie różne metody przede wszystkim w zależności od sytuacji i potrzeb:
- wykorzystująca (wg mnie najprostsza) switch-case gdzie w każdym przebiegu ustalasz dla timera konkretną wartość do odliczenia zanim znowu wejdzie w "przełącznik", a przy zadawaniu wartości wykonujesz też konkretne instrukcje, które sobie zaplanowałeś (tu można by znowu podzielić na kolejne metody, ale mieszał nie będę);

- nieco trudniejsza - choć czy ja wiem czy trudniejsza...po prostu inina 8-) - metoda oparta na matrycy bitowej i korzystająca z przesunięć bitowych. Ta również pozwoli na pojedyncze błyski, ale częściej ją wykorzystuje do generowania konkretnych serii zer i jedynek w ustalonym czasie.

Są też i inne sposoby oparte na If...else (w sumie idealnie nadaje się jak mamy tylko dwa czasy), ale ja najbardziej lubię powyższe ;)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lut 2014, o 17:18 
Offline
Nowy

Dołączył(a): 04 lut 2014
Posty: 7
Lokalizacja: Końskie/Tomaszów/Warszawa
Pomógł: 0

Wczoraj udało mi się zrealizować sekwencje błysków wykorzystując Timer2.
Niestety próba zrealizowania tego samego wykorzystując Timer1 już nie wypadła tak dobrze, w jaki sposób obliczyć taktowanie dla niego?
Dodatkowo próbując wykorzystać zarówno Timer1 jak i Timer2 realizowała się tylko część związana z Timerem1 dlaczego?
Poniżej podaje kod programu i ustawienia dla Timer1 oraz Timer2.

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: 20 lut 2014, o 17:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

Chyba nie do końca zrozumiałeś ideę timerów programowych :/ To coś co w przerwaniu może wyglądać mniej więcej tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Sporo na ten temat już napisano na forum...

A czy Timer1 jeden może pracować w trybie CTC, bo nawet nie wiem na jakim procku działasz ?

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lut 2014, o 18:12 
Offline
Nowy

Dołączył(a): 04 lut 2014
Posty: 7
Lokalizacja: Końskie/Tomaszów/Warszawa
Pomógł: 0

Procesor to Atmega8 strona 97 noty.
Znalazłem jeden ale wszystko psujący błąd..
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Po tej zmianie obie diody żyją, chociaż w przypadku Timera 1 preskaler musiałem przestawić na 1 aby było coś widać.
Jednak dalej nie wiem jak obliczać parametry dla Timera1.

Uzyskanie zapalania i gaszenia diody znalazłem w wielu wątkach, niestety jak poprawnie uzyskać sekwencje aby nie zakłócać pozostałej części programu już nie.

Masz racje nie do końca rozumiem ich idee, dlatego wrócę do przeanalizowania Poradników i książki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lut 2014, o 19:54 
Offline
Nowy

Dołączył(a): 04 lut 2014
Posty: 7
Lokalizacja: Końskie/Tomaszów/Warszawa
Pomógł: 0

Napisze post pod postem ale chciałbym wstawić działający kod do generowania płynnego rozjaśniania i ściemniania diody jednocześnie generując sekwencje błysków. Poprawiłem również komentarze bo jednak było sporo w nich błędów.
Niestety nie jest to tak jak być powinno, jednak działa.
Może ktoś pokusi się o przedstawienie poprawnego sposobu generowania błysków dla diody podłączonej do PC5?

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


Gdyby ktoś chciał zmodyfikowałem lekko fragment związany z Timerem2 wielkość programu spadła z 424 do 382 baitów.
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 

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