mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik eine art zufällsgenerator


Autor: hauke b (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: hauke b (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: hauke b (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: hauke b (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.