На склад поступили жидко-кристаллические индикаторы и дисплеи от KSE

PIC12F683 плюс два регистра сдвига 595. Проблема с АЦП

Страница 1 из 5
Новичок
 
Аватар для aalex_641
 
Регистрация: 17.03.2018
Адрес: Курган РОССИЯ
Сообщений: 1,079
Репутация: 16
64 24
35 8
 
21.02.2019 23:07 #1
Короче по пьяни решил сделать ампер-вольтметр на малоножечном пиике , взял его из ручного оповещателя от системы BOLID . 8 ног , две питание , одна mlcr ? остаётся 5 ... три ноги на передачу информации в 595-е регистры ( один на 8 сегментов восьмисегментных лед индикатрорв, второй на управление катодами их же). Другие два -АЦП на ток и напряжение . Ну вобщем врут АЦП как Троцкие ! В чём дело ? В бабине или в кабине ?
Оценка
Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.
has a little shameless behaviour in the past
 
Регистрация: 13.02.2019
Сообщений: 757
Репутация: -30
65 83
81 0
 
22.02.2019 20:57 #2
Цитата:
Сообщение от aalex_641
Короче по пьяни решил сделать ампер-вольтметр на малоножечном пиике , взял его из ручного оповещателя от системы BOLID . 8 ног , две питание , одна mlcr ? остаётся 5 ... три ноги на передачу информации в 595-е регистры ( один на 8 сегментов восьмисегментных лед индикатрорв, второй на управление катодами их же). Другие два -АЦП на ток и напряжение . Ну вобщем врут АЦП как Троцкие ! В чём дело ? В бабине или в кабине ?
Почему сразу - дичь ?
Скорее любимая белка привёвшая к контроллеру песца .
Оценка
Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW. Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного.
Эксперт
 
Аватар для DmitriyVDN
 
Регистрация: 08.11.2009
Сообщений: 2,308
Репутация: 635
615 131
34 9
 
22.02.2019 21:25 #3
Цитата:
Сообщение от aalex_641
-АЦП на ток и напряжение . Ну вобщем врут АЦП как Троцкие !
требования к работе АЦП все выполнены? тайминги все соблюдаются? цифровой фильтр данных сделан?
Оценка
Новичок
 
Аватар для aalex_641
 
Регистрация: 17.03.2018
Адрес: Курган РОССИЯ
Сообщений: 1,079
Репутация: 16
64 24
35 8
 
22.02.2019 23:22 #4
Цитата:
Сообщение от DmitriyVDN
требования к работе АЦП все выполнены? тайминги все соблюдаются? цифровой фильтр данных сделан?
Среда разработки CCS, прога написана на с++ , функция read_adc() как я лично думаю учитывает все тайминги ... На входе ацп стоит конденсатор на 0.1 мф, программа суммирует 100 показаний ацп, потом делит их на 100 , и тогда выводит .Возможна проблема быть в печатной плате ?
Оценка
Эксперт
 
Аватар для DmitriyVDN
 
Регистрация: 08.11.2009
Сообщений: 2,308
Репутация: 635
615 131
34 9
 
23.02.2019 00:25 #5
Цитата:
Сообщение от aalex_641
функция read_adc() как я лично думаю учитывает все тайминги ...
не факт... надо смотреть код.
Цитата:
Сообщение от aalex_641
На входе ацп стоит конденсатор на 0.1 мф
выходное сопротивление источника напряжения(делителя или че там у вас) сколько? нормам ДШ соответствует?

Цитата:
Сообщение от aalex_641
Возможна проблема быть в печатной плате ?
вполне.
Оценка
Новичок
 
Аватар для aalex_641
 
Регистрация: 17.03.2018
Адрес: Курган РОССИЯ
Сообщений: 1,079
Репутация: 16
64 24
35 8
 
23.02.2019 01:14 #6
код не является коммерческой тайной )) И вообще никакой )))
Оценка
Новичок
 
Аватар для aalex_641
 
Регистрация: 17.03.2018
Адрес: Курган РОССИЯ
Сообщений: 1,079
Репутация: 16
64 24
35 8
 
23.02.2019 01:15 #7
#include <12F683.h>
#device ADC=16
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#use delay(internal=8000000)
#use FIXED_IO( A_outputs=PIN_A5,PIN_A4,PIN_A2 )

#define DS PIN_A5 // пин для вывода данных на 595 регистры
#define CH_CP PIN_A2 // пин захвата данных
#define ST_CP PIN_A4 // пин защёлка (разрешение индикации)
unsigned int16 vol=0,cur=180; //vol-напряжение, cur-ток
unsigned int32 vol1,cur1;
unsigned char glob_array[6]={235,235,235,235,235,235}; //массив для выводимых цифр вводим образы нулей
const unsigned char digit[10]={235,130,103,199,142,205,237,131,239,207} ; // образы цифр 0-9 -
unsigned char sh;
#INT_TIMER1
void TIMER1_isr(void)
{
//прерывание пока не используем пока
}

