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:

Inlägg av DeVille »

Fick samples som jag skulle.
beställde hållare för ibuttons, 2 ibuttons, 2 probar..

Tog ca 2 veckor, hur bra som helst!
Användarvisningsbild
Hedis
Inlägg: 2488
Blev medlem: 8 december 2003, 15:10:44
Ort: Vänersborg
Kontakt:

Inlägg av Hedis »

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 :D (borde ju funka)

Jaja, då är det bara o vänta på att man slutar så man kan komma hem o testa.
Användarvisningsbild
DeVille
Inlägg: 2359
Blev medlem: 29 mars 2004, 15:04:22
Ort: Dalsländska skogen.
Kontakt:

Inlägg av DeVille »

Jag/vi som gjorde projektet har också skrivit våra rutiner själva. men bara för läsningen av serienr.. antar att det inte är så svårt när man väl har det, att fortsätta.. skulle gärna ta del av din kod för inlärning till ee-promet.

slutar.. i skolan då eller? vilken?
Användarvisningsbild
Hedis
Inlägg: 2488
Blev medlem: 8 december 2003, 15:10:44
Ort: Vänersborg
Kontakt:

Inlägg av Hedis »

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?
jensa
Inlägg: 149
Blev medlem: 28 oktober 2003, 18:16:49
Ort: Umeå

Inlägg av jensa »

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 :D
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.
Användarvisningsbild
DeVille
Inlägg: 2359
Blev medlem: 29 mars 2004, 15:04:22
Ort: Dalsländska skogen.
Kontakt:

Inlägg av DeVille »

Vi använder oss av serienr som ligger i programmet..


Jensa: inget är omöjligt :-) , viktigt att se till så att tiderna stämmer i AVR:en så att du bara samplar en puls en gång..
Micke_71
Inlägg: 947
Blev medlem: 18 september 2004, 22:47:23

Inlägg av Micke_71 »

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? :wink:

Mikael
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg av rickeboy »

Micke_71>> Har du kollat upp 1-wire protokollet?

//Rille
Micke_71
Inlägg: 947
Blev medlem: 18 september 2004, 22:47:23

Inlägg av Micke_71 »

Bara som snabbast (dvs 5min för ett par år sedan), sedan tog jag en Treo. :wink:

Det är säkert bra om man tar sig tid att lära sig att programera efter det. Jag har noll erfarenhet av det, precis som med I-button. Inom en snar framtid ska jag ge mig på just entråds protokoll.

Mikael
Användarvisningsbild
rickeboy
Inlägg: 678
Blev medlem: 13 augusti 2003, 09:12:17
Ort: Göteborg / Karlskrona
Kontakt:

Inlägg av rickeboy »

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
jensa
Inlägg: 149
Blev medlem: 28 oktober 2003, 18:16:49
Ort: Umeå

Inlägg av jensa »

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

Inlägg av cykze »

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.

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;
}



Skriv svar