Forum: Mikrocontroller und Digitale Elektronik eine art zufällsgenerator


von hauke b (Gast)


Lesenswert?

hallo alle zusammen,

ich habe folgendes problem: ich habe einen counter, der von 1-16 
durchzählt.
jetzt möchte ich, wenn man einen taster drückt das der jeweilige wert 
des counters abgelesen wird und in einer variable gespeichert wird.

kann mir einer von euch dabei helfen?

hier mein bisheriger code:



 Config Pinb.1 = Input
 Eingang Alias Pinb.1


 Dim I As Integer
 Dim A As Byte
 Dim B As Byte

Do

  A = Rnd(16)
    For I = 1 To 16

    Rotate A , Left
    Waitms 200
    Next I

Loop


irgendetwas funktioniert nicht

danke schon mal im voraus für die hilfe!

lg hauke

von Karl H. (kbuchegg)


Lesenswert?

> jetzt möchte ich, wenn man einen taster drückt

> irgendetwas funktioniert nicht

Ähm. Ich würde mal vermuten, dass du dazu auch irgendwo
abfragen musst, ob die Taste gedrückt wurde. Irgendwie
vermisse ich in deinem Programm jegliche Auswertung des
Eingangs.

von hauke b (Gast)


Lesenswert?

ja das stimmt aber das ist ja grade das problem. ich habe von bascom 
noch nicht so viel ahnung. ich habe es bisher hiermit probiert:


 If Eingang = 1 Then
    wert = A
 End If


aber wie schon gesagt das funktioniert nich wirklich.

ich kann ja einfach mal den ganzen code posten:

 $regfile = "m8def.dat"
 $crystal = 12000000
 $baud = 9600

 Config Pinb.1 = Input
 Eingang Alias Pinb.1

 Dim Wert As Byte
 Dim I As Integer
 Dim A As Byte
 Dim B As Byte

Do
  A = Rnd(17)
    For I = 1 To 16

    Rotate A , Left
    Waitms 200
    Next I


 If Eingang = 1 Then
    Modus = A
 End If
Loop


kannst du mir sagen was ich falsch gemacht habe??

lg hauke

von Karl H. (kbuchegg)


Lesenswert?

> aber wie schon gesagt das funktioniert nich wirklich.

Definiere: "funktioniert nicht wirklich"

Was funktioniert denn daran nicht?
Was erwartest du und was passiert statt dessen?

> das der jeweilige wert des counters abgelesen wird

Dein Counter dürfte wohl das I sein. Oder doch das A.
Aber warum rotierst du das A immer um 1 nach links?

Aber warum fragst du den Eingang erst dann ab, wenn die
for schleife einmal bis 16 durchgezählt hat. Ich denke
du willst den Counter bei irgendeinem Zählerstand erwischen
und nicht erst dann, wenn er 16 erreicht hat.

Im übrigen wird das wahrscheinlich nicht funktionieren,
weil das ganze viel zu schnell abläuft. Du willst den
Zählerstand einfrieren, wenn der Taster gedrückt wird
und nicht solange er gedrückt ist.

Vom Port kriegst du aber nur die Information ob der Taster
gedrückt ist. Das ist aber relativ einfach zu beheben.
WEnn der Taster vorher nicht gedrückt war und jetzt
plötzlich gedrückt ist, dann ist er in der Zwischenzeit
gedrückt worden.
Du brauchst also noch eine Variable, die den Zustand ses Tasters
im letzten Durchlauf festhält. Unterscheidet sich dieser
Zustand vom jetzigen Zustand, dann war Action an der Taste


Vorher = Eingang

do
  Jetzt = Eingang
  if Jetzt <> Vorher then
     ' Juhu es gab Action an der Taste, werte da mal aus
  end if

  Vorher = Jetzt
Loop


Ich bin kein BASCOM Spezialist und wahrscheinlich kann man
das auch noch einfacher machen. Am besten ist es im Web nach
einem BASCOM Tutorial zu suchen und mal nachzulesen.

von hauke b (Gast)


Lesenswert?

ok ich werde mal mein glück versuchen ob ich das mit deiner idee 
hinbekomm. danke für den tipp. kennst du vllt noch toutorials im 
internet wo soetwas gemacht wird? habe bisher noch nichts brauchbares 
gefunden.

lg hauke

von hauke b (Gast)


Lesenswert?

so habe jetzt den code nochmals umgeschrieben aber es geht immernoch 
nicht.
der wert a wechselt IMMER aber er soll ja nur wechseln wenn der taster 
gedrückt wird. ich hoffe du kannst mir helfen..


$regfile = "m8def.dat"
 $crystal = 12000000
 $baud = 9600


 Config Pinb.1 = Input
 Eingang Alias Pinb.1


 Dim Wert As Byte
 Dim A As Byte
 Dim Vorher As Bit
 Dim Jetzt As Bit

 Vorher = 0
 Jetzt = 0

 Do

 A = Rnd(17)

 Jetzt = Eingang

 If Eingang = 1 Then Toggle Vorher

 If Jetzt <> Vorher Then
    Wert = A
 End If

Print A

loop



lg hauke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.