Easyelectronics.ru

Электроника для всех
Текущее время: 21 июл 2018, 05:09

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 16 ] 
Автор Сообщение
 Заголовок сообщения: Помогите с кодом для STM8S103F3P
СообщениеДобавлено: 20 дек 2017, 22:33 
Только пришел

Зарегистрирован: 20 дек 2017, 21:58
Сообщения: 11
знаю что оповещения быстро удалят и все же есть код на STM8S103F3P.Когда нажимаю на кнопку то меняются режимы они же циклы или как я их в коде назвал х1, х2, х3.но на практике переключение криво происходит Либо не сработает вообще .как надо поправить код напишите пожалуйста?
кнопка на пине А3 и подключается к 3.3вольт.

Код:
#include <iostm8s103f3.h>

bool flag = PA_IDR_IDR3;

static void delay (unsigned int t)
{
  while (!flag && t--){
    if (PA_IDR_IDR3)
    {
      flag = !flag;
    }
  }
}

static void x1()
{
  while (!flag)
  {
    PD_ODR_ODR4 = !PD_ODR_ODR4;
    delay(65534);
   
    if (PD_ODR_ODR1)
    {
      PD_ODR_ODR4 = !PD_ODR_ODR4;
      PD_ODR_ODR2 = !PD_ODR_ODR2;
    }
    delay(65534);
    if (PD_ODR_ODR2)
    {
      PD_ODR_ODR2 = !PD_ODR_ODR2;
      PD_ODR_ODR3 = !PD_ODR_ODR3;
    }
    delay(65534);
   
    if (PD_ODR_ODR3)
    {
      PD_ODR_ODR3 = !PD_ODR_ODR3;
      PD_ODR_ODR4 = !PD_ODR_ODR4;
    }
    delay(65534);
  }
  flag = !flag;
}

static void x2 ()
{
   while (!flag)
  {
      PD_ODR_ODR4 = !PD_ODR_ODR4;
      delay (30000);
     
      PD_ODR_ODR2 = !PD_ODR_ODR2;
      delay (30000);
     
      PD_ODR_ODR3 = !PD_ODR_ODR3;
      delay (30000);
  }
  flag = !flag;
}

static void x3 ()
{
  while (!flag)
  {
  PD_ODR_ODR4 = !PD_ODR_ODR4;
  PD_ODR_ODR2 = !PD_ODR_ODR2;
  PD_ODR_ODR3 = !PD_ODR_ODR3;
    delay(65534);
  }
  flag = !flag;
}


