Страница 3 из 3
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 27 окт 2021, 04:37
				 Di123
				неработает опять ничего  
 
в прошлый раз шим не работал 
а щас работает но теперь выход не работает 
Цифровые входы и выходы Ардуино1 (1).rar
на 10 не горит на 9 меняется
меняю на родной пин 10 всё нормально на 10 горит на 9 меняется
 
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 27 окт 2021, 19:45
				 aidar_i
				Di123 писал(а): 27 окт 2021, 04:37
неработает опять ничего  
 
в прошлый раз шим не работал 
а щас работает но теперь выход не работает 
Цифровые входы и выходы Ардуино1 (1).rar
на 10 не горит на 9 меняется
меняю на родной пин 10 всё нормально на 10 горит на 9 меняется
 
У Вас блоком ШИМ включаются таймеры на выводах 9 и 10. Нужно отключить ШИМ на выводе 10.
Хотя в параметрах есть, но похоже не работает. Нужно автора попросить вставить такую настройку, если только этот пин выбран ШИМ, то на других пинах этого таймера отключить таймер.
В штатных есть проверка этого. В свои блоки вставлять нет смысла, будет как штатный.
 Это делается заменой в:  TCCR1A=(1<<COM1A1) | (1<<COM1B0) | (1<<WGM11); B1 на В0 .
Если вставить эту строку в сетап, работает.
Отправлено спустя    8 часов 21 минуту 33 секунды:
Di123 писал(а): 27 окт 2021, 04:37
неработает опять ничего  
 
в прошлый раз шим не работал 
а щас работает но теперь выход не работает 
Цифровые входы и выходы Ардуино1 (1).rar
на 10 не горит на 9 меняется
меняю на родной пин 10 всё нормально на 10 горит на 9 меняется
 
В блоке GyverPWM есть ошибки в коде: PWM_set(<Выберите ~10( PWM ).PWM> ,<Duty
 D9 FastPWM 4_bit>); так во всех строках 10 пина.
Я добавил в блок отключение ШИМ в 9 и 10 пинах, если выбрали 10 пин цифровым, то Шим отключается в 9м и наоборот.
Испытайте:
Цифровые входы1 .flp
ВРЕМЕННО УДАЛИЛ
Блок ШИМ бета, недооформлен, на 8, 10, 12, 14, 15, 16 бит.
Сейчас ШИМ Гувера работает с моим цифровым выходом..
 
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 27 окт 2021, 20:51
				 Di123
				где то ошибка на 16 бит шим работает как вкл выкл 
2021-10-28_004815.png
Отправлено спустя     1 минуту 5 секунд:
либо теоретически блок ускорения не всостоянии пощитать такие мелкие импульсы
Отправлено спустя      52 секунды:
хотя нет я интегер поставил зря
 
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 27 окт 2021, 22:35
				 AlexCrane
				[ref]Di123[/ref], Исправил блоки GyverPWM
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 28 окт 2021, 00:22
				 Dryundel
				AlexCrane писал(а): 27 окт 2021, 22:35
Di123, Исправил блоки GyverPWM
 
Пошла движуха на форуме! 

Это радует.
 
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 28 окт 2021, 06:18
				 aidar_i
				Создавая блоки на новом редакторе, осознал, что он, в некотором роде, может выступать (и выступает) как библиотека, которая не занимает память МК.
