pwm jelgenerator + bovitesek

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
albinolynx
Tranzisztorgyógyász
Hozzászólások: 161
Csatlakozott: 2007. október 28. vasárnap, 6:00

pwm jelgenerator + bovitesek

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

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

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

Találtam egyet!

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

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

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.
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 a kitöltési tényező 50% fix, akkor van tippem:)

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.... :P
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 »

Fix 50%-os kitoltesi tenyezore van szukseg, tehat az egyszerubb variacio kell.
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 »

Gondolom van benne boven elvi hiba, miutan megprobaltam osszefesulni a kettot - de haladnom kell vele...
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.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Vagy Timer vagy ForNext alapon old meg.....

A tisztán ForNext alapút próbáld. A Timerrel ez nehezebb....
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 »

Esetleg igy?

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.
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 »

Mivel a k fix erteku, szerintem ez a resz el is hagyhato:

Kód: Egész kijelölése

m=255-k
   for l = 1 to m
       nop
   next l 

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

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

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
K-t ilyen elven felesleges is használni - ha az 50% kell....
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

A Do-Loopon közvetlen belül a ForNext-nek semmi értelme...

Kód: Egész kijelölése

Do
   For....
   ...
   Next
Loop
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 »

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?

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

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

Szóval mi is a feladat pontosan????

Most jelet kell előállítani, vagy mérni?

A mérésre írtam a hangkártya +WTUNE progit. Az megmondja a frekvenciát és a Inputnál beadott számérték - frekvencia görbét lehet rajzolni....
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 »

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

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

Felfutó él számolást én sima INT rutinba raknám....

INT beesik: számláló növekszik 1-t...
És a főprogramban vizsgálom a számláló állásást....
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 »

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