Вывод результата работы АЦП на ЖКИ с компилятором SDCC

July 2, 2014 by admin Комментировать »

Поскольку впереди могут встретиться трудности (ошибки) повторим считывание значения преобразования АЦП с выводом на ЖКИ из руководства ROBOPICA Программу я приводить не буду, она есть в одной из предыдущих глав, но проверку в ISIS проведу:

Рис 5110 Повторение программы из руководства ROBOPICA

Написав  свою  программу,  мы  подставим  hex-файл  в  эту  схему  и  должны  получить  похожие результаты в плане выводимого числа

Прямой  пересказ  программы,  приведённой  в  начале  этой  главы,  увы,  даёт  неутешительную картинку

Рис 5111 Первая проверка программы с SDCC Проблема, как выяснилось, возникла в функции чтения:

Read_Adc()

{

ADCON0 = 0xCD               // Выбор Analog2 RC_Mode и ADON

GO = 1                      // Запуск преобразования

while(GO)                   // Ожидаем, пока преобразование завершится dat=(ADRESH*4)+(ADRESL/64)  // 10 бит Данных ==> Adc

}

Последняя операция после её изменения dat=(ADRESH<<2)+(ADRESL/64) приносит успех

Рис 5112 Окончательная проверка программы

И сама программа, которую я проверяю, выглядит так:

#include <pic16f887h>

#include &quotlcdh&quot

#include &quotdelay_20h&quot

typedef unsigned int wrd

wrd at 0x2007 CONFIG1 = 0x2FF2

char text[4] unsigned int dat

wrdToStr(unsigned int wrd,char txt[4])

{

unsigned int tmp = 0 tmp = wrd/1000

if (tmp == 0)txt[3] = 48 else txt[3] = tmp + 48

if (tmp = 0) wrd = wrd – 1000*tmp tmp = wrd/100

if (tmp == 0) txt[2] = 48 else txt[2] = tmp + 48

if (tmp = 0) wrd = wrd – 100*tmp tmp = wrd/10

if (tmp == 0) txt[1] = 48 else txt[1] = tmp + 48

if (tmp = 0) wrd = wrd – 10*tmp txt[0] = wrd + 48

}

Read_Adc()

{

ADCON0 = 0xCD   //Выбор RA3, RC_Mode и разрешение GO = 1          //Запуск преобразования

while(GO)       //Ожидаем, пока преобразование завершится dat=(ADRESH<<2)+(ADRESL>>6) //10 бит данных ==> dat

}

void main(void)

{

TRISD = 0x03 PORTD &amp= 0x03

lcd_init() pause(5000)

ANSEL = 0xFF // PORTA ==> Аналоговый TRISA = 0xFF // PORTA ==> вход

while(1)

{

lcd_com(0x01) Read_Adc() wrdToStr(dat,text) lcd_dat(text[3]) lcd_dat(text[2]) lcd_dat(text[1]) lcd_dat(text[0]) DELAY_MS(500)

}

}

В программе использованы ранее созданные файлы, которые я добавляю в папку с текущим проектом Также я использую функцию вывода на ЖКИ, которую создал в предыдущей главе

Будет хорошим упражнением так изменить эту задачу, чтобы можно было, как и в программе руководства к ROBOPICA, вывести перед результатом работы АЦП строку, поясняющую, что за числа появляются на дисплее

В одном из приложений, рассказывая о новой версии программы Flowcode, я намеревался связать два микроконтроллера по USART Но этот компонент не работает в демо-версии, так что я отказался от этой идеи Но при  работе с компилятором SDCC вы можете  столкнуться  с необходимостью самостоятельно создавать необходимые функции для работы с этим модулем

Источник: Гололобов ВН,- Самоучитель игры на паяльнике (Об электронике для школьников и не только), – Москва 2012

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты