Projekt 7 - Analogově-digitální převodník
12.03.2011 11:59Pokud pracujeme pouze s procesorem, diodou a spínačem tak nám logické hodnoty 1/0 bohatě stačí. Časem se ale každý dostane do bodu, kdy je potřeba zjistit hodnotu, která není rovna log.1 ani log.0 a právě v této chvíli je potřeba použít analogově-digitální převodník (dále ADC).
Projekt nám ukazuje, jak nejjednodušeji použít A/D převod. Na portu P1 využijeme kanál A1 (tedy P1.1), na která připojíme výstup z potenciometru/trimru.
Zapojení proveďte dle schématu:
Zde je odkaz na soubor se zdrojovým kódem
#include "msp430g2231.h"
#define LED1 BIT0
#define LED2 BIT6
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
/*
Nastavení ADC:
ADC10ON – zapnutí ADC
ADC10IE – povolení použití přerušení
ADC10SHT_2 – nastavení násobiče ADC hodin (16x)
- možné další hodnoty násobiče:
[ADC10SHT_0 (4x); ADC10SHT_1 (8x); ADC10SHT_2 (16x); ADC10SHT_3 (64x);]
*/
ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE;
/*
Nyní následuje nastavení kanálu pro převod, využijeme kanál A.1
*/
ADC10CTL1 = INCH_1; // Vstup na P1.1/A.1
/*
Nastavení bitu ADC konverze na P1.1/A.1
*/
ADC10AE0 |= 0x02; // PA.1
P1DIR |= LED1 + LED2;
P1OUT &= ~(LED1 + LED2);
for (;;)
{
/*
Nyní začne vzorkování a konverze vstupního signálu
*/
ADC10CTL0 |= ENC + ADC10SC;
/*
Následuje čekání, dokud neproběhne konverze a uložení výsledku
*/
while (ADC10CTL1 & ADC10BUSY);
/*
Konverze již doběhla a výsledek se uložil do ADC10MEM, budeme tedy zkoumat, zda je ADC10MEM menší než 0x1AA
*/
if (ADC10MEM < 0x1AA)
{
P1OUT &= ~LED2;
P1OUT |= LED1;
}
else
{
P1OUT &= ~LED1;
P1OUT |= LED2;
}
}
}
———
Zpět