pwm jelgenerator + bovitesek
- albinolynx
- Tranzisztorgyógyász
- Hozzászólások: 161
- Csatlakozott: 2007. október 28. vasárnap, 6:00
pwm jelgenerator + bovitesek
Sziasztok!
Segitseget szeretnek kerni!
Egy mintaprogramra lenne szuksegem, ami tiny2313-ra szol, bascom-ban. Adott kimeneten pwm jelet general. A pwm jel frekvenciaja 0-30kHz kozott valtoztathato kellene, hogy legyen.
Ezt a programot termeszetesen szeretnem boviteni majd, a tovabbiakban erre szanom e topikot.
Segitseget szeretnek kerni!
Egy mintaprogramra lenne szuksegem, ami tiny2313-ra szol, bascom-ban. Adott kimeneten pwm jelet general. A pwm jel frekvenciaja 0-30kHz kozott valtoztathato kellene, hogy legyen.
Ezt a programot termeszetesen szeretnem boviteni majd, a tovabbiakban erre szanom e topikot.
Találtam egyet!
A Fixtimer értekkel tudsz befolyásoni, hogy honnan számoljon.
Itt a tetszőleges lábon lehet, és nem a PWM/Timer lábon jön ki a jel!
Fontos! A PWM kitöltési tényező a 0...256/65535 tartományban mozog.
A PWM frekveniája (teljes periódusa) a Prescale határozza meg (Fr=Órajel/(Timetmaxérték*Prescale))
Prescale viszont kötött...
AVRrel a timerrel vagy PWM(kitöltést) vagy Frekvenciát tudsz állítani.
De mi lenne a feladat?
ha különböző jelalalakok, kitöltési tényezők, frekvenciák, akkor a DDS (Digital Signal syntheser) kell...
ASM/C: http://www.scienceprog.com/avr-dds-sign ... rator-v10/
Bascom (M48 chip): http://www.8051projects.net/downloads207.html
ASM: http://www.myplace.nu/avr/minidds/index.htm
Kód: Egész kijelölése
'--- Alapadatok ---
$crystal = 7372800 'Sebesseg
$regfile = "M8def.dat" 'Chip
$baud = 9600
Config Pinb.4 = Output 'LED
Config Pinc.0 = Output 'Csipogo
Config Timer0 = Timer , Prescale = 256
Const Fixtimer = 192
Dim Wtime As Byte
On Timer0 Pulse:
Wtime = 100
Enable Interrupts
Enable Timer0
Do
Set Portb.4
Waitms Wtime
Reset Portb.4
Waitms Wtime
Loop
Pulse:
Timer0 = Fixtimer
Toggle Portc.0
Return
End
Itt a tetszőleges lábon lehet, és nem a PWM/Timer lábon jön ki a jel!
Fontos! A PWM kitöltési tényező a 0...256/65535 tartományban mozog.
A PWM frekveniája (teljes periódusa) a Prescale határozza meg (Fr=Órajel/(Timetmaxérték*Prescale))
Prescale viszont kötött...
AVRrel a timerrel vagy PWM(kitöltést) vagy Frekvenciát tudsz állítani.
De mi lenne a feladat?
ha különböző jelalalakok, kitöltési tényezők, frekvenciák, akkor a DDS (Digital Signal syntheser) kell...
ASM/C: http://www.scienceprog.com/avr-dds-sign ... rator-v10/
Bascom (M48 chip): http://www.8051projects.net/downloads207.html
ASM: http://www.myplace.nu/avr/minidds/index.htm
- albinolynx
- Tranzisztorgyógyász
- Hozzászólások: 161
- Csatlakozott: 2007. október 28. vasárnap, 6:00
Koszonom a forrast!
Egy ilyen jelgenerator kivaltasarol lenne szo elso korben. Remelem a kerdesemmel nem lottem felre!
http://www.uoguelph.ca/~antoon/gadgets/servo3.htm
Az elso megvalositasra varo feladat tehat, egy negyszogjel generator, valtoztathato frekvenciaval 0-30kHz kozott.
Egy ilyen jelgenerator kivaltasarol lenne szo elso korben. Remelem a kerdesemmel nem lottem felre!
http://www.uoguelph.ca/~antoon/gadgets/servo3.htm
Az elso megvalositasra varo feladat tehat, egy negyszogjel generator, valtoztathato frekvenciaval 0-30kHz kozott.
Ha a kitöltési tényező 50% fix, akkor van tippem:)
Kitöltési tényezővel:
Kalibrálást a PC hangkártyával és a WTune nevű programmal könnyen meglesheted (FFT-vel a jellemző középfrekvenciát megadja)....
Alapötlenek hátha jó. Mondjuk nem lineáris....
Kód: Egész kijelölése
dim a as word, t as word
config portb.2=output
input"freki?",a
do
for t=1 to a
waitus 1
toggle portb.2
loop
Kitöltési tényezővel:
Kód: Egész kijelölése
dim a as word, t as word, k as byte, l as byte, m as byte
config portb.2=output
input"freki?",a '0...65535
input "kitoltes?",k '0...255
do
for t=1 to a
for l = 1 to k
nop
next l
toggle portb.2 'ezen a labon van a kimenet....
m=255-k
for l = 1 to m
nop
next l
loop
Kalibrálást a PC hangkártyával és a WTune nevű programmal könnyen meglesheted (FFT-vel a jellemző középfrekvenciát megadja)....
Alapötlenek hátha jó. Mondjuk nem lineáris....
- albinolynx
- Tranzisztorgyógyász
- Hozzászólások: 161
- Csatlakozott: 2007. október 28. vasárnap, 6:00
- albinolynx
- Tranzisztorgyógyász
- Hozzászólások: 161
- Csatlakozott: 2007. október 28. vasárnap, 6:00
Gondolom van benne boven elvi hiba, miutan megprobaltam osszefesulni a kettot - de haladnom kell vele...
A " [ ] " zarojelek kozotti reszre szukseg van?
Ertelmezesem szerint bekeri terminalban a frekvencia erteket, majd 50%-os kitoltessel, frekinek megfeleloen folyamatosan adja ki a 4-es labon a negyszogjelet.
A " [ ] " zarojelek kozotti reszre szukseg van?
Kód: Egész kijelölése
$regfile = "2313def.dat"
$crystal = 4000000
$baud = 9600
Config Pinb.4 = Output 'LED
Config Pinc.0 = Output 'Csipogo
Config Timer0 = Timer , Prescale = 256
config portb.2=output
Const Fixtimer = 192
Dim Wtime As Byte
dim a as word, t as word
On Timer0 Pulse:
Wtime = 100
Enable Interrupts
Enable Timer0
input"freki?",a
Do
for t=1 to a
waitus 1
[ Set Portb.4 ]
[ Waitms Wtime ]
[ Reset Portb.4 ]
[ Waitms Wtime ]
Loop
Pulse:
Timer0 = Fixtimer
Toggle Portc.0
Toggle portb.2
Return
End
Ertelmezesem szerint bekeri terminalban a frekvencia erteket, majd 50%-os kitoltessel, frekinek megfeleloen folyamatosan adja ki a 4-es labon a negyszogjelet.
- albinolynx
- Tranzisztorgyógyász
- Hozzászólások: 161
- Csatlakozott: 2007. október 28. vasárnap, 6:00
Esetleg igy?
Kvarc erteke meg mindig csak jelkepes. 50%-os kitoltesi tenyezohoz k erteke megfelelo? A peldadban 255 volt a max, gondolom 100%, igy nekem a 125 - 50% a logikus.
Kód: Egész kijelölése
$regfile = "2313def.dat"
$crystal = 4000000
$baud = 9600
config portb.2=output
dim a as word, t as word, k as byte, l as byte, m as byte
k = 125
input"freki?",a '0...65535
do
for t=1 to a
for l = 1 to k
nop
next l
toggle portb.2 'ezen a labon van a kimenet....
m=255-k
for l = 1 to m
nop
next l
loop
end
Kvarc erteke meg mindig csak jelkepes. 50%-os kitoltesi tenyezohoz k erteke megfelelo? A peldadban 255 volt a max, gondolom 100%, igy nekem a 125 - 50% a logikus.
- albinolynx
- Tranzisztorgyógyász
- Hozzászólások: 161
- Csatlakozott: 2007. október 28. vasárnap, 6:00
Mivel a k fix erteku, szerintem ez a resz el is hagyhato:
Vagy?
Kód: Egész kijelölése
m=255-k
for l = 1 to m
nop
next l
Vagy?
Kód: Egész kijelölése
$regfile = "2313def.dat"
$crystal = 4000000
$baud = 9600
config portb.2=output
dim a as word, t as word, k as byte, l as byte, m as byte
k = 125
input"freki?",a '0...65535
do
for t=1 to a
for l = 1 to k
nop
next l
toggle portb.2 'ezen a labon van a kimenet....
m=255-k
for l = 1 to m
nop
next l
loop
end
A 2 for-next ciklus lehet azonos....
Kód: Egész kijelölése
for l = 1 to k
nop
next l
.....
for l = 1 to k
nop
next l
Elbalta!
A frekvenciát az a belső 2 for-next várakozás adja meg!
A jó kód:
Kód: Egész kijelölése
$regfile = "2313def.dat"
$crystal = 4000000
$baud = 9600
config portb.2=output
dim a as long, l as long
input"freki?",a '0...nagyonsok
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
loop
end
Kód: Egész kijelölése
Do
For....
...
Next
Loop
- albinolynx
- Tranzisztorgyógyász
- Hozzászólások: 161
- Csatlakozott: 2007. október 28. vasárnap, 6:00
Haat... Az 50% kitoltesi tenyezot ertem, hogyan tortent. Azt nem igazan, hogyan tortenik a kimeneti jelgeneralas. Itt szamolgatni nem is kell kulon? Amit beirok, az jelenik meg a kimeneten?
Ha szamlalni szeretnem a felfuto eleket, akkor ahhoz a kulso impulzus szamlalo kell?
Lehet eleg nyakatekert, de egyszeruen a portb.2 bekotnem T1 labra.
Hasznalgato a gondolatmenet?
Ha szamlalni szeretnem a felfuto eleket, akkor ahhoz a kulso impulzus szamlalo kell?
Kód: Egész kijelölése
$regfile = "2313def.dat"
$crystal = 4000000
Config Pind.6 = Output
Config Timer1 = Counter , Edge = Falling , Prescale = 1
Stop Counter1
Set Portd.6
Waitms 1000
Reset Portd.6
Waitms 1000
Cls
Do
Counter1 = 0
Start Counter1
Waitms 25
Stop Counter1
Cls
Lcd "Counter1: " ; Counter1
Waitms 100
Loop
End
Lehet eleg nyakatekert, de egyszeruen a portb.2 bekotnem T1 labra.
Hasznalgato a gondolatmenet?
- albinolynx
- Tranzisztorgyógyász
- Hozzászólások: 161
- Csatlakozott: 2007. október 28. vasárnap, 6:00
Negyszogjelet generalni, 50%-os kitoltes es valtoztathato freki mellett. Szamolni a felfuto eleket egy adott ertekig (szinten valtoztathato). Amint elerte az erteket egy kimenetre 5V-ot adni. Utanna folyamat kezdodik elorol. Mikor eleri a szamlalo az erteket ismetelten, akkor az 5V-ot lekapcsolni. Egy tesztaramkor lenne ez. Ha kikiserleteztem majd a freki es szamlalo ertekeket, akkor fixen beirom oket. Igy pc nelkul tudok tesztelni majd.
- albinolynx
- Tranzisztorgyógyász
- Hozzászólások: 161
- Csatlakozott: 2007. október 28. vasárnap, 6:00
Kód: Egész kijelölése
Dim Cntr As Integer
On Int0 Button
Config Int0 = Low Level
Cls
Enable Interrupts
Enable Int0
Do
Locate 1 , 1
Lcd Cntr
Waitms 250
Loop
Button:
Incr Cntr
Return
End
Erre a megoldasra gondoltal?
Az lcd kiiras benne maradt.
Valamit errol a megszakitasrol:
Szerintem rosszul ertelmezem. A megszakitaskor megall a program futasa, vagy ha ugy van megirva, atvalt egy masik alprogramra.
En a folyamatot igy kepzelem el:
1. bekeri a frekvenciat (ok)
2. bekeri, hogy meddig szamoljon (szamlalo valtozoban tarolja)
3. elkezd futni a program
4. szamlalo_szam no, felfuto eleket szamolja
5. itt maskeppen nem tudom irni:
"if then else" (mint pascalban)
ha szamlalo <= szamlalo_szam
akkor egyik rabra 5V-t kapcsol + reseteli a szamlalot
kulonben visszaugrik a jelgeneralo reszhez
Egyelore ennyi. Ez hibas elgondolas, vagy lassu?
Utanna meg kell majd megoldas az 5V lekapcsolasara - figyelni kell az erteket - ezt minden kapcsolaskor negalja es kesz.
A proba uzem alatti idore meg beiktatni meg egy "stop" parancsot, amikor megall a program futasa, plussz egy "start"-ot.