Basic для PIC микроконтроллеров Пн, 21.05.2012, 14:57



Переводчик/Translator

   
Приветствую Вас Гость | RSS
Меню сайта

Категории раздела
Swordfish
Проекты на PIC, программы для которых написаны на Basic в программе SwordFish
Proton PICBasic
Проекты на Proton+ PICBasic.
Microbasic
Интересные проекты на Microbasic
PICBasicPro
Проекты пользователей на PIC микроконтроллерах, программы для которых написаны в PICBasicPro
PIC Simulator IDE
Программы, написанные в PICSimulatorIDE
Bascom
Данный раздел предназначен для размещения статей, относящихся к разработкам на АВР на Basic в среде Bascom
Ассемблер, Си
Проекты на ассемблере или Си
Полезные материалы
Здесь размещаются статьи об электронике в целом. Полезные приемы и способы решения различных задач.

Облако тегов
Протон термометр авто ик Brestart flowcode дисплей Давление света ЗУ мнемоники компилятор графическое программирование команды Ключ подключение interrupt ошибки печатная плата box Library Call BCD плата Swordfish IR Decode Программирование Pascal Logger picbasicpro терморегулятор статья полезные материалы protonheadermaker онлайн инструменты утилиты mikrobasic протеус даташит АЦП Ассемблер IR NEC система исчисления КМОП рисование CF_INIT TMR0 стабилизатор ds18B20 Термологгер примеры хилинский datasheet ёмкость Woodman блок питания Программа ASIN Asm...Endasm LM35 INT PDU справка PureBasic MicroBasic онлайн-инструменты пульт ДУ Измерение баском разводка Nokia 3310 книги термостат Ультразвук свет PICBASIC программы USB Basic разработка Plugin сервис PROTON таймер порт Button programmer светодиодный индикатор резонатор кнопки процессор HID задержка Siemens PIC статьи Pic Basic com порт температура лекарство Конвертер MPLAB разрешение паяльная станция Delphi подсчет дизайн rfPIC Проекты Busin picsimulatoride Плагин Branch сигнализация ATX таймеры пример compiler кнопка bascom led ремонт ИК NEC Visual Basic 6 Bstop схема разводка плат proteus LCD lдисплей библиотеки отладчик датчик справочник прибор IR симулятор динамическая индикация бейсик для PIC прерывания акустика ASCII бейсик PIC16F84 AVR замок PCB отладка измерения интересное Visual Basic программатор

Главная » Статьи » Статьи и проекты » Proton PICBasic

[ Добавить статью ]



Применение динамической индикации. Пример 3 - Управление по трем проводам

В этом примере попытаемся еще больше сократить количество выводов для индикации, задействованных у МК. Для этого нам понадобятся два сдвиговых регистра 74HC595 и маленький микроконтроллер PIC12F675. Сначала в качестве примера я не хотел внедрять в программу работу АЦП, но ввиду иногда возникающих сложностей с настройкой АЦП у данного пика решил организовать еще и вольтметр (для желающих есть еще свободный вывод для амперметра).
Итак, чем отличается управление в данном примере от предыдущего, где задействован только один сдвиговый регистр? В принципе ничем: алгоритм один и тот же. Разница лишь в том, что разрядами управляют теперь не порты микроконтроллера непосредственно, а один из сдвиговых регистров. Схема приведена ниже:



Переходим сразу к делу:

'S_moke: цифровой вольтметр с возможностью добавления амперметра
Device 12F675
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_OFF, BODEN_ON, MCLRE_OFF
Declare Xtal = 4
Declare Reminders NO
Set_OSCCAL OSCCAL
'---------------------------------------------------------------------------------------------------
Symbol SH_CP = GPIO.2
Symbol But = GPIO.3  
Symbol DS = GPIO.4
Symbol ST_CP = GPIO.5  
'---------------------------------------------------------------------------------------------------
Dim AD_RESULT As ADRESL.Word'Переменная для хранения результата преобразования АЦП  
Dim j As Word 'Переменная для хранения цифрового значения числа
Dim n As Byte 'Число для вывода на индикатор ССИ
Dim Value As Byte 'Переменная для осуществления табличного конвертирования цифры
Dim Dot As Byte 'Символ точки для вывода на ССИ
Dot = 128
'-------------------------------Инициализация микроконтроллера--------------------------------------
  DelayMS 500 'Задержка для стабилизации микроконтроллера
  GoTo OVER_ADC_SUBS 'Переход на конфигурацию портов
'-----------------------------------Старт преобразования--------------------------------------------
ADC:
  ADCON0.0 = 1 'Включим АЦП
  DelayUS 50 'Задержка для заряда внутреннего конденсатора
  ADCON0.1 = 1 'Разрешение преобразования
  While ADCON0.1 = 1: Wend 'Опрос флага GO_DONE для завершения преобразования
  ADCON0.0 = 0 'Выключим АЦП
  Return
'----------------------------Инициализация регистров АЦП--------------------------------------------
OVER_ADC_SUBS:  
  GPIO = %000000  
  TRISIO = %001011 'GP0, GP1 - АЦП; GP2, GP4, GP5 - выходы; GP3 - 10к на +5В
  ANSEL.4 = 1 ' \
  ANSEL.5 = 1 ' FRC
  ANSEL.6 = 0 ' /
  ADCON0.6 = 0 'Источник опорного напряжения - +5В от шины питания
  ADCON0.7 = 1 '
  ANSEL.0 = 1 'Установим GPIO.0 аналоговым входом
  ANSEL.1 = 1 'Установим GPIO.1 аналоговым входом
  ANSEL.2 = 0 'Установим GPIO.2 цифровым выходом
  ANSEL.3 = 0 'Установим GPIO.3 цифровым выходом
'-----------------------------------Главная программа-----------------------------------------------
Start: 'Бесконечный цикл
  ADCON0.2 = 1 'Выбор канала АЦП (см. 43 страницу даташита)
  ADCON0.3 = 0 'Выбор канала АЦП
  GoSub ADC 'Выполним преобразование АЦП
  j = AD_RESULT / 0.2048  
  GoSub Ind
GoTo Start
'--Подпрограмма динамической индикации с использованием двух сдвиговых регистров 74HC595 и 4-x ССИ--
Ind:  
'---------------Зажигание первого справа разряда индикатора и вывод на него цифры-------------------
n = Dig j, 0 'Выделяем из числа единицы
GoSub Convert 'и конвертируем в код ССИ
SHOut DS, SH_CP, msbfirst, [8] 'Проталкиваем в нижний регистр бит для зажигания разряда № 4
SHOut DS, SH_CP, msbfirst, [Value] 'Проталкиваем в верхний регистр сконвертированный код для единиц
ST_CP = 1 'Защелкиваем данные
ST_CP = 0 'Обнуляем защелку данных
'---------------Зажигание второго справа разряда индикатора и вывод на него цифры-------------------
n = Dig j, 1 'Выделяем из числа десятки
GoSub Convert 'и конвертируем в код ССИ
SHOut DS, SH_CP, msbfirst, [4] 'Проталкиваем в нижний регистр бит для зажигания разряда № 3
SHOut DS, SH_CP, msbfirst, [Value]
ST_CP = 1 'Защелкиваем данные
ST_CP = 0 'Обнуляем защелку данных
'---------------Зажигание третьего справа разряда индикатора и вывод на него цифры------------------
n = Dig j, 2 'Выделяем из числа сотни
GoSub Convert 'и конвертируем в код ССИ
SHOut DS, SH_CP, msbfirst, [2] 'Проталкиваем в нижний регистр бит для зажигания разряда № 2
SHOut DS, SH_CP, msbfirst, [Value + Dot] 'Проталкиваем в верхний регистр сконвертированный код для сотен
ST_CP = 1 'Защелкиваем данные
ST_CP = 0 'Обнуляем защелку данных
'---------------Зажигание четвертого справа разряда индикатора и вывод на него цифры----------------
n = Dig j, 3 'Выделяем из числа тысячи
GoSub Convert 'и конвертируем в код ССИ
SHOut DS, SH_CP, msbfirst, [1] 'Проталкиваем в нижний регистр бит для зажигания разряда № 1
SHOut DS, SH_CP, msbfirst, [Value] 'Проталкиваем в верхний регистр сконвертированный код для тысяч
ST_CP = 1 'Защелкиваем данные
ST_CP = 0 'Обнуляем защелку данных

Return
'---------------Зажигание первого справа разряда индикатора и вывод на него цифры-------------------
Convert:
Value = LookUp n, [192,249,164,176,153,146,130,248,128,144,156]
Return
'---------------------------------------------------------------------------------------------------
End

Из комментариев ясно, что сначала зажигаем разряд - проталкиваем байт, содержащий один единственный включенный бит, который подает единицу на разряд. Поскольку данный байт пошел на сдвиговые регистры первым, он поселится в самом нижнем регистре, т.е. во втором. Далее отсылаем байт, содержащий переконвертированное значение цифры для индикации. Теперь уже на ноги индикаторов проскочила настоящая цифра. Остается только защелкнуть данные и смотреть на результат работы.
В примерах на сдвиговых регистрах я не устанавливал задержки на индикацию, поэтому можете поиграться с ними сами (смотрите как это сделано в первом примере)

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

Прикрепления: как прикрепить файл?

Поделись с миром:

Источник:

Категория: Proton PICBasic | Добавил: S_moke (10.01.2012) | Автор: S_moke E W
Просмотров: 1268 | Комментарии: | Теги: | Рейтинг: 5.0/3
Всего комментариев: 4
0  
4 S_moke   (12.04.2012 12:17)
А что за проблема с точкой?

0  
3 HardMaster   (14.03.2012 19:54)
А как в программе решается проблема с выводом точки ?

0  
2 S_moke   (11.01.2012 09:12)
1.Можно ПП --Старт преобразования-- вставить вместо команды GoSub ADC - ничего не изменится. Просто так наверное решили создатели примера АЦП для PIC12F675 (в Протоне есть).
2.На счет второго вопроса сам думал о том же. Скорее всего здесь по дефолту результат преобразования сбрасывается автоматом в регистр привязанный к AD_RESULT (Dim AD_RESULT As ADRESL.Word)/

0  
1 retas   (10.01.2012 18:18)
Спасибо, S_moke!
Несколько ? :
1. Почему ПП --Старт преобразования-- (метка ADC:) сидит в месте инициализации МК а не в главной прогре?
2. В ПП ADC, ПМ нехватка результата - возвращаемся из неё то ни с чем!

Форма входа
Логин:
Пароль:


Статистика


Онлайн всего: 8
Гостей: 7
Пользователей: 1

tesla88

Поиск

Copyright Slazonger © 2012Создать сайт бесплатно