Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 17.06.2019, 14:12  
Exivor
Прохожий
 
Регистрация: 22.05.2019
Сообщений: 5
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Exivor на пути к лучшему
По умолчанию Непонятное поведение pic16f1823

Добрый день.
Нужна помощь новичку разобраться с поведением контроллера.
Написал простую программу с 4 режимами мигания светодиодами.
Каждый режим крутится 5 циклов, а потом следующий.
Компиляция в MPLAB + XC8.
В Proteus все работает.
Собрал на макетке и картина следующая:
Сначала все работало нормально.
Потом в какой-то момент после первого цикла программы 2 (prog2) начал возвращается в программу 1.
Позднее снова заработало и через 2 часа экспериментов снова перестало.

Питал макетку от PICkit2. Им же и прошивал.
Менял источник питания, но и это не помогло.

Буду благодарен если подскажете, где искать причины такого поведения.

Код:


// PIC16F1823 Configuration Bit Settings

// 'C' source line config statements

// CONFIG1
#pragma config FOSC = INTOSC    // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF       // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable (PWRT enabled)
#pragma config MCLRE = OFF      // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF         // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = OFF      // Brown-out Reset Enable (Brown-out Reset disabled)
#pragma config CLKOUTEN = OFF   // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = ON        // Internal/External Switchover (Internal/External Switchover mode is enabled)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)

// CONFIG2
#pragma config WRT = OFF        // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = ON       // PLL Enable (4x PLL enabled)
#pragma config STVREN = ON      // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = ON         // Low-Voltage Programming Enable (Low-voltage programming enabled)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include ‹xc.h›
#define _XTAL_FREQ 500000
#define ti 100              // Длительность delay

void de(int ms){            // Функция delay
   for(;ms;ms--)
      __delay_ms(1);
}
void prog1 () {
    unsigned char temp;
    temp = 0x01;
    PORTC = temp;
    de(ti);
    temp = 0x03;
    while (temp != 0) {
      PORTC=temp;
      temp = temp ‹‹ 1; 
      de(ti);
    }
    PORTC =0;
}
void prog2 () {
    PORTC = 0;
    PORTC = 0x01;
    de(ti); de(ti);
    PORTC = 0x03;
    de(ti); de(ti);
    PORTC = 0x07;
    de(ti); de(ti);
    de(ti); de(ti);
    de(ti); de(ti);
    de(ti); de(ti);
    de(ti); de(ti);
    de(ti); de(ti);
    de(ti); de(ti);
    PORTC = 0x0f;
    de(ti); de(ti);
    PORTC = 0x1f;
    de(ti); de(ti);
    PORTC = 0x3f;
    de(ti); de(ti);
    PORTC =0;
}

void prog3 () {
    PORTC = 0x3f;
    de(ti); de(ti);
    PORTC = 0;
    de(ti); de(ti);
    PORTC =0;
    }
void prog4 () {
    PORTC = 0x21;
    de(ti); de(ti);
    PORTC = 0x33;
    de(ti); de(ti);
    PORTC = 0x3f;
    de(ti); de(ti);
    PORTC =0;
}

void main(void) {
  TRISC = 0x00;
  PORTC = 0x00;
  int pr = 1;
  int cikl = 1;
  while (1) {
      switch (pr) {
          case 1:
            prog1();
            cikl=cikl+1;
            break;
          
          case 2:               // После первого цикла этого кейса
              prog2();          // идет сброс и программа переходит 
              cikl=cikl+1;      // снова в case 1.
              break;
          case 3:
              prog3();
              cikl=cikl+1;
              break;
          case 4:
              prog4();
              cikl=cikl+1;
              break;
          
      }
      if ( cikl›5 ) {
          cikl = 1;
          
          if ( pr == 4 ) { pr = 1; }
          else { pr=pr+1; } 
      }
      de(100);
  }
    return;
}
Реклама:
Exivor вне форума  
Непрочитано 17.06.2019, 17:10  
andron007
Прописка
 
Регистрация: 19.02.2008
Адрес: г. Иркутск
Сообщений: 277
Сказал спасибо: 218
Сказали Спасибо 170 раз(а) в 79 сообщении(ях)
andron007 на пути к лучшему
По умолчанию Re: Непонятное поведение pic16f1823

Может наводки? Все незадействованные порты нужно настроить на вывод или подключить к питанию Vdd или GND.
andron007 вне форума  
Сказали "Спасибо" andron007
Exivor (17.06.2019)
Непрочитано 17.06.2019, 17:19  
Exivor
Прохожий
 
Регистрация: 22.05.2019
Сообщений: 5
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Exivor на пути к лучшему
По умолчанию Re: Непонятное поведение pic16f1823

Сообщение от andron007 Посмотреть сообщение
Может наводки? Все незадействованные порты нужно настроить на вывод или подключить к питанию Vdd или GND.
Спасибо вечером попробую!
И вообще учту это на будущее!

Есть ещё подозрение, что такой эффект может давать отсутствие блокировочного конденсатора в цепи питания МК.

Вечером попробую и отпишусь.
Exivor вне форума  
Непрочитано 17.06.2019, 18:19  
hfm308
Частый гость
 
Регистрация: 16.06.2008
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
hfm308 на пути к лучшему
По умолчанию Re: Непонятное поведение pic16f1823