int main()
{
   PD_ODR = 0;
 
  PD_DDR_DDR2 = 1;
  PD_CR1_C12 = 1;
 
  PD_DDR_DDR3 = 1;
  PD_CR1_C13 = 1;
 
  PD_DDR_DDR4 = 1;
  PD_CR1_C14 = 1;
 
  PA_DDR_DDR3 = 1;
  PA_CR1_C13 = 1;
 
  PD_DDR_DDR5 = 1;
  PD_CR1_C15 = 1;
 
  PD_DDR_DDR6 = 1;
  PD_CR1_C16 = 1;
 
  while(1)
  {
    x1();
    x2();
    x3();     
  }
 


 
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с кодом для STM8S103F3P
СообщениеДобавлено: 21 дек 2017, 00:30 
Заглядывает иногда

Зарегистрирован: 16 окт 2013, 20:15
Сообщения: 157
Откуда: Екатеринбург
Дребезг?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: нет
СообщениеДобавлено: 21 дек 2017, 14:05 
Только пришел

Зарегистрирован: 20 дек 2017, 21:58
Сообщения: 11
режымы начинаются не всегда з начала иногда из середины. изза того светодиоды загоряются не в том порядку как указано в цыкле. Может есть другой способ переключения цыклов?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: попитка исправить неувенчалась успехом
СообщениеДобавлено: 22 дек 2017, 01:40 
Только пришел

Зарегистрирован: 20 дек 2017, 21:58
Сообщения: 11
Поставил конденсатор для антидребезга и ничего не поменялось.Испробовал разные виды из разной емкостю ,резулятат тотже.
Если кто не понял, то в коде указанна последовательность загорания лампочки ,но на практике первый режым роботает нормально, но после переключения режыма еслеи кнопку передержать или недодержать ,то последовательность загорания лампочок отличается од кода(загораются не в том порядке).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с кодом для STM8S103F3P
СообщениеДобавлено: 22 дек 2017, 05:36 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5065
подтяжка кнопки есть?

почитайте в интернете темы про дребезг
самый простой способ - считать значение, если оно изменилось подождать некоторое время и если значение не изменилось то считать кнопку нажатой/отжатой
время ожидание для однократного нажима обычно в интервале 50-400мсек

время отмерять можно таймером ну или сделать большой цикл и подобрать его длительность
хотя для stm выдержки на циклах плохая идея в данном случае точность не важна, можно и так

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с кодом для STM8S103F3P
СообщениеДобавлено: 22 дек 2017, 18:10 
Заглядывает иногда

Зарегистрирован: 04 окт 2017, 22:23
Сообщения: 62
Как вариант, запускает таймер приблизительно на 25мс и по прерыванию опрашиваете кнопку, если нажата - устанавливаете флаг нажатия, в следующем опросе проверяете- если "было нажатие, а теперь - отжато" устанавливаете флаг "пора сменить режим работы", а в главном цикле - меняете.....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с кодом для STM8S103F3P
СообщениеДобавлено: 22 дек 2017, 18:24 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5065
для примера мой вариант, хотя наверно слишком сложный для вашей задачи, но может быть какието идеи подтчерпнете

Button::TimerUpdate вызывается по таймеру, оптимально какждые 100мсек
Button::PinChangeUpdate вызывается или по прерыванию или в цикле main


Вложения:
button.h [4.38 Кб]
Скачиваний: 116
gpio.h [1.41 Кб]
Скачиваний: 115
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с кодом для STM8S103F3P
СообщениеДобавлено: 23 дек 2017, 01:52 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5065
gpio я только не тот приложил) будет нужноприложу правильный


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с кодом для STM8S103F3P
СообщениеДобавлено: 23 дек 2017, 03:12 
Только пришел

Зарегистрирован: 20 дек 2017, 21:58
Сообщения: 11
Все! сделал . поковырялся немного в коде(около 40 минут) и решил проблему,хоть батя и помог.теперь код не зависает после нажатия кнопки.остался 1 дефект при ну очень быстром нажатии клавишы переключение не происходит(точнее не клавишы а бистрое косание двух проводов(клавишу так быстро нажать не получилось)).Не считаю ето критичным недочетом но думаю што если поставить конденсатор то проблема пройдет(мне было лень ставить).всеже
обошолся без таймера котрый усложнил бы код .привожу получившыйся код:




#include <iostm8s103f3.h>

bool flag = !PA_IDR_IDR3;

static void delay (unsigned int t)
{
while (!flag && t--){
if (PA_IDR_IDR3)
{
flag = !flag;
}
}
}

static void x1()
{
PD_ODR = 0;

while (!flag)
{
PD_ODR_ODR4 = !PD_ODR_ODR4;
delay(65534);

if (PD_ODR_ODR4)
{
PD_ODR_ODR4 = !PD_ODR_ODR4;
PD_ODR_ODR2 = !PD_ODR_ODR2;
}
delay(65534);
if (PD_ODR_ODR2)
{
PD_ODR_ODR2 = !PD_ODR_ODR2;
PD_ODR_ODR3 = !PD_ODR_ODR3;
}
delay(65534);

if (PD_ODR_ODR3)
{
PD_ODR_ODR3 = !PD_ODR_ODR3;
PD_ODR_ODR5 = !PD_ODR_ODR5;
}
delay(65534);

if (PD_ODR_ODR5)
{
PD_ODR_ODR5 = !PD_ODR_ODR5;
PD_ODR_ODR6 = !PD_ODR_ODR6;
}
delay(65534);

if (PD_ODR_ODR6)
{
PD_ODR_ODR6 = !PD_ODR_ODR6;
}
}
flag = !flag;
}

