Например TDA7294

Форум РадиоКот • Просмотр темы - CodeVisionAVR - Ампервольтметр - Отображение напряжения
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 18, 2024 09:03:57

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: CodeVisionAVR - Ампервольтметр - Отображение напряжения
СообщениеДобавлено: Пт авг 25, 2017 22:26:07 
Электрический кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 33
Зарегистрирован: Сб фев 04, 2017 12:16:42
Сообщений: 1020
Откуда: Украина
Рейтинг сообщения: 0
Собрал ампервольтметр по статье Вольт-Амперметр. Все работает.

Изображение

Но максимальное отображаемое напряжение - 30,6В. Если измеряемое напряжение превышает 30,6В, на индикатор выводится надпись U uP.

Код
Спойлер
Код:
/*******************************************************
This program was created by the
CodeWizardAVR V3.12 Advanced
Automatic Program Generator
© Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : ВольтАмперМетр
Version : 1
Date    : 23.12.2014
Author  : MyComp
Company : MyComp
Comments:
Два четырёх-разрядных индикатора с общим
анодом для измерения на одном индикаторе
напряжение в вольтах до (30.0), а на другом
силу тока а амперах до (3.00).
Датчик тока на 0,1 Ом.

Chip type               : ATmega8L
Program type            : Application
AVR Core Clock frequency: 4,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*******************************************************/

 #include <mega8.h>
 #include <delay.h>  //Функции задержки
 #include <math.h>   //Математические функции
           
 // Declare your global variables here
 unsigned char chislo [8];  //Массив содержащий разложенные поразрядно отображаемое число
 bit flag_indikaciya = 1;  //Отображение всех символов индикации завершено
 unsigned char tochka_volt = 10;  //Номер разряда для отображения точки для вольт, если она равна 10, то точку не отображать
 unsigned char tochka_amper = 10; //Номер разряда для отображения точки для ампер, если она равна 10, то точку не отображать
 
 flash unsigned char kooficient_millivolt = 30;  //Коофициент для преобразования значения АЦП в миллиВольты
 flash float kooficient_milliamper = 3.125;  //Коофициент для преобразования значения АЦП в миллиАмперы
 
 //Массив содержащий изображения цифр от 0 до 9 и букв для индикации
 flash unsigned char simvol [16] = {0b11000000,/*0*/  0b11111001,/*1*/  0b10100100,/*2*/  0b10110000,/*3*/
                                    0b10011001,/*4*/  0b10010010,/*5*/  0b10000010,/*6*/  0b11111000,/*7*/
                                    0b10000000,/*8*/  0b10010000,/*9*/  0b11100011,/*u*/  0b11101111,/*i*/
                                    0b11000001,/*U*/  0b11001111,/*I*/  0b10001100,/*P*/  0b11111111 /* */};                               
                               
                           
                           
 #define FIRST_ADC_INPUT 0
 #define LAST_ADC_INPUT 1
 unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];  //Массив содержащий результаты АЦП с двух входов 0(U) и 1(I)
 // Voltage Reference: Int., cap. on AREF
 #define ADC_VREF_TYPE ((1<<REFS1) | (1<<REFS0) | (0<<ADLAR))
                                   
 
 
 // Timer2 output compare interrupt service routine
 //Прерывание Таймера/счётчика Т2 каждые 480Гц для организации динамической индикации (переключения 8 разрядов)
 interrupt [TIM2_COMP] void timer2_comp_isr(void)
 {
 static unsigned char razryat = 0;  //Переменная указывает номер разряда отображаемого числа

 PORTD = simvol [15];  //Погасить цифры на дисплее
 switch (razryat)   //Если номер разряда равен
   {
   case 0: PORTB = 0b00000001; break;  //Подать питание на 0 разряд индикатора
   case 1: PORTB = 0b00000010; break;  //Подать питание на 1 разряд индикатора
   case 2: PORTB = 0b00000100; break;  //Подать питание на 2 разряд индикатора
   case 3: PORTB = 0b00001000; break;  //Подать питание на 3 разряд индикатора
   case 4: PORTB = 0b00010000; break;  //Подать питание на 4 разряд индикатора
   case 5: PORTB = 0b00100000; break;  //Подать питание на 5 разряд индикатора
   case 6: PORTB = 0b01000000; break;  //Подать питание на 6 разряд индикатора
   case 7: PORTB = 0b10000000; break;  //Подать питание на 7 разряд индикатора
   //Иначе если номер разряда вышел за допустимые пределы
   default: razryat = 0;       break;  //Начальное значение переменной
   }
   
 PORTD = simvol[ chislo[razryat] ];      //Отобразить одну из цифр на индикаторе и погасить точку
 
 //Если точку для вольт или ампер разрешено отобразить в этом разряде, тогда
 if ((tochka_volt == razryat) ||(tochka_amper == razryat))
   {
   PORTD.7 = 0;  //Зажечь точку в разрешённом разряде
   }
       
 razryat++;  //Увеличить переменную на 1
 if (razryat > 7)  //Если были отображены все символы на индикаторе, тогда   
   {
   razryat = 0;  //Начальное значение переменной
   flag_indikaciya = 1;  //Отображение всех символов индикации завершено
   }     

 }

 
 
 // ADC interrupt service routine
 // with auto input scanning
 //Прерывание АЦП после каждого преобразования с автоматическим сканированием двух входов
 interrupt [ADC_INT] void adc_isr(void)
 {
 static unsigned char input_index=0;
 // Read the AD conversion result
 adc_data[input_index]=ADCW;
 // Select next ADC input
 if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
   input_index=0;
 ADMUX=(FIRST_ADC_INPUT | ADC_VREF_TYPE)+input_index;
 // Delay needed for the stabilization of the ADC input voltage
 delay_us(10);
 // Start the AD conversion
 ADCSRA|=(1<<ADSC);
 }
 
 
 
 void main(void)  //Главная функция программы
 {
 // Declare your local variables here
 unsigned int millivolt;  //Измеренное напряжение в миллиВольтах
 unsigned int milliamper;  //Округленная в меньшую сторону измеренная сила тока в миллиАмперах
 unsigned int temp_raschyot;  //Переменная для расчёта
 float temp_milliamper;  //Измеренная сила тока в миллиАмперах

 // Input/Output Ports initialization
 // Port B initialization
 // Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out
 DDRB=(1<<DDB7) | (1<<DDB6) | (1<<DDB5) | (1<<DDB4) | (1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
 // State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0
 PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

 // Port C initialization
 // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
 DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
 // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
 PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

 // Port D initialization
 // Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out
 DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0);
 // State: Bit7=1 Bit6=1 Bit5=1 Bit4=1 Bit3=1 Bit2=1 Bit1=1 Bit0=1
 PORTD=(1<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (1<<PORTD4) | (1<<PORTD3) | (1<<PORTD2) | (1<<PORTD1) | (1<<PORTD0);

 // Timer/Counter 0 initialization
 // Clock source: System Clock
 // Clock value: Timer 0 Stopped
 TCCR0=(0<<CS02) | (0<<CS01) | (0<<CS00);
 TCNT0=0x00;

 // Timer/Counter 1 initialization
 // Clock source: System Clock
 // Clock value: Timer1 Stopped
 // Mode: Normal top=0xFFFF
 // OC1A output: Disconnected
 // OC1B output: Disconnected
 // Noise Canceler: Off
 // Input Capture on Falling Edge
 // Timer1 Overflow Interrupt: Off
 // Input Capture Interrupt: Off
 // Compare A Match Interrupt: Off
 // Compare B Match Interrupt: Off
 TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
 TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
 TCNT1H=0x00;
 TCNT1L=0x00;
 ICR1H=0x00;
 ICR1L=0x00;
 OCR1AH=0x00;
 OCR1AL=0x00;
 OCR1BH=0x00;
 OCR1BL=0x00;

 // Timer/Counter 2 initialization
 // Clock source: System Clock
 // Clock value: 3,906 kHz
 // Mode: CTC top=OCR2A
 // OC2 output: Disconnected
 // Timer Period: 2,304 ms
 ASSR=0<<AS2;
 TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (1<<CTC2) | (1<<CS22) | (1<<CS21) | (1<<CS20);
 TCNT2=0x00;
 OCR2=0x08;  //480Гц для динамической индикации

 // Timer(s)/Counter(s) Interrupt(s) initialization
 TIMSK=(1<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<TOIE0);

 // External Interrupt(s) initialization
 // INT0: Off
 // INT1: Off
 MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);

 // USART initialization
 // USART disabled
 UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

 // Analog Comparator initialization
 // Analog Comparator: Off
 // The Analog Comparator's positive input is
 // connected to the AIN0 pin
 // The Analog Comparator's negative input is
 // connected to the AIN1 pin
 ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);

 // ADC initialization
 // ADC Clock frequency: 125,000 kHz
 // ADC Voltage Reference: Int., cap. on AREF
 ADMUX=FIRST_ADC_INPUT | ADC_VREF_TYPE;
 ADCSRA=(1<<ADEN) | (1<<ADSC) | (0<<ADFR) | (0<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);
 SFIOR=(0<<ACME);

 // SPI initialization
 // SPI disabled
 SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

 // TWI initialization
 // TWI disabled
 TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

 // Global enable interrupts
 #asm("sei")  //Разрешить прерывания

 while (1)  //Главный цикл программы
   {
   millivolt = adc_data[0] * kooficient_millivolt;  //Узнать текущее напряжение в миллиВольтах
   temp_milliamper = adc_data[1] * kooficient_milliamper;  //Узнать текущую силу тока в миллиАмперах
   milliamper = floor(temp_milliamper);  //Округлить текущую силу тока в миллиАмперах в большую сторону

   if (flag_indikaciya == 1)  //Если отображение всех символов индикации завершено
     {
     tochka_volt = 10;  //Запрещено отображение точки для Вольт

     if (millivolt > 30600)  //Если миллиВольт больше 30600, тогда
       {
       chislo[3] = 12;   //Запишем /*U*/
       chislo[2] = 15;   //Запишем /* */
       chislo[1] = 10;   //Запишем /*u*/
       chislo[0] = 14;   //Запишем /*P*/
       }

     //Если миллиВольт больше либо равно 10000 и миньше либо равно 30600, тогда
     if ((millivolt >= 10000) && (millivolt <= 30600))
       {
         temp_raschyot = millivolt / 100;
       chislo[0] = temp_raschyot % 10;     //Узнаём, сколько сотен в числе
         temp_raschyot = millivolt / 1000;
       chislo[1] = temp_raschyot % 10;     //Узнаём, сколько единиц тысяч в числе
       chislo[2] =  millivolt / 10000;     //Узнаём, сколько десятков тысяч в числе
       chislo[3] = 10;                     //Запишем /*u*/
       tochka_volt = 1;                    //Разрешено отображение точки для Вольт в 1 разряде
       }
       
     if ((millivolt >= 1000) && (millivolt < 10000))  //Если миллиВольт больше либо равно 1000 и меньше 10000, тогда   
       {
         temp_raschyot = millivolt / 10;
       chislo[0] = temp_raschyot % 10;     //Узнаём, сколько десятков в числе
         temp_raschyot = millivolt / 100;
       chislo[1] = temp_raschyot % 10;     //Узнаём, сколько сотен в числе
       chislo[2] =  millivolt / 1000;      //Узнаём, сколько тысяч в числе
       chislo[3] = 10;                     //Запишем /*u*/
       tochka_volt = 2;                    //Разрешено отображение точки для Вольт во 2 разряде
       } 
       
     if ((millivolt >= 100) && (millivolt < 1000))  //Если миллиВольт больше либо равно 100 и меньше 1000, тогда 
       {
         temp_raschyot = millivolt / 10;
       chislo[0] = temp_raschyot % 10;     //Узнаём, сколько десятков в числе
       chislo[1] =  millivolt / 100;       //Узнаем, сколько сотен в числе
       chislo[2] = 0;                      //Запишем 0
       chislo[3] = 10;                     //Запишем /*u*/
       tochka_volt = 2;                    //Разрешено отображение точки для Вольт во 2 разряде
       } 

     if (millivolt < 100)  //Если миллиВольт меньше 100, тогда
       {
       chislo[0] = millivolt / 10;    //Узнаём, сколько десятков в числе       
       chislo[1] = 0;                 //Запишем 0
       chislo[2] = 0;                 //Запишем 0
       chislo[3] = 10;                //Запишем /*u*/
       tochka_volt = 2;               //Разрешено отображение точки для Вольт во 2 разряде
       }
     
     tochka_amper = 10;  //Запрещено отображение точки для Ампер

     if (milliamper > 3100)  //Если миллиАмпер больше 3100, тогда
       {
       chislo[7] = 13;   //Запишем /*I*/
       chislo[6] = 15;   //Запишем /* */
       chislo[5] = 10;   //Запишем /*u*/
       chislo[4] = 14;   //Запишем /*P*/
       }
       
     //Если миллиАмпер больше либо равно 1000 и меньше либо равно 3100, тогда   
     if ((milliamper >= 1000) && (milliamper <= 3100)) 
       {
         temp_raschyot = milliamper / 10;
       chislo[4] = temp_raschyot % 10;      //Узнаём, сколько десятков в числе
         temp_raschyot = milliamper / 100;
       chislo[5] = temp_raschyot % 10;      //Узнаём, сколько сотен в числе
       chislo[6] =  milliamper / 1000;      //Узнаём, сколько тысяч в числе
       chislo[7] = 11;                      //Запишем /*i*/
       tochka_amper = 6;                    //Разрешено отображение точки для Ампер в 6 разряде
       } 

     if ((milliamper >= 100) && (milliamper < 1000))  //Если миллиАмпер больше либо равно 100 и меньше 1000, тогда 
       {
         temp_raschyot = milliamper / 10;
       chislo[4] = temp_raschyot % 10;      //Узнаём, сколько десятков в числе
       chislo[5] =  milliamper / 100;       //Узнаем, сколько сотен в числе
       chislo[6] = 0;                       //Запишем 0
       chislo[7] = 11;                      //Запишем /*i*/
       tochka_amper = 6;                    //Разрешено отображение точки для Ампер в 6 разряде
       } 

     if (milliamper < 100)  //Если миллиАмпер меньше 100, тогда
       {
       chislo[4] = milliamper / 10;  //Узнаём, сколько десятков в числе       
       chislo[5] = 0;                //Запишем 0
       chislo[6] = 0;                //Запишем 0
       chislo[7] = 11;               //Запишем /*i*/
       tochka_amper = 6;             //Разрешено отображение точки для Ампер в 6 разряде
       }
       
     flag_indikaciya = 0;  //Отображение всех символов индикации не завершено   
     }
     
   delay_ms(500);  //Задержка чтобы десятые и сотые доли Вольт и Ампер не менялись быстро 
   }
 }
