pwm jelgenerator + bovitesek
Az INT az megszakítást jelent. Azaz ekkor a változkat menti, elugrik a programrészletre, majd az ottlevő utasításokat végrehajtja és vissza megy a változók visszaállításával.
INTbe nem szabad hosszú időt eltölteni (PL: LCD-re kiírást (>20...50 msec!))
IfThenElse megoldás teljesen jó. ezek kb. 10-20 gépi utasítás lehet. 1 MP alatt ~8-10 milliót hajt végre a processzor. ha 100-900 kHz-s jel kellene, na akkor probléma lehet. de olyan kicsi nálad a frekvencia, hogy ez nem számít....
Stop parancs utána START érdekes lesz... Nézd meg a PowerDown, Powe, Standby részeket a könyvben.
INTbe nem szabad hosszú időt eltölteni (PL: LCD-re kiírást (>20...50 msec!))
IfThenElse megoldás teljesen jó. ezek kb. 10-20 gépi utasítás lehet. 1 MP alatt ~8-10 milliót hajt végre a processzor. ha 100-900 kHz-s jel kellene, na akkor probléma lehet. de olyan kicsi nálad a frekvencia, hogy ez nem számít....
Stop parancs utána START érdekes lesz... Nézd meg a PowerDown, Powe, Standby részeket a könyvben.
- albinolynx
- Tranzisztorgyógyász
- Hozzászólások: 161
- Csatlakozott: 2007. október 28. vasárnap, 6:00
Azt szeretném tudni hogy egy procival generálok pwm jelet változó kitöltési tényezővel 16khz-en és egy másik procival szeretném számolni hogyan lehetne?
a pwm 8 biten 0-255 közöttt adom ki byte ban.
ezt kéne valahogy figyelnem amásikba nem apwm a gond hanem a másik prociban a figyelés mivel lehet a pwm jelet pontosan figyelni hiba nélkül?
a pwm 8 biten 0-255 közöttt adom ki byte ban.
ezt kéne valahogy figyelnem amásikba nem apwm a gond hanem a másik prociban a figyelés mivel lehet a pwm jelet pontosan figyelni hiba nélkül?
Akkor egyszerűen a kitöltési tényezőre vagy kíváncsi.
Vázlatszinten:
A PinChange interrupt kell neked. Itt ha L->H vagy H->L megy, akkor van megszakítás...
Config timer '100nsec szamolva
on PinchangeINT Pinchngint:
Do
'Az L/H hányados a kitöltést adja meg. Ennek 2,55x-e a PWM
Loop
PinChngInt:
stop timer
config pinchangeint= input
If pinchangeint=0 then 'H->L
L=Timer
else
H=Timer 'L->H
endif
timer=0
start timer
return
Nem olyan vészes azért.
Pinchange helyett beviszed INT1 ill INT0ra. Int1: rising, INT0:falling.
Így a számolás még 1xübb....
Mondjuk ha a frekvencia 10kHz, akkor a PWM ennek 255-d része. Ott meg a felbontásod így: 2550 kHz, azaz 2,55 MHz Periódust kell mérni!
Ha 1/255 a kitöltési tényező, akkor az INT rutinnnak 16MHz/2,55MHz=~7 órajel ciklus alatt kell lefutnia! A Bascoman a változó mentés-visszaírás INTben ~25-30 órajelnyi idő!!!!
Vázlatszinten:
A PinChange interrupt kell neked. Itt ha L->H vagy H->L megy, akkor van megszakítás...
Config timer '100nsec szamolva
on PinchangeINT Pinchngint:
Do
'Az L/H hányados a kitöltést adja meg. Ennek 2,55x-e a PWM
Loop
PinChngInt:
stop timer
config pinchangeint= input
If pinchangeint=0 then 'H->L
L=Timer
else
H=Timer 'L->H
endif
timer=0
start timer
return
Nem olyan vészes azért.
Pinchange helyett beviszed INT1 ill INT0ra. Int1: rising, INT0:falling.
Így a számolás még 1xübb....
Mondjuk ha a frekvencia 10kHz, akkor a PWM ennek 255-d része. Ott meg a felbontásod így: 2550 kHz, azaz 2,55 MHz Periódust kell mérni!
Ha 1/255 a kitöltési tényező, akkor az INT rutinnnak 16MHz/2,55MHz=~7 órajel ciklus alatt kell lefutnia! A Bascoman a változó mentés-visszaírás INTben ~25-30 órajelnyi idő!!!!
ez érdeklődési szinten ment a barátommal azon vitáztunk hogylehet e mérni a pwm jelet a procival! mivel én adom ki a jelet tudom mennyi akitöltési tényező próbűáltuk egy tru rms mérővel mérni fluk 901 aszem de az is be bolondult az utolsó 5% nál! ezért érdekelt de akkor nekem van igaz mert lehet mérni!
- albinolynx
- Tranzisztorgyógyász
- Hozzászólások: 161
- Csatlakozott: 2007. október 28. vasárnap, 6:00
Megprobaltam integralni a szamlalot es az "if - then - else" -t a programba:
Meg egy feladat lenne majd, figyelni egy lab allapotat es 0-ra, vagy 1-re kapcsolni. A kod nem valami szep, mert nem nagyon ertek hozza... (:
Kód: Egész kijelölése
$regfile = "2313def.dat"
$crystal = 4000000
$baud = 9600
config portb.2=output
Config Pind.2=Input
dim a as long, l as long
dim Cntr As Integer
dim tarolo as word
On Int0 Button
Config Int0 = Low Level
Enable Interrupts
Enable Int0
input"freki?",a '0-30.000Hz'
input"számláló értéke?", tarolo '0-65.535'
do
for l = 1 to a
nop
next l
toggle portb.2 'ezen a labon van a kimenet....
for l = 1 to a
nop
next l
Locate 1 , 1
Waitms 250
if pind.2 = tarolo then
[egy kimeneti lábra kapcsoljon 5V-ot, ha rá van kapcsolva, akkor kapcsolja le]
end if
loop
Button:
Incr Cntr
Return
end
Meg egy feladat lenne majd, figyelni egy lab allapotat es 0-ra, vagy 1-re kapcsolni. A kod nem valami szep, mert nem nagyon ertek hozza... (:
- albinolynx
- Tranzisztorgyógyász
- Hozzászólások: 161
- Csatlakozott: 2007. október 28. vasárnap, 6:00
Atfutottam felette, nem irtam at. "Rising"-et szeretnek, azaz a felfuto eleket szamoltatni.
Ha ezt teszem be figyelesnek, az jo lesz?
Itt a portb.1-re a tapfesz-t (+5V) fogja kapcsolni, ha jol ertem.
Mekkora lehet a maximum atfolyo aram?
Ha ezt teszem be figyelesnek, az jo lesz?
Kód: Egész kijelölése
$regfile = "2313def.dat"
$crystal = 4000000
$baud = 9600
config portb.1=output
config portb.2=output
Config Pind.2=Input
dim a as long, l as long
dim Cntr As Integer
dim tarolo as word
On Int0 Button
Config Int0 = rising
portb.1=255
Enable Interrupts
Enable Int0
input"freki?",a '0-30.000Hz'
input"számláló értéke?", tarolo '0-65.535'
do
for l = 1 to a
nop
next l
toggle portb.2 'ezen a labon van a kimenet....
for l = 1 to a
nop
next l
Locate 1 , 1
Waitms 250
if pind.2 = tarolo then
if portb.1 = 0 then
portb.1 = 255
else
portb.1 = 0
end if
end if
loop
Button:
Incr Cntr
Return
end
Itt a portb.1-re a tapfesz-t (+5V) fogja kapcsolni, ha jol ertem.
Mekkora lehet a maximum atfolyo aram?
Portb.1 az vagy 1 vagy 0. IO lábként használod így.
Cntr mit változtat? mert itt gombnyomásra csak a változó értéke nő....
A lábon az áram (adatlap!) ~15-25 mA lehet (attól függ melyik adatlap van előtted. DE: vagy egy össz chipáram is, azaz nem simán szummázható...
Ökölszabály: 10mA-t ne haladja meg a lábon ki/befolyó áram.
Cntr mit változtat? mert itt gombnyomásra csak a változó értéke nő....
A lábon az áram (adatlap!) ~15-25 mA lehet (attól függ melyik adatlap van előtted. DE: vagy egy össz chipáram is, azaz nem simán szummázható...
Ökölszabály: 10mA-t ne haladja meg a lábon ki/befolyó áram.