Code:$regfile = "m8def.dat" $crystal = 4000000 Config Portb = Output Dim X As Integer Enable Interrupts Config Servos = 1 , Servo1 = Portb.4 , Reload = 10 Servo(1) = 50 Do Input , X If X = 1 Then Servo(1) = 100 Else If X = 2 Then Servo(1) = 20 Loop
Wenn der AVR eine 1 empfängt, schaltet der Servo auf stellung 100, wenn er dann aber eine 2 empfängt, tut sich nichts mehr.
Aber es ist doch eine Endlosschleife?
Das INPUT funktioniert anscheinend nur ein mal, dann geht nichts mehr.
Wie stell ich das am besten an?
Das Senden und Empfangen funktioniert einwandfrei, die 2 Taster (einmal X=1 einmal X=2) reagieren auch, aber immer nur einmal, dann ist schluss.
Muss man da timer oder Interrupts oder so verwenden? Wie macht man das?
geht da nicht noch das $baud ab, oder wie ist das defaultmässig ?
Und ohne komma beim Input ?
Edit:
Interrupts sind ja aktiviert für den Servo.
Stimmen die MHz ?
bei mir funktionierts ansonsten !
Das Komma ist gesetzt, $baud habe ich vergessen, funktioniert aber trotzdem nicht!
Quarz is ein 4MHz, Fusebits richtig gesetzt.
Wie funktioniert es bei dir?
Anfangs fährt der Servo in Stellung 50, dann wenn man einen Taster drückt, entweder auf Stellung 100 oder 20, aber dann ist schluss.
Sobald einma ein Taster gedrückt wurde, reagieren die nicht weiter!
Ich hab das RN-Meag8 Board,
da hab ichs auf PortB.4 angeschlossen, mit 7.32Mhz
Bei meinem Servo geht der Bereich von 40 bis 140,
ich hab nur die Werte geändert, aber ansonsten macht der das so wie von Dir gewünscht, bei 1 die eine, und bei 2 die andre Position, und auch hin und her usw.
Bau mal einen Print ein (irgendein Text ausgeben), um zu sehen, ob die Zeichen richtig ankommen im Terminal, dort hab ich auch gemerkt, das ich noch Deine MHz drin stehen hatte.
Liegt es vielleicht an meinem "Sender"? :
Code:$regfile = "m8def.dat" $crystal = 4000000 $baud = 9600 Config Pind.5 = Input Config Pind.6 = Input Dim X As Integer Dim Y As Integer X = 1 Y = 2 Do If Pind.5 = 0 Then Print X If Pind.6 = 0 Then Print Y Loop
Wird hier vllt. nur einmal gesendet? Wie muss der Code aussehen?
ich hab mal ein kleines Testprogramm zu positionieren des Servo gebaut:
die If-Abfrage begrenzt nur den Bereich, muss evtl. angepasst werden.
im Terminal direkt den Wert eingeben und Enter drücken, schon fährt der Servo.Code:$regfile = "m8def.dat" $crystal = 7372800 $baud = 9600 Config Portb.4 = Output Dim X As Integer Enable Interrupts Config Servos = 1 , Servo1 = Portb.4 , Reload = 10 Print "Hallo" Servo(1) = 100 Do Input X If X < 139 And X > 36 Then Servo(1) = X End If Loop End
Das "Hallo" ist zum überprüfen der Verbindung, wenn das kommt passt die Geschwindigkeit auf beiden Seiten.
Beide AVR's sind nicht mit dem PC verbunden, habe deshalb keine Möglichkeit mit dem Terminal.
Aber die 1 und die 2 kommen richtig an, und werden auch interpretiert, aber eben nur ein einziges mal.
Liegt es wiegesagt am Sender? (oben)
edit:
Es liegt bestimmt am senden.
Dein Code funktioniert, aber nachdem ein Taster gedrückt wurde, kommen wohl keine Signale mehr an.
Wie richte ich mit Bascom eine Schleife ein, die immer einen Port ausliest und entsprechend mit Print sendet.
Lesezeichen