Осциллографическая приставка к ПК


Простейший осциллограф на базе микроконтроллера, который подключается к ПК посредством COM порта. Может работать как регистратор продолжительных событий (самописец).

Базовая схема

Для исследования характеристик, которые можно будет получить с помощью микроконтроллерной приставки к ПК была применена плата от другого прибора, в которой был установлен микроконтроллер PIC16F877A, все порты которого были выведены не внешние соединения.

PIC16F877A распиновка. Корпус PDIP

(рисунок взят из документации на микроконтроллер PIC16F877. www.microchip.com)

Для подключению к ПК был выбран COM порт, для согласования TTL уровней микроконтроллера и логических уровней порта RS232 была применена микросхема преобразователя MAX232:

 

 MAX232 схема включения

 (рисунок из документации на микросхему MAX232. www.maxim-ic.com)

Как внезапно оказалось, во время эксперимента не оказалось конденсаторов на 1,0 мкФ для обвязки MAX232, что вынудило установить вместо них керамические на 0,1 мкФ. Как показали испытания, микросхема смогла выдать уровни +/- 6В, что немного превышало "теоретический" порог в 0/+5В для COM порта. Связь с ПК на скорость 9600 кбит/с держалась без сбоев.

Схема подключения микроконтроллера получилась достаточно простая:

max232 + pic16f877 (ADC - COM/RS232)

Вместо микроконтроллера PIC16F877A можно вполне установить значительно более дешевый PIC12F675 в 8-ми выводном корпусе. Выбор на PIC16F877A пал только ввиду его наличии на рабочем столе.

Для получения максимального быстродействия, управляющая программа была написана на Ассемблере. Исходный код приведен ниже.

Программа вначале проводит инициализацию нужных регистров, затем выдает в COM порт слово "Ready" и далее идет циклический опрос АЦП и передача значений сразу по RS232. Для предварительных проверок была выбрана низкая скорость работы - 9600 кбит/с. Дальше планируется поднять ее до 115 кбит/с. МК работал с кварцем на 4 МГц.

LIST p=16F877
#include "P16F877.INC"

w equ 0
f equ 1

; Переменные в ОЗУ
PauseBuffer equ 0x20

        org 0
        goto start ; (Start)

        start
        ; Инициализация МК
        ; Первичная подготовка
        bcf STATUS,RP0 ; Банк 0
        bcf STATUS,RP1 ; Банк 0
        clrf INTCON ; Запрет всех прерываний

        ; Инициализация порта А. PORTA0 - вход АЦП
        clrf PORTA ; Очищаем опрт А
        bsf STATUS,RP0 ; Банк 1
        movlw b'11111111' ; Все ножки порта на вход
        movwf TRISA
        bcf STATUS,RP0 ; Банк 0
        movlw b'11000001' ;
        movwf ADCON0 ; Адресс 1Fh (банк 0)
        bsf STATUS,RP0 ; Банк 1
        movlw b'00000000' ; Сдвиг-влево; Опорное напряжение: питание и земля
        movwf ADCON1 ; Адресс 9Fh (банк 1)
        bcf STATUS,RP0 ; Банк 0

        ; Инициализация порта E.
        clrf PORTE
        bsf STATUS,RP0 ; Банк 1
        movlw b'00000000' ; Все ножки порта на вход
        movwf TRISE
        movlw b'10111111' ;
        movwf TRISC
        bcf STATUS,RP0 ; Банк 0

        ; Установка прерывания по завершению преобразования АЦП
        bcf PIR1,ADIF ; Сбразываем флаг прерывания (банк 0)
        bsf STATUS,RP0 ; Банк 1
        bsf PIE1,ADIE ; Включаем прерывание от АЦП (банк 1)
        bsf INTCON,PEIE ; Включение прерывания от переферии (банк -)

        ; Настройка UART
        movlw b'10100110' ; Передача 8 бит
        movwf TXSTA ; Передатчик включен (банк 1)
        ; Асинхронный режим передачи
        ; Высокая скорость работы
        bcf STATUS,RP0 ; Банк 0
        movlw b'10010000' ; Последовательный порт включен
        movwf RCSTA ; Передача - 8 бит (банк 0)
        ; Непрерывный прием выключен
        ; Адресс не проверяем
        bsf STATUS,RP0 ; Банк 1
        movlw 0x19 ; Скорость приема/передачи 2-125кбит/с;
        movwf SPBRG ; 3-56кбит/с (банк 1)
        bcf STATUS,RP0 ; Банк 0
       
        ; Все готовов
        ; Передаем по RS232 слово "Ready"
        movlw 52h ; R
        movwf TXREG ; (банк 0)
        call WaitTX
        movlw 65h ; e
        movwf TXREG
        call WaitTX
        movlw 61h ; a
        movwf TXREG
        call WaitTX
        movlw 64h ; d
        movwf TXREG
        call WaitTX
        movlw 79h ; y
        movwf TXREG
        call WaitTX

        ; Теперь мы готовы к циклическому опросу АЦП
        ; Включаем прерывания
        ;bsf INTCON,GIE ; Глобальное разрешение прерываний

        reADC ; Делаем паузу
        call PauseForADC
        bsf ADCON1,GO
        btfsc ADCON1,GO
        goto $-1
        movf ADRESH,W
        movwf TXREG
        call WaitTX
        goto reADC

        goto $-1 ; Зависаем


        WaitTX
        bsf STATUS,RP0 ; Банк 1
        btfss TXSTA,TRMT ; Ждем окончания передачи (банк 0)
        goto $-1
        bcf STATUS,RP0 ; Банк 0
        return

        PauseForADC
        movlw 0xFF
        movwf PauseBuffer
        decfsz PauseBuffer
        goto $-1
        return

        END;

 

 

20.02.2008