Jelgenerátor AVR-el
Jelgenerátor AVR-el
Sziasztok!
Egyszerű négyszög jelgenerátort szeretnék építeni AVR-el.
A legnagyobb frekvencia 40 kHz lenne.
Egyszerűnek tünt,mindaddig amíg nem kezdtem el számolni.
Elképzelésem az volt,hogy a TIMER0 felhasználásával megszakításból hozom létre a jelet.
40 kHz 25usec
Közben rájöttem,hogy ílyen módon esetleg csak egy-egy frekit tudok létrehozni,finoman változtatni nem tudom.
Valószínűleg nem ily módon lehet a generátort megalkotni.
Mások hogyan csinálták?
Előre is köszönöm az ötleteket.
Üdv. Ottó
Egyszerű négyszög jelgenerátort szeretnék építeni AVR-el.
A legnagyobb frekvencia 40 kHz lenne.
Egyszerűnek tünt,mindaddig amíg nem kezdtem el számolni.
Elképzelésem az volt,hogy a TIMER0 felhasználásával megszakításból hozom létre a jelet.
40 kHz 25usec
Közben rájöttem,hogy ílyen módon esetleg csak egy-egy frekit tudok létrehozni,finoman változtatni nem tudom.
Valószínűleg nem ily módon lehet a generátort megalkotni.
Mások hogyan csinálták?
Előre is köszönöm az ötleteket.
Üdv. Ottó
Jelgenerátort? háromszög, négyszög, szinusz?
Ahogy én csinálnám:
A jelek AD értékeit (1 periódust) letárolni (Flash (legjobb, DATAként) v. EEPROM). És egy SPI-s DA konverterre rakni ki a jelet? Nálam ez az LTC1041 (?) chip lesz. Ez 12 bites DA.
Ennek a kimenetére egy feszültségkövető 1:1 erősítőfokozat.
Az egyes értékek közt a várakozási idővel a frekvenciát beállíthatod. Ha a van I2C-s vezérelhető ellenállásod, akkor az 1:1 erősítő erősítését állíthatod. Így a jelszintet is...
Esetleg a Maxim? AnalogDevices célIC-i? Mintha lenne nekik...
De a saját az azért jobb....
Itt egy kis LCDvel megspékelve, akár PCről bedigizett hangmintát is át lehet rá küldeni, mintegy frissítve a jelalakokat... Sőt egységugrást, változó ingadozó jelet, fehérzajt/rózsaszínzajt is tudsz küldeni... Csak a programoddra/fantáziádra van bízva...
Amúgy egy PC-s hangkártya miért nem jó?:)
Ahogy én csinálnám:
A jelek AD értékeit (1 periódust) letárolni (Flash (legjobb, DATAként) v. EEPROM). És egy SPI-s DA konverterre rakni ki a jelet? Nálam ez az LTC1041 (?) chip lesz. Ez 12 bites DA.
Ennek a kimenetére egy feszültségkövető 1:1 erősítőfokozat.
Az egyes értékek közt a várakozási idővel a frekvenciát beállíthatod. Ha a van I2C-s vezérelhető ellenállásod, akkor az 1:1 erősítő erősítését állíthatod. Így a jelszintet is...
Esetleg a Maxim? AnalogDevices célIC-i? Mintha lenne nekik...
De a saját az azért jobb....
Itt egy kis LCDvel megspékelve, akár PCről bedigizett hangmintát is át lehet rá küldeni, mintegy frissítve a jelalakokat... Sőt egységugrást, változó ingadozó jelet, fehérzajt/rózsaszínzajt is tudsz küldeni... Csak a programoddra/fantáziádra van bízva...
Amúgy egy PC-s hangkártya miért nem jó?:)
Akkor egy cipőben járunk. Én is asszem ezzel nyaggattam Robit.
Szenvedtem is egy kicsit, aztán építettem egyet 555-ös icből.
A kísérleti CNC elektronikámnak szolgáltatta a PWM jelet, kondik bekapcsolásával lehet frekihatárt beállítani és egy kettős potival a frekvenciát. Igy egyforma kitöltésü a négyszögjel, ha csak az egyiket ill. másikat tekergeted, akkor szabadon változtathatod a négyszögjel kitöltését(periodus idejét)
Ha kell a kapcsolás elküldöm.
Szenvedtem is egy kicsit, aztán építettem egyet 555-ös icből.
A kísérleti CNC elektronikámnak szolgáltatta a PWM jelet, kondik bekapcsolásával lehet frekihatárt beállítani és egy kettős potival a frekvenciát. Igy egyforma kitöltésü a négyszögjel, ha csak az egyiket ill. másikat tekergeted, akkor szabadon változtathatod a négyszögjel kitöltését(periodus idejét)
Ha kell a kapcsolás elküldöm.
Csak itt nem csak 4 szögjel van:(
4szögre:
do
porta.1=1
waitus valamennyi
porta.1=0
waitus valamennyi
loop
A waitus nem lehet paraméter, csak FIX konstans!
Esetleg ami jobb, de ott a frekvencia kötött!
Timer és a compare rész. gyakorlatilag PWM jel. De a PWM a külső órajelből keletkezik!
Itt a TIMER túlcsordulással lehet játszani, de azért 1:10-nél nagyobb átfogásban ne akarj gondolkodni... Tehát 0-40kHz azért durva....
Az AD-DA-s ezért jó, mert ott a jelmintád 8 bitesként egész használhatónak tűnik... De a végére azért nem árt vmi aluláteresztő szűrő, merta felharmónikusokat gondolom nem kéred...
A LTC DA ~1400-1500 Ft, AVR (M8 család elég), LCD, nyomógombok, trafó, stb...
Nem olcsó, és még jön a fejlezstés, dobozolás...
Hát maga a jelgenerátor az ~ 4-6 eFt körul lesz a végén így sztem.
Nálam a digitális tápegység készül el most a nyáron. Végre:)
12/24V @ 2A és mindenféle jelalakzavarást tudok bele rakni, és a PC-vel soroson feltölthető jelzavarások kerülhetnek bele....
És az előlapon a nyomógombok+LCD lesz a fő kommunikáció...
4szögre:
do
porta.1=1
waitus valamennyi
porta.1=0
waitus valamennyi
loop
A waitus nem lehet paraméter, csak FIX konstans!
Esetleg ami jobb, de ott a frekvencia kötött!
Timer és a compare rész. gyakorlatilag PWM jel. De a PWM a külső órajelből keletkezik!
Itt a TIMER túlcsordulással lehet játszani, de azért 1:10-nél nagyobb átfogásban ne akarj gondolkodni... Tehát 0-40kHz azért durva....
Az AD-DA-s ezért jó, mert ott a jelmintád 8 bitesként egész használhatónak tűnik... De a végére azért nem árt vmi aluláteresztő szűrő, merta felharmónikusokat gondolom nem kéred...
A LTC DA ~1400-1500 Ft, AVR (M8 család elég), LCD, nyomógombok, trafó, stb...
Nem olcsó, és még jön a fejlezstés, dobozolás...
Hát maga a jelgenerátor az ~ 4-6 eFt körul lesz a végén így sztem.
Nálam a digitális tápegység készül el most a nyáron. Végre:)
12/24V @ 2A és mindenféle jelalakzavarást tudok bele rakni, és a PC-vel soroson feltölthető jelzavarások kerülhetnek bele....
És az előlapon a nyomógombok+LCD lesz a fő kommunikáció...
Sajnos ez a megoldás nem lesz jó számomra.Robert írta:
A waitus nem lehet paraméter, csak FIX konstans!
Az ötleteket nézegetve új kérdésem lett!
A TIMER0 túlcsordulási értékét a BASCOM-ban tudom-e,illetve hogyan tudom állítani?
(Az igényeimet közben csökkentettem, kezdetnek egy kisebb átfogású jelgenerátor is elég lesz.)
Kellően nagy kristályt választva pl. 16MHz, osztás=1 nél szimmetrikus négyszögjel 16usec+16usec (31,25kHz).
Amennyiben állítható a "túlcsordulás",akkor az egy finom állítási lehetőség lenne.
Durva állítás,pedig egy változó inkrementálása és a jel "ki-bekapcsolása" ettől függne.
Ahoj,
TyuTyu belevau:
a problemat jol latjatok.... megfelelo felbontasu jelet nem lehet sw-bol generalni.
Amit en csinaltam:
Egy kelloen gyors proci (SX) nyomja ki a jelet 8bitesen egy R halozatra es onnan buveszkedtem az analog jellel.
Az SX-t meg szepen vezerli az AVR (jelalak, freki).
Persze lehet hasznalni fg.genaratort is (AD), de %@%$ draga.
TyuTyu
TyuTyu belevau:
a problemat jol latjatok.... megfelelo felbontasu jelet nem lehet sw-bol generalni.
Amit en csinaltam:
Egy kelloen gyors proci (SX) nyomja ki a jelet 8bitesen egy R halozatra es onnan buveszkedtem az analog jellel.
Az SX-t meg szepen vezerli az AVR (jelalak, freki).
Persze lehet hasznalni fg.genaratort is (AD), de %@%$ draga.
TyuTyu
Néhány órás kisérletezés után én is arra a megállapításra jutottam,hogy nem lehet sw-ből létrehozni (hacsak nincsennek csodák!).TyuTyu írta:Ahoj,
a problemat jol latjatok.... megfelelo felbontasu jelet nem lehet sw-bol generalni.
TyuTyu
A TIMER0-val és a TIMER1 -el próbálkoztam.
A 4MHz kvarccal 50-100usec négyszög jelet próbáltam létrehozni.
Korrekten nem sikerült.
Volt jel,de amennyiben a megszakítási ciklusban az utasításokat módosítottam,ezzel egyidőben a timer kezdő értékét is változtatnom kellett.
Ebben az "idő tartományban" már a megszakítási ciklusban lévő utasítások futási ideje is "határozottan" befolyásolja a jel hosszát.
A generátor,egy számomra ismeretlen IC -vel (felírat nem látszik)kialakított kapuzott négyszög generátor kiváltására kell.Robert írta:
De akkor csak négyszögjel kell?
eddig nem derült ki:
- jelalakok
- felbontás
- frekvencia
A két féle freki előállítása,valamint a kapuzás magában a 8 lábú IC-ben történik (4.láb GND,8.láb +VCC,3.láb output a többi a frekik előállítása)
Az eredeti IC külső RC tagokkal két féle frekvenciát állít elő,az alacsonyabbal kapuzza a magasabbat. Első ránézésre kézenfekvőnek látszott ATTINY2313-al pótolni az ismeretlen IC-t.
Az alap frekvenciát amelynek a periódus ideje kb.100usec (szimmetrikus négyszögjel) TIMER0,vagy TIMER1-el előállítani,illetve az egészet egy jóval alacsonyabb periódus idővel 100-1000msec kapuzni.
A kapuzás programozásilag nem okoz gondot,csak az alap frekvenciát szerettem volna korrekt módon változtatni,nem pedig kisérletileg kialakítani.
Ami világosan látszik,hogy a jelenlegi 4MHz-es kvarcot kicserélem 16-20MHz-esre.
Amit írtál a "nosave"-ről azt értelmezem és megpróbálom alkalmazni.
A program egyszerű:
Config timer0='szabadonfuto-kimeneti fr
Config timer1='szabadonfuto-kapuzo
dim a as word
dim b as byte
dim c as bit
on int imer1
on int timer0
enable int
stop timer0
a=timer1atcsordulaserteke
b=timer0atcsordulaserteke
c=1
start timer1
do
input"atcsordulasTMR1",a
input"atcsordulasTMR0",b
loop
Timer1INT:
stop timer1
timer1=timer1atcsordulas
start timer1
c=not c
stop timer0
if c=1 then start timer0
return
timer0int:
stop timer0
timer0=timer0atcsordulas
start timer0
toggle kimenetilab
return
Config timer0='szabadonfuto-kimeneti fr
Config timer1='szabadonfuto-kapuzo
dim a as word
dim b as byte
dim c as bit
on int imer1
on int timer0
enable int
stop timer0
a=timer1atcsordulaserteke
b=timer0atcsordulaserteke
c=1
start timer1
do
input"atcsordulasTMR1",a
input"atcsordulasTMR0",b
loop
Timer1INT:
stop timer1
timer1=timer1atcsordulas
start timer1
c=not c
stop timer0
if c=1 then start timer0
return
timer0int:
stop timer0
timer0=timer0atcsordulas
start timer0
toggle kimenetilab
return
avr, encoder, stepper
Sziasztok!
Kezdő vagyok és egy léptetőmotor vezérlést építe(né)k.
Adott egy motor amit egy rotary encoderrel akarok működtetni. jobbra tekerem jobbra forogjon a motor, balra akkor balra.
Találtam itt egy kapcsolást, de ez kapcsolós. Kapcsolót el akarom felejteni. Max half-step és rendes lépés között kell választani. Az említett oldalon le lehet tölteni a hex-et is. Szimuláltam az eredetit proteusban de nem működik megfelelően. Kérdésem az lenne hogy tudnám az encodert alkalmazni ezzel a kapcsolással?
Kezdő vagyok és egy léptetőmotor vezérlést építe(né)k.
Adott egy motor amit egy rotary encoderrel akarok működtetni. jobbra tekerem jobbra forogjon a motor, balra akkor balra.
Találtam itt egy kapcsolást, de ez kapcsolós. Kapcsolót el akarom felejteni. Max half-step és rendes lépés között kell választani. Az említett oldalon le lehet tölteni a hex-et is. Szimuláltam az eredetit proteusban de nem működik megfelelően. Kérdésem az lenne hogy tudnám az encodert alkalmazni ezzel a kapcsolással?
- nobody_hun
- Bitfaragó
- Hozzászólások: 425
- Csatlakozott: 2005. november 14. hétfő, 7:00