Это точно также касается и одного пина, и чего угодно. Один фиг необходима прослойка для привязки общего к частному. Поэтому и удивлен, что для одного пина есть, всего порта - нет.OKF писал(а):Ардуино может быть на чём хош. На AVR, PIC, STM, x86 даже, ага?
Arduino IDE в вопросах и ответах
Re: Arduino IDE в вопросах и ответах
Re: Arduino IDE в вопросах и ответах
[uquote="Martian",url="/forum/viewtopic.php?p=4395534#p4395534"]Поэтому и удивлен, что для одного пина есть, всего порта - нет.[/uquote]
Я как то интересовался этим вопросом, ответ такой, что это просто не нужно. И это касается не только ардуино, и не только AVR, а вообще всех МК.
Я как то интересовался этим вопросом, ответ такой, что это просто не нужно. И это касается не только ардуино, и не только AVR, а вообще всех МК.
Re: Arduino IDE в вопросах и ответах
это кто-то дал очень глупый ответ.
Re: Arduino IDE в вопросах и ответах
Конечно, можно работать напрямую без прослойки, что многие и делают. Только по красивому, в скетче нужно указывать с чем должно работать и стопориться через #error если это не так.
Re: Arduino IDE в вопросах и ответах
[uquote="Martian",url="/forum/viewtopic.php?p=4395546#p4395546"]это кто-то дал очень глупый ответ.[/uquote]Точно! Эти же дураки зачем-то "порвали" порты на многих МК. 
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1903
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Arduino IDE в вопросах и ответах
[uquote="OKF",url="/forum/viewtopic.php?p=4395523#p4395523"]Это не Ардуино.
...
uint8_t j = digitalRead(pin4)<<3 | digitalRead(pin3)<<2 | digitalRead(pin2)<<1 | digitalRead(pin1);
[/code][/uquote]
Это тоже не Arduino
.
Шучу. Может по-разному, даже на asm.
...
uint8_t j = digitalRead(pin4)<<3 | digitalRead(pin3)<<2 | digitalRead(pin2)<<1 | digitalRead(pin1);
[/code][/uquote]
Это тоже не Arduino
Код: Выделить всё
byte J = digitalRead(A4) << 3 | digitalRead(A3) << 2 | digitalRead(A2) << 1 | digitalRead(A1);Re: Arduino IDE в вопросах и ответах
Понятно, что скетч - это набросок. Поэтому можно писать как непопадя. И J для переменной можно с заглавной, и пины можно непосредственно в самом скетче указывать.) И так сойдёт. Вот только как с малого привыкнешь, так и дальше будешь писать.
Re: Arduino IDE в вопросах и ответах
Всем спасибо. Действительно, оптимальная реализация получилась путем: назначения переменной = считывание состояния каждого пина + склеивание результатов побитно. 
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1903
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Arduino IDE в вопросах и ответах
AVS95, не заблуждайтесь: способ не быстрее по скорости, не занимает меньше используемой памяти и не "параллелен" (все выходные данные не читаются вместе). Наверное второй способ только более понятен как действие для исполнение. Пишу это из-за того, что писали зачерненным шрифтом - в этом нет необходимости. Вероятно через какое-то время при писании кодов будете писать по первому варианту
.
Re: Arduino IDE в вопросах и ответах
А нужна ли скорость? А если нужна, то лучше оформить отдельно через макро или инлайн:
и в get_data() пиши что хош. Как тебе кажется быстреe.
Код: Выделить всё
#define get_data() PINC>>1 & B00001111
// а тогда:
uint8_t j = get_data();Re: Arduino IDE в вопросах и ответах
Здравствуйте.
Есть необходимость выставить предделитель входа захвата в таймере для bluepill, но в штатном пакете такой оказался не предусмотрен.
Судя по инету существует возможность портирования с CubeMX настроечных строк в arduino IDE, но как конкретно это можно сделать мне найти не удалось.
Не, я понимаю, что в таких случаях надо отказываться от ардуино, но в данном случае мне может оказаться проще поставить предделитель в отдельном корпусе.
По идее должна существовать возможность прямого управления регистрами, но из этой затеи у меня тоже ничего не вышло.
Есть у кого-нибудь опыт решения проблемы?
Есть необходимость выставить предделитель входа захвата в таймере для bluepill, но в штатном пакете такой оказался не предусмотрен.
Судя по инету существует возможность портирования с CubeMX настроечных строк в arduino IDE, но как конкретно это можно сделать мне найти не удалось.
Не, я понимаю, что в таких случаях надо отказываться от ардуино, но в данном случае мне может оказаться проще поставить предделитель в отдельном корпусе.
По идее должна существовать возможность прямого управления регистрами, но из этой затеи у меня тоже ничего не вышло.
Есть у кого-нибудь опыт решения проблемы?
Re: Arduino IDE в вопросах и ответах
Прямой доступ к регистрам вполне возможен и выполним (по крайней мере в отношении АВРок я им при необходимости пользуюсь).
Однако там надо учитывать и уже заложенное "ядро программы", чтобы не навредить.....
Т.е. использовать только не задействованные в ядре и применяемых функциях регистры.
Доступ как и в обычном Си через соответствующие заголовочники/ файлы описаний.
У портабле версии IDE их проще отыскать. Вероятно таковые есть и для STM платформ...

