Перейти к содержанию

Термометр Ds18B20 + Atmega8 Проблема С Программой


олежка

Рекомендуемые сообщения

Всем привет, вот есть код программы

$regfile = "m8def.dat"
$crystal = 8000000
$baud = 4800
Config Portd.3 = Output
Portd.3 = 1
Declare Sub Uarts()
Declare Sub Res()
Declare Sub Getline(s As String)
Declare Sub Del_buffer()

Config Portd.2 = Output

Dim A As Byte
Dim B As Byte
Dim C As Word
Dim D As Word
Dim E As Byte
Dim Znak As String * 1
Dim Temp As Dword
Dim Decim As Dword

Dim R As Byte
Dim S As String * 1
Dim Z As Byte
Dim Temperature1 As String * 10
Dim Temperature2 As String * 10
Dim H As Integer

Print "loading"
Call Uarts()
Do

R = Ischarwaiting()
If R = 1 Then
 Getline S
 Call Uarts()
 If S = "A" Then
 Wait 1
	 Config 1wire = Portb.0
	 1wreset
	 1wwrite &HCC
	 1wwrite &H44
	 Waitms 750
	 1wreset
	 1wwrite &HCC
	 1wwrite &HBE
	 A = 1wread()
	 B = 1wread()
	 C = B * &H100
	 C = C + A
	 D = B / &H10
	 If D = 0 Then
		 Znak = "+"
		 Temp = C * 625
		 Else
		 Znak = "-"
		 Temp = 65535 - C
		 Temp = Temp + 2
		 Temp = Temp * 625
	 End If
		 Temp = Temp / 1000
		 If Temp = 0 Then
		 Znak = " "
		 End If
		 Decim = Temp / 10
		 Decim = Decim * 10
		 Decim = Temp - Decim
		 Temp = Temp / 10
		 Print Znak ; Temp ; "." ; Decim
 Call Uarts()
 End If
 If S = "B" Then
 Wait 1
		 Config 1wire = Portb.1
			 1wreset
			 1wwrite &HCC
			 1wwrite &H44
			 Waitms 750
			 1wreset
			 1wwrite &HCC
			 1wwrite &HBE
			 A = 1wread()
			 B = 1wread()
			 C = B * &H100
			 C = C + A
			 D = B / &H10
			 If D = 0 Then
				 Znak = "+"
				 Temp = C * 625
				 Else
				 Znak = "-"
				 Temp = 65535 - C
				 Temp = Temp + 2
				 Temp = Temp * 625
			 End If
				 Temp = Temp / 1000
				 If Temp = 0 Then
				 Znak = " "
				 End If
				 Decim = Temp / 10
				 Decim = Decim * 10
				 Decim = Temp - Decim
				 Temp = Temp / 10
				 Print Znak ; Temp ; "." ; Decim
 Call Uarts()
 End If
 If S = "R" Then
 Call Res()
 Portd.3 = 0
 End If
 Del_buffer
End If



Loop
End
Sub Uarts()
Portd.2 = 1
Waitms 20
Portd.2 = 0
Waitms 25
Portd.2 = 1
Waitms 35
Portd.2 = 0
Waitms 28
Portd.2 = 1
Waitms 38
Portd.2 = 0
End Sub
Sub Res()
Portd.2 = 1
Waitms 50
Portd.2 = 0
Waitms 50
Portd.2 = 1
Waitms 50
Portd.2 = 0
End Sub
Sub Getline(s As String)
S = ""
Do
Z = Inkey()
Select Case Z
Case 0 : Exit Do
Case 10 : If S <> "" Then Exit Do
Case Else : If Z > 31 Then S = S + Chr(z)
End Select
Loop
End Sub

Sub Del_buffer()
Do
Z = Inkey()
Loop Until Z = 0
End Sub

При приходе на UART символа "A" программа считывает показания с 1 датчика, но через раз (происходят какие то сбои что ли? и я получаю вместо правильной температуры +85.0),когда на UART мк приходит символ "B" то второй датчик опрашиваться вообще не хочет, возвращает 0.0 град. Как это исправить помогите

Изменено пользователем олежка

Не забываем ставить СПАСИБО

Со мной на ТЫ

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

скорость обмена с датчиком выставили? провода и питание - в норме?

почему 750 ms? не маловато для самой быстрой скорости? попробуйте скорость поставить иную или задержку побольше

Прерывания цикл опроса датчика не прерывают?

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

1wreset

1wwrite &HCC

1wwrite &H44

Waitms 750 здесь нужна пауза 120 мкс

1wreset

1wwrite &HCC

1wwrite &HBE

..............

после приема двух байт и вычисления температуры делаем паузу не менее 750 мс.

И еще: не вникал в код, но если используются прерывания, на период опроса датчика их надо останавливать.

Изменено пользователем КЭС
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

провода и питание - в норме?

датчик напрямую впаян в плату

КЭС программу опроса ты мне корректировал,я взял твой исходник за пример

Не забываем ставить СПАСИБО

Со мной на ТЫ

Ссылка на комментарий
Поделиться на другие сайты

датчик напрямую впаян в плату

Про подтяжку не забыл?

программу опроса ты мне корректировал

Да, я вспомнил тот случай. Тогда я корректировал вычисление температуры (отрицательные значения). Значит, должно работать. :yes:

Ссылка на комментарий
Поделиться на другие сайты

Про подтяжку не забыл?

резистор на 4,7к на PB0 и PB1 подтянуты к (+),вот непонятно почему датчик на PB1 не опрашиваеться вообще? Только что в железе попробовал с задержкой 120ms и теперь показывает только +85.0

Изменено пользователем олежка

Не забываем ставить СПАСИБО

Со мной на ТЫ

Ссылка на комментарий
Поделиться на другие сайты

Нужно 120 us (мкс), а не ms. +85.0 датчик отправляет после первого конвертирования. Дальше ему нужна пауза>=750 ms. Ну это позже разберем. Для начала убедись, что МК вообще реагирует на прием команды "В" (вдруг не то посылаешь): поставь вместо опроса датчика какой-нибудь "тик-так" на любой порт со светодиодом.

Ссылка на комментарий
Поделиться на другие сайты

C первым датчиком разобрался, было нестабильное питание, припаял к датчику конденсатор на 100мкф и всё заработало, контроллер принимает символ "В" и успешно откликается, но датчик всё равно не считывается(второй)

Не забываем ставить СПАСИБО

Со мной на ТЫ

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...