Технический форум
Вернуться   Технический форум > Программирование > Форум программистов


Ответ
 
Опции темы Опции просмотра
Старый 23.03.2012, 09:25   #1 (permalink)
WOLF007
Member
 
Аватар для WOLF007
 
Регистрация: 24.02.2009
Сообщений: 806
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 563
По умолчанию 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
WOLF007 вне форума   Ответить с цитированием
Старый 23.03.2012, 10:43   #2 (permalink)
WOLF007
Member
 
Аватар для WOLF007
 
Регистрация: 24.02.2009
Сообщений: 806
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 563
По умолчанию

Разобрался.
Может кому пригодится
Код:
/********
По поводу портов описаны они в даташите к 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мс 
};
}
WOLF007 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 02:13.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.