Вообще думаю, если у нас  программа не для программистов с кодом, почему генерируемый код в с++? Какая разница человеку , что там?
Я создаю блоки этой темы (хотя есть продвинутые блоки наших форумчан по этой теме ), чтобы посмотреть,  что в итоге получается.  Мне кажется , красиво получается.
Я пытался заменить блоками входа выхода вот это: 
https://github.com/arduino/ArduinoCore- ... _digital.c
Таким образом язык программирования FLProg появляется!
 
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 28 окт 2021, 20:01
				 Di123
				[ref=#000080]aidar_i[/ref], а ваш шим я так понял самый быстрый сейчас ? 
тоесть если мне надо на 16 бит крутануть выходной сигнал от 0 до 65535 шагов то каждый шаг он выполнит на 3 мкс быстрее итого 3*65535=192мс уменьшится цыкл программы в диапазоне момента нарастания шима ?
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 28 окт 2021, 20:17
				 aidar_i
				Di123 писал(а): 28 окт 2021, 20:01
[ref=#000080]aidar_i[/ref], а ваш шим я так понял самый быстрый сейчас ? 
тоесть если мне надо на 16 бит крутануть выходной сигнал от 0 до 65535 шагов то каждый шаг он выполнит на 3 мкс быстрее итого 3*65535=192мс уменьшится цыкл программы в диапазоне момента нарастания шима ?
 
Испытайте, блок ШИМ на 16 бит работает, 14, 15 еще нужно подкорректировать.
 
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 28 окт 2021, 20:37
				 Di123
				[ref=#000080]aidar_i[/ref], да работает на 16 15 14 и у алекса тоже теперь норм 
но под светодиодную подсветку в любом случае брать не выше 12 бит ибо частота там приемлемая для здоровья глаз 
у вас для битов маленькая частота выбора возможности
Отправлено спустя     1 минуту 17 секунд:
ну в край 13 бит на фасте ещё можно
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 28 окт 2021, 23:07
				 aidar_i
				Di123 писал(а): 28 окт 2021, 20:37
у вас для битов маленькая частота выбора возможности
 
Москва тоже строилась не сразу! 
Отправлено спустя    2 часа 8 минут 19 секунд:
ЗДЕСЬ  добавил на 8, 10, 12 бит. Добавил проверку МК и выводов.
 
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 29 окт 2021, 14:45
				 aidar_i
				ШИМ на 9, 10, 11 выводах
Цифровые выходы ШИМ Ардуино.flp
Отправлено спустя     7 минут 13 секунд:
[ref]Di123[/ref],  сможете проверить?
 
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 29 окт 2021, 15:56
				 Di123
				[ref=#000080]aidar_i[/ref], перемаргивают 
а что там не так могло быть 
в следующий раз когда будете заниматься построением переменных у щетчика там есть галочка сброса в 0
2021-10-29_194813.png
 
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 29 окт 2021, 17:18
				 aidar_i
				Di123 писал(а): 29 окт 2021, 15:56
[ref=#000080]aidar_i[/ref], перемаргивают 
а что там не так могло быть 
 
В примере, 11я уменьшается ступеньчато, 9,10 увеличиваются ступенчато. На старте горит светодиод на 11 пине, он начинает тухнуть, а на 9,10м начинает загораться. Проверил, работает.
Про галочку спасибо! Почему то по старинке делал.
Отправлено спустя     18 минут 38 секунд:
Пример с плавным загоранием светодиодов
Цифровые выходы ШИМ Ардуино1.flp
 
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 29 окт 2021, 17:30
				 Di123
				работает 
только константа ставится 256 это граница до которой надо дойти она не включительна
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 29 окт 2021, 17:39
				 aidar_i
				Спасибо! Следующим буду аналоговый вход делать. Потом решу как блоки скомпоновать, пока изучаю.
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 01 ноя 2021, 20:36
				 aidar_i
				Блок для Таймер 1 AVR (АТМега328).
Таймер 1 (ШИМ).flp
 
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 30 ноя 2021, 14:05
				 aidar_i
				Кто в таймерах разбирается протестируйте.
Кто не очень, используйте как ШИМ выходы на 9 и 10 выводах. Кому нужно разрядность до 16 бит можно использовать 14 режим..
Этот блок можно использовать для изучения таймера1, вписал все 15 режимов, разрядность от 8 до 16 бит, режимы состояния выходов. В описаниях режимов использовал Гугл перевод из даташита. Пробовал прерывания тоже вписать , но блок получается посложнее, довести до конца не хватило времени, пока их убрал.
Даташит на Атмега328.
DOC001549488.pdf
Книга Евстифеева
Evstifeev-avr-tiny-and-mega.pdf
Настройка таймеров, режимы из даташита
Настройки таймеров из даташита.docx
 
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 13 июл 2022, 12:04
				 Dryundel
				[ref=#ff8000]aidar_i[/ref], нашел я интересный универсальный код для быстрой работы с пинами. 
Подрезал у Гайвера.  

  Может пригодиться.
[spoiler=Быстрый digitalWrite]
Код: Выделить всё
//===Быстрый digitalWrite=====
    void fastDigitalWrite(const uint8_t pin, bool val) {
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
        if (pin < 8) bitWrite(PORTD, pin, val);
        else if (pin < 14) bitWrite(PORTB, (pin - 8), val);
        else if (pin < 20) bitWrite(PORTC, (pin - 14), val);
#elif defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny13__)
        bitWrite(PORTB, pin, val);
#else
        digitalWrite(pin, val);
#endif
    } 
[/spoiler]
 
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 16 июл 2022, 21:02
				 aidar_i
				Dryundel писал(а): 13 июл 2022, 12:04
[ref=#ff8000]aidar_i[/ref], нашел я интересный универсальный код для быстрой работы с пинами. 
Подрезал у Гайвера.  

  Может пригодиться.
[spoiler=Быстрый digitalWrite]
Код: Выделить всё
//===Быстрый digitalWrite=====
    void fastDigitalWrite(const uint8_t pin, bool val) {
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
        if (pin < 8) bitWrite(PORTD, pin, val);
        else if (pin < 14) bitWrite(PORTB, (pin - 8), val);
        else if (pin < 20) bitWrite(PORTC, (pin - 14), val);
#elif defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny13__)
        bitWrite(PORTB, pin, val);
#else
        digitalWrite(pin, val);
#endif
    } 
[/spoiler]
 
Спасибо!
У меня тут реализовано прямое обращение портам, быстрее только ассемблер или машинный код 

 
			 
			
					
				Работа с портами ввода и вывода Ардуино через регистры.
				Добавлено: 17 июл 2022, 00:03
				 Dryundel
				aidar_i писал(а): 16 июл 2022, 21:02
Спасибо!
У меня тут реализовано прямое обращение портам, быстрее только ассемблер или машинный код
 
Пожалуйста. Это то же самое. Только обращение организовано с помощью скриптов, которые ну никак не длиннее и не хуже чем рукописный код. Попробуй потестируй 
fastDigital Read / Write и сравни. А удобство просто несравнимое!
Отправлено спустя    2 часа 31 минуту 44 секунды:
[ref=#ff8000]aidar_i[/ref], вот Вам и доказательство абсолютной идентичности обращения к портам. 
ТЕСТ