Смекни!
smekni.com

Микропроцессорное устройство управления электронными весами (стр. 2 из 3)

Рис. 5.1 – Схема согласования по току дешифратора с семисегментным индикатором.

Для данной схемы можно выбрать транзистор К501 с максимальным током коллектора 300мА.

Если принять ток через R3 равным току базы, то величина этого сопротивление определиться по формуле:

(5.3)

где b – коэффициент передачи по току в схеме с общим эмиттером, для К501 можно принять равным 50;

Uбэ – напряжение, необходимое для открытия транзистора, обычно равно (0,8..0,9)В;

Iк – ток коллектора, в данном случае равен току, потребляемому индикатором;

Rбэ – сопротивление эмиттерного перехода со стороны базы.

.

Округляя значение сопротивления до стандартного, получаем R3=300Ом.

R1 рассчитывается по формуле:

, (5.4)

где Uп – напряжение питания.

Округляя значение сопротивления до стандартного, получаем R1=680Ом

R2 рассчитывается по формуле:

, (5.5)

где Uд – падение напряжение на индикаторе, равно 2,5В.

Выводы 4 микросхемы К514ИД1, 18 и 19 микросхемы К1564ИД5 подсоединяются к минусу питания для разрешения их работы.

Извне на устройство управления через разъем XP1 подаются: сигнал датчика, напряжение питания +5В, -5В (для усилителя), общий провод питания.


6 РАЗРАБОТКА УПРАВЛЯЮЩЕЙ ПРОГРАММЫ

Листинг управляющей программы приведен в приложении А.

Для отображения информации в памяти следует выделить 12 байт, в каждом из которых будет храниться код отображаемого символа. Подпрограмма преобразования числа в последовательность выполняет деление машинного слова на 10 с остатком, поэтому для нее необходимо 6 байт: по два для делимого, частного и остатка. Подпрограмма расчета стоимости выполняет умножение и деление слов, поэтому для нее необходимо выделить 8 временных регистров. При выделении регистровой памяти учтено, что регистры r0–r15 не могут использоваться в ряде команд, например, при сравнении. В оперативной памяти также следует выделить 10 ячеек под таблицу для расшифровки скан-кодов цифровых клавиш. Под вес, цену и стоимость в памяти выделяется по два байта.

После подачи сигнала сброса RESET производится начальная загрузка регистров, с помощью которых реализуется настройка портов ввода/вывода и оцифровка аналогового сигнала, а также инициализация таблицы рашифровки скан-кодов. После инициализации программа входит в бесконечный цикл. Опрос клавиатуры происходит путем поочередной установки в низкий уровень линий PB4–PB6 и чтения линий PB0–PB3. Далее скан-код клавиши распознается программно, под него выделен регистр r13. При выполнении процедуры ввода данных скан-код расшифровывается при помощи таблицы и конечное значение символа, введенного с клавиатуры, записывается в регистр r14.

Регистры r16–r25 используются для временного хранения данных.

При разработке процедуры отображения информации необходимо учитывать, что экран должен полностью обновляться с частотой не менее 40Гц, следовательно, с учетом того, что дисплей имеет 16 индикаторов, активный индикатор должен меняться не позже, чем через каждые 1,5625мс. Основной цикл программы, в котором происходит обновление отображаемой информации, занимает меньше времени

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


7 ЗАКЛЮЧЕНИЕ

В контроллере можно использовать любые микросхемы семейства AVR, в зависимости от поставленных задач. Контроллер обладает резидентной памятью и множеством встроенных вспомогательных устройств, что значительно упрощает схемотехническую реализацию системы управления. Благодаря тому, что контроллер является перепрограммируемым, в системе управления электронными весами достаточно легко можно менять диапазоны веса, цены и стоимости.


ЛИТЕРАТУРА

1. Шарапов А.В. Примеры решения схемотехнических задач: Учебное пособие. - Томск: ТИАСУР, 1994. - 141 с.

2. Шарапов А.В. Цифровая и микропроцессорная техника: Учебное пособие. 2-е изд., перер. и доп. - Томск: Изд-во Том. ун-та, 1997. - 108 с.

