Форум РадиоКот https://radiokot.ru/forum/ |
|
Вольтметр, который управляет выходным напряжением. https://radiokot.ru/forum/viewtopic.php?f=57&t=146013 |
Страница 1 из 1 |
Автор: | kotarnold [ Пн июн 12, 2017 13:26:20 ] |
Заголовок сообщения: | Вольтметр, который управляет выходным напряжением. |
Собираю устройство, которое на основании измеренного напряжения своим АЦП на одном из своих портов выдает импульсы широтой, зависящей от измеренного напряжения. Пока результат такой. Зеленым цветом - сигнал на выходе, красным - этот же сигнал после фильтра, в иделе он должен быть прямой. ![]() Пока что интересует то, как убрать паузы в выдаче сигнала, чтобы он шел не пакетами, а непрерывно? Код: Код: #include <mega8.h>
#include <stdio.h> #include <delay.h> #define ADC_VREF_TYPE 0x40 int s = 1; // переменная для хранения секунд int o = 1; int n=0; unsigned int 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 ADCW; } interrupt [TIM1_COMPA] void timer1_compa_isr(void) // Обработка прерывания по совпадению { s++; // увеличиваем переменную каждую секунду o++; if(o>n) { PORTB.0=1; } if(o>20) { PORTB.0=0; o=0; } TCNT1=0; //обнуляем таймер } void main(void) { int adc; //переменная для записи значений АЦП int v; //переменная для сохранения значения реального напряжения в миливольтах TCCR1A=0x00; //настройка таймера TCCR1B=0x05; TCNT1=0x00; //здесь увеличиваются тики OCR1A=0x08; //записываем число в регистр сравнения TIMSK=0x10; //запускаем таймер #asm("sei") PORTB=0x00; DDRB=0x01; ACSR=0x80; SFIOR=0x00; ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x81; while (1) { adc=read_adc(0); // читаем ацп с порта 0 v=adc*5; // ток разряда if (v<350) // ток разряда 350 мА { n=n+1; } if (v>350) { n=n-1; } }; } |
Автор: | Maykill [ Пн июн 12, 2017 17:10:08 ] |
Заголовок сообщения: | Re: Вольтметр, который управляет выходным напряжением. |
как сложно-то на выбор https://www.google.ru/search?client=ope ... gws_rd=ssl |
Автор: | Тигрел [ Пн июн 12, 2017 20:01:12 ] |
Заголовок сообщения: | Re: Вольтметр, который управляет выходным напряжением. |
Я своих программ немного написал, а в чужих еще не разбирался... Вопрос 1. Какая тактовая? 1.1 Действительно Тактовая / (1024[ПредДелитель] * 8 ) -> Это интервал 1 Секунда? Или "секунда" (в комментариях) это просто "каждое прерывание"? Есть у меня версия, но нужно услышать тактовую... А вообще, наверное, правильнее было бы, не создавать собственный программный ШИМ, а использовать аппаратный, меняя его скважность, относительно измеренного, с помощью АЦП, напряжения ... И ресурсов меньше уйдёт, и программа, в конце концов, будет более логичной... ЗЫ На самом деле аппаратный ШИМ это просто https://avrlab.com/node/90 Добавлено after 32 minutes 57 seconds: как сложно-то на выбор Можно предположить, что человек будет заряжать аккумуляторы. Можно предположить, что хочет сделать индикацию тока. Можно предположить, что захочет сделать многозонную (по току) зарядную характеристику. Также, можно допустить, что сделает, программно, выбор тока, в зависимости от модели аккума... Можно предположить, что запилит разряд, с измерением ёмкости... Это всё шутки, на самом деле сам такую чушь хочу разработать для тренировки (знаю, что есть готовые)... Если так, то данный код не безсмысленен... ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |