• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

ATmega16 и DS1820

  • Автор темы Автор темы WOLF007
  • Дата начала Дата начала

WOLF007

Новые
Регистрация
24 Фев 2009
Сообщения
806
Реакции
10
Баллы
0
ATmega16 и DS1820

Решил поюзать сей девайсы но в итоге на дисплее получаю -999 градусов. Компилятор CodeVisionAvr 2
Код:
//#define F_CPU 8000000
#include <mega16.h>
#include <ds1820.h>        
#include <1wire.h>
 
 #asm
       .equ __w1_port=0x18;PORTB
       .equ __w1_bit=0
 #endasm
#include <stdio.h>
#include <lcd.h>
#asm
  .equ __lcd_port=0x1b;PORTA
#endasm

#include <delay.h>
char lcd_buffer[33];
void main(void){
char sign;
int temp;
lcd_init(16);
w1_init();

while(1){
            temp=ds1820_temperature_10(0);
          sign='+';  //читаем температуру 
          if (temp>1000){               //если датчик выдаёт больше 1000          
             temp=4096-temp;            //отнимаем от данных 4096
             temp=-temp;                //и ставим знак "минус"
          }
          sprintf(lcd_buffer,"t=%i",temp/10,temp%10);    //записываем масив для экрана температуру
          lcd_clear();                //чистим дисплей перед выводом
          lcd_puts(lcd_buffer);        //выводим масив на LCD
          delay_ms(500);              //ждём 500мс 
};
}
Не могу ни как разобраться как получить данные с ds1820
 
Разобрался.
Может кому пригодится
Код:
/********
По поводу портов описаны они в даташите к atmega16
укажу здесь список портов и их 16-ти ричный адрес
PORTA = 0x1b;
PORTA = 0x18;
PORTA = 0x15;
PORTA = 0x12;

********/
#include <mega16.h>   //библиотека нашей atmega16
#include <ds1820.h>  // библиотека температурного датчика ds1820     
#include <1wire.h>   //библиотека шины 1wire
#asm                    
       .equ __w1_port=0x18;PORTB //Порт Б будем использовать для шины
       .equ __w1_bit=0    //пин 0 или PB0
 #endasm
#include <stdio.h> //библиотека ввода-вывода необходима в данном случае для функции sprintf
#include <lcd.h>   //библитека lcd
#asm
  .equ __lcd_port=0x1b;PORTA
#endasm

#include <delay.h>
unsigned char lcd_buffer[33];
void main(void){
char sign;
int temp;
lcd_init(16);
w1_init();
#asm("sei");
while(1){
//char text;
          temp=ds1820_temperature_10(0)/10;
          sign='+';  //читаем температуру 
          if (temp>1000){               //если датчик выдаёт больше 1000
             //sign='-';
             //temp=-temp;
             
             temp=4096-temp;            //отнимаем от данных 4096
             temp=-temp;                //и ставим знак "минус"
          }                                         
          sprintf(lcd_buffer,"Temp1: %d\n\r", temp) ;//записуемв масив для экрана температуру и всё такое
          lcd_clear();                //чистим дисплей перед выводом
          lcd_puts(lcd_buffer);        //выводим масив на LCD
          delay_ms(500);              //ждём 500мс 
};
}
 
Назад
Сверху