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



Teraz jest 4 cze 2026, o 20:38


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 12 wrz 2014, o 14:14 
Offline
Użytkownik

Dołączył(a): 01 mar 2014
Posty: 117
Lokalizacja: Kraków
Zbananowany użytkownik

Pomógł: 1

Chcę generować na wyjściu OCx sygnał prostokątny, jednocześnie w przerwaniu od porównania wysyłając na port odpowiednie dane, raz na okres. Jeżeli w trybie CTC ustawię "toggle" OCx, jasne jest dla mnie, że chcąc uzyskać częstotliwość X, muszę skonfigurować timer na 2*X. Ale przez to znów przerwanie od porównania pojawia mi się dwa razy w okresie. Czy w takim razie mogę OCx ustawić na "set" i dodatkowo w przerwaniu zerować pin portu z OCx? Oczywiście timer konfiguruję wtedy na częstotliwość X, a nie, jak przedtem, 2*X. Równie dobrze oczywiście mogę zrobić odwrotnie ("reset" i ustawianie pinu).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2014, o 21:10 
Offline
Użytkownik

Dołączył(a): 01 mar 2014
Posty: 117
Lokalizacja: Kraków
Zbananowany użytkownik

Pomógł: 1

Ok, to zadam inne pytanie: w jaki sposób zmienić stan pinu OCnx? Czy działanie na rejestrze PORT przynosi skutek? Przykładowo w ATmega1284 wyjście OC0A jest na pinie PB3. Czy w trakcie działania Timer0 w trybie CTC z włączonym Output Compare mogę zmieniać stan tego pinu rejestrem PORTB? Jeżeli przerwanie od porównania ustawi mi OC0A w stan wysoki, to mogę go programowo wyzerować?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2014, o 21:28 
Offline
Moderator
Avatar użytkownika

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

kudzu napisał(a):
Czy w trakcie działania Timer0 w trybie CTC z włączonym Output Compare mogę zmieniać stan tego pinu rejestrem PORTB?


Nie możesz jeśli ustawisz bity COM0A0 itp ... bo one zmieniają działanie portu ale jeśli wyłączysz wyjście tymi bitami to już możesz zmieniać stan pinu za pomocą PORTx

_________________
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: 13 wrz 2014, o 22:14 
Offline
Użytkownik

Dołączył(a): 01 mar 2014
Posty: 117
Lokalizacja: Kraków
Zbananowany użytkownik

Pomógł: 1

To po co w takim razie w timerach możliwość konfigurowania Compare Match Output na "Set OCnx on Compare Match" i "Clear OCnx on Compare Match"? Przerwań od timerów nie używa się raczej jednorazowo, a cyklicznie. Jeżeli timer raz ustawi stan wysoki na OCnx, to co go później zmieni?
To może operując flagami w rejestrze TIFRn mogę coś zdziałać?
Cały czas dążę do tego, żeby generując przebieg prostokątny na wyjściu OCnx przerwanie występowało tylko raz na okres.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2014, o 22:18 
Offline
Moderator
Avatar użytkownika

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

kudzu napisał(a):
Jeżeli timer raz ustawi stan wysoki na OCnx, to co go później zmieni?


jak to co ? timer panie ... timer

ja nie za bardzo rozumiem o co tobie chodzi ...

tyb CTC w połączeniu z COM0x pozwala przejąć sterowanie nad wyjściem OCnx i generować na nim przebieg prostokątny ... nie ma to nic wspólnego z przerwaniami bo te mogą żyć sobie własnym odrębnym życiem

_________________
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: 13 wrz 2014, o 22:46 
Offline
Użytkownik

Dołączył(a): 01 mar 2014
Posty: 117
Lokalizacja: Kraków
Zbananowany użytkownik

Pomógł: 1

mirekk36 napisał(a):
kudzu napisał(a):
Jeżeli timer raz ustawi stan wysoki na OCnx, to co go później zmieni?


jak to co ? timer panie ... timer


Si si, timer, jeżeli bity COMnx mam ustawione na "toggle" - wtedy każde zdarzenie porównania zmieni stan OCnx na przeciwny - zrozumiałe. A co, jeśli COMnx ustawię na "set"? Pierwsze zdarzenie porównania zmieni stan OCnx na wysoki, a następne? Wynika z tego, że też na wysoki. Nie kumam...

A co do przerwania, to ma ono tyle do tego, że chcę aby pojawiało się tylko przy zboczu narastającym (lub opadającym), a nie przy każdej zmianie stanu OCnx.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2014, o 23:17 
Offline
Moderator
Avatar użytkownika

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

kudzu napisał(a):
Nie kumam...


no tak ... bo, gdy timer doliczy do końca to znowu zmieni stan. Po to aby znowu mógł się zmienić gdy dojdzie do porównania. Jeszcze raz ci mówię nie ma tu żadnych zdarzeń ani nic wspólnego z przerwaniami rozumiesz? ... To działa niezależnie i sprzętowo - dzięki czemu można np szybko ustawić sobie generowanie nośnej np do pilotów podczerwieni 36kHz ....