static void x2 ()
{
PD_ODR = 0;
while (!flag)
{
PD_ODR_ODR4 = !PD_ODR_ODR4;
delay (30000);

PD_ODR_ODR2 = !PD_ODR_ODR2;
delay (30000);

PD_ODR_ODR3 = !PD_ODR_ODR3;
delay (30000);

PD_ODR_ODR5 = !PD_ODR_ODR5;
delay (30000);

PD_ODR_ODR6 = !PD_ODR_ODR6;
delay (30000);
}
flag = !flag;
}

static void x3 ()
{
PD_ODR = 0;
while (!flag)
{
PD_ODR_ODR4 = !PD_ODR_ODR4;
PD_ODR_ODR2 = !PD_ODR_ODR2;
PD_ODR_ODR3 = !PD_ODR_ODR3;
PD_ODR_ODR5 = !PD_ODR_ODR5;
PD_ODR_ODR6 = !PD_ODR_ODR6;
delay(65534);
}
flag = !flag;
}


int main()
{
PD_ODR = 0;

PD_DDR_DDR2 = 1;
PD_CR1_C12 = 1;

PD_DDR_DDR3 = 1;
PD_CR1_C13 = 1;

PD_DDR_DDR4 = 1;
PD_CR1_C14 = 1;

PA_DDR_DDR3 = 1;
PA_CR1_C13 = 1;

PD_DDR_DDR5 = 1;
PD_CR1_C15 = 1;

PD_DDR_DDR6 = 1;
PD_CR1_C16 = 1;

while(1)
{
x1();
x2();
x3();
}




}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с кодом для STM8S103F3P
СообщениеДобавлено: 23 дек 2017, 22:53 
Старожил
Аватара пользователя

Зарегистрирован: 13 май 2010, 01:32
Сообщения: 940
Откуда: Ижевск
SOBAKA
Ты из какога горад и,с какога раёна гавари быстра.

_________________
Attiny13aПо20р.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с кодом для STM8S103F3P
СообщениеДобавлено: 24 дек 2017, 14:11 
Только пришел

Зарегистрирован: 20 дек 2017, 21:58
Сообщения: 11
selevo писал(а):
SOBAKA
Ты из какога горад и,с какога раёна гавари быстра.

зачем?
я из Украины.Киевская обл.больше не скажу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с кодом для STM8S103F3P
СообщениеДобавлено: 24 дек 2017, 15:33 
Старожил
Аватара пользователя

Зарегистрирован: 13 май 2010, 01:32
Сообщения: 940
Откуда: Ижевск
ммм,местный значит..
я думал прибалтика.
обычно у них с русским проблемы ))

_________________
Attiny13aПо20р.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с кодом для STM8S103F3P
СообщениеДобавлено: 26 дек 2017, 00:19 
Только пришел

Зарегистрирован: 20 дек 2017, 21:58
Сообщения: 11
selevo писал(а):
ммм,местный значит..
я думал прибалтика.
обычно у них с русским проблемы ))

Я просто мелкий 14 лет и в школе у моего класа руский язык не преподают.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с кодом для STM8S103F3P
СообщениеДобавлено: 26 дек 2017, 09:12 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 2021
Откуда: Русь, Новороссийск
SOBAKA писал(а):
Я просто мелкий 14 лет и в школе у моего класа руский язык не преподают.
:) Ты классный, хоть и мелкий :) Серьёзный такой :)
Ты в своих личных данных на форуме укажи свой возраст и откуда - будет меньше вопросов.
А русский со временем сам выучится :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с кодом для STM8S103F3P
СообщениеДобавлено: 26 дек 2017, 10:07 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 2514
Откуда: КЧР, поселок Нижний Архыз
И неплохо бы познать тег "code" + оформлять код нормально.
Вместо кучи delay заводится одна переменная, инкрементируемая тамером в прерывании, и весь этот ужас превращается в простой конечный автомат.
// я, правда, так и не понял, зачем этот код нужен — просто демонстрация того, как не надо писать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Помогите с кодом для STM8S103F3P
СообщениеДобавлено: 04 янв 2018, 03:36 
Только пришел

Зарегистрирован: 20 дек 2017, 21:58
Сообщения: 11
Код нужен для 1)саморазвития,я новичок в етом деле 2) ето импровизация мини гирлянды для мини ёлки.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB