Ibutton + Pic

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Grip
EF Sponsor
Inlägg: 159
Blev medlem: 16 oktober 2004, 15:44:09

Ibutton + Pic

Inlägg 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:
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg 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).
Grip
EF Sponsor
Inlägg: 159
Blev medlem: 16 oktober 2004, 15:44:09

Inlägg av Grip »

Glömde skriva att just den funktionen fungerar som det skall. Därför den inte finns med.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg 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?
Grip
EF Sponsor
Inlägg: 159
Blev medlem: 16 oktober 2004, 15:44:09

Inlägg 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.
Användarvisningsbild
Icecap
Inlägg: 26645
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Det har varit förut: har du definerat kristall-klockan rätt? om inte skiter dina delayUs sig rejält.
Grip
EF Sponsor
Inlägg: 159
Blev medlem: 16 oktober 2004, 15:44:09

Inlägg 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)
Skriv svar