Lihouzov

Members
  • Публикации

    177
  • Зарегистрирован

  • Посещение

Репутация

11 Обычный

1 подписчик

О Lihouzov

  • Звание
    Осваивающийся

Информация

  • Город
    Абакан

Электроника

  • Стаж в электронике
    10-20 лет

Посетители профиля

1 402 просмотра профиля
  1. ld / st работают, только необходимо адрес указанный в файле описания контроллера смещать на 0x20
  2. Добрый день, можно ли получить доступ к портам ввода-вывода не используя asm команды IN? OUT? Например я храню в регистре адрес порта, как используя значение регистра получить доступ к порту?
  3. Ядро обновил, тест производительности предыдущего и текущего ядра:
  4. Всем добрый день, комментариев много- отвечу коротко. Программа не поможет в понимании микроконтроллеров, если только не влезать в код и не добавлять блоки. Программа поможет реализовать алгоритмы автоматизации используя язык FBD (стандартный язык автоматизации). На предприятиях вы не столкнетесь с привычным Си, Pascal или ассемблером, там будет ST, FBD, .. итд, а специалисты со знанием этих языков будут востребованы. Для примера. Пару лет назад ко мне обратился знакомый радиолюбитель (мог писать код для микроконтроллера) с задачей автоматизации мелкого предприятия. Ему предложили хорошую подработку за автоматизацию, он разобрался в тех. процессе и перед ним встала задача реализации. Он решил сделать на микроконтроллере, но после разговора со мной выбрал промышленный контроллер. Первые несколько дней он ругался и плевался на эти языки, но спустя неделю освоил и с легкостью решил задачу и был доволен результатом. Сделал оптимизацию кода:
  5. Критиковать- не создавать, знаний не надо. Еще на начальном пути, посмотрите начало ветки, говорилось что невозможно.. как впихнуть в несколько килобайт. Сейчас десяток блоков влазит в килобайт. приемлемая производительность. Пытаюсь сделать еще оптимальней, обращаюсь, как я думал к экспертам, а оказывается они только и демагогией и могут заниматься!
  6. Делаю оптимизацию кода, получил следующее, на примере конфигурации: Лист 1.jpg Имеетя 7 блоков, причем кода PinD4 и PinD7, а ткже PinB6 и PinB7- идентичны. В результате сборки программа вложит 5 исполнительных подпрограмм: FBD0_run (для PinD4 и PinD7) FBD1_run (для RS триггер) FBD2_run (для NOT) FBD3_run (для AND) FBD4_run (для PinB6 и PinB7) Подпрограммы завершаются командой ret. Подпрограммы используют указатели X на оперативную память и Y- на флеш память. В цикле программы необходимо вызвать семь функций: rcall FBD0_run (для PinD4) rcall FBD0_run (для PinD7) rcall FBD1_run (для RS) rcall FBD2_run (для NOT) rcall FBD3_run (для AND) rcall FBD4_run (для PinB6) rcall FBD4_run (для PinB7) При этом, у каждого блока имеется свои данные оперативной и флэш памяти, эти адресазаведомо известны. Для флеш: FBD0_flash: db 00, 00, .. (данные PinD4) FBD1_flash: db 00, 00, .. (данные PinD7) FBD2_flash: db 00, 00, .. (данные RS) FBD3_flash: db 00, 00, .. (данные NOT) FBD4_flash: db 00, 00, .. (данные AND) FBD5_flash: db 00, 00, .. (данные PinB6) FBD6_flash: db 00, 00, .. (данные PinB7) Для оперативной: FBD0_ram (адрес на данные в оперативной памяти для PinD4) FBD1_ram (адрес на данные в оперативной памяти для PinD7) FBD2_ram (адрес на данные в оперативной памяти для RS) FBD3_ram (адрес на данные в оперативной памяти для NOT) FBD4_ram (адрес на данные в оперативной памяти для AND) FBD5_ram (адрес на данные в оперативной памяти для PinB6) FBD6_ram (адрес на данные в оперативной памяти для PinB7) По факту не все блоки используют оперативную память, в приведенном примере только RS триггер использует 1 байт. С учетом предварительной установки адреса, получаю: ldi xl, low(FBD0_ram) ldi xh, high(FBD0_ram) ldi yl, low(FBD0_flash*2) ldi yh, high(FBD0_flash*2) rcall FBD0_run (для PinD4) ldi xl, low(FBD1_ram) ldi xh, high(FBD1_ram) ldi yl, low(FBD1_flash*2) ldi yh, high(FBD1_flash*2) rcall FBD0_run (для PinD7) ... В итоге расходую по 5 комнд (10 байт памяти) для исполнения одного блока. Как сделать оптимальней?
  7. Начало работы Жду заинтересованных людей!
  8. Сделать оптимальное решение, а потом и перенести на 32 битные- лишь бы было желание!
  9. Всем привет, я отстранился от проекта пару лет назад, тем не менее проект жив, многие пользуются и благодарят за проделанную работу. Очень приятно слышать поддержку и это подталкивают к дальнейшему развитию проекта. Еще в 2015 г., я видел путь к совершенствованию кода исполнительного ядра микроконтроллера, тем не менее, даже полученный результат превзошел мои ожидания: алгоритм из десятка блоков компилируется в килобайт кода. Совершенствование кода, позволит добиться снижение размера и повышения производительности кода. Хочу найти 2-3 заинтересованных человека со знанием архитектуры и ассемблера, спустя пару месяцев получим результат, благодарностью будет бесценный опыт и благодарность пользователей. Кто желает участвовать, пишите.
  10. Вы проект сделали? Могу помочь.
  11. Да действительно sbi DDRB,4 лучше. Проверил в живую работает, второй раз меня подводит протеус.
  12. Не могу решить проблему, прошу помощи специалистов. Микроконтроллер ATtiny85 Пытаюсь изменять состояние OC1B (pin B4) по таймеру 1. В avrstudio в симуляторе вижу что в регистре PINB бит 4 меняет свое состояние по таймеру, а в регистре PORTB бит 4 не изменяет своего состояния. DDRB бит 4 записал 1. в инициализации: rcall Read_cfg ;Читаем TCCR1 UOUT TCCR1, Addr_Data ;Настраиваем делитель (0x8B) UIN A, DDRB ;Настраиваем вывод PB4 вывод данных ori A, 1<<DDB4 ;Настраиваем вывод PB4 вывод данных UOUT DDRB, A ;Настраиваем вывод PB4 вывод данных В основном цикле: rcall Read_cfg_Load_Uz1 ;вход sp COM Uz1L UOUT OCR1B, Uz1L UOUT OCR1C, Uz1L rcall Read_cfg_Load_Uz1 ;вход en clr A sbrc Uz1L, 0 ori A, 1<<COM1B0 ldi C, LOW(~((1<<COM1B0)+(1<<COM1B1))) ;Маска выделения битов UIN B, GTCCR ;Настраиваем привязку к PB4 and B, C ;Настраиваем привязку к PB4 or B, A ;Настраиваем привязку к PB4 UOUT GTCCR, B ;Настраиваем привязку к PB4 В итоге не вижу изменения состояния PortB4 (OC1B) от таймера. Что я не настроил?
  13. Добавил новый блок "логический фильтр".
  14. Примеры Простых Проектов (Без Написания Кода).

    Не смог разобраться как привязать генератор к событию. Использовал еще один контроллер для имитации оборотов двигателя: Программа имитации оборотов: