GDK Опубликовано 18 апреля, 2017 Поделиться Опубликовано 18 апреля, 2017 Похоже на то. В техописании нашёл - есть схема потрохов: резистивный делитель, дальше аналоговый мультиплексор... Ну и пишут про ограниченный ток и предлагают буфер ставить на этот выход. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Reydorino Опубликовано 20 апреля, 2017 Поделиться Опубликовано 20 апреля, 2017 Здравствуйте. Задача следующая, используя встроенный 10 битный АЦП МК PIC16F688 со встроенным опорным напряжением 2,56 Вольт. В качестве входного сигнала использую потенциометр. Изменяя положение ручки потенциометра, необходимо в зависимости от напряжения на входе АЦП переключать порты выхода в высокий уровень. Написал код на С, используя операторы if...else. При, так сказать, одном каскаде if...else (Картинка 1) все работает замечательно, в зависимости от положения ручки потенциометра ниже уровня 300, на выходе 0, выше 1. А как начинаю добавлять следующие каскады if...else (Картинка 2) происходит следующее, при повышении уровня на входе АЦП от 0 до 1024, на первом пине высокий уровень и на этом дальнейшие действия заканчиваются. Вопрос, где допустил ошибку? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
Alex Опубликовано 20 апреля, 2017 Поделиться Опубликовано 20 апреля, 2017 Во первых. Нет заключительного else. Во вторых. При любом значении, больше 300, сработает только первое условие, остальные проигнорируются. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Reydorino Опубликовано 20 апреля, 2017 Поделиться Опубликовано 20 апреля, 2017 (изменено) Спасибо за ответ! Да, действительно забыл заключающее else. А как быть, чтобы выполнялись и другие условия? Как то задать диапазон? Или есть специальные операторы? Изменено 20 апреля, 2017 пользователем Reydorino 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 20 апреля, 2017 Поделиться Опубликовано 20 апреля, 2017 Причём тут спец операторы ? Просто условия нормально сделайте. Сейчас у Вас, к примеру, если "d" равна 601, то второе условие (d>=600) не выполнится, ибо 601 также больше 300. Соответственно, выполнится только первое условие. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 20 апреля, 2017 Поделиться Опубликовано 20 апреля, 2017 if ((d>=300)&&(d<600)) k=1; if ((d>=600)&&(d<900)) k=2; if (d>=900) k=3; 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 20 апреля, 2017 Поделиться Опубликовано 20 апреля, 2017 if(d<100) k=0; else if(d<200) k=1; else if(d<300) k=3; ...... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Reydorino Опубликовано 24 апреля, 2017 Поделиться Опубликовано 24 апреля, 2017 (изменено) Спасибо за ответы! Все получилось, но появился еще один вопрос, как использовать 2 канала ацп с переключениями между собой, т.е. по одному потенциометру на канал? Регистром ADCON0 настраиваю АЦП и выбираю какой канал буду использовать, а как переключится на, допустим, второй? Изменено 24 апреля, 2017 пользователем Reydorino 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 24 апреля, 2017 Поделиться Опубликовано 24 апреля, 2017 Битам CHS канал и выбирается. Вы сами же на свой вопрос и ответили. В чём тогда вопрос ? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Reydorino Опубликовано 24 апреля, 2017 Поделиться Опубликовано 24 апреля, 2017 Про бит CHS понял, не знаю как в коде его прописать, если не трудно можете обьяснить? Сделал так, вроде работает... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 24 апреля, 2017 Поделиться Опубликовано 24 апреля, 2017 так оный у вас в функции прописывается ADC_Read(номер_канала) 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
UVV Опубликовано 9 июня, 2017 Поделиться Опубликовано 9 июня, 2017 Есть pic16f819 к нему кварц прикручен на 4 МГц можно ли организовать таймер от 30 мин - 10 часов выдержки с шагом по 30 минут или всё таки придётся применить кварц на 32.768 kHz? Я понимаю что если настроить TMR1 на прерывание и его регистры в каждом прерывании обновлять как TMRH=198 TMRL=220 до между прерываниями получим ровно 0.5 сек? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 9 июня, 2017 Поделиться Опубликовано 9 июня, 2017 2 часа назад, UVV сказал: если настроить TMR1 на прерывание и его регистры в каждом прерывании обновлять как TMRH=198 TMRL=220 до между прерываниями получим ровно 0.5 сек? нет не получите... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
GDK Опубликовано 9 июня, 2017 Поделиться Опубликовано 9 июня, 2017 Может программный таймер организовать? И вместо калькулятора посчитать всё вручную, чтобы понятно стало как работает всё, потом калькулятор уже как инструмент для ускорения вычислений можно применять. В 20.04.2017 в 01:50, Alex сказал: Правильно мыслим по таймерам и автоматам. По программным таймерам на Си, там же - http://forum.chipmk.ru/index.php/topic/146-программные-таймеры/ Чем не нравится 32 кГц? Если надо только время считать с такими периодами, то скорости на 32 кГц должно хватить выше крыши, при этом энергопотребление будет с гулькин нос. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
UVV Опубликовано 11 июня, 2017 Поделиться Опубликовано 11 июня, 2017 @Reydorino всё гораздо проще 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 11 июня, 2017 Поделиться Опубликовано 11 июня, 2017 51 минуту назад, UVV сказал: всё гораздо проще да ну... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
UVV Опубликовано 11 июня, 2017 Поделиться Опубликовано 11 июня, 2017 (изменено) @IMXO ну да! Или же да нет? А типо надо бегающий один бит от положения ручки переменника? Изменено 11 июня, 2017 пользователем UVV 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Серёгин1975 Опубликовано 2 августа, 2017 Поделиться Опубликовано 2 августа, 2017 Привет всем! Ребятки , помогите понять разницу между PIC16F877 и PIC16F877A . Я не силён в этом .В схеме стоит PIC16F877. А будет ли нормально работать с букавкой А ? Или что то надо в прошивке поменять ? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 2 августа, 2017 Поделиться Опубликовано 2 августа, 2017 @Серёгин1975 http://ww1.microchip.com/downloads/en/DeviceDoc/39591a.pdf 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Серёгин1975 Опубликовано 2 августа, 2017 Поделиться Опубликовано 2 августа, 2017 (изменено) Спасибо, но я видел это .Мне это ничего не дало , в этом не понимаю.Если можно на словах поясните .Можно или нет заменить ? Изменено 2 августа, 2017 пользователем Серёгин1975 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 2 августа, 2017 Поделиться Опубликовано 2 августа, 2017 ничего менять не надо , все должно работать 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Серёгин1975 Опубликовано 2 августа, 2017 Поделиться Опубликовано 2 августа, 2017 (изменено) Благодарю вас ! Буду пробовать Изменено 2 августа, 2017 пользователем Серёгин1975 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
vksam Опубликовано 10 сентября, 2017 Поделиться Опубликовано 10 сентября, 2017 (изменено) Всем привет! Я начинающий в теме программирования контроллеров. Хочу попробовать собрать часы реального времени. Набросал вот такую схему И набросал вот такой код (набросок... причесывать буду потом, сейчас задача отработать процедуру чтения/записи из таймера). Ну так вот: в протеусе, понятное дело, все работает, а в железе нет Вместо времени выводится какая-то ерунда (цифры, но не те что надо). Реализация не отличается от схемы в протеусе. Разве что добавлена керамика по питанию контроллера. Вывод произвольных цифр на индикатор - работает. 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++; } } Изменено 10 сентября, 2017 пользователем vksam 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Vovka Опубликовано 11 сентября, 2017 Поделиться Опубликовано 11 сентября, 2017 6 часов назад, vksam сказал: Реализация не отличается от схемы в протеусе. Разве что добавлена керамика по питанию контроллера Индикатор подключен без резисторов??? 0 На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие Ссылка на комментарий Поделиться на другие сайты Поделиться
vksam Опубликовано 11 сентября, 2017 Поделиться Опубликовано 11 сентября, 2017 С резисторами на 100R, но не уверен, что проблема в этом. Повторюсь, произвольные цифры отображаются правильно (как статические, так и изменяемые в цикле). 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.