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



Teraz jest 12 sie 2020, o 07:10


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 34 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 16 kwi 2020, o 21:54 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 45
Pomógł: 0

Witam, próbuję na wszelkie sposoby na PD4 i PD5 uzyskać częstotliwość 200kHz do 1MHz. Do ok 150kHz wszystko działa poprawnie według kalkulatora Timerów. Sprawdzam na oscyloskopie i zgadza się na Timer 0 ; 1 ; i 2. Testowałem tryb NORMAL i CTC. Jednak od 150kHz wzwyż nie jestem w stanie uzyskać czestotliwosci - pomimo poprawnego ustawienia prescalera i wartości rejestru według tabeli z MkAVRCalculatora. Przy ustawieniu przykładowo 180kHz na oscyloskopie mam ok 130kHz. Sprawdzałem na dwóch oscyloskopach i jest to samo. Taktowanie zewnętrzne 12Mhz i testowo miałem tez kwarc 18,321Mhz. Zastanawiam się czy wersja procka ma znaczenie. Jest na nim napisane ATMEGA644PA, w Eclipse jest do wyboru 644 lub 644P. MkAVRCalculator wykrywa jako 644p mimo ze jest na nim 644PA - nie wiem czy ma to znaczenie ale rejestry się zgadzają i błędu przy kompilacji nie ma tym bardziej ze do 150kHz wszystko jest okej.
Program nie wykonuje nic innego tylko to. Ktoś spotkał się z czymś podobnym?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 kwi 2020, o 23:24 
Offline
Użytkownik

Dołączył(a): 26 lut 2014
Posty: 279
Lokalizacja: Gdańsk
Pomógł: 13

Wstaw kod



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 kwi 2020, o 05:33 
Offline
Moderator
Avatar użytkownika

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

marcin-9999 napisał(a):
MkAVRCalculator wykrywa jako 644p mimo ze jest na nim 644PA

obejrzyj też sobie ten poradnik tak na przyszłość


_________________
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 kwi 2020, o 08:16 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 45
Pomógł: 0

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



oto kod timera. powinno zmieniac stan na przeciwny 200khz
oscyloskop pokazuje ok 135khz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 kwi 2020, o 09:19 
Offline
Moderator
Avatar użytkownika

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

po pierwsze to pokaż jak masz ustawione fusebity

a po drugie to weź sobie analizator stanów logicznych nawet taki Saleae za 40zł z allegro i nim sprawdzaj

_________________
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 kwi 2020, o 09:53 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 45
Pomógł: 0

mam taki analizator ale jest to samo. powyżej 120khz pokazuje zle. sprawdzalem na atmedze 32 i też nie mogę uzyskac wiekszej czestotliwosci na timerze 0 kwarc 12mhz fusbity: low: 0xff high: c9
czyli opcja oscylatora zewnetrznego >8mhz i jtag wylaczony.
do 120khz pokazuje dobrze. powyżej jak dam 200khz czy więcej to i tak mi pokazuje około 140khz oscyloskop



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 kwi 2020, o 12:20 
Online
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2017
Posty: 329
Lokalizacja: Gliwice
Pomógł: 28

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

Dla kwarca 20 MHz mogę bez problemu ustawiać częstotliwości z kalkulatora, skończyłem sprawdzać na 10 MHz OCR z preskalerem ustawionym na 1. To wszystko na zestawie ATB oraz z pomocą Saleae. Wszystko zgodne z kalkulatorem.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 kwi 2020, o 16:33 
Offline
Użytkownik

Dołączył(a): 11 sty 2015
Posty: 131
Pomógł: 18

Zealota napisał(a):
Dla kwarca 20 MHz mogę bez problemu ustawiać częstotliwości z kalkulatora, skończyłem sprawdzać na 10 MHz OCR z preskalerem ustawionym na 1. To wszystko na zestawie ATB oraz z pomocą Saleae. Wszystko zgodne z kalkulatorem.

Skoro dla 20MHz działa to dla pozostałych też musi działać. Może coś z tymi kwartzami nie tak, albo z kondensatorami lub połączeniami.

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