Однако там надо учитывать и уже заложенное "ядро программы", чтобы не навредить.....
Т.е. использовать только не задействованные в ядре и применяемых функциях регистры.
Доступ как и в обычном Си через соответствующие заголовочники/ файлы описаний.
У портабле версии IDE их проще отыскать. Вероятно таковые есть и для STM платформ...
Re: Arduino IDE в вопросах и ответах
[uquote="BOB51",url="/forum/viewtopic.php?p=4418691#p4418691"]Вероятно таковые есть и для STM платформ...
[/uquote]
Ну так вот на основе опыта общения с avr я и пытаюсь это сделать!
Напрашивается подключение библиотеки. Но какой?
К примеру, цитата из: https://github.com/stm32duino/Arduino_Core_STM32
STM32Cube MCU Packages including:
The HAL hardware abstraction layer, enabling portability between different STM32 devices via standardized API calls
Гугль-перевод:
Пакеты MCU STM32Cube, включая:
Уровень аппаратной абстракции HAL, обеспечивающий переносимость между различными устройствами STM32 с помощью стандартизированных вызовов API.
Что надо сделать, чтобы это работало?
Ну так вот на основе опыта общения с avr я и пытаюсь это сделать!
Напрашивается подключение библиотеки. Но какой?
К примеру, цитата из: https://github.com/stm32duino/Arduino_Core_STM32
STM32Cube MCU Packages including:
The HAL hardware abstraction layer, enabling portability between different STM32 devices via standardized API calls
Гугль-перевод:
Пакеты MCU STM32Cube, включая:
Уровень аппаратной абстракции HAL, обеспечивающий переносимость между различными устройствами STM32 с помощью стандартизированных вызовов API.
Что надо сделать, чтобы это работало?
Re: Arduino IDE в вопросах и ответах
Где-то в файлах компилятора есть файлы описания "io" и регистров.
Для АВРок в портале варианте я их могу указать, а вот для STM...там надо того, кто компиляторы STMок знает к поиску подключить...

Для АВРок в портале варианте я их могу указать, а вот для STM...там надо того, кто компиляторы STMок знает к поиску подключить...
Re: Arduino IDE в вопросах и ответах
Пишем:
Получаем:
'htim2' was not declared in this scope
--------------------
Пишем:
Получаем:
'timer_ic' was not declared in this scope
---------------------
Пишем (от балды):
Получаем:
'struct gpio_dev' has no member named 'BSRR'
----------------------
Пишем (от балды):
Получаем(от балды):
'struct gpio_dev' has no member named 'IDR'
Что он просит?
Код: Выделить всё
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;'htim2' was not declared in this scope
--------------------
Пишем:
Код: Выделить всё
timer_ic.TIM_ICPrescaler = TIM_ICPSC_DIV1;'timer_ic' was not declared in this scope
---------------------
Пишем (от балды):
Код: Выделить всё
GPIOA->BSRR = 0x20;'struct gpio_dev' has no member named 'BSRR'
----------------------
Пишем (от балды):
Код: Выделить всё
bool pin5 = !!(GPIOA->IDR & (1<<5)); // read pin via input data register.'struct gpio_dev' has no member named 'IDR'
Что он просит?
Re: Arduino IDE в вопросах и ответах
Не подключены соответствующие файлы описания в файле *.ino текущего проекта.
А где их искать и как подключать - то надо знать компилятор, применяемый для данной платформы.
Теоретически где искать я могу копнуть(для портале на ПК с ХР х32) по аналогии с АВРками..
Но у STM там дела чуток понавороченнее могут быть...

А где их искать и как подключать - то надо знать компилятор, применяемый для данной платформы.
Теоретически где искать я могу копнуть(для портале на ПК с ХР х32) по аналогии с АВРками..
Но у STM там дела чуток понавороченнее могут быть...
Re: Arduino IDE в вопросах и ответах
Нашел!!!
Запись должна быть вот такая:
Еще не знаю работает оно или нет, но ошибок при компиляции не дает.

Добавлено after 1 hour 3 minutes 39 seconds:
Не работает. Т.е. не делит.
Даю на вход 1000 Гц, но при любых значениях делителя измерение показывает всё те же 1000 Гц.
Запись должна быть вот такая:
Код: Выделить всё
TIMER2_BASE->CCMR1 |= (1<<2);Добавлено after 1 hour 3 minutes 39 seconds:
Не работает. Т.е. не делит.
Даю на вход 1000 Гц, но при любых значениях делителя измерение показывает всё те же 1000 Гц.
Re: Arduino IDE в вопросах и ответах
Программно можно задавать все кроме того, что задается комплектом фуз (это относительно АВРок - как у STM не ведаю).

Re: Arduino IDE в вопросах и ответах
Попробовал вместо штатного:
применить:
Работает... 
Код: Выделить всё
Timer1.setPrescaleFactor(72);Код: Выделить всё
TIMER1_BASE->PSC = 72;Re: Arduino IDE в вопросах и ответах
Задал этот вопрос буржуинам, а пока поставлю триггер.
В принципе есть и компромиссный вариант: каскадное включение таймеров, т.е. когда входной сигнал делится одним таймером, выход которого подается на второй, который и подсчитывает период.
В принципе есть и компромиссный вариант: каскадное включение таймеров, т.е. когда входной сигнал делится одним таймером, выход которого подается на второй, который и подсчитывает период.