Например TDA7294

Форум РадиоКот • Просмотр темы - Нескольно простых вопросов о программировании AVR на Си.
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вт дек 16, 2025 16:47:10

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 1499 ]     ... , , , 67, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн ноя 21, 2022 21:14:25 
Вымогатель припоя
Аватар пользователя

Карма: 10
Рейтинг сообщений: 171
Зарегистрирован: Ср июн 29, 2022 16:25:45
Сообщений: 523
Рейтинг сообщения: 0
ARV, да никакого.
Нет никакой несовместимости. Есть накладные расходы.
И если критична производительность и/или объем кода - то стоит задуматься, а нужен ли тут float ?
Я, наверное, из своих поделий на восьмой или 32й мегах и не припомню, что б вот так прямо нужен был float. Практически везде получалось уйти в целочисленную математику.
Но спорить с вами я не буду :) Хватило тут уже холиваров с авторами ЯВУ. Точку зрения Блондинки™ вы услышали, она может не совпадать с вашей.

Добавлено after 1 minute 30 seconds:
Вспомнила, делался какой то показометр на линейке диодов, там логарифмическое что то просили считать. Пришлось туда втулить.

_________________
Белая и Пушистая


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вт ноя 22, 2022 07:13:34 
Открыл глаза

Карма: 4
Рейтинг сообщений: 17
Зарегистрирован: Вс ноя 13, 2022 14:58:17
Сообщений: 53
Рейтинг сообщения: 0
Проблема разрешилаь очень просто. Применил остаток от деления %. И потом положил в массив. Точку тоже положил в массив куда мне нужно. Ну а
дальше вывел как простую строчку. Получилось прикольно!
Ну признаться посмотрел на форуме там приводился пример подобных действий,я применил его,
я такую разбивку применял только по 7seg indication тоже нормально работает.

Интересно, а что там за магическое число в программе - 0x30? :) :)


Последний раз редактировалось Bill_ Вт ноя 22, 2022 12:02:36, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вт ноя 22, 2022 07:17:59 
Опытный кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 164
Зарегистрирован: Ср авг 03, 2022 05:22:56
Сообщений: 848
Рейтинг сообщения: 0
Добавка для ANSI-кодировки цифр. В таблице ANSI цифры начинаются с кода 0х30


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вт ноя 22, 2022 07:32:39 
Открыл глаза

Карма: 4
Рейтинг сообщений: 17
Зарегистрирован: Вс ноя 13, 2022 14:58:17
Сообщений: 53
Рейтинг сообщения: 0
Добавка для ANSI-кодировки цифр. В таблице ANSI цифры начинаются с кода 0х30

А по-моему проще написать '0'. Или нет? :)
Код:
x = y%10 + '0';


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вт ноя 22, 2022 09:04:59 
Это не хвост, это антенна

Карма: 12
Рейтинг сообщений: 136
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1306
Рейтинг сообщения: 0
Не то что бы проще, но правильнее.)
Код:
x = y % 10 + '0';


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вт ноя 22, 2022 10:35:43 
Открыл глаза

Карма: 4
Рейтинг сообщений: 17
Зарегистрирован: Вс ноя 13, 2022 14:58:17
Сообщений: 53
Рейтинг сообщения: 0
Не то что бы проще, но правильнее.)
Код:
x = y % 10 + '0';

Проще, проще... требуется ввести только 3 символа вместо 4-х.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вт ноя 22, 2022 11:03:08 
Друг Кота
Аватар пользователя

Карма: 52
Рейтинг сообщений: 2114
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 7057
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (2)
Проще, проще... требуется ввести только 3 символа вместо 4-х.
Тогда так ещё проще
Код:
x = y % 10 + 48;
всего 2 символа... :))) :))) :))) :twisted: 8)

_________________
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вт ноя 22, 2022 11:07:19 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -24
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2516
Рейтинг сообщения: 0
Bill_, при чем здесь "три символа"? '0' — это и в Африке '0', наглядно и понятно. А что за хрень 0x30 — кто бы знал?
Вот можно и строки заканчивать символом 0x0A, но наглядней таки '\n' писать (я и сам полез сейчас в хексдамп, чтобы глянуть, какой код у '\n', т.к нафиг оно мне в реальной жизни сплющилось это помнить?).
А то еще дойдет до писания букв их кодами. А в какой кодировке тогда?? Вот я работаю в КОИ8-Р, хоть давно на хрюникод все попереходили.

Добавлено after 3 minutes 5 seconds:
Кстати, у меня для печати целых вот что нарисовано:
Код:
static char *_2str(uint32_t  val, uint8_t minus){
    static char strbuf[12];
    char *bufptr = &strbuf[11];
    *bufptr = 0;
    if(!val){
        *(--bufptr) = '0';
    }else{
        while(val){
            *(--bufptr) = val % 10 + '0';
            val /= 10;
        }
    }
    if(minus) *(--bufptr) = '-';
    return bufptr;
}
       
// return string with number `val`
char *u2str(uint32_t val){
    return _2str(val, 0);
}
char *i2str(int32_t i){
    uint8_t minus = 0;
    uint32_t val;
    if(i < 0){
        minus = 1;
        val = -i;
    }else val = i;
    return _2str(val, minus);
}

Когда начал играться с Cortex-M3, пришлось еще и на флоаты расширять...

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вт ноя 22, 2022 11:26:24 
Открыл глаза

Карма: 4
Рейтинг сообщений: 17
Зарегистрирован: Вс ноя 13, 2022 14:58:17
Сообщений: 53
Рейтинг сообщения: 0
Проще, проще... требуется ввести только 3 символа вместо 4-х.
Тогда так ещё проще
Код:
x = y % 10 + 48;
всего 2 символа... :))) :))) :))) :twisted: 8)
Да, но тогда придётся в табличку заглядывать, чтобы понять, что сие число означает. А если таблички перед глазами нет?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вт ноя 22, 2022 11:49:25 
Друг Кота
Аватар пользователя

Карма: 52
Рейтинг сообщений: 2114
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 7057
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (2)
Вы чего? шуток не понимаете? вон сколько морд нарисовал!!!! читаемость кода на первом месте всегда! (глаза и нервы даны одни на всю жизнь, а клавиатуру по мере износа и поменять можно :beer: )
Хотя... бывают случаи, когда читабельность не на первом месте (или даже вредна)... но встречаются довольно редко и данный случай к ним не относится.

_________________
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вт ноя 22, 2022 12:00:53 
Открыл глаза

Карма: 4
Рейтинг сообщений: 17
Зарегистрирован: Вс ноя 13, 2022 14:58:17
Сообщений: 53
Рейтинг сообщения: 0
Вы чего? шуток не понимаете? вон сколько морд нарисовал!!!! читаемость кода на первом месте всегда! (глаза и нервы даны одни на всю жизнь, а клавиатуру по мере износа и поменять можно :beer: )
Хотя... бывают случаи, когда читабельность не на первом месте (или даже вредна)... но встречаются довольно редко и данный случай к ним не относится.
Да я как-то не привык морды рисовать. Ни кошачьи, ни другие... Ладно, для данного случая так и быть нарисую. :lol: :lol: :)
PS: Вообще-то, я задал вопрос автору поста как-бы в шутку, чтобы обратить его внимание на эту деталь. Но люди восприняли это всерьёз и стали отвечать. Ладно, впредь в таких случаях буду рисовать кошачьи мордочки. :)


Последний раз редактировалось Bill_ Ср ноя 23, 2022 07:21:45, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Ср ноя 23, 2022 06:59:48 
Это не хвост, это антенна

Карма: 12
Рейтинг сообщений: 136
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1306
Рейтинг сообщения: 0
"В каждой шутке есть доля шутки.")


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн мар 13, 2023 21:31:02 
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватар пользователя

Карма: 133
Рейтинг сообщений: 782
Зарегистрирован: Чт апр 21, 2011 17:55:50
Сообщений: 4995
Откуда: Иркутск
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Мужики, выручайте. )
Есть код. В функцию отправляю переменную с конкретным значением. В функции конструкция switch - case.
Значение переменной, пусть будет 2. Он корректно в отладчике прилетает на этот же CASE. Однако, потом случается чудо и после break он летит через несколько case и выполняет еще один и тот не полностью...

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