Czy podany kod to na pewno całość programu?
Bo może są jakieś inne przerwania np. od INT, które przypadkiem zajmują czas procka i blokują przerwania od Timera.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 kwi 2020, o 17:30 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 45
Pomógł: 0

To co napisał kolega Zealota działa miałem ponad 200khz ale to jest timer1 z pwm w trybie fast pwm, A ja chce w trybie normal lub ctc by precyzyjniej ustawiać czestotliwosc wpisujac wartość 0-255 do rejestru. Dlaczego do 130khz jest ok? przeciez prescaler sie juz nie zmienia tylko wartosc 0-255 lub 0-65535 w przypadku timera 1. Domyslnie były przerwania zewnętrzne na enkoder ale do testów jest to wywalone z programu, poza tym jak enkoder sie nie obraca to nie sa one wykonywane. Czy ktoś podpowie jak to uzyskac na timerze 8bitow?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 kwi 2020, o 17:58 
Online
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2017
Posty: 329
Lokalizacja: Gliwice
Pomógł: 28

marcin-9999 napisał(a):
To co napisał kolega Zealota działa miałem ponad 200khz ale to jest timer1 z pwm w trybie fast pwm, A ja chce w trybie normal lub ctc by precyzyjniej ustawiać czestotliwosc

No nie za bardzo, dzięki fladze CTC_MODE powinieneś dostać tryb CTC - no chyba, że wyrwałeś z kontekstu kawałek kodu kiedy masz podany cały .
Mam dziwne wrażenie że całkowicie błądzisz po omacku. Podaj wreszcie cały kod, sprzęt na który wrzucasz hexa, środowisko pracy z którego korzystasz itp.
Bez tego to tylko marnujesz czas tych, którzy próbują Ci pomóc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 kwi 2020, o 18:22 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 538
Pomógł: 136

marcin-9999 napisał(a):
Dlaczego do 130khz jest ok?

Preskaler masz ustawiony na 1, więc wartość OCR1A determinuje, ile taktów mikrokontroler ma na wykonanie procedury obsługi przerwania. Twoja procedura obsługi przerwania (poniżej pewnej wartości OCR1A) może zajmować więcej taktów, dlatego gubisz przerwania, a co za tym idzie częstotliwość jest inna od oczekiwanej, bo zmiana stanu pinu następuje w przerwaniu.
Zrezygnuj z przerwania i spróbuj generować przebieg sprzętowo, jak pokazał kolega Zealota.

_________________
Miksowanie kodu C i ASM przy użyciu GCC



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 kwi 2020, o 21:32 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 45
Pomógł: 0

faktycznie andrews to może być problem przy wyższych czestotliwosciach, ze obsluguje pin w przerwaniu, jutro sprawdzę i dam znać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2020, o 16:50 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 45
Pomógł: 0

Witam, kod kolegi Zealota działa uzyskałem MHz w testach - dzięki. Jeszcze sprawdzam timer1 fast pwm tryb 14.
Chciałbym regulować częstotliwość i wypełnienie ale nie wiem czy dobrze rozumiem rejestry:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

ICR1 ustawiam czestotliwość? bo nie bardzo rozumiem ten tryb



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2020, o 17:21 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 538
Pomógł: 136

Nie musisz używać Fast PWM. Możesz mieć tak, jak miałeś, czyli tryb (4) CTC.
Chodziło mi o to, żebyś usunął procedurę obsługi przerwania i linijkę TIMSK1 |=(1<<OCIE1A);.
Zamiast tego skonfiguruj pin OC1A (PD5) tak, aby jego stan był sprzętowo zmieniany na przeciwny po osiągnięciu wartości OCR1A:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Oczywiście pin PD5 musi być ustawiony jako wyjście.
Przy tak skonfigurowanym timerze wystarczy zmieniać wartość OCR1A, aby zmieniać częstotliwość na pinie.
Częstotliwość będzie wynosić:
f_out = F_CPU / ( 2 * preskaler * ( OCR1A+1 ) )

Zauważ też, co być może będzie dla Ciebie istotne, że wartość rejestru OCR1A jest w mianowniku, co oznacza, że zależność częstotliwości od wartości tego rejestru jest nieliniowa.


