Jump to content
A-l-e-x-u-s

Sleep+10F200=Проблема

Recommended Posts

Доброго времени суток!

Всю жизнь работал исключительно с AVR, но тут возникла необходимость использовать в девайсе супермаленький и низкопотребляющий PIC10F200, и тут возникли некоторые сложности, которые не могу решить без Вашей помощи...

Сначала, при входе в sleep режим, мне никак не удавалось вывести его из него... Потом на одном из форумов я прочитал что этот контроллер при выходе из sleep переходит к выполнению команды по нулевому адресу, вместо того чтобы выполнять команду, следующую на командой sleep. Учитывая что команда sleep была одной из первых в моем коде, то не удивительно что устройство не работало (фактически программа инициализировала порты, уходила в sleep режим и так по замкнутому кругу).

Переписал программу таким образом, чтобы уход в sleep был после выполнения нужных мне действий...но тут другой баг вылез...

Пишу я на Си в HI-TECH PICC

Программный код:

#include <htc.h>

unsigned char imp_count=0;

void delay(unsigned int value)
{
while(value-- > 0)
{
}
}

void main(void)
{

TRIS = 0b00001000; // настраиваем линию GP3 на вход, GP0, GP1, GP2 на выход
OPTION=0b01000000;

while(1)
{
if (GP3==1)
{
if (imp_count==0||imp_count==1)
{
GP1=1;
delay(5000);
GP1=0;
imp_count++;
}

if (imp_count==2||imp_count==3)
{
imp_count++;
}
}
if (imp_count>3) {imp_count==0;}
asm ("sleep");
}
}

На вход GP3 микроконтроллера постоянно поступают импульсы. В ответ на первые два из них он должен мигнуть светодиодом подвешенным на ногу GP1, а на следующие два импульса - ничего не делать. И так по замкнутому кругу...

Но, вместо этого он мигает диодом на каждый приходящий импульс без пропуска!

Возникает впечатление, что при сбросе счетчика команд после выхода из sleep, значение переменной imp_count также сбрасывается в ноль. Может ли такое быть? или проблема в чем то другом?

В общем если кто то знает в чем проблема, прошу поделиться...

Биты конфигурации выставляю так:

MCLR отключен (GP3 работает как вход)

WDT отключен

Работа от внутреннего генератора (4Мгц)

Share this post


Link to post
Share on other sites

На сколько я понимаю, PIC10F200 из слипа выходит только "вперед ногами" - ресетом. Память сбрасывается.

Можно попробовать хранить счетчик в регистре 01h - это TMR0. Он при сбросе не изменяется. Если, конечно, не предполагается использовать таймер-0 в этом устройстве. То-есть imp_count заменить в программе на tmr0 и удалить стоку с объявлением (unsigned char imp_count=0;)

Share this post


Link to post
Share on other sites
этот контроллер при выходе из sleep переходит к выполнению команды по нулевому адресу, вместо того чтобы выполнять команду, следующую на командой sleep.....

чушь вся работа в режиме sleep описана в разделе 9.9 даташита переход на нулевой адрес происходит только при включенной собаке или аппаратном сборсе

выход из sleep по изменению уровней на gp0,gp1,gp3 - устанавливается битом GPWU=0 регистр OPTION

прежде чем входить в sleep состояние входов должно быть прочитано! вы этого не делаете....

#include <htc.h>
......


if (imp_count==0||imp_count==1)
{
.....
}
.....
}
if (imp_count>3) {imp_count==0;}
asm ("sleep");
}
}

1.писать сонфиг бит в коде программы религия не позволяет?

2.я могу ошибаться, но логические операции имеют более высокий приоритет, чем операции сравнения или нет? все таки - нет

3.когда imp_count>3 вы что от программы ожидаете?

4.asm ("sleep") = SLEEP()

Edited by IMXO

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

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

Подробнее

но тут другой баг вылез...

а вы что ожидали? у вас цикл программы длится около 75мс. если откинуть задержку(GP1=1), остальная программа выполняется за 271мкс (GP1=0)

Share this post


Link to post
Share on other sites
В ответ на первые два из них он должен мигнуть светодиодом подвешенным на ногу GP1, а на следующие два импульса - ничего не делать. И так по замкнутому кругу...

может это поможет....

#include <pic.h>
#include <htc.h>
__CONFIG(MCLRDIS & WDTDIS);


static  volatile unsigned char	FLAG	    @ 0x10;
static  volatile unsigned char  imp_count   @ 0x11;

/*	FLAG bits	*/
static volatile bit	FL_GP3	        @ (unsigned)&FLAG*8+3;
static volatile bit	FL_GP3_old	    @ (unsigned)&FLAG*8+2;

