Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/65: Рейтинг темы: голосов - 65, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 5
1

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте!

Пишу первую программу на С для 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 по словам клиента машинку после окончания стирки...

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

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

Симуляция логики в Proteus
Столкнулся со странной особеностью симуляторов схем (Proteus, EveryCircuit). Транзисторы, катушки,...

GTX 1080 (горят не все светодиоды)
Имеем GeForce® GTX 1080 Xtreme Gaming. RGB подсветка все дела. Так вот два светодиода не горят!...

10
10231 / 6609 / 498
Регистрация: 28.12.2010
Сообщений: 21,156
Записей в блоге: 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
317 / 268 / 61
Регистрация: 12.10.2011
Сообщений: 434
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
317 / 268 / 61
Регистрация: 12.10.2011
Сообщений: 434
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
317 / 268 / 61
Регистрация: 12.10.2011
Сообщений: 434
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
Значит у вас ошибка в схеме - сравнивайте
Миниатюры
PIC16F84A. Симуляция в Proteus, не горят светодиоды на модели  
3
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 5
19.10.2012, 14:27  [ТС] 9
Спасибо большое за поддержку! У меня схема практически такая же, резисторы правда на 330 Ом на светодиоды. А на подтягивающий на кнопку - 11 кОм. Но по идее должна работать, может в коде что то не установил. Вобщем вечером еще поковыряюсь, может Proteus переустановить... Вобще мысли всякие, буду пробывать.
0
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
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 строку с данными. Но вместо этого...

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

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

Материнская плата P4SPD - светодиоды горят, а Биос не загружается
Здравствуйте. 3 дня назад купил материнскую плату P4SPD со встроенной видеокартой. Ну короче...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru