Проблемы с АЦП Attiny26

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View

Доброго времени суток!
Делаю я зарядное устройство. В качесиве управляющего сигнала использую ШИМ.
Цепь такая:
+ источника - транзистор - батарея - (резистор + конденсатор 50 мкф
паралельно) - земля
Меряю напряжение на резисторе несколько раз в секунду.
При измерении тестером (китайский М830)напряжения на резисторе, получаю
устойчивое значение 0.16 В. Подключаю точку между резистором и батареей к
входу АЦП, значение на АЦП скачкообразно меняется от 0 до ~150.
При подключении резистивного делителя к входу АЦП, все нормально.
Почему? Это програмная проблема или железная?


Максим

e-mail: max-ll%ukr.net

Вот программа:

char lcd_temp[6];
volatile unsigned char adc_done=1;
int  time75%;
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;
}


Максим








Re: Проблемы с АЦП Attiny26
Hемедленно нажми на RESET, Maxim Krasovsky!


 MK> При измерении тестером (китайский М830)напряжения на резисторе, получаю
 MK> устойчивое значение 0.16 В. Подключаю точку между резистором и батареей к
 MK> входу АЦП, значение на АЦП скачкообразно меняется от 0 до ~150.
 MK> При подключении резистивного делителя к входу АЦП, все нормально.
 MK> Почему? Это програмная проблема или железная?

  Стоит попробовать осциллограф на вход АЦП подключить, и будет видно,
возможно.

 MK>   lcd_temp[4] = byte % 10+0x30;
 MK>   byte /= 10;
 MK>   lcd_temp[3] = byte % 10+0x30;

  Библиотечный sprintf может быть заметно более эффективен (по времени).

 MK>   while (1){
 MK>   if (adc_done==1){
 MK>      lcd_gotoxy(0,0);
 MK>      BinBCD(lcd_temp, ADCW);
 MK>    adc_done=0;
 MK>  }

 MK> INTERRUPT(SIG_OVERFLOW0)
 MK> {
 MK>   sbi(ADCSR,ADSC);
 MK> }
 MK> INTERRUPT(SIG_ADC)
 MK> {
 MK>   adc_done = 1;
 MK> }

  Грабли -- приход timer0 interrupt во время выполнения BinBCD.



Re: Проблемы с АЦП Attiny26
Quoted text here. Click to load it
получаю
Quoted text here. Click to load it
батареей к
Quoted text here. Click to load it
Жаль что нету у меня осцилографа, но подключил я на вход звуковухи. Да, там
импульсы (почти пила), потому и прыгает, что попадает в разные точки
импульса.
Кто делал контроль тока при помощи PWM? Как мне теперь получить значение
тока (напряжения на резисторе)?
Делать выпрямитель или еще чего не хочется, потому как этот вход АЦП
подключен к батарее, и при измерении напряжения на батарее относительно него
меряется напряжение. А если взять несколько значений подряд и усреднить, то
результат _+10-15 LSB.

Quoted text here. Click to load it
Но не по размеру.
Добавление в эту програмку  вызова sprinf увеличивает прошивку с 1442 байт
до 3296, а памяти в Attiny26 только  2 килобайта. Причем пять делений подряд
(как у меня)  занимает места меньше, чем если это же делать в цикле.



Максим




Re: Проблемы с АЦП Attiny26
Здpавствуй, Maxim !

 Wednesday November 03 2004 :: Maxim Krasovsky --> Kirill Frolov [Re: Проблемы
с АЦП Attiny26]:

 MK> Жаль что нету у меня осцилографа, но подключил я на вход звуковухи.
 MK> Да, там импульсы (почти пила), потому и прыгает, что попадает в разные

Осциллографы есть почти на всех кафедрах, накрайняк я мог бы принести свой
переносной но это очень ненадолго.


                                          До встpечи, Maxim !   Nik.

... [Электpоника]    [Легкий Пpогpаммизм]    [Книги]    [-Mazafaka-]

Проблемы с АЦП Attiny26
Mon Nov 01 2004 22:17, Maxim Krasovsky wrote to All:

 MK> Делаю я зарядное устройство. В качесиве управляющего сигнала использую
 MK> ШИМ. Цепь такая:
 MK> + источника - транзистор - батарея - (резистор + конденсатор 50 мкф
 MK> паралельно) - земля

 Хорошо придумано. В результате источник щелкает через транзистор
 неограниченным током в конденсатор 50uF.
 
 MK> Почему? Это програмная проблема или железная?

 Проблема с драйвером ruki.sys

 VLV

"Быть честным - лучший способ оставаться бедным" (c) Hаполеон Бонапарт


Site Timeline