Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięGenerator na AVR
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Witam wszystkich, bawiłem się dzisiaj generowaniem impulsów na M32 w Bascomie.
Cokolwiek robię w Timerze1 czy generuje sygnał w OnTimer1 czy On Compare1a
nie mogę przekroczyć częstotliwości 30 khz (24 , 27 zależnie od programu i kwarcu).
Muszę wygenerować konkretną ilość impulsów z zadaną częstotliowscią, jeżeli się da to najlepiej z rozbiegiem i hamowaniem. Mój program wymaga maksimum 16khz i tyle wyciągłem ale dla czystej ciekawości może ktoś ma pomysł jak to zrobić.
pozdrawiam as
Cokolwiek robię w Timerze1 czy generuje sygnał w OnTimer1 czy On Compare1a
nie mogę przekroczyć częstotliwości 30 khz (24 , 27 zależnie od programu i kwarcu).
Muszę wygenerować konkretną ilość impulsów z zadaną częstotliowscią, jeżeli się da to najlepiej z rozbiegiem i hamowaniem. Mój program wymaga maksimum 16khz i tyle wyciągłem ale dla czystej ciekawości może ktoś ma pomysł jak to zrobić.
pozdrawiam as
Hmmm...kwarc 8M, rozbieg wczytuje z tabelki, załóżmy 5% ilości impulsów ...
Myślałem że rozbieg/hamowanie , to "płynne" zwiększanie/zmniejszanie częstotliwości o jakiś procent , ... ale nic to Opisz dokładniej , krok po kroku , co ma się dziać na pinie wyjściowym , jak mają wyglądać te impulsy itd.
Piotrek
Piotruś tu nie ma co opisywać, sterujesz pracą silnika krokowego lub serwo impulsami w kształcie trapezu i tyle, zadajesz przesun się o 100 impulsów, lub o tysiąc, ustawiasz prędkość maksymalną i koniec,sam ma sobie wyliczyć czas rozbiegu, chodzi o to że w czasie przerwania używam toggle pinc.2 w tym przerwaniu liczę zrobiony krok a zależnie od tego kroku ładuję do wartości timera z tabelki wylicząną wartość początkową.
Załóżmy że te obliczenia zajmują 0,013 ms , po pewnych modyfikacjach może zejdziesz troszkę niżej ale to wszystko..
To jest namiar na płytkę którą mam pożyczoną od kolegi, jest super do sterowania silnikami prądu stałego i nią właśnie się bawiłem:
http://www.perform.cc.pl/pdf/dcs02.pdf
pozdr AS
Załóżmy że te obliczenia zajmują 0,013 ms , po pewnych modyfikacjach może zejdziesz troszkę niżej ale to wszystko..
To jest namiar na płytkę którą mam pożyczoną od kolegi, jest super do sterowania silnikami prądu stałego i nią właśnie się bawiłem:
http://www.perform.cc.pl/pdf/dcs02.pdf
pozdr AS
Zawsze się tego bałem że nadejdzie taka chwila, ale czy w asemlerze wykonam takie zadanie, jeśli tak to mogę spróbować napisać jakąś wstawkę.
Tylko że w czasie testów zbliżałem się do magicznej bariery gdzie w przerwaniu tylko ładowałem timer i zmieniałem stan pinu na przeciwny bez żadnych obliczeń i uzyskałem zaledwie 10 khz więcej.
Zastanawiam się czy idę dobrym tropem ???
Tylko że w czasie testów zbliżałem się do magicznej bariery gdzie w przerwaniu tylko ładowałem timer i zmieniałem stan pinu na przeciwny bez żadnych obliczeń i uzyskałem zaledwie 10 khz więcej.
Zastanawiam się czy idę dobrym tropem ???
Po coCoz... pozostaje Ci przesiasc sie na cos innego niz Bascom... polecam ASM
Wystarczy połączyć przyjemne(Bascom) , z pożytecznym(asm)
By wygenerować max 65535 implsów , można użyć poniższej "pracy poglądowej"
Kod: Zaznacz cały
$regfile = "m32def.dat"
$crystal = 8000000
Const Bpos = 2
Const Mask = 4
Const Port = Portc
Config Portc.2 = Output
On Oc1a Oc1a_intr Nosave
Dim Impulsy As Word
Enable Oc1a
Enable Interrupts
Counter1 = 0
Pwm1a = 56 '70175 Hz
Impulsy = 100
Tccr1b = &B00001001 'prescale=1 , tryb CTC
Do
nop
Loop
Oc1a_intr:
push _temp1
in _temp1,SREG
push _temp1
push _temp2
ldi _temp2,mask
in _temp1,port
eor _temp1,_temp2
!out port,_temp1
sbrs _temp1,bpos 'zliczanie impulsów przy zboczu narastającym
' sbrc r24,0 'zliczanie impulsów przy zboczu opadającym
rjmp lop
push XL ' r26
push XH 'r27
Loadadr Impulsy , X
ld r24,X+
ld r25,X
sbiw r24,1
st X,r25
st -X,r24
!or r24,r25
pop XH
pop XL
brne Lop
in _temp1,TCCR1B
andi _temp1,&b11111000
!out TCCR1B,_temp1
!out TCNT1H,_temp2
!out TCNT1L,_temp2
in _temp1,TIMSK
andi _temp1,&b00010000
!out TIMSK,_temp1
Lop:
pop _temp2
pop _temp1
!out sreg,_temp1
pop _temp1
Return 'reti
Piotrek
Wielkie dzięki jutro lub pojutrze spróbuję to odpalić i dam odpowiedź
AS
2007 02 06.
Przetestowałem program , bardzo ładnie działa i można jeszcze coś więcej wyciągnąć, mi udał się do około 150 khz (tyle pokazał miernik) ale i tak silnik chodzi maks na 80.
Próbowałem też sobie poradzić z Bascomem ale bez nosave nie idzie, więc trzeba zapamietać rejestry byle nie puschall i popall.
Jeśli kiedyć będzie dyskusja co jest lepsze bascom czy c to wybieram mądrość asemblera.
Ukłony dla Piotra
Pozdr Andrzej Sablik
AS
2007 02 06.
Przetestowałem program , bardzo ładnie działa i można jeszcze coś więcej wyciągnąć, mi udał się do około 150 khz (tyle pokazał miernik) ale i tak silnik chodzi maks na 80.
Próbowałem też sobie poradzić z Bascomem ale bez nosave nie idzie, więc trzeba zapamietać rejestry byle nie puschall i popall.
Jeśli kiedyć będzie dyskusja co jest lepsze bascom czy c to wybieram mądrość asemblera.
Ukłony dla Piotra
Pozdr Andrzej Sablik
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 20 gości