Programmering PIC mikrokontroller (9 / 10 steg)
Steg 9: Läsa en analoga värde
Så långt kan programmet blinka en LED. Nästa kan ge det några användarindata. Vi använder en potentiometer för att skapa en analog signal som kommer att ändra hastigheten på LED. ADC tar en analog spänning, och ger ett digitalt värde.- Öppna user.c under källfiler i projektbläddraren
- Ovanför InitApp funktion skapar en ny funktion
void init_adc(void)
- Ange följande kod för att ADC modulen att initiera
/ ** * Initiera Analog till Digital omvandlare. */uint16_t adc_convert(uint8_t channel){
TRISAbits.TRISA1 = 0b1; Ställ in pinkodsskydd som indata
ANCON0bits.ANSEL1 = 0b1; Ange PIN-kod som analog
ADCON1bits.VCFG = 0b00; / / ange v + referens till Vdd
ADCON1bits.VNCFG = 0b0; Ange v-referens till GND
ADCON1bits.CHSN = 0b000; / / set negativa bidrag till GND
ADCON2bits.ADFM = 0b1; Högerjustera utdata
ADCON2bits.ACQT = 0b110; / / 16 TAD
ADCON2bits.ADCS = 0b101; / / använda Fosc/16 för klocka källa
ADCON0bits.ADON = 0b1; slå på ADC}
- Därefter skapar en annan funktion omedelbart efter kallas
init_adc()
/ ** * Prestera en analog till digital konvertering. * kanal ADC input kanalen. * Värdet av omvandlingen. */
uint16_t adc_convert(uint8_t);{
ADCON0bits.CHS = kanal; Välj den given kanalen
ADCON0bits.go = 0b1; Starta konverteringen
While(ADCON0bits.Done); vänta för konvertering till slut
Return (ADRESH << 8) | ADRESL; returnera resultatet}
- I InitApp funktionen Lägg till rad
TRISAbits.TRISA2 = 1;
- Fil user.h lägga till prototypen
value = PORTAbits.RA2;
- Ändra viktigaste att matcha följande:
voidmain(void) {
uint16_t adc_value; variabel att hålla ADC konvertering resultat i
/ * Konfigurera oscillator för enheten * /
ConfigureOscillator();
/ * Initiera I/O och kringutrustning för ansökan * /
InitApp();
TRISAbits.TRISA0 = 0; Ange PIN-kod
While(1)
{
LATAbits.LATA0 = 0; ställa in pin låg
adc_value = adc_convert(1); prestera A/D omvandling på kanal 1
wait_ms (adc_value >> 2); vänta med 0,5 sekunder
LATAbits.LATA0 = 1; Ställ in pinkodsskydd hög
adc_value = adc_convert(1); prestera A/D omvandling på kanal 1
wait_ms (adc_value >> 2); vänta med 0,5 sekunder
}}
- Bygga och hämta koden. När du vrider POTTEN hastigheten LED blinkar ska ändra