code_97672.txt

(2 KB) Pobierz
/*
 * main.c
 *
 *  Created on: 18 wrz 2014
 *      Author: X
 */


#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include <math.h>

#define WE 2
#define PORT_1WIRE PIND
#define SET_1WIRE DDRD&=~_BV(WE)
#define CLEAR_1WIRE DDRD|=_BV(WE)










int main (void)
{
DDRB=0x00;
//int dziesiatki;
//int ldziesiatki;

int cyferki[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};


   /* for (dziesiatki=0; dziesiatki<10;dziesiatki++)
    {
		for(ldziesiatki=0;ldziesiatki<10;ldziesiatki++)
		{
			DDRB=~(cyferki[ldziesiatki]|cyferki[dziesiatki]<<4);
			_delay_ms ( 100 );

		}
	}
*/
void liczba(int a,int b)
{
	DDRB=~(cyferki[b]|cyferki[a]<<4);
}

unsigned char RESET_PULSE(void)
{
	unsigned char presence;
	CLEAR_1WIRE;
	_delay_us(500);
	SET_1WIRE;
	_delay_us(30);
	if(bit_is_clear(PORT_1WIRE,WE))
	{presence=1;}else{presence=0;}
	_delay_us(470);
	if(bit_is_set(PORT_1WIRE,WE)){presence=1;}else{presence=0;}
	return presence;
}


void send(char bit){
	CLEAR_1WIRE;
	_delay_us(5);
	if(bit==1)
		{
			SET_1WIRE;
			_delay_us(80);
			SET_1WIRE;
		}
	}//koniec send


unsigned char read(void)
	{
		unsigned char presence;
		CLEAR_1WIRE;
		_delay_us(2);
		SET_1WIRE;
		_delay_us(15);
		if(bit_is_set(PORT_1WIRE,WE)) presence=1;else presence=0;
		return presence;

	}//koniec read

void send_byte(char wartosc)
	{
		unsigned char i;//zmienna licznikowa
		unsigned char pom; //zmienna pomocnicza
		for(i=0;i<8;i++)
		{
		pom = wartosc>>i;
		pom &=0x01;
		send(pom);
		}
		_delay_us(100);
	}//koniec sendbyte


unsigned char read_byte(void)
	{
	unsigned char i;
	unsigned char wartosc=0;
	for(i=0;i<8;i++)
		{
		if(read()) wartosc|=0x01<<i;
		_delay_us(15);
		}
	return(wartosc);
	}//koniec readbyte





unsigned char sprawdz;
//int temp1=0,temp2=0;
while(1){
	sprawdz=RESET_PULSE();
	if(sprawdz==1)
	{
	uint8_t temperature[2];
	uint8_t digit;

	send_byte(0xCC);//skip rom
	send_byte(0x44);//convert t
	_delay_ms(750);
	sprawdz=RESET_PULSE();
	send_byte(0xCC);
	send_byte(0xBE);
	temperature[0]=read_byte();
	temperature[1]=read_byte();
	sprawdz=RESET_PULSE();
	digit=temperature[0]>>4;
	digit|=(temperature[1] & 0x07)<<4;




	liczba(floor(digit/10),digit%10);
	_delay_ms(500);
	RESET_PULSE();
	}













}



}
Zgłoś jeśli naruszono regulamin