Hallo,
ich habe ein kleines Programm mit hilfe dieses Forums Geschrieben. Mit
diesen Code ist es möglich die Position eines Servos abzufragen. Das
klappt auch, aber ich muss leider die Position von 3 Servos und nicht
nur von einen abfragen, nur habe ich keine Idee wie ich das anstellen
könnte.
1) Versuch
Alle Drei Servo Leitungen an den INT0 Port anschließen ( es war kein
Sinvolles Signal auszumachen )
2) Idee
Jeden Servo an einen extra INT Port, Problem dabei ist das man dann auch
3 Timer benötigen würde, ich brauche die anderen beiden aber leider für
den restlichen Programmablauf und kann sie deswegen nicht dafür
benutzen.
Aktuell würde ich das ganze nur Lösen indem ich 3 Atmegas benutze, das
ist aber leider sehr unwirtschaftlich und benötigt leider auch zuviel
Platz :(
habt ihr vielleicht noch eine idee?
1 | 'Konfiguration für Atmega8 mit 1 Mhz
|
2 | $regfile "m8def.dat"
|
3 | $crystal = 1000000
|
4 |
|
5 | 'Konfiguration für Das Empfangen des Servo Signal's, Angeschlossen an Port D2 abgefragt mit Timer1
|
6 | Config Portd.2 = Input
|
7 | Config Timer1 = Timer , Prescale = 1
|
8 | Config Int0 = Change
|
9 | Dim Reading As Bit
|
10 | Dim Servogeschw As Word
|
11 | Dim Error As Bit
|
12 | On Int0 Rc_read
|
13 | On Timer1 Rc_error
|
14 | Enable Timer1
|
15 | Stop Timer1
|
16 | Enable Int0
|
17 | Enable Interrupts
|
18 |
|
19 | Do
|
20 |
|
21 | If Reading = 0 Then
|
22 | Print "Servo: " ; Servogeschw
|
23 | End If
|
24 |
|
25 | Loop
|
26 |
|
27 |
|
28 |
|
29 |
|
30 | Rc_read:
|
31 | If Reading = 0 Then
|
32 | Start Timer1
|
33 | Reading = 1
|
34 | Else
|
35 | Stop Timer1
|
36 | Servogeschw = Timer1
|
37 | Timer1 = 0
|
38 | Reading = 0
|
39 | End If
|
40 | Error = 0
|
41 | Return
|
42 | Rc_error:
|
43 | Error = 1
|
44 | Reading = 0
|
45 | Stop Timer1
|
46 | Servogeschw = 6300
|
47 | Return
|