Перейти к содержанию

Общие вопросы по PIC-микроконтроллерам


NebsteR

Рекомендуемые сообщения

Похоже на то. В техописании нашёл - есть схема потрохов:  резистивный делитель, дальше аналоговый мультиплексор... Ну и пишут про ограниченный ток и предлагают буфер ставить на этот выход.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Здравствуйте. 
Задача следующая, используя встроенный 10 битный АЦП МК PIC16F688 со встроенным опорным напряжением 2,56 Вольт. В качестве входного сигнала использую потенциометр. Изменяя положение ручки потенциометра, необходимо в зависимости от напряжения на входе АЦП переключать порты выхода в высокий уровень. Написал код на С, используя операторы if...else. При, так сказать, одном каскаде if...else (Картинка 1) все работает замечательно, в зависимости от положения ручки потенциометра ниже уровня 300, на выходе 0, выше 1. А как начинаю добавлять следующие каскады if...else (Картинка 2) происходит следующее, при повышении уровня на входе АЦП от 0 до 1024, на первом пине высокий уровень и на этом дальнейшие действия заканчиваются.
Вопрос, где допустил ошибку?

Картинка 1.jpg

Картинка 2.jpg

Схема.jpg

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Во первых. Нет заключительного else.
Во вторых. При любом значении, больше 300, сработает только первое условие, остальные проигнорируются.
 

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Спасибо за ответ! Да, действительно забыл заключающее else. А как быть, чтобы выполнялись и другие условия? Как то задать диапазон? Или есть специальные операторы? 58f8cdcf39efa_.thumb.jpg.73d3473d0300fee99553271a95b514a1.jpg 

Изменено пользователем Reydorino
Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Причём тут спец операторы ? Просто условия нормально сделайте.
Сейчас у Вас, к примеру, если "d" равна 601, то второе условие (d>=600) не выполнится, ибо 601 также больше 300. Соответственно, выполнится только первое условие.
 

Ссылка на комментарий
Поделиться на другие сайты

Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока (материалы вебинара)

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Спасибо за ответы! Все получилось, но появился еще один вопрос, как использовать 2 канала ацп с переключениями между собой, т.е. по одному потенциометру на канал?58fde88b40afe_.thumb.jpg.95bd936cb070e8c776a778de98e19b5a.jpg58fde88d694fc_.thumb.jpg.921b223ea8e046c92bcee9e6d304fa5e.jpg Регистром ADCON0 настраиваю АЦП и выбираю какой канал буду использовать, а как переключится на, допустим, второй? 

Изменено пользователем Reydorino
Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Есть pic16f819 к нему кварц прикручен на 4 МГц можно ли организовать таймер от 30 мин - 10 часов выдержки с шагом по 30 минут или всё таки придётся применить кварц на 32.768 kHz?

Я понимаю что если настроить TMR1 на прерывание и его регистры в каждом прерывании обновлять как TMRH=198 TMRL=220 до между прерываниями получим ровно 0.5 сек?

593ac73f11244_.thumb.GIF.ca1084a45e65bcf51845c10a78665b8f.GIF

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, UVV сказал:

если настроить TMR1 на прерывание и его регистры в каждом прерывании обновлять как TMRH=198 TMRL=220 до между прерываниями получим ровно 0.5 сек?

нет не получите...

Ссылка на комментарий
Поделиться на другие сайты

Может программный таймер организовать? И вместо калькулятора посчитать всё вручную, чтобы понятно стало как работает всё, потом калькулятор уже как инструмент для ускорения вычислений можно применять.

В 20.04.2017 в 01:50, Alex сказал:

Правильно мыслим по таймерам и автоматам.
По программным таймерам на Си, там же - http://forum.chipmk.ru/index.php/topic/146-программные-таймеры/

 

Чем не нравится 32 кГц? Если надо только время считать с такими периодами, то скорости на 32 кГц должно хватить выше крыши, при этом энергопотребление будет с гулькин нос.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Привет всем! Ребятки , помогите понять разницу между PIC16F877 и PIC16F877A . Я не силён в этом .В схеме стоит PIC16F877.  А будет ли нормально работать с букавкой А ? Или что то надо в прошивке поменять ?

Ссылка на комментарий
Поделиться на другие сайты

Спасибо, но я видел это .Мне это ничего не дало , в этом не понимаю.Если можно на словах поясните .Можно или нет заменить ?

 

 

 

Изменено пользователем Серёгин1975
Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Всем привет!

Я начинающий в теме программирования контроллеров.

Хочу попробовать собрать часы реального времени. Набросал вот такую схему

clock.thumb.png.7573823486dec35d31acddfcb16b3fb4.png

 

И набросал вот такой код (набросок... причесывать буду потом, сейчас задача отработать процедуру чтения/записи из таймера).

