Sida 1 av 1

Någon som använt en DS1802 någon gång?

Postat: 22 juli 2005, 20:14:11
av Nannou
Hej! Ställer många frågor nu, är jättetacksam för all hjälp jag får :)

Försöker få en Maxim DS1802 att fungera. Någon här som använt en? Det är en digital potentiometer som styrs antingen via knapptryckningar, eller som jag försöker med, ett seriellt interface. (alla knappingångar är jordade enligt datablad)
Det verkar inte så svårt, man sätter !RST hög, och sen klockar in 16 bitar på D, en i taget när CLK går hög. och sen sätta !RST låg. För det mesta fungerar det inte alls, men då och då lyckas jag få till att wipern hoppar till ett till synes godtyckligt ställe.
Dataöverföringen är väl rätt så standard, så någon kanske har ett bättre sätt att göra det på? Själv använder jag en 16F877A@20MHz och Hitech PICC. Mina C-kunskaper är inte de bästa :?

Kod: Markera allt

void set_pot(unsigned char pot_val)
{
	pot_val&=0x3F; //maskar av till de lägsta 6bit som är datan

	RD6=1; //!RST går hög, starta programmering
	DelayUs(10); //pausa lite
		
	for(i=0;i<=1;i++) //först pot1 och sen pot2 med samma värde
	{
		k=0x01; //bit 0
		for(j=0;j<=7;j++)
		{
			RD4=0; //CLK går låg
			DelayUs(10);
			if(pot_val&&k) //kollar om bit nr i (k) är hög eller låg
				RD5=1; //och sätt biten
			else
				RD5=0;
			DelayUs(10);
			RD4=1; //CLK går hög
			k<<1; //kolla nästa bit
			DelayUs(10);
		}
	}
	
	RD6=0; //!RST går låg. programmering klar
	DelayUs(10);
}

Postat: 22 juli 2005, 23:25:47
av sodjan
Låter som "timing" problem.

Varför kör du inte assembler ? Mycket enklare att få till exakt timing och delayer. Det är alltid en viss "osäkerhet" i vad runtime miljön i C ställer till med :-)

Har du något instrument så att du kan verifiera att din F877'a skickar ut rätt signaler ? Eller kan du verifiera det på något annat sätt ?

Observera att du kan köra serie interfacet hur långsamt som helst, så du skulle kunna "se" att rätt pulser körs ut med en voltmeter eller ett par ljusdioder... :-)

Postat: 23 juli 2005, 01:53:53
av cyr
Har inte lusläst databladet, men jag funderar på varför du kör:

klock låg
ändra data
klock hög

istället för

ändra data
klock hög
klock låg


Känns lite fel att lämna klockan hög på slutet, även om det kanske inte borde påverka något.

Och en mer uppenbart grej som jag först missade:

if(pot_val&&k) är väl inte samma sak som if(pot_val&k).

Det första utvärderar pot_val och k som boolska värden var för sig, medan det andra är bitvis AND som du vill ha.

Postat: 30 juli 2005, 18:50:43
av DeVille
När jag använde Ibuttons så var det mycket viktigt med timingen..
Kolla så att du får rätt längd på pulserna med ett oscilloscop.. Sen kunde man lätt bli förvirrad av en inverterad signal som ska bli hög osv om man stirrat på det för många timmar.