Код:
void Set_Digit(int Digit) // Функция вывода цифры
{
   switch (Digit)
   {
      case 0:
         PORTB |= (1<<Segment_A)|(1<<Segment_E)|(1<<Segment_F);
         PORTD |= (1<<Segment_B)|(1<<Segment_C)|(1<<Segment_D);
         break;
      case 1:
         PORTD |= (1<<Segment_B)|(1<<Segment_C);
         break;
      case 2:
         PORTB |= (1<<Segment_A)|(1<<Segment_E)|(1<<Segment_G);
         PORTD |= (1<<Segment_B)|(1<<Segment_D);
         break;
      case 3:
         PORTB |= (1<<Segment_A)|(1<<Segment_G);
         PORTD |= (1<<Segment_B)|(1<<Segment_C)|(1<<Segment_D);
         break;
      case 4:
         PORTB |= (1<<Segment_B)|(1<<Segment_C);
         PORTD |= (1<<Segment_F)|(1<<Segment_G);
         break;
      case 5:
         PORTB |= (1<<Segment_A)|(1<<Segment_F)|(1<<Segment_G);
         PORTD |= (1<<Segment_C)|(1<<Segment_D);
         break;
      case 6:
         PORTB |= (1<<Segment_A)|(1<<Segment_E)|(1<<Segment_F)|(1<<Segment_G);
         PORTD |= (1<<Segment_C)|(1<<Segment_D);
         break;
      case 7:
         PORTB |= (1<<Segment_A);
         PORTD |= (1<<Segment_B)|(1<<Segment_C);
         break;
      case 8:
         PORTB |= (1<<Segment_A)|(1<<Segment_E)|(1<<Segment_F)|(1<<Segment_G);
         PORTD |= (1<<Segment_B)|(1<<Segment_C)|(1<<Segment_D);
         break;
      case 9:
         PORTB |= (1<<Segment_A)|(1<<Segment_F)|(1<<Segment_G);
         PORTD |= (1<<Segment_B)|(1<<Segment_C)|(1<<Segment_D);
         break;
      default:
         break;
   }
}




_________________
Станислав


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн мар 13, 2023 21:44:40 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2926
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18891
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 3
Медали: 1
Лучший человек Форума 2017 (1)
чудо заключается в том, что ты только добавляешь по "или" нужные сегменты, а не нужные не выключаешь, и они продолжают светиться.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн мар 13, 2023 21:57:49 
Это не хвост, это антенна

Карма: 12
Рейтинг сообщений: 136
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1306
Рейтинг сообщения: 3
Чудес не бывает. Вам сначала нужно выключить все сегменты в портах, а затем уже зажигать.
Starichok51 опередил.)

Добавлено after 7 minutes 6 seconds:
А вообще, это делается не так. Обычно в хедере расписывается подключение индикатора и всё. Программа же не меняется. И пофигу, общий анод или катод, один порт, два или три. И кол-во разрядов индикатора.


Последний раз редактировалось OKF Пн мар 13, 2023 21:58:59, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн мар 13, 2023 22:07:38 
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватар пользователя

Карма: 133
Рейтинг сообщений: 782
Зарегистрирован: Чт апр 21, 2011 17:55:50
Сообщений: 4995
Откуда: Иркутск
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Не не. я так и делаю.
Вот вызов функции
Код:
Set_OFF_All_Razryad;
On_Digit = 0;
Set_Digit(On_Digit);

Set_ON_Razryad1;



Вот и все. Понятно, что надо и сегменты выключать, но при инциализации они выключены все. Это первая команда, которая включает их. БОльше нигед ничего пока нет. Просто хочу зажечь один индикатор и все.

Добавлено after 1 minute 54 seconds:
И да, я допишу в функцию изначальное гашение всех сегментов. Это СПАСИБО, что посказали и напомнили. )

Добавлено after 1 minute 15 seconds:
У меня почему то , что в отладчике перескакивает при нажатии F11 через несколько кейсов. Что залитая в МК показывает хреноту.

Добавлено after 5 minutes 31 second:
OKF писал(а):
А вообще, это делается не так. Обычно в хедере расписывается подключение индикатора и всё


