Отговори на тема  [ 47 мнения ]  Отиди на страница 1, 2, 3, 4  Следваща
ds18b20 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Яну 23, 2013 12:27 am
Мнения: 9
Мнение ds18b20
Здравейте, имам проблем с кода за температурния сензор ds18b20. Микроконтролера който използвам е pic16f913.


Прикачени файлове:
lcd (2).c [2.43 KiB]
241 пъти
main.c [2.6 KiB]
231 пъти
Сря Яну 23, 2013 12:30 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: ds18b20
И какъв е проблема?

_________________
Мразя да мразя ...


Сря Яну 23, 2013 2:38 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Яну 23, 2013 12:27 am
Мнения: 9
Мнение Re: ds18b20
Проблема, е че LCD нито се инициализира, нито показва стойност.


Сря Яну 23, 2013 3:00 am
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Юни 27, 2006 11:13 am
Мнения: 381
Местоположение: Варна
Мнение Re: ds18b20
последно с датчика или с дисплея ти е проблема :)


Сря Яну 23, 2013 9:54 am
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Яну 23, 2013 12:27 am
Мнения: 9
Мнение Re: ds18b20
Ако пусна програмата за lcd отделно тя тръгва, но когато я прибавя към проекта със сензора нищо не става и не знам къде е проблема.


Сря Яну 23, 2013 11:20 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: ds18b20
Ама колегите са си забраили боба в къщи, пък аз кокалчетата в офиса...


Сря Яну 23, 2013 11:49 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: ds18b20
Опитай да зададеш посоките на пиновете 1 по 1. Особено на порт А, където е сензора и RS. Предполагам, че понеже сензорът използва 1 пин като вход и изход, това обръща RS и не го използваш като изход, когато трябва.

_________________
www.elkran.com


Сря Яну 23, 2013 11:53 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Яну 23, 2013 12:27 am
Мнения: 9
Мнение Re: ds18b20
Цитат:
Опитай да зададеш посоките на пиновете 1 по 1. Особено на порт А, където е сензора и RS. Предполагам, че понеже сензорът използва 1 пин като вход и изход, това обръща RS и не го използваш като изход, когато трябва.


#define Port_18B20 RA0
#define Tx_18B20 TRISA0 = 0
#define Rx_18B20 TRISA0 = 1

Aз съм ги задал.


Сря Яну 23, 2013 11:58 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: ds18b20
Ами няма и да стане ... я си виж програмата, като измериш температурата от датчика дали си правиш труда да покажеш стойноста на LCD-то :)

_________________
Мразя да мразя ...


Сря Яну 23, 2013 12:30 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: ds18b20
Той казва, че LDC-то не се инициализира. Погледни из цялата програма дали не променящ посоките някъде другаде..

_________________
www.elkran.com


Сря Яну 23, 2013 12:33 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Яну 23, 2013 12:27 am
Мнения: 9
Мнение Re: ds18b20
Цитат:
Ами няма и да стане ... я си виж програмата, като измериш температурата от датчика дали си правиш труда да покажеш стойноста на LCD-то


А можеш ли да ми кажеш как мога да покажа стойноста на LCD.

Цитат:
Той казва, че LDC-то не се инициализира. Погледни из цялата програма дали не променящ посоките някъде другаде..


Ако пусна само LCD и му пусна да чете някаква дума, го прави, но когато го сложа във програмата не става нищо.


Сря Яну 23, 2013 12:39 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: ds18b20
А може ли да дадеш примерен код(няколко реда) как правиш едното(как задаваш дума) и как пращаш число?!

_________________
www.elkran.com


Сря Яну 23, 2013 12:56 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Яну 23, 2013 12:27 am
Мнения: 9
Мнение Re: ds18b20
#include <htc.h>
#ifndef _XTAL_FREQ
#define _XTAL_FREQ 8000000
#endif
#include "lcd.h"


#define Skip_ROM 0xCC
#define Convert_T 0x44
#define Read_scratchpad 0xBE

#define Port_18B20 RA0
#define Tx_18B20 TRISA0 = 0
#define Rx_18B20 TRISA0 = 1


