PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Erfahrungen mit DS2482 1wire-I2C-Konverter?



ThSteier
18.06.2006, 14:41
Hallo,

hat hier schon jemand Erfahrungen mit dem DS2482 von Maxim gesammelt? Der IC macht einen ganz brauchbaren Eindruck, er kümmert sich eigenständig um Timing und Signalformung für den 1wire-Bus und setzt das nach I2C (bzw zurück) um. Damit könnte man dem Controller einiges an Arbeit (und sich selbst einiges an Kopfschmerzen :wink: ) ersparen.

Die Datenblätter:
DS2482-100 (http://www.maxim-ic.com/getds.cfm?qv_pk=4382) (1-Kanal)
DS2482-800 (http://www.maxim-ic.com/getds.cfm?qv_pk=4338) (8-Kanal)

Viele Grüße,
Thomas

MasterFX
18.06.2006, 18:46
Erfahrung habe ich nicht, aber warum sollte es auch schlechte geben? Ich habe mein 1-Wire Kram aber dennoch per Software programmiert, war eigentlich voll einfach, also wozu extra nen IC kaufen? Das einzige was relativ aufwendig ist, ist die 1-Wire Suche (also alle ID's der geräte herausfinden). Aber der Algorithmus ist auf der Homepage von maxim-ic.com zu bekommen und er kann fast 1:1 in für ein uC übernommen werden (wenn man ihn in C programmiert).

ThSteier
18.06.2006, 21:12
Sagen wir mal so: bei allem, was ich von 'nem spezialisierten IC erledigen lassen kann, kann ich keinen Programmierfehler machen :wink:

Im Ernst - so herausragend, daß ich das selbst hinbekäme, sind meine Programmierkenntnisse noch lange nicht. Und irgendwo 'nen Codeschnipsel kopieren, ohne ihn wirklich zu verstehen, würde mir nicht wirklich helfen. Das rächt sich spätestens dann, wenn was nicht klappt und ich nachvollziehen müßte, was da überhaupt vor sich geht. Dann lieber einen IC mehr...

Viele Grüße,
Thomas

MasterFX
18.06.2006, 21:48
Is aber wirklich nicht schwer...
Nur mal die wichtigsten Teile



void w1_write_bit(char bit){
if(bit){
PORTT &= ~0x01;
DDRT |= 0x01;
delay_us(A);
DDRT &= ~0x01;
delay_us(B);
}
else{
DDRT |= 0x01;
delay_us(C);
DDRT &= ~0x01;
delay_us(D);
}
}

BT_UBYTE w1_read_bit(void){
BT_UBYTE result;

PORTT &= ~0x01;
DDRT |= 0x01;
delay_us(A);
DDRT &= ~0x01;
delay_us(E);
result = PORTT & 0x01;
delay_us(F);

return result;

}

void w1_reset(void){
delay_us(G);
PORTT &= ~0x01;
DDRT |= 0x01;
delay_us(H);
DDRT &= ~0x01;
delay_us(I+J);

}

Das sind eigentlich die 3 grundlegenden Sachen, mehr brauch man nicht. Die delays stehen HIER (http://www.maxim-ic.com/appnotes.cfm/appnote_number/126)