Hallo!
Könnte ein Bascom-Servo Exxperte diesen Bascom-Code ansehen?
Ich möchte mit einem Attiny13 ein Servo jeden 2. Tag für 2 min auf
Endausschlag bringen?!
merci
leopold
Mein BascomProgramm:
'-----------------------------------------------------------------------
-------
'name : WAIT SAMPLE
'micro : Tiny13
'-----------------------------------------------------------------------
-------
$regfile = "ATtiny13.dat"
$crystal = 1000000
$baud = 19200
$hwstack = 32
$swstack = 8
$framesize = 24
Enable Interrupts
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
Dim I As Word
Dim K As Word
Dim L As Word
Do ' 2 Tage warten PortB2 für 2 min high,
For L = 1 To 2
GoSub Wait_tag
Next
Const Startwert = 50
Const Endwert = 150
'Startposition einnehmen
Servo(1) = Startwert
Do
For Neue_position = Startwert To Endwert Step 20
Servo(1) = Neue_position
Waitms 300
Next Position
For Neue_position = Endwert To Startwert Step -20
Servo(1) = Neue_position
Waitms 300
Next I
Loop
Wait_tag:
For I = 1 To 24
Wait 3600
Next
Return
Gast
#2081339
Naja, ich denke das Program macht nicht, das was Du möchtest (wo sind z.B. die 2 Minuten?) aber wozu konkret hast nun eine Frage bzw. Probleme?
Moin, Mal abgesehen davon, dass der code total ineffizient ist, sollte er prinzipiel funktionieren. Aber ein paar Fehler sind trotzdem drin, die müsste dir der Compiler aber unten anzeigen, wenn es versucht zu compilieren. 1) 2x Do aber nur einmal Loop 2) Die Variable Neue_position ist oben nicht erstellt Ich würde entweder mit einem DCF-77 modul arbeiten oder einen Timer so einstellen, dass er dir jede Sekunde einen Interrupt liefert. In der ISR eine Variable um 1 erhöhen, ist diese bei 3600 angelangt, eine andere erhöhen. Sollte diese bei 24 angelangt ein, überprüfen ob ein MArker gesetzt ist. Wenn ja, den servo stellen, den marker zurück setzen und alle beginnt von vorne. Wenn nein, den marker setzten und das gleiche spiel beginnt. Um Strom zu sparen, würde ich einen Portpin opfern und einen Transistor damit schalten um den Servo aus zu schalten, wenn er nicht gebraucht wird. das setzt natürlich vorraus, dass der serco in ruhelage nicht belastet ist. Gruß Tobias
Gast
#2081345
Sollte es vielleicht in etwa so aussehen?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
Gast
#2081347
Korrektur...
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
Schreib dir erstmal auf, was das Programm machen soll. Wenn du das gemacht hast, kannst du es programmieren. ABER vorher solltest du dir das hier zu gemüte führen und auch verstehen. -> http://www.rn-wissen.de/index.php/Bascom_und_Timer Damit lässt sich das viel eleganter, effizienter und resourcen schonender machen. Hier mal ein paar denk anstöße 1) Warten bis der Interrupt kommt 2) In die ISR springen 3) Sekunden um 1 erhöhen 4) Prüfen ob 3600 Sekunden erreicht sind -> JA: Stunden um 1 erhöhen, Sekunden auf 0 setzen -> NEIN: Nichts tun 5) Prüfen ob 24 Stunden erreicht sind -> JA: Prüfen ob ein Merker gesetzt wurde -> JA: Servo Stellen, 2 Minuten warten(?), Merker zurücksetzen, Servo in ruhestellung -> NEIN: Merker setzen -> NEIN: Nichts tun Das sollte es doch sein oder? Gruß Tobias
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.