Jelgenerátor AVR-el

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
otto
DrótVégénSzéndarab
Hozzászólások: 40
Csatlakozott: 2007. július 27. péntek, 6:00
Tartózkodási hely: Budapest,XVIII.ker.
Kapcsolat:

Jelgenerátor AVR-el

HozzászólásSzerző: otto » 2007. július 27. péntek, 5:37

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ó

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9990
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2007. július 27. péntek, 9:28

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ó?:)

Avatar
gerry
Chipgyilok
Hozzászólások: 252
Csatlakozott: 2005. október 11. kedd, 6:00

HozzászólásSzerző: gerry » 2007. július 27. péntek, 9:31

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.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9990
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2007. július 27. péntek, 9:46

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

Avatar
otto
DrótVégénSzéndarab
Hozzászólások: 40
Csatlakozott: 2007. július 27. péntek, 6:00
Tartózkodási hely: Budapest,XVIII.ker.
Kapcsolat:

HozzászólásSzerző: otto » 2007. július 27. péntek, 18:54

Robert írta:
A waitus nem lehet paraméter, csak FIX konstans!



Sajnos ez a megoldás nem lesz jó számomra.

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.

Avatar
TyuTyu
DrótVégénSzéndarab
Hozzászólások: 40
Csatlakozott: 2005. június 5. vasárnap, 6:00

HozzászólásSzerző: TyuTyu » 2007. július 28. szombat, 5:14

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

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9990
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2007. július 28. szombat, 8:54

Nézd meg a timer fejezetet. Illetve azt hiszem az INTben is van....

A Timer1=honnanszamol való erre.

Avatar
otto
DrótVégénSzéndarab
Hozzászólások: 40
Csatlakozott: 2007. július 27. péntek, 6:00
Tartózkodási hely: Budapest,XVIII.ker.
Kapcsolat:

HozzászólásSzerző: otto » 2007. július 28. szombat, 19:16

TyuTyu írta:Ahoj,

a problemat jol latjatok.... megfelelo felbontasu jelet nem lehet sw-bol generalni.

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!).
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.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9990
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2007. július 28. szombat, 19:29

A timerben, ha nincs változókezelés (SRAM), akkor int-et nosave-vel tessék meghívni. Az órajelet felrakni 20MHzre...

Az int rutin ideje bizony bejátsz(hat). programírásilag lehet befolyásolni. De akkor csak négyszögjel kell?


eddig nem derült ki:
- jelalakok
- felbontás
- frekvencia

Avatar
otto
DrótVégénSzéndarab
Hozzászólások: 40
Csatlakozott: 2007. július 27. péntek, 6:00
Tartózkodási hely: Budapest,XVIII.ker.
Kapcsolat:

HozzászólásSzerző: otto » 2007. július 29. vasárnap, 6:30

Robert írta:
De akkor csak négyszögjel kell?


eddig nem derült ki:
- jelalakok
- felbontás
- frekvencia


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

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9990
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2007. július 29. vasárnap, 8:25

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

Avatar
otto
DrótVégénSzéndarab
Hozzászólások: 40
Csatlakozott: 2007. július 27. péntek, 6:00
Tartózkodási hely: Budapest,XVIII.ker.
Kapcsolat:

HozzászólásSzerző: otto » 2007. július 29. vasárnap, 9:07

Robert írta:A program egyszerű:

Config timer0='szabadonfuto-kimeneti fr
Config timer1='szabadonfuto-kapuzo
return


Köszönöm a segítséget!
Látszik,hogy nem előszőr írsz ilyen jellegű programot!

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9990
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2007. július 29. vasárnap, 9:27

Csak vázlat, de elindulni jó lesz...

kb. 2.5 éve játszom-dolgozok a Bascommal...

Avatar
Marvinn
Tranzisztorgyógyász
Hozzászólások: 153
Csatlakozott: 2008. július 24. csütörtök, 6:00
Tartózkodási hely: Budapest

avr, encoder, stepper

HozzászólásSzerző: Marvinn » 2008. július 24. csütörtök, 14:25

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?

Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

HozzászólásSzerző: nobody_hun » 2008. július 24. csütörtök, 14:49

A kapcsolás szinte ugyanaz.

A programot kell módosítani úgy, hogy az encoder 4 bemenetét olvassa be az AVR, értékelje ki a forgatás irányát, esetleg még a forgatás sebességét is lehet nézni. Az eredmény alapján pedig vezérelje a motort.

A BASCOM forrás ott van az oldalon, az jó kiindulási pont.


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