Пробовал в строках
Код:
if (millivolt > 30600)  //Если миллиВольт больше 30600, тогда
       {
       chislo[3] = 12;   //Запишем /*U*/
       chislo[2] = 15;   //Запишем /* */
       chislo[1] = 10;   //Запишем /*u*/
       chislo[0] = 14;   //Запишем /*P*/
       }

     //Если миллиВольт больше либо равно 10000 и миньше либо равно 30600, тогда
     if ((millivolt >= 10000) && (millivolt <= 30600))
       {
         temp_raschyot = millivolt / 100;
       chislo[0] = temp_raschyot % 10;     //Узнаём, сколько сотен в числе
         temp_raschyot = millivolt / 1000;
       chislo[1] = temp_raschyot % 10;     //Узнаём, сколько единиц тысяч в числе
       chislo[2] =  millivolt / 10000;     //Узнаём, сколько десятков тысяч в числе
       chislo[3] = 10;                     //Запишем /*u*/
       tochka_volt = 1;                    //Разрешено отображение точки для Вольт в 1 разряде
       }
менять значение 30600 на 36000. Надпись U uP не отображается, но и напряжение выше 30,6В тоже не отображается - на индикаторе 30.6 при любом напряжении выше 30,6В.

Что надо поправить в коде, чтобы отображалось напряжение выше 30,6В, скажем, до 36В?

