Например TDA7294

Форум РадиоКот • Просмотр темы - Передача int побайтно по UART
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 17:55:25

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


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



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Передача int побайтно по UART
СообщениеДобавлено: Вс янв 07, 2018 09:56:05 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 0
Зарегистрирован: Вс мар 09, 2014 09:13:00
Сообщений: 136
Рейтинг сообщения: 0
Идея свести расчет среднеквадратичного значения 10ти разрядного АЦП к результату, хранящемуся в переменной типа int, затем ее побайтно отправить через UART. Для этого пытался взять адрес на нужный мне байт через указатель. Получается передавать только значения нижнего регистра ADCL. Значения верхнего регистра принимают нулевые значения. Приложил исходник и картину в протеусе, по идеи должен выводить 03ff (1023), так как ползунок вверху. Вообще при перемещении ползунка значения нижнего регистра принимают верные значения. Подскажите, как наиболее правильно реализовывать такую задачу? Или выгоднее поступить кардинально иначе?


Вложения:
ADC.png [153.36 KiB]
Скачиваний: 408
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача int побайтно по UART
СообщениеДобавлено: Вс янв 07, 2018 10:18:04 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
У Вас ukazatel - указатель на int, а значит "ukazatel + 1" - это адрес, равный ukazatel + sizeof(int).
Если Вы вытаскиваете байты из памяти, то и указатель должен быть на байтовый тип.

Добавлено after 3 minutes 27 seconds:
Чтобы не путаться, лучше сделайте всё через union.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача int побайтно по UART
СообщениеДобавлено: Вс янв 07, 2018 15:36:34 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
имея l_adc и h_adc, которые можно напрямую выдать в UART, к чему плодить лишние сущности типа указателя?

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

Мой уютный бложик... заходите!


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Передача int побайтно по UART
СообщениеДобавлено: Вс янв 07, 2018 15:52:17 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Оптимизатор с ними справится, я думаю. А вот использование ADCH и ADCL реально увеличивает код. Лучше сразу 16битную переменную ADC использовать, не нужны избыточные преобразования 8 битных переменных в 16 битную.

Добавлено after 4 minutes 27 seconds:
Судя по закоментаренному коду, предполагается передавать среднеквадратичное значения, расчет которого и передача, скорее всего, не стоит делать в прерывании. Но это наверное наброски кода.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Передача int побайтно по UART
СообщениеДобавлено: Вс янв 07, 2018 17:03:09 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 0
Зарегистрирован: Вс мар 09, 2014 09:13:00
Сообщений: 136
Рейтинг сообщения: 0
имея l_adc и h_adc, которые можно напрямую выдать в UART, к чему плодить лишние сущности типа указателя?

Нужно по UART передать среднеквадратичное значение АЦП как корень квадратный из суммы квадратов измерений, отнесенной к количеству измерений s=sqr((x1^2+x2^2+...xn^2)/n), так вот чтобы найти сумму квадратов - планирую использовать переменную типа long int, количество измерений думаю взять 20ть, а следовательно чтобы уместить значение под корнем, а это по максимуму 1023^1023*20=1046529=0хFF801, т.е. 3и байта. Затем извлекаем корень и делим на 20ть(кол-во измерений). А уже отсюда посылать побайтно разбитую переменную по UART


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Передача int побайтно по UART
СообщениеДобавлено: Вс янв 07, 2018 17:54:34 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
DenChik87 писал(а):
А уже отсюда посылать побайтно разбитую переменную по UART
ну и указатель нафига?
Код:
void send_int(int d){
   transmit(d >> 8);
   transmit(d);
}

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача int побайтно по UART
СообщениеДобавлено: Пн янв 08, 2018 15:02:10 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 0
Зарегистрирован: Вс мар 09, 2014 09:13:00
Сообщений: 136
Рейтинг сообщения: 0
ну и указатель нафига?
Код:
void send_int(int d){
   transmit(d >> 8);
   transmit(d);
}

Сделал как вы написали, нижний байт передается правильно, а в верхнем при перемещении потонцеометра от земли выше 13% возникакт ошибка, вместо положенного в нем нуля появляется значение FF., далее эта ошибка повторяется пока ползунок резистора не дайдет до 25% от земли, после значения и верхнего и нижнего регистра вновь принимают верные значения :?


Вложения:
adc3.png [92.34 KiB]
Скачиваний: 338
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача int побайтно по UART
СообщениеДобавлено: Пн янв 08, 2018 15:11:19 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
DenChik87 писал(а):
нижний байт передается правильно, а в верхнем при перемещении потонцеометра от земли выше 13% возникакт ошибка
Во-первых, чтобы не было ЛИШНИХ проблем, используйте ADC вместо пары ADCL и ADCH - для вас же сделали ОДНУ переменную...
во-вторых, просто не представляю, как мой код из двух абсолютно прозрачных строк может работать не правильно... разбирайтесь, что у вас ЕЩЕ не так...

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача int побайтно по UART
СообщениеДобавлено: Пн янв 08, 2018 15:32:50 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21790
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
выше 13% возникакт ошибка, вместо положенного в нем нуля появляется значение FF., далее эта ошибка повторяется пока ползунок резистора не дайдет до 25% от земли, после значения и верхнего и нижнего регистра вновь принимают верные значения :?

