Файлы  •  Ссылки  •  Прошивки  •  Правила  •  Архив  •   FAQ  •  Участники  •  Поиск
Регистрация  •  Вход

Проблема с ds18b20 на atmega8

Список форумов» Программное обеспечение» Микроконтроллеры
АвторСообщение
alex6636
Новичок
Сообщения: 17




17-07-2015 21:25

Привет всем посетителям. Я новичок по микроконтроллерам и не могу решить одну проблемку. Я бы хотел собирать термометр на atmega8 с дисплеем HD44780 на языке C. Схему то Я собирал, а с программой были проблемы, по статьям написал программу, а датчика не видит контроллер и пишет -9999. Заранее спасибо.

Исходный код:

#include
#include
#include
unsigned char devices; //переменная для количество датчиков
int temp; //переменная для хранения температуры
char lcd_buffer[16]; //масив с данными для экрана

#asm
.equ __w1_port=0x15 ;PORTC
.equ __w1_bit=1
#endasm
#include

#include
#define MAX_DS18b20 2
unsigned char ds18b20_rom_codes[MAX_DS18b20][9];
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include
void main(void)
{
State0=T
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
State0=T
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;

lcd_init(16);
devices=w1_init(); //ищим датчики
while (device>0)
{
temp=ds18b20_temperature(0); //читаем температуру
if (temp>1000){ //если датчик выдаёт больше 1000
temp=4096-temp; //отнимаем от данных 4096
temp=-temp; //и ставим знак "минус"
}
sprintf(lcd_buffer,"t=%i.%u\xdfC",temp,temp%1);
lcd_clear(); //чистим дисплей перед выводом
lcd_puts(lcd_buffer); //выводим масив на LCD
delay_ms(500); //ждём 500мс

};
}
Jael.Dace
Участник
Сообщения: 519




18-07-2015 10:16

Пишешь в CodeVision или в чём? Приложи весь проект.
alex6636
Новичок
Сообщения: 17




18-07-2015 20:45

Вот сам исходник. На протеусе все работает, без проблем.

  lcd_termometr.rar  119,63 КБ  Скачано: 223 раз(а)

Jael.Dace
Участник
Сообщения: 519




19-07-2015 07:40

Проверь резистор подтяжки в обвязке датчика или попробуй уменьшить его сопротивление.
alex6636
Новичок
Сообщения: 17




20-07-2015 09:40

Заработал спасибо. Но показывал отрицательную температуру -28 С вместо положительной, прибавил ~60 и после этого стало показывать нормальные значения. улыбка
Список форумов» Программное обеспечение» Микроконтроллеры» Проблема с ds18b20 на atmega8
Перейти:  
Текущий раздел» Программное обеспечение» Микроконтроллеры (Микроконтроллеры - AVR-ы, PIC-и и другие)


Похожая информация:
  • Проблема с ATmega8 не работает внешнее прерывание
  • Термометр ATtiny13 + 2 х DS18B20 + LCD
  • Термометр с двумя датчиками на DS18B20 и микроконтроллере
  • ATMega8
  • ATmega8-16AU








  • Информация по ремонту для специалистов - справочники, инструкции, энциклопедия, советы и секреты ремонта,  настройка, сервисные режимы
    Powered by phpBB 2.0.18 © 2001, 2002 phpBB Group!