Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Задата по температуре bascom


Задата по температуре bascom

Сообщений 1 страница 6 из 6

1

доброго времени суток!

возникла небольшая, на мое мнение проблема. есть программа которая считывает сигнал с ацп (мВ), програмной реализацией оно переводит мВ в градусы и выводит на LCD экран. Проблема в чем, выводит только положительные значения, не могу понять как сделать отрицательные, пробовал через процедуру If ... then , не вышло. прошу вашей помощи, если выйдет помочь буду очень признателен!

Код:
$regfile = "m8def.dat"
$crystal = 8000000

Dim Q As Single
Dim W As Integer


   'potklychenie displey '

Config Lcdpin=Pin,Rs=Portb.0,E=Portd.7,Db4=Portd.6,Db5=Portd.5,Db6=Portb.7,Db7=Portb.6
Config Lcd = 16 * 2
Cursor Off
Cls

   'cchitka s ACP po prerivaniy taimera  '


Config Timer1 = Timer , Prescale = 64
On Timer1 Acp


    'nastroika ACP  '


Config Adc = Single , Prescaler = Auto , Reference = Avcc

Enable Interrupts
Enable Timer1

Do

Cls
Rem
Lcd "Temper: "

Lowerline
Locate 1 , 11
Lcd Q
Waitms 1000

Loop



Acp:

Start Adc            ' zapysk ACP'
W = Getadc(1)
W = W / 1.28
Q=W/10

if W<0 then
W = W / 1.28
W=-W
Q=W/10
End if
Return
end

0

2

Не ясно что является датчиком температуры,но ясно что датчик аналоговый. Вот что пишут,например,в даташите на TC1047:

The output voltage range for these devices is typically
100 mV at -40°C, 500 mV at 0°C, 750 mV at +25°C and 1.75V  at  +125°C.  A  10 mV/°C  voltage  slope  output
response  allows  for  a  predictable  temperature measurement  over  a  wide  temperature  range.

То есть 0 градусов-это 500 мв.Всё,что выше со знаком +,ниже со знаком -.

0

3

ну я использую простой LM35 вот моя модуляция в протеусе. http://dropmefiles.com/Dz8z2

0

4

Судя по протеусу все понятно. Adc может измерять только положительные значения от 0 до 1024 цифровых единиц.
Т.е вам нужно следующее:
К примеру диапазон АЦП у вас от 0 до 5В  и при этом 0В = 0 единиц АЦП а 5В = 1023 единицы
1. Настраиваем схему таким образом, чтобы 0 градусов Цельсия равнялось 5В/2 = 2,5В.
2.
w = Getadc(1)-512 ' т.е. при ноле градусов схема даст в АЦП 2,5 В что будет равно 512 единицам АЦП. Вычитаем из полученных данных 512 получаем 0. Все что ниже пойдет в минус, выше - в плюс.
W = W / 1.28
Q=W/10

Еще вопрос: Зачем измерение АЦП сажать на таймер? Сделайте его в основном цикле отказавшись от таймера или пусть работает в фоне без таймера. Я бы сделал штук 5 измерений, потом вывел бы среднее значение и от него бы считал температуру. Вот отличный пример реализации от Sasha_1973 Исследование АЦП в МК Atmegaxxx и Attinyxxx
Скомпилируйте:

Код:
$regfile = "m8def.dat"
$crystal = 8000000
Dim Q As Single , W As Integer
Config Lcdpin = Pin , Rs = Portb.0 , E = Portd.7 , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 : Config Lcd = 16 * 2 : Cursor Off : Cls       ' Конфигурация дисплея
Config Timer1 = Timer , Prescale = 64 : On Timer1 Acp:      ' Конфигурация первого таймера и переход на подпрограмму Acp при срабатывании таймера
Config Adc = Single , Prescaler = Auto , Reference = Avcc   ' Конфигурация АЦП
Enable Timer1 : Enable Interrupts                           ' Разрешаем прерывания
Cls : Lcd "Temper: "
Do                                                          'Основной цыкл
 Q = W - 512 : Q = Q / 1.28 : Q = Q / 10                    ' Пересчитываем показания АЦП в градусы чтоб не засорять прерывание делаем это тут
 Locate 1 , 11 : Lcd "      "                               'Чистим предыдущие данные температуры с дисплея, для обновления только данного места чтоб не мигал дисплей от команды Cls
 Locate 1 , 11 : Lcd Q
 Waitms 1000
Loop

Acp:
 Start Adc                                                  ' zapysk ACP'
  W = Getadc(1)
 Return
End

Отредактировано Pasha (2016-12-05 05:15:50)

0

5

спасибо огромное, я к преподу подошел он так же схему объяснил) как это реализовать) я посмотрю по программе разберусь что и как!

познавательно по проге!! спасибо еще раз.

0

6

еще раз добрый день, подскажите, а в баскоме можно полный текст посмотреть процедур таких как:

1)Start Adc  (запуска ацп)

и

2)Getadc ( считывание данных)

может как то библиотеки открываются, или как то в файле открыть текст этих подпрограм?

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Задата по температуре bascom