Ich meine die interne Bascom_Hilfe. Die Verlinkung erzeugt die Forensoftware.
Oder hier.
MfG
Ich meine die interne Bascom_Hilfe. Die Verlinkung erzeugt die Forensoftware.
Oder hier.
MfG
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)
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
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 bekommeUnd 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)
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)
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 habenEs 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)
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)
Lesezeichen