Der Motor ist an ein Hebelsystem angebaut das eine Trommel bewegt und schrittweise um 36° pro Schritt geschoben wird.
Über den Rest muss ich erst mal nachdenken , gehe aber davon aus das du mir den benötigten Rat gegeben hast. Ich melde mich wieder.
Werbung
Der Motor ist an ein Hebelsystem angebaut das eine Trommel bewegt und schrittweise um 36° pro Schritt geschoben wird.
Über den Rest muss ich erst mal nachdenken , gehe aber davon aus das du mir den benötigten Rat gegeben hast. Ich melde mich wieder.
So jetzt hab ich das ganze noch mal neu geschieben und die halbe nacht getestet und es ist dies hier herausgekommen .
Wie ihr seht hab ich die Anregungen mit berücksichtigt.Code:$regfile = "attiny13.dat" $crystal = 9600000 $hwstack = 16 $swstack = 8 $framesize = 24 Config Portb.2 = Input Config Portb.1 = Output Config Portb.0 = Output Config Servos = 1 , Servo1 = Portb.0 , Reload = 10 Do Do Dim W As Integer Pulsein W , Pinb , 2 , 1 If W <= 150 Then Portb.1 = 0 End If If W > 150 And W <= 200 Then Portb.1 = 1 End If Waitms 1450 Portb.1 = 0 Loop Until W > 150 ' Wiederhole do loop, bis Bedingung W>150 wahr ist. Enable Interrupts 'Servoschleife Dim I As Byte For I = 100 To 200 Servo(1) = I Next I For I = 200 To 100 Step -1 Servo(1) = I Waitms 12 Next I Disable Interrupts Portb.1 = 1 Waitms 8 Waitms 1700 Portb.1 = 0 Loop End
Aber wie es immer so ist , erst geht alles und dann nichts mehr , ich war kurz vorm Kollaps . Dann alles noch mal Messen und hol es der Teufel das Relais fällt nicht mehr ab . Gut messen wir doch mal den Anlaufstrom ,3,25A das Relais verträgt aber nur max. 1A , da hatte ich den Grund nun muss ich das ganze Platinenlayout umarbeiten weil der Motor nun mit einem BUZ11 angetrieben wird.
herzlichen Dank für eure Hilfe
Henry
ich mache mal ein paar änderungsvorschläge siehe code
Code:$regfile = "attiny13.dat" $crystal = 9600000 $hwstack = 16 $swstack = 8 $framesize = 24 //Configs Config Portb.2 = Input Config Portb.1 = Output Config Portb.0 = Output Config Servos = 1 , Servo1 = Portb.0 , Reload = 10 //Variablen Dim W As Integer Dim I As Byte Do Do Pulsein W , Pinb , 2 , 1 If W <= 150 Then Portb.1 = 0 elseif W > 150 And W <= 200 Then Portb.1 = 1 Waitms 1450 Portb.1 = 0 End If //Nu warten wenn es auch sinvoll ist, sonst wartet der µC 1,5S und merkt dabei nicht das nächste start signal Loop Until W > 150 ' Wiederhole do loop, bis Bedingung W>150 wahr ist. Enable Interrupts 'Servoschleife For I = 100 To 200 Servo(1) = I Next I For I = 200 To 100 Step -1 Servo(1) = I Waitms 12 Next I Disable Interrupts Portb.1 = 1 Waitms 8 Waitms 1700 Portb.1 = 0 Loop End
was gibt es noch zu sagen
Wenn Du das sagst![]()
Da war der Thomas$ wohl etwas schneller![]()
Hier mein Vorschlag (ungetestet) :
Wichtig hierbei ist das dieser Code lesbar ist, und nicht in unnötige Stücke zerhackt die man nicht mehr zuordnen kann.Code:$regfile = "attiny13.dat" $crystal = 9600000 $hwstack = 16 $swstack = 8 $framesize = 24 Config Portb.2 = Input Config Portb.1 = Output 'Relais Config Portb.0 = Output Config Servos = 1 , Servo1 = Portb.0 , Reload = 10 Dim Puls as Integer 'dim W As Integer Dim I As Byte Enable Interrupts ' Relais Alias Portb.1 Do Pulsein Puls , Pinb , 2 , 1 'Schelife geht solange in else Zweig bis Pukls größer 150 ist If Puls > 150 then 'And Puls <= 200 'Then 'Steigt Puls/W überhaupt über 200 oder ist es sogar egal?? Portb.1 = 1 'Relais = 1 'Relais an Waitms 1450 Portb.1 = 0 'Relais = 0 'Relais aus ' 'Enable 'Interrupts 'siehe oben For I = 100 To 200 'Servoschleife anfang Servo(1) = I Next I 'schnelle fahrt des Servo For I = 200 To 100 Step -1 Servo(1) = I Waitms 12 'geregelte Rückfahrt des Servo Next I 'Servoschleife ende ' 'Disable 'Interrupts 'weglassen! Siehe Hilfe >> mit F1 auf CONFIG (- servo) Portb.1 = 1 'Relais = 1 'Relais an Waitms 1708 'Waitms 8 + 'Waitms 1700 Portb.1 = 0 'Relais = 0 'Relais aus else Portb.1 = 0 'Relais = 0 'Relais aus End If loop End
Viele Grüße
Jörg
Geändert von HeXPloreR (28.07.2015 um 16:40 Uhr)
Hallo
Thomas meinst du das Prog bewegt sich in dieser Schleife bis der Wert sich ändert ?
Ich werde es ausprobieren .Code:Pulsein W , Pinb , 2 , 1 'also in diesen drei Zeilen If W <= 150 Then Portb.1 = 0 'wenn nicht würde jedes mal der Rest abgearbeitet das wäre nicht gut elseif W > 150 And W <= 200 Then Portb.1 = 1 Waitms 1450 Portb.1 = 0 End If //Nu warten wenn es auch sinvoll ist, sonst wartet der µC 1,5S und merkt dabei nicht das nächste start signal
Jörg bei deinem Vorschlag ist die Frage ähnlich.
Sorry aber ich sagte es ja Anfänger , ich versuche es zu verstehen was für künftige Projekte wichtig ist.Code:Do Pulsein Puls , Pinb , 2 , 1 'Schelife geht solange in else Zweig bis Pukls größer 150 ist If Puls > 150 then 'And Puls <= 200 'Then 'Steigt Puls/W überhaupt über 200 oder ist es sogar egal?? Portb.1 = 1 'Relais = 1 'Relais an Waitms 1450 Portb.1 = 0 'Relais = 0 'Relais aus ' 'Enable 'Interrupts 'siehe oben For I = 100 To 200 'Servoschleife anfang Servo(1) = I Next I 'schnelle fahrt des Servo For I = 200 To 100 Step -1 Servo(1) = I Waitms 12 'geregelte Rückfahrt des Servo Next I 'Servoschleife ende ' 'Disable 'Interrupts 'weglassen! Siehe Hilfe >> mit F1 auf CONFIG (- servo) Portb.1 = 1 'Relais = 1 'Relais an Waitms 1708 'Waitms 8 + 'Waitms 1700 Portb.1 = 0 'Relais = 0 'Relais aus else 'hier erst else bis dahin hat das Prog alles davor doch schon durchlaufen oder ? Portb.1 = 0 'Relais = 0 'Relais aus End If loop End
Du sagtest aber auch das Du schon ein wenig Basic programmieren kannst. Daher hatte ich vorrausgesetzt dass das grundsätzliche Konstrukt einer if-Schlleife bekannt ist.
Nun zu meinem Vorschlag: Die if-Schleife geht solange in den else-Zweig bis der Wert von Puls über 150 steigt. Dann wird der Code mit allen waits und was da so steht ausgeführt. Nimmst du in der Zeit die die Schleife zum durchlaufen benötigt die >150 wieder weg, dann geht es wieder in den else-Zweig. Im else-Zweig wird nur der Port ausgeschaltet.
Dieser Zweig ist theoretisch dazu da um den Code lesbarer zu haben, man sieht hier was passieren soll wenn "else" ausgeführt wird - OBWOHL es nicht nötig wäre es hinzuschreiben weil der Code sowieso erst in der oberen If-Schleife den Port einschaltet und auch wieder ausschaltet. Er kann also ausserhalb der oberen If-Schleife nie an sein.
Aber um grundsätzlich richtig mit Schleifen zu arbeiten ist es eine gute Übung.
Ich empfehle dir dieses Bascom-Tutorial(klick mich) mal anzusehen.
Viele Grüße
Jörg
Geändert von HeXPloreR (29.07.2015 um 16:02 Uhr)
Hallo
Jörg , du ast ja recht mit Basic , aber das war zu C64 Zeiten und auch nur so rumgespielt nicht wirklich ernsthaft halt reingeschnuppert . Meinen damaligen Helfer hab ich durch nen Verkehrsunfall verloren später niemanden gefunden der sich damit ernsthaft beschäftigt . Da war dann irgendwann die Luft raus. Als ich dann diese µC für mich enddeckt habe kam ich drauf die für RC-Modellbau zu nutzen (ich weiß ich bin nicht der erste oder einzige ,so vermessen bin ich nicht) .
Ich hab die gemachten Vorschläge getestet .
Thomas bei deinem streikt unter BASCOM-AVR der Compiler mit der Fehlermeldung IF THEN expected oder LOOP expected .
Jörg dein Vorschlag macht zwar keine Faxen unter BASCOM-AVR aber in der Schaltung zuckt der Servo hin und her auf die Fernsteuerung reagiert der µC aber gar nicht.
Zu dem Ganzen muss ich folgendes sagen , den µC der alles so macht wie er soll hab ich beiseite gelegt . Ich habe noch 4 Attiny13 auf denen Blinklichter und solche Progs gehen aber egal ob ich die Vorschläge oder mein Prog aufspiele die machen nichts , nun hab ich mich auf die Suche , nach einer Möglichkeit um diese Fuse bits aus zu lesen , gemacht bin aber noch nicht fündig geworden. Mein Plan wäre diese Fuse bits zu vergleichen , nicht das da was unterschiedlich ist und dadurch das Prog nur auf einem µC funktioniert .
Wenn einer von euch einen Tipp in dieser Richtung hat wäre nett . Meine µC´s habe ich damals gebraucht gekauft weis also im Moment nicht wie die eingestellt sind , neue sind bestellt dauert aber noch.
Mit den besten Grüßen
Henry
PS:
Bie den Chips lag es an den Fuse Bits , ausgelesen bei dem neuen eingeshrieben , siehe da es funktioniert . Jetzt läuft das Prog so wie es soll , jetzt noch der Praxistest und die Laufzeiten des Motors feinjustieren und dann![]()
![]()
![]()
![]()
Herzlichen Dank für eure Hilfe
Henry
Geändert von Vidarodinssohn (30.07.2015 um 17:30 Uhr)
Lesezeichen