3. Сташин В.В., Урусов А.В., Мологонцева О.Ф. Проектирование цифровых устройств на однокристальных микроконтроллерах. - М.: Энергоатомиздат, 1990. - 224 с.

4. Калабеков Б.А., Мамзелев И.А. Цифровые устройства и микропроцессорные системы: Учебник для техникумов связи. - М.: Радио и связь, 1987. - 400 с.

5. Микропроцессоры и микроЭВМ в системах автоматического управления: Справочник/ С.Т.Хвощ, Н.Н.Варлинский, Е.А.Попов; Под общ. ред. С.Т.Хвоща. - Л.: Машиностроение, 1987. - 640 с.

6. http://www.atmel.com/dyn/resources/prod_documents/2466S.pdf - польное руководство по работе с контроллером Atmega16. Электронный ресурс.


Приложение А. ЛИСТИНГ УПРАВЛЯЮЩЕЙ ПРОГРАММЫ

.include "m16def.inc";Включить определения для контроллера Atmega16

.defscancode=r13

.defkey=r14

.defpointer=r15; используется для ввода данных

.equ entercode=0xD7;кодклавишиввода

.DSEG; резервирование памяти

status: .BYTE1 ;байт статуса

weight: .BYTE 2 ;вес

price: .BYTE 2 ;цена

cost: .BYTE 2 ;стоимость

key_table .BYTE 10;таблица сканкодов

dysplay_table: .BYTE 16;выделить 16 байт как буфер дисплея

.CSEG

; перед началом выполнения программы контроллер проверяет векторы прерываний

rjmp RESET ; Reset Handler

nop

reti EXT_INT0 ; INT0 Handler

nop

reti EXT_INT1 ; INT1 Handler

nop

reti TIM2_COMP ; Timer2 Compare Handler

nop

reti ;TIM2_OVF ; Timer2 Overflow Handler

nop

reti ;TIM1_CAPT ; Timer1 Capture Handler

nop

reti ;TIM1_COMPA ; Timer1 CompareA Handler

nop

reti ;TIM1_COMPB ; Timer1 CompareB Handler

nop

reti ;TIM1_OVF ; Timer1 Overflow Handler

nop

reti ;TIM0_OVF ; Timer0 Overflow Handler

nop

reti ;SPI_STC ; SPI Transfer Complete Handler

nop

reti ;USART_RXC ; USART0 RX Complete Handler

nop

reti ;USART_DRE ; USART0,UDR Empty Handler

nop

reti ;USART_TXC ; USART0 TX Complete Handler

nop

reti ;ADC ; ADC Conversion Complete Handler

nop

reti ;EE_RDY ; EEPROM Ready Handler

nop

reti ;ANA_COMP ; Analog Comparator Handler

nop

reti ;TWI ; Two-wire Serial Interface Interrupt Handler

nop

reti ;TIM0_COMP ; Timer0 Compare Handler

nop

reti ;EXT_INT2 ; INT2 Handler

nop

reti ;SPM_RDY ; SPM Ready Handler

nop

;инициализация

reset: outDDRB, 0xF0; Старшая тетрада порта PB настраивается на вывод, младшая – на ввод

outDDRС, 0xFF; Порты PC и PB настраиваются на вывод

outDDRD, 0xFF;

outADMUX, 0x40; АЦП работает с внешним опорным сигналом, канал 0.

outSFIOR, 0x00; АЦП работает автоматического обновления данных.

out ADCSRA, 0xC0; ЗапускАЦП.

ldir26,low(key_table);заполнение таблицы скан-кодов

ldi r27,high(key_table)

ldi r16,0xE7; клавиша «0»

st X+,r16

ldi r16,0xEE; клавиша «1»

st X+,r16

ldi r16,0xDE; клавиша «2»

st X+,r16

ldi r16,0xBE; клавиша «3»

st X+,r16

ldi r16,0xED; клавиша «4»

st X+,r16

ldi r16,0xDD; клавиша «5»

st X+,r16

ldi r16,0xBD; клавиша «6»

st X+,r16

ldi r16,0xEB; клавиша «7»

st X+,r16

ldi r16,0xDB; клавиша «8»

st X+,r16

ldi r16,0xBB; клавиша «9»

st X+,r16

;опросклавиатуры

begin: ldi scancode,0xFF

ldir19,0x00; обнуление счетчика антидребезгового цикла

l3: ldir16,0x01; задается опрашиваемая линия

l1: movr17,temp1; номер опрашиваемой линии преобразуется для обнуления

negr17 ; соответствующего вывода

outPORTB,r17

inr17, PINB; чтение сканкода

orir17,0x80

cpir17,0xFF ;если клавиша нажата, то запомнить ее сканкод для

breql4 ; обработки в антидребезговом цикле

movr18,r17

l4: lslr16 ;следующая линия

cpir16,0x10

brnel1 ;если опрошены все линии, переходим к следующему шагу

cpi r19,0x00

breq l2

cp r18,scancode

brnel5;если текущий скан-код не равен предыдущему, то нажатие случайное

l2: mov scancode,r18

inc r19

cpir19,0x03 ;антидребезговый цикл

brne l3

;опросрежима

l5: ldi r26,low(status)

ldir27,high(status)

ldr16,X; загружается адрес байта состояния

cpir16,0x01

breql6;если status=1, то перейти к вводу данных

cpiscancode,entercode; если не нажат «Ввод»,

brnel7; то перейти пересчету данных

ldir16,0x01; иначе войти в режим ввода данных

st X,r16

ldi r16,0

move pointer,r16

jmp display

;пересчет данных

l7: in r16,low(ADC);чтение АЦП

inr17,high(ADC)

;пересчет единиц АЦП в реальный вес. Вес равен 1000*ADC/1024, операции умножения и деления на константу реализованы путем операций сдвига и вычитания

mov r18,r16

mov r19,r17

lsl r16

rol r17

lsl r16

rol r17

lsl r16

rol r17

lsl r16

rol r17

lsl r16

rol r17

lsl r16

rol r17

sub r16,r18

sbc r17,r19

sub r16,r18

sbc r17,r19

sub r16,r18

sbc r17,r19

lsr r17

ror r16

lsr r17

ror r16

lsr r17

ror r16

lsr r17

ror r16

lsr r17

ror r16

lsr r17

ror r16

ldi r26,low(weight)

ldi r27,high(weight)

st X+,r16

st X+,r17

;расчет стоимости

ldX+,r18;загрузка значения цены из памяти

ldX+,r19;загрузка значения цены из памяти

ldi r20,0

ldi r21,0

ldi r22,0

ldi r23,0

ldi r24,0

ldi r25,0

ldi r0,0

ldi r2,0

ldi r3,0

;умножение цены на вес

l11: add r20,weight_l

adc r21,weight_h

adc r22,r0

adc r23,r3

inc r24

adc r25,r0

cp r24,r18

cpc r25,r19

brne l11

;деление на тысячу

l12: ldi r24,0xE8

ldi r25,0x03

cp r20,r24

cpc r21,r25

ldi r24,0

cpc r22,r24

cpc r23,r24

brne l13

ldi r24,0xE8

sub r20,r24

sbc r21,r25

sbc r22,r0

sbc r23,r0

ldi r24

add r2,r24

adcr3,r0

rjmpl12

l13: stX+,r20;загрузка стоимости в память

stX+,r21

;преобразование чисел в символы

ldiR26,low(dysplay_table); загрузка начального адреса буфера

ldi R27,high(dysplay_table);дисплея в регистр X.

ldir16,0; заполнение буфера нулевыми символами

ldi r17,0

cpi r16,16

brlo l14

st X,r17

inc к16

l14: ldi r28,low(weight)

ldi r29,high(weight)

ldY+,r16; загрузка веса из памяти

ld Y+,r17

rjmp IntToStr

ldi r26,low(dysplay_table+4); загрузка начального адреса буфера

ldi r27,high(dysplay_table+4);дисплея в регистр X.

ldY+,r16; загрузка цены из памяти

ldY+,r17

rjmpIntToStr

ldir26,low(dysplay_table+8); загрузка начального адреса буфера