Здравствуйте! у меня возникла проблемка с микроконтроллером PIC16F873A! Сразу оговорюсь: это мой первый опыт в програмировании, так что если дело в програмировании мк то обясняйте как можно подробнее))
Ну... в общем решил я сделать регулятор громкости на энкодере (схема взята с этого сайта http://radiokot.ru/circuit/audio/other/21/ )для програмирования PICа сделал программатор Extra-PIC ( схема с сайта лабкит http://www.labkit.ru/html/programmators_shm?id=72 ). я запрограмировал PIC, всё собрал как на схеме, итог: НЕ РАБОТАЕТ!((( програматор рабочий, проверял мультиметром по статье с лабкита http://www.labkit.ru/userfiles/file/p ... rs/Extra-PIC/Metodika.rar , мк прошол тестирование, и для верности я прочитал его, вроде с кодом всё правильно. платы проверил по 3 раза всё подключено правильно НО Я НЕ СТАВИЛ ДИСПЛЕЙ И ПОДКЛЮЧИЛ ТОЛЬКО ОДИН ЭНКОДЕР по причине: нет средств!)) возможно что регулятор не работает из-за недостающих устройств??? это мой первый мк, думал что все заработает, а тут.... ВСЕМ ОТКЛИКНУВШИМСЯ ОГРОМНОЕ СПАСИБО!!
проблемма с PIC16F873A
- Реклама
Re: проблемма с PIC16F873A
Что такое тестирование МК?мк прошол тестирование, и для верности я прочитал его, вроде с кодом всё правильно
Читать его не обязательно для проверки правильности прошивки есть сравнение с буфером.
Тогда слово "вроде" можно будет не писать.
Нам это не известно.платы проверил по 3 раза всё подключено правильно
Каких устройств?возможно что регулятор не работает из-за недостающих устройств?
Если дисплея ,то он на работу не влияет. Как определил что не работает без дисплея?
- Dmitry Dubrovenko
- Поставщик валерьянки для Кота
- Сообщения: 2359
- Зарегистрирован: Вс янв 09, 2011 16:51:39
- Откуда: Санкт-Ленинград
- Контактная информация:
Re: проблемма с PIC16F873A
Вообще-то, может и влиять, в зависимости от алгоритма управления.otest писал(а):Если дисплея ,то он на работу не влияет
Но, в данной схеме, точно не влияет.
ICQ нет, и, в ближайшее время, не будет.
- DSssss
- Первый раз сказал Мяу!
- Сообщения: 27
- Зарегистрирован: Ср авг 07, 2013 15:10:41
- Откуда: Воронеж
Re: проблемма с PIC16F873A
я имел в виду что неработает вообщеotest писал(а):Как определил что не работает без дисплея?
Ток своих не бьёт.
Re: проблемма с PIC16F873A
Если в программе есть опрос энкодеров и нет обработки его неисправности, то программа зациклится и работать не будет.возможно ли что не работает из-за недостающих энкодеров???
- Реклама
- DSssss
- Первый раз сказал Мяу!
- Сообщения: 27
- Зарегистрирован: Ср авг 07, 2013 15:10:41
- Откуда: Воронеж
Re: проблемма с PIC16F873A
не подскажеш, какие это команды?otest писал(а):Если в программе есть опрос энкодеров и нет обработки его неисправности, то программа зациклится и работать не будет.
Ток своих не бьёт.
Re: проблемма с PIC16F873A
попробуй поставить все энкодеры
- DSssss
- Первый раз сказал Мяу!
- Сообщения: 27
- Зарегистрирован: Ср авг 07, 2013 15:10:41
- Откуда: Воронеж
Re: проблемма с PIC16F873A
В общем, не получается
... Энкодеры поставил но, при подключении к регулятору звука (при отключённом питании) громкость выхода в половину мньше, а при подаче питания звук резко пропадает но через 2 секунды плавно востанавливается и при этом в колонках слышны тихие щелчки. я так понимаю это работает функция "плавный старт". пробовал "тыкать" на кнопки (громкость/баланс, mute, st buy, резерв) при этом: нажимая на mute громкость пропабает если кнопку удерживать, так же и с st buy.
может убрать из кода некоторые комманды?
unsigned char ir; // переменная под ИК-команды (я не ставил ик)
enc (); // функция обслуживания энкодеров
ird (); // функция ИК-приемника
// ====================
// === функция обслуживания энкодеров ===
// ====================
void enc (void){
if (mut == 0){ // проверка на mute
if (mst == 0){ // начало проверки на мастер громкость
// Front_vol
if ((enc1_act == 1)&(bal == 0))
{rez = 1;
if (enc1_napr == 0) max();
if (enc1_napr == 1) min();
enc1_act = 0;}
// Rear_vol
if ((enc2_act == 1)&(bal == 0))
{rez = 2;
if (enc2_napr == 0) max();
if (enc2_napr == 1) min();
enc2_act = 0;}
// Center
if (enc3_act == 1)
{rez = 3;
if (enc3_napr == 0) max();
if (enc3_napr == 1) min();
enc3_act = 0;}
// Subwoofer
if (enc4_act == 1)
{rez = 4;
if (enc4_napr == 0) max();
if (enc4_napr == 1) min();
enc4_act = 0;}
// Front_bal
if ((enc1_act == 1)&(bal == 1))
{rez = 5;
if (enc1_napr == 0) max();
if (enc1_napr == 1) min();
enc1_act = 0;}
// Rear_bal
if ((enc2_act == 1)&(bal == 1))
{rez = 6;
if (enc2_napr == 0) max();
if (enc2_napr == 1) min();
enc2_act = 0;}
} // продолжение проверки на мастер громкость
else // === МАСТЕР ГРОМКОСТЬ ===
{ // продолжение проверки на мастер громкость
rez = 7;
if (enc1_act == 1){
if (enc1_napr == 0) max();
if (enc1_napr == 1) min();
enc1_act = 0;}
if (enc2_act == 1){
if (enc2_napr == 0) max();
if (enc2_napr == 1) min();
enc2_act = 0;}
if (enc3_act == 1){
if (enc3_napr == 0) max();
if (enc3_napr == 1) min();
enc3_act = 0;}
if (enc4_act == 1){
if (enc4_napr == 0) max();
if (enc4_napr == 1) min();
enc4_act = 0;}
} // конец проверки на мастер громкость
} // конец проверки на mute
} // конец функции
// ==========
// === функция ИК-приемника ===
// ==========
unsigned char ir; // переменная под ИК-команды
unsigned char ir_pro; // проверочная перменная ИК-команд
unsigned int ir_ta; // таймаут ДУ
void ird (void){ // начало функции
if(ir!=0){ // начало обработки ИК
if(ir_pro==ir){ // перепроверка команды
GIE = 0;
if(mut == 0){ // разрешено, если st-by = 0
if(ir==1){rez=5; rezim ();} // 1 - front_vol
if(ir==2){rez=1; rezim ();} // 2 - rear_vol
if(ir==3){rez=5; rezim ();} // 3 - center
if(ir==4){rez=4; rezim ();} // 4 - subwoofer
if(ir==5){rez=3; rezim ();} // 5 - front_bal
if(ir==6){rez=4; rezim ();} // 6 - rear_bal
if(ir==7){rez=6; rezim ();}
if(ir==8){rez=2; rezim ();}
if(ir==9){rez=6; rezim ();}
if(ir==16){max();} // вправо
if(ir==17){min();} // влево
if(ir==32){if (ir_ta==0) {rez++;if(rez>6)rez=1;rezim();}} // вверх
if(ir==33){if (ir_ta==0) {rez--;if(rez<1)rez=6;rezim();}} // вниз
} // конец проверки на mute
if(ir==13){if (ir_ta==0) mute();} // mute
if(ir==12){if (ir_ta==0) stby();} // standby
} // конец перепроверки команды
ir_pro=ir; ir=0;
ir_ta = 0x8ff; // "зарядили" таймаут ДУ
GIE = 1;
} // конец обработки ИК
if(ir_ta!=0) ir_ta--; // "разряжаем" таймаут ДУ (вне функции ИК!)
} // конец функции
может убрать из кода некоторые комманды?
unsigned char ir; // переменная под ИК-команды (я не ставил ик)
enc (); // функция обслуживания энкодеров
ird (); // функция ИК-приемника
// ====================
// === функция обслуживания энкодеров ===
// ====================
void enc (void){
if (mut == 0){ // проверка на mute
if (mst == 0){ // начало проверки на мастер громкость
// Front_vol
if ((enc1_act == 1)&(bal == 0))
{rez = 1;
if (enc1_napr == 0) max();
if (enc1_napr == 1) min();
enc1_act = 0;}
// Rear_vol
if ((enc2_act == 1)&(bal == 0))
{rez = 2;
if (enc2_napr == 0) max();
if (enc2_napr == 1) min();
enc2_act = 0;}
// Center
if (enc3_act == 1)
{rez = 3;
if (enc3_napr == 0) max();
if (enc3_napr == 1) min();
enc3_act = 0;}
// Subwoofer
if (enc4_act == 1)
{rez = 4;
if (enc4_napr == 0) max();
if (enc4_napr == 1) min();
enc4_act = 0;}
// Front_bal
if ((enc1_act == 1)&(bal == 1))
{rez = 5;
if (enc1_napr == 0) max();
if (enc1_napr == 1) min();
enc1_act = 0;}
// Rear_bal
if ((enc2_act == 1)&(bal == 1))
{rez = 6;
if (enc2_napr == 0) max();
if (enc2_napr == 1) min();
enc2_act = 0;}
} // продолжение проверки на мастер громкость
else // === МАСТЕР ГРОМКОСТЬ ===
{ // продолжение проверки на мастер громкость
rez = 7;
if (enc1_act == 1){
if (enc1_napr == 0) max();
if (enc1_napr == 1) min();
enc1_act = 0;}
if (enc2_act == 1){
if (enc2_napr == 0) max();
if (enc2_napr == 1) min();
enc2_act = 0;}
if (enc3_act == 1){
if (enc3_napr == 0) max();
if (enc3_napr == 1) min();
enc3_act = 0;}
if (enc4_act == 1){
if (enc4_napr == 0) max();
if (enc4_napr == 1) min();
enc4_act = 0;}
} // конец проверки на мастер громкость
} // конец проверки на mute
} // конец функции
// ==========
// === функция ИК-приемника ===
// ==========
unsigned char ir; // переменная под ИК-команды
unsigned char ir_pro; // проверочная перменная ИК-команд
unsigned int ir_ta; // таймаут ДУ
void ird (void){ // начало функции
if(ir!=0){ // начало обработки ИК
if(ir_pro==ir){ // перепроверка команды
GIE = 0;
if(mut == 0){ // разрешено, если st-by = 0
if(ir==1){rez=5; rezim ();} // 1 - front_vol
if(ir==2){rez=1; rezim ();} // 2 - rear_vol
if(ir==3){rez=5; rezim ();} // 3 - center
if(ir==4){rez=4; rezim ();} // 4 - subwoofer
if(ir==5){rez=3; rezim ();} // 5 - front_bal
if(ir==6){rez=4; rezim ();} // 6 - rear_bal
if(ir==7){rez=6; rezim ();}
if(ir==8){rez=2; rezim ();}
if(ir==9){rez=6; rezim ();}
if(ir==16){max();} // вправо
if(ir==17){min();} // влево
if(ir==32){if (ir_ta==0) {rez++;if(rez>6)rez=1;rezim();}} // вверх
if(ir==33){if (ir_ta==0) {rez--;if(rez<1)rez=6;rezim();}} // вниз
} // конец проверки на mute
if(ir==13){if (ir_ta==0) mute();} // mute
if(ir==12){if (ir_ta==0) stby();} // standby
} // конец перепроверки команды
ir_pro=ir; ir=0;
ir_ta = 0x8ff; // "зарядили" таймаут ДУ
GIE = 1;
} // конец обработки ИК
if(ir_ta!=0) ir_ta--; // "разряжаем" таймаут ДУ (вне функции ИК!)
} // конец функции
Ток своих не бьёт.


