- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 42

Thema: Zielscheibensystem mit Zufall

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.01.2007
    Ort
    westliches Pannonien
    Beiträge
    123
    Ich meine die interne Bascom_Hilfe. Die Verlinkung erzeugt die Forensoftware.
    Oder hier.

    MfG

  2. #2
    DjEKI
    Gast
    Axo die, die nutze ich auch sehr häufig. Leider konnte ich zu Variabeln nichts finden, zb das mit den SET. Aber das Problem wäre ja nun gelöst mit incr.

    Aber hättest du ne Lösung für mich, wie ich das mit dem Goto lösen kann? Kann man überhaupt mit ein Interrupt zu einer bestimmten Lane springen? Oder geht ein Interrupt immer nur dort weiter, wo es unterbrochen wurde.

    -EDIT-
    Das mit dem SET ersatz habe ich behoben. Einfach nur Scheibe = 1. Praktisch ohne Set. Funktioniert jedenfals in der Simulation.

    mfg EKI
    Geändert von DjEKI (12.02.2013 um 18:17 Uhr)

  3. #3
    DjEKI
    Gast

    2.es Programm mit Simulationstest erfolgreich

    Ui, mein erster Code hatte doch viele Fehler. Jetzt habe ich sogar das mit dem Interrupt verbessert und im Simulator funktioniert bisher alles tadellos.

    Code:
    $regfile = "m32def.dat"
    $crystal = 1000000
    
    
    '***********************************************************************'
    
    
    Dim Scheibe As Integer
    Dim Punkte As Integer
    Dim Scheibe_akt As Bit
    Dim A As Byte
    Dim B As Byte
    
    A = 0
    B = 0
    Scheibe = 2
    Punkte = 0
    
    
    Config Portd.0 = Output
    Config Portd.5 = Output
    Config Portd.6 = Output
    Config Int0 = Rising
    Config Int1 = Rising
    Enable Interrupts
    Enable Int0
    Enable Int1
    On Int0 Int0_5punkte
    On Int1 Int1_10punkte
    
    
    
    Do
    '---------------------'
    If Scheibe = 1 Then
    Portd.0 = 1
    Scheibe = 0
    Do
    Incr Scheibe
    Waitms 250
    If Scheibe_akt = 1 Then
       Goto Anfang
    End If
    Incr B
    If Scheibe = 3 Then
       Scheibe = 0
    End If
    Loop Until B = 8
    Scheibe = 2
    Goto Anfang
    Else
       Portd.0 = 0
    End If
    '---------------------'
    If Scheibe = 2 Then
    Portd.5 = 0
    Scheibe = 0
    Do
    Incr Scheibe
    Waitms 250
    If Scheibe_akt = 1 Then
       Goto Anfang
    End If
    Incr B
    If Scheibe = 3 Then
       Scheibe = 0
    End If
    Loop Until B = 8
    Scheibe = 3
    Goto Anfang
    Else
       Portd.5 = 0
    End If
    '---------------------'
    If Scheibe = 3 Then
    Portd.6 = 1
    Scheibe = 0
    Do
    Incr Scheibe
    Waitms 250
    If Scheibe_akt = 1 Then
       Goto Anfang
    End If
    Incr B
    If Scheibe = 3 Then
       Scheibe = 0
    End If
    Loop Until B = 8
    Scheibe = 1
    Goto Anfang
    Else
       Portd.6 = 0
    End If
    
    Anfang:
    Scheibe_akt = 0
    B = 0
    Waitms 1000
    
    Incr A
    Loop Until A = 20
    End                                                         'hier erscheint ein Ton und zeigt das Ende mit Ergebnis.
    
    '*************************************************************************'
    
    Int0_5punkte:
    Punkte = Punkte + 5
    Portd.0 = 0
    Portd.5 = 0
    Portd.6 = 0
    Scheibe_akt = 1
    Return
    
    Int1_10punkte:
    Punkte = Punkte + 10
    Portd.0 = 0
    Portd.5 = 0
    Portd.6 = 0
    Scheibe_akt = 1
    Return

  4. #4
    DjEKI
    Gast

    3. Programm mit Hardware getestet und Fehler behoben

    Moin,

    Nun funktioniert alles super. Der Zufall ist sogar viel besser mit 50ms.
    Ich wollte dies jetzt nur für mich vollenden, damit ich auch mal eins hin bekomme Und nun muss ich mich mal mit den ATmega88 beschäftigen, was der so alles braucht.

    Wenn ich das ATmega88 habe, kann ich die einzelnen Trigger deaktiveren, um ein 2. Treffer zu verhinden?

    -EDIT-
    Ich habe eben bemergt, das ich schon bei 3kb bin und ich werde bestimmt über 8kb kommen, und von daher lohnt sich der atmega88 leider nicht. Kennt jemand noch einen der mindestens 6 Triggers umschalten kann?

    mfg EKI

    Hier der Code, und sogar noch optimiert:
    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 1000000
    
    
    '***********************************************************************'
    
    
    Dim Scheibe As Integer
    Dim Punkte As Integer
    Dim Scheibe_akt As Bit
    Dim A As Byte
    Dim B As Byte
    
    A = 0
    B = 0
    Scheibe = 1
    Punkte = 0
    
    
    Config Portd.0 = Output
    Config Portd.5 = Output
    Config Portd.6 = Output
    Config Int0 = Rising
    Config Int1 = Rising
    Enable Interrupts
    Enable Int0
    Enable Int1
    On Int0 Int0_5punkte
    On Int1 Int1_10punkte
    
    
    
    Do
    '---------------------'
    If Scheibe = 1 Then
    Portd.0 = 1
    Scheibe = 0
    Do
    Incr Scheibe
    Waitms 50
    If Scheibe_akt = 1 Then
       Goto Anfang
    End If
    Incr B
    If Scheibe = 3 Then
       Scheibe = 0
    End If
    Loop Until B = 15
    Scheibe = 2
    Portd.0 = 0
    Goto Anfang
    Else
       Portd.0 = 0
    End If
    '---------------------'
    If Scheibe = 2 Then
    Portd.5 = 1
    Scheibe = 0
    Do
    Incr Scheibe
    Waitms 50
    If Scheibe_akt = 1 Then
       Goto Anfang
    End If
    Incr B
    If Scheibe = 3 Then
       Scheibe = 0
    End If
    Loop Until B = 15
    Scheibe = 3
    Portd.5 = 0
    Goto Anfang
    Else
       Portd.5 = 0
    End If
    '---------------------'
    If Scheibe = 3 Then
    Portd.6 = 1
    Scheibe = 0
    Do
    Incr Scheibe
    Waitms 50
    If Scheibe_akt = 1 Then
       Goto Anfang
    End If
    Incr B
    If Scheibe = 3 Then
       Scheibe = 0
    End If
    Loop Until B = 15
    Scheibe = 1
    Portd.6 = 0
    Goto Anfang
    Else
       Portd.6 = 0
    End If
    
    Anfang:
    Scheibe_akt = 0
    B = 0
    Waitms 2000
    
    Incr A
    Loop Until A = 20
    Portd.0 = 1
    Portd.5 = 1
    Portd.6 = 1
    End                                                         'hier erscheint ein Ton und zeigt das Ende mit Ergebnis.
    
    '*************************************************************************'
    
    Int0_5punkte:
    Punkte = Punkte + 5
    Portd.0 = 0
    Portd.5 = 0
    Portd.6 = 0
    Scheibe_akt = 1
    Return
    
    Int1_10punkte:
    Punkte = Punkte + 10
    Portd.0 = 0
    Portd.5 = 0
    Portd.6 = 0
    Scheibe_akt = 1
    Return
    Geändert von DjEKI (13.02.2013 um 16:59 Uhr)

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Soltau - Niedersachsen
    Alter
    46
    Beiträge
    1.369
    Aha...das läuft also.
    Für mich sieht es immer noch ziemlich wirr aus - das ist dann wohl der sogenannte "Spagetti Code".
    Wo genau ist die Optimierung?
    Die Integers würde ich durch Words ersetzen, nicht das jemand denkt Du rechnest damit auch ins minus.

    Soll es nun ein Mega8 ; 32 oder 88 werden? Dann sollte man das vielleicht in den Code mit rein schreiben....

    Kennst Du das hier schon:
    http://halvar.at/elektronik/kleiner_bascom_avr_kurs/

    Ich hoffe das Dir bald klar wird, das dieser momentan Code sehr, wirklich,sehr sehr schwer auf 6 Scheiben erweitert werden kann.

    Viele Grüße
    Geändert von HeXPloreR (13.02.2013 um 17:11 Uhr)

  6. #6
    DjEKI
    Gast
    danke, da kann ich auch mal vorbei schauen.

    Der mega88 wird wohl zu klein sein vom Speicher her. Daher schau ich grad bei den mega325 und die haben derbe viele Interrupts, aber da sind soooo viele Pins, da will ich doch lieber die längliche Form haben Es kann aber auch ein Mega16 sein. Nur die Interrupts müssen mindestens 6 mal vorhanden sein. Der Code wird natürlich dementsprechend angepasst. Aber wenigstens konnte ich mal sehen, dass der Zufall und ein programmierter MC von mir funktioniert ^^

    mhm, der hier wirds wohl sein: ATmega328P
    Was meint Ihr? Ich habe irgendwo gelesen, dass PonyProg mit der P Serie nicht klar kommt. Stimmt das?

    mfg EKI
    Geändert von DjEKI (13.02.2013 um 17:22 Uhr)

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Soltau - Niedersachsen
    Alter
    46
    Beiträge
    1.369
    Warum sollte der damit nicht klar kommen? - davon hab ich jetzt noch nichts gehört.
    Allerdings kenn ich mich auch nicht mit PonyProg aus.

    Schau mal hier, vielleicht fällt dir was auf:
    EDIT: LINK ENTFERNT - DEFEKT

    Viele Grüße

    EDIT: Versuch den: http://www.reichelt.de/0/ADW/0/index...bc7ca1d4be5885
    Suche dann nach "328P"
    Geändert von HeXPloreR (13.02.2013 um 18:27 Uhr)

Ähnliche Themen

  1. 4 Led´s unabhängig per Zufall blinken lassen?
    Von DanielSan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 22
    Letzter Beitrag: 20.07.2011, 13:43
  2. Wie denn "Zufall" programmieren
    Von Cybrix im Forum C - Programmierung (GCC u.a.)
    Antworten: 16
    Letzter Beitrag: 11.06.2007, 09:10
  3. Zufall wirklich Zufall ???
    Von Speed im Forum Software, Algorithmen und KI
    Antworten: 3
    Letzter Beitrag: 03.08.2006, 12:03
  4. LED´s per Zufall leuchten lassen
    Von Hoomer im Forum Elektronik
    Antworten: 11
    Letzter Beitrag: 05.02.2006, 14:45

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen