Ibutton
Jag beställde oxå för någon månad sedan. För någon vecka sedan kom några ibuttons (DS1990,DS1991,DS1973) och proben var restad. Till min förvåning så damp det allt ner en probe i brevlådan i torsdags.
Inatt lyckades jag även sparka igång mjukvaran så den är nästintill klar. Skall bara utveckla ett fint system för att hantera inlärnin/radering utav godkännda nycklar.
Skall försöka använda eepromet i µC´n för o spara tabellen över godkännda nycklar.. Labbar just nu med en Mega32:a. (slutversionen blir nog för Mega8:an)
Har skrivit allt själv. (inga färdiga rutiner här inte)
Det var faktiskt riktigt skoj o inte alls så svårt som jag trodde.
Har bara ett litet problem. När man läser ut datan ifrån ibuttonen så kommer datan med lsb först. Just nu så läser jag en byte åt gången. För varje bit så skiftar jag den ett steg åt vänster, men då blir allt spegelvänt.
Någon som vet hur man spegelvänder det?
Hmm... man kansk skulle rotera det åt höger istället (borde ju funka)
Jaja, då är det bara o vänta på att man slutar så man kan komma hem o testa.
Inatt lyckades jag även sparka igång mjukvaran så den är nästintill klar. Skall bara utveckla ett fint system för att hantera inlärnin/radering utav godkännda nycklar.
Skall försöka använda eepromet i µC´n för o spara tabellen över godkännda nycklar.. Labbar just nu med en Mega32:a. (slutversionen blir nog för Mega8:an)
Har skrivit allt själv. (inga färdiga rutiner här inte)
Det var faktiskt riktigt skoj o inte alls så svårt som jag trodde.
Har bara ett litet problem. När man läser ut datan ifrån ibuttonen så kommer datan med lsb först. Just nu så läser jag en byte åt gången. För varje bit så skiftar jag den ett steg åt vänster, men då blir allt spegelvänt.
Någon som vet hur man spegelvänder det?
Hmm... man kansk skulle rotera det åt höger istället (borde ju funka)
Jaja, då är det bara o vänta på att man slutar så man kan komma hem o testa.
Så nu var jag hemma.
Läser en påbyggnadsutbildning nu som ett 4:e år. Fordonselektronik (under Komvux regi) här i Trollhättan. Läste Elektronik 3 år innan. (gymnasiet)
Jag har tyvärr inte skrivit några rutiner för eeprom hantering än. Tänkte kolla lite på det nu.
Jo när man väl har grund-rutinerna för att kommunicera med den så är det nog inte jobbigt o fortsätta. Vore lite grymmt o köra med DS1991 och krypterad nyckel för access.
I nuläget så läser jag oxå bara serienr't och jämnför det med ett som är inlagt i programmet.
Tänkte få till någon liten kodsnutt som fungerar ngt liknande detta:
-Om en knapp på kortet trycks in så kommer man in i admin-mode. Det måste dock bekräftas med en "masterkey". Alltså en Ibutton som har sitt serienr i programmet.
-När den är bekräftad så kan man lägga till/radera nycklar.
-Man duttar dit den nya nyckeln som man vill lägga till o så vipps är den inlagd.
-Om den redan skulle finnas i databasen så raderas den.
Nu är ju frågan vad man gör om man tappar en nyckel, lite halvjobbigt att radera den då
Får nog fundera ut ngt mer till det här.
De_Ville> Hur sköter ni registrering och radering utav godkännda nycklar?
Läser en påbyggnadsutbildning nu som ett 4:e år. Fordonselektronik (under Komvux regi) här i Trollhättan. Läste Elektronik 3 år innan. (gymnasiet)
Jag har tyvärr inte skrivit några rutiner för eeprom hantering än. Tänkte kolla lite på det nu.
Jo när man väl har grund-rutinerna för att kommunicera med den så är det nog inte jobbigt o fortsätta. Vore lite grymmt o köra med DS1991 och krypterad nyckel för access.
I nuläget så läser jag oxå bara serienr't och jämnför det med ett som är inlagt i programmet.
Tänkte få till någon liten kodsnutt som fungerar ngt liknande detta:
-Om en knapp på kortet trycks in så kommer man in i admin-mode. Det måste dock bekräftas med en "masterkey". Alltså en Ibutton som har sitt serienr i programmet.
-När den är bekräftad så kan man lägga till/radera nycklar.
-Man duttar dit den nya nyckeln som man vill lägga till o så vipps är den inlagd.
-Om den redan skulle finnas i databasen så raderas den.
Nu är ju frågan vad man gör om man tappar en nyckel, lite halvjobbigt att radera den då
Får nog fundera ut ngt mer till det här.
De_Ville> Hur sköter ni registrering och radering utav godkännda nycklar?
Fint, jag får ta fram 2 bitar kabel å koppla, (har en 1992:a men ingen läsare) samt några DS18s20 termometrar (1wire) å koppla till 8515:en.
Har då alltid trott att det är helt omöjligt (nästan) att hålla på med 1wire.
[EDIT] nee inget e omöjligt som Gudemannen brukar säga
Jag vet hur länge jag har sneglat på min fina 1992:a
IDOLBILD
http://www.regerar.org/elektronikforumet/idolbilden.jpg Notera att den gröna krigsveteranen inte har ett högeröga, munnen e sne, att den har mer damm än grönighet samt att armar och ben snart trillar av. Man fick ju en sådan när man var medlem på sånt där laserkrigsspel för x antal år sedan.
Har då alltid trott att det är helt omöjligt (nästan) att hålla på med 1wire.
[EDIT] nee inget e omöjligt som Gudemannen brukar säga
Jag vet hur länge jag har sneglat på min fina 1992:a
IDOLBILD
http://www.regerar.org/elektronikforumet/idolbilden.jpg Notera att den gröna krigsveteranen inte har ett högeröga, munnen e sne, att den har mer damm än grönighet samt att armar och ben snart trillar av. Man fick ju en sådan när man var medlem på sånt där laserkrigsspel för x antal år sedan.
Senast redigerad av jensa 19 oktober 2004, 20:53:20, redigerad totalt 1 gång.
Den där nya lilla pic'en vore väl annars kalas att nyttja på detta sätt utan att behöva bråka med tider. Fast då måste du ha 4 anslutningar till läsaren. +5v, gnd, clock, data. Men då skulle jag ha lagt till en "data in" så att man kan få en funktion likt säkerhetsdosan till internet banken. Men vart finns utmaningen i det?
Mikael
Mikael
K...
Noterade nämligen att du sa ngt om en pic och att köra med 4:a anslutningar... det som är grejen med 1-wire nämligen... du ska bara behöva en anslutning
Dvs från en pinne på ngnslags controller samt GND...
På grund utav detta så blir det tiderna som är viktiga att hålla reda på... dock ett snabbt protokoll...
//Rille
Noterade nämligen att du sa ngt om en pic och att köra med 4:a anslutningar... det som är grejen med 1-wire nämligen... du ska bara behöva en anslutning
Dvs från en pinne på ngnslags controller samt GND...
På grund utav detta så blir det tiderna som är viktiga att hålla reda på... dock ett snabbt protokoll...
//Rille
Hmm, har ingen hållare så jag kör med lite tape på min. Och funderar på om jag kopplar rätt.
http://www.regerar.org/elektronikforumet/ibutton.gif
botten = grå = data?
När jag testade med rickeboys kodexempel så vart det då ingen skillnad (lyste oavsett om jag hade ibutton eller ej)
skulle vara fint om man fick ordning på ibuttons <->avr
http://www.regerar.org/elektronikforumet/ibutton.gif
botten = grå = data?
När jag testade med rickeboys kodexempel så vart det då ingen skillnad (lyste oavsett om jag hade ibutton eller ej)
skulle vara fint om man fick ordning på ibuttons <->avr
Här är mina 1-wire-rutiner:
delay-funktionen förutsätter att du kör på 4 MHz. Gör du inte det är det enkelt att ändra. Vilken frekvens kör du på?
Jag har använt mig av PD6 som data-pinne i programmet.
"Read ROM" är metoden som används i main() för att få fram serienummret. Den fungerar bara med en 1-wire-enhet inkopplad.
Koden kompileras med AVR-GCC.
Din ritning stämmer. Sidan med texten är Data.
delay-funktionen förutsätter att du kör på 4 MHz. Gör du inte det är det enkelt att ändra. Vilken frekvens kör du på?
Jag har använt mig av PD6 som data-pinne i programmet.
"Read ROM" är metoden som används i main() för att få fram serienummret. Den fungerar bara med en 1-wire-enhet inkopplad.
Koden kompileras med AVR-GCC.
Din ritning stämmer. Sidan med texten är Data.
Kod: Markera allt
#include <avr/delay.h>
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define delay _delay_loop_2
uint8_t ow_reset()
{
uint8_t presence;
DDRD |= _BV(PD6);
PORTD &= ~_BV(PD6);
delay(480);
DDRD &= ~_BV(PD6);
delay(72);
presence = PIND&_BV(PD6);
delay(424);
return presence;
}
uint8_t ow_read_bit()
{
uint8_t val;
DDRD |= _BV(PD6);
delay(1);
DDRD &= ~_BV(PD6);
delay(15);
val = (PIND & _BV(PD6)) ? 1 : 0;
delay(120);
return val;
}
void ow_write_bit(uint8_t bitval)
{
DDRD |= _BV(PD6);
if (bitval==1)
DDRD &= ~_BV(PD6);
delay(104);
DDRD &= ~_BV(PD6);
}
uint8_t ow_read_byte()
{
uint8_t i, value = 0;
for (i=0;i<8;i++)
if (ow_read_bit())
value |= 0x01<<i;
return value;
}
void ow_write_byte(uint8_t val)
{
uint8_t i, temp;
for (i=0; i<8; i++)
{
temp = val>>i;
temp &= 0x01;
ow_write_bit(temp);
}
delay(104);
}
int main()
{
int8_t i;
uint8_t buf[3], code[8];
// Om 1-wire:n är kopplad till PB0
DDRB = _BV(PB0);
PORTB = _BV(PB0);
// Kör igång "Read ROM"-kommandot
ow_reset();
ow_write_byte(0x33);
for (i=7;i>=0;i--)
code[i] = ow_read_byte();
// Formaterar byte:sen till null-terminerade strängar.
// Ex: "0f"
for (i=0;i<8;i++)
{
itoa(code[i], &buf, 16);
if (code[i] < 0x10)
{
buf[1]=buf[0];
buf[0]='0';
buf[2] = '\0';
}
//lcd_string(buf); //Skriv ut byte:n på något sätt
}
while (1)
;
return 1;
}