/*	imp_count bits	*/
static volatile bit	imp_Bit1        @ (unsigned)&imp_count*8+1;


void delay(unsigned int value) 
{
 while(value > 0)
 {
  value--;
 }
}

void main(void) 
{

 TRIS = 0b00001000; // настраиваем линию GP3 на вход, GP0, GP1, GP2 на выход
 OPTION=0b01000000;
 GPIO=0;
 FLAG=0;



while(1)
{

  FL_GP3=GP3;

   if (FL_GP3!=FL_GP3_old)
       {
         FL_GP3_old=FL_GP3;
         if (FL_GP3)
             {
               if (!imp_Bit1)
                  {
                   GP1=1;
                    delay(5000);
                   GP1=0; 
                  }
               imp_count++; 
             } 
       }

 GPIO=GPIO;
 SLEEP();
  NOP();

}
}

post-124881-0-23772500-1334869589_thumb.jpg

Edited by IMXO

Share this post


Link to post
Share on other sites
                     

Приглашаем на вебинар Решения для построения ультразвуковых счетчиков жидкостей и газов на базе MSP430

Компэл совместно с Texas Instruments 23 октября 2019 приглашают на вебинар, посвященный системам-на-кристалле для построения ультразвуковых расходомеров жидкостей и газов на базе ядра MSP430. Вебинар проводит Йоханн Ципперер – эксперт по ультразвуковым технологиям, непосредственно участвовавший в создании данного решения. На вебинаре компания Texas Instruments представит однокристальное решение, позволяющее создавать точные недорогие счетчики жидкостей и газов.

