Op 8 februari 2023 19:18:59 schreef Paulinha_B:
Okee, ik zie uw idee al een beetje minder nevelig... :)

Ik blijf het echter heel erg knutselig vinden. Of, anders gezegd: wie ellende zoekt, die zal ellende krijgen - en dat zie ik hier gebeuren. Het is gewoon veel te ingewikkeld, ook al is het theoretisch misschien niet helemaal onmogelijk. Op z'n minst zal zo'n constructie behoorlijk storinggevoelig worden, lijkt me.

Er is hier iemand die in zijn sig iets stelt in de zin van "eenvoud is een vereiste voor betrouwbaarheid"... en niemand heeft dat ooit tegengesproken.

Klopt mee eens.

Wellicht ga ik het dan anders doen.

Wat misschien nog een betere idee is is het volgende: Op de pcb's 1 input en output met elkaar verbinden zodat ik een aantal X kan pulsen onderling.

Pulsen is dan adresseren

Met twee of drie bits gaat het ook, kost je twee of drie uitgangen. Met de twee of drie lijnen kun je een adres maken, alleen het geselecteerde adres bepaald welke print er moet reageren. Lijk mij veiliger dan met een spanning werken.

Wel een gedoe als het maar om 4 boards gaat.

Mijn gedacht :) !

Als je genoeg IO's hebt geef je ze allemaal een unieke IO en doe je t soft I2C'en in plaats van hardware..

Op 8 februari 2023 19:02:00 schreef JoostNL:
[...]

Nu komt het leuke, ik wil dus elke pcb het zelfde houden (de tussenstap). Zodat ik 4 de zelfde printen printen kan maken.

IK kan zelf 2 manieren bedenken
1- Je stel elk printje in met een potmeter, de printen staan dan niet in serie maar parallel over de spanning van de ADC gezien.
2- Je geeft elk printje dezelfde weerstand.
JE wil dus max 10 printen kunnen aansturen. Als je vanuit 5V 10 x 10k in serie zet valt er over elke weerstand precies evenveel spanning en hier dan 0,5V. OP elke pint zet je dan 10k. De positie van de print bepaalt dan het adres, dus 3de print is altijd adres 3.

Volgens mij gaat dat niet werken met een weerstand deler, ook mede wanneer ik later er voor kies om bijvoorbeeld 1 print minder te gaan gebruiken er geen bal van mijn adressering meer klopt.

Ook dat is op te lossen ,Stel je gebruikt 4 printen:

De totale weerstandsdeler (in mijn voorbeeld) gaat uit van 100k ohm, Met 4 printen heb je 40k en je 6 x 10k = 60k in de keten. Op de hoofd print zet je een potmeter van 100k Die je dan instel op 60k.

Een betere oplossing zou echt zijn een anders sensor te gaan gebruiken of dan maar elke sensor met een eigen digitaal adres aan te sturen. Voor 10 adressen zou je dan 4 io lijnen nodig hebben ( tot 16 maximaal).

Ook als je nu al te weinig io hebt moet je gewoon voor deze oplossing gaan
- Er zijn genoeg chips met heel veel pinnen
- Er zijn heel veel chip waarmee je de io met 8 - 16 of 32 IO lijnen kan uitbreiden en die zijn er ook in I2C. Om 16 adressen voor je I2C sensoren te maken heb je 4 IO lijnen nodig. Dat is dus maar 1 chip extra. De complexiteit voor de weerstandsdeler en deze op de print zelf goed te kunnen decoderen zijn heel veel extra component en chips. En het lijkt mij heel erg storings gevoelig.

Even uit persoonlijke interesse: Welk type sensor gebruik je, en wat wil je daarmee bereiken?

Wil je bijvoorbeeld 5 tomatenkassen aansturen met ventilatoren om de lucht overal op temperatuur te verdelen voor dag en nacht; en af en toe een leegstaande kas uitzetten... Wellicht zijn er vele malen makkelijker opties?

Edit: Wat dacht je van een RPi Pico W... Kun je maar programmeren wat je wilt om naar een master te sturen zodat je alles kunt uitlezen en zelfs op afstand alles weer kunt aansturen? Immens veel opties om heel veel extra sensoren te plaatsen en aansturing voor weet ik veel wat...

[Bericht gewijzigd door Overlander op (31%)]

Ik ga er vanuit dat je wilt dat het adres van de slave bepaald wordt door de positie waarin hij in de chain zit. Als dat niet zo is en je gebruikt toch op iedere pcb een µC dan kan je die µC natuurlijk een uniek adres geven.

---------------------
Dit is iets wat ik absoluut digitaal zou oplossen. Ik zit aan het volgende te denken. De rode kaders zijn de slave printen. Alle slave printen hebben 3 digitale ingangen en 3 digitale uitgangen. Tussen de in en uitgangen zit een added blokje die +1 doet. Dit kan je met logica doen, maar als er toch al een slave µC op zit kan die het ook prima. Nu hebben alle printen een uniek ID afhankelijk van waar ze in de chain zitten. Als ik je goed begrijp is dat wat je wilde berijken?

Stel de master geeft aan de uitgang 001. Dan hou je 000 over om te detecteren dat je teveel pcb's hebt aangesloten.

- Master , IN: N/A, UIT: 001
- Slave 1 , IN: 001, UIT: 010
- Slave 2 , IN: 010, UIT: 011
- Slave 3 , IN: 011, UIT: 100
- Slave 4 , IN: 100, UIT: 101
- Slave 5 , IN: 101, UIT: 110
- Slave 6 , IN: 110, UIT: 111
- Slave 7 , IN: 111, UIT: 000
- Slave 8 , IN: 000 Overflow detected!

Simulatie: https://tinyurl.com/2bqvgs6c

-------------------------------
Volledig andere optie:
Alle microcontrollers zijn zowel slave als master ze staan dan zoals in onderstaande afbeelding.

Als de master nu iets naar µC 3 wilt sturen dan gebeurt het volgende

Master naar slave 1: {COUNT = 3, DATA = XXXX}
Slave 1 naar slave 2: {COUNT = 2, DATA = XXXX}
Slave 2 naar slave 3: {COUNT = 1, DATA = XXXX}
Slave 3 detecteert count == 1, dus bericht is voor mij.

Op 8 februari 2023 21:51:22 schreef hardbass:
-------------------------------
Volledig andere optie:
Alle microcontrollers zijn zowel slave als master ze staan dan zoals in onderstaande afbeelding.

Als de master nu iets naar µC 3 wilt sturen dan gebeurt het volgende

Master naar slave 1: {COUNT = 3, DATA = XXXX}
Slave 1 naar slave 2: {COUNT = 2, DATA = XXXX}
Slave 2 naar slave 3: {COUNT = 1, DATA = XXXX}
Slave 3 detecteert count == 1, dus bericht is voor mij.

Zoiets zou ik ook maken (zo master->slave doorlussen en data weer terug sturen), was er nog niet aan toe gekomen om dit te posten. Maar ik had het ietsje anders bedacht door bij het opstarten een speciale init te doen die de slaves enumereert.
Maar een count aflagen bij passeren van iedere node is ook een briljante oplossing en eigenlijk nog eleganter.

Op 8 februari 2023 18:40:52 schreef JoostNL:
Ik wil meerdere I2C sensoren gaan gebruiken, alleen deze sensoren hebben allemaal het zelfde I2C adres.

Daar zijn chips voor en daar heb ik een handige breakout voor gemaakt die je gewoon kan kopen. Lijkt me goedkoper dan 8/10 CPU-tjes.

Op 8 februari 2023 21:51:22 schreef hardbass:
Ik ga er vanuit dat je wilt dat het adres van de slave bepaald wordt door de positie waarin hij in de chain zit. Als dat niet zo is en je gebruikt toch op iedere pcb een µC dan kan je die µC natuurlijk een uniek adres geven.

---------------------
Dit is iets wat ik absoluut digitaal zou oplossen. Ik zit aan het volgende te denken. De rode kaders zijn de slave printen. Alle slave printen hebben 3 digitale ingangen en 3 digitale uitgangen. Tussen de in en uitgangen zit een added blokje die +1 doet. Dit kan je met logica doen, maar als er toch al een slave µC op zit kan die het ook prima. Nu hebben alle printen een uniek ID afhankelijk van waar ze in de chain zitten. Als ik je goed begrijp is dat wat je wilde berijken?

Stel de master geeft aan de uitgang 001. Dan hou je 000 over om te detecteren dat je teveel pcb's hebt aangesloten.

- Master , IN: N/A, UIT: 001
- Slave 1 , IN: 001, UIT: 010
- Slave 2 , IN: 010, UIT: 011
- Slave 3 , IN: 011, UIT: 100
- Slave 4 , IN: 100, UIT: 101
- Slave 5 , IN: 101, UIT: 110
- Slave 6 , IN: 110, UIT: 111
- Slave 7 , IN: 111, UIT: 000
- Slave 8 , IN: 000 Overflow detected!

Simulatie: https://tinyurl.com/2bqvgs6c

[bijlage]

-------------------------------
Volledig andere optie:
Alle microcontrollers zijn zowel slave als master ze staan dan zoals in onderstaande afbeelding.

Als de master nu iets naar µC 3 wilt sturen dan gebeurt het volgende

Master naar slave 1: {COUNT = 3, DATA = XXXX}
Slave 1 naar slave 2: {COUNT = 2, DATA = XXXX}
Slave 2 naar slave 3: {COUNT = 1, DATA = XXXX}
Slave 3 detecteert count == 1, dus bericht is voor mij.

[bijlage]

Dit is voor mijn applicatie de beste oplossing denk ik. Bedankt voor het meedenken!

Op 9 februari 2023 09:26:19 schreef JoostNL:
[...]

Dit is voor mijn applicatie de beste oplossing denk ik. Bedankt voor het meedenken!

Welke van de 2?