Autor postu otrzymał pochwałę

_________________
Miksowanie kodu C i ASM przy użyciu GCC



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2020, o 17:38 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 45
Pomógł: 0

Oczywiście ze mam PD5 jako wyjście. Rozumiem ale chciałbym także teraz regulować wypełnienie. To co kolega pisał wyżej zadziałało, usunąłem procedure obsługi przerwania w tym zmienianie tam stanu pinu i uzyskałem wysoką częstotliwość ok 2Mhz więcej nie potrzebuje.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2020, o 17:51 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 538
Pomógł: 136

marcin-9999 napisał(a):
ale to jest timer1 z pwm w trybie fast pwm, A ja chce w trybie normal lub ctc

marcin-9999 napisał(a):
Rozumiem ale chciałbym także teraz regulować wypełnienie.

To w końcu chcesz PWM czy CTC?

_________________
Miksowanie kodu C i ASM przy użyciu GCC



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2020, o 18:16 
Offline
Użytkownik

Dołączył(a): 11 sty 2015
Posty: 131
Pomógł: 18

marcin-9999 napisał(a):
Witam, kod kolegi Zealota działa uzyskałem MHz w testach - dzięki. Jeszcze sprawdzam timer1 fast pwm tryb 14.
Chciałbym regulować częstotliwość i wypełnienie ale nie wiem czy dobrze rozumiem rejestry:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

ICR1 ustawiam czestotliwość? bo nie bardzo rozumiem ten tryb

Dobrze kombinujesz.
W ICR ustawiasz częstotliwość,
w OCR wypełnienie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2020, o 18:59 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 45
Pomógł: 0

andrews - CTC juz odpaliłem testowałem i działa. Teraz chciałbym PWM regulować i czestotliwosc i wypelnienie przy dosyc duzych czestotliwościach 100kHz do 1MHz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2020, o 19:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 899
Lokalizacja: Trójmiasto
Pomógł: 167

Ten procek ma maksymalne taktowanie 20Mhz. Biorąc timer 8bitowy i najprostszy fastPWM uzyskasz częstotliwość 20Mhz/256 = 78,125khz i to jest max co da się wyciągnąć (chyba że przetaktujesz uC wtedy nieco więcej). O 100khz możesz zapomnieć nie mówiąc już o 1Mhz. Tym bardziej w trybach PWM z korekcją fazy.



Ostatnio edytowano 21 kwi 2020, o 19:30 przez xentis, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2020, o 19:26 
Offline
Użytkownik

Dołączył(a): 11 sty 2015
Posty: 131
Pomógł: 18

xentis napisał(a):
Ten procek ma maksymalne taktowanie 20Mhz. Biorąc timer 8bitowy i najprostszy fastPWM uzyskasz częstotliwość 20Mhz/256 = 78,125khz i to jest max co da się wyciągnąć (chyba że przetaktujesz uC wtedy nieco więcej). O 100khz możesz zapomnieć nie mówiąc już o 1Mhz. Tym bardziej w trybach PWM z korekcją fazy.

Nie do końca. 1MHz to nie da rady, ale 100kHz jak najbardziej tak. Wystarczy dla zagara 12MHz dać Prescaler 1, tryb właśnie PWM14 i ustawić ICR1=120. Rozdzielczość nie za wielka, ale jednak 100kHz jest.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2020, o 19:29 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 538
Pomógł: 136

xentis napisał(a):
uzyskasz częstotliwość 20Mhz/256 = 78,125khz i to jest max co da się wyciągnąć

Dlaczego nie da się więcej. Przecież timer nie musi zliczać do 256. W trybie 14, jak już kolega wyżej napisał, częstotliwość można ustawić wpisując odpowiednią wartość do rejestru ICRn (przy której następuje zerowanie licznika). Wpisując ICRn=19 uzyskujemy podział przez 20, czyli 1MHz przy taktowaniu 20MHz. Problem jest jednak nieco innej natury. Rozdzielczość PWM będzie wtedy stosunkowo niska, czyli np. dla F_CPU=20MHz i f_pwm=1MHz można będzie ustawić tylko 20 poziomów PWM (w trybie FastPWM).

_________________
Miksowanie kodu C i ASM przy użyciu GCC



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2020, o 19:31 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 45
Pomógł: 0

I bardzo dobrze 20 poziomow rozdzielczosci jest jak najbardziej ok. Tylko czy dobrze ustawiłem Timer1? 9 postów wyżej? bo nie generuje mi tak jak powinno.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2020, o 19:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 899
Lokalizacja: Trójmiasto
Pomógł: 167

Ok, generalnie się da, ale kolega marcin-9999 wspominał o regulacji wypełnienia i częstotliwości, więc ta cała regulacja będzie śmiechu warta, bo regulacja częstotliwości znacząco będzie wpływać na rozpiętość regulacji wypełnienia...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2020, o 19:49 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 538
Pomógł: 136

marcin-9999 napisał(a):
bo nie generuje mi tak jak powinno.

A jak Twoim zdaniem powinno? Czego oczekujesz?

Sięgnij może po dokumentację mikrokontrolera, tam masz podane wzory na częstotliwość w poszczególnych trybach PWM.
W trybie 14 częstotliwość PWM wyniesie:
f_pwm = F_CPU / ( preskaler * ( 1+ICR1 ) )

_________________
Miksowanie kodu C i ASM przy użyciu GCC



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2020, o 19:52 
Offline
Użytkownik

Dołączył(a): 11 sty 2015
Posty: 131
Pomógł: 18

A może wyjście masz nie ustawione ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2020, o 19:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 899
Lokalizacja: Trójmiasto
Pomógł: 167

@andrews wzory tu nie pomogą jak kolega marcin-9999 nie zrozumie działania tego trybu, bo jak mi się wydaję (choć może źle mi się wydaje) stwierdzenie:
marcin-9999 napisał(a):
bo nie generuje mi tak jak powinno.
wynika zapewne z tego, że do rejestru OCR1 wstawia wartość większą niż do ICR1.
A w tym trybie należy pamiętać że zmiana częstotliwości poprzez OCR1 zmienia również maksymalną wartość wypełnienia jaką można ustawić, i jest ona zawsze równa wartości wpisanej do ICR1.



Ostatnio edytowano 21 kwi 2020, o 19:59 przez xentis, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2020, o 19:59 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 538
Pomógł: 136

marcin-9999 napisał(a):
Oczywiście ze mam PD5 jako wyjście.

marcin-9999 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.

_________________
Miksowanie kodu C i ASM przy użyciu GCC



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2020, o 21:42 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 45
Pomógł: 0

czyli wg wzoru f_pwm = F_CPU / ( preskaler * ( 1+ICR1 ) )
fpwm=12000000/(1*21)
fpwm=okolo 600khz przy wpisanym icr1=20 i rejestrem OCR1A moge oscylować wypełnieniem od 0-20 tak?
a na oscyloskopie mam ponad 20khz na (PD5 w atmega644) to za mało.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 kwi 2020, o 21:49 
Offline
Użytkownik

Dołączył(a): 11 sty 2015
Posty: 131
Pomógł: 18

Wstaw kod, bo to musi działać.
Coś musiałeś źle ustawić.
Jak chcesz równe 600kHz to ICR = 19. Ale to nie zmienia faktu że 20kHz to zdecydowanie za mało.

------------------------ [ Dodano po: 15 minutach ]

Prescaler masz na pewno 1?
Procek napewno chodzi z 12MHz. Może masz fusebity poprzestawiane i CKDIV8 dzieli F przez 8.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 kwi 2020, o 09:16 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 45
Pomógł: 0

ok wklejam kod. pokazuje 100khz przy tej konfig zamiast 600khz:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

kwarc 12Mhz i nie ma zaznaczonego CKDIV8 podzialu

------------------------ [ Dodano po: 22 minutach ]

dobra panowie dziala. przy wgm13 mialem jeden daszek < zamiast <<. powyżej wklejone juz poprawione.



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: 34 ]  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 3 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