Danke!!
dann werde ich mir mal die BASCOM-Hilfe anschauen und es mal probieren.
jon
Danke!!
dann werde ich mir mal die BASCOM-Hilfe anschauen und es mal probieren.
jon
Ich habe schon die BASCOM-Hilfe durchforstet, aber nichts gefunden
Jetzt bin ich aber auf die Idee gekommen über ein Low-Signal dem ATMega zu "sagen", dass was empfangen werden soll und er erst in eine Schleife geht, wenn das Signal wirklich anliegt.
Aber da ich diese Signalleitung auch zum Resetten (<--mit doppeltem "t"???) verwende, habe ich die Frage, wie lange ich den Reset-Pin auf low ziehen kann, ohne dass er resettet.
Ich werde gleich aber auch nochmal ins DB schauen
jon
für den empfang mit der software UART kann ich nur die version mit dem interrupt empfehlen... bin gerade an nem projekt indem ich es verwende...
hier ein kleiner auszug aus meinem code must ihn halt noch abändern für deinen prozi... wichtig ist einfach dass der port für den empfang an einem interrupt pin hängt... bei mir wird der anfang der zu empfangenen daten mit einer 1 erkannt...
Code:Open "Comb.6:9600,8,n,1" For Input As #2 Config Int0 = Falling On Int0 Int0_isr Enable Int0 Enable Interrupts do loop Int0_isr: Temp = Inkey(#2) If Temp = 1 Then Temp = 0 Servo1 = Waitkey(#2) Servo2 = Waitkey(#2) Speed = Waitkey(#2) End If Return
gruss bluesmash
Das blöde ist nur, dass bei mir schon alle Interrupt-Ports belegt sind
Sonst hätte ich es auch erst so versucht.
jon
was hast du denn alles an den interrupts? ev. könnte man ja 2 zusammenfassen... indem man 2 auf einen interrupt legt und zusätzlich die beiden signale auf je einen normalen port legt, dann in der interrupt routine die beiden ports abfragen und schauen welcher interrupt ausgelöst hat....
gruss bluesmash
@Jon
Bluesmash hat den richtigen Weg beschrieben. Du solltest es in einer ISR abfangen.
Da Du auch mit einem ATMEGA8 arbeitest, verweise ich mal zur Info auf mein ATMEGA8-Projekt mit Software + Hardware UART:
https://www.roboternetz.de/phpBB2/ze...ag.php?t=26041
Ich verwende keine Interrupts. Ich habe nur noch einen Pin frei, den habe ich jetzt mit dieser Signal-Leitung belegt.
Weshalb ich kein Interrupt verwenden kann:
1.Kein Pin frei, der Interrupt hat
2.Kann ich nicht immer einen Interrupt vertragen, da ich auch die Signale abfragen muss, die von der Fernbedienung kommen. Und wenn er mich dann bei Vorwärtsfahren unterbricht, dann kann ich nicht bremsen. Kommt also eine Kannte, habe ich ein Problem.
Ich könnte zwar den Bot stoppen, aber das möchte ich nicht.
Ich werde es jetzt so mal probieren und schauen, was herauskommt.
jon
Hallo Jon,Zitat von Jon
wie schon Bluesmash andeutete - es war nur ein guter Rat.
Wenn Du Dich mit Interrupts beschäftigst, wirst Du erkennen, das eine ISR der einzige Weg ist, um diese Unterbrechungen von INKEY/WAITKEY/GETRC5 o.ä. zu vermeiden.
Was benutzt Du für eine Fernsteuerung?
Wirklich? Der Atmega8 besitzt mind. 4 Eingänge um Level-Interrupts zu erzeugen.Zitat von Jon
Eingänge: INT0, INT1, Analog Comparator ANA_COMP und noch den Timer/Counter1 Capture Event ICP1 (TIFR.ICF1)
DieseZitat von -tomas-
![]()
Der muss aber auch mit 4µCs und über Funk kommunizieren. Da ist kaum weiterer Platz...Zitat von -tomas-
Aber ich habe es jetzt geschafft. Ich habe es hinbekommen, wenn ich mit dem Prog fertig bin, kann ich es mal auf meine Seite stellen.
jon
Zitat von Bluesmash
Hi,
wie wird das von dem anderen Controller angesteuert? Also wie sendest du die Bytes? Ich hab folgenden Code für den Servocontroller:
Und das is der Code von dem Controller, der dem Servocontroller die "Befehle" gibt:Code:$regfile = "attiny2313.dat" $crystal = 8000000 Waitms 100 Config Servos = 4 , Servo1 = Portb.0 , Servo2 = Portb.1 , Servo3 = Portb.2 , Servo4 = Portd.6 , Reload = 10 Config Portb = Output Config Portd.6 = Output Config Int0 = Falling On Int0 Int0_isr Enable Int0 Enable Interrupts Servo(1) = 100 Servo(2) = 100 Servo(3) = 100 Servo(4) = 100 Dim Temp As Byte Dim New As Bit Dim Servo_num As Byte Dim Servo_pos As Byte Open "Comd.2:9600,8,n,1" For Input As #2 Do If New = 1 Then Servo(Servo_num) = Servo_pos New = 0 End If Loop Int0_isr: Temp = Inkey(#2) If Temp = 1 Then Temp = 0 Servo_num = Waitkey(#2) Servo_pos = Waitkey(#2) New = 1 End If Return
Dadurch sollte der Servo sich immer vor und zurückdrehn. Allerdings bewegt er sich keinen Millimeter. Es muss am Soft-UART liegen, wenn ich den Servo direkt ansteuer gehts. Ich denke mal dass die "Print"-Befehle nicht in Ordnung sind.Code:$regfile = "m8def.dat" $crystal = 8000000 $baud = 9600 Waitms 100 Do Print 1 Print 1 Print 170 Wait 2 Print 1 Print 1 Print 70 Wait 2 Loop End
Kann mir jemand helfen?
MfG
Lesezeichen