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

sablik
-
-
Posty:101
Rejestracja:7 lip 2004, o 06:18
Lokalizacja:Czaniec
Kontaktowanie:
Generator na AVR

Postautor: sablik » 3 lut 2007, o 19:17

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

szymel
-
-
Posty:212
Rejestracja:16 sty 2005, o 16:42
Lokalizacja:Włocławek

Postautor: szymel » 3 lut 2007, o 20:44

Timerem możesz wygenerować przebieg prostokątny liczony w MHz , a wszystko zależy od tego jaki masz $Crystal :D Nie podałeś parametrów dotyczących "rozbiegu" i "hamowania" , więc nie mogę nic więcej dodać :(

Piotrek

sablik
-
-
Posty:101
Rejestracja:7 lip 2004, o 06:18
Lokalizacja:Czaniec
Kontaktowanie:

Postautor: sablik » 3 lut 2007, o 23:17

kwarc 8M, rozbieg wczytuje z tabelki, załóżmy 5% ilości impulsów
testowałem na płytce i symulatorze, pewnie coś zrobiłem nie tak ale spasowałem.
pozdrawiam Andrzej

szymel
-
-
Posty:212
Rejestracja:16 sty 2005, o 16:42
Lokalizacja:Włocławek

Postautor: szymel » 4 lut 2007, o 01:47

kwarc 8M, rozbieg wczytuje z tabelki, załóżmy 5% ilości impulsów ...
Hmmm...
Myślałem że rozbieg/hamowanie , to "płynne" zwiększanie/zmniejszanie częstotliwości o jakiś procent , ... ale nic to :D Opisz dokładniej , krok po kroku , co ma się dziać na pinie wyjściowym , jak mają wyglądać te impulsy itd.

Piotrek

sablik
-
-
Posty:101
Rejestracja:7 lip 2004, o 06:18
Lokalizacja:Czaniec
Kontaktowanie:

Postautor: sablik » 4 lut 2007, o 09:51

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

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 4 lut 2007, o 15:34

Coz... pozostaje Ci przesiasc sie na cos innego niz Bascom... polecam ASM ;)

sablik
-
-
Posty:101
Rejestracja:7 lip 2004, o 06:18
Lokalizacja:Czaniec
Kontaktowanie:

Postautor: sablik » 4 lut 2007, o 17:06

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 ???

szymel
-
-
Posty:212
Rejestracja:16 sty 2005, o 16:42
Lokalizacja:Włocławek

Postautor: szymel » 4 lut 2007, o 20:22

Coz... pozostaje Ci przesiasc sie na cos innego niz Bascom... polecam ASM ;)
Po co :?:
Wystarczy połączyć przyjemne(Bascom) , z pożytecznym(asm) :D
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
Niestety bez "rozbiegu/hamowania".Gdyby tak popędzić M32 16MHz , to pewnie by się wyrobiła ze wszystkim.Wykorzystując wyjście OC1A(sprzętowe toggle) ,można jeszcze przyspieszyć

Piotrek

sablik
-
-
Posty:101
Rejestracja:7 lip 2004, o 06:18
Lokalizacja:Czaniec
Kontaktowanie:

Postautor: sablik » 4 lut 2007, o 20:53

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

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 41 gości