Куда return из main ?
hfm308 вне форума  
Непрочитано 17.06.2019, 18:36  
Exivor
Прохожий
 
Регистрация: 22.05.2019
Сообщений: 5
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Exivor на пути к лучшему
По умолчанию Re: Непонятное поведение pic16f1823

Сообщение от hfm308 Посмотреть сообщение
Куда return из main ?
Никуда.
Я только учусь. И в одном учебнике было написано, что его лучше оставлять. Да и MPLAB его создает.
А так я его оставил для дальнейшего использования...
Но до него дело все равно никогда не доходит.
Режимы крутятся в бесконечном цикле.
Exivor вне форума  
Непрочитано 17.06.2019, 19:04  
Yuri222
Почётный гражданин KAZUS.RU
 
Регистрация: 08.02.2005
Адрес: Минск, Беларусь
Сообщений: 8,036
Сказал спасибо: 2,774
Сказали Спасибо 2,724 раз(а) в 2,014 сообщении(ях)
Yuri222 на пути к лучшему
По умолчанию Re: Непонятное поведение pic16f1823

Сообщение от Exivor Посмотреть сообщение
подозрение, что такой эффект может давать отсутствие блокировочного конденсатора в цепи питания МК
без таких конденсаторов твориться может что угодно.
А что там сейчас стоит по питанию, какой длины провода?
Yuri222 вне форума  
Непрочитано 17.06.2019, 19:23  
Exivor
Прохожий
 
Регистрация: 22.05.2019
Сообщений: 5
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Exivor на пути к лучшему
По умолчанию Re: Непонятное поведение pic16f1823

Сообщение от Yuri222 Посмотреть сообщение
без таких конденсаторов твориться может что угодно.
А что там сейчас стоит по питанию, какой длины провода?
Пробовал запитывать от PICkit2 и литиевого аккумулятора на 3.7 В.
Провода 10 см. При таком подключении ничего...

Ещё пробовал от адаптера 220в на 5В. На выходе адаптера фильтр стоит, но характеристик его и из чего состоит сейчас не могу сказать. Провод в этом случае 60см.

Поведение всегда одинаковое.
Exivor вне форума  
Непрочитано 17.06.2019, 20:05  
mimuh64
Прописка
 
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
mimuh64 на пути к лучшему
По умолчанию Re: Непонятное поведение pic16f1823

В этой строке #pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming enabled)
Установи LVP=OFF
mimuh64 вне форума  
Сказали "Спасибо" mimuh64
pt200 (20.06.2019)
Непрочитано 17.06.2019, 22:29  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,380
Сказал спасибо: 1,961
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Непонятное поведение pic16f1823

При старте программы - перед вечным while - сделать на секунду какое-то отличное от рабочего мигание, индицирующее старт. Тогда сразу четко отловится ситуация сброса.

Не знаю как в ПИКах, в АВРках например есть регистр, где можно узнать причину сброса (питание, WDT и т.д). Отобразить его как-то в этом же стартовом мигании. Причина и найдется.

Кстати, а резисторы на светодиоды какие?

И керамические конденсаторы "прям промеж ног" питательных - ОБЯЗАТЕЛЬНО!
__________________
[ жизнь приятна и красива, если выпить литр пива ]

Последний раз редактировалось nml; 18.06.2019 в 10:18.
nml вне форума  
Сказали "Спасибо" nml
Exivor (18.06.2019)
Непрочитано 18.06.2019, 11:51  
Exivor
Прохожий
 
Регистрация: 22.05.2019
Сообщений: 5
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Exivor на пути к лучшему
По умолчанию Re: Непонятное поведение pic16f1823

Проблема действительно была из-за отсутствия конденсатора.
Всем спасибо!

Сообщение от mimuh64 Посмотреть сообщение
В этой строке #pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming enabled)
Установи LVP=OFF
Сообщение от nml Посмотреть сообщение
При старте программы - перед вечным while - сделать на секунду какое-то отличное от рабочего мигание, индицирующее старт. Тогда сразу четко отловится ситуация сброса.

Не знаю как в ПИКах, в АВРках например есть регистр, где можно узнать причину сброса (питание, WDT и т.д). Отобразить его как-то в этом же стартовом мигании. Причина и найдется.

Кстати, а резисторы на светодиоды какие?

И керамические конденсаторы "прям промеж ног" питательных - ОБЯЗАТЕЛЬНО!
Спасибо за идеи! Учту на будущее!

Резисторы на 470ом.
Потом как будет время обязательно попробую идентифицировать проблему. Проверю на предмет провала по питанию и последующего сброса.
Exivor вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чем шить pic16f1823 и подобные... alex6002 PIC 37 26.09.2015 11:06
Непонятное поведение импульсного БП S_Paul Источники питания и свет 124 04.09.2015 18:50
Непонятное с экраном от Нокии_3310 Faworit Микроконтроллеры, АЦП, память и т.д 3 01.07.2013 13:05
Непонятное прерывание stm32 sosedi ARM 17 20.02.2013 22:38
непонятное в LCD zippoge Микроконтроллеры, АЦП, память и т.д 8 20.06.2009 19:03


Часовой пояс GMT +4, время: 06:26.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot