Hallo, ik heb niet zo gek lang geleden een sensor gekocht met een aanverwant I2C protocol namelijk: de SHT-75
Ik heb deze aan de praat gekregen op mijn uC.
Deze sensor heeft echter geen instelbaar adres, maar ik zou toch graag 6 van deze sensoren op alleen de sda en scl lijn willen leggen.
Is het mogelijk om deze sensoren een voor een van spanning te voorzien door middel van multiplexen en zodoende met één adres betrouwbare gegevens te winnen van alle 6 de sensoren ?
Ik hoop dat iemand mij hiermee kan helpen.

Gr

roel.

Je kunt elke temp. sensor aan/uit zetten met behulp van transistoren. Deze transistoren kun je aansturen met je µC Zo kun je ze 1 voor 1 benaderen.

Als je de I2C afhandeling doet m.b.v bitbanging dan kun je elke sensor z'n eigen SDA lijn geven,de SCL kan gemeenschappelijk zijn

zet een 4052 in je SDA lijn en gebruik die om je SDA te multiplexen.

er zijn ook speciale i2c multiplexers zoals de pca9554

Uitschakelen van de sensors is niet handig volgens mij. Dat kan wel, maar daarna kun je de I2C niet meer aansturen zonder de Sensors via de SCL/SDA te gaan voeden. Dat gaat dus niet werken.

Ik zou in dit geval een multiplexer gebruiken in de SCL lijn. SDA kan ook wel, maar is voor mij toch minder logisch. Als je de SDA uitzen en wel SCL genereert dan blijft de sensor toch data naar binnen klokken, al is dat dan telkens een hoog signaal.

neen, je snapt niet hoe I2C werkt... je MOET SDA schakelen.

de uitgeschakelede kanalen zien een logisch hoog op hun SDA. jij mag daar clocken zoveel je wilt er gebeurt niks ( die dingen clocken zelfs niks binnen want er gebeurt geen START operatie... om een START te hebben moet SDA naar nul gaan terwjk SCL hoog is.
de afgekoppelde chips hebben SDA altijd hoog staan. die reageren geneens op SCL. er komen botweg geen START condities , en zolang die er niet zijn slapen i2c schips.)

