Ibutton

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
DeVille
Inlägg: 2359
Blev medlem: 29 mars 2004, 15:04:22
Ort: Dalsländska skogen.
Kontakt:

Ibutton

Inlägg av DeVille »

finns det någon/några här som använt Ibuttons till något med AVR?

Skulle vilja ställa lite frågor...
danei
EF Sponsor
Inlägg: 26423
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Inlägg av danei »

Ställ frågorna så finns det nog någon som kan svara.
Användarvisningsbild
DeVille
Inlägg: 2359
Blev medlem: 29 mars 2004, 15:04:22
Ort: Dalsländska skogen.
Kontakt:

Inlägg av DeVille »

Jag ska göra så att ett c-lås öppnas om rätt Ibutton sätts i proben..
jag använder en at90s8515 på 3,96Mhz , (jag vet, onödigt stor...)

har en I-button med endast "serienr".

Jag kan inte ens få mikrodatorn att kolla om det sitter någon knapp i proben.

på ttl interfacet sitter det ju en inverterare, och signal till ibuttonen är ju 0V.
Ska jag om jag vill skicka en signal till ibuttonen skicka en 1:a till inverteraren?????

Suck någon som gjort något liknande
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Det är väl uteslutande 1-wire som används för kommunikationen, eller? Är du medveten om det?
Användarvisningsbild
DeVille
Inlägg: 2359
Blev medlem: 29 mars 2004, 15:04:22
Ort: Dalsländska skogen.
Kontakt:

Inlägg av DeVille »

Jo det är jag medveten om.. men när man läser databladen så finns det ett interface som är nödvändigt för TTL nivåer, och då får du en IN och en UT som där den ena är inverterad och den andra icke inverterad.

Eller menade du något annat?
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

ok. Hur det är med inverteringen vet jag tyvärr inte. :(
gvs
EF Sponsor
Inlägg: 1688
Blev medlem: 18 oktober 2003, 14:20:34
Ort: Göteborg
Kontakt:

Inlägg av gvs »

Det här känns som mitt område... Har byggt ett lås, fast jag använder PIC. kan inget om AVR. Men någon kan kanske översätta? Har iaf postat massa trådar om det, leta lite. Kan vara så att jag är seg på att svara, är ute på resa nu och kommer hem i januari :)
Användarvisningsbild
DeVille
Inlägg: 2359
Blev medlem: 29 mars 2004, 15:04:22
Ort: Dalsländska skogen.
Kontakt:

Inlägg av DeVille »

OK GVS.. bara ute å roar dig :) .. nu kommer några frågor.

När man skall göra en sk presence check.. skickar man en signal på minst 480us sedan skall man vänta på ett svar...

Men när man skickar 480us skall det vara "1" ut från CPU eller skall jag ta utgången låg under den tiden?

Finns det något bra sätta att testa, mha oscilloskop??
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Om du kodar med högnivåspråk, är det då inte ganska lätt att använda en färdig 1-wire-rutin för att kommunicera med en iButton?
Användarvisningsbild
DeVille
Inlägg: 2359
Blev medlem: 29 mars 2004, 15:04:22
Ort: Dalsländska skogen.
Kontakt:

Inlägg av DeVille »

jooo, om jag hade hittat någon som funkar så....
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

De_Ville skrev:OK GVS.. bara ute å roar dig :) .. nu kommer några frågor.

När man skall göra en sk presence check.. skickar man en signal på minst 480us sedan skall man vänta på ett svar...

Men när man skickar 480us skall det vara "1" ut från CPU eller skall jag ta utgången låg under den tiden?

Finns det något bra sätta att testa, mha oscilloskop??
Prova!

Gör bussen låg i 480 µs och läs av efter typ 72 µs. Läser du en 0:a så fungerar det. Vänta sedan 424 µs innan du gör något annat.
Användarvisningsbild
DeVille
Inlägg: 2359
Blev medlem: 29 mars 2004, 15:04:22
Ort: Dalsländska skogen.
Kontakt:

Inlägg av DeVille »

ok..
jag testar med följande program, kan det funka kanske??

Kod: Markera allt