В программировании полный ноль.
Памагытэмынэмэстные :) .

_________________
... ардубино и наебиэкспресс убивают творчество в зародыше.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVisionAVR - Ампервольтметр - Отображение напряжения
СообщениеДобавлено: Сб авг 26, 2017 04:33:26 
Потрогал лапой паяльник
Аватар пользователя

Карма: 4
Рейтинг сообщений: 44
Зарегистрирован: Пт сен 10, 2010 20:48:01
Сообщений: 350
Откуда: Минск
Рейтинг сообщения: 0
Нужно было ещё подправить коэффициент с 30 на 36:
Код:
flash unsigned char kooficient_millivolt = 30;  //Коофициент для преобразования значения АЦП в миллиВольты

готовый код:


Вложения:
VAcode.zip [175.33 KiB]
Скачиваний: 195
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVisionAVR - Ампервольтметр - Отображение напряжения
СообщениеДобавлено: Сб авг 26, 2017 07:44:55 
Электрический кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 33
Зарегистрирован: Сб фев 04, 2017 12:16:42
Сообщений: 1020
Откуда: Украина
Рейтинг сообщения: 0
Большущее вам спасибо :) . Похоже, получилось.

Изображение Изображение Изображение Изображение Изображение Изображение

Есть некоторая, в пределах десятых вольта, нелинейность, или расхождение в показаниях, в сравнении с мультиметром.
Или наш вольтметр точнее :))) .
Считаете, исправлений в коде достаточно, перерасчет мат.части не нужен?

