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



Teraz jest 13 lut 2025, o 19:59


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 11 mar 2017, o 12:43 
Offline
Użytkownik

Dołączył(a): 07 paź 2016
Posty: 29
Pomógł: 0

Witam.
Proszę o informację czy jest możliwe wygenerowanie częstotliwości 36kHz w trybie PWM.
Procesor to ATMEGA 328 taktowana kwarcem 18 432 000.
Poniżej fragment kodu .
Kod:
OCR0A = 128;

TCCR0A |= (1 << COM0A1);
      
TCCR0A |= (1 << WGM01) | (1 << WGM00);
   
TCCR0B |= (1 << CS00);






Program działa ale generuje częstotliwość 72kHz czyli dwa razy większą.
Poradziłem z tym sobie przepuszczając sygnał przez kostkę 4013 która jest dzielnikiem przez 2.

Dodam że chodzi tylko o częstotliwość generowaną całkowicie sprzętowo bo wiem że można ustawić TIMER na wywołanie przerwania wewnętrznego
i w procedurze przerwania zmieniać stan wyjścia uzyskując żądane 36kHz.



Ostatnio edytowano 11 mar 2017, o 13:07 przez elmuerto, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2017, o 12:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Witam,
edytuj post i wklej w syntax...C. to ważne. ;)
18432000/8/64=36000 :)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

chyba tak. ;)

------------------------ [ Dodano po: 10 minutach ]

:? momento nie ten tryb....ten zlicza do 255.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2017, o 13:19 
Offline
Użytkownik

Dołączył(a): 07 paź 2016
Posty: 29
Pomógł: 0

Ano właśnie.
Po wgraniu tych ustawień oscyloskop pokazał jakieś 9kHz przy wypełnieniu jakieś 25%



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2017, o 13:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

A czy to musi być w trybie 3 ? bo tu nie widzę toglowania przy porównaniu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2017, o 13:58 
Offline
Użytkownik

Dołączył(a): 07 paź 2016
Posty: 29
Pomógł: 0

W zasadzie to uzyskany efekt mnie zadowala.
Zastanawiałem się tylko czy nie można pozbyć się tego scalaka dzielącego przez 2.
Dopiero zaczynam zabawę z mikrokontrolerami .
Nie było by problemu gdyby był prescaler 2 ale nie ma.
Gdzieś wyczytałem że możliwości generowania częstotliwości PWM są ograniczone przez dostępne prescalery ale czy to prawda ?

Jeśli jest jakiś tryb który rozwiązuje problem to zaproponuj proszę wcale nie upieram się przy trybie 3.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2017, o 14:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

zerknij na tryb CTC w timer0, WGM01
wg mnie
preskaler 1, CS00
COM0A0 , Toggle OC0A on Compare Match.
czyli 18432000 / 1 / 256 / 2 = 36000
Obrazek

------------------------ [ Dodano po: 4 minutach ]

Obrazek


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2017, o 14:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Możesz zastosować tryb 10 - PWM, Phase Correct - ICR'em określasz częstotliwość, a OCR'em wypełnienie.
Próbuj - jeśli nie pójdzie - pomogę.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2017, o 08:54 
Offline
Użytkownik

Dołączył(a): 07 paź 2016
Posty: 29
Pomógł: 0

Witam.

Nie powiem że wszystko już rozumiem i ogarniam ale najważniejsze że działa :D

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


Powyżej kod .
Dziękuję za pomoc.

Pozdrawiam.



Ostatnio edytowano 12 mar 2017, o 15:04 przez elmuerto, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2017, o 12:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

fajnie że działa. :)
Taki mały jeszcze szczególik, właściwie dwa. :roll:

1- edytuj posty i wklej kody w syntax>>C. :!:

2- w kodzie ustawiasz w Mode 5. (PWM, Phase Correct)
elmuerto napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


ustawiając w rejestrze TCCR0A --> bit COM0A1 , zobacz co się ustawiło. :D
Teraz wszystko myślę będzie jaśniejsze. ;)
Obrazek
Pozdrawiam.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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