Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

buttonbox vraag (multiplex/charlieplex/shifting ofzo?)

Pagina: 1
Acties:

Vraag


Acties:
  • 0Henk 'm!

  • vso
  • Registratie: augustus 2001
  • Laatst online: 14:19

vso

raap voor zijn recht

Topicstarter
Met minimaal aantal pins wil ik het volgende doen/bereiken. (arduino dingentje)

ik heb verschillende soorten schakelaars,
- momentary (non locking)
- toggle switches (locking)
- potentiometer
- schuif weerstand ..
en ik wil nog wat ledjes aan/uit zetten.

Het gaat om 20/30 tal "buttons" paar schuifweerstanden/potentiometers(draaiknoppen) ..

Als ik het goed begrijp kan je via diverse methoden een setje knoppen uitlezen al dan niet met weerstanden ertussen .. zodat je exact weet welke knop is ingedrukt . met shift registers kan je per keer 1 lijn uitlezen

maar met weerstand/potentiometer oid heb ik een ADC (analog 2 digital ofzo) nodig om uit te lezen.

Goed ik begrijp de basis, denk ik wel, hoe/wat kan ik het beste doen om component(en) te verminderen / ghosting te vermijden ?

ik zie heel veel "kleine" projecten, maar die arduino is toch sterk genoeg om een volwaardig toetsenbord met wat toetsers en bellen aan te sturen ?

Searching internet is like drinking from a fire hydrant

Beste antwoord (via vso op 18-05-2020 15:25)


  • NESFreak
  • Registratie: december 2009
  • Laatst online: 17:29
i2c io expanders hebben vaak een interrupt lijn. Dan moet je vervolgens met i2c uitlezen wat de pin status is.

Bij sparkfun/adafruit uitbreidingsbordjes krijg je er vaak al mooie arduino voorbeeldcode en libraries bij.

Bijvoorbeeld dit sparkfun bordje kan input, output en led effecten doen (met een SX1509 controller).
Je kunt er 4 van op één bus zetten, dus 64 ios in totaal.:
https://www.sparkfun.com/products/13601

Alleen voor de potmeters blijf je adc's nodig hebben iets als de ADS1115 zou je met 1 bordje 4 potmeters kunnen uitlezen: https://www.adafruit.com/product/1085

Deze kan aan de zelfde i2c bus. Je hebt dan dus maar 2 ios voor de bus en 1 extra io voor de input interrupt.

Eventueel zou je ook voor chinese namaak bordjes met de zelfde controllers kunnen gaan.
Dan werkt de voorbeeldcode van sparkfun en adafruit nogsteeds.

https://www.banggood.com/...LED-Driver-p-1597269.html
https://www.banggood.com/...oard-Module-p-986645.html

[Voor 6% gewijzigd door NESFreak op 18-05-2020 15:21]

Alle reacties


Acties:
  • 0Henk 'm!

  • SA007
  • Registratie: oktober 2002
  • Laatst online: 00:05

SA007

Moderator Tweaking
Schakelaars/drukknoppen kan je prima multiplexen.
Ledjes kan dat ook prima mee.
Met mutiplexen kan je kan je op 8 pinnen bijv 4x4 = 16 knoppen uitlezen of ledjes aansturen.
Alternatief is charlieplexing, voor knopjes heb je daarvoor een diode per schakelaar erbij nodig.
Maar daarmee lukt 8*(8-1) 56 knopjes of leds per 8 pinnen.

Voor potmeters gaat dat een stuk moeilijker.
Als je er meer hebt dan je analoge inputs kan je een aantal technieken pakken.
- Externe ADC's (je hebt i2c chipjes met meer ADC ingangen).
- Multiplexers, bijv een 4051 of 74hc4067, deze kan je 8 of 16 analoge ingangen aan hangen en met 3 of 4 digitale pinnen van je arduino kiezen welke van deze pinnen naar je adc gaat.

Als je een beetje creatief met code bent kan je de adresseerpinnen van een analoge mutiplexer en de pinnen van een charlieplex of multiplex array prima combineren.

Op die manier kan je met weinig extra spullen denk ik prima bereiken wat je zoekt.