Расчётная часть:
Спойлер
http://radio-stv.ru/volt-ampermetr писал(а):
Прежде чем перейти к расчётной части, необходимо определиться что R1 = 27,5 Ком, R2 = 2,5 Ком, общее сопротивление резисторов R3, R4 и R5 равно 0,1 ом (назовём их Rш). Общее сопротивление резисторов R7 и R8 равно 7 Ком (назовём их Rоу). ADC – результат работы схемы АЦП (возвращает число от 0 до 1024).
В качестве источника опорного напряжения для схемы АЦП микросхемы ATMEGA8L выбрано напряжение 2,56 Вольт. Разрядность АЦП выбрана 10 бит, то есть максимальное число которое вернёт схема АЦП равна 1024. Это число будет эквивалентом напряжения на входах АЦП. Например, если adc вернул 512, то это значит, что на вход АЦП мы подали половину опорного напряжения.
Чтобы вычислить реальное измеряемое напряжение, нам нужно:
Составить пропорцию
Опорное напряжение (Вольт) – 1024
Искомое напряжение (Вольт) – adc
У нас опорное напряжение = 2,56 В
Искомое напряжение, В = (2,56 * adc) / 1024, или Искомое напряжение, В = 0,0025 * adc
Для простоты переведём вольты в милливольты, умножив на 1000
Искомое напряжение, мВ = 0,0025 * adc * 1000, или Искомое напряжение, мВ = 2,5 * adc
Далее нужно учесть коэффициент резисторного делителя напряжения R1 и R2 по формуле Кдел = (R1+R2) / R2. Подставив, получим Кдел = (27,5 + 2,5) / 2,5 = 12. Так как наш резисторный делитель уменьшает измеряемое напряжение в 12 раз, то для того чтобы это учесть нужно Искомое напряжение, мВ умножить на 12.
Реальное измеряемое напряжение, мВ = 2,5 * adc * 12, или Реальное напряжение, мВ = 30 * adc
Полученное число 30 и будет нашим коэффициентом который нужно занести в программу для перевода результата работы АЦП в реальное измеряемое напряжение в миллиВольтах.

