Jump to content
Max1201

Реверс двигателя (ATMega16) - AVR

Recommended Posts

Код с помощью которого двигатель вращается в одном направлений по часовой стрелке.
А нужно "составить программу на языке ассемблера для реверсивного управления электродвигателем постоянного тока". так написано в заданий
Но я думаю можно новую не писать, а можно изменить эту так что бы двигатель вращался в одну сторону и потом в другую, наверно так. Помогите, а то я вообще не понимаю этот ассемблер(( 

;* На выходе OC1A МК АТmega16 получаем выходные импульсы
;* с частотой 50 Гц и коэффициентом заполнения g=0,025.
;* Тактовая частота MK AVR: 4 МГц
.nolist
.include"m16def.inc"
.list
 
.def STAT = r15                 ;Регистр для хранения состояния главной программы
.def WorkH = r16                ;Рабочий регистр для главной программы
.def WorkI = r17                ;Рабочий регистр для прерывания от таймера
.def AddLo = r18                ;Вспомогательный регистр для прибавления константы
.equ Impuls = 9000              ;Число тактовых сигналов, соответствующее импултсу
.equ Pause = 1000               ;Число тактовых сигналов, соответствующее паузе
 
Reset:
rjmp Initial                    ;Переход к части инициализации
reti                            ;Внешнее прерывание 0 (не используется)
reti                            ;Внешнее прерывание 1 (не используется)
reti                            ;Прерывание по захвату (не используется)
Timer1CompA:                    ;Прерывание CompareA для ATmega16
in STAT,SREG                    ;Сохраняем флаги главной программы
in WorkI,TCCR1A                 ;Регистр управления А счетчика Т/С1
sbrs WorkI,COM1A0               ;Пропускаем следующую команду, если COM1A0 = 1
rjmp TC1                        ;Пропускаем следующую команду, если COM1A0 = 0
cbr WorkI,1<<COM1A0             ;При следующем прерывании OC1A -> 1
out TCCR1A,WorkI                ;Сохраняем новое значение
in AddLo,OCR1AL                 ;Младший байт OCR1A
subi AddLo,Low(-Impuls)         ;Прибавляем младший байт значения импульса
in WorkI,OCR1AH                 ;Старший байт OCR1A
sbci WorkI,High(-Impuls)        ;Прибавляем старший байт значения импульса
rjmp IntEnde                    
TC1:                            
sbr WorkI,1<<COM1A0             ;При следующем прерывании OC1A -> 1         
out TCCR1A,WorkI                ;Сохраняем новое значение
in AddLo,OCR1AL                 ;Младший байт OCR1A
subi AddLo,Low(-Pause)          ;Прибавляем младший байт значения длительности импульса
in WorkI,OCR1AH                 ;Старший байт OCR1A
sbci WorkI,High(-Impuls)        ;Прибавляем старший байт значения длительности импульса
IntEnde:                        
out OCR1AH,WorkI                ;Назад - старший байт нового значения
out OCR1AL,AddLo                ;Назад - младший байт нового значения
out SREG,STAT                   ;Восстанавливаем старые флаги
reti                            ;Выход из обработки прерывания CompareA
 
Initial:                        ;Инициализация регистра ввода/вывода
ldi WorkH,High(RamEnd)          
out sph,WorkH                   
ldi WorkH,Low(RamEnd)           
out spl,WorkH                   ;Инициализируем стек
clr WorkH                       ;Все разряды = 0
out PortD,WorkH                 ;Вывод в порт D
ldi WorkH,$20                   ;Разряд 5 - в 1, остальные - в 0
out DDRD,WorkH                  ;OC1A (PD5) - выход, остальные входы
ldi WorkH,High(Pause)           ;Старший байт значения паузы
out OCR1AH,WorkH                ;в старший байт регистра сравнения А
ldi WorkH,Low(Pause)            ;Младший байт значения паузы
out OCR1AL,WorkH                ;в младший байт регистра сравнения А
ldi WorkH,$C0                   ;OC1A -> 1
out TCCR1A,WorkH                ;Сохраняем новое значение
ldi WorkH,$02                   ;Входной такт Т/С1 = такт сист. синхр./8
out TCCR1B,WorkH                ;Запускаем Т/С1
ldi WorkH,$40                   
out TIMSK,WorkH                 ;Разрешаем прерывание CompareA
sei                             ;Общее разряшение прерываний (разряд I)
Haupt:                          
rjmp Haupt                      ;Главная часть программы: ожидаем возникновения прерывания

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

d50I1pc3RQg.jpg

e-5ynSa8oWw.jpg

EsW2drcSpUE.jpg

UqMa3Upkoz4.jpg

В методичке это 4 лаба, там программа не та но теория та что и вновой методичке

lab_rab_MK_AVR.pdf

Share this post


Link to post
Share on other sites
7 минут назад, Max1201 сказал:

я вообще не понимаю этот ассемблер

Возьмите другой, который понимаете.

Заплатите преподу, и Вам ни один язык программирования не нужен будет. Или буквари в зубы и учиться.

Share this post


Link to post
Share on other sites

Изготовление 2-х слойных плат от 2$, а 4-х слойных от 5$!

Быстрое изготовление прототипа платы всего за 24 часа! Прямая доставка с нашей фабрики!

Смотрите видео о фабрике JLCPCB: https://youtu.be/_XCznQFV-Mw

Посетите первую электронную выставку JLCPCB https://jlcpcb.com/E-exhibition чтобы получить купоны и выиграть iPhone 12, 3D-принтер и так далее...

12 минуты назад, Max1201 сказал:

 

Код с помощью которого двигатель вращается в одном направлений по часовой стрелке.

 

Двигатель вращается без помощи кода, по крайней мере тот, что на стенде на фото. Твой код, видимо, для шагового двигателя. У тебя коллекторный двигатель через H-мост, управление двумя выводами, на них 1-0 или 0-1 в зависимости от нужного направления. Писать надо с нуля, и полное задание тоже надо знать!

Share this post


Link to post
Share on other sites

Безмостовые ККМ для 99% КПД!

Схема коррекции коэффициента мощности (ККМ) на основе так называемого «тотемного столба» (Totem Pole) обладает минимально возможными потерями и потенциально может обеспечить самые жесткие требования к энергоэффективности источников питания. Компания Wolfspeed представляет референсную разработку – плату ККМ CRD-02AD065N на базе собственных карбид-кремниевых MOSFET и диодов с наилучшими в отрасли характеристиками.

Подробнее

6 часов назад, Max1201 сказал:

Помогите, а то я вообще не понимаю этот ассемблер

Для чего же вы тогда учитесь? Чтобы потом штаны в офисе протирать? Смените профессию, пока не поздно.

Share this post


Link to post
Share on other sites

Гибридные IGBT - сила Si и SiC в одном корпусе!

Компания Infineon представила новые гибридные IGBT-транзисторы на 650 В, которые сочетают в себе преимущества технологий TRENCHSTOP и CoolSiC. Использование SiC-диода Шоттки позволяет значительно расширить возможности IGBT и снизить уровень энергии, необходимой для включения транзистора (Eon), а также уменьшить потери на переключение.

Подробнее

Код ужасен. Фотматирование отсутствует, осмысленные комментарии тоже.

Цитата

Reset:

rjmp Initial ;Переход к части инициализации

reti ;Внешнее прерывание 0 (не используется)

reti ;Внешнее прерывание 1 (не используется)

reti ;Прерывание по захвату (не используется)

Timer1CompA: ;Прерывание CompareA для ATmega16

in STAT,SREG

Зачем здесь метка RESET? Да еще практически синоним метки Initial. По адресу Timer1CompA идет не переход на обработчик, а сразу его код. А вдруг понадобится добавить прерываний? А где записанные явным образом адреса векторов (.org OC1Aaddr + rjmp Tim1_CompA_vect).

Главный вопрос - зачем тут вообще используется таймер?

8 часов назад, Max1201 сказал:

ldi WorkH,$40

out TIMSK,WorkH

За такое надо по рукам бить. Тем более что в других местах вместо магических чисел используются нормальные сдвиги.

8 часов назад, Max1201 сказал:

subi AddLo,Low(-Pause) ;Прибавляем младший байт значения длительности импульса

А почему в коде - Pause?

.

Проще переписать с нуля под конкретное ТЗ чем переделывать ЭТО.


Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites

Вебинар «Параметры выше, цена ниже. Обновление в линейке AC/DC- и DC/DC-преобразователей MORNSUN» (26.01.2021)

Приглашаем 26 января на бесплатный вебинар, посвящённый преимуществам и отличиям новых источников питания и DC/DC-преобразователей Mornsun. На вебинаре будут рассмотрены изолированные и неизолированные DC/DC-преобразователи последнего, четвертого, поколения (R4) и компактные модульные источники питания второго и третьего поколений (семейства LS/R3 и LD/R2) на плату. Рассмотрим новую группу продукции – встраиваемые источники питания в кожухе.

Подробнее

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

jnA65ZDHUPA.jpg

uZTjZnniMSw.jpg

Share this post


Link to post
Share on other sites

@Max1201 для таких заявок у нас есть раздел "Вакансии и разовая работа".

http://forum.cxem.net/index.php?/forum/15-вакансии-и-разовая-работа/


Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Share this post


Link to post
Share on other sites
16 часов назад, Max1201 сказал:

я вообще не понимаю этот ассемблер((

Хм... А почему бы это не сказать преподу и не написать прогу на том, что понимаете ? Думаю, он пойдёт на встречу.
 

Share this post


Link to post
Share on other sites

Он наверное ни на чем не понимает в программировании .


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites
.include "m16def.inc"
.equ ROTATE_DIRECTION = 1

sbi DDRD,4
sbi DDRD,5

.if ROTATE_DIRECTION
  sbi PORTD,4
  cbi PORTD,5
.else
  cbi PORTD,4
  sbi PORTD,5
.endif

CYCLE:
  rjmp CYCLE

Вот как ЭТО можно исправить: стереть к двоичным демонам и написать по-нормальному.


Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites

Тема работы 

Цитата

функционирование таймерного модуля в МК

 


Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Share this post


Link to post
Share on other sites

Выход на схеме на мост с OCB1A ,  OCB1B ,  чтоб не только направление,  но и скорость задавать .

Тут надо студенту книжку покупать по АВР и читать . Судя по повороту  схемы не только по АВР .

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Помогите опознать транзистор, поиск в интернете не дал результатов. Маркировка N65KAE.
    • Возможно что еще проблема в библиотеках. Какая-то из них разрослась в новой версии и места уже не хватает.
    • Это всё-таки не техническая наука. Наверное, ближе к формальной, как и математика. Я разговаривал с математиком. Он кроме математики больше ничем не интересуется. Но это было ещё до вброса о лунной афере. Химики тоже нифига ничего не знают ни о космосе, ни о Аполлоне, хотя это естественная наука.  А вот люди инженерных профессий, если даже ничего и  не слышали о лунных фальсификациях, то очень быстро ориентируются в предоставленной информации противоборствующих сторон и разоблачают сторонников лунной аферы. Я для этого прикидывался дилетантом и выкладывал самые распространенные "факты" обмана, с просьбой разобраться и разьяснить положение дел. Как правило, почти никто не вникал в тонкости предоставленной информации от НАСА. Все довольно быстро заостряли своё внимание и замечали фальшивки из длинного списка  "фактов обмана" и после двух - трех разоблаченных фейковых доводов, остальные уже не рассматривали, вынося окончательный вердикт. ))  Среди астрономов вообще нет "немогликов". И нет таких, кто бы не знал о полете Аполлона с высадкой на Луну. Ну это и понятно, почему. Я утверждал именно о вранье, а не о заблуждении.  А какое может быть у наших  специалистов заблуждение по Аполлону??? Это люди, далекие от космонавтики могут в чем то заблуждаться, а у наших академиков и докторов подобные заблуждения исключены. Точно!  Это философское словечко встречается ещё и в математике.   Да какая разница, имела или не имела редакционная коллегия полномочий выступать авторами ?????  Ты хочешь сказать, что в этой книге, отредактированной академиками и докторами, описана конструкция Сатурна,  Аполлона, которые не летали на Луну и ровера, который не бороздил просторов её поверхности??    Остальное, чистой воды демагогия. Это не моё. В книге имеются все ссылки на литературу.
    • Мдя... ИИ не обманешь. Любимый вами Яндекс видимо хорошо вас изучил и выдаёт то, что вам действительно надо. Смиритесь и не дёргайтесь.
    • Питать сетевую ламповую радиолу от батареек - глупость и утопия. Так как аутентичный внешний вид уже похерен  (), то никакой антикварной ценности аппарат не представляет. Поэтому предлагаю следующее: Найти на месте специалиста с руками и головой, который удалит из неё ламповое шасси и внедрит вместо него схему современного тюнера с усилителем, которая потребляет в десятки раз меньше энергии, да и ловит радиостанции куда лучше. Органы управления и переднюю панель при этом сохранить. Заодно и внутри куча места освободится, хоть автомобильный аккумулятор можно будет засунуть.

  • Переключатель на ключе

  • Similar Content

    • By Обычный Человек
      Микроконтроллер ATmega328p, внешний кварц 16МГц. Компилятор avr-gcc с оптимизацией O1

      Написал код для управление шаговым двигателем. Работает так: требуемая скорость задается переменной STP1_ReqSpeed, дальше с частотой 100Гц срабатывает таймер TIM0, который высчитывает с какой частотой надо подавать сигналы на вход шагового драйвера. TIM1 работает в режиме частотно импульсной модуляции и по прерыванию меняет значение пина на противоположное.

      Управление работает, скорость регулируется, но по какой то причине случаются пропуски шагов. Чаще всего во время ускорения. Количество пропусков от 0 до 4, обычно 2-3, длятся 32мс.

      Из кода вырезал неиспользуемое. Заменить прерывания на аппаратный ШИМ возможности нет. Как убрать эти пропуски?
      Осциллограммы:
       
       
    • By Артур Измаилов
      1.Создать схему в которой два светодиоды загораются в следующей последовательности:  1 и 2, 2 и 3, 3 и 4, …, 15 и 16, 1 и 2 и т.д. (т.е. создается эффект движения двух светодиодов).
      Дано условие выше. Решение задачи нужно представить в Proteus. Код для программирования пишу в AtmelStudio 7. Схему собрал в Proteus. Вывел 16 светодиодов через 2 порта (Порт B и Порт D). МК использовал ATMEGA 8 вариации в корпусе DIP с 28 ножками (SPDIL28). 
      До этого смог написать схему, чтобы работали светодиоды в последовательности 1.2.3.4.5....16.1.2.3.4 и тд. Делал через оператор FOR. Однако с этим кодом начались проблемы. Помогите пожалуйста. 
      Нижу представил изображение кода. 
      Заранее спасибо!
       

    • By Lisitsin
      Собираем компьютер ZX Spectrum на микроконтроллерах AVR своими руками!
      Проект открытый, все исходники и информация проекта по ссылке
      https://yadi.sk/d/9S2S0ZmNqsLykQ
      Проект печатной платы выполнен в PCAD-2006, программное обеспечение разработано в AVRStudio  4b401
      Здесь отвечу на все возникающие вопросы и помогу со сборкой и запуском
    • By O5-14
      По поводу этого https://cxem.net/mc/mc220.php девайса. Как напоминалка паролей думал сделать, только в моих краях 1604 нету( Под wg12864 нет случаем модификации ? 
      И что такое значит "Текстовые файлы должны быть в обычном txt формате и без форматирования" - первая часть понятна. А без форматирования ? Одна длинная строка ? Пробелы-то хоть можно ?
    • By Karl-Ieronim
      Коллеги, всем привет. 
      Увидел вот такой проект. 
      Несмотря на явную привлекательность что-то совсем мало повторивших. 
      Может кто-то из завсегдатаев форума делал этот проект? 
      Интересует ваше мнение: хочу повторить, но не силен в программировании, поэтому беспокоюсь на счёт подводных камней с которыми не смогу справиться. 
×
×
  • Create New...