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

PIC16F84A - Proteus vs Реальность

Добавлено: Сб апр 12, 2025 16:41:57
Denis-1307
Всем доброго времени суток.
Решил я тут начать изучать программирование микроконтроллеров PIC и вот с какой проблемой столкнулся.
Написал простейшую мигалку светодиодом для PIC16F84A (есть небольшой опыт в программировании AVR). В протеусе все прекрасно работает, а вот на реальном железе либо не работает вообще, либо светодиод моргает раз в несколько секунд.
Помогите разобраться, что я делаю не так.

Вот код программы. Среда разработки - MPLAB X IDE, компилятор - XC8, программатор - PicKit 3

Код: Выделить всё

/* PIC16F84A
 * Config bits: 3FF1
 * File:   main.c
 * Author: Denis
 * Project: Blink
 * Created on 12.04.2025 */
#include <xc.h>

#define _XTAL_FREQ 4000000

#pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF       // Watchdog Timer (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (Power-up Timer is enabled)
#pragma config CP = OFF         // Code Protection bit (Code protection disabled)

void main(void) 
{
    TRISB &= ~(1<<2); //пин RB2 режим работы - выход
    PORTB &= ~(1<<2); //0 В на пине RB2
    while(1)
    {
        __delay_ms(500); //ждем 0,5 сек
        PORTB ^= (1<<2); //инвертируем значение на пине RB2
    }
    return;
}
Всем спасибо за оказанную помощь.

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Сб апр 12, 2025 17:46:43
Zikon
1. А где задан чип в исходнике (#define) ? // ой, да там при компиляции подставляется
2. Лучше бы взял pic16f628a или pic16f690, и то это только для тренировки.

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Сб апр 12, 2025 17:53:16
Denis-1307
[uquote="Zikon",url="/forum/viewtopic.php?p=4704466#p4704466"]1. А где задан чип в исходнике (#define) ?[/uquote]
А разве MPLAB IDE этого не делает когда создаешь проект? Там ведь указывается тип контроллера для которого пишется прошивка.
Если MPLAB этого не делает, то тогда это записывается так?
#define <16F84A.h>
Если не прав, поправьте.

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Сб апр 12, 2025 17:53:40
Уош
Покажите схему реального железа.

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Сб апр 12, 2025 17:56:10
Denis-1307
[uquote="Уош",url="/forum/viewtopic.php?p=4704469#p4704469"]Покажите схему реального железа.[/uquote]
Сейчас не могу, все на работе осталось. В понедельник покажу :))

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Сб апр 12, 2025 20:09:23
OKF
Да, есть такая проблемка с Протеусом. Не всё на 100% эмулирует.(
А зачем return? Это к делу не относится.)

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Сб апр 12, 2025 21:20:30
valentinovich
Denis-1307, вот -
https://микроник.рус/pic16f84a-migaem-svetodiodom/
Да и вообще - данный сайт молча ответит на множество подобных (как у ТС и не только) вопросов. Изображение

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Сб апр 12, 2025 22:34:33
Asmodey
Denis-1307, данные в порты записывайте через регистры-защелки latch, а не напрямую в порт.

Время выполнения кода смотрите в между точками останова в MPLAB, а не в Протеусе.

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Сб апр 12, 2025 22:43:25
КРАМ
[uquote="Denis-1307",url="/forum/viewtopic.php?p=4704472#p4704472"]В понедельник покажу :))[/uquote]
Вы кварц с керамикой на МК, надеюсь, повесили? :)
Изображение

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Сб апр 12, 2025 23:03:39
Уош
Asmodey, а у этого пика нет регистра-защёлки (я тоже сначала об этом подумал)

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Сб апр 12, 2025 23:07:38
КРАМ
[uquote="Уош",url="/forum/viewtopic.php?p=4704563#p4704563"]я тоже сначала об этом подумал[/uquote]
Он пишет в единственный пин. Поэтому предупреждение неактуально. Проблемы RMW для единственного пина не существует. Проблема возникает при перекрестной побитной модификации.

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Сб апр 12, 2025 23:13:40
Уош
Да, уже забываю об этом, спасибо!

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Вс апр 13, 2025 02:06:08
Asmodey
[uquote="Уош",url="/forum/viewtopic.php?p=4704563#p4704563"]Asmodey, а у этого пика нет регистра-защёлки[/uquote]Тем хуже для него. Придется искать причину в какойнить метафизической области. Положим, в отсутствующих блокирующих конденсаторах по питанию.

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Вс апр 13, 2025 02:38:16
Уош
Вот потому я и предложил показать схему. Я грешил на плавающий сброс, КРАМ на кварц, и вот теперь конденсаторы питания... Три мнения об обвязке. Вероятность повышается.

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Вс апр 13, 2025 07:55:05
Zikon
А если не читать с порта а хранить в переменной текущее записанное значение? Что-то изменится?

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Вс апр 13, 2025 10:14:51
КРАМ
Замените xor на прямой вывод в порт, а xor делайте с переменной в ОЗУ и значение этой переменной выводите в порт.
Но если пин порта у вас не нагружен, то вероятность бага связанного с RMW будет стремится к нулю.
ЗЫ. Есть смутное подозрение, что светодиод у вас висит на пине без балласта... и в этом вся проблема. Тогда RMW в полный рост.
:facepalm:

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Вс апр 13, 2025 12:21:28
Asmodey
[uquote="Уош",url="/forum/viewtopic.php?p=4704590#p4704590"]Я грешил на плавающий сброс, КРАМ на кварц, и вот теперь конденсаторы питания...[/uquote]К слову, без конденсаторов по питанию может и по цепям сброса рандомно помеха пробегать. Два в одном.

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Вс апр 13, 2025 13:29:32
Denis-1307
[uquote="КРАМ",url="/forum/viewtopic.php?p=4704559#p4704559"][uquote="Denis-1307",url="/forum/viewtopic.php?p=4704472#p4704472"]В понедельник покажу :))[/uquote]
Вы кварц с керамикой на МК, надеюсь, повесили? :)
Изображение[/uquote]
Да, кварц с керамикой на 22 пФ.
Единственное что не делал, так это конденсаторы по питанию. Возможно в них проблема, но проверить смогу только завтра.
Как проверю отпишусь.
Спасибо за советы.

Добавлено after 3 minutes 16 seconds:
[uquote="КРАМ",url="/forum/viewtopic.php?p=4704667#p4704667"]Замените xor на прямой вывод в порт, а xor делайте с переменной в ОЗУ и значение этой переменной выводите в порт.
Но если пин порта у вас не нагружен, то вероятность бага связанного с RMW будет стремится к нулю.
ЗЫ. Есть смутное подозрение, что светодиод у вас висит на пине без балласта... и в этом вся проблема. Тогда RMW в полный рост.
:facepalm:[/uquote]
Светодиод подключён через резистор 220 Ом

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Пн апр 14, 2025 10:31:38
Denis-1307
[uquote="Уош",url="/forum/viewtopic.php?p=4704469#p4704469"]Покажите схему реального железа.[/uquote]

Схема вообще не подает признаков жизни.

Re: PIC16F84A - Proteus vs Реальность

Добавлено: Пн апр 14, 2025 11:03:25
veso74
Какая надпись на конденсаторах к кварцу? Какая надпись на кварцевом резонаторе? Установите хотя бы один фильтрующий конденсатор. Подключите подтягивающий резистор MCLR к VDD.