Amtel AVR och 1-Wire buss(Ibutton)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
PTN
Inlägg: 2
Blev medlem: 17 december 2005, 19:40:31

Amtel AVR och 1-Wire buss(Ibutton)

Inlägg av PTN »

Hejsan

Tänkte höra om det är någon här på forumet som har erfarenhet av 1-wire bussen. Håller på att försöka få igång en ibutton(www.ibutton.com). Där jag vill initiera kretsen, skicka ett ROM kommando och läsa av det unika serienummret. Har använt mig av en Atmel at90s2313 och sedan är ibutton kretsen kopplad direkt mot UART:en. Har följt atmels blad för 1-wire stöd: http://www.atmel.com/dyn/resources/prod ... oc2579.pdf för signalering och transistor koppling.

En lite förenklad beskrivning över vad jag försöker göra i mitt program:

1. Uart initieras i 9600 baud.
2. UDR = 0xf0, 0xf0 skickas på uarten.
3. Får någon typ av svar från ibutton kretsen i UART avbrottet , 0xe0.
4. Byter till 115200 baud
5. UDR = 0xff (2x) för att representera kommandot 0x33(ReadROM)
6. UDR = 0x00 (2x) för att representera kommandot 0x33(ReadROM)
7. UDR = 0xff (2x) för att representera kommandot 0x33(ReadROM)
8. UDR = 0x00(2x) för att representera kommandot 0x33(ReadROM)
9. UDR = 0xff, skickar det 8x gånger för att sedan kunna läsa av "family" koden i avbrotts rutinen.

Problemet är att inget vettigt kommer tillbaka från ibutton kretsen. Möjligt att jag har missuppfattat hur bussen fungerar eller så har jag kodat fel. Är det någon av er som har fått igång någon enhet över 1-wire bussen och har någon C kod att dela med er av ? Alla andra tips som kan vara av intresse mottages gladligen :)
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Intressant idé att koppla 1-wire:n till UART:en.

Det vanligaste annars är att bara använda en pinne på AVR:en och sedan växla mellan ingång (för att göra bussen hög eller läsa av bussen) och utgång (för att göra bussen låg) och sedan stoppa in lite delays där i mellan.

Du kan kolla min kod här för lite tips. Vad det gäller 1-wire över UART kan jag tyvärr inte hjälpa dig...

Välkommen till forumet förresten! :)
rehnmaak
Inlägg: 2204
Blev medlem: 13 december 2005, 01:43:41

Inlägg av rehnmaak »

Jag har kört en del 1-wire, men då bit-bangade jag en port på processorn och läste tillbaka på en annan. Det man generellt kan säga är att dallas har rätt vida specar på hur timingen ska se ut så det är inte helt lätt att skriva en programvara som uppfyller specen.

Intressant dock att dallas skiver i databladet hur man kan använda en UART.

Har du tänkt på att du bara får en bit i taget per avbrott från uarten?

Vilka är de första 8 bytesen du får tillbaka?

Edit: Atmel var det visst som skrivit app noten.
PTN
Inlägg: 2
Blev medlem: 17 december 2005, 19:40:31

Inlägg av PTN »

Det verkar som att dom flesta har valt att lösa det igenom att använda en pinne på mikrokontrollern, för det finns inte mycket övrig information att hämta. Har även kontrollerat hur signalerna ser ut som skickas på UART:en från mikrokontrollern, och dom verkar stämma mot databladet(kollat med oscilloskop).

Har du tänkt på att du bara får en bit i taget per avbrott från uarten?
Ja, avbrottsrutinen lagrar undan en bit per avbrott i en array.

Vilka är de första 8 bytesen du får tillbaka?
Om jag tolkar det rätt så är den första byten som jag får tillbaka 0xfe och resten 0xff. Vilket inte ger mig mycket. Om jag har tänkt rätt borde jag få tillbaka "family" koden som ska vara 0x08 för den enheten som jag använder mig utav.

cykze: tack för koden, ska provas.
rehnmaak
Inlägg: 2204
Blev medlem: 13 december 2005, 01:43:41

Inlägg av rehnmaak »

Jag kom på att du måste köra en SEARCH ROM först för att hitta alla enheter. Sedan kör du en MATCH ROM för att välja det minne du vill adressera. Eventuellt kan du köra en SKIP ROM istället men du får läsa på hur det funkar isåfall. SEN kör du READ ROM!
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

rehnmaak:

> ...SEN kör du READ ROM!

Grejjen med "Read ROM" är just att man slipper gå igenom den krångliga "Search ROM"-algoritmen, förutsatt att man vet att det bara finns en enhet på bussen. Så "Read ROM" kan mycket väl vara det första kommandot man skickar.
rehnmaak
Inlägg: 2204
Blev medlem: 13 december 2005, 01:43:41

Inlägg av rehnmaak »

Är du säker? Jag kollade snabbt igenom databladet för ett 1-w minne och det stod lite kryptiskt att man kunde köra SKIP ROM om man bara hade en enhet på bussen annars skulle man köra SEARCH ROM. Men jag kan mycket väl ha fel.

Det jag vet är att när jag höll på med dessa 1-w kretsar så körde jag SEARCH ROM först.

Edit: du har rätt! Enligt fig 9-1 i databladet till DS2431 kan man köra READ ROM som första kommando.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

"Read ROM" kör man _bara_ när man har en enhet på bussen. "Search ROM" kör man om man har flera enheter inkopplade. Man väljer alltså en av metoderna. När det är klart har man sina ID-nummer insamlade och behöver inte dessa funktioner mera (inte förrens man kopplar till fler enheter).

För att sedan välja enhet kör man "Match ROM" tillsammans med ID-nummret. Har man bara en enhet inkopplad räcker det med en "Skip ROM". (Det går tydligen att göra lite annat med "Skip ROM", när man har fler enheter, men det är inte nödvändigt.)
rehnmaak
Inlägg: 2204
Blev medlem: 13 december 2005, 01:43:41

Inlägg av rehnmaak »

För att göra det lite tydligare: SKIP ROM hoppar över läsningen av id:nr och går direkt till data funktionerna.
mullemeck
Inlägg: 1306
Blev medlem: 27 maj 2003, 23:52:06
Ort: Lund
Kontakt:

Inlägg av mullemeck »

Har implementerat 1-wire protokollet genom bit-banging av en port, är inte så knepigt bara man har ett oscilloskop så man kan se lite vad som försigår.

Sen ska man köra Search Rom kommandot så måste man väll göra det med endast en enhet inkopplad, annars får man väll tillbaka adresser från alla enheterna.

bara en sen/tidig tanke =)
rehnmaak
Inlägg: 2204
Blev medlem: 13 december 2005, 01:43:41

Inlägg av rehnmaak »

Nja SEARCH ROM gör så att alla enheter börjar mata ut sina id:nr samtidigt men den enhet som lägger ut en nolla "vinner". Man måste identifiera dessa bitar där man har en kollision och bygga en trädstruktur för att hitta alla enheter. Det är en något förenklad beskrivning, den som är intresserad kan läsa här: http://www.maxim-ic.com/getds.cfm?qv_pk=4272&ln=en
Skriv svar