Ну так вот: в протеусе, понятное дело, все работает, а в железе нет :( Вместо времени выводится какая-то ерунда (цифры, но не те что надо). Реализация не отличается от схемы в протеусе. Разве что добавлена керамика по питанию контроллера.

Вывод произвольных цифр на индикатор - работает.

RA6 и RA7 настроены как ввод-вывод.

Вот никак не пойму что не так? Возможно сама микросхема мертвая или я что-то упустил... не знаю...  может знатоки что подскажут?

Код написан в MikroC.

Скрытый текст

unsigned int msCounter = 0;
unsigned int secCounter = 1;
unsigned int minCounter = 2;
unsigned int hrCounter = 3;

char clock[4];
char dot = 0b00000000;

// Software I2C connections
sbit Soft_I2C_Scl           at RA6_bit;
sbit Soft_I2C_Sda           at RA7_bit;
sbit Soft_I2C_Scl_Direction at TRISA6_bit;
sbit Soft_I2C_Sda_Direction at TRISA7_bit;
// End Software I2C connections

int ms1;
short i = 0;

unsigned char BCDconv (unsigned char source) {
         unsigned char temp_min = 0; //переменная для единиц
         unsigned char temp_maj = 0; //переменная для десятков

         temp_min = source&15; //помещаем младшую часть байта в переменную (15 = 0b00001111)
         temp_maj = source >> 4; //Смещаем старшую часть вправо на 4 бита
         temp_maj *= 10;
         
         return temp_maj+temp_min; //возвращаем десятичное значение
}

unsigned char DCBconv (unsigned char source) {
         unsigned char temp_min=0;
         unsigned char temp_maj=0;
         
         temp_maj = source/10 ;
         temp_min = source - temp_maj*10;
         temp_maj <<= 4;
         
         return temp_maj+temp_min;
    
}

unsigned int Hex(int a){
         switch(a){               // c.deafbg
           case 1: return 0b01111101;// 0b01111011;
           case 2: return 0b11000100;//0b00011100;
           case 3: return 0b01010100;//0b00111000;
           case 4: return 0b01111000;//0b01101010;
           case 5: return 0b01010010;//0b10101000;
           case 6: return 0b01000010;//0b10001000;
           case 7: return 0b01110101;//0b00111011;
           case 8: return 0b01000000;//0b00001000;
           case 9: return 0b01010000;//0b00101000;
           case 0: return 0b01000001;//0b00001001;
         }

}

unsigned char ds_read( unsigned char addr ){
         unsigned tmp;

         Soft_I2C_Start();
         Soft_I2C_Write(0xD0);           //
         Soft_I2C_Write( addr );
         Soft_I2C_Start();
         Soft_I2C_Write(0xD1);           //
         tmp = Soft_I2C_Read(0);
         tmp = BCDconv(tmp);
         Soft_I2C_Stop();

         return tmp;
                                        
}

unsigned ds_write( unsigned char addr,unsigned char dat ){
         unsigned tmp;
         
         tmp = DCBconv( dat );

         Soft_I2C_Start();
         Soft_I2C_Write( 0xD0 );           //
         Soft_I2C_Write( addr );
         Soft_I2C_Write( tmp );           //
         Soft_I2C_Stop();

}

void ds_init(){
     unsigned char i;

     // устанавлитваем режим 24 часа
     i = ds_read( 0x02 );
     if( (i&0x40)!=0 ){
                     ds_write( 0x02, i&~0x40 );
     }
     
     // если часы выключены - включаем
     i = ds_read( 0x00 );
     if((i&0x80)!=0){
                     ds_write( 0x00, i&~0x80 );
     }

}

void main() {
     CMCON = 7;
     PORTA = 0b11111111;
     TRISA = 0b00110000;

     PORTB = 0b00000000;
     TRISB = 0b00000000;
     
     Soft_I2C_Init();
     ds_init();
     while(1){
              secCounter = ds_read( 0x00 );
              minCounter = ds_read( 0x01 );

              clock[0] = Hex( secCounter%10 );
              clock[1] = Hex( secCounter/10 );
              clock[2] = Hex( minCounter%10 );
              clock[3] = Hex( minCounter/10 );
      
              if( i == 4 ){
                  i = 0;
               }

               PORTA = 0b00000000;
               PORTB = clock[i];
               PORTA = 0b00000001 << i;
               i++;

       }

}

 

 

Изменено пользователем vksam
Ссылка на комментарий
Поделиться на другие сайты

6 часов назад, vksam сказал:

Реализация не отличается от схемы в протеусе. Разве что добавлена керамика по питанию контроллера

 

Индикатор подключен без резисторов???

На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

Ссылка на комментарий
Поделиться на другие сайты

С резисторами на 100R, но не уверен, что проблема в этом. Повторюсь, произвольные цифры отображаются правильно (как статические, так и изменяемые в цикле).

 

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...