Sida 1 av 1

Ibutton + Pic

Postat: 21 april 2005, 19:56:32
av Grip
Försöker att läsa av en ibutton med en pic men får inte det att fungera.
Använder dessa funktioner som jag har skrivit själv med hjälp av diverse datablad.

Kod: Markera allt

void send_byte(char data)
{
	char counter = 0;

	while (counter < 8)
	{
		RC0 = 0;
		TRISC0 = 0;
		DelayUs(5);
		if (data & 0x01)
			RC0 = 1;

		DelayUs(60);

		TRISC0 = 1;
		
		data = data >> 1;
		counter++;
	}
}

char get_byte(void)
{

	char counter = 0;
	char data    = 0x00;
	char temp = 0x00;
	
	while (counter < 8)
	{
		RC0 = 0;
		TRISC0 = 0;
		DelayUs(6);

		TRISC0 = 1;
		DelayUs(4);

		
		if (RC0)
			temp = 0x01;
		
		data = data << 1;
		data |= temp; 				

		temp = 0x00;

		DelayUs(50);
		counter++;		
	}
	
	return data;
}

Men som sakt de fungerar inte. Någon som ser vad som är fel?
För det gör inte jag :shock:

Postat: 21 april 2005, 20:02:03
av cykze
Börja med att skicka en Reset-signal och kolla att du får rätt svar tillbaka (kallas för presence i databladen).

Postat: 21 april 2005, 20:03:19
av Grip
Glömde skriva att just den funktionen fungerar som det skall. Därför den inte finns med.

Postat: 21 april 2005, 20:35:47
av cykze
Jag tycker att det ser rätt om jag jämför med min kod. Men du kan prova att öka tiden från 60us till 100us och från 50us till 100us. 60us är minimitiden för en timeslot så den skulle jag ha ökat lite för att vara lite säkrare. Och mellan två timeslots kan det ju gå hur lång tid som helst så där kan du ta i lite för att utesluta att felet ligger där.

Hur vet du att det inte fungerar förresten?

Postat: 21 april 2005, 20:46:03
av Grip
Skriver ut den första "byten" på en lcd.
Har även en ibutton till usb dong så jag har hela serie nummert o kan gämföra.
Testade att öka tiderna men det fungerade ändå inte.
Börjar tro att det är mina delay rutiner som krånglar.
Har inte skrivit de själv. Någon som har några bra på lager?
Annars får jag väl skriv en i asm så det blir lätt att räkna.

Postat: 21 april 2005, 21:08:14
av Icecap
Det har varit förut: har du definerat kristall-klockan rätt? om inte skiter dina delayUs sig rejält.

Postat: 22 april 2005, 20:45:09
av Grip
Ja då. Allt var som det skulle. Mina delays fungerade exakt som de skulle. MEN eftersom jag inte är så bra på att hålla ordning så hade jag råkat läsa av en ibutton med min usb adapter och sen satt en annan till picen. Sen glömde jag att tänka på att den läser LSB först. Fast iför sig så har jag nog lärt mig 1-wire ganska bra nu.
Får se om det blir nått under projekt sen, funderar på en del saker nämligen 8)