AD -> UART, pomoc s programem

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
_serafin_
Příspěvky: 37
Registrován: 30 zář 2010, 02:00

AD -> UART, pomoc s programem

#1 Příspěvek od _serafin_ »

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*

Uživatelský avatar
Atlan
Příspěvky: 4499
Registrován: 10 kvě 2004, 02:00
Bydliště: Košice

#2 Příspěvek od Atlan »

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

Uživatelský avatar
_serafin_
Příspěvky: 37
Registrován: 30 zář 2010, 02:00

#3 Příspěvek od _serafin_ »

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

Uživatelský avatar
Atlan
Příspěvky: 4499
Registrován: 10 kvě 2004, 02:00
Bydliště: Košice

#4 Příspěvek od Atlan »

com to chces programovat ? Ked sa dostanem domov tak ti tu. Mozem dat nejake linky....

Uživatelský avatar
divous
Příspěvky: 161
Registrován: 08 říj 2010, 02:00
Bydliště: ValMez

#5 Příspěvek od divous »


Uživatelský avatar
Yarda1
Příspěvky: 2372
Registrován: 11 úno 2009, 01:00

#6 Příspěvek od Yarda1 »


Uživatelský avatar
elnovy
Příspěvky: 769
Registrován: 04 črc 2010, 02:00
Bydliště: ČR - JČ
Kontaktovat uživatele:

#7 Příspěvek od elnovy »

http://shop.ben.cz/cz/121072-ucebnice-p ... -8051.aspx

a podobné je toho na internetu plno .
el.návrhář HW a SW a DPS

Uživatelský avatar
WLAB
Příspěvky: 867
Registrován: 13 zář 2005, 02:00
Bydliště: Praha

#8 Příspěvek od WLAB »

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.

Uživatelský avatar
_serafin_
Příspěvky: 37
Registrován: 30 zář 2010, 02:00

#9 Příspěvek od _serafin_ »

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

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.

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#10 Příspěvek od Andrea »

Vzorkovací frekvence bude těžko 125kHz, to si pleteš s taktováním převodníku. Vzorkovací frekvence bude kolem 10kHz.

Uživatelský avatar
_serafin_
Příspěvky: 37
Registrován: 30 zář 2010, 02:00

#11 Příspěvek od _serafin_ »

Andrea: Děkuju za upozornění. Mě se to zdálo nějak moc. Holt v tom ještě trošku plavu :-D.

Uživatelský avatar
WLAB
Příspěvky: 867
Registrován: 13 zář 2005, 02:00
Bydliště: Praha

#12 Příspěvek od WLAB »

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

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#13 Příspěvek od Andrea »

WLAB píše: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.

Uživatelský avatar
WLAB
Příspěvky: 867
Registrován: 13 zář 2005, 02:00
Bydliště: Praha

#14 Příspěvek od WLAB »

Andrea píše:
WLAB píše: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.
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říspěvky: 9340
Registrován: 07 zář 2007, 02:00

#15 Příspěvek od Andrea »

Tak třeba ATmega48/88/168 a vůbec novější ATmegy umí spouštět od T/C0, T/C1, Int0 a analogového komparátoru.

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“