Witam,
Chciałbym odczytać z czujnika DS18b20 tzw. 64 bitowy ROM ID. Napisałem taki kawałek kodu ale zamiast konkretnych wartości dostaje jakieś krzaki.
#include <avr/io.h>
#include <stdlib.h>
#include <util/delay.h>
#include "HD44780.h"
#include "ds18s20.h"
int main(void)
{
unsigned char rom[8]; //tablica do przechowywania seriala
unsigned char i;
LCD_Initalize();
LCD_Clear();
LCD_WriteText("Odczyt kodu ROM");
_delay_ms(1000);
LCD_Clear();
while(1)
{
RESET_PULSE();
send_byte(0x33); // READ ROM
for (i=0;i<8;i++)
{
rom[i] = read_byte();
}
for (i=0;i<8;i++)
{
LCD_Clear();
LCD_WriteData(rom[i]);
_delay_ms(2000);
}
}
return 0;
}
unsigned char read_byte(void)
{
unsigned char i, wartosc = 0;
for (i=0;i<8;i++)
{
CLEAR_1wire;
_delay_us(2);
SET_1wire;
_delay_us(12);
wartosc >>= 1;
if (IN_DQ) wartosc |= 0x80;
_delay_us(100);
}
return(wartosc); //zwrot wartosci do funcji
}
void LCD_WriteData(unsigned char dataToWrite)
{
LCD_RS_PORT |= LCD_RS;
_LCD_Write(dataToWrite);
}
void _LCD_Write(unsigned char dataToWrite)
{
LCD_DB4_DIR |= LCD_DB4;
LCD_DB5_DIR |= LCD_DB5;
LCD_DB6_DIR |= LCD_DB6;
LCD_DB7_DIR |= LCD_DB7;
LCD_RW_PORT &= ~LCD_RW;
LCD_E_PORT |= LCD_E;
_LCD_OutNibble(dataToWrite >> 4);
LCD_E_PORT &= ~LCD_E;
LCD_E_PORT |= LCD_E;
_LCD_OutNibble(dataToWrite);
LCD_E_PORT &= ~LCD_E;
while(LCD_ReadStatus()&0x80);
}
Dziwne bo funkcja read_byte zwraca unsigned char natomiast LCD_WriteData przyjmuje taką samą wartość, więc nie ma niezgodności typów. Może w niewłaściwy sposób doczytuje zawartość ROM Code z czujnika??
Pozdr.
Kuba