Доброго времени суток! Делаю я зарядное устройство. В качесиве управляющего сигнала использую ШИМ. Цепь такая:
- источника - транзистор - батарея - (резистор + конденсатор 50 мкф паралельно) - земля Меряю напряжение на резисторе несколько раз в секунду. При измерении тестером (китайский М830)напряжения на резисторе, получаю устойчивое значение 0.16 В. Подключаю точку между резистором и батареей к входу АЦП, значение на АЦП скачкообразно меняется от 0 до ~150. При подключении резистивного делителя к входу АЦП, все нормально. Почему? Это програмная проблема или железная?
Максим
e-mail: max-ll%ukr.net
Вот программа:
char lcd_temp[6]; volatile unsigned char adc_done=1; int time=75; void BinBCD(char* str, uint16_t byte) { lcd_temp[5] = 0; lcd_temp[4] = byte % 10+0x30; byte /= 10; lcd_temp[3] = byte % 10+0x30; byte /= 10; lcd_temp[2] = byte % 10+0x30; byte /= 10; lcd_temp[1] = byte % 10+0x30; byte /= 10; lcd_temp[0] = byte % 10+0x30; byte /= 10;
} int main(void) { PLLCSR = 0x03;//0x03 lcd_init(LCD_DISP_ON); lcd_clrscr(); lcd_gotoxy(0,0); lcd_puts("----------------"); lcd_gotoxy(0,1); lcd_puts("Init progress..."); sbi(DDRB,PB1); TCCR1A = 0x42; TCCR1B = 0x03; OCR1A = time; TCCR0 = 0x05; OCR1C = 0XE4; //ADC6 ADMUX = 0x86; ADCSR = 0x8b; adc_done=0; TIMSK = 0x02; sei(); sbi(ADCSR,ADSC); lcd_clrscr(); while (1){ if (adc_done==1){ lcd_gotoxy(0,0); BinBCD(lcd_temp, ADCW); lcd_puts(lcd_temp); lcd_gotoxy(0,1); time = ADCL; adc_done = ADCH; //if (time < 104) { // OCR1A++; //} //if (time > 96 ) { // OCR1A--; //} adc_done=0; } BinBCD(lcd_temp, TCNT0); lcd_gotoxy(0,1); lcd_puts(lcd_temp); BinBCD(lcd_temp, OCR1A); lcd_gotoxy(9,1); lcd_puts(lcd_temp); } return 0; } INTERRUPT(SIG_OVERFLOW0) { sbi(ADCSR,ADSC); } INTERRUPT(SIG_ADC) { adc_done = 1; }
Максим