Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/48: Рейтинг темы: голосов - 48, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 5
1

PIC16F84A. Симуляция в Proteus, не горят светодиоды на модели

16.10.2012, 21:48. Показов 9858. Ответов 10
Метки нет (Все метки)

Здравствуйте!

Пишу первую программу на С для PIC, но при моделировании на Proteus 7 не работает моя модель. Для обучения взял PIC16F84A. Суть модели - к выводам RA1 и RA2 подключил свтодиоды через резисторы соответственно на землю. Вывод RA0 завел на кнопку и далее на землю.
Цель работы - сделать так, что бы при нажатой кнопке светился диод , подключенный к RA2, а RA1 не горел, соответственно при отжатой кнопки - диод с RA1 светился, а с RA2-нет.
По схеме подключен кварц 4МГц.

Во вкладке Configure выставил Configuration bits в таком соответствии:

XT Oscillator - включен;
WTD - включен;
Power-Up timer - выключен;
Code protection - выключен.

Написал такую программу:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <pic.h>
 
void main (void)
{
 
  TRISA=0b10000010;
  TRISB=0b00000000;
  PORTA=0;
  PORTB=0;
 
while(1)
 {
   if (RA0=1)
    {
     RA1=0;
     RA2=1;
    }
else
 {
     RA1=1;
     RA2=0;
 }
}
}
Программа компилируется успешно, а светодиоды в Proteus на модели не горят вообще.
Уверен, сделал неправильно ряд моментов, прежде всего что-то не то с управлением уровней на портах, подскажите пожалуйста, как правильно сделать управление портами в таком случае. Вероятно и еще где то что то не так сделал, буду признателен за объективную критику.
Прошу не сильно "пинать ногами", ибо мое первое "творение".
Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.10.2012, 21:48
Ответы с готовыми решениями:

СМА ARISTON AQSL 85 CSI HA 080510580000 после подачи напряжения горят все светодиоды и не реагирует ни на одну кнопку, На блоке управления горят все светодиоды и не реагирует на кнопки
СМА ARISTON AQSL 85 CSI HA S/N 080510580000 по словам клиента машинку после окончания стирки...

Горят невключенные светодиоды c STM32
Почему-то горят LED0, LED2. Причем по разному в зависимости от текущих действий. После выполнения...

Симуляция в proteus
У меня есть программа, написанная на ассемблере, и я хочу проверить правильность ее работы, но с...

Не горят светодиоды в ноуте Sony svf 152c29v
Всем добрый вечер! Имеется ноутбук Sony SVF 152c29v. Вобшем проблема такая. Не подает признаков...

10
10214 / 6595 / 495
Регистрация: 28.12.2010
Сообщений: 21,164
Записей в блоге: 1
16.10.2012, 22:55 2
...вам пригодится сие "Сборник (ver1.0) русский Help & Manual Proteus".
1
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 5
16.10.2012, 23:04  [ТС] 3
Спасибо, обязательно скачаю данный материал и буду изучать.
У меня еще сомнения по моему коду, можно ли управлять уровнями как сделал я, RA1=1 например?
Вообще какие типовые ошибки в моем коде? Очень нуждаюсь в конструктивной критике, так как только начал изучать.
0
309 / 263 / 58
Регистрация: 12.10.2011
Сообщений: 424
17.10.2012, 11:24 4
C
1
   if (RA0=1)
Ошибка(вне зависимости от RA0 всегда будет выполняться то, что после if), правильно:
C
1
if(RA0==1)// или if(RA0)

Не по теме:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
int main()
{
   int x=0;
   if(x=10)
   {   
      printf("1:  %d",x);
   }
   else
   {
      printf("2:  %d",x);
   }
   return 0;
}
Результат:
C
1
1:  10
Т.е. выполнилось то, что после if, и изменилось значение x.



-----------------------------------------------------------------------

C
1
TRISA=0b10000010;
У вас вроде RA0 - in; RA1,RA2 - out, т.е. TRISA=0b10000001;

-----------------------------------------------------------------------

Ну и раз включен WDT, то настройте его (регистр OPTION_REG) и вставьте, где-нибудь
Assembler
1
clrwdt
1
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 5
18.10.2012, 12:49  [ТС] 5
Изменил TRISA=0b10000001

WDT отключил в Configuration Bits, перекомпиллировал. МК все равно не работает. Питание на МК есть, на RA0, RA1, RA2 - НЛУ, при замыкании кнопки (подключена к RA0), ничего не происходит, на RA0 в любом положении ноль.Всю голову сломал, в чем же может быть проблема. Я так понимаю, прописывать строку _CONFIGxxxxxx не обязательно, если установить значения в Configuration Bits в MPLAB и снять галочку "прописать в коде". Даже не знаю, в чем может быть подвох, может МК уже не совсем исправный
0
309 / 263 / 58
Регистрация: 12.10.2011
Сообщений: 424
18.10.2012, 17:14 6

Не по теме:

Т.е. уже не Proteus, а проверка на камне??? Тогда схему подключения.


Выложите исправленный код, еще лучше asm-listing.(МК - точно PIC16F84A? Или более поздние версии PIC-ов? Если МК, к примеру, PIC16f6xx, то к PORTA уже подключены компараторы, и, по умолчанию, эти порты аналоговые).

Я так понимаю, прописывать строку _CONFIGxxxxxx не обязательно, если установить значения в Configuration Bits в MPLAB и снять галочку "прописать в коде".
Не обязательно.

Не по теме:

но если вам надо прошить несколько МК с чужого компьютера, где не установлен MPLAB, спустя какое-то время после написания программы(а, точнее, "забывания" программы, т.к. обычно подобных программ несколько), то, по-моему, лучше прописать строку _CONFIGxxxxxx один раз, чем потом постоянно кликать мышкой.:)

2
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 5
19.10.2012, 08:15  [ТС] 7
Здравствуйте!

Спасибо за ответы.
МК точно PIC16F84A.

Вот листинг:

