Свежие обсуждения
Микроконтроллеры

Реализация алгоритма им. тов. Брезенхема - не получается

1 3

Пытаюсь реализовать алгоритм им. тов. Брезенхема в регуляторе мощности. Взят за основу проект : http://spetspribor.info/support/articles/br-pow/br-pow.html

Регулировка 0-100 на участка в 100 циклов

Написан следующий рассчетный блок
MOV R16, POWER
ADD R16, DELTA
CLC
SBRS R16, 7
RJMP CUHX1
SEC
SBI PORTD, 6
RJMP CUHX2

CUHX1:

LDI R17, 100
SBC R16, R17
MOV DELTA, R16
CBI PORTD, 6

CUHX2:

DEC PHASE
BRNE CUHX3
LDI PHASE, 100
LDI DELTA, 206

CUHX3:

Вызывается в прерывании в начале каждого полупериода

Начальные значения PHASE = 100, DELTA =206

Вычисление для DELTA

LDI DELTA, 100
LSR DELTA
COM DELTA
INC DELTA
Но в отличии от оригинальной программы значение ее постоянно - не изменно количество ступеней регулирования.

Кто автор оригинальной статьи я знаю, но обращаться не хочу.

Величина POWER меняется 0-100

Так вот при 100 имеем постоянной включение
при 99 - скважность 1/2
При 98 - 1/4
97 - 1/16.... при постоянном периоде. Не видно распределения по периоду.

 

Тут тоже есть алгоритм,

http://trolsoft.ru/articles/bresenham-algo/

но я не понимаю записей и гугл их не понимает - например

error += size
error -= size

Где, как я понял error и size - переменные.

 

Wladimir_TS: но я не понимаю записей и гугл их не понимает - например
error += size
error -= size

Учите Си
А поисковики всё знают , это вы спрашивать не умеете.

x+=y то же самое что x=x+y
Ну и такое можно делать со многими операциями. Т.е. когда в качестве первого операнда выступает та же переменная, где будет результат.

 

Замена в asm MCS51 на AVR требует аккуратности и внимательности. Проще всего в каком нибудь симуляторе, "прошагать" этот кусок, чтобы понять, где ошибка.

 

Вторые сутки мучаюсь с этим алгоритмом, а толку немного и ну никак не пойму - как это работает.

 

Vlad_Petr: Замена в asm MCS51 на AVR требует аккуратности и внимательности.

А какой внутрисхемный симулятор для 51го внятный существует, кроме монстроидального IAR с которым разрбраться за вменяемый промежуток времени малореально.

Пока вот этот скачал :
http://cyberik.ru/soft/45565-simulyator-mk-8051-programmnaya-model.html

 

Поскольку это самая почтенная, заслуженная структура, таких симуляторов ВАГОН. Гугл вам в помощь. Поищите попроще, без установки. Для AVR тоже симуляторов предостаточно.
Кстати, иногда слышу мнение что в ряду 8р. контроллеров структура MCS51 "устарела" . Мнение ошибочное. Достаточно взглянуть на SILABS ( Все ARM Cortex 32р. это их продукция ). Так вот они сейчас выпускают около сотни разновидностей MCS51 контроллеров, и их разнообразие только растет. Начинающие их не очень любят, по причине отсутствия там DIP корпусов. Я знаю только одно исключение из этого правила, это серия C8051F330 (DIP 20).

 

Я ничего не имею против 8051 и даже когда-то писал для него, просто AVR удобнее для меня + как-то с больших денег купил JTAGICE 2 ( как вспомню - дрожь берет - но зарабатывал ведь по столько, что мог себе многое позволить....эххх) - все-ж внутрисхемная отладка очень удобна.

Забыл конечно уже все. По работе - наладчиком да грузчиком (хоть и должность - Ведущий Инженер) не до программирования - надо жгуты прозванивать да тяжести кантовать. Только вот что для себя делаю.

 

Vlad_Petr: Поскольку это самая почтенная, заслуженная структура, таких симуляторов ВАГОН.

Перепробовал уже штук 5 все НАСТОЛЬКО КРАСИВЫ что пользоваться невозможно - не могут корректно даже ассемблировать текст из 3 команд. Или приемлит только (HEX/BIN но некорректно даже дизассемблировать не может инструкция MOV A, 1 ...... точнее дизассемблирует, но не исполняет.... 1 в аккумулятор загрузить.... блин.

Посоветуйте что-то небольшое способное симулировать по ассемблерному тексту.

 

А популярный Протеус? Если подсунуть ему вместо HEX файл COF, то можно выполнять программу пошагово наблюдая за исходником и переменными. С AVRами не работал, но с PICами все работает.
Но ничего лучше аппаратной внутрисхемной отладки нет