Auteur Topic: inlezen van data in arduino met shift register  (gelezen 1469 keer)

Online Havoc

  • Forumlid
  • Berichten: 7.144
  • Voornaam: Johan
Re: inlezen van data in arduino met shift register
« Reactie #15 Gepost op: 29 december 2020, 13:31:38 pm »
Zeg, waarom willen we nu absoluut het anders doen?

Ik zie niet direct iets verkeerd met de schema's van de uitbrieding van de 4021 en 595. Van programmeren ken ik niet genoeg om direct zo de fout te zien. Ik zou ook vermoeden dat het uitbreiden van de lus van 7 naar 15 genoeg zou zijn. Enige waar ik bij twijfel is de (1 << i). Naar gelang we hier met 8 of 16 bit brede registers werken. Daarvoor ken ik de processoren niet goed genoeg.
Expert in non-working solutions.

Online Karel A.J.

  • Forumlid
  • Berichten: 121
  • Voornaam: Karel
Re: inlezen van data in arduino met shift register
« Reactie #16 Gepost op: 29 december 2020, 15:00:02 pm »
Citaat
waarom willen we nu absoluut het anders doen?

"absoluut"? Ik heb enkel aangegeven dat er ook andere formules mogelijk zijn, en dat die zo hun voordelen kunnen hebben. Niet voor niets schreef ik "men kan ook" ! Maar ik heb de vraagsteller alle ruimte gelaten om verder te zoeken op het ingeslagen pad, ik doe zelfs mijn best om mee te denken; al moet ik toegeven dat het voorlopig niet zo best lukt ;)

Offline raf

  • Forumlid
  • Berichten: 5.252
  • Voornaam: raf
Re: inlezen van data in arduino met shift register
« Reactie #17 Gepost op: 29 december 2020, 15:31:55 pm »
En ik stelde een werkend voorbeeld hoe ikzelf het gedaan heb
en ja ik werk met een pic processor en ken dus niet genoeg van arduino
en blijkbaar de rest ook niet om te zien waar de fout zit .

bij mijn voorstelling welke processor ook neem je voor een uitbreiding gewoon een volgende poort en noem je de knoppen die daar aan zitten "toets2" alsook alle andere commando's waar toets in staat .

misschien ook bij arduino een oplossing het zo te doen

maar ja dan maar niet meer mee denken zekers als sommige denken dat het niet kan .
Na 5 herseninfarcten kan het raar zijn wat ik schrijf .Dat is niet mijn fout maar je bril kuisen kan helpen en eens twee keer overlezen .Versta je het nog niet kan ik altijd de Ierse versie er nog van geven die leest misschien iets makkelijker

Online Havoc

  • Forumlid
  • Berichten: 7.144
  • Voornaam: Johan
Re: inlezen van data in arduino met shift register
« Reactie #18 Gepost op: 29 december 2020, 15:35:48 pm »
Raf, ik zeg niet dat het niet kan, maar Bumper heeft nu eenmaal bepaalde zaken liggen klaar om te gebruiken. En ja, dat werkt met een schakelaar, met terugmeldcircuits wordt dat dan toch weer een ander verhaal.

Een ander stel in/outputs gebruiken is wel een oplossing, maar geen idee of die vrij zijn.
Expert in non-working solutions.

Offline patrick smout

  • Forumlid
  • Berichten: 225
  • Voornaam: patrick
Re: inlezen van data in arduino met shift register
« Reactie #19 Gepost op: 30 december 2020, 00:56:28 am »
Dag Ludo,

ik heb je programma wat aangepast en dit zou je al een heel eind op weg moeten helpen.
Het is wel zo dat je "shiftout" functie gelijkaardige aanpassingen nodig heeft maar die code zie ik er niet bij zitten. Ofwel even nog posten op het forum of ook daar byte vervangen door word. Je moet wel nog eens nakijken in heel je programma of er ergens nog iets staat zoals "byte switchvar1". Ook dat moet dan "word switchvar1" worden.