_________________
... ардубино и наебиэкспресс убивают творчество в зародыше.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: CodeVisionAVR - Ампервольтметр - Отображение напряжения
СообщениеДобавлено: Сб авг 26, 2017 17:05:06 
Потрогал лапой паяльник
Аватар пользователя

Карма: 4
Рейтинг сообщений: 44
Зарегистрирован: Пт сен 10, 2010 20:48:01
Сообщений: 350
Откуда: Минск
Рейтинг сообщения: 0
Вся математика уже заложена в этот коэффициент.
В мультиметре при измерении маленьких напряжений нужно переключать на диапазон -20V, иначе падает точность.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: CodeVisionAVR - Ампервольтметр - Отображение напряжения
СообщениеДобавлено: Сб авг 26, 2017 18:45:18 
Электрический кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 33
Зарегистрирован: Сб фев 04, 2017 12:16:42
Сообщений: 1020
Откуда: Украина
Рейтинг сообщения: 0
Точно! Всегда забываю это делать :) .

Добавлено after 30 minutes 4 seconds:
Относительно увеличения отображаемого значения тока - таким же образом изменить 3.125
Код:
flash float kooficient_milliamper = 3.125;  //Коофициент для преобразования значения АЦП в миллиАмперы
и 3100
Код:
if (milliamper > 3100)  //Если миллиАмпер больше 3100, тогда
       {
       chislo[7] = 13;   //Запишем /*I*/
       chislo[6] = 15;   //Запишем /* */
       chislo[5] = 10;   //Запишем /*u*/
       chislo[4] = 14;   //Запишем /*P*/
       }
       
     //Если миллиАмпер больше либо равно 1000 и меньше либо равно 3100, тогда   
     if ((milliamper >= 1000) && (milliamper <= 3100)) 
       {
         temp_raschyot = milliamper / 10;
       chislo[4] = temp_raschyot % 10;      //Узнаём, сколько десятков в числе
         temp_raschyot = milliamper / 100;
       chislo[5] = temp_raschyot % 10;      //Узнаём, сколько сотен в числе
       chislo[6] =  milliamper / 1000;      //Узнаём, сколько тысяч в числе
       chislo[7] = 11;                      //Запишем /*i*/
       tochka_amper = 6;                    //Разрешено отображение точки для Ампер в 6 разряде
       }