Кликните здесь для просмотра всего текста
--- C:\Program Files\Microchip\Project\test2\test2.c -------------------------------------------
1: #include <pic.h>
2:
3: void main (void)
4: {
5:
6: TRISA=0b10001;
3F1 3011 MOVLW 0x11
3F2 1683 BSF 0x3, 0x5
3F3 0085 MOVWF 0x5
7: TRISB=0b00000000;
3F4 0186 CLRF 0x6
8: PORTA=0;
3F5 1283 BCF 0x3, 0x5
3F6 0185 CLRF 0x5
9: PORTB=0;
3F7 0186 CLRF 0x6
10:
11: while(1)
3FF 2BF8 GOTO 0x3f8
12: {
13: if (RA0==1)
3F8 1C05 BTFSS 0x5, 0
3F9 2BFD GOTO 0x3fd
14: {
15: RA1=0;
3FA 1085 BCF 0x5, 0x1
16: RA2=1;
3FB 1505 BSF 0x5, 0x2
17: }
3FC 2BF8 GOTO 0x3f8
18: else
19: {
20: RA1=1;
3FD 1485 BSF 0x5, 0x1
21: RA2=0;
3FE 1105 BCF 0x5, 0x2


А вот текст программы:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <pic.h>
 
void main (void)
{
 
  TRISA=0b10001;
  TRISB=0b00000000;
  PORTA=0;
  PORTB=0;
 
while(1)
 {
   if (RA0==1)
    {
     RA1=0;
     RA2=1;
    }
else
 {
     RA1=1;
     RA2=0;
 }
}
}
У этого ПИКа 5 регистров RA и 8 регистров RB.

Добавлено через 10 часов 35 минут
Программа в Proteus вроде бы начинает выполняться, но судя по тому, что происходит одно переключение при нажатии кнопки, цикл не выполняется, то есть один раз ножки переключились и всё. Интересно, почему так?
0
309 / 263 / 58
Регистрация: 12.10.2011
Сообщений: 424
19.10.2012, 13:06 8
Должно работать, проверял этой программой(отличие только в начале программы - вставил clrf PORTA,clrf PORTB, рекомендуется Microchip перед настройкой TRIS-ов, но для Proteus это не имеет значения):
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    LIST P=16F84a       ;directive to define processor
    #include <p16F84a.INC;processor specific variable definitions
    __CONFIG(_XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF )
    ORG 0x00
    goto m1
m1:
    CLRF PORTA
    CLRF PORTB
    MOVLW 0x11
    BSF STATUS, RP0
    movwf TRISA
    CLRF TRISB
    BCF STATUS, RP0
    CLRF PORTA
    CLRF PORTB
m2:
    BTFSS PORTA, 0
    GOTO m3
    BCF PORTA, 1
    BSF PORTA, 2
    GOTO m2
m3:
    BSF PORTA, 1
    BCF PORTA, 2
    GOTO m2
    END
Значит у вас ошибка в схеме - сравнивайте
3
Миниатюры
PIC16F84A. Симуляция в Proteus, не горят светодиоды на модели  
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 5
19.10.2012, 14:27  [ТС] 9
Спасибо большое за поддержку! У меня схема практически такая же, резисторы правда на 330 Ом на светодиоды. А на подтягивающий на кнопку - 11 кОм. Но по идее должна работать, может в коде что то не установил. Вобщем вечером еще поковыряюсь, может Proteus переустановить... Вобще мысли всякие, буду пробывать.
0
183 / 115 / 4
Регистрация: 23.01.2010
Сообщений: 1,319
02.11.2015, 21:11 10
Цитата Сообщение от sagrig Посмотреть сообщение
Спасибо большое за поддержку! У меня схема практически такая же, резисторы правда на 330 Ом на светодиоды. А на подтягивающий на кнопку - 11 кОм. Но по идее должна работать, может в коде что то не установил. Вобщем вечером еще поковыряюсь, может Proteus переустановить... Вобще мысли всякие, буду пробывать.

Действительно схема не работает в proteus 7, код откомпелирован для PIC в MPLAB 8.92

Добавлено через 2 минуты
Цитата Сообщение от golatin Посмотреть сообщение
Значит у вас ошибка в схеме - сравнивайте
я поставил на 360 ом пробуйте
0
pyzhman
03.11.2015, 18:53     PIC16F84A. Симуляция в Proteus, не горят светодиоды на модели
  #11

Не по теме:

3 года. И тут на тебе - пробуйте. А человек-то мается поди.

0
03.11.2015, 18:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2015, 18:53
Привет! Вот еще темы с ответами:

ATtiny2313 + UART + симуляция в Proteus
Приветствую. Прошу помочь с локализацией проблемы отладки проекта. Проект такой: управление...

Симуляция Attiny 25/45/85 в PROTEUS "РЕШЕНО"
Коллеги, вот код, который просто обязан выдавать меиндр c частотой 62.5 Гц на PB0 Attiny 25/45/85...

Atmega16 и симуляция USART в proteus
Отлаживаю программу в Proteus. Она должна вываливать в USORT строку с данными. Но вместо этого...

СМА Indesit wil85, Evo-2, горят все светодиоды
СМА Indesit wil85, Evo-2 при включении в розетку горят все светодиоды. Изначально машинка не...

Proteus. Симуляция и управление двигателем на МК Atmega
Добрый день !!! Нужно собрать схему в PROTEUS для управления трехфазным двигателем (переменного...

Acer 5738z, не включается, но светодиоды горят, стоит ли пробовать чинить?
ноут не включается, но, вроде как, подает признаки жизни(лампочки по корпусу все же горят)....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.