Woordje uitleg wat er niet goed is: Een variabele van het type "byte" kan maar 8 bits (=ingangen) bewaren. Om tot 16 ingangen te bewaren heb je een variabele nodig die ook 16 bits breed is. Het type "word" is op de arduino 16 bits. Wil je tot 32 ingangen inlezen dan heb je een variabele van het type "unsigned long" nodig" (en de lus teller vergroten naar 31. Uiteraard hoef je de 16/32 posities niet allemaal te gebruik. Door de lus aan te passen naar 4 bvb. kan je nog altijd met "unsigned long" types werken en toch maar 4 schakelaars inlezen.

Ik gebruik zelf geen Arduino en heb de aanpassing niet getest maar ik vermoed wel dat ze ok zijn.
Vergeet ook niet de 1 << i te vervangen door 1U << i ( is niet zo goed zichtbaar). Strikt genomen niet noodzakelijk maar eerder netjes.De aanduiding U en unsigned geven aan dat we werken zonder tekenbit. Als er met bits gewerkt wordt is het geen slecht idee om te werken zonder tekenbit. Dus unsigned variabelen , etc. Ter info, bij een arduino stemt "word" overeen met "unsigned int" en is een int 16 bit  en " byte" met "unsigned char" en is een char exact 8 bits.

mvg, Patrick


Met vriendelijke groeten,

Patrick Smout

Offline patrick smout

  • Forumlid
  • Berichten: 225
  • Voornaam: patrick
Re: inlezen van data in arduino met shift register
« Reactie #20 Gepost op: 30 december 2020, 01:17:49 am »
Nog even als reactie op de alternatieve oplossing met de weerstanden die voorgesteld werd.
In het geval van een meerstandenschakelaar is dit idd een werkend alternatief. Als er meerdere ingangen tegelijk actief kunnen zijn dan dan zul je een weerstandsnetwerk moeten opbouwen met weerstanden die zich verhouden als machten van 2. Aangezien een Arduino slechts een 10 bit AD omzetter heeft en de nauwkeurigheid dus nog minder is dan 10 bits is het sop de kool niet waard en kan je daar beter resoluut voor shiftregisters gaan.

Mvg, Patrick
Met vriendelijke groeten,

Patrick Smout

Offline raf

  • Forumlid
  • Berichten: 5.252
  • Voornaam: raf
Re: inlezen van data in arduino met shift register
« Reactie #21 Gepost op: 30 december 2020, 11:49:30 am »
de schakelaars in het voorbeeld mogen alleen maar puls schakelaars zijn dat is een voorwaarde waar aan voldaan moet worden anders werkt het niet

er word geen weerstands waarde gemeten door het programma maar er word een tijd gemeten .
" HIGH Toets                ;Condensator ontladen
    DELAYMS 1                 ;Even wachten zodat condensator helemaal leeg is
    Weerstand = RCIN Toets, HIGH ;Geef RC oplaadtijd aan WORD variabele 'Weerstand'
"
dus de variabele "weerstand gaat de oplaad tijd bevatten "en dan word zelfs de AD convertor niet gebruikt . de waarde word dan verder in het programma gebruikt om die betreffende functie uit te voeren .
het sturen van de wissels doe ik anders en teveel uitleg voor hier .eventueel een apart topic over openen als er interesse voor is

Na 5 herseninfarcten kan het raar zijn wat ik schrijf .Dat is niet mijn fout maar je bril kuisen kan helpen en eens twee keer overlezen .Versta je het nog niet kan ik altijd de Ierse versie er nog van geven die leest misschien iets makkelijker

Offline bumper

  • Forumlid
  • Berichten: 372
  • Voornaam: ludo
