پاسخ : مشکل دماسنج
رو دوتا میکرو امتحان کردم، هردوشون پین Aref حدود 1.26 ولت و ADC0 1.24!!!
یعنی تا حالا کسی چنین مشکلی نداشته؟ :eek:
رو دوتا میکرو امتحان کردم، هردوشون پین Aref حدود 1.26 ولت و ADC0 1.24!!!

/* * GccApplication1.c * * Created: 4/7/2013 11:34:57 PM * Author: Mahdi */ #include <avr/io.h> #include <avr/interrupt.h> void InitADC() { ADMUX=(1<<REFS0)|(1<<REFS1);// AREF=internal 2.56v ADCSRA=(1<<ADEN)|(1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2); } uint16_t ReadADC(uint8_t ch) { //Select ADC Channel ch must be 0-5 ADMUX|=ch; //Start Single conversion ADCSRA|=(1<<ADSC); //Wait for conversion to complete while(!(ADCSRA & (1<<ADIF))); //Clear ADIF by writing one to it ADCSRA|=(1<<ADIF); return(ADC); } int main(void) { char segment[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; DDRB=0xFF;//output DDRD=0xFF;//output sei(); InitADC(); while(1) { int temp=ReadADC(0)/4; PORTD=segment[temp%10];//last digit PORTB=segment[(temp%100)-(temp%10)];//first digit } }
/* * GccApplication1.c * * Created: 4/7/2013 11:34:57 PM * Author: Mahdi */ #include <avr/io.h> #include <avr/interrupt.h> void InitADC() { ADMUX=(1<<REFS0)|(1<<REFS1);// AREF=internal 2.56v ADCSRA=(1<<ADEN)|(1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2); } uint16_t ReadADC(uint8_t ch) { //Select ADC Channel ch must be 0-5 ADMUX|=ch; //Start Single conversion ADCSRA|=(1<<ADSC); //Wait for conversion to complete while(!(ADCSRA & (1<<ADIF))); //Clear ADIF by writing one to it ADCSRA|=(1<<ADIF); return(ADC); } int main(void) { char segment[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; DDRB=0xFF;//output DDRD=0xFF;//output sei(); InitADC(); while(1) { int temp=ReadADC(0)/4; PORTD=segment[temp%10];//last digit PORTB=segment[(temp%100)-(temp%10)];//first digit } }
#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define F_CPU 8000000; #define ADC_VREF_TYPE 0xff unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Delay needed for the stabilization of the ADC input voltage _delay_us(10); // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCW; } int main(void) { int temp; ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x83; char segment[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; DDRB=0xFF;//output DDRD=0xFF;//output sei(); while(1) { temp = read_adc(0); temp = temp/4; PORTD=segment[temp%10];//last digit PORTB=segment[temp/10]; _delay_ms(1000); } }
دیدگاه