void zapmass ( int16 a,int16 c, unsigned char b) //Заполнение массива образами цифр а-трёхзначное число, b-номер старшего разряда В МАССИВЕ
{ //с -максимальное значение после которого выводим прочерки

if (a<c)
{
glob_array[b]=digit[a/100]; //старший разряд
glob_array[b+1]=digit[(a%100)/10]; //средний
glob_array[b+2]=digit[a%10]; //младший
}


else// Если показания выходят за заданные рамки то вывести прочерки во все сегменты
{
glob_array[b]=glob_array[b+1]=glob_array[b+2]=4; //4-это прочерки

}
}
void main()
{
setup_adc_ports(sAN0|sAN1);
setup_adc(ADC_CLOCK_DIV_64|VSS_VDD);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);

disable_interrupts(INT_TIMER1); //прерывания по таймеру ненужны пока
// enable_interrupts(INT_TIMER1);
disable_interrupts(GLOBAL);
//enable_interrupts(GLOBAL);

while(TRUE)
{

unsigned char i,j;
unsigned char y=64; // 01000000 //номер катода (включенного индикатора)

for (j=0;j<6;j++) //вывод 6-ти цифр в индикаторы
{

for (i=0;i<8;i++)//8 байт в регистры (образ цифры) вторая микросхема
{
if ((glob_array[j]>>(i))&1) output_high(DS); else output_low(DS);// побитно вводим информацию в микросхему
output_high(CH_CP);// захват данных разрешаем
output_low(CH_CP); // завершаем захват
}
for (i=0;i<8;i++) //8 байт в регистры (номер индикатора который надо зажечь в данный момент ) первая микросхема
{
if ((y>>(i))&1) output_high(DS); else output_low(DS);// побитно вводим информацию в микросхему про "y" ниже...
output_high(CH_CP); // захват данных разрешаем
output_low(CH_CP); // завершаем захват
}
y=y>>1; //эта переменная определяет какой индикатор зажечь, изначально в ней 01000000 потом 6 раз сдвигается в право меняя очерёдность
output_high(ST_CP); //выводим данные на индикаторы (защёлкиваем защёлку )

// setup_adc_ports(sAN0); // 0 канал мультиплексора для АЦП
// set_adc_channel(0); // незнаю зачем это делать так видел в инете
// cur1=cur1+read_adc(); // считываем АЦП с токового канала



setup_adc_ports(sAN1); // 1 канал мультиплексора для АЦП
set_adc_channel(1);
// vol1=vol1+read_adc();
vol=read_adc()/10;
// delay_ms(30);
/* if (sh==100) // sh-счётчик ста измерений
{
sh=0;
vol=vol1/1000;
cur=cur1/1000;
vol1=0;
cur1=0;
}
sh++; */
zapmass (vol,999,0);
// zapmass (cur,500,3); // заполняем массив glob_array с 3 по 5 цифрами
glob_array[1] |= (1 << 4); // добавляем запятую в показания напряжения
glob_array[3] |= (1 << 4); //добавляем запятую в показания тока

output_low(ST_CP); // отключить вывод на индикаторы на время ввода информации в регистры 74HC595
}
}

}
Оценка
Эксперт
 
Аватар для DmitriyVDN
 
Регистрация: 08.11.2009
Сообщений: 2,308
Репутация: 635
615 131
34 9
 
23.02.2019 14:04 #8
1. не работал с CCS , поэтому не знаю как правильно в нем настраивается осцилятор, предположу что настроен на 8МГц(даже если дефолтная 4МГц) , тактовая АЦП настроена не правильно, делитель должен быть 16.
2. есть большие сомнения что здесь set_adc_channel(1); есть нужные тайминги
ЗЫ и алекс если выкладываете код пользуйтесь тегами [CОDE][/CОDE]
кнопка # панели сообщений, его же читать не возможно
Оценка
Новичок
 
Аватар для aalex_641
 
Регистрация: 17.03.2018
Адрес: Курган РОССИЯ
Сообщений: 1,079
Репутация: 16
64 24
35 8
 
24.02.2019 17:50 #9
Код:
#include <12F683.h>
#device ADC=16
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOBROWNOUT               //No brownout reset
#use delay(internal=8000000)
#use FIXED_IO( A_outputs=PIN_A5,PIN_A4,PIN_A2 )