на большее значение ?

И почему в этой строке
Код:
if (millivolt > 36100)  //Если миллиВольт больше 30600, тогда
вы меняли значение на 36100, а в этой
Код:
//Если миллиВольт больше либо равно 10000 и миньше либо равно 30600, тогда
     if ((millivolt >= 10000) && (millivolt <= 36600))
на 36600?

Спасибо :) .

_________________
... ардубино и наебиэкспресс убивают творчество в зародыше.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: CodeVisionAVR - Ампервольтметр - Отображение напряжения
СообщениеДобавлено: Сб авг 26, 2017 18:58:32 
Потрогал лапой паяльник
Аватар пользователя

Карма: 4
Рейтинг сообщений: 44
Зарегистрирован: Пт сен 10, 2010 20:48:01
Сообщений: 350
Откуда: Минск
Рейтинг сообщения: 0
Цитата:
Относительно увеличения отображаемого значения тока - таким же образом изменить 3.125

Теоретически да.

36600 должно быть и там, и там.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVisionAVR - Ампервольтметр - Отображение напряжения
СообщениеДобавлено: Сб авг 26, 2017 19:30:44 
Электрический кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 33
Зарегистрирован: Сб фев 04, 2017 12:16:42
Сообщений: 1020
Откуда: Украина
Рейтинг сообщения: 0
Наверное, 3.125 менять прпорционально - 3.125*1,5, 3.125*2 ?

_________________
... ардубино и наебиэкспресс убивают творчество в зародыше.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVisionAVR - Ампервольтметр - Отображение напряжения
СообщениеДобавлено: Сб авг 26, 2017 19:55:20 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Я одного не понял: как без изменения входных цепей вы тут показания меняете? Было, как я понимаю, так: подали 30 вольт - увидели 30 вольт. А теперь как? Подали 30 вольт, увидели 36 вольт? Или я чего-то не понял?

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVisionAVR - Ампервольтметр - Отображение напряжения
СообщениеДобавлено: Сб авг 26, 2017 20:36:38 
Электрический кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 33
Зарегистрирован: Сб фев 04, 2017 12:16:42
Сообщений: 1020
Откуда: Украина
Рейтинг сообщения: 0
Отображаемое напряжение подстраивается подстроечным :) резистором в соответствии с показаниями "эталонного" мультиметра.
http://radio-stv.ru/volt-ampermetr писал(а):
Переменным многооборотным резистором R2 регулируется правильность показания измеряемого напряжения по образцовому вольтметру, а резистором R7 правильность показания измеряемой силы тока.
Как бы работает. На картинках это отображено.

А как правильно?

_________________
... ардубино и наебиэкспресс убивают творчество в зародыше.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVisionAVR - Ампервольтметр - Отображение напряжения
СообщениеДобавлено: Сб авг 26, 2017 21:01:12 
Потрогал лапой паяльник
Аватар пользователя

Карма: 4
Рейтинг сообщений: 44
Зарегистрирован: Пт сен 10, 2010 20:48:01
Сообщений: 350
Откуда: Минск
Рейтинг сообщения: 0
Максимальный ток (в миллиамперах) делим на 1024 и получаем коэффициент.
Пример: 3200 / 1024 = 3.125


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVisionAVR - Ампервольтметр - Отображение напряжения
СообщениеДобавлено: Сб авг 26, 2017 21:22:41 
Электрический кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 33
Зарегистрирован: Сб фев 04, 2017 12:16:42
Сообщений: 1020
Откуда: Украина
Рейтинг сообщения: 0
Хорошо... 5000 / 1024 = 4,88 и т.д.

Добавлено after 13 minutes 53 seconds:
Пока проверить не могу, ИП дает макс 2А.

_________________
... ардубино и наебиэкспресс убивают творчество в зародыше.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Vladislav14 и гости: 17


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y