 
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.
 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 7 gości



