Hallo

Ik heb een schakeling waar 6 ingangen bekeken worden op 1 ad ingang
dit met een multiplexer hef 4051
en wil een hysterese van +/- 1 volt hebben
ad ingang is 8 bits dus 1 volt is 50
de schakeling werkt goed als de waarde oner de 50 of boven de 100 zit.
maar als de waarde tussen de 50 en 100 zit dan flikkert de uitgang
het moet toch zijn dat als de ingangs waarde tussen de 50 en 100 zit dat de set en de clearbit opdracht niks doen.
hoe zit dit nou
kom er even niet uit


TeltDeIngangen:

For Teller = 0 To 5 
    GoSub SetIngangen
    DelayMS 10
    If ADIn 0 < 50 Then SetBit Ingangen,Teller          'set de bit's
    If ADIn 0 > 100 Then ClearBit Ingangen,Teller       'clear bit 
Next

PORTB = Ingangen

GoTo TeltDeIngangen

SetIngangen:           'set de Ingangen 1 t/m 6    multiplexer(hef4051b)
If Teller=0 Then            
    A = 1:B = 0:C = 1                
ElseIf Teller=1 Then
    A = 1:B = 1:C = 1
ElseIf Teller=2 Then
    A = 0:B = 0:C = 0
ElseIf Teller=3 Then
    A = 1:B = 1:C = 0
ElseIf Teller=4 Then
    A = 0:B = 1:C = 0
ElseIf Teller=5 Then
    A = 1:B = 0:C = 0
EndIf 
Return



Kun je niet nog een Elseif ertussen zetten?
Dus als hij niet voldoet aan de eerdere eisen, zal hij eindigen in die bak.
Misschien dat je daar iets mee kunt doen.

Hoi

Natuurlijk heb ik alle if functie al geprobeert
maar deze if functie werkt wel.
het heeft met die for next te maken

Ik ben nog met van alles bezig maar kom er nog niet uit
want dit werkt wel


Test:

teller = 1
 A = 1:B = 0:C = 1  'Ingang 1 open (cmos 4051)
  If ADIn 0 < 51  Then SetBit Ingangen,Teller
  If ADIn 0 > 100 Then ClearBit Ingangen,Teller
        
PORTB = Ingangen

GoTo Test

Je misbruikt variabelen met de verkeerde naam.

Teller telt niet.

De variabelen "ingangen" gebruik jij om de uitgangen te zetten.

Als je dit doet, is het voor andere mensen ontzettend lastig om de fouten in je code te spotten. En voordat je het weet maak je zelf ook fouten doordat je in de war raakt van de namen.... Misschien is dat het wel....

Oke
Bedankt voor de op en aanmerkingen

Na veel dingen uitsluiten kom ik er achter dat het eerste voorbeeld
wel werkt

alleen als ik de ingangen inventeer
dan gaat het fout

Ingangen = Ingangen ^ XorIn

als dit er tussen uit gaat werkt het
maar de ingangen moeten ook geinventeert kunnen worden.
maar goed ik weet nu waar ik zoeken moet

voor de mensen die het willen weten hier het vb

Opstart:

XorIn = 0           'Kijkt via een multiplexer(hef4051b) de 6 ingangen van 6x schak. en zet het in BYTE Xorin
For Teller = 0 To 5 
    GoSub SetPoortXor
    DelayMS 20
    If InvertIn = 1 Then SetBit XorIn,Teller          'set de bit's in de byte
Next

TeltDeIngangen:
  

For Teller = 0 To 5 
   GoSub SetIngangen 
    DelayMS 10
   If ADIn 0 < 51  Then SetBit Ingangen,Teller
   If ADIn 0 > 100 Then ClearBit Ingangen,Teller
Next

Ingangen = Ingangen ^ XorIn        'Xor
PORTB = Ingangen

GoTo TeltDeIngangen

SetIngangen:           'set de Ingangen 1 t/m 6    multiplexer(hef4051b)
If Teller=0 Then            
    A = 1:B = 0:C = 1                
ElseIf Teller=1 Then
    A = 1:B = 1:C = 1
ElseIf Teller=2 Then
    A = 0:B = 0:C = 0
ElseIf Teller=3 Then
    A = 1:B = 1:C = 0
ElseIf Teller=4 Then
    A = 0:B = 1:C = 0
ElseIf Teller=5 Then
    A = 1:B = 0:C = 0
EndIf 
Return
 
SetPoortXor:

If Teller=0 Then                  'set de poorten van de 6 stand schakelaars
    PORTB.0 = 1                   'portB.0 = A0
    PORTB.1 = 0                   'portB.1 = A1
    PORTB.2 = 1                   'portB.2 = A2
ElseIf Teller=1 Then
    PORTB.0 = 1
    PORTB.1 = 1
    PORTB.2 = 1
ElseIf Teller=2 Then
    PORTB.0 = 0
    PORTB.1 = 1
    PORTB.2 = 1
ElseIf Teller=3 Then
    PORTB.0 = 0
    PORTB.1 = 0
    PORTB.2 = 1
ElseIf Teller=4 Then
    PORTB.0 = 1
    PORTB.1 = 0
    PORTB.2 = 0
ElseIf Teller=5 Then
    PORTB.0 = 0
    PORTB.1 = 1
    PORTB.2 = 0
EndIf 
Return
End         
 

ehhh. begrijp ik je nu goed? Als je A, B en C variabelen een waarde geeft, wordt op magische wijze een ander input kanaal geselecteerd?

En ik begrijp ondertussen dat portb.0, 1 en 2 aan en muxer hangen waar je extern het al dan niet inverteren mee kan instellen. De variabele "invertin" blijkt dan zodanig gedefinieerd dat ie aan een pin hangt?

Waarom doe je niet teller =0 -> ABC=000 teller =1 -> ABC=001 etc?

[Bericht gewijzigd door rew op (51%)]

Ja klopt

Het ziet er inderdaad een beetje vreemd uit
en het kan ook veel simpeler
PortB=Teller
maar zoals je ziet zitten de ingangen van de multiplexer
niet gelijk aan ingangen van buiten

dit komt omdat het dan makkelijker was om een print te maken
veel minder draad bruggen.

Maar uit eindelijk werkt het progr. goed
ik had in een keer het progr. gemaakt
dat werkt niet
toen geheel ontleed en apart getest.
en dan kom je er toch wel weer uit.

[Bericht gewijzigd door Habro op (24%)]