pwm jelgenerator + bovitesek

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

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.
Avatar
albinolynx
Tranzisztorgyógyász
Hozzászólások: 161
Csatlakozott: 2007. október 28. vasárnap, 6:00

Hozzászólás Szerző: albinolynx »

Egyelore ezt az elagazast kellene megoldanom. Eddig ugye sokat erdemben meg nem tudtam csinalni.

Start - stop: itt csak olyan hatast szeretnek elreni, mintha le-fel kapcsolnam a tapot. Ennek is csak tesztido alatt lesz jelentosege.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Start-Stop: 2 mp elég?
Nézd meg a Watchdogot a fejezetben.....
Elágazás:


If feltétel then
...
....
...
else
...
...
end if


Amúgy -> bascom súgó: If...Then...Else
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

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?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Mit akarsz számolni?
- frekvencia (felfutó élek darabszáma időegység alatt)?
- kitöltési tényező (fel és lefutó élek közt eltelt idők aránya?

Mit értesz azon hogy hiba nélkül?
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

nah akkor írom hogy pontosan mit!

pwm1a = 255 mondjuk ezt adom ki a proci oc1a lábán egy tiny2313 nál.

egy másik procival szeretném ezt megtudni hogy mennyi jön ki ott egy változóba ezt a 255-öt adja át.

de ez változik byte ban 0 -255 között!

hogyan lehet ezt?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

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ő!!!!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Ha TE adod ki a PWM-et, akkor tudod mi ment ki, nem?

Ja amúgy ha ilyet mérsz, akkor a mérendő jel a tényleges mérési idő max 40%-a lehet (lsd. a INT fejezet elején levő NQUIST törvény)! Azaz a fentebbi 2.55 MHz ténylegesen amit tudnia kell papíron az áramkörnek ~5 MHz!!!
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

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!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Sebesség és a rendelkezésre álló idő az ami befolyásol.
De ha a PWM jelet pl. a Prescale=1l állítod elő, 20 MHz-es procival, akkor AVR-rel nem tudod mérni...
Nagyobb, más, gyorsabb procival viszont igen...
Avatar
szovhoz
Bitfaragó
Hozzászólások: 608
Csatlakozott: 2007. április 7. szombat, 6:00

Hozzászólás Szerző: szovhoz »

csak 16 khz-es jelet szeretnék!
Avatar
albinolynx
Tranzisztorgyógyász
Hozzászólások: 161
Csatlakozott: 2007. október 28. vasárnap, 6:00

Hozzászólás Szerző: albinolynx »

Megprobaltam integralni a szamlalot es az "if - then - else" -t a programba:

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... (:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Config INT0 az ingább falling legyen. Ha nyomom a gombot és LowLevel, akkor _folyamatos_ megszakítást ad!
Avatar
albinolynx
Tranzisztorgyógyász
Hozzászólások: 161
Csatlakozott: 2007. október 28. vasárnap, 6:00

Hozzászólás Szerző: albinolynx »

Atfutottam felette, nem irtam at. "Rising"-et szeretnek, azaz a felfuto eleket szamoltatni.

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?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

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.
Válasz küldése