ADC Noise Reduction Mode – Mikrokontroléry – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

ADC Noise Reduction Mode – Mikrokontroléry – Fórum – Programujte.comADC Noise Reduction Mode – Mikrokontroléry – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Newbie
~ Anonymní uživatel
9 příspěvků
20. 5. 2013   #1
-
0
-

Dobrý den,

chtěl bych použít u mcu ATmega16 ADC Noise Reduction Mode. Odpovídající část programu vypadá takto:

#ifndef F_CPU
#define F_CPU 1000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include "lcd.h"

#define KvantizacniKrok 0.009775171

void ADC_Config(void)
{
//Konfigurace ADC
ADCSRA |= ((1<<ADPS1)|(1<<ADPS0)); //1 000 000:8 = 125 000
ADMUX &= ~(1<<ADLAR); //Volba zarovnání bitů
ADMUX |= 1<<REFS0; //Volba napěťové reference
ADMUX |= ((1<<MUX2)|(1<<MUX1)|(1<<MUX0)); //Volba kanálu ADC7
ADCSRA |= 1<<ADIE; //Povolení přerušení od ADC
ADCSRA |= 1<<ADEN; //Zapnutí ADC
sei(); //Globální povolení přerušení
MCUCR &= ((1<<SM2)|(1<<SM1));
MCUCR |= 1<<SM0; //Nastavení módu - ADC Noise Reduction Mode
MCUCR |= 1<<SE; //Povolit spánek
sleep_mode();
}

void main(void)
{
LCD_Init(); //Inicializace LCD
ADC_Config(); //Konfigurace ADC
while(1)
{    
}
}
 

ISR(ADC_vect) //ISR = Interrupt Service Routine, vektor přerušení pro A/D převodník - ADC_vect
{
uint8_t theLowADC = ADCL;
uint16_t theTenBitResults = ADCH<<8 | theLowADC; //Uložení 10bitů převodníku do jedné proměnné
double MeasuringSignal; 
MeasuringSignal = (double)theTenBitResults*KvantizacniKrok;
NamereneNapeti(MeasuringSignal);
Vysledek(theTenBitResults);
_delay_ms(300);
}

Myslím, že program takto provede pouze první konverzi. Jak ho tedy poupravit, aby pracoval kontinuálně? Napadlo mě napsat uživatelskou funkci a volat ji na konci rutiny přerušení (po _delay_ms(300);). Nevím však jaké bity v řídících reg. A/D převodníku v té funkci nastavovat. Datasheet jsem četl a moc moudrý jsem z něj nebyl. 

Nahlásit jako SPAM
IP: 89.103.179.–
Reklama
Reklama
KIIV+42
God of flame
20. 5. 2013   #2
-
0
-

#1 Newbie
a ktery flagy v registrech ti nejsou jasny? Rozepis je sem treba vsechny s tim, jak si pochopil ten popis funkce vlastnima slovama.

-----------

kazdopadne uplne nejblbejsi nevypnutelnou vec, na kterou sem zatim u atmegy narazil je to, ze pokud mas zapnutej ale nespustenej AD, tak se prechodem do sleep (idle nebo noise reducing) zapne a probudi po dokonceni konverze...

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Newbie
~ Anonymní uživatel
9 příspěvků
20. 5. 2013   #3
-
0
-

No, to jsem právě chtěl využít. :D Proto jsem všechno nastavil ve fci ADC_Config() a na konci té funkce ho uspal. Představuji si to tak, že se během toho sleep módu provede konverze, po skončení se probudí a proběhne rutina přerušení. Program už jsem poupravil a na konci té rutiny volám fci ADC_Conversion(), ve které mám instrukci sei() a sleep_mode(), povolím tedy globálně přerušení a znovu ho uspím (aspoň doufám - tu knihovnu používám poprvé). Co tam mám napsat jsem zjistil metodou pokus-omyl. Jen nevím, jak správný je to postup..  

Nahlásit jako SPAM
IP: 89.103.179.–
KIIV+42
God of flame
20. 5. 2013   #4
-
0
-

#3 Newbie
no tak jak to mas, to zpracovani muzes udelat i bez preruseni... v tom hlavnim cyklu ...   na zacatku uspis, po skonceni sleepu zkontrolujes, jestli konverze dobehla a zpracujes (prerusit se da sleep i spoustou dalsich eventu - treba prerusenima - musi se akorat ohlidat, jestli treba bezi casovace pri tom sleepu a tak)

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 9 hostů

Podobná vlákna

Noise mapa — založil Peter

Graph mode — založil Arkan

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý