Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ассемблер _ Разработка микропроцессорного модуля

Автор: Atreides 26.04.2007 22:04

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


Автор: Atreides 30.04.2007 23:07

Может, есть кусочек программки для сбора данных с внешнего устройства и вывода их на семисегментный индикатор?

Автор: xds 1.05.2007 15:51

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

Автор: Atreides 5.05.2007 22:57

Вообще я неправильно выразился. Мне надо написать программку для 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 11.05.2007 16:22

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

Автор: xds 11.05.2007 16:29

2313 не бывает со встроенным АЦП. Подойдёт ATmega8 или ATtiny26. Программа должна быть именно на ассемблере? Или можно на Си?

Автор: Atreides 13.05.2007 14:01

Цитата
2313 не бывает со встроенным АЦП. Подойдёт ATmega8 или ATtiny26. Программа должна быть именно на ассемблере? Или можно на Си?


А это AVR’овские микроконтроллеры? Лучше конечно на ассемблере, но, наверное, и на Си пойдет.
С датчиком температуры понятно, что чем выше идет напряжение, тем выше температура, а вот для датчика частоты вращения, что надо и какой принцип работы будет с ним?
Если использовать цифровые датчики (есть такие модели?), то АЦП не нужен будет и тогда, можно будет использовать 2313?

Автор: xds 15.05.2007 9:10

Вот firmware простого термометра (рабочий - прямо сейчас показывает 300.5 К smile.gif). Микроконтроллер - ATtiny26L-8 @ 1MHz (Atmel), дисплей - MT-10T7-7 (МЭЛТ), датчик температуры - LM335 (TI, аналоговый).
Прикрепленный файл  firmware2.zip ( 2.09 килобайт ) Кол-во скачиваний: 548



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

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