Więc postaraj się to najpierw zrozumieć i nie mieszaj sobie w głowie na razie z przerwaniami. Bo przerwania jeszcze raz podpowiadam działają NIEZALEŻNIE od modułu sprzętowego generowania przebiegu na OCxn

_________________
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: 13 wrz 2014, o 23:22 
Offline
Użytkownik

Dołączył(a): 01 mar 2014
Posty: 117
Lokalizacja: Kraków
Zbananowany użytkownik

Pomógł: 1

Ale czy obaj myślimy o CTC? Tutaj porównanie to tenże koniec.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2014, o 23:26 
Offline
Moderator
Avatar użytkownika

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

Ja mówię o CTC a porównanie to wcale nie koniec. Porównanie to porównanie ... a koniec to wtedy gdy timer dobiegnie do końca czyli do 255 albo 65535 ;)

_________________
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: 13 wrz 2014, o 23:36 
Offline
Użytkownik

Dołączył(a): 01 mar 2014
Posty: 117
Lokalizacja: Kraków
Zbananowany użytkownik

Pomógł: 1

To już całkiem zgłupiałem. Myślałem, że rozumiem tryb CTC:/
W dokumentacji piszą tak:
"In CTC mode the counter is cleared to zero when the counter value (TCNT0) matches the OCR0A."
Zrozumiałem z tego, że licznik w CTC nie liczy do końca, czyli 0xFF, ale do OCRnx. Dzięki temu można regulować częstotliwość...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 wrz 2014, o 07:01 
Offline
Moderator
Avatar użytkownika

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

Kurczę no i wprowadziłem cię w błąd - PRZEPRASZAM - wczoraj wieczorem już nie myślałem

oczywiście, że w CTC timer zlicza do wartości OCR i się zeruje - wiesz - ja nie wiem czemu na początku jakoś ubzdurałem sobie że mówimy o PWM a nie CTC ... - przepraszam

w takim razie OD POCZĄTKU - twoje pytanie brzmiało:

kudzu napisał(a):
Ok, to zadam inne pytanie: w jaki sposób zmienić stan pinu OCnx? Czy działanie na rejestrze PORT przynosi skutek? Przykładowo w ATmega1284 wyjście OC0A jest na pinie PB3. Czy w trakcie działania Timer0 w trybie CTC z włączonym Output Compare mogę zmieniać stan tego pinu rejestrem PORTB? Jeżeli przerwanie od porównania ustawi mi OC0A w stan wysoki, to mogę go programowo wyzerować?


TAK MOŻESZ zmienić o ile bity COM01 COM00 są wyzerowane. Ale jeśli nie są tylko np jest tryb TOGGLE to wtedy TY nie możesz panować nad pinem OCx bo jego stan zmienia timer (togluje sobie nim) ... i rzeczywiście za pomocą ustawienia OCRx można sobie w jakimś zakresie regulować częstotliwość

_________________
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: 14 wrz 2014, o 10:37 
Offline
Użytkownik

Dołączył(a): 01 mar 2014
Posty: 117
Lokalizacja: Kraków
Zbananowany użytkownik

Pomógł: 1

Ok, dziękuję. Wyjaśniło mi się w takim razie:)
To skoro już wiadomo, że timer "togluje" sobie pinem OCx, to czy mogę w jakiś prosty, sprzętowy sposób wymusić, żeby przerwanie od porównania występowało co drugi raz, czyli de facto raz na okres? Bo normalnie przy "toggle" występuje 2x w okresie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 wrz 2014, o 11:49 
Offline
Moderator
Avatar użytkownika

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

kudzu napisał(a):
to czy mogę w jakiś prosty, sprzętowy sposób wymusić, żeby przerwanie od porównania występowało co drugi raz


No jak ? ;) co drugi raz ? ;) ... sprzętowo występuje przy porównaniu więc no nie przekombinujesz nic tutaj

ale co za problem sobie zrobić to programowo ? czyli sprawdzać chociażby stan inkrementowanej zmiennej w każdym przerwaniu i reagować TYLKO co drugi raz

if !((zmienna++)%2) ) .... wykonaj procedurę przerwania

_________________
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: 14 wrz 2014, o 12:17 
Offline
Użytkownik

Dołączył(a): 01 mar 2014
Posty: 117
Lokalizacja: Kraków
Zbananowany użytkownik

Pomógł: 1

Problem jest tylko taki, że potrzebuję wysyłać na port dane raz na okres - z częstotliwością 2304000 Hz przy zegarze 18432000 Hz, czyli co 8 taktów zegara:/ Nie wiem czy w ogóle jest to możliwe, a jak rozbuduję działania w przerwaniu, to będzie jeszcze gorzej. A jeżeli przerwanie będzie mi przeszkadzać jeszcze w połowie okresu to już masakra.



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

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