Каталог радиоэлектронных схем и программ
|
Новые документы:
Новые комментарии:
|
|
Программа слайд-шоу BPEG v0.2 и контроллер управления PIC16F876A
Программа "BPEG"
Программа BPEG (285 кб) была разработана в качестве компьютерного аналога системы "slide show". Данная версия была исправлена, устранены некоторые недостатки.
С последовательных портов компьютера (COM1,2...) получает управляющие байты. Каждому полученному байту соотвествует картинка в формате JPG в папке "JPEG".
C помощью контроллера управления (Контроллер упрвления представляет не сложную схему на основе контроллера Microchip PIC16F876A) и программы Bpeg вы можете организовать систему слайд-шоу на обычном компьютере.
Контроллер управления посылает через COM-port программе число от 0 до 255, в соотвествии с принятым числом программа Bpeg конвертирует значение в имя файла (Например: "12.jpg") находит в папке "jpeg" файл, если данный файл существует то открывает и показывает на весь экран. Всего управляющих байтов может быть 256 (от 0 до 255). Соответственно и в папке "JPEG" должно быть 256 слайдов.
программа позволяет выбрать любой порт, шрифт и цвет шрифта.
Настройки сохраняются автоматически.
Выход - ESC
Настройка - F9 (либо правая кнопка мыши)
Программа распространяется бесплатно.
Программа по умолчанию использует скорость com-порта 9600 бод.
Контроллер
Проект открыт для применения МК Microchip. Прошу присоединится к проекту разработчиков схем с МК иных производителей.
Устройство разработано по типовым схемам. Представляет связку из 2-х микросхем МК PIC16F876A и MAX232CPE (MAX232) Рис.1. Необходимо использовать MAX232 для согласования уровней, так как модуль USART микроконтроллера не соответствует TTL используемые в портах ввода/вывода RS-232 компьютеров.
Существуют несколько видов кабеля (Рис.2, a),но для соединения COM-порта компьютера и девайса можно использовать следующий тип кабеля.
Tx и Rx подключены кроссом. При использовании кабеля, который соединяет напрямую (без кроссирования) нужно внести изменения в схему согласно подключениям Rx, Tx каналов.
Для полноценной работы разработал исходный код программы МК. В коде была ошибка, после исправления HEX весит 870 байтов:
; Контроллер управления для программы Baby-peg v0.2
; Система слайд-шоу (slide show system) на 256 слайдов
; (с)2008.Art!P email:artip@artip.ru
; Условия распространения программы: Freeware
; программа http://nice.artip.ru/?id=doc&a=doc8
; контроллер http://nice.artip.ru/?id=doc&a=doc45
; разрешена любая модификация исходного кода программы контроллера
; Контроллер инциализирует соединение с программой через COM-port на скорости 9600 baud
PROCESSOR 16f876a
#include "p16f876a.inc"
; Обязательно отключить таймер WatchDog! WDT = off
; Тактовый генератор = HS. Power Up Timer = 0ff. Brown Out Detect = off
radix dec
#define Button1 PORTA,0 ; "<<" кнопка для установки слайд в самое начало отсылается байт 0
#define Button2 PORTA,1 ; ">>" кнопка для установки слайд в самое начало отсылается байт 255
#define Button3 PORTA,2 ; ">" кнопка один слайд вперед
#define Button4 PORTA,3 ; "<" внопка один слайд назад
BAUD_9600 EQU 12
; для SBRG устнавливаем значение 12, при тактовой 8 МГц (скорость 9600 бод)
; при использовании других тактовых частот необходимо высчитать значение SBRG!
org 0x0
NOP
goto START
org 0x04; эта точка входа необходима при использовании отдладчика MICD2-MC1. Устанавливать её не обязательно
;**************** main start ****************
START
org 0x20; начало кода
sleep1 res 1; резервируем память для некоторых переменных
sleep2 res 1;
sleep3 res 1;
a1 res 1; Button1
b1 res 1; Button2
temp res 1; Button3 Button4
pause1 res 1;
pause2 res 1;
movlw 0x15;
call sl; сделаем небольшую задержку перед включением светодиода
clrf PORTB;
BCF STATUS,RP1;
BSF STATUS,RP0;
movlw 0x0;
movwf TRISB;
clrf STATUS;
bsf PORTB,0; включаем светодиод "устройство работает"
bsf STATUS,RP0; выбрать банк1
movlw b"11000000";
movwf TRISC; включаем TX/RX(RC6/RC7)
movlw BAUD_9600;
movwf SPBRG; устанавливаем скорость порта
bcf PIE1,TXIE; запрещаем прерывания
bcf TXSTA,BRGH; устанавливаем скорость
bcf TXSTA,SYNC; асихронный режим
bsf TXSTA,TXEN; включить передатчик
bsf PIE1,RCIE;
bcf STATUS,RP0 ; выбрать банк0
bsf RCSTA,SPEN; включаем USART
bsf RCSTA,CREN; включаем приемник.
;Приемник включать не обязательно, но оно необходимо если Вы будете другую программу,
;которая что-либо будет посылать на контроллер
main:
movlw 0x0
movwf a1; устнавливаем значение 0 кнопка "<<"
movwf temp; начальное значение 0 для ">", "<"
movlw 0xff;
movwf b1; для кнопки ">>" установим значение 255
bcf STATUS, RP1;
bcf STATUS, RP0;
CLRF PORTA;Режим управления
bsf STATUS, RP0;
movlw 0x06;
movwf ADCON1; Определяем порты как цифровой вход
movlw 0xff;
movwf TRISA; Инициализация портов А
bcf STATUS, RP1;
bcf STATUS, RP0; выбран 0-ой банк
Port_cycle: ; В портах использованы подтягивающие резисторы, они устанавливают напряжение и подтягивают значение до логической 1
btfss Button1 ; Если button1 = 1, то пропускаем следующую команду.
goto Press1; кнопка нажата (лог. 0), вызываем подпрограмму Press1
btfss Button2;
goto Press2;
btfss Button3;
goto Press3;
btfss Button4;
goto Press4;
goto Port_cycle;
; Обработка нажатия кнопки Button1:
Press1:
call Pause; сделаем небольшую паузе в несколько мс для устранения эффекта дребезжания кнопки
btfsc Button1;
goto Port_cycle; кнопка "дребезнула" возвращаемся в основной цикл
call Pressed1; иначе вызываем подпрограмму Pressed1
movlw 0x9;
call sl; установим задержку перед началом повтора
press_cycle1:
btfsc Button1; если внопка нажата
goto Port_cycle;
call Pressed1; то вызываем Pressed1
call Pause; пауза между нажатиями
call Pause;
goto press_cycle1;
Press2:
call Pause;
btfsc Button2;
goto Port_cycle;
call Pressed2;
movlw 0x9;
call sl;
press_cycle2:
btfsc Button2;
goto Port_cycle;
call Pressed2;
call Pause;
call Pause;
goto press_cycle2;
Press3:
call Pause;
btfsc Button3;
goto Port_cycle;
call Pressed3;
movlw 0x9;
call sl;
press_cycle3:
btfsc Button3;
goto Port_cycle;
call Pressed3;
call Pause;
call Pause;
goto press_cycle3;
Press4:
call Pause;
btfsc Button4;
goto Port_cycle;
call Pressed4;
movlw 0x9;
call sl;
press_cycle4:
btfsc Button4;
goto Port_cycle;
call Pressed4;
call Pause;
call Pause;
goto press_cycle4;
Pressed1: ; кнопка "<<" = 0
movf a1,0;
call send;
return;
Pressed2: ; кнопка ">>" = 255
movf b1,0;
call send;
return;
Pressed3: ; кнопка ">"
incf temp,1; Используется временная переменная для 2-х разных кнопок
movf temp,0; Значение temp меняется от 0 до 255 в цикле по кругу
call send; после 255 идет 0,1,2 и т.д.
return;
Pressed4: ; кнопка "<"
decf temp,1;
movf temp,0;
call send;
return;
Pause: ; При разных тактовых частотах значение pause1 необходимо подобрать
movlw 0xaa movwf pause1
clrf pause2
Pause_cycle:
decfsz pause2,f
goto Pause_cycle
decfsz pause1,f
goto Pause_cycle
return;
send:
bcf STATUS,RP0 ; выбрать банк 0
movwf TXREG ; отсылаем содержимое регистра W.
; Компьютер принимает значение в байтах
; но программа конвертирует значение байта в десятичное число от 0 до 255
; число преобразовывается в имя файла к примеру "0.jpg", ведется поиск из папки JPEG
; если файл существует - открывается и показывается программой на экране
TransWt bsf STATUS,RP0 ; выбираем банк 0
WtHere btfss TXSTA,TRMT ; ждем пока всё отправится
goto WtHere
bcf STATUS,RP0
return
sl: ; процедура большой задержки
movwf sleep1
clrf sleep2
clrf sleep3
cycle1:
decfsz sleep3,f
goto cycle1
decfsz sleep2,f
goto cycle1
decfsz sleep1,f
goto cycle1
RETURN
END
;**************** main end ****************
Исходный код и готовый HEX для прошивки Вы можете скачать bpeg_asm.zip 13кб.
Программа разработана на ассембелере и имеет следующую логику работы:
После включения питания устройства через пару секунд зажигается светодиод "устройство работает".
Инциализирует модуль USART.
Опрашивает кнопки на нажатие. Посылает соотвествующий байт: 0 если нажата "<<", 255 если ">>" и ">" "<" посылают значение от 0 до 255 значение инкрментируется (декрментируется) в пределах этого диапазона. При достижении крайних значении 0 или 255 инкремент(декремент) продолжается с начального или конечного числа.
Программа МК далеко не совершенна, думаю требует некоторой оптимизации и исправления. С радостью расмотрю ваши замечания, еще с большей радостью если вы предложите улучшенную принципиальную схему, либо схему с другим МК (любого производителя). Предлагайте ваши исходные коды написанные на скажем Си и т.д. Обязательно рассмотрю и с Вашего разрешения выложу в ветку.
Art!P
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии