АвторСообщение



Пост N: 1
Зарегистрирован: 28.09.16
Рейтинг: 0
ссылка на сообщение  Отправлено: 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 но не знаю как его сбросить.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 11 [только новые]


постоянный участник


Пост N: 439
Зарегистрирован: 25.09.09
Откуда: г.Саратов
Рейтинг: 2
ссылка на сообщение  Отправлено: 29.09.16 08:23. Заголовок: Какой МК?


"после прошивки в реальный PIC, RB2 моргает"
"Моргать" может что-то по программе или плохом контакте. Судя по фрагменту - просто загорятся светики, если они там есть.
В сообщении не указана марка МК, разряд вкл/откл низковольтного программирования в слове конфигурации можно
смотреть по документации на конкретный МК. Например:для p16f88 он 07.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2
Зарегистрирован: 28.09.16
Рейтинг: 0
ссылка на сообщение  Отправлено: 29.09.16 08:53. Заголовок: PIC 16F76 снят с уст..


PIC 16F76 снят с устройства (не новый).

Просто если RB3=1 то моргает, а RB3=0 нет.
RB3 взводится в 1 и нельзя опустить, команда RB3=0 не помогает.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3
Зарегистрирован: 28.09.16
Рейтинг: 0
ссылка на сообщение  Отправлено: 29.09.16 09:02. Заголовок: RB3 моргает 1 раз в ..


RB3 моргает 1 раз в секунду.
RB2 горит немного тусклее наверное высокая частота.

в предыдущем письме ошибся RB2 взводится и не опускается.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 4
Зарегистрирован: 28.09.16
Рейтинг: 0
ссылка на сообщение  Отправлено: 29.09.16 09:07. Заголовок: Может по коду подска..


Может по коду подскажите
void main(void)
{
__CONFIG(0x3f3a);//3FBA //3f3a

PORTA = 0x00;
ADCON1=0x06;
TRISA = 0b00000000; //Выход

PORTB = 0x00;
TRISB = 0b00000011; //RB0,RB1 на вход остальные на выход

TRISC = 0b11111111; //Вход

INTCON = 0b10010000;
//RBPU = 1;
INTEDG = 0;

while(1)
{
}
}

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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; и опять посылаю её в порт (гашу) и та- же задержка.Основной цикл закончился.
Это проверяю в симуляторе и железе.
БУ контроллер может изначально быть прошитым с защитой, тогда его не прочитаешь. Но - стираться он должен, так мне кажется.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 5
Зарегистрирован: 28.09.16
Рейтинг: 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;
}
Результат, диод моргает.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 441
Зарегистрирован: 25.09.09
Откуда: г.Саратов
Рейтинг: 2
ссылка на сообщение  Отправлено: 29.09.16 18:18. Заголовок: pvg_79 пишет: Резул..


pvg_79 пишет:

 цитата:
Результат, диод моргает.


Если это устраивает, хорошо. Если делать правильно, то прими совет любителя:
1. Вынеси Config из основного цикла. Эта команда выполняется 1 раз после включения питания.
Аналогично и команда "все на выход", если не меняется направление сигналов в процессе выполнения программы. Со значением конфигурации нормально.
2.Прямое обращение к портам PIC выполняется принципом ЧТЕНИЕ-МОДИФИКАЦИЯ-ЗАПИСЬ.
Хоть в АСМ, хоть в Си. Один раз разберись с этим и учитывай.
3. Предыдущий фрагмент выглядит странно. Со скоростью тактов в 10 МГц крутятся 3 команды в фигурных скобках, две из них тылдычат одно и то-же, последняя (так понимаю) пытается быстро что-то изменить в RB через чтение-модификацию-запись..
4. Попробуй написать обращение к разряду порта через переменную, как я предложил, не забудь про задержки. Проверишь и МК и программатор.
Не работаю в MPLAB, для своих поделок использую FlowCode for PIC. Там многое проще, но Си - она и в Африке.






Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 442
Зарегистрирован: 25.09.09
Откуда: г.Саратов
Рейтинг: 2
ссылка на сообщение  Отправлено: 30.09.16 08:40. Заголовок: Вот текстовый вариан..


Вот текстовый вариант hex файла мигалки по выводам с RB0 до RB3 для твоего МК. Должно работать. Не умею здесь вставлять что другое, извини. Удачи.

:02000000432893
:08000800FF00030E8312031335
:10001000B4000A0EB500040EB6008A110A126C284C
:10002000C308031D14280800F93000000000000078
:10003000000000000000FF3E031D15280000000026
:1000400000000000000000000000C30B142808009E
:100050000730831603139F00C0308100FF308312E6
:10006000C20083168601831242088600FA30C3005C
:100070001020C20183168601831242088600FA30DE
:10008000C30010202E28D53083120313A000C430E3
:10009000A100BB30A200DC30A300A401A501A60191
:1000A000A701A801A901AA01AB01AC01AD01AE01F4
:1000B000AF01BC01BD01B701B801BE01BF01C00164
:1000C000C101B001B101B201B301BA01BB01B90173
:1000D000C2018A110A12282883120313360E8400E3
:0E00E000350E8A00340E8300FF0E7F0E0900DD
:02400E00BA3FB7
:00000001FF

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 6
Зарегистрирован: 28.09.16
Рейтинг: 0
ссылка на сообщение  Отправлено: 30.09.16 09:59. Заголовок: #include <pic.h&..


#include <pic.h>
void main(void)
{
__CONFIG(0x3FBA);
TRISB = 0; //все на выход
PORTB = 0;
RB3 = 1;
RB2 = 1;
RB2 = 0;
while(1)
{}
}

Вод код который я заливал для проверки
Результат RB3 - моргает, а RB2 - потухший.

Твоя мигалка работает, но дело не в этом
RB3 моргает со скважностью 1 сек. т.е. если на выходе высокий потенциал находится более 1 сек.
тогда он начинает моргать, а если его программно выключать раньше то с первого взгляда все работает как надо.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 443
Зарегистрирован: 25.09.09
Откуда: г.Саратов
Рейтинг: 2
ссылка на сообщение  Отправлено: 30.09.16 17:17. Заголовок: pvg_79 пишет: Твоя ..


pvg_79 пишет:

 цитата:
Твоя мигалка работает


Думаю, что программатор и МК у тебя в порядке.
Не умею вставить сюда проект мигалки на 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 регистр, емкость поставь по питанию на выводы.
Удачи.


Спасибо: 1 
ПрофильЦитата Ответить



Пост N: 7
Зарегистрирован: 28.09.16
Рейтинг: 0
ссылка на сообщение  Отправлено: 06.10.16 13:11. Заголовок: Спасибо, разобрался...


Спасибо, разобрался.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 22
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия