«Сайт о микроконтроллерах AVR .RU», версия для печати. Исходный документ: https://avr.ru/beginer/bascom/article10

Статья №10


     В  этой  статье  будет  рассмотрено  применение  Bascom  для  разработки  аналогово – цифровых  преобразователей  (АЦП). Для  начала  рассмотрим  более  простой  случай. 
     На  Рис.1  представлена  принципиальная  схема  четырёх -  разрядного  АЦП, которая  содержит  микроконтроллер  ATtiny2313, суммирующий  повторитель  напряжения  на  Lm358N  и  жидкокристаллический  индикатор  типа  MT-16S2H. Работа  последнего  с  микроконтроллером  была  рассмотрена  ранее  в  предыдущих  статьях. 
 
 
    Рис.1 - Схема АЦП + ЖКИ
 
    Суммирующий  повторитель  вырабатывает  одно  из  шестнадцати  возможных  опорных  напряжений.  Напряжение  подаётся  на  вывод  компаратора  микроконтроллера AIN0  и  определятся  кодом  на  выводах  PD0 – PD3  ATtiny2313. Значение  напряжений  приведено  в  таблице:
 
 
     На  другой  вывод  компаратора – AIN1  подается  измеряемое  напряжение, которое сравнивается  с  опорным. Если  входное  напряжение  превышает  опорное, то  5 – й  бит  регистра  управления  и  состояния  компаратора - ACSR  будет  установлен, а  если  наоборот – сброшен. 
     Установим  опорное  напряжение  равным  2,5 В  (код = 1000). Если  входное  напряжение  будет  больше  опорного, то  из  этого  следует, что  результирующий  код  больше  1000, следовательно,  необходимо  установить  2 – й  бит  порта, не  меняя  состояния  третьего.  Если  же  входное  напряжение  меньше  опорного, результирующий  код  будет  меньше  1000, следовательно  необходимо  сбросить  3 –й  бит  и  установить  2– й.  Далее  подобную  операцию  нужно  повторить с  остальными  битами.  
     Алгоритм  преобразования  представлен  на  блок – схеме  программы  “ADC4” – Рис.2.
 
 
 
Рис.2 - Блок-схема программы "ADC4" 
     Текст  программы  приведён  ниже.
    
     Программа  “ADC4”:

$regfile = "attiny2313a.dat"
$crystal = 4000000
$hwstack = 40
$swstack = 16
$framesize = 32

Config Pinb.0 = Input              'конфигурирование входов компаратора
Config Pinb.1 = Input

Dim Dat As Byte                    'объявление переменных
Dim I As Byte
Dim U As Single
Dim Pst As String * 6

Const K0 = 0.312                   'определение констант
Const K1 = 0.001

Ddrd = &B11111111                  'порт В-все выходы
Acsr.7 = 0                         'включение компаратора

Do                                 'начало цикла
Portd = &B00001000                 'начальное значение опорного напряжения
If Acsr.5 = 1 Then
Set Portd.2                        'проверяем выход компаратора и устанавливаем 2-й бит, если на выходе 1
Else
Reset Portd.3                      'иначе, сбрасываем 3-й бит
Set Portd.2                        'и устанавливаем 2-й
End If

If Acsr.5 = 1 Then
Set Portd.1                        'устанавливаем 1-й бит
Else
Reset Portd.2                      'сбрасываем 2-й бит
Set Portd.1                        'и устанавливаем 1-й
End If

If Acsr.5 = 1 Then
Set Portd.0                      'устанавливаем 0-й бит
Else                               
Reset Portd.1                      'сбрасываем 1-й бит
Set Portd.0                        'и устанавливаем 0-й
End If

If Acsr.5 = 1 Then
Goto M1                            'переход к вычислению напряжения
Else
Reset Portd.0                      'сбрасываем 0-й бит
End If

M1:
Dat = Portd                        'считываем код напряжения

U = Dat * K0
U = U + K1                         'реальное значение напряжения
Pst = Fusing(u , "#.#")           'форматирование и округление до десятых  долей
Cls
Lcd "U=" ; Pst ; " V "             'отображение на ЖКИ
Wait 1                             'задержка=1сек
Loop                               'конец цикла

End                                'end program

      Приведенный  пример  хорошо  иллюстрирует  принцип  работы  АЦП, однако  на  практике  применяют   преобразователи  промышленного  изготовления. Это  АЦП  либо  встроенные  в  микроконтроллеры, либо -  как  отдельные  микросхемы. Данные  аналого – цифровые  преобразователи  имеют  более  высокую  точность, поскольку  их  компоненты, выполненные  по  интегральной  технологии  на  одном  кристалле, имеют  меньшие  разбросы  параметров, нежели  дискретные. Часто  применяют  и  АЦП, состоящие  из  специализированной   микросхемы  цифро - аналогового  преобразователя  (ЦАП)  и  микроконтроллера.  
     Рассмотрим   применение  Bascom  на  примере  работы   шести – разрядного  АЦП, состоящего  ЦАП - микросхемы JLC1562B  и  микроконтроллера  ATtiny2313.
      JLC1562B  содержит  шести – битный  цифро – аналоговый  преобразователь, напряжение  на  котором  можно  изменять  в  64  уровнях, от 0  до  4  Вольт  с  шагом  0,0625. Он  связан  с  микроконтроллером  по  шине  I2C. Принципиальная  схема  устройства  представлена  на  Рис.3.
 
 Рис.3 - Схема подключения АЦП JLC1562B 
 
     Напряжение  на  входе  АЦП  задаётся  переменным  резистором  10 КОм. Выходное  напряжение  ЦАП  (в предыдущем  примере – суммирующий  повторитель)  служит  опорным  напряжением  для  компаратора. Значение  напряжения  отображается  на  ЖК – дисплее  типа  MT-16S2H  и  передаётся  по  протоколу  RS-232  в  порт  персонального  компьютера. Если  компьютер  не   имеет  СОМ – порта, необходимо  применить  переходник  USB – RS-232.  
     Шести – битное  значение  для  ЦАП  JLC1562B  передаётся  следующим  образом:                     в  младших  пяти  битах – код   от  0  до  63,  в  шестом  задаётся  порог  срабатывания  компаратора  (0 – половина  питающего  напряжения, 1 – значение  выхода  АЦП).  Седьмой  бит  управляет  защелкой  (устройство  выборки – хранения):                                                  0 – защёлкивает  данные  после  команды  чтения, 1 – защёлкивает  данные, когда  компаратор  переключается  из  0  в  1.
     На  Рис.4  представлена  блок – схема  программы  “ADC6”.
    
Рис.4 - Блок-схема программы "ADC6
"  
 
 
   Она  состоит  из  двух  циклов:  основного, в  котором происходит   обработка  значения  напряжения  и  его  вывод  на  ЖКИ  и  RS-232, и  внутреннего  цикла, в  котором  происходит увеличение значения  данных, отсылаемых  на  ЦАП  (от  0  до  63)  и  проверка  сработки  компаратора. В  данном  примере  производится  операция  «ИЛИ»:  
          Dacwire = Dat  Or  Jcl1562bcomp
     Таким  образом, оба  бита – бит  выбора  источника  опорного  напряжения  и  бит  защёлки  данных – устанавливаются  в  единицу.
     Текст  программы  приводится  ниже:
 
 $regfile = "attiny2313a.dat"       'настройки
$crystal = 4000000
$hwstack = 40
$swstack = 16
$framesize = 32

Config Sda = Portb.5               'конфигурирование I2C
Config Scl = Portb.7
Config I2cdelay = 10

Const Adressw = &H70               'адрес для записи
Const Adressr = &H71               'адресс для чтения
Const Jcl1562bcomp = &B11000000    'биты выбора источника опорного напряжения и ‘защёлки выбора-хранения
Const Mask = &B00000001            'бит для определения контакта ввода напряжения АЦП (Р0)
Const K = 0.0625                   'коэффициент пересчёта

Dim Dat As Byte                    'объявление переменных
Dim Dacwrite As Byte
Dim Jclinput As Byte
Dim U As Single
Dim Daten As String * 4
Cls
Do
For Dat = 0 To 63 Step 1           'изменение данных от 0 до 63 (000000)
Dacwrite = Dat Or Jcl1562bcomp     'операция "ИЛИ"-установка битов выбора опорного ‘напряжения и защёлки
I2cstart
I2cwbyte Adressw
I2cwbyte Mask                      'определения контакта ввода напряжения АЦП - Р0
I2cwbyte Dacwrite                  'посылка в АЦП команды- для подкл.выборки-хранения и ‘источн.опорн.напряж.
I2cstop
I2cstart
I2cwbyte Adressr
I2crbyte Jclinput , Nack           'считывание данных АЦП
I2cstop

Jclinput = Jclinput And Mask       'выделение бита компаратора
If Jclinput = Mask Then                 'если компаратор сработал (=1)
Exit For                                             'то выход из цикла
End If
Next Dat
U = Dat * K                        'определение реального значения напряжения
Daten = Fusing(u , "#.##")         'форматирование и округление результата
Cls
Lcd "U=" ; Daten ; " V"            'отображение на ЖКИ
Print "U=" ; Daten ; " V"          'посылка в терминал по RS-232
Loop

End                                'end program
       
   Программы находятся в Приложении 1 (http://avr.ru/int/Files/Dounload/Bascom/Article10/Attachment_10_1.zip) данной статьи.
 

Все права защищены © AVR.RU, 2021.