unsigned char reset();
void write(char WRT);
unsigned char read();

int main(void)
{
unsigned temp;
unsigned short tempL, tempH, fraction;
unsigned int i = 0;


lcd_init();
lcd_goto(0);
lcd_puts("DS18B20 sw1=rdy");
__delay_ms(1000);
lcd_clear();
lcd_puts("DS18B20"); //LCD display for the starting part
lcd_goto(0x40);
lcd_puts(":Degree C");

while(1) // create an infinite loop
{

if(!reset())
{
write(Skip_ROM);
write(Convert_T);
__delay_ms(750);

reset();
write(Skip_ROM);
write(Read_scratchpad);

tempL = read(); //read low temp value
tempH = read(); //read high temp value
i=((unsigned int)tempH << 8 ) + (unsigned int)tempL; //put both value in one variable
i = (float)i * 6.25 ; //calcuation from the table provided
lcd_goto(0x40);
}
}
while(1) continue;
}


unsigned char reset()
{
Tx_18B20; // Tris = 0 (output)
Port_18B20 = 0; // set pin# to low (0)
__delay_us(480); // 1 wire require time delay
Rx_18B20; // Tris = 1 (input)
__delay_us(60); // 1 wire require time delay

if (Port_18B20 == 0) // if there is a presence pluse
{
__delay_us(480);
return 0; // return 0 ( 1-wire is presence)
}
else
{
__delay_us(480);
return 1; // return 1 ( 1-wire is NOT presence)
}
}

void write(char WRT)
{
char i,Cmd;
Cmd=WRT;
Rx_18B20; // set pin# to input (1)

for(i = 0; i < 8; i++)
{
if((Cmd & (1<<i))!= 0)
{
// write 1
Tx_18B20; // set pin# to output (0)
Port_18B20 = 0; // set pin# to low (0)
__delay_us(1); // 1 wire require time delay
Rx_18B20; // set pin# to input (release the bus)
__delay_us(60); // 1 wire require time delay
}
else
{
//write 0
Tx_18B20; // set pin# to output (0)
Port_18B20 = 0; // set pin# to low (0)
__delay_us(60); // 1 wire require time delay
Rx_18B20; // set pin# to input (release the bus)
}
}
}

unsigned char read()
{
char i,result = 0;
Rx_18B20; // TRIS is input(1)
for(i = 0; i < 8; i++)
{
Tx_18B20; // TRIS is output(0)
Port_18B20 = 0; // genarate low pluse for 2us
__delay_us(2);
Rx_18B20; // TRIS is input(1) release the bus
if(Port_18B20 != 0)
result |= 1<<i;
__delay_us(60); // wait for recovery time
}
return result;
}


Сря Яну 23, 2013 12:58 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: ds18b20
dasistvas написа:
Код:
         tempL = read();         //read low temp value
         tempH = read();         //read high temp value
         i=((unsigned int)tempH << 8 ) + (unsigned int)tempL;      //put both value in one variable
         i = (float)i * 6.25 ;      //calcuation from the table provided
         lcd_goto(0x40);


Тук трябва да преобразуваш i до текст (примерно с itoa()) и след това да го покажеш с lcd_puts()

Ама нали се сещаш, че ако трябва да ти обясняваме такива неща, нещо нищо не ти е ясно :)

_________________
Мразя да мразя ...


Сря Яну 23, 2013 2:09 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Яну 23, 2013 12:27 am
Мнения: 9
Мнение Re: ds18b20
След като съм събрал старшата и младшата част на числото, го преобразувам в десетично, но после не знам как да се прехвърли на LCD


tempL = read(); //read low temp value
tempH = read(); //read high temp value
i=((unsigned int)tempH << 8 ) + (unsigned int)tempL; //put both value in one variable
y=i%100;
purva=(i-y)/100;
treta=i%10;
vtora=(y-treta)/10;
i = (float)i * 6.25 ; //calcuation from the table provided
lcd_goto(0x40);


Сря Яну 23, 2013 9:14 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 47 мнения ]  Отиди на страница 1, 2, 3, 4  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 6 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни