помогите переписать код ардуино пожалуйста

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: помогите переписать код ардуино пожалуйста

Сообщение GoldenAndy »

bafomet911 писал(а):Теперь вот хочу с ассемблером разобраться, так как в си проблематично работать с одним битом регистра...
да ничего там сложного нет.
Сделайте себе макросовую обертку битовых операций, если хочется, да работайте....
Можете даже обертку низкоуровневых асмовых SBR/CBR замутить...


Или вон ARV в соседней теме предлагает битовые поля через юнионы делать...
[uquote="ARV",url="/forum/viewtopic.php?p=3590365#p3590365"]7seg, кстати... раз уж вы юзаете avr-gcc, рекомендую пользоваться такой поддерживаемой этим компилятором фишкой, как "анонимные юнионы/структуры". у вас там многоступенчатая вложенность структур, что код не украшает. с анонимными структурами/юнионами это будет более красиво:

Код: Выделить всё

typedef union{
   uint8_t as_byte;
   struct{ // структура, под которую не выделено "поля" в union - безымянная или анонимная структура
      uint8_t bit0 : 1;
      uint8_t bit1 : 1;
      uint8_t bit2 : 1;
      uint8_t bit3 : 1;
      uint8_t bit4 : 1;
      uint8_t bit5 : 1;
      uint8_t bit6 : 1;
      uint8_t bit7 : 1;
   }; // вот тут бы идентификатор - а его нет!
} my_type_t;

my_type_t var;

var.bit7 = 1;
var.as_byte++;
[/uquote]
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Аватара пользователя
bafomet911
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт янв 31, 2019 18:49:04
Откуда: Воронежская область

Re: помогите переписать код ардуино пожалуйста

Сообщение bafomet911 »

О как... Надо на досуге как то попробовать. А то тут проблемка нарисовалась как из регистра одновременно два бита рядом стоящих получать. Щас получаю через битовые маски типа pind&0b00000011 а ну как в заголовочном файле драйвера энкодера кто то пины поменяет!? Придется и функцию переделывать..
Изображение
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: помогите переписать код ардуино пожалуйста

Сообщение GoldenAndy »

Ну ваша проблема как раз решаема.
У вас должна быть отдельная библиотечка, обчно такую называют HAL, в ней вы выписываете все железные подключения к вашему МК, там же выписываете функции получения состояния битов энкодера.
Всё.
В основной программе у вас должен быть один вызов инициализации всей периферии, а дальше - только вызовы функций, описанных в HAL.
Т. е. основная программа должна спросить состояние энкодера у функции getEncoderState() - и получить состояние.
Хотите - в условных значениях, хотите - вынесите в HAL.h маски портов энкодера..

Но основная программа не должна знать, что и куда подключено. Она работает с абстрактной периферией. А вся абстракция у вас превращается в физическое железо в одном месте - в паре HAL.c/HAL.h
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Аватара пользователя
bafomet911
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт янв 31, 2019 18:49:04
Откуда: Воронежская область

Re: помогите переписать код ардуино пожалуйста

Сообщение bafomet911 »

Спойлер[uquote="bafomet911",url="/forum/viewtopic.php?p=3593056#p3593056"]Завтра домой прибуду когда я, испробовать непременно придется:) асм сила светлая ещё как минимум по двум причинам.. меньше флеша занимаем, работаем быстрее-предсказуемее.. даже аврдудка почему-то шьёт быстрее.. наверное из-за разницы в размере хекс файла.

Добавлено after 52 minutes 15 seconds:
На асм коде то собаку не вырубали... И все жило как положено. Планирую посмотреть io.h .. найти там адреса регистров и проверить их на соответствие дата шиту. Си надо приводить в порядок, ибо на нем мне удобнее основную программулину писать. А на асме хочу попробовать драйвера делать.. как то так. Щас в любых моих исходниках структура такая:
main.c
main.h
железка_1.с
железка_1.h
железка_2.с
железка_2.h
В каждом хедере железок прототипы только на функции, которые вызываются из майн.с
Так и планирую в дальнейшем делать. Только файлы драйверов планирую реализовать на асм. Правдо с ним для начала надо разобраться.. и ещё пока не представляю как код си общается с кодом асм..[/uquote]
Функция опроса энкодера у меня почти так и называется: get_encoder_state(); хи хи
У нас с вами одинаковые предпочтения:) значит я шагаю в правильном направлении:)

Добавлено after 2 minutes 11 seconds:
Мне удобнее чтоб было одна_железка=одна_библиотечка, чтоб в новый проект не добавлять ненужное. Я так мыслю.
Изображение
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: помогите переписать код ардуино пожалуйста

Сообщение GoldenAndy »

ну я в своих проектах стараюсь выписывать абстракцию от железа.
хотя 99% проектов дальше одного экземпляра не пойдут.

а вот после выкладывания статьи про глупые часы на цветном дисплее с тачем на меге 32...
пришлось сделать вторую версию - на 128 меге. И перенос кода первой версии занял около получаса. Просто переписались определения портов да таймеры другие стали. Но основной код об этом не знает...
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Аватара пользователя
bafomet911
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт янв 31, 2019 18:49:04
Откуда: Воронежская область

Re: помогите переписать код ардуино пожалуйста

Сообщение bafomet911 »