als jij SCL omschakelt dan zit je daar continue START en STOp operaties te rammen... ( van de afgeshcakelde kanalen is SCL hoog en SDA toggelt nog steeds.... das dus niks anders dan START- STOp - Start- STOp en wie weet in welke toestand je exit...

trouwnes je clock moet super proper zijn tussen al je chips dus frut je daar beter niks tussen.

[Bericht gewijzigd door Henry S. op (24%)]

Oke, bedankt voor de info.

Even ter verduidelijking, de sht-75 is een sensor, met een protocol die lijkt op i2c. maar echt i2c is het niet.
Wel werken ze op een sda en scl lijn.

Ik heb van deze sensor data ontvangen, en kan deze omzetten in temperatuur en relatieve vochtigheid. Dit werkt dus.

Nu lees ik hier dat ik de SDA lijn zou moeten multiplexen.
Maar, wat gebeurd er nu als ik de SCL, SDA, en ground parralel leg, en vervolgens de sensoren 1 voor 1 van spanning voorzie ?

De sampletijd hoeft niet snel te zijn, dus enige opstarttijd voor deze sensor kan hier in geïntegreerd worden.

Hier een softwarevoorbeeld :


Symbol l1 = PORTA.0
Symbol l2 = PORTA.1
Symbol l3 = PORTA.2
Symbol l4 = PORTA.3
Symbol l5 = PORTE.0
Symbol l6 = PORTE.1
Symbol a  = PORTA
Symbol e  = PORTE

Symbol s = 1000                   'sampletijd
Symbol t = 100                    'tijd tussen samples


Dim TELLER As Byte
Dim TELLER1 As Byte
Dim DUMMY As Byte

TRISA = %00000000
TRISE = %00000000

PORTA = %00000000
PORTE = %00000000

Clear
DelayMS 500
Cls

sensorA:

TELLER = %00000001 
While 1 = 1
   Low a :DelayMS t
  a = TELLER
   GoSub sensD
   TELLER = TELLER << 1
  If TELLER = %00010000 Then
  a = $00
  GoTo sensorE
  EndIf
Wend

sensorE:

TELLER1 = %00000001
While 1 = 1
  Low e :DelayMS t
  e = TELLER1
   GoSub sensD
   TELLER = TELLER << 1
   TELLER1 = TELLER1 << 1
  If TELLER1 = %00000100 Then
  e = $00
  GoTo sensorA
  EndIf
Wend

sensD:

Print At 1, 1, "sensor: "
Select TELLER
    Case $1  :Print At 1, 9, "Een "
    Case $2  :Print At 1, 9, "Twee"
    Case $4  :Print At 1, 9, "Drie"
    Case $8  :Print At 1, 9, "Vier"
    Case $10 :Print At 1, 9, "Vijf"
    Case $20 :Print At 1, 9, "Zes "
EndSelect

GoSub meting:
Return 

meting:

'************** Hier komt de volledige meting + controle van sensor
'*******************************
DelayMS s
Return

End

Bij set submenu meting:
Word er gewacht, totdat de gehele meting en controle ervan verricht is.

Waarom niet gewoon een aparte data input voor elke sensor? (en gemeenschappelijke clock)
Dat kost net zoveel pinnen en is wat frisser dan het geknoei met de voeding steeds er op en er af...

Daar heb ik nog niet aan gedacht als ik eerlijk ben.
Het is inderdaad minder geknoei met de spanning maar wel meer geknoei met de software.

Software valt wel mee. Je kunt ze allemaal op bijv poort B aansluiten.
Je kunt er dan 7 aansluiten (en houdt de achtste pin over voor de clock)
Bij iedere clockpuls lees je poort B, en heb je in een keer de data van alle sensors...

Bij iedere clockpuls lees je poort B, en heb je in een keer de data van alle sensoren.

Dit gedeelte snap ik even niet, sorry
Het lijkt me niet, dat de uC alle data van alle sensoren in een keer in alle verschillende variabele zet. En zeker niet met deze sensor, waarbij meer dan 2 byte's variabele gebruikt word.

Het klinkt aannemelijk, maar verklaar uw nader !

Zeg voor het gemak dat de sensors aan portb.1....portb.7 zitten.
Portb.1 is dan het databit van sensor 1, portb.2 van sensor 2, enz....
Je moet dan nog wel zelf het betreffende bit it de juiste variabele stoppen...
Ik weet niet hoe dat met picbasic het simpelste gaat, maar in assembly stop je het bit in kwestie in het Carry bit en doet dan een shift van de gewenste variabele...
Voorbeeld in assembly (voor 12 bits wordt dit dus 12x uitgevoerd):


                movf    portb,w         ;port inlezen
                movwf   portb_copy
                rrf     portb_copy

                rrf     portb_copy      ;bit 1 naar carry 
                rlf     data1_lo        ;en naar variable 1
                rlf     data1_hi        

                rrf     portb_copy      ;bit 2 naar carry
                rlf     data2_lo        ;
                rlf     data2_hi        

                rrf     portb_copy
                rlf     data3_lo
                rlf     data3_hi        

                rrf     portb_copy
                rlf     data4_lo
                rlf     data4_hi        

                rrf     portb_copy
                rlf     data5_lo
                rlf     data5_hi        

                rrf     portb_copy
                rlf     data6_lo
                rlf     data6_hi        

                rrf     portb_copy
                rlf     data7_lo
                rlf     data7_hi        

Oké bedankt, ik snap dat principe.
Waarschijnlijk dat ik zelf nog voor verwarring zorg.
Het was uiteindelijk wel de bedoeling om de sensoren op alleen portA aan te sluiten.

Hetgeen wat jij in assembly hebt geschreven daar is ongeveer het zelfde als wat ik had hierboven. Alleen word bij jou geloof ik op het moment van shiften de data meteen in een variabele gezet? Bij mij word er eerst naar een submenu gegaan, en vervolgens gemeten.

Het principe wat ik zelf in gedachten had heb ik op een breadboard gezet. en aan een tijdelijk gebrek aan alle A poorten moest het even zo.
Het werkt wel. De vertraging ertussen in is echt miniem.
sample tijd is 1 sec per sensor, om en om.
Dus iedere seconden heb ik de data van alles sensoren.

Het word een langzaam proces over een tijd van 2 uur.
Dus de sample tijd zal nog aanzienlijk langzamer worden.

Ik heb het ontwerp uitgewerkt en het werkt.
Ik krijg van 6 sensoren de data binnen over 1 sda lijn.
Alle data onafhankelijk van elkaar dus zonder dat deze andere data stoort.
Volgende stap is de data te versturen via een terminal.

groeten