Итак что мы имеем:
1) Микроконтроллер ATmega 8L-8PU (ATmega8).
2) Программу Proteus 7 - в ней я буду моделировать схему и выкладывать сюда скрины с описаниями, а также виртуально "прошью" МК.
3) Программу AVR Studio 5 - в ней я буду писать программу для МК на языке Ассемблера.
4) Аналоговый сигнал 0...+10В (в реальности это будет выход сигнала с датчика давления "А-10" или еще откуда-нибудь)
5) Delphi 7 - здесь будет написано приложение, принимающее и обрабатывающее данные с COM-порта (в перспективе).
Чем я руководствуюсь для подключения сигнала к компаратору: вот этой простой статьей.
Чем я руководствуюсь для подключения сигнала к АЦП: вот этой статьей.
В процессе моих действий будут представлены скрины, описание всего и т.д. Задача вполне мне по силам, просто не все до конца понятно.
Итак, начнем с компаратора.
Мною был смоделирован симметричный резистивный (R1 и R2 по 1 КОм) делитель напряжения с потенциометром (RV1 - 18КОм) на входе для имитации 0...+10В. Делитель пропорционально понижает сигнал до 0...+5В. Нагрузка: R3 - 100 КОм.
В реальности вместо клеммы "Gnd" будет клемма "Com"
Это будет имитацией сигнала для контроллера.
Далее, смоделирован стабилитрон D1 на 5В (изменю на 3В) для опорного напряжения и добавлен резистор R4 - 500 Ом.
Верхний отвод R2(1) - источник сравниваемого сигнала.
Нижний отвод D1(K) - источник опорного сигнала.
Пора браться за программу для МК.
И вот первые проблемы. Программа взята мной из этой статьи:
Код: Выделить всё
/*
* Prog_for_AnalogComp.asm
*
* Created: 16.08.2013 21:30:05
* Author: ?????????????
*/
.device Atmega8
.nolist
.include "C:\Program Files\Atmel\AVR Studio 5.0\avrassembler\include\m8def.inc"
.list
COMP_OK: PUSH F ; Сохранили флаги
PUSH R17 ; Сохранили R17
INVB PORTD,4,R17,R16 ; Инвертировали бит PD4
POP R17 ; Достали все из стека
POPF ; И флаги тоже
RETI ; Вышли
; Internal Hardware Init =====================
;Comparator Init
OUTI ACSR,1<<ACIE|1<<ACIS1|1<<ACIS0 ; Разрешаем прерывание
; Ловим 0-1 переход.
; Ports Init
SBI DDRD,4
SBI DDRD,7
SEI
; End Internal Hardware Init =================
; Main =====================
Main: IN R16,ACSR ; Взяли состояние компаратора
ANDI R16,1<<ACO ; Оставили только бит состояния
BST R16,ACO ; Скопировали его в Т
BLD R16,7 ; Выгрузили в 7й разряд R16
IN R17,PORTD ; Взяли значение из PORTD
ANDI R17,0b01111111 ; Подавили значение 7го разряда
OR R17,R16 ; Наложили на него значение ACO
OUT PORTD,R17 ; Вернули значение в порт.
RJMP Main
; End Main =================
Буду разбираться, в чем дело. Всегда рад любой помощи.
only pure true norwegian blackx 

