DS2482 - #define DS2482_REG_CFG_APU

Gast #2912988
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
Gast #2913829
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

.
#2913861
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?
Gast #2913997
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

.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren