Forum: Mikrocontroller und Digitale Elektronik DS2482 - #define DS2482_REG_CFG_APU


von w3llschmidt (Gast)


Lesenswert?

Hallo World ;-)

kurze Frage zum DS2482 ... ich habe hier mal was aus einem
C-Codeschnipsel  geklaut, was ich nicht verstehe?!

??? Die Configregister haben die gleichen Adressen wie die 
Statusregister ???

Wie unterscheide ich das bei read/write ????

 62 /**
 63  * Configure Register bit definitions
 64  * The top 4 bits always read 0.
 65  * To write, the top nibble must be the 1's compl. of the low 
nibble.
 66  */
 67 #define DS2482_REG_CFG_1WS              0x08
 68 #define DS2482_REG_CFG_SPU              0x04
 69 #define DS2482_REG_CFG_PPM              0x02
 70 #define DS2482_REG_CFG_APU              0x01


 84 /**
 85  * Status Register bit definitions (read only)
 86  */
 91 #define DS2482_REG_STS_LL               0x08
 92 #define DS2482_REG_STS_SD               0x04
 93 #define DS2482_REG_STS_PPD              0x02
 94 #define DS2482_REG_STS_1WB              0x01

---

Ich habe die mal ausgelesen ->

1
test = i2c_smbus_read_byte ( file ) | 0x01;
2
    {
3
    syslog(LOG_INFO, "DS2482 Status 1-Wire Busy: 0x%x\n", test );
4
    }

DS2482 Status 1-Wire Busy: 0x19
DS2482 Status Presence Pulse Detect: 0x1a
DS2482 Status Short Detected: 0x1c
DS2482 Status 1-Wire Logic Level: 0x18
DS2482 Status Device Reset: 0x18
DS2482 Status Single Bit Result: 0x38
DS2482 Status Triplet Second Bit: 0x58
DS2482 Status Branch Direction Taken: 0x98

von w3llschmidt (Gast)


Lesenswert?

Ok, ich hab was gefunden ... man muss den Readpointer (0xE1) auf das
jeweilige Register richten (0xC3; Config-Register)

1
#include <linux/i2c-dev.h>
2
3
file = open("/dev/i2c-0", O_RDWR);
4
5
i2c_smbus_write_byte_data( file, 0xE1, 0xC3 );
6
7
test = i2c_smbus_read_byte_data ( file, 0x01 );
8
{ 
9
syslog(LOG_INFO, "DS2482 CFG_APU: 0x%x\n", test ); 
10
}

Allerdings ist das Ergebniss auch nicht besser :-(

DS2482 CFG_APU: 0xffffffff

.

von Timmo H. (masterfx)


Lesenswert?

w3llschmidt schrieb:
> Ok, ich hab was gefunden ... man muss den Readpointer (0xE1) auf das
> jeweilige Register richten (0xC3; Config-Register)
Das ist doch auch logisch, schließlich steht dort ja auch "Configure 
Register bit definitions" bzw. "Status Register bit definitions"

w3llschmidt schrieb:
> i2c_smbus_write_byte_data( file, 0xE1, 0xC3 );
Und du bist dir sicher, dass du "0xC3" in Register 0xE1 schreiben 
willst?

>i2c_smbus_read_byte_data ( file, 0x01 );
und du bist dir sicher, dass CFG_APU ein ganzes Register ist und nicht 
nur Bit0 in Register 0xC3?

von w3llschmidt (Gast)


Lesenswert?

Hi Timmo!

>> Ok, ich hab was gefunden ... man muss den Readpointer (0xE1) auf das
>> jeweilige Register richten (0xC3; Config-Register)
> Das ist doch auch logisch, schließlich steht dort ja auch "Configure
> Register bit definitions" bzw. "Status Register bit definitions"

Ja, wenn man es dann verstanden hat ;-)

> w3llschmidt schrieb:
>> i2c_smbus_write_byte_data( file, 0xE1, 0xC3 );
> Und du bist dir sicher, dass du "0xC3" in Register 0xE1 schreiben
> willst?

Also ich verstehe das so?! SRP: set read Pointer, E1h
1
i2c_smbus_write_byte_data( file, 0xE1, 0xF0 )

Damit sollte der Readpointer auf das Statusregister (0xF0)zeigen ?!


>>i2c_smbus_read_byte_data ( file, 0x01 );
> und du bist dir sicher, dass CFG_APU ein ganzes Register ist und nicht
> nur Bit0 in Register 0xC3?

Hmm, gute Frage ...

Soweit komm ich bisher:

http://pastebin.com/8XZjnX3F

DS2482 device reset(0xF0):Success
1Wire line reset(0xB4):Success
Set read pointer to Statusregister(0xF0): Success
Read DS2482 'PPD' Status (Input/output error): 1

.

von w3llschmidt (Gast)


Lesenswert?


von Timmo H. (masterfx)


Lesenswert?

Moment, mit "SRP" sagst du dem Master doch welches Register du vom 
1-Wire Slave auslesen willst. Du willst aber doch den Master direkt 
auslesen (das Status/Config-Register), welcher ja am I2C angebunden ist? 
Oder stehe ich jetzt total auf dem Schlauch?

von w3llschmidt (Gast)


Lesenswert?

Timmo H. schrieb:
> Moment, mit "SRP" sagst du dem Master doch welches Register du vom
> 1-Wire Slave auslesen willst.

Genau! So wie ich es verstehe geht es um die Register vom Master.
Die will ich auslesen!

von Timmo H. (masterfx)


Lesenswert?

Und genau deswegen sollte doch eigentlich das hier reichen
1
test = i2c_smbus_read_byte_data ( file, 0xC3);
Sprich, lese das 0xC3 aus.
Den SPR brauchst du nur um den Slave der am 1-Wire Master hängt 
auszulesen, aber das willst du ja erstmal nicht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.