Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Чт авг 11, 2022 21:35:54
Включите режим компилятора в С++. В Iar это легко и просто. Получите, как минимум, дополнительный контроль типов. Вот только за С++14 в iar для stm8 я что-то не уверен
Чт авг 11, 2022 21:41:53
Включить С++, а писать на С?
Так можно было? )
Чт авг 11, 2022 21:42:44
В том и прикол был, что эти буквы читаются именно как матрицы в двоичном коде. Там прям буквы видно глазами.
Вот и замените дефайнами с аналогичной визуализацией. Можете даже вернуть бинарное представление, только вместо первого нуля пишите букву "О".
Что то типа
- Код:
#define Ob000111 0x07
Текст можно подготовить в Экселе.
Пт авг 12, 2022 20:04:15
Массив можно определить с помощью вложенных скобок. Построчно.
Для размещения массива во флеше определите его как constant, иначе он будет размещён в ОЗУ.
Посмотреть, что где лежит можно только после компиляции в map файле.
STM8 очень удобный и простой микроконтроллер. Вы не привыкли к IAR, у него ужасный редактор, но замечательный компилятор и отладчик.
Кстати, в последней версии компилятора, IAR в вызове прерывания добавляет пять команд процессора из-за какой-то ерраты прерывания при делении чисел. Поэтому супер-бупер-быстрого прерывания у него не ждите. А так, на STM8S003 я делал много чего, например RMS вольтметр сетевого напряжения с защитой, управление CPLD в аудио процессоре (у него есть EEPROM для сохранения установок). Код программы очень компактный, экономно расходует флеш.
Пт авг 12, 2022 21:11:05
но замечательный компилятор
Для stm8? Я бы не сказал. Но есть ли вообще что-то замечательное для stm8? Вопрос.
Пт авг 12, 2022 22:13:42
Есть - он менее популярен, а потому информационного говна, как, например, для атмела, в сети значительно меньше.
Сб авг 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:
Также примерно понимаю, что можно каждый раз накладывать маскау, выделять нужный бит, потом через условие проверять равен ли он нулю и дальше просто выставлять порт в нужный уровень.
Но это как-то долго все.
Сб авг 13, 2022 20:13:05
PA_ODR_bit.ODR2 = (i >> 3);
PB_ODR_bit.ODR6 = (i >> 4);
по крайней мере, для какого-то мк мне встречалось уточнение, что если биту порта присваивается байт, то фактически идёт присвоение младшего бита.
Сб авг 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++;
}
Сб авг 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 раз.
Сб авг 13, 2022 20:26:50
Светодиоды загораются нулями. А в массиве буквы заданы единицами... Вот и приходится единицы в нули превращать.
Сб авг 13, 2022 20:28:19
то есть каждый бит в l надо инвертировать? тогда это делается не так...
Сб авг 13, 2022 20:30:15
Но все равно не хочет работать. Как будто не правильно вытаскивает элементы массива. Горят все светодиоды и только портА2 иногда мигает... , Кстати, в первом варианте было также. Похоже он все же при присваивании байта работает только с первым разрядом.
Добавлено after 38 seconds:
О...
Сб авг 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;
так как потом почти сразу же их заменяют новые значения. вот если бы была пауза,, тогда да...
Сб авг 13, 2022 20:34:27
Благодарю огромное! Все заработало. ) Точно, побитовое отрицание не правильно сделал. ))) Вот я дебил.
А эта конструкция чтобы гасить светодиоды после вывода каждой части буквы. Ну , это POV устройство, которе вращается и пишет в воздухе буквы из массива на линейке светодиодов.
Сб авг 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:а для гашения надо бы, наверное, всё-таки паузу, или успевают?
Сб авг 13, 2022 21:45:05
Еще не проверял. ))) Сейчас батарейки найду и буду пробовать крутить. Если , конечно, найду, а то может покупать надо будет завтра. )))
НА данный момент на столе правильно мигают светодиоды. Только , естетственно, таймер надо настроить побыстрее, а то медлено.
Добавлено after 1 hour 6 minutes 12 seconds:
Спасибо, ребята, всем! Все заработало. Жену удивил очередной безделушкой. Пишет в воздухе "Лизка - сосиска". ))))
Пришлось увеличить массив и кроме букв добавить пробелы между буквами и паузу после фразы.
Мне же для изучени очередного МК хоть чуток прикоснуться к новым портам, настройки частоты и прерывания по переполнению таймера.
Конечно, всего 5 свободных портов, соответственно 5 светодиодов, что маловато для качественных букв. )
И да. Крутил я просто макетную плату с припаянным МК, стабилизатором, на проводоах, а батарейка в руках. Для демонстрации хватает.
Сб авг 13, 2022 21:52:06
Круто! а у меня уже лет 5 руки не доходят такое сделать, а ведь даже платы в китае заказал и получил, и спаял.. а программку лень писать ( потому что стм32...
Сб авг 13, 2022 21:57:32
Ну... я только ради изучения МК. ))) На СТМ32 круче можно сделать. И цветную. Вон, как у МанкиЛектрик на велосипедные колеса. Круто смотрится вообще!
Сб авг 13, 2022 22:01:34
да, но я не стал цветную, 16 зелёных светодиодов, но добавил внешнюю еепром и мк с усб, что позволяет насоздавать кучу всего на компе в неком эффектогенераторе и загрузить.
просто у меня слишком много зелёных светодиодов, слишком... необходимо избавляться ))
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.