Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

ATMEGA168PB MULTIPLE ADC

Başlatan pwr_24, 19 Mayıs 2020, 12: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;
}