Klok is stuk :(


Acties:
  • 0Henk 'm!

  • vso
  • Registratie: augustus 2001
  • Laatst online: 14:19

vso

raap voor zijn recht

Topicstarter
@SA007 Het gaat mij meer erom dat ik 1 arduino gebruik (ik ga er 2 of 3 bouwen) ..

Kan ik ook interrupt gebasseerd werken? of is het beter in "cycles" te denken .. Uiteindelijk hoef ik alleen maar te weten of een status gewijzigd is .. of dit nu 0/1 is of een analoge waarde is ..

74hc4067 is wel intressant (heb ik ook een paar van liggen) ..

Searching internet is like drinking from a fire hydrant


Acties:
  • 0Henk 'm!

  • SA007
  • Registratie: oktober 2002
  • Laatst online: 00:05

SA007

Moderator Tweaking
interrupts kan wel werken met normale multiplexing, niet met charlieplexing.

Denk dat je even moet delen hoeveel van alles je aan wil sluiten op wat voor soort arduino en dan kijken wat de opties zijn.

Klok is stuk :(


Acties:
  • Beste antwoord
  • +1Henk 'm!

  • NESFreak
  • Registratie: december 2009
  • Laatst online: 17:29
i2c io expanders hebben vaak een interrupt lijn. Dan moet je vervolgens met i2c uitlezen wat de pin status is.

Bij sparkfun/adafruit uitbreidingsbordjes krijg je er vaak al mooie arduino voorbeeldcode en libraries bij.

Bijvoorbeeld dit sparkfun bordje kan input, output en led effecten doen (met een SX1509 controller).
Je kunt er 4 van op één bus zetten, dus 64 ios in totaal.:
https://www.sparkfun.com/products/13601

Alleen voor de potmeters blijf je adc's nodig hebben iets als de ADS1115 zou je met 1 bordje 4 potmeters kunnen uitlezen: https://www.adafruit.com/product/1085

Deze kan aan de zelfde i2c bus. Je hebt dan dus maar 2 ios voor de bus en 1 extra io voor de input interrupt.

Eventueel zou je ook voor chinese namaak bordjes met de zelfde controllers kunnen gaan.
Dan werkt de voorbeeldcode van sparkfun en adafruit nogsteeds.

https://www.banggood.com/...LED-Driver-p-1597269.html
https://www.banggood.com/...oard-Module-p-986645.html

[Voor 6% gewijzigd door NESFreak op 18-05-2020 15:21]


Acties:
  • 0Henk 'm!

  • vso
  • Registratie: augustus 2001
  • Laatst online: 14:19

vso

raap voor zijn recht

Topicstarter
@NESFreak thx dit is exact wat ik zocht, teminste wat ik denk dat ik zoek :) ..net iets beter antwoord IMHO .. niet dat @SA007

[Voor 23% gewijzigd door vso op 18-05-2020 15:32]

Searching internet is like drinking from a fire hydrant


Acties:
  • 0Henk 'm!

  • vso
  • Registratie: augustus 2001
  • Laatst online: 14:19

vso

raap voor zijn recht

Topicstarter
hebben jullie ervaring met SPI & I2C ? is er een betere v.d 2, ik denk dat SPI alleen meer data kan versturen .. maar dat is in dit geval niet belangrijk ..

Searching internet is like drinking from a fire hydrant


Acties:
  • +1Henk 'm!

  • SA007
  • Registratie: oktober 2002
  • Laatst online: 00:05

SA007

Moderator Tweaking
i2c is makkelijker in gebruik, maar lastiger als je veel van dezelfde chips hebt.

bij i2c heeft elke chip een adres, die moeten uniek zijn binnen dezelfde i2c bus, vaak hebben chips ook 'adres' pinnen waarmee je ze een ander adres kan geven.
Dit is alleen vaak beperkt tot 1 of 2 pinnen, dus 2 of 4 adressen.

Klok is stuk :(


Acties:
  • +1Henk 'm!

  • NESFreak
  • Registratie: december 2009
  • Laatst online: 17:29
vso schreef op maandag 18 mei 2020 @ 15:33:
hebben jullie ervaring met SPI & I2C ? is er een betere v.d 2, ik denk dat SPI alleen meer data kan versturen .. maar dat is in dit geval niet belangrijk ..
In principe is i2c trager, maar heeft elke 'slave' een eigen adres wat je verstuurd voordat je de daadwerkelijke data verstuurt/ontvangt. Ook gaat verzenden en ontvangen over de zelfde lijn, waardoor je maar 2 lijnen nodig hebt (clock en data)

Bij spi heeft elke slave een eigen 'select' lijn met je microcontroller. dus het aantal nodige lijnen naar je arduino is input, output, clock + AantalSlaves. Je zet de goeie select lijn aan en dat is dan de slave waarmee je praat.

Sommige spi apparaten (zoals het bekende 595 schuifregister kun je dan weer chainen.) dus de output van de 2e gaat naar de input van de eerste en de output daarvan naar je arduino. Dan klok je ipv 8x voor de data van 1 595 16x voor de data van alletwee.

https://www.arduino.cc/en/tutorial/ShiftOut (output met een keten van 74hc595)

https://www.arduino.cc/en/Tutorial/ShiftIn (input met een keten van CD4021B. Leuk feitje: dit is hoe de super nintendo z'n controller uitleest)


Omdat vanuit de fabriek alle i2c devices het zelfde adres hebben, moet je met de address-select jumpers op die bordjes met een soldeerbout het adres veranderen. Zo ook bij het sparkfun bordje:

Acties:
  • 0Henk 'm!

  • vso
  • Registratie: augustus 2001
  • Laatst online: 14:19

vso

raap voor zijn recht

Topicstarter
NESFreak schreef op maandag 18 mei 2020 @ 15:44:
[...]
In principe is i2c trager, maar heeft elke 'slave' een eigen adres wat je verstuurd voordat je de daadwerkelijke data verstuurt/ontvangt. Ook gaat verzenden en ontvangen over de zelfde lijn, waardoor je maar 2 lijnen nodig hebt (clock en data)

Bij spi heeft elke slave een eigen 'select' lijn met je microcontroller. dus het aantal nodige lijnen naar je arduino is input, output, clock + AantalSlaves. Je zet de goeie select lijn aan en dat is dan de slave waarmee je praat.

Sommige spi apparaten (zoals het bekende 595 schuifregister kun je dan weer chainen.) dus de output van de 2e gaat naar de input van de eerste en de output daarvan naar je arduino. Dan klok je ipv 8x voor de data van 1 595 16x voor de data van alletwee.

https://www.arduino.cc/en/tutorial/ShiftOut (output met een keten van 74hc595)

https://www.arduino.cc/en/Tutorial/ShiftIn (input met een keten van CD4021B. Leuk feitje: dit is hoe de super nintendo z'n controller uitleest)


Omdat vanuit de fabriek alle i2c devices het zelfde adres hebben, moet je met de address-select jumpers op die bordjes met een soldeerbout het adres veranderen. Zo ook bij het sparkfun bordje:
[Afbeelding]
Toen ICT nog solderen was en beetje progammeren heb ik dit op school mogen doen, dus het shiften enzo komt me wel bekend voor. maar 22 jaar geleden is wel erg veel,
En ook een tijdje met PLC's mogen "coden" en software progammeren leuk ..

Maar wat is trager ? een minimum button press zal 500milisec duren ? (de duur van een no lock contact maken) als als een cycle van alle buttons 100ms tot 200ms kan zijn dan zit ik ruimschoots goed .. denk ik zo ..

Een interrupt is handig in special cases (save guard)

Searching internet is like drinking from a fire hydrant


Acties:
  • +1Henk 'm!

  • NESFreak
  • Registratie: december 2009
  • Laatst online: 17:29
Ik denk dat je met i2c zo rond een milliseconde uit zal komen om alles uit te lezen en de ledjes te updaten.

Spi kan sneller, maar ik denk dat voor knopjes uitlezen het niet zo heel veel uit maakt. De Arduino wordt dan eerder de beperkende factor.

Acties:
  • 0Henk 'm!

  • vso
  • Registratie: augustus 2001
  • Laatst online: 14:19

vso

raap voor zijn recht

Topicstarter
NESFreak schreef op maandag 18 mei 2020 @ 16:39:
Ik denk dat je met i2c zo rond een milliseconde uit zal komen om alles uit te lezen en de ledjes te updaten.

Spi kan sneller, maar ik denk dat voor knopjes uitlezen het niet zo heel veel uit maakt. De Arduino wordt dan eerder de beperkende factor.
neuh miliseconde is way to fast denk ik ..

Searching internet is like drinking from a fire hydrant

Pagina: 1


Apple iPhone 12 Microsoft Xbox Series X LG CX Google Pixel 5 Black Friday 2020 Samsung Galaxy S20 4G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2020 Hosting door True