#define DS PIN_A5     // пин для вывода данных на 595 регистры
#define CH_CP PIN_A2  // пин захвата данных
#define ST_CP PIN_A4  // пин защёлка (разрешение индикации)
unsigned int16 vol=0,cur=180;  //vol-напряжение, cur-ток
unsigned int32 vol1,cur1;
unsigned char glob_array[6]={235,235,235,235,235,235}; //массив для выводимых цифр вводим образы нулей
const unsigned char digit[10]={235,130,103,199,142,205,237,131,239,207} ; // образы цифр 0-9 -
unsigned char sh;
#INT_TIMER1 
void  TIMER1_isr(void) 
{
   //прерывание пока не используем пока
 }
    
    void zapmass (  int16 a,int16 c, unsigned char b)  //Заполнение массива образами цифр а-трёхзначное число, b-номер старшего разряда В МАССИВЕ
    {                                                   //с -максимальное значение после которого выводим прочерки 

    if (a<c)
   {
     glob_array[b]=digit[a/1000];         //старший разряд
     glob_array[b+1]=digit[(a%1000)/100];  //средний
     glob_array[b+2]=digit[a%100/10];        //младший
    }   
    

    else// Если показания выходят за заданные рамки то вывести прочерки во все индикатроы
    {
    glob_array[b]=glob_array[b+1]=glob_array[b+2]=4;   //4-это прочерки
    
    }
}
void main()
{
   setup_adc_ports(sAN0|sAN1);
   setup_adc(ADC_CLOCK_DIV_64|VSS_VDD);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);      

   disable_interrupts(INT_TIMER1); //прерывания по таймеру ненужны пока
  // enable_interrupts(INT_TIMER1);
   disable_interrupts(GLOBAL);     //и вообще ненужны все
   //enable_interrupts(GLOBAL);   
   
   while(TRUE)
   {

 unsigned char i,j;   // вспомогательные переменные для циклов
 unsigned char y=64; // 01000000  //номер катода (включенного индикатора)
        
         for (j=0;j<6;j++) //вывод 6-ти цифр в индикаторы в режиме динамической индикации
          {
                         
                              for (i=0;i<8;i++)//8 байт в регистры (образ цифры) вторая микросхема
                           {
                                 if ((glob_array[j]>>(i))&1) output_high(DS); else output_low(DS);// побитно вводим информацию в микросхему
                                 output_high(CH_CP);// захват данных разрешаем
                                 output_low(CH_CP);       //  завершаем захват
                           }
                  for (i=0;i<8;i++)  //8 байт в регистры (номер индикатора который надо зажечь в данный момент ) первая микросхема
                          {
                                if ((y>>(i))&1) output_high(DS); else output_low(DS);// побитно вводим информацию в микросхему про "y" ниже...
                                 output_high(CH_CP);      // захват данных разрешаем
                                 output_low(CH_CP);       //  завершаем захват                                 
                          }
                             y=y>>1; //эта переменная определяет какой индикатор зажечь, изначально в ней 01000000 потом 6 раз сдвигается в право меняя очерёдность
                              output_high(ST_CP);  //выводим данные на индикаторы (защёлкиваем защёлку :)  )
                                                 
                     setup_adc_ports(sAN1);   // 1 канал мультиплексора для АЦП
                       set_adc_channel(1);                          
                         vol1=vol1+read_adc();
                           //   delay_ms(30);
                              if (sh==100)   // sh-счётчик ста измерений
                              {
                               sh=0;
                               vol=vol1/100; //высчитываем среднее арифметическое
                               vol1=0;
                              }
                              sh++; 
                              zapmass (vol,1023,0); 
                               glob_array[1] |= (1 << 4); // добавляем запятую в показания напряжения
                                glob_array[3] |= (1 << 4); //добавляем запятую в показания тока  
    
                              output_low(ST_CP); // отключить вывод на индикаторы на время ввода информации в  регистры 74HC595
          }
   }

}
Оценка
Новичок
 
Аватар для aalex_641
 
Регистрация: 17.03.2018
Адрес: Курган РОССИЯ
Сообщений: 1,079
Репутация: 16
64 24
35 8
 
24.02.2019 19:02 #10
Убрал всё лишнее связанное с током. Оставил пока только напряжение. Схемы индикаторов не стал рисовать, потому как они работает как часы... Проблема только с АЦП.
Изображения
Тип файла: jpg 595.jpg (53.3 Кб, 0 просмотров)
Оценка
Ответ
Страница 1 из 5
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Оценка этой теме
Оценка этой теме:
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход
Электронные компоненты. Бесплатная доставка по России
Часовой пояс GMT +3, время: 22:38.
Обратная связь РадиоЛоцман Вверх