Ibutton
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
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
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??
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!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??
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.
ok..
jag testar med följande program, kan det funka kanske??
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);
}
1. Har du kopplat Data från iButton:en till en pinne på PortA? Har du pullup på Data?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]
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.
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.
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.