Re: inlezen van data in arduino met shift register
« Reactie #22 Gepost op: 30 december 2020, 15:29:33 pm »
Patrick,
Bedankt voor de zeer goede informatie. Ik ga deze nieuwe info eens eerst goed bestuderen want hij bevat voor mij toch een aantal nieuwe elementen die ik eerst ten gronde wil kennen. Daarna komt het testen en laat ik het resultaat wel weten.
Bijgaand nog het ontbrekende stukje code.
void loop() {
  if (digitalRead(nieuwe_lijn) == LOW) {
    while (digitalRead(nieuwe_lijn) == LOW) {};
    delay(100);
    switchVar1 = 0;
    digitalWrite(latchPinIn, 1);
    delayMicroseconds(20);
    digitalWrite(latchPinIn, 0);
    switchVar1 = shiftIn(dataPinIn, clockPinIn, MSBFirst);
    byte ledVar1 = switchVar1;
  digitalWrite(latchPinOut,LOW);   
  shiftOut(dataPinOut,clockPinOut,MSBFirst,ledVar1);
  digitalWrite(latchPinOut,HIGH);   
  delay(5000);
 }
}
Raf,
Ik ga toch de arduino richting volgen en verder uitwerken.
Iedereen bedankt voor de medewerking.

Groeten.
Ludo.
 

Offline patrick smout

  • Forumlid
  • Berichten: 225
  • Voornaam: patrick
Re: inlezen van data in arduino met shift register
« Reactie #23 Gepost op: 30 december 2020, 15:59:21 pm »
Graag gedaan Ludo.

Ik zie wel dat de code die je nog geplaatst hebt het stuk ( functie) rond shiftout nog ontbreekt. Ook in dat stuk  moet je nog de aanpassingen doen van char naar word en uiteraard ook de lusteller.

Veel succes, als je nog vragen hebt dan horen we het wel.

Mvg, Patrick
Met vriendelijke groeten,

Patrick Smout

Offline Peter_66

  • Forumlid
  • Berichten: 41
  • Voornaam: Peter
Re: inlezen van data in arduino met shift register
« Reactie #24 Gepost op: 30 december 2020, 16:39:57 pm »
Zoals Patrick reeds heeft aangegeven, dien je 16 keer te lezen ipv de 8 in het oorspronkelijk programma.
Je kan met byte werken en per 4021 dien je dan 1 byte te voorzien en ook meerdere keren de leesroutine doorlopen.
Met bv 3 kan je Var[3] gebruiken en 3x de inleesroutine doorlopen.

Offline raf

  • Forumlid
  • Berichten: 5.252
  • Voornaam: raf
Re: inlezen van data in arduino met shift register
« Reactie #25 Gepost op: 31 december 2020, 08:43:33 am »
Ludo geen probleem
er zijn meer straten die naar Straatsburg leiden

gr raf
Na 5 herseninfarcten kan het raar zijn wat ik schrijf .Dat is niet mijn fout maar je bril kuisen kan helpen en eens twee keer overlezen .Versta je het nog niet kan ik altijd de Ierse versie er nog van geven die leest misschien iets makkelijker

Offline bumper

  • Forumlid
  • Berichten: 372
  • Voornaam: ludo
Re: inlezen van data in arduino met shift register
« Reactie #26 Gepost op: 31 december 2020, 15:31:43 pm »
Patrick,
Met één shiftregister 595 werkt het bij mij zonder problemen.
Volgens de informatie die ik heb kunnen vinden en dus ook toegepast heb, kun je de code shiftOut zo gebruiken. Als functie kan ook en mag ook maar is niet nodig. Als je met één byte werkt en ook niet meer of niet minder nodig hebt, kan het zo. Er worden automatisch acht clock pulsen gegenereerd die de byte naar het shift register sturen dewelke het parallel naar de uitgangen stuurt. Als ge iets anders nodig hebt, zal je met een functie moeten werken. Ik hoop dat je mijn uitleg verstaat en dat hij juist is. In ieder geval het werkt zo of is dit toevallig.
Groeten.
Ludo.
 

Offline patrick smout

  • Forumlid
  • Berichten: 225
  • Voornaam: patrick
Re: inlezen van data in arduino met shift register
« Reactie #27 Gepost op: 01 januari 2021, 23:06:47 pm »
Dag Ludo,

Interpretatiefoutje van mij. Ik leefde in de veronderstelling dat je ook meer dan 8 uitgangen wilde hebben maar dat blijkt niet zo te zijn. Indien wel meer dan 8 vraagt het ook om een aanpassing

Mvg, Patrick Smout
Met vriendelijke groeten,

Patrick Smout