Страница 1 из 1

проблемма с PIC16F873A

Добавлено: Ср авг 07, 2013 22:39:48
DSssss
Здравствуйте! у меня возникла проблемка с микроконтроллером 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 раза всё подключено правильно НО Я НЕ СТАВИЛ ДИСПЛЕЙ И ПОДКЛЮЧИЛ ТОЛЬКО ОДИН ЭНКОДЕР по причине: нет средств!)) возможно что регулятор не работает из-за недостающих устройств??? это мой первый мк, думал что все заработает, а тут.... ВСЕМ ОТКЛИКНУВШИМСЯ ОГРОМНОЕ СПАСИБО!!

Re: проблемма с PIC16F873A

Добавлено: Чт авг 08, 2013 07:44:35
otest
мк прошол тестирование, и для верности я прочитал его, вроде с кодом всё правильно
Что такое тестирование МК?
Читать его не обязательно для проверки правильности прошивки есть сравнение с буфером.
Тогда слово "вроде" можно будет не писать.
платы проверил по 3 раза всё подключено правильно
Нам это не известно.
возможно что регулятор не работает из-за недостающих устройств?
Каких устройств?
Если дисплея ,то он на работу не влияет. Как определил что не работает без дисплея?

Re: проблемма с PIC16F873A

Добавлено: Чт авг 08, 2013 17:59:11
Dmitry Dubrovenko
otest писал(а):Если дисплея ,то он на работу не влияет
Вообще-то, может и влиять, в зависимости от алгоритма управления.
Но, в данной схеме, точно не влияет.

Re: проблемма с PIC16F873A

Добавлено: Чт авг 08, 2013 21:36:49
DSssss
otest писал(а):
Как определил что не работает без дисплея?
я имел в виду что неработает вообще :( когда подаёш сигнал на вход TDA7448 на выход проходит сигнал громкостью где-то в половину меньше входного (при отключённом питании PIC16F873A и TDA7448!) а когда подаёш напряжение на мк, в колонках звук пропадает, но когда крутиш энкодер эсть щелчки... :cry: возможно ли что не работает из-за недостающих энкодеров???

Re: проблемма с PIC16F873A

Добавлено: Чт авг 08, 2013 22:08:07
otest
возможно ли что не работает из-за недостающих энкодеров???
Если в программе есть опрос энкодеров и нет обработки его неисправности, то программа зациклится и работать не будет.

Re: проблемма с PIC16F873A

Добавлено: Пт авг 09, 2013 07:55:51
DSssss
otest писал(а):Если в программе есть опрос энкодеров и нет обработки его неисправности, то программа зациклится и работать не будет.
не подскажеш, какие это команды? :dont_know:

Re: проблемма с PIC16F873A

Добавлено: Вс авг 11, 2013 21:07:15
vovik15
попробуй поставить все энкодеры

Re: проблемма с PIC16F873A

Добавлено: Вт авг 13, 2013 23:24:16
DSssss
хорошо, куплю и поставлю на днях...

Re: проблемма с PIC16F873A

Добавлено: Пн авг 19, 2013 08:35:48
DSssss
В общем, не получается :( ... Энкодеры поставил но, при подключении к регулятору звука (при отключённом питании) громкость выхода в половину мньше, а при подаче питания звук резко пропадает но через 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--; // "разряжаем" таймаут ДУ (вне функции ИК!)
} // конец функции