Ништяк вам... Я пока не настолько обматерел.. с миром микроконтроллеров знаком полтора месяца.. стараюсь разбираться с самого низа , потому как интересно что к чему..
Изображение
Аватара пользователя
java
Держит паяльник хвостом
Сообщения: 962
Зарегистрирован: Вт янв 04, 2011 13:26:17
Откуда: Лен.Обл.

Re: помогите переписать код ардуино пожалуйста

Сообщение java »

Однако проблема - когда отключаю питание часы останавливаются, и начинают писать при подключении питания с того места(времени) когда были выключены. Значит пока нет питания часы стоят. Почему они не ходят от батарейки? Это часы бракованные или в скетче косяк?
P.S. Если батарейку вытащить часы полностью ануляются, значит батарейка работает.
Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: помогите переписать код ардуино пожалуйста

Сообщение OKF »

Тестер в хозяйстве есть? Батарейку проверить. Либо заведомо новую поставить.
Аватара пользователя
bafomet911
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт янв 31, 2019 18:49:04
Откуда: Воронежская область

Re: помогите переписать код ардуино пожалуйста

Сообщение bafomet911 »

Часы реального времени дают только импульсы, время считает контроллер.
Изображение
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: помогите переписать код ардуино пожалуйста

Сообщение Ivanoff-iv »

да, ну! а нафига им тогда цифровые интерфейсы?
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
bafomet911
Открыл глаза
Сообщения: 76
Зарегистрирован: Чт янв 31, 2019 18:49:04
Откуда: Воронежская область

Re: помогите переписать код ардуино пожалуйста

Сообщение bafomet911 »

А что за часы? У мну были ds3231.. или тут часы с тинькой на борту?
Тады ой...
Изображение
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: помогите переписать код ардуино пожалуйста

Сообщение Ivanoff-iv »

не знаю, как конкретно в этом проекте, но реалклок должны сами считать, а мозги могут обесточиваться, чтобы не тратиь батарейку
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
7seg
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Ср май 03, 2017 03:22:26

Re: помогите переписать код ардуино пожалуйста

Сообщение 7seg »

@goldenandy , еще раз повторюсь не стоит делать не именованные юнионы, а лучше их все же именовать. в будущем будет меньше проблем.
andrei23061996@gmail.com
.................................................................................................................
Аватара пользователя
java
Держит паяльник хвостом
Сообщения: 962
Зарегистрирован: Вт янв 04, 2011 13:26:17
Откуда: Лен.Обл.

Re: помогите переписать код ардуино пожалуйста

Сообщение java »

если вытащить батарейку, они начинают писать с 00 часов 2022 года, а когда снимается питание, не вытаскивая батарейки, потом они начинают писать с того времени, когда были обесточены.тоесть они просто останавливаются и не тикают, питание подали начали опять тикать.
часы вот эти Nano Data Logging Shield Deek-Robot ID 8105
https://ru.aliexpress.com/item/Nano-V3- ... 33edpZ5rVx
тогда нахрена им батарейка, если без питания они останавливаются?
Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: помогите переписать код ардуино пожалуйста

Сообщение GoldenAndy »

java писал(а):если вытащить батарейку, они начинают писать с 00 часов 2022 года, а когда снимается питание, не вытаскивая батарейки, потом они начинают писать с того времени, когда были обесточены
Внимательно просмотрите, как в вашей программе конфигурируются регистры микросхемы часов. В некоторых RTC нужно разрешать счет от батарейки при пропадании внешнего питания.
7seg писал(а):еще раз повторюсь не стоит делать не именованные юнионы
Это вы с ARV решайте, я их не использую, у меня с битовой арифметикой и так получается. Тем более, компилятор работу с этими битовыми юнионами все равно разворачивает в битовые операции...
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Аватара пользователя
java
Держит паяльник хвостом
Сообщения: 962
Зарегистрирован: Вт янв 04, 2011 13:26:17
Откуда: Лен.Обл.

Re: помогите переписать код ардуино пожалуйста

Сообщение java »

[uquote="goldenandy",url="/forum/viewtopic.php?p=3594740#p3594740"]Внимательно просмотрите[/uquote]
я так понимаю это в библиотеке смотреть нужно. Но там наверняка написано заморскими буквами, которых я не понимаю, может поможете?
Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: помогите переписать код ардуино пожалуйста

Сообщение ARV »

goldenandy писал(а):Это вы с ARV решайте, я их не использую, у меня с битовой арифметикой и так получается. Тем более, компилятор работу с этими битовыми юнионами все равно разворачивает в битовые операции...
ради битовых операций это не особо интересно, это лишь один из вариантов использования. главное, для чего это может пригодиться, так это чтобы избежать принудительного приведения типа указателей. но об этом не в этой теме и не в этот раз...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: помогите переписать код ардуино пожалуйста

Сообщение OKF »

java, вы какой то странный. Уже который день мусолите тему батарейки, вместо того что бы её просто заменить на заведомо новую. Регистры, заморские буквы...(
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: помогите переписать код ардуино пожалуйста

Сообщение Dimon456 »

java Припаяйте параллельно батареи 2 конденсатора, электролит и керамику, керамика обязательна.
Аватара пользователя
GoldenAndy
Поставщик валерьянки для Кота
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA
Контактная информация:

Re: помогите переписать код ардуино пожалуйста

Сообщение GoldenAndy »

Посмотрел ДШ на ваши часы DS1307, вроде в конфигурационном регистре нет бита, запрещающего счет времени при батарейном питании.
Так что проверяйте батарейку, ставьте конденсаторы.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Ответить

Вернуться в «AVR»