AD -> UART, pomoc s programem
Moderátor: Moderátoři
AD -> UART, pomoc s programem
Ahoj všem,
mám následující problém. Mám analogový signál, který potřebuji za pomoci (asi) ATmega8 digitalizovat a přes UART poslat k dalšímu zpracování. Parametry signálu jsou následující. Frekvenční rozsah asi 0,3-100 Hz, amplituda jednotky V (není problém upravit na nejvhodnější hodnotu pro MCU), signál nabývá i záporných hodnot (umí A/D převodní pracovat i se zápornou hodnotou nebo budu muset signál ještě před převodem upravit?).
Problém je, že s programováním procesorů nemám vůbec žádné zkušenosti. Byl by někdo tak moc hodný a podělil se se mnou o tento program? Předem moc děkuji. *s*
mám následující problém. Mám analogový signál, který potřebuji za pomoci (asi) ATmega8 digitalizovat a přes UART poslat k dalšímu zpracování. Parametry signálu jsou následující. Frekvenční rozsah asi 0,3-100 Hz, amplituda jednotky V (není problém upravit na nejvhodnější hodnotu pro MCU), signál nabývá i záporných hodnot (umí A/D převodní pracovat i se zápornou hodnotou nebo budu muset signál ještě před převodem upravit?).
Problém je, že s programováním procesorů nemám vůbec žádné zkušenosti. Byl by někdo tak moc hodný a podělil se se mnou o tento program? Předem moc děkuji. *s*
srandista napises si to sam Ano signal musi posunut napr OZ aby nadobudal hodnotu 0 az napr. 5V Ak zabezpecis aby sa na svstup nedostala vecsia frekvencia tak nemusis pouzit DP filter pripadne len nejaky jednoduchy rc clen by to mohol zvladnut. Z teorie vypliva ze v zorokovacia frekvencia by mala byt 2nasobkom maximalnej tj aspon 200Hz s cim ATmega8 nebude mat problem... Este si musis zvolit rychlost odosielania dat..ak ti uz nebola urcena...
Moc rád bych si to napsal sám. Už několik dní pročítám články, knížky apod. a vůbec z toho nejsem moudrý. Nebylo by aspoň drobné postrčení (nějaký článek kde by to bylo pěkně vysvětlené, ideálně jak pro 🤐:-D)?
Takže signál posunu kousek výš, aby byl kladný, to nebude problém. Vyšší frekvence by se tam opravdu dostat neměla, filtr už tam mám. Vzorkovací teorém znám . Díky za odpověď, jsem aspoň o malý krůček blíže k cíli .
Takže signál posunu kousek výš, aby byl kladný, to nebude problém. Vyšší frekvence by se tam opravdu dostat neměla, filtr už tam mám. Vzorkovací teorém znám . Díky za odpověď, jsem aspoň o malý krůček blíže k cíli .
Praktický příklad:
http://osvetleni.juracka.info/index.php.
Trocha z programové praxe:
http://www.ebastlirna.cz/modules.php?na ... highlight=
http://forum.mcontrollers.com/viewtopic ... 8evodn%EDk
Trocha dokumentace:
http://rapidshare.com/files/308810364/P ... _4d__l.rar
http://osvetleni.juracka.info/index.php.
Trocha z programové praxe:
http://www.ebastlirna.cz/modules.php?na ... highlight=
http://forum.mcontrollers.com/viewtopic ... 8evodn%EDk
Trocha dokumentace:
http://rapidshare.com/files/308810364/P ... _4d__l.rar
Třeba tohle by se nehodilo?
http://www.root.cz/clanky/vyvojove-nast ... ice-pic-2/
http://www.root.cz/clanky/vyvojove-nast ... ice-pic-2/
Zaporny signal neni mozne na vstup takoveho ADC privest. Doporucuji signal posunout, a to tak, aby mel 0 na Vref/2.
Frekvencni rozsah 100 Hz vyplyva z ceho? Kdesi jsi psal, ze chces signal zobrazovat. Pokud ale 100Hz pouzijes vzorkovani 200Hz, budes sice na hranici Nyquistovy podminky, ale zadne detaily na signalu neuvidis, protoze prave ty detaily znamenaji vyssi frekvence. Takze pri 20Hz signalu a 200Hz vzorkovani ziskas jen 10 vzroku na periodu tj. 5 vzorku na pulvlnu...
Pro korektni cinnost je treba do signalu vradit DP pred vzorkovanim. Vzorkovaci frekvenci je treba zvolit takovou, aby tam ta DP mela pozadovany utlum.... Takze treba pri DP 1.radu na fo 200 Hz, je pro utlum aliasingovych signalu >20dB treba Fvz alespon 2kHz.
Frekvencni rozsah 100 Hz vyplyva z ceho? Kdesi jsi psal, ze chces signal zobrazovat. Pokud ale 100Hz pouzijes vzorkovani 200Hz, budes sice na hranici Nyquistovy podminky, ale zadne detaily na signalu neuvidis, protoze prave ty detaily znamenaji vyssi frekvence. Takze pri 20Hz signalu a 200Hz vzorkovani ziskas jen 10 vzroku na periodu tj. 5 vzorku na pulvlnu...
Pro korektni cinnost je treba do signalu vradit DP pred vzorkovanim. Vzorkovaci frekvenci je treba zvolit takovou, aby tam ta DP mela pozadovany utlum.... Takze treba pri DP 1.radu na fo 200 Hz, je pro utlum aliasingovych signalu >20dB treba Fvz alespon 2kHz.
Díky všem za odkazy na materiály, snažím se poctivě studovat. Zatím jsem se dopracoval k tomu, že jsem (snad) pochopil význam registrů ADMUX a ADLAR pro nastavení převodníku.
Mám to zatím takhle:
ADMUX
REFS1=0 REFS0=1 -> AVCC (kondenzátor na AREF) - pochopil jsem to správně, že jako reference se použije napájecí napětí?
ADLAR=0 (zarovnání napravo)
MUX3-0 = 0000 - požije se kanál 0
takže ADMUX=0x40
ADCSRA
ADEN=1 zapne převodník
ADSC=1 zapne převod
ADFR=1 free funning mode
ADPS2-0=011 dělící poměr 8, což při použití vnitřních hodin 1MHz odpovídá vzorkovací frekvenci 125 kHz (pro maximální přesnost je potřeba 50-200kHz)
takže ADSCRA=0xE3
Zatím to není moc, ale po malých krůčcích snad docupitám do cíle .
WLAB: Díky za upřesnění. Posunout signál by neměl být problém. 100Hz vyplívá z toho, že vyšší frekvence není třeba, jedná se o EKG signál a tam těch 100Hz úplně stačí. Vzorkovací frekvence bude 125 kHz, takže by snad neměl být problém. A zobrazovat to chci v programu StampPlot Pro.
Mám to zatím takhle:
ADMUX
REFS1=0 REFS0=1 -> AVCC (kondenzátor na AREF) - pochopil jsem to správně, že jako reference se použije napájecí napětí?
ADLAR=0 (zarovnání napravo)
MUX3-0 = 0000 - požije se kanál 0
takže ADMUX=0x40
ADCSRA
ADEN=1 zapne převodník
ADSC=1 zapne převod
ADFR=1 free funning mode
ADPS2-0=011 dělící poměr 8, což při použití vnitřních hodin 1MHz odpovídá vzorkovací frekvenci 125 kHz (pro maximální přesnost je potřeba 50-200kHz)
takže ADSCRA=0xE3
Zatím to není moc, ale po malých krůčcích snad docupitám do cíle .
WLAB: Díky za upřesnění. Posunout signál by neměl být problém. 100Hz vyplívá z toho, že vyšší frekvence není třeba, jedná se o EKG signál a tam těch 100Hz úplně stačí. Vzorkovací frekvence bude 125 kHz, takže by snad neměl být problém. A zobrazovat to chci v programu StampPlot Pro.
Jako referenci lze pouzit i AVCC, ale jak nastavit jednotlive bity konfiguracnich registru ti ted nereknu.
Akorat pozor, abys ta data zvladl protlacit pres UART ven, tech 10kHz je hodne na hrane, pokud budes posilat jen 8 bitu na vzorek, pokud budes posilat 2x8 bitu na vzorek, tak uz to pres rychlost 115200 neutlacis...
A nezapomen dat vhodny Xtal, protoze 115200 baud uz treba ze 16 MHz krystalu neudelas s prijatelnou chybou.
Mozna bych se spis vykaslal na free running ADC a misto toho startoval prevod v pravidelnych intervalech generovanych prerusenim od casovace. Vzorkovaci frekvence tak pujde volneji nastavit - ovsem zas tam bude vnesen jitter umerny delce sekvenci programu, kde je zakazane preruseni (obsluhy intek atd...)
Akorat pozor, abys ta data zvladl protlacit pres UART ven, tech 10kHz je hodne na hrane, pokud budes posilat jen 8 bitu na vzorek, pokud budes posilat 2x8 bitu na vzorek, tak uz to pres rychlost 115200 neutlacis...
A nezapomen dat vhodny Xtal, protoze 115200 baud uz treba ze 16 MHz krystalu neudelas s prijatelnou chybou.
Mozna bych se spis vykaslal na free running ADC a misto toho startoval prevod v pravidelnych intervalech generovanych prerusenim od casovace. Vzorkovaci frekvence tak pujde volneji nastavit - ovsem zas tam bude vnesen jitter umerny delce sekvenci programu, kde je zakazane preruseni (obsluhy intek atd...)
Co má obsluha přerušení společného s převodem ADC? Pokud se spouští ADC od timeru, tak na to běh procesoru nemá žádný vliv a jitter vznikne jen pokud je nesoudělná frekvence taktování ADC a spouštění timeru.WLAB píše:ovsem zas tam bude vnesen jitter umerny delce sekvenci programu, kde je zakazane preruseni (obsluhy intek atd...)
Nejak si nevybavuji, ze by ATmega mela HW spousteni ADC od nejakeho z casovacu. Takze se musi spustit z obsluhy intka casovace - ktera se nespusti dokud bezi obsluha jineho intka a nevykonaji se eventuelne vsechna ostatni, ktera maji vetsi "prioritu"....-> jitter. Castecne to lze vyresit tim, ze se povoli preruseni v obsluhach preruseni, ale to je celkem pakarna a stejne se jitteru nevyhne - a to vetsimu, nez je ten tebou popisovany.Andrea píše:Co má obsluha přerušení společného s převodem ADC? Pokud se spouští ADC od timeru, tak na to běh procesoru nemá žádný vliv a jitter vznikne jen pokud je nesoudělná frekvence taktování ADC a spouštění timeru.WLAB píše:ovsem zas tam bude vnesen jitter umerny delce sekvenci programu, kde je zakazane preruseni (obsluhy intek atd...)