سلام من کد هایی رو نوشته بودید رو تو پروتیوس تست کردم ولی نتیجه نداد این کد ها :
برای مگا 32:
کد:
#include <mega32.h> //يا 16
#include <delay.h>
#define ADC_VREF_TYPE 0x20
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
void main(void)
{
unsigned int PWM;
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x08;
PORTD=0x00;
DDRD=0xB0;
TCCR0=0x69;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0xA1;
TCCR1B=0x09;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x69;
TCNT2=0x00;
OCR2=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x81;
while (1)
{
OCR1A=128;
}
}
اینم برای مگا 64:
کد:
#include <mega64.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x20
// Read the 8 most significant bits
// of the AD conversion result
unsigned char 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 ADCH;
}
// Declare your global variables here
void main(void)
{
unsigned int PWM;
PORTB=0x00;
DDRB=0xF0;
ASSR=0x00;
TCCR0=0x6A;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0xA1;
TCCR1B=0x0A;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
TCCR2=0x6A;
TCNT2=0x00;
OCR2=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x86;
while (1)
{
PWM=read_adc(0);
OCR1A=PWM;
OCR1B=PWM;
OCR2=0.9*PWM;
OCR0=0.9*PWM;
}
}
اینم عکس های پروژه و جوابی که گرفتم اولی موج سورس هست و سه تای بعدی تولید شده توسط مگا 64
تو عکس نیفتاده : AVCC , AREF هر دو آی سی به +5 وصل شده
با تشکر.