Подробнее...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
    • By Falconist
      Вместо вышедшей из строя проводной мыши поставил беспроводную мышь "Rapoo-1620" и получил на ровном месте проблему: при нажатии на клавиатуре Genius KB-06SE (фото в Интернете найти не смог - старенькая уже, но я к ней приспособился) кнопки "Sleep" (с полумесяцем на ней) компьютер пытается выключиться, но через примерно минуту снова загружается. С проводной мышью такого не было.

      Взял беспроводную мышку у жены - то же самое. Взял у неё клавиатуру (но тоже с кнопкой "Sleep" ) - всё равно перезагружается. Получается, что USB приемник беспроводным мышек всё время обменивается информацией с компьютером, даже в спящем режиме и "будит" его. 

      В принципе, эту проблему как-то обхожу, вынимая приемник из USB разъема перед "усыплением", но гнездо-то разбалтывается да и неудобно - бывает, надо срочно "усыпить" аппарат.

      Прошу не рекомендовать выключать компьютер штатными средствами - оставляю открытыми несколько проектов, потом каждый искать заново, находить в них точки, в которых работал перед усыплением и т.п. - слишком неудобно.

      Если простого решения не найдется - фиг с ним, буду действовать, как уже приспособился (вынимать приемник). Но, а вдруг есть таковое?
    • By COKPOWEHEU
      Захотелось сделать устройство с минимальным потреблением. Первоначально хотел попробовать на f103, но глянул в даташит и ужаснулся: в любом режиме сна у него потребление больше, чем у AVR-ок. Ну хорошо, в standby сравнимо, но этот режим мне не подходит. Поискал аналоги, вроде бы серия L1 больше подходит для автономных устройств. Да еще там есть вкусности вроде сенсорных кнопок и управления ЖКИ (не то чтобы необходимо, но поиграться стоит).
      Собрал макетную плату с высокочастотным (8 МГц) и низкочастотным (32768) кварцами, стабилизатором, кнопками и светодиодами (из кода понятно что где висит). Запускаю RTC с пробуждением раз в секунду (в финальном устройстве просыпаться будет еще чаще) и пытаюсь увести в режим stop. Но вместо потребления в единицы микроампер получаю пол-миллиампера. Либо я какую-то периферию не отключил (да я их и не включал вроде...), либо как-то неправильно увожу в сон (вроде все по даташиту...), либо лыжи не едут.
      Вот ключевые моменты кода (остальное во вложении):
      void enable_btn(){ RCC->AHBENR |= RCC_AHBENR_GPIOBEN; GPIO_config(JBTN); //настройка на вход с минимальной скоростью, без подтяжке } void disable_all(){ GPIOA->MODER = 0xFFFFFFFF; //all to analog in GPIOB->MODER = 0xFFFFFFFF; //all to analog in GPIOC->MODER = 0xFFFFFFFF; //all to analog in GPIOD->MODER = 0xFFFFFFFF; //all to analog in GPIOA->OSPEEDR = 0; //all to low speed (наверное, неважно) GPIOB->OSPEEDR = 0; //all to low speed (наверное, неважно) GPIOC->OSPEEDR = 0; //all to low speed (наверное, неважно) GPIOD->OSPEEDR = 0; //all to low speed (наверное, неважно) GPIOA->OTYPER &=~ 0x0000FFFF; GPIOB->OTYPER &=~ 0x0000FFFF; GPIOC->OTYPER &=~ 0x0000FFFF; GPIOD->OTYPER &=~ 0x0000FFFF; RCC->AHBENR &=~ (RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOCEN | RCC_AHBENR_GPIODEN); clock_MS(); } void go_sleep(){ RCC->APB1ENR |= RCC_APB1ENR_PWREN;//вкл тактирование PWR SCB->SCR |= SCB_SCR_SLEEPDEEP; //для M3 разрешаем sleepdeep PWR->CR &=~PWR_CR_PDDS;//выбираем режим Power Down Deepsleep PWR->CR &=~PWR_CR_CWUF ; //очищаем wakeup flag PWR->CR |= PWR_CR_LPSDSR; //уменьшаем voltage regulator __WFI(); } ... //когда нужно заснуть disable_all(); go_sleep(); enable_btn(); Пробовал совсем не переключаться с MSI на HSE, это влияет только на рабочий режим, во сне как было 500 мкА так и остается.
      L1_sleep.rar
    • By Илья Говжеев
      Поделитесь опытом , кто уже пробывал из arduino сделать программатор pic? 

    • By Терентенко Андрей
      Добрый день! Имею следующую ситуацию : на базе  PIC16f676  создал приблуду для "управления нештатной магнитолой с руля", а именно  сигнал с руля это 4,8в и в зависимости от нажатой кнопки падает дискретной до 0.8в мк с помощью АЦП отслеживает  на магнитолу паралельно кнопкам кинул оптрони которыми управляет МК. Питание от LM с фильтрующими конденсаторами. При тестових прогонах всё работало как надо (программно реализовано защиту от дребезга аж на 0.1 сек в поисках решений) и в машине  и от штатного БП . Но заметил закономерность сейчас на улице - 2 и при первом запуске минут 5, МК "шумит" несоотвецтвует нажатия на руле кнопке  на магнитоле ! Сигнал с руля смотрел стабильный без дребезга , притом когда тестил вынес магнитолу подключил всё работало гуд но пока устанавливал закручивал она остыла и начинались эти тацы . Кто что подскажет? МК или ЛМ могут так реагировать на температуру ? Прошу прощения у модераторов за повторение теми (может в этом разделе будет актуальней)
  • Сообщения

    • Прекрасные приборы, в умелых руках! Главное, иметь грамотную, и сообразительную голову и практический опыт приобретённый на протяжении всей жизни. Все эти качества  у Вас есть! Так держать!  
    • заменил резисторы - ничего не поменялось - я так понимаю - как говорили - с каждым импульсом трансформатор будет набирать *обороты* и потому на выходе такой график? поправьте меня ес не прав - а то чуть су включать в сеть))
    • Градус пива или чего покрепче?  Это к наркологу...    А, просто, воспользоваться переводчиком религия не позволяет? 
    • @Pont 007 Пользуясь правом, данным мне в этой теме Админом, за необоснованные снижение моего рейтинга, объявляю тебя мелким, гнилым и мстительным полупи_ором. Ты не мужик, а дешёвка и срань болотная.
    • навесил по 1 кОм на вторичку - хде мой софтстарт попробую все-таки увеличить затворные резисторы ,имхо ,снабер на вторичку в любом случае нужен,имхо VID_20191020_234156.mp4
    • Человек-паук:
    • В одном аэропорту на скамье ожидания сидят трое: — Француз, американец и русский. Вдруг к ним подходит журналист и спрашивает:  — Не могли бы вы какими то другими словами объяснить что у вас висит ниже пояса?  Сначала ответил Француз: - Ниже пояса у меня висит то, чем я обычно доставляю удовольствие женщинам.  Потом ответил Американец: — Ниже пояса у меня висит то, чем я доставляю удовольствие себе.  И наконец ответил Русский: — Ниже пояса у меня висят ключи, а то что у тех двоих висит, у меня обычно стоит! ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - Чем лучше запивать блюда мексиканской кухни? - Текилой. - А блюда немецкой кухни? - Пивом. - А блюда итальянской кухни? - Вином. - А русскую кухню? - А русскую кухню не запивать надо, а закусывать! ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Полицейский Инспектор Дорожного Регулирования (ПИДР),  Государственная Единая Инспекция (ГЕИ), а ведь все начиналось с обычных голубых номеров. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Беседуют американец с русским: А: А у нас в Америке самое опасное животное - это медведь гризли. Особенно если голодный. А у вас? Небось тоже медведь?  Р: Неа! У нас в России самое опасное животное - это песец. Особенно если полный! 
  • Покупай!

×
×
  • Create New...