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



Teraz jest 30 sty 2025, o 15:29


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 30 sie 2014, o 11:23 
Offline
Użytkownik

Dołączył(a): 30 sie 2014
Posty: 170
Pomógł: 2

Witam, jaką maksymalną REALNĄ częstotliwość można otrzymać włączając i wyłączając dany port uC w pętli głównej. Czy to problem sprzętu? Tzn. Czy może trzeba dodać jakieś elementy dyskretne żeby móc szybciej przełączać port ze stanu wysokiego na niski.

"włącz
czekaj
wyłacz
czekaj"

albo nawet:

"włącz
wyłącz"


Dodatkowe info: attiny2313, C (eclipse+avr), wewn. generator 8Mhz + ckdiv8 -> 1Mhz (?), miernik uni-t 203 (max freq 1Mhz, duty 1-99%). Miernik podłączony bezpośrednio to "nóżki" odpowiedzialnej za pwm (nie wiem czy ma to znaczenie).

Mi udało się dojść do około 2kHz i to tyle. Z generatora w laptopie doszedłem do około 20khz - miernik wskazywał poprawnie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sie 2014, o 11:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

Wszystko zależy ile się wykonuje w pętli głównej. Załóżmy, że masz 10 instrukcji wykonujacych się dokładnie w jednym cyklu maszynowym procesora. Więc jeśli masz ustawione 8MHz czyli 8 000 000 Hz to częstotliwość będzie 1/10 z 8 000 000 Hz. jeśli tych instrukcji będzie 763 to masz 1/763 z 8 000 000. I tak dalej.
Jeśli oczywiście zrozumiałem to o co pytałeś :)


Autor postu otrzymał pochwałę

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sie 2014, o 13:00 
Offline
Użytkownik

Dołączył(a): 26 lut 2014
Posty: 227
Lokalizacja: LDZ
Pomógł: 22

Przy użyciu sprzętowego PWM TIMER0 możesz przy 1MHz osiągnąć w trybie fast PWM na pinie OC0A lub OC0B ok. 3.9kHz, a przy 8MHz możesz już osiągnąć częstotliwość 31,25kHz. Jeśli Twój program nic nie będzie robił poza przełączaniem pinu to możesz softwar-owo osiągnąć więcej w zależności od tego jak napisany będzie program. Jeszcze jest TIMER1, który pozwala ustawić wartość TOP na ICR1 z minimalną rozdzielczością 2 bit co przy 1MHz da częstotliwość na pinie ok. 250kHz, a przy 8MHz nawet 2MHz.

EDIT:
Teraz doczytałem, że chodzi Ci o przełączanie w pętli. Pokaż kod pewnie da się go usprawnić.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sie 2014, o 18:11 
Offline
Użytkownik

Dołączył(a): 30 sie 2014
Posty: 170
Pomógł: 2

W petli glownej jest tylko przelaczanie pinu. Nie chce uzywac timera czy sprzetowego pwm. Rozdzielczosc 2 bity, duty 50%. Funkcja opozniania uzywa timera? Postanowilem wiec opozniac wykonujac nieistotne zadania wykonywane w 1 cyklu zegarowym kazde. Ale nadal 2KHz to max.
Ps. Pozniej wyedytuje posta, pisane z tel.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sie 2014, o 19:23 
Offline
Użytkownik

Dołączył(a): 26 lut 2014
Posty: 227
Lokalizacja: LDZ
Pomógł: 22

Skoro Twój procek robi coś więcej niż tylko przełączanie pinu to może się nie udać uzyskać wyższej częstotliwości PWM programowego (wszelkie fukcje powierzone przerwaniom też zajmują czas procesora). Zrobiłem program testowy, który nic nie robi tylko zmienia stan na pinie drugim portu B i u mnie osiągnąłem 83kHz przy zegarze MCU 1MHz (jedno przejście pętli zajmuje 6 cykli zegarowych MCU). Skoro twój program zajmuje się innymi rzeczami to może warto użyć PWM sprzętowego. Mój kod testowy poniżej:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę


Ostatnio edytowano 31 sie 2014, o 18:57 przez ryba84, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sie 2014, o 23:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

Zrobiłem program testowy, który nic nie robi tylko zmienia stan na pinie drugim portu B i u mnie osiągnąłem 166kHz przy zegarze MCU 1MHz (jedno przejście pętli zajmuje 6 cykli zegarowych MCU).

I to jest dokładnie to o czym pisałem wyżej. 1 MHz/6=166 kHz

Zatem Twój procesor musi wykonywać dość sporo instrukcji żeby uzyskać 2 kHz
8 MHz/2 kHz=4 k-cykli


Autor postu otrzymał pochwałę

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2014, o 08:40 
Offline
Użytkownik

Dołączył(a): 30 sie 2014
Posty: 170
Pomógł: 2

To jednak byla wina programu! Wszystko się zgadza i wszystko działa jak należy. Dziękuję za zainteresowanie bo wiem że dla was to są sprawy banalne !

Podejrzewałem że cos z miernikiem nie tak, ale po wgraniu porogramu testowego wszystko pięknie zadziałało.

Mogłem od razu wrzucić swój program, ale myślałem że nie ma po co, w końcu to tylko kilka linijek - mea culpa, wybaczcie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2014, o 10:18 
Offline
Użytkownik

Dołączył(a): 30 sie 2014
Posty: 170
Pomógł: 2

Jednak jeszcze jedno pytanie odnośnie programu.

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


Przy waszym kodzie mam 2 x niższą częstotliwość (MCU freq=4MHz, na pinie z waszym kodem gdzieś 400 kHz, na moim gdzieś 800 kHz) niż na tym co wkleiłem, a dodatkowo na waszym kodzie równiutko duty=50% a na tym moim z 30% wiec coś jest nie tak.



Ostatnio edytowano 31 sie 2014, o 21:01 przez doman, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2014, o 16:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

Oglądnij kod w ASM, który produkuje kompilator. Zobaczysz różnice. Ilość instrukcj,i etc


Autor postu otrzymał pochwałę

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2014, o 18:50 
Offline
Użytkownik

Dołączył(a): 26 lut 2014
Posty: 227
Lokalizacja: LDZ
Pomógł: 22

Twój program w ASM wygląda zupełnie innaczej niż mój. Zobacz poniżej - Twój (pokazuję samą pętlę):
Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

U mnie co obieg pętli zmienia się stan pinu. To dlatego masz wypełnienie 50% równiutko. U Ciebie w pętli najpierw włączasz pin i od razu po tym go wyłączasz. Obie pętle wykonują się w 6 cykli zegarowych, tylko u mnie w jednym obiegu pętli stan pinu zmienia się tylko raz, a u Ciebie 2 razy. To dlatego masz 2 razy wyższą częstotliwość. Wypełnienie 30% u Ciebie wynika z tego, że instrukcja sbi wykonuje się 2 cykle zegarowe. cbi tak samo i rjmp też (chyba takie wyjaśnienie wystarczy). Swoją drogą miernik Cię okłamuje bo Ty powinieneś mieć w swoim programie ok. 666kHz (4000000/6 = 666666,(6)), a na moim 333kHz (4000000/6/2(2 obiegi pętli na pełen okres włącz/wyłącz)=333333,(3)).


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2014, o 20:53 
Offline
Użytkownik

Dołączył(a): 30 sie 2014
Posty: 170
Pomógł: 2

Dziękuję ! Miernik sprawdzę na kwarcach bo może to on wariuje. Na razie używam wewnętrznego rezonatora z ustawionym wyjściem zegarowym na PD2 -> pokazuje sporo więcej jak 4MHz.

Znalazłem w eclipse pliki wynikowe w asm, próbowałem porównać (czarna magia :) ), ale Twoje wyjaśnienie dużo bardziej pomogło niż własne próby szukania przyczyny. Dzięki raz jeszcze !

edit:

Dałem kwarc 4MHz, wyjście zegara dałem na nóżkę PD2 -> miernik podeje 3,998 MHz.
Wasz program pokazuje -> 399,9kHz i duty 50% czyli inaczej niż napisałeś !

to pętla główna w asm?
Składnia: [ Pobierz ] [ Ukryj ]
język asm
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: 11 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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