Помощь - Поиск - Пользователи - Календарь
Полная версия: Разработка микропроцессорного модуля
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
Atreides
Может, у кого есть подобная программка на асемблере:
Разработать микропроцессорный модуль ввода и обработки сигналов с двигателя, имеющий следующие входные параметры:
1. Напряжение с термодатчика сопротивления от -1 до +1 В.
2. Частота вращения вала – 5000 об/мин
3. Точность преобразования сигнала аналогового сигнала 0.01%.
4. Точность преобразования сигнала 0.0001%.
5. Точность срабатывания контроллера при перегрузке двигателя - +\-0.05%
6. Индикация выхода – параметры указанные выше и индикатор аварии с возможностью автоматизированного выключения питания двигателя.
Или может, что не будь простенькое подобное?

Atreides
Может, есть кусочек программки для сбора данных с внешнего устройства и вывода их на семисегментный индикатор?
xds
Мало данных. Да и те что есть неинтерпретируемы. Чем отличается "сигнал" от "сигнала аналогового сигнала"? smile.gif Что такое "термодатчик сопротивления"? На какой архитектуре должен быть построен модуль? Как организован обмен со внешними устройствами? Или это совсем абстрактный модуль, в котром можно обойтись процедурами-заглушками, имитирующими выборку данных с АЦП и вывод на дисплей?
Atreides
Вообще я неправильно выразился. Мне надо написать программку для AVR микроконтроллера модель 2313. Всю эту модель надо прогнать в проге AVR Studio. Суть задания не во входных и выходных показаниях, а отображения самого процесса. У меня есть уже два написанных модуля для ввода данных с входа и вывода их на семисегментный индикатор, они работаю независимо друг от друга и надо их связать, а вот как? И цель задания, следующая если всё правильно, то я могу вручную задать значения двоичных сигналов на входе и автоматически получу соответствующие десятичные значения на выходе.
Для выхода:
Код

.include "2313def.inc"
    LDI R16, 0b00001000;
DIND:clr r30;
    ser r31;
    out DDRB, R31;
    out PORTB,r30;
    LSR R16;
    BRCC M1;
    LDI R16, 0b00001000;
    MOV R0,R4;
M1: SBRC R16,2;
    MOV R0,R3;
    SBRC R16,1;
    MOV R0,R2;
    SBRC R16,0;
    MOV R0,R1;

INR0: ldi r30,low(tab0);
    ldi r31,high(tab0);
    lsl r30;
    rol r31;
    add r30,r0;
    clr r0;
    adc r31,r0;
    lpm;
    out PORTD, r16;
    out PORTB, r0;
    
    RJMP DIND
TAB0: .DB 0b00111111, 0b00010010, 0b01011011, 0b01001111, 0b01110010, 0b01111001, 0b01111101, 0b00000111, 0b01111111, 0b01101111;
.exit


Для входа:
Код

.include "2313def.inc"
    LDI R16, 0xdf;
    STS 0x5d, R16;
    LDI R16, 0b11110111;
    out PORTD, r16;
    LDI R16, 0x0F;
    out DDRD, R16;
    ser r16;
    out DDRB, R16;

DIND:clr r16;
    rcall k0;
    out PORTB, r16;
    in r16, PORTD;
    LSR R16;
    BRCS M1;
    LDI R16, 0b11110111;
    MOV R0, R4;
M1: SBRC R16, 2;
    MOV R0,R3;
    SBRC R16, 1;
    MOV R0, R2;
    SBRC R16, 0;
    MOV R0, R1;
    RCALL INR0;
    out PORTD, r16;
    out PORTB, r0;
    RJMP DIND

INR0:ldi r30,low(tab0);
    ldi r31,high(tab0);
    rcall k0;
    rol r31;
    add r30, r0;
    clr r0;
    adc r31, r0;
    lpm;
    RET;

k0: rcall k1;
    ret;

TAB0: .DB 0b00111111, 0b00010010, 0b01011011,0b01001111, 0b01110010, 0b01111001, 0b01111101, 0b00000111, 0b01111111, 0b01101111;
k1: ret;
.exit

Atreides
Узнал более конкретно задание: нужна прога на любой AVR контроллер со встроенным АЦП (но желательно модели 2313), что она преобразовала аналоговый сигнал с датчика температуры измеряемой в Кельвинах (температура в Кельвинах 0 Цельсия=273 Кельвина = 2,73Вольта, 100 Цельсия =373Лельвина= 3,73 Вольта), и выдавалась в десятичном виде на семисегментный индикатор. Модель термодатчика и индикатора не имеет значения. Микроконтроллер то же можно любой, но AVR. Прога, как я понимаю, состоит из двух частей, преобразовать сигнал из аналогового в цифровой и вывести на индикатор в десятичном виде. Любой пример похожего задания то же пойдет. Нужна просто прога на ассемблере для отображения самого хода процесса на AVR Studio.
xds
2313 не бывает со встроенным АЦП. Подойдёт ATmega8 или ATtiny26. Программа должна быть именно на ассемблере? Или можно на Си?
Atreides
Цитата
2313 не бывает со встроенным АЦП. Подойдёт ATmega8 или ATtiny26. Программа должна быть именно на ассемблере? Или можно на Си?


А это AVR’овские микроконтроллеры? Лучше конечно на ассемблере, но, наверное, и на Си пойдет.
С датчиком температуры понятно, что чем выше идет напряжение, тем выше температура, а вот для датчика частоты вращения, что надо и какой принцип работы будет с ним?
Если использовать цифровые датчики (есть такие модели?), то АЦП не нужен будет и тогда, можно будет использовать 2313?
xds
Вот firmware простого термометра (рабочий - прямо сейчас показывает 300.5 К smile.gif). Микроконтроллер - ATtiny26L-8 @ 1MHz (Atmel), дисплей - MT-10T7-7 (МЭЛТ), датчик температуры - LM335 (TI, аналоговый).
Нажмите для просмотра прикрепленного файла


Цитата
для датчика частоты вращения, что надо и какой принцип работы будет с ним?

Датчик оборотов - стробоскоп или датчик Холла - просто генерирует импульс (несколько импульсов) на каждый оборот вала двигателя. Достаточно посчитать количество импульсов за единицу времени.

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.