void main(void)                 	// Main runs under the AvrX Stack
{

//OBS Programmmmmmm

	
	TCCR0=3;	//Initiering av klocka 64
	DDRB=0xFF;	//

while(1){


int tmp;
     //send 'master reset pulse'
     DDRA = 0xFF; //set line as output
     PORTA = 0;   //Set bus Low          
     
	 
	 
	 //!!!!!!!!!!!!!DELAY 500uS!!!!!!!!!!!!!!
	 Delay500u();
     
	 //realse the line, and read the iButton presence pulse (low level)       
     DDRA = 0x00; //set line as input
     
	 //!!!!!!!!!!!!!DELAY 70uS!!!!!!!!!!!!!!
	 Delay70u();
	 
	 
	 tmp = PINA;	//Read Presence pulse
	 
	 
     //!!!!!!!!!!!!!DELAY 500uS!!!!!!!!!!!!!!
	 Delay500u();
     
	 
	//Tänd Alla Dioder om knapp finns, annars bara högra hälften.
	 while (1){
     if (tmp==1) PORTB=0x0F;
     else PORTB=0xFF;
		}
		
		
		
		




	return(0);
}
}





void Delay500u(void)
{
int a;
TCNT0=0;
do{
a=a+1;
}
while (TCNT0<=37);


return(0);


}

void Delay100u(void)
{
int b;
TCNT0=0;
do{
b=b+1;
}
while (TCNT0<=7);


return(0);


}

void Delay70u(void)
{
int c;
TCNT0=0;
do{
c=c+1;
}
while (TCNT0<=5);


return(0);


}
gvs
EF Sponsor
Inlägg: 1688
Blev medlem: 18 oktober 2003, 14:20:34
Ort: Göteborg
Kontakt:

Inlägg av gvs »

Minns inte riktigt, men det finns väldigt bra beskrivet på ibutton.com lite svårt att hitta bara men det finns info om det.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

De_Ville skrev:ok..
jag testar med följande program, kan det funka kanske??

Kod: Markera allt

[klipp]
	 
	 tmp = PINA;	//Read Presence pulse
	 	 
     //!!!!!!!!!!!!!DELAY 500uS!!!!!!!!!!!!!!
	 Delay500u();
     	 
	//Tänd Alla Dioder om knapp finns, annars bara högra hälften.
	 while (1){
     if (tmp==1) PORTB=0x0F;
     else PORTB=0xFF;
		}
[klipp]
1. Har du kopplat Data från iButton:en till en pinne på PortA? Har du pullup på Data?

2. I koden ovan handskas du med hela PortA, istället för bara den pinne det gäller (den som du har kopplat till iButton:en). Det gör att "tmp=PINA" och "tmp==1" inte blir som du har tänkt dig. Du kan ändra "tmp==1" till "tmp & _BV(PA0)" för att ordna det (om du har iButton:en inkopplad på PA0).

3. Vad är förresten 'int' för en typ? "signed 8-bitars", "unsigned 8-bitars", "signed 16-bitars" eller "unsigned 16-bitars"?

4. Behöver man inte låta bussen vara hög en stund i början för att iButton:en ska kunna ladda upp sig lite?

5. Säker på att dina delay-funktioner stämmer? Jag föredrar _delay_loop_2() istället timers när det handlar om korta delays.

Är det förresten WinAVR/AVR-GCC du kör som kompilator?
Senast redigerad av cykze 20 september 2004, 12:37:52, redigerad totalt 1 gång.
Användarvisningsbild
DeVille
Inlägg: 2359
Blev medlem: 29 mars 2004, 15:04:22
Ort: Dalsländska skogen.
Kontakt:

Inlägg av DeVille »

1. Ja jag har ett pullup motstånd på Data, jag vet tyvärr inte varför det skall vara där.. men men..

2. OK jag ska testa med detta istället, tack!

3. Jag tror den är signed 8 bitars.

4. Har lagt in så att vid initiering så låter jag bussen vara hög, men hur
länge skall den vara det? 500u eller längre?

5. Delayerna ska stämma, har räknat igenom dem 3 ggr nu.

6. Japp det är AVR GCC som används som kompilator.



Så som jag har fattat allt så skall signal vara logisk nolla!
rör till allt ibland... :)

Återkommer när jag testat de nya villkoren för if satsen.
Skriv svar