Обсуждаем контроллеры компании Atmel.
Ответить

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

Сб мар 16, 2019 10:55:21

bafomet911 писал(а):Теперь вот хочу с ассемблером разобраться, так как в си проблематично работать с одним битом регистра...

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


Или вон ARV в соседней теме предлагает битовые поля через юнионы делать...
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++;

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

Сб мар 16, 2019 12:17:05

О как... Надо на досуге как то попробовать. А то тут проблемка нарисовалась как из регистра одновременно два бита рядом стоящих получать. Щас получаю через битовые маски типа pind&0b00000011 а ну как в заголовочном файле драйвера энкодера кто то пины поменяет!? Придется и функцию переделывать..

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

Сб мар 16, 2019 19:53:29

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

Но основная программа не должна знать, что и куда подключено. Она работает с абстрактной периферией. А вся абстракция у вас превращается в физическое железо в одном месте - в паре HAL.c/HAL.h

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

Сб мар 16, 2019 20:34:50


Функция опроса энкодера у меня почти так и называется: get_encoder_state(); хи хи
У нас с вами одинаковые предпочтения:) значит я шагаю в правильном направлении:)

Добавлено after 2 minutes 11 seconds:
Мне удобнее чтоб было одна_железка=одна_библиотечка, чтоб в новый проект не добавлять ненужное. Я так мыслю.

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

Сб мар 16, 2019 22:19:05

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

а вот после выкладывания статьи про глупые часы на цветном дисплее с тачем на меге 32...
пришлось сделать вторую версию - на 128 меге. И перенос кода первой версии занял около получаса. Просто переписались определения портов да таймеры другие стали. Но основной код об этом не знает...

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

Сб мар 16, 2019 22:34:51

Ништяк вам... Я пока не настолько обматерел.. с миром микроконтроллеров знаком полтора месяца.. стараюсь разбираться с самого низа , потому как интересно что к чему..

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

Пн мар 18, 2019 09:12:56

Однако проблема - когда отключаю питание часы останавливаются, и начинают писать при подключении питания с того места(времени) когда были выключены. Значит пока нет питания часы стоят. Почему они не ходят от батарейки? Это часы бракованные или в скетче косяк?
P.S. Если батарейку вытащить часы полностью ануляются, значит батарейка работает.

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

Пн мар 18, 2019 09:31:31

Тестер в хозяйстве есть? Батарейку проверить. Либо заведомо новую поставить.

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

Пн мар 18, 2019 09:54:12

Часы реального времени дают только импульсы, время считает контроллер.

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

Пн мар 18, 2019 10:09:18

да, ну! а нафига им тогда цифровые интерфейсы?

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

Пн мар 18, 2019 10:31:26

А что за часы? У мну были ds3231.. или тут часы с тинькой на борту?
Тады ой...

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

Пн мар 18, 2019 12:11:14

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

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

Пн мар 18, 2019 15:46:58

@goldenandy , еще раз повторюсь не стоит делать не именованные юнионы, а лучше их все же именовать. в будущем будет меньше проблем.

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

Пн мар 18, 2019 15:49:46

если вытащить батарейку, они начинают писать с 00 часов 2022 года, а когда снимается питание, не вытаскивая батарейки, потом они начинают писать с того времени, когда были обесточены.тоесть они просто останавливаются и не тикают, питание подали начали опять тикать.
часы вот эти Nano Data Logging Shield Deek-Robot ID 8105
https://ru.aliexpress.com/item/Nano-V3- ... 33edpZ5rVx
тогда нахрена им батарейка, если без питания они останавливаются?

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

Пн мар 18, 2019 18:32:37

java писал(а):если вытащить батарейку, они начинают писать с 00 часов 2022 года, а когда снимается питание, не вытаскивая батарейки, потом они начинают писать с того времени, когда были обесточены

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

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

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

Пн мар 18, 2019 20:40:00

Внимательно просмотрите

я так понимаю это в библиотеке смотреть нужно. Но там наверняка написано заморскими буквами, которых я не понимаю, может поможете?

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

Пн мар 18, 2019 21:29:04

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

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

Вт мар 19, 2019 06:37:55

java, вы какой то странный. Уже который день мусолите тему батарейки, вместо того что бы её просто заменить на заведомо новую. Регистры, заморские буквы...(

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

Вт мар 19, 2019 07:47:11

java Припаяйте параллельно батареи 2 конденсатора, электролит и керамику, керамика обязательна.

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

Вт мар 19, 2019 09:11:09

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