Доброго всем времени суток! Разбираюсь с работой 1wire, а именно нужно подключить 3 датчика ds1820 к одному порту ну и собсно получать с них температуру. Начал с одного датчика упрощенного алгоритма получения температуры. Вот тестовая схема:
Вот тестовый код:
Запускаю трассировку MPLABX+PROTEUS, доходит до строчки Write_18B20(Read_scratchpad); получаю варнинг в протеусе: [DS1822] RAM COMMAND UNSUPPORTED
Подскажите люди добрые, в чём может быть проблема?
Вот проект MPLAB и схемка протеуса:
usart_tst.X.zip 171,81 Кб
4 раз скачано
Заранее благодарен!
Раздел: PIC
Вот тестовый код:
#include <pic.h>
#include <stdio.h>
#include <stdlib.h>
#define _XTAL_FREQ 4000000
__CONFIG(0x03F78);
#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
char Reset_18B20() {
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_18B20 (char Cmd){
char i;
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)
}
}
}
char Read_18B20 (){
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;
}
int main(int argc, char** argv) {
INTCON=0;
CMCON=0x07;
TRISA=0b10000000;
PORTA=255;
unsigned int temp;
unsigned short int tempL, tempH, fraction;
while(1)
{
if(!Reset_18B20()){
Write_18B20(Skip_ROM);
Write_18B20(Convert_T);
__delay_ms(750);
Reset_18B20();
Write_18B20(Skip_ROM);
Write_18B20(Read_scratchpad);
tempL = Read_18B20();
tempH = Read_18B20();
//if(tempL.F3) fraction = 1;
//else fraction = 0;
tempL >>= 4;
tempH <<= 4;
tempH += tempL;
}
__delay_ms(750);
printf("Temp=%dn", tempH);
}
}
Запускаю трассировку MPLABX+PROTEUS, доходит до строчки Write_18B20(Read_scratchpad); получаю варнинг в протеусе: [DS1822] RAM COMMAND UNSUPPORTED
Подскажите люди добрые, в чём может быть проблема?
Вот проект MPLAB и схемка протеуса:
usart_tst.X.zip 171,81 Кб
4 раз скачано
Заранее благодарен!
Раздел: PIC