Frekvencia előállítása
- feherbalint
- DrótVégénSzéndarab
- Hozzászólások: 42
- Csatlakozott: 2008. augusztus 29. péntek, 6:00
Sziasztok!
40kHz-es négyszögjelet szeretnék egy atmega16-tal előállítani, de nem akar sikerülni. KAVRCalc programot használom. Az órajel belső, 8MHz-es, a timer0-t használom, és a prescaler értéke 8.
Megírtam a programot, lemértem szkóppal, és nagy meglepetésemre 9kHz-es volt a négyszögjel. A programban a toggled gombot bekapcsoltam. OCR 0x31; TCNT Base 0xCE.
Nekem ugye a TCNT Base-t kell beírni a timer0-ba megszakításkor?
Előre is köszi mindenkinek!
40kHz-es négyszögjelet szeretnék egy atmega16-tal előállítani, de nem akar sikerülni. KAVRCalc programot használom. Az órajel belső, 8MHz-es, a timer0-t használom, és a prescaler értéke 8.
Megírtam a programot, lemértem szkóppal, és nagy meglepetésemre 9kHz-es volt a négyszögjel. A programban a toggled gombot bekapcsoltam. OCR 0x31; TCNT Base 0xCE.
Nekem ugye a TCNT Base-t kell beírni a timer0-ba megszakításkor?
Kód: Egész kijelölése
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 1200
Config Portd.4 = Output
Config Timer0 = Timer , Prescale = 8
On Timer0 Pulse
Enable Timer0
Enable Interrupts
Do
Wait 1
Loop
Pulse:
Timer0 =206
Toggle Portd.4
Return
- feherbalint
- DrótVégénSzéndarab
- Hozzászólások: 42
- Csatlakozott: 2008. augusztus 29. péntek, 6:00
- feherbalint
- DrótVégénSzéndarab
- Hozzászólások: 42
- Csatlakozott: 2008. augusztus 29. péntek, 6:00
Megpróbáltam egy másik procival, hátha csak az a baja. Hát nem. Utána néztem a hardveres dolognak, lehet hogy én nem értelmezem jól, de mintha azt írnád, hogy olyankor nem lehet a frekvenciát állítani. Bár akkor nem tudom hogy ennek így mennyi haszna van.
Vagy nem erre gondoltál?
Az OC1A és OC1B (azaz a Timer1-hez rendelt kimenetek) működése a háttérben zajlik, a főprogram erőforrás-foglalása nélkül!
A hátránya azonban, hogy frekvencia ekkor nem állítható, mert a Timer1 kezdőérték beállítása nem lehetséges…
Itt bizony egyszerű négyszögjelet állítottunk elő.
Sziasztok,
elég újjonc vagyok az AVR világában és az EasyAVR5A fejlesztő rendszerem van.
Úton vagyok csinálni egy 1KHz négyszög alakú jelet ATtiny2313-al.
Nagyon érdekelne, hogy tudna-e valaki adni egy linket ahol bővebben megismerhetném a órajel számítást vagy akármit amiről itt téma van mert nem értem az alapokat és meg szeretném tanulni.
Pontossan azzal van gondom, hogy miért történik az ha a wait 100-at bascom-ba do loop ba teszem és így villogtatom a ledem
$crystal = 4000000 van állítva és ha átállítom pl. $crystal = 1000000 -re akkor más időközökbe villog.
1ms nem mindegy, hogy 1MHz órajel vagy 4MHz?
Ezekkel a dolgokkal vsgyok lekötve már napok óta és nem értem mi történik.
Előre is köszi minden segítséget.
elég újjonc vagyok az AVR világában és az EasyAVR5A fejlesztő rendszerem van.
Úton vagyok csinálni egy 1KHz négyszög alakú jelet ATtiny2313-al.
Nagyon érdekelne, hogy tudna-e valaki adni egy linket ahol bővebben megismerhetném a órajel számítást vagy akármit amiről itt téma van mert nem értem az alapokat és meg szeretném tanulni.
Pontossan azzal van gondom, hogy miért történik az ha a wait 100-at bascom-ba do loop ba teszem és így villogtatom a ledem
$crystal = 4000000 van állítva és ha átállítom pl. $crystal = 1000000 -re akkor más időközökbe villog.
1ms nem mindegy, hogy 1MHz órajel vagy 4MHz?
Ezekkel a dolgokkal vsgyok lekötve már napok óta és nem értem mi történik.
Előre is köszi minden segítséget.
Mindegy, csak akkor a program lesz más.
Hogy a beírt időzítéshez mennyi üres utasítást (ciklust) kell
végrehajtani, ahhoz tudni kell, hogy milyen gyorsan fut le a program.
A várakozóciklust 1000-szer hajtja végre, ha 1MHz az órajel, 4000-szer
ha 4MHz, ekkor ugyan az időzítés jön ki.
Ezzel lehet játszani, amikor mondjuk 0.5msec-es időlépések kellenének.
Akkor azt "hazudjuk" a fordítónak, hogy 4MHz az órajel, pedig igazából 8MHz, akkor a waitms 1 az 0.5msec lesz csak. Órajel vezérelt cuccokban a fő órajel az Isten, minden időzítés ahhoz van szinkronozva.
JAni
Hogy a beírt időzítéshez mennyi üres utasítást (ciklust) kell
végrehajtani, ahhoz tudni kell, hogy milyen gyorsan fut le a program.
A várakozóciklust 1000-szer hajtja végre, ha 1MHz az órajel, 4000-szer
ha 4MHz, ekkor ugyan az időzítés jön ki.
Ezzel lehet játszani, amikor mondjuk 0.5msec-es időlépések kellenének.
Akkor azt "hazudjuk" a fordítónak, hogy 4MHz az órajel, pedig igazából 8MHz, akkor a waitms 1 az 0.5msec lesz csak. Órajel vezérelt cuccokban a fő órajel az Isten, minden időzítés ahhoz van szinkronozva.
JAni
ok, na most akkor az mit jelent:
ha a kristály 1MHz és a programba hivatkozom waitms 1 akkor a kimenő jelem 1KHz ? ha pedig a kristály 2MHz-re van állítva akkor mekkora a waitms 1 kimeno reális freki?
Tehát, akarok 1KHz kimenő jelet valahogy a mondjuk rá a PINB.2 - re.
Remélem értitek mit is akarok kérdezni? mert én nemigen tudom megmagyarázni.
Köszi.
ha a kristály 1MHz és a programba hivatkozom waitms 1 akkor a kimenő jelem 1KHz ? ha pedig a kristály 2MHz-re van állítva akkor mekkora a waitms 1 kimeno reális freki?
Tehát, akarok 1KHz kimenő jelet valahogy a mondjuk rá a PINB.2 - re.
Remélem értitek mit is akarok kérdezni? mert én nemigen tudom megmagyarázni.
Köszi.
Ha a prg pl.:
Do
waitms 1
toggle portx.x
loop
akkor ugye minden szint 1msec, tehát a periódusidő 2msec, az 500Hz.
Ha azt hazudod neki, hogy a kvarc 2MHz, akkor elszámolja magát és 0.5+0.5msec=1msec lesz a teljes periódusidőd.
De a megadott kvarcfrekit nem tudod utána változtatni, az ebből eredő hányadosokat befordítja a programba fixen.
Tehát jól értetted, csak azt kell tudni, hogy a kapcsolgatásba rakott wait az a fél periódusra vonatkozik, egy jel periódusideje pedig az az idő, amikor a jel ugyanolyan szintre és ugyanolyan irányból kerül.
JAni
Do
waitms 1
toggle portx.x
loop
akkor ugye minden szint 1msec, tehát a periódusidő 2msec, az 500Hz.
Ha azt hazudod neki, hogy a kvarc 2MHz, akkor elszámolja magát és 0.5+0.5msec=1msec lesz a teljes periódusidőd.
De a megadott kvarcfrekit nem tudod utána változtatni, az ebből eredő hányadosokat befordítja a programba fixen.
Tehát jól értetted, csak azt kell tudni, hogy a kapcsolgatásba rakott wait az a fél periódusra vonatkozik, egy jel periódusideje pedig az az idő, amikor a jel ugyanolyan szintre és ugyanolyan irányból kerül.
JAni
Nos, erre én is rájöttem de nem voltam biztos a dologba viszont nem olvastam eddig sehol erről...Tehát jól értetted, csak azt kell tudni, hogy a kapcsolgatásba rakott wait az a fél periódusra vonatkozik
Köszi ezt az infot.
Ok.
Na most, akkor ezek szerint ezt a tehnikát nem jó használni mint jelgenerátor.
Gondolok erre a waitms szitura...
Hogyan tudnék legegyszerűbb 1KHz jelet kapni valamelyik portra de úgy, hogy állítani is tudjam útközbe a kimenő jel frekijét?
Meg tudom oldani a gombnyomásokat le-fel, interapterekell is tudok játszani de ez a frekis dolog ez kiakasz egy kicsit mert nem értem mikor van milyen freki és a legnagyobb gond, hogy nem tudom miért...
Waitms - a várakozás _ciklusidejének a fele_, mert togglevel csereberéled a lábállapotot.
Milyen frekvencia kell?
Amugy a PCbol csinalsz frekimerot. Keress a Wtune nevű programra (igaz, gitárhangoló).
A "Waitms x", ahol x=0..65535.
Waitus csak FIX értéket vehet fel, paraméterátadás csak 2.0.0.0. utáni verziókban lehetséges.
Milyen frekvencia kell?
Amugy a PCbol csinalsz frekimerot. Keress a Wtune nevű programra (igaz, gitárhangoló).
A "Waitms x", ahol x=0..65535.
Waitus csak FIX értéket vehet fel, paraméterátadás csak 2.0.0.0. utáni verziókban lehetséges.
Kellene kb milyen frekitartományban és milyen felbontással kívánod a frekiket beállítani? A cucc ugyebár alapban megy 1 vagy 2MHz-ről Nálad, akkor az első frekiosztás után már eleve a feléről kell számolni. (ha szimmetrikus jelre van szükséged, mindenképp el kell osztani a nyert frekit 2-vel ugyebár).
Csak itt megjegyzem, nem teljesen botorság ám a SW wait-ekkel a periódusidők beállítása, csak arra nagyon oda kell figyelni, hogy ez valós időben fut, tehát ha a program futása valami miatt megváltozik, akkor elmászik egy periódusra legalább a kimenő jel. (pl. megnyomsz egy gombot, addig más idő alatt fut le a programtörzsed, változik a frekid, de persze van, ahol ez nem érdekes, mert mondjuk csak egyszeri betrimmerelésre kell, utána örök életben úgy megy, ahogy hagyták)
Csak itt megjegyzem, nem teljesen botorság ám a SW wait-ekkel a periódusidők beállítása, csak arra nagyon oda kell figyelni, hogy ez valós időben fut, tehát ha a program futása valami miatt megváltozik, akkor elmászik egy periódusra legalább a kimenő jel. (pl. megnyomsz egy gombot, addig más idő alatt fut le a programtörzsed, változik a frekid, de persze van, ahol ez nem érdekes, mert mondjuk csak egyszeri betrimmerelésre kell, utána örök életben úgy megy, ahogy hagyták)
Nos, nekem úgy kellene, hogy pl. 0Hz - 1,5KHz között mozogjak le fel.
Ez nem kellene, hogy problémát okozzon ugye?
Ami a léptetést illeti az legyen 10Hz habár gondolkodom, hogy készőbb felfejleszteném a motyóm, hogy be tudjam állítani a léptetést mielőtt léptetnék de egyenlőre meg szeretném tanulni egyszerűen, hogy hogyan működik is ez a frekis dolog...
Ez nem kellene, hogy problémát okozzon ugye?
Ami a léptetést illeti az legyen 10Hz habár gondolkodom, hogy készőbb felfejleszteném a motyóm, hogy be tudjam állítani a léptetést mielőtt léptetnék de egyenlőre meg szeretném tanulni egyszerűen, hogy hogyan működik is ez a frekis dolog...