Вот это можно подробнее. ))))

_________________
Станислав


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вт мар 14, 2023 07:43:04 
Это не хвост, это антенна

Карма: 12
Рейтинг сообщений: 136
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1306
Рейтинг сообщения: 3
А что тут подробнее? На то он хедер, что бы все настройки были в нём.
Код:
#define COMMON_MAX        4
#define BLINK_TIME        500
   
#define COMMON1           C,5,H
#define COMMON2           C,1,H
#define COMMON3           C,2,H
#define COMMON4           D,5,H
   
#define _A                C,4,L
#define _B                C,3,L
#define _C                D,7,L
#define _D                B,1,L
#define _E                B,2,L
#define _F                C,0,L
#define _G                D,6,L
#define _H                B,0,L
   
#define MASK_A            (1<<7)
#define MASK_B            (1<<6)
#define MASK_C            (1<<5)
#define MASK_D            (1<<4)
#define MASK_E            (1<<3)
#define MASK_F            (1<<2)
#define MASK_G            (1<<1)
#define MASK_H            (1<<0)


#define INLINE            static inline __attribute__((__always_inline__))

#define common_out()      (out(COMMON1), out(COMMON2), out(COMMON3), out(COMMON4))
#define segment_out()     (out(_A),out(_B),out(_C),out(_D),out(_E),out(_F),out(_G),out(_H))
#define common_off()      (off(COMMON1), off(COMMON2), off(COMMON3), off(COMMON4))
#define segment_off()     (off(_A),off(_B),off(_C),off(_D),off(_E),off(_F),off(_G),off(_H))

void ledInit();
void display(uint8_t dig1, uint8_t dig2, uint8_t dig3, uint8_t dig4);
void setBlink(uint8_t mask);
void display(int8_t dow, uint8_t day);


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Ср мар 15, 2023 19:11:02 
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватар пользователя

Карма: 133
Рейтинг сообщений: 782
Зарегистрирован: Чт апр 21, 2011 17:55:50
Сообщений: 4995
Откуда: Иркутск
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Очередная задача...
Кстати, с первой был простой косяк: оптимизация компилияции в АВРстудио почему то жутко урезала код, что начлало скакаять по кейсам в свитч не понятно куда. Убрал оптимизацию и все стало так, как нужно.

Теперь я хочу разбивать число неопределенного количества разрядов на цифры. Мне нужен только алгоритмический принцип, а не код. Понимаю, что надо использовать деление на 10 и остаток от деления на 10. Много чего уже посмотрел, но все равно плохо доходит. Думаю, что и сам скоро разберусь, однако не помешает и толчек в нужном направлении.

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

Опишите суть, или ткните, где это максимально понятно расписано.

Добавлено after 12 minutes 22 seconds:
З.Ы. Число целое. До 5 разрядов.

_________________
Станислав


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Ср мар 15, 2023 19:24:24 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2926
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18891
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 3
Медали: 1
Лучший человек Форума 2017 (1)
кроме деления часто используют вычитание.
если 5 разрядов, то сначала вычитают 10000, пока есть от чего вычитать.
потом вычитают 1000, потом 100, и наконец 10.
после вычитания десятков остаются единицы числа.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Ср мар 15, 2023 20:02:00 
Мудрый кот

Карма: 25
Рейтинг сообщений: 487
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1797
Откуда: KN34PC, Болгария
Рейтинг сообщения: 3
с /10 и %10 и получаете разряды (напр. масив цифр), с максимально возможного количества цифр для отображения на дисплее. Затем (при необходимости), удаляете незначащие нули (leading_zeros) (заменяете их пустым символом).

напр.: 123456 в 8-digit 7-сегментный дисплей
123456 -> 0, 0, 1, 2, 3, 4, 5, 6 -> ' ', ' ', 1, 2, 3, 4, 5, 6
а затем последовательно вывести их на дисплей.


Последний раз редактировалось veso74 Ср мар 15, 2023 20:14:50, всего редактировалось 1 раз.

Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 1499 ]     ... , , , 67, , , ...  

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


Кто сейчас на форуме

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


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

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


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y