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: 9970
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2008. augusztus 28. csütörtök, 9:32

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
Tartózkodási hely: Veszprem
Kapcsolat:

HozzászólásSzerző: albinolynx » 2008. augusztus 28. csütörtök, 10:43

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: 9970
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2008. augusztus 28. csütörtök, 11:56

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
Kapcsolat:

HozzászólásSzerző: szovhoz » 2008. augusztus 28. csütörtök, 21:05

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: 9970
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2008. augusztus 28. csütörtök, 21:07

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
Kapcsolat:

HozzászólásSzerző: szovhoz » 2008. augusztus 29. péntek, 12:46

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: 9970
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2008. augusztus 29. péntek, 14:14

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: 9970
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2008. augusztus 29. péntek, 14:16

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
Kapcsolat:

HozzászólásSzerző: szovhoz » 2008. augusztus 29. péntek, 21:47

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: 9970
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2008. augusztus 30. szombat, 5:50

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
Kapcsolat:

HozzászólásSzerző: szovhoz » 2008. augusztus 30. szombat, 15:37

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
Tartózkodási hely: Veszprem
Kapcsolat:

HozzászólásSzerző: albinolynx » 2008. szeptember 3. szerda, 11:52

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: 9970
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2008. szeptember 3. szerda, 13:34

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
Tartózkodási hely: Veszprem
Kapcsolat:

HozzászólásSzerző: albinolynx » 2008. szeptember 3. szerda, 13:55

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: 9970
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2008. szeptember 5. péntek, 8:14

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.


Vissza: “Bascom-AVR nyelvű programozás (AVR programozásának lehetőségei)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 2 vendég