26 Mayıs 2020, 14:41:09

Haberler:

Picproje Pazar Sohbetleri: https://bit.ly/2GHsjAK


ATMEGA168PB MULTIPLE ADC

Başlatan pwr_24, 19 Mayıs 2020, 15:14:26

pwr_24

Merhaba arkadaşlar. ATmega 168pb MCU ile tek kanal adc ölçümünü yapıp lcd ekrana yazdırıyorum. Çok kanallı ölçmek istediğimde ise debugtan takip ettiğim kadarıyla Conversation başlamıyor. Komutlar aşağıda ilgilenirseniz sevinirim.


#ifndef F_CPU
#define F_CPU 16000000UL
#endif
#include <avr/io.h>
#include <avr/interrupt.h>
#include "lcd.h"

#define  TRUE 1

volatile uint8_t adc_flag;
uint8_t low_bits;
uint16_t ten_bits;

void GPIO_SET(void)
{
	
DDRC&=~(1<<PORTC4);
	
DDRC&=~(1<<PORTC5);
}

void ADC_SET(void)
{
	
ADMUX|=(1<<REFS0);
	
ADCSRA|=(1<<ADIE)|(1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2);
	
ADCSRA|=(1<<ADEN);
}

void ADC_START_CONVERSATION(void)
{
	
ADCSRA|=(1<<ADSC);
}

int main(void)
{
	
adc_flag=0;
	
InitLCD(LS_BLINK|LS_ULINE);
	
LCDClear();
	
LCDWriteStringXY(0,0,"X:");
	
LCDWriteStringXY(0,1,"Y:");
	
GPIO_SET();
	
ADC_SET();
	
sei();
	
ADC_START_CONVERSATION();
	

	
while(
TRUE)
	
{
	
	
if (
adc_flag==1)
	
	
{
	
	
	
low_bits=ADCL;
	
	
	
ten_bits=(ADCH<<8|low_bits);
	
	
	

	
	
	
switch (
ADMUX)
	
	
	
{
	
	
	
case (
0x44):
	
	
	
LCDWriteIntXY(3,0,ten_bits,4);
	
	
	
ADMUX=0x45;
	
	
	
break;
	
	
	
	

	
	
	
case (
0x45):
	
	
	
LCDWriteIntXY(3,1,ten_bits,4);
	
	
	
ADMUX=0X44;
	
	
	
break;
	
	
	

	
	
	
default:
	
	
	
break;
	
	
	
}
	
	
	

	
	
}
	
	

	
	
adc_flag=0;
	
	
ADC_START_CONVERSATION();
	
}
return 
0;
	

	

}

ISR(ADC_vect)
{
	
adc_flag=1;
}