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

pwm jelgenerator + bovitesek

HozzászólásSzerző: albinolynx » 2008. augusztus 25. hétfő, 23:15

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

HozzászólásSzerző: Robert » 2008. augusztus 26. kedd, 4:41

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

HozzászólásSzerző: albinolynx » 2008. augusztus 26. kedd, 7:31

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

HozzászólásSzerző: Robert » 2008. augusztus 26. kedd, 10:22

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

HozzászólásSzerző: albinolynx » 2008. augusztus 26. kedd, 11:11

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

HozzászólásSzerző: albinolynx » 2008. augusztus 26. kedd, 11:43

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

HozzászólásSzerző: Robert » 2008. augusztus 26. kedd, 19:38

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

HozzászólásSzerző: albinolynx » 2008. augusztus 27. szerda, 9:13

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

HozzászólásSzerző: albinolynx » 2008. augusztus 27. szerda, 9:19

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

HozzászólásSzerző: Robert » 2008. augusztus 27. szerda, 9:32

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

HozzászólásSzerző: albinolynx » 2008. augusztus 27. szerda, 20:25

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

HozzászólásSzerző: Robert » 2008. augusztus 27. szerda, 20:54

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

HozzászólásSzerző: albinolynx » 2008. augusztus 27. szerda, 21:53

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

HozzászólásSzerző: Robert » 2008. augusztus 27. szerda, 21:56

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

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

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.


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 1 vendég