Похоже на переполнение при вычислениях. Следите за размерностью промежуточных результатов.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача int побайтно по UART
СообщениеДобавлено: Пн янв 08, 2018 16:40:19 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Нужно посмотреть как АЦП инициализировано. Кроме того, DenChik87, ну кто же Вам мешает, зачем то введенным переменным l_adc и h_adc, присвоить проблемные значения и посмотреть как передаются данные, сразу станет понятно в какой половине кода копать. Аналогичным образом затем поступите с другими участками исходного кода и постепенно локализуется проблема да больного(ых) места (мест).

Добавлено after 5 minutes 22 seconds:
DenChik87 писал(а):
Затем извлекаем корень и делим на 20ть(кол-во измерений).
Наверное это просто опечатка, но операция извлекания корня должна делаться последней.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача int побайтно по UART
СообщениеДобавлено: Пн янв 08, 2018 22:11:54 
Грызет канифоль

Карма: 9
Рейтинг сообщений: 80
Зарегистрирован: Чт ноя 06, 2014 13:09:06
Сообщений: 251
Рейтинг сообщения: 1
Сделал как вы написали, нижний байт передается правильно, а в верхнем ...

unsigned char h_adc, l_adc;

а вообще h_adc, l_adc - лишние, уже же имеются ADCH и ADCL или как подсказывают 16-ти битнное ADC - чем не устраивают?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача int побайтно по UART
СообщениеДобавлено: Вт янв 09, 2018 18:47:44 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 0
Зарегистрирован: Вс мар 09, 2014 09:13:00
Сообщений: 136
Рейтинг сообщения: 0
Болшое спасибо всем кто отвечал :)) отдельное огромное спсибо viiv.
...или как подсказывают 16-ти битнное ADC - чем не устраивают?

Я не знал, что регистровю пару можно назвать ADC и работать с ней как с двухбайтной. Если использовать ADC, то с ней все работает. Когда в первый раз подсказал ARV я не сообразил что он имел в виду, видимо со второго раза лучше доходит :music:
а вообще h_adc, l_adc - лишние, уже же имеются ADCH и ADCL...

Да получается l_adc и h_adc лишние. Но так как я не знал, что можно все так ловко с ADC сделать, делал, через как не надо. А когда не выгружал в l_adc и h_adc, а вместо них писал ADCH и ADCL, то тогда значения в терминал выводятся правильно, но только один раз, будто следующее прерывание не выполнялось, или не обновлялись регистры ADCH/ADCL

И как писал viiv - в варианте с l_adc и h_adc нужно указать тип unsigned и все заработало верно. Был бы счастлив если еще проясните, почему нужно задать unsigned, ведь по умолчанию char и так должен быть беззнаковй?


Последний раз редактировалось DenChik87 Вт янв 09, 2018 19:01:46, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача int побайтно по UART
СообщениеДобавлено: Вт янв 09, 2018 18:56:50 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
DenChik87 писал(а):
Когда в первый раз подсказал ARV я не сообразил что он имел в виду,
viewtopic.php?p=3277106#p3277106 Вообще через раз читаете.
DenChik87 писал(а):
а вместо них писал ADCH и ADCL, то тогда значения в терминал выводятся правильно, но только один раз, будто следующее прерывание не выполнялось, или не обновлялись регистры ADCH/ADCL
Просто еще какую-то ошибку придумали.
DenChik87 писал(а):
Был бы счастлив если еще проясните, почему нужно задать unsigned, ведь по умолчанию char и так должен быть беззнаковй?
Знаковый или беззнаковый будет на совести того или иного компилятора (это только для char), но скорее всего будет знаковый.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача int побайтно по UART
СообщениеДобавлено: Вт янв 09, 2018 19:17:14 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 0
Зарегистрирован: Вс мар 09, 2014 09:13:00
Сообщений: 136
Рейтинг сообщения: 0
Z_h_e писал(а):
Вообще через раз читаете.,

Да и впраду плохо читаю, или поимаю, или и то и то :oops:спсибо за исчерпывающий ответ Z_h_e :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача int побайтно по UART
СообщениеДобавлено: Вт янв 09, 2018 22:43:41 
Грызет канифоль

Карма: 9
Рейтинг сообщений: 80
Зарегистрирован: Чт ноя 06, 2014 13:09:06
Сообщений: 251
Рейтинг сообщения: 0
почему нужно задать unsigned, ведь по умолчанию char и так должен быть беззнаковй?

В общем случае, это неверно. например, в gcc при взмахе волшебной палочки указании соответствующей опции компилятору - char может быть как знаковым, так и беззнаковым (-funsigned-char)


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

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


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

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


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

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


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