Отправлено: 28.09.16 13:10. Заголовок: Помогите в программировании PIC16F76
Пример программы, которая просто все биты порта B взводит в 1. #include <pic.h> void main(void) { __CONFIG(0x3FBA); TRISB = 0; //все на выход PORTB = 0xFF; } Но после прошивки в реальный PIC, RB2 моргает, а RB3 =1, остальные равны 0. Если затем программно на RB3 подать 0 то все загораются RB2 моргает, затем обнуляю PORTB = 0 все равны 0 ,а RB3 равен 1. Кто поможет??? грешу на LVP но не знаю как его сбросить.
Пост N: 439
Зарегистрирован: 25.09.09
Откуда: г.Саратов
Рейтинг:
2
Отправлено: 29.09.16 08:23. Заголовок: Какой МК?
"после прошивки в реальный PIC, RB2 моргает" "Моргать" может что-то по программе или плохом контакте. Судя по фрагменту - просто загорятся светики, если они там есть. В сообщении не указана марка МК, разряд вкл/откл низковольтного программирования в слове конфигурации можно смотреть по документации на конкретный МК. Например:для p16f88 он 07.
Пост N: 440
Зарегистрирован: 25.09.09
Откуда: г.Саратов
Рейтинг:
2
Отправлено: 29.09.16 11:34. Заголовок: МК стерт?
С типом МК понятно, укажи тип осциллятора и тактовую частоту. У этого МК нет низковольтного программирования: LP, RC,HS,XT. Убедись, что программатор стер старую программу. После стирания - ничего не мигает. Опиши свою задачу словами. Укажи среду программирования. Если осциллятор на кварце, пусть 4 МГц, то конфигурацию можно взять 0x3FF9. С МК знакомлюсь простейший программкой-мигалкой на любой порт, пусть В. Объявляю переменную, скажем а в байт типом . До основного цикла задаю trisb=0; - т.е. RВ на вывод из МК и другие заморочки для конкретного МК (кажем - отключаю компараторы и т.п.). Непосредственно записать в порт значение не удастся. Это PIC. В основном цикле посылаю переменную а=255 в RB (зажег) и ставлю задержку (пусть 250 мСек- чтобы глаз успел заметить). Следом ставлю команду а=0; и опять посылаю её в порт (гашу) и та- же задержка.Основной цикл закончился. Это проверяю в симуляторе и железе. БУ контроллер может изначально быть прошитым с защитой, тогда его не прочитаешь. Но - стираться он должен, так мне кажется.
Отправлено: 29.09.16 14:15. Заголовок: Да, ты прав, МК был ..
Да, ты прав, МК был с защитой, кварц на 10 МГц, среда разработки MPLAB 8.92. Я его стер и прошил, делал мигалки по порту RB4, RB5 все работало. написал программу опроса PS/2 клавиатуры, для проверки опрашиваю 4 кнопки (A, S, D, F) по нажатию загорается диод при отпускании затухает. A = RB2, S = RB3, D = RB4, F = RB5. И тут косяк, нажимаю клавишу S диод моргает, нажимаю клавишу A загорается и не затухает при отпускании, остальные работают как надо. После этого я прошил программкой: #include <pic.h> void main(void) { __CONFIG(0x3FBA); TRISB = 0; //все на выход RB3 = 1; } Результат, диод моргает.
Если это устраивает, хорошо. Если делать правильно, то прими совет любителя: 1. Вынеси Config из основного цикла. Эта команда выполняется 1 раз после включения питания. Аналогично и команда "все на выход", если не меняется направление сигналов в процессе выполнения программы. Со значением конфигурации нормально. 2.Прямое обращение к портам PIC выполняется принципом ЧТЕНИЕ-МОДИФИКАЦИЯ-ЗАПИСЬ. Хоть в АСМ, хоть в Си. Один раз разберись с этим и учитывай. 3. Предыдущий фрагмент выглядит странно. Со скоростью тактов в 10 МГц крутятся 3 команды в фигурных скобках, две из них тылдычат одно и то-же, последняя (так понимаю) пытается быстро что-то изменить в RB через чтение-модификацию-запись.. 4. Попробуй написать обращение к разряду порта через переменную, как я предложил, не забудь про задержки. Проверишь и МК и программатор. Не работаю в MPLAB, для своих поделок использую FlowCode for PIC. Там многое проще, но Си - она и в Африке.
Вод код который я заливал для проверки Результат RB3 - моргает, а RB2 - потухший.
Твоя мигалка работает, но дело не в этом RB3 моргает со скважностью 1 сек. т.е. если на выходе высокий потенциал находится более 1 сек. тогда он начинает моргать, а если его программно выключать раньше то с первого взгляда все работает как надо.
Думаю, что программатор и МК у тебя в порядке. Не умею вставить сюда проект мигалки на MPLAB и PROTEUS/ Вот текст программы, что у меня мигает на симуляке. #include <pic.h> #define _XTAL_FREQ 10000000 // Частота 10 МГц
// Config: __CONFIG(0x3FBA);
unsigned long counter; //для задержки void main() { TRISB = 0x00; // Порт В на выход PORTB = 0x00; // Выключаем все выходы порта В //запускаем бесконечный цикл while(1) { PORTB = 0x00;//или RB1=0; для одного вывода RB1 -22 нога //Задержка на 10000 циклов for(counter = 0; counter < 10000; counter++); PORTB = 0x0F;//или RB1=1; для одного вывода RB1 -22 нога //Задержка на 10000 циклов for(counter = 0; counter < 10000; counter++); } } //конец майн Можешь менять номер ноги в команде RB№ или менять код для значения порта в команде для младших 4-х разрядов PORTB=0x0(cod); Может вывод ловит помеху? Чтение-модификация-запись. Введи задержку после подачи питания на МК, подтяни RB регистр, емкость поставь по питанию на выводы. Удачи.
Все даты в формате GMT
3 час. Хитов сегодня: 22
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет