Home
JAQForum Ver 20.06
Log In or Join  
Active Topics
Local Time 04:46 29 Jan 2022 Privacy Policy
Jump to

Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.

Forum Index : Microcontroller and PC projects : I2C Address Problem with Micromite

     Page 1 of 2    
Author Message
Frank N. Furter
Guru

Joined: 28/05/2012
Location: Germany
Posts: 584
Posted: 01:37pm 14 Jan 2022
Copy link to clipboard 
Print this post

Hi to all!

I have a sensor with this address which I want to read out with a Micromite V5.05.05:
  Quote  7-bit slave address of this device is 1111000b (0x78).

But I get always this error:
[26] I2C READ &H78, 0, 4, temp()
Error : Invalid address

It seems that all addresses from &H77 generate this error...

What's going on here? Can anybody help me?

THANKS!

Frank
 
matherp
Guru

Joined: 11/12/2012
Location: United Kingdom
Posts: 5731
Posted: 01:53pm 14 Jan 2022
Copy link to clipboard 
Print this post

It is what is coded in the Micromite firmware, as to why?......

The PicoMite doesn't have the limitation
Edited 2022-01-14 23:53 by matherp
 
robert.rozee
Guru

Joined: 31/12/2012
Location: New Zealand
Posts: 1901
Posted: 03:26pm 14 Jan 2022
Copy link to clipboard 
Print this post

typing "i2c reserved addresses" (without quote marks) into google reveals:

"A seven bit wide address space theoretically allows 128 I2C addresses - however, some addresses are reserved for special purposes. Thus, only 112 addresses are available with the 7 bit address scheme. To get rid of this a special method for using 10 bit addresses is defined.

The following table shows I2C addresses reserved for special purposes:

0000000 0      General Call
0000000 1      Start Byte
0000001 X      CBUS Addresses
0000010 X      Reserved for Different Bus Formats
0000011 X      Reserved for future purposes
00001XX X      High-Speed Master Code
...
11110XX X      10-bit Slave Addressing
11111XX X      Reserved for future purposes"

from:
https://www.i2c-bus.org/addressing/


what exactly is the device you have that has address 0x78?


cheers,
rob   :-)
Edited 2022-01-15 01:37 by robert.rozee
 
Frank N. Furter
Guru

Joined: 28/05/2012
Location: Germany
Posts: 584
Posted: 07:11pm 14 Jan 2022
Copy link to clipboard 
Print this post

@robert.rozee:

It's a pressure Sensor from Wuerth Elektronik:
Wuerth pressure sensor

THANKS! I had forgotten that there are "i2c reserved addresses"...

What was Wuerth Elektronik thinking???

Frank
 
Turbo46

Guru

Joined: 24/12/2017
Location: Australia
Posts: 907
Posted: 08:03pm 14 Jan 2022
Copy link to clipboard 
Print this post

  Quote  7-bit slave address of this device is 1111000b (0x78).


Shouldn't that address be &HF1 (write) Hex not Octal?

Bill
Keep safe. Live long and prosper.
 
phil99

Guru

Joined: 11/02/2018
Location: Australia
Posts: 346
Posted: 09:36pm 14 Jan 2022
Copy link to clipboard 
Print this post

At which end is the extra "0" meant to go? MSB or LSB?
> ? hex$(&B01111000)
78
> ? hex$(&B11110000)
F0
>
 
Turbo46

Guru

Joined: 24/12/2017
Location: Australia
Posts: 907
Posted: 09:41pm 14 Jan 2022
Copy link to clipboard 
Print this post

From the data sheet the extra bit is the LSB '1' for read.

  Quote  A slave address is 7 bits long followed by a Read/Write bit.


Bill
Keep safe. Live long and prosper.
 
TassyJim

Guru

Joined: 07/08/2011
Location: Australia
Posts: 4548
Posted: 09:42pm 14 Jan 2022
Copy link to clipboard 
Print this post

  phil99 said  At which end is the extra "0" meant to go? MSB or LSB?
> ? hex$(&B01111000)
78
> ? hex$(&B11110000)
F0
>

From the MMBasic manuals:
  Quote  7-Bit Addressing
The standard addresses used in these commands are 7-bit addresses (without the read/write bit). MMBasic will
add the read/write bit and manipulate it accordingly during transfers.
Some vendors provide 8-bit addresses which include the read/write bit. You can determine if this is the case
because they will provide one address for writing to the slave device and another for reading from the slave. In
these situations you should only use the top seven bits of the address. For example: If the read address is 9B
(hex) and the write address is 9A (hex) then using only the top seven bits will give you an address of 4D (hex).
Another indicator that a vendor is using 8-bit addresses instead of 7-bit addresses is to check the address range.
All 7-bit addresses should be in the range of 08 to 77 (hex). If your slave address is greater than this range then
probably your vendor has provided an 8-bit address.

The MMBasic manuals don't describe the "reserved" range which this device seems to use.

Jim
VK7JH
MMedit   MMBasic Help
 
JohnS
Guru

Joined: 18/11/2011
Location: United Kingdom
Posts: 2624
Posted: 10:08pm 14 Jan 2022
Copy link to clipboard 
Print this post

The PDF is clear: 7-bit address 78 (hex).

Rather odd.

John
 
Turbo46

Guru

Joined: 24/12/2017
Location: Australia
Posts: 907
Posted: 10:19pm 14 Jan 2022
Copy link to clipboard 
Print this post



This tells me 7 bit plus LSB. I still read it as &HF1.

Am I mis-reading it somehow?

Bill
Keep safe. Live long and prosper.
 
Mixtel90

Guru

Joined: 05/10/2019
Location: United Kingdom
Posts: 1529
Posted: 10:28pm 14 Jan 2022
Copy link to clipboard 
Print this post

I wonder if they are using old silicon that predates the introduction of 10-bit addressing? They wouldn't want to change it later as anything designed to work with the old one would break - you couldn't use a new unit as a spare for an old one. They almost certainly wouldn't use that address now.

In a word, yes. You're misreading it.
111 1000 is the address, followed by an extra 0 for write or 1 for read IIRC. 7-bit addressing. Unfortunately 111 10xx is the reserved code to introduce a 10-bit address so that 10-bit units will work on a 7-bit system.
Edited 2022-01-15 08:44 by Mixtel90
-- Mick

Zilog Inside! nascom.info for Nascom & Gemini
 
Turbo46

Guru

Joined: 24/12/2017
Location: Australia
Posts: 907
Posted: 10:43pm 14 Jan 2022
Copy link to clipboard 
Print this post

OK, it's a seven bit ADDRESS followed by a '1' bit for 'read'. Does that mean that you DON'T send it '11110001' to issue a read command for that address?

Bill
Keep safe. Live long and prosper.
 
Mixtel90

Guru

Joined: 05/10/2019
Location: United Kingdom
Posts: 1529
Posted: 10:47pm 14 Jan 2022
Copy link to clipboard 
Print this post

Yes, you do. You are then supposed to tag on the *actual* 10-bit address.
-- Mick

Zilog Inside! nascom.info for Nascom & Gemini
 
Mixtel90

Guru

Joined: 05/10/2019
Location: United Kingdom
Posts: 1529
Posted: 10:55pm 14 Jan 2022
Copy link to clipboard 
Print this post

This might help.
-- Mick

Zilog Inside! nascom.info for Nascom & Gemini
 
Turbo46

Guru

Joined: 24/12/2017
Location: Australia
Posts: 907
Posted: 10:58pm 14 Jan 2022
Copy link to clipboard 
Print this post

Thanks, reading Jim's quote from the manual shows I need to read up on the subject a bit more. Sorry if I added to any confusion.

Bill
Keep safe. Live long and prosper.
 
TassyJim

Guru

Joined: 07/08/2011
Location: Australia
Posts: 4548
Posted: 11:09pm 14 Jan 2022
Copy link to clipboard 
Print this post

There was discussion about this some years ago when another device appeared to use a "reserved" address.
If I remember correctly (a dangerous assumption), that device had a pin to change the address which did allow it to use valid address, just only one such device on the same data lines.

I think Arduino code allows the bad addresses.

Jim
VK7JH
MMedit   MMBasic Help
 
Turbo46

Guru

Joined: 24/12/2017
Location: Australia
Posts: 907
Posted: 11:25pm 14 Jan 2022
Copy link to clipboard 
Print this post

Any chance that the CFunction I2CPort might work?

Bill
Keep safe. Live long and prosper.
 
robert.rozee
Guru

Joined: 31/12/2012
Location: New Zealand
Posts: 1901
Posted: 04:22am 15 Jan 2022
Copy link to clipboard 
Print this post

the wuerth datasheet links to a philips datasheet, which reads:

"Assignment of addresses within a local system is up to the system architect who must take into account the devices being used on the bus and any future interaction with other conventional I2C-buses. For example, a device with seven user-assignable address pins allows all 128 addresses to be assigned. If it is known that the reserved address is never going to be used for its intended purpose, a reserved address can be used for a target address." (page 16, my highlighting)
from:
https://www.nxp.com/docs/en/user-guide/UM10204.pdf

so wuerth should have been aware that they were using a reserved address, as well as being aware that if they really wanted to they could make use of it at the cost of being 10-bit addressing incompatible.

it may be worth asking Geoff if it is possible to extend the range of allowed addresses on the MX170 et al versions of MMbasic. i do not fully know how this may affect the support of 10-bit addressing in the firmware, but i suspect that the presence of an 8/10-bit flag in the function calls precludes major problems.

i do note that the pico version of MMbasic seems to have had reference to 10-bit addressing removed from the user guide at least. Peter may care to comment about the availability of 10-bit addressing here. note that it does appears that 10-bit addressing never really took off within the industry, so its absence may be of little concern.


cheers,
rob   :-)
Edited 2022-01-15 14:26 by robert.rozee
 
Geoffg

Guru

Joined: 06/06/2011
Location: Australia
Posts: 2903
Posted: 05:57am 15 Jan 2022
Copy link to clipboard 
Print this post

  robert.rozee said  It may be worth asking Geoff if it is possible to extend the range of allowed addresses on the MX170 et al versions of MMbasic.

OK, I will do that in the next release (it does not affect anything else).

Note that the CRoutines library in the Micromite distribution ZIP contains the CFunction I2CPort() which will create additional I2C ports and that does not have any limitations on the address range.

Geoff
Geoff Graham - http://geoffg.net
 
Frank N. Furter
Guru

Joined: 28/05/2012
Location: Germany
Posts: 584
Posted: 01:48pm 16 Jan 2022
Copy link to clipboard 
Print this post

Thank you so much to all!!!

I will try CFunction I2CPort...

Frank
 
     Page 1 of 2    
Print this page
© JAQ Software 2022