Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Re: На STM8 писать как для STM32 возможно?

Чт авг 11, 2022 21:35:54

Включите режим компилятора в С++. В Iar это легко и просто. Получите, как минимум, дополнительный контроль типов. Вот только за С++14 в iar для stm8 я что-то не уверен :(

Re: На STM8 писать как для STM32 возможно?

Чт авг 11, 2022 21:41:53

Включить С++, а писать на С?
Так можно было? )

Re: На STM8 писать как для STM32 возможно?

Чт авг 11, 2022 21:42:44

В том и прикол был, что эти буквы читаются именно как матрицы в двоичном коде. Там прям буквы видно глазами.

Вот и замените дефайнами с аналогичной визуализацией. Можете даже вернуть бинарное представление, только вместо первого нуля пишите букву "О".
Что то типа
Код:
#define   Ob000111  0x07

Текст можно подготовить в Экселе.

Re: На STM8 писать как для STM32 возможно?

Пт авг 12, 2022 20:04:15

Массив можно определить с помощью вложенных скобок. Построчно.
Для размещения массива во флеше определите его как constant, иначе он будет размещён в ОЗУ.
Посмотреть, что где лежит можно только после компиляции в map файле.
STM8 очень удобный и простой микроконтроллер. Вы не привыкли к IAR, у него ужасный редактор, но замечательный компилятор и отладчик.
Кстати, в последней версии компилятора, IAR в вызове прерывания добавляет пять команд процессора из-за какой-то ерраты прерывания при делении чисел. Поэтому супер-бупер-быстрого прерывания у него не ждите. А так, на STM8S003 я делал много чего, например RMS вольтметр сетевого напряжения с защитой, управление CPLD в аудио процессоре (у него есть EEPROM для сохранения установок). Код программы очень компактный, экономно расходует флеш.

Re: На STM8 писать как для STM32 возможно?

Пт авг 12, 2022 21:11:05

но замечательный компилятор
Для stm8? Я бы не сказал. Но есть ли вообще что-то замечательное для stm8? Вопрос.

Re: На STM8 писать как для STM32 возможно?

Пт авг 12, 2022 22:13:42

Есть - он менее популярен, а потому информационного говна, как, например, для атмела, в сети значительно меньше.

Re: На STM8 писать как для STM32 возможно?

Сб авг 13, 2022 20:05:25

Простите пожалуйста!

Есть перменная i, в кторой число из массива, например 0b00011.

Хочу вывести в порт (пусть будет PA, второй пин) третий бит этого числа, т.е. 0.
А в порт PB, шестой пин, вывести четвертый бит этого числа, т.е. тоже 0.

Понимаю, что надо операции сдвига использовать, но туплю...

PA_ODR_bit.ODR2 & = ~(i << 2);
PB_ODR_bit.ODR6 & = ~(i << 3); // вот так не работает...

З.Ы. переменная i объявлена в самом начале как Волатиль, т.к. использую ее потом в прерывании....

Добавлено after 28 minutes 5 seconds:
Также примерно понимаю, что можно каждый раз накладывать маскау, выделять нужный бит, потом через условие проверять равен ли он нулю и дальше просто выставлять порт в нужный уровень.
Но это как-то долго все.

Re: На STM8 писать как для STM32 возможно?

Сб авг 13, 2022 20:13:05

PA_ODR_bit.ODR2 = (i >> 3);
PB_ODR_bit.ODR6 = (i >> 4);
по крайней мере, для какого-то мк мне встречалось уточнение, что если биту порта присваивается байт, то фактически идёт присвоение младшего бита.

Re: На STM8 писать как для STM32 возможно?

Сб авг 13, 2022 20:22:06

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

Добавлено after 7 minutes 26 seconds:
Martian писал(а):PA_ODR_bit.ODR2 = (i >> 3);
PB_ODR_bit.ODR6 = (i >> 4);


Хм... не хочет так работать. Сейчас кусок кода вставлю:

Код:
__interrupt void TIM2_OVR_UIF_handler(void)

 
    TIM2_SR1_UIF = 0;
   
      PA_ODR_bit.ODR2 = 1;
      PD_ODR_bit.ODR0 = 1;
      PB_ODR_bit.ODR6 =1;
      PB_ODR_bit.ODR7 = 1;
      PC_ODR_bit.ODR1 =1;
     
    if (i == 59)
    {
      i=0;
    }
    l = Letter[i];
    l = !l;
   
   PA_ODR_bit.ODR2 = (l>>0);
   PD_ODR_bit.ODR0 = (l>>1);
   PB_ODR_bit.ODR6 = (l>>2);
   PB_ODR_bit.ODR7 = (l>>3);
   PC_ODR_bit.ODR1 = (l>>4);
   
   
   i++;


Re: На STM8 писать как для STM32 возможно?

Сб авг 13, 2022 20:24:03

именно. и либо это младший бит, либо, если компилятору что-то внезапно не понравится, можно сделать более строго:
PA_ODR_bit.ODR2 = ((i >> 3) & 0x01);
PB_ODR_bit.ODR6 = ((i >> 4) & 0x01);

Добавлено after 1 minute 50 seconds:
l = !l; - это зачем? Это ведь превратит l либо в 0, либо в 1, и дальнейший сдвиг даст всегда 0
Последний раз редактировалось Martian Сб авг 13, 2022 20:27:09, всего редактировалось 1 раз.

Re: На STM8 писать как для STM32 возможно?

Сб авг 13, 2022 20:26:50

Светодиоды загораются нулями. А в массиве буквы заданы единицами... Вот и приходится единицы в нули превращать.

Re: На STM8 писать как для STM32 возможно?

Сб авг 13, 2022 20:28:19

то есть каждый бит в l надо инвертировать? тогда это делается не так...

Re: На STM8 писать как для STM32 возможно?

Сб авг 13, 2022 20:30:15

Но все равно не хочет работать. Как будто не правильно вытаскивает элементы массива. Горят все светодиоды и только портА2 иногда мигает... , Кстати, в первом варианте было также. Похоже он все же при присваивании байта работает только с первым разрядом.

Добавлено after 38 seconds:
О...

Re: На STM8 писать как для STM32 возможно?

Сб авг 13, 2022 20:32:18

где-то нарушена логика.
1. почти нет смысла в этом коде:
Код:
PA_ODR_bit.ODR2 = 1;
      PD_ODR_bit.ODR0 = 1;
      PB_ODR_bit.ODR6 =1;
      PB_ODR_bit.ODR7 = 1;
      PC_ODR_bit.ODR1 =1;

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

Re: На STM8 писать как для STM32 возможно?

Сб авг 13, 2022 20:34:27

Благодарю огромное! Все заработало. ) Точно, побитовое отрицание не правильно сделал. ))) Вот я дебил.

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

Re: На STM8 писать как для STM32 возможно?

Сб авг 13, 2022 20:37:05

Код:
__interrupt void TIM2_OVR_UIF_handler(void)
{
    TIM2_SR1_UIF = 0;
   
    if (i == 59)
    {
      i=0;
    }
    l = Letter[i++];
   PA_ODR_bit.ODR2 = !(l>>0);
   PD_ODR_bit.ODR0 = !(l>>1);
   PB_ODR_bit.ODR6 = !(l>>2);
   PB_ODR_bit.ODR7 = !(l>>3);
   PC_ODR_bit.ODR1 = !(l>>4);
} ;


Добавлено after 1 minute 21 second:
а для гашения надо бы, наверное, всё-таки паузу, или успевают?

Re: На STM8 писать как для STM32 возможно?

Сб авг 13, 2022 21:45:05

Еще не проверял. ))) Сейчас батарейки найду и буду пробовать крутить. Если , конечно, найду, а то может покупать надо будет завтра. )))
НА данный момент на столе правильно мигают светодиоды. Только , естетственно, таймер надо настроить побыстрее, а то медлено.

Добавлено after 1 hour 6 minutes 12 seconds:
Спасибо, ребята, всем! Все заработало. Жену удивил очередной безделушкой. Пишет в воздухе "Лизка - сосиска". ))))

Пришлось увеличить массив и кроме букв добавить пробелы между буквами и паузу после фразы.

Мне же для изучени очередного МК хоть чуток прикоснуться к новым портам, настройки частоты и прерывания по переполнению таймера.
Конечно, всего 5 свободных портов, соответственно 5 светодиодов, что маловато для качественных букв. )

И да. Крутил я просто макетную плату с припаянным МК, стабилизатором, на проводоах, а батарейка в руках. Для демонстрации хватает.

Re: На STM8 писать как для STM32 возможно?

Сб авг 13, 2022 21:52:06

Круто! а у меня уже лет 5 руки не доходят такое сделать, а ведь даже платы в китае заказал и получил, и спаял.. а программку лень писать ( потому что стм32...

Re: На STM8 писать как для STM32 возможно?

Сб авг 13, 2022 21:57:32

Ну... я только ради изучения МК. ))) На СТМ32 круче можно сделать. И цветную. Вон, как у МанкиЛектрик на велосипедные колеса. Круто смотрится вообще!

Re: На STM8 писать как для STM32 возможно?

Сб авг 13, 2022 22:01:34

да, но я не стал цветную, 16 зелёных светодиодов, но добавил внешнюю еепром и мк с усб, что позволяет насоздавать кучу всего на компе в неком эффектогенераторе и загрузить.
просто у меня слишком много зелёных светодиодов, слишком... необходимо избавляться ))
Ответить