Sehr gut ;-)
Druckbare Version
@Searcher:
Hmm, als Output konfiguriert hatte ich bis jetzt nicht weil, da dachte ich der Pulseout Befehl ändert den Pin selbständig...da die analogen Servos doch mit dem Programm so laufen.
@MagicWSmoke:
Wie errechnest Du die Wiederholrate?
Ich probiere jetzt nochmal ein wait von 500µs.
EDIT: keine Änderung des Problems bei DDRB.7 = 1 :(
Aber ich habe die Dioden auch noch nicht fertig...
Die Wiederholrate ist bei Deinem vereinfachten Code: 1/(Pulseoutzeit + Wartezeit)
Tatsächlich hab' ich's zur Prüfung simuliert, Haltepunkt auf Pulseout, verbrauchte Prozessortakte geteilt durch Hauptclock ergibt Wiederholrate.
Damit Du auf die üblichen ~50Hz kommst, solltest Du Waitms 18 verwenden.
Ja, hatte ich auch dran gedacht. Eine Erklärung wg. der analogen Servos könnte sein, daß der Pulsout trotzdem das PORTB Register toggelt, obwohl das über DDRB ein Input ist. Dann würde eine 1 in PORTB den internen Pullup einschalten und den Pin so nach high ziehen, daß das ausreicht. :confused:
Gruß
Searcher
Leider keine Änderung mit den Dioden. Davon habe ich nun 18(!!)St in Reihe gelötet. Damit habe ich von 11.5V auf ca 6,6V reduziert
Aber auch das kann es nicht sein.
PortB.7 ist ein Output und PortB.7 = 0 - schreibe ich dort eine 1 für High ein (PullUp schaltet der ja nicht mehr bei Output), fährt der Servo immer nur auf (über) minium gegen den Anschlag :( Vermutlich weil der Servo dann quasi 100% PWM "denkt"
Ich probiere zwischendurch immer mal wieder den digitalen Servo am Empfänger ganz normal mit Fernbedienung aus, um gegen zu prüfen ob ich der schon "abgeraucht" ist.
Nicht das ich das provozieren wollte, aber nur damit ich hier nicht alles durchteste und dann ist der Servo nachher schon seit drei stunden schitich.
Also wie gesagt das Programm funktioniert so, sogar mit sehr viel kürzerem wait - für analoge Servos. Benutze Bascom 2.0.7.5 nicht das es daran liegt.
Ich danke euch erstmal für die Hilfe.
Ich weiß nicht weiter.
Zeig doch bitte noch mal das aktuelle Programm.Zitat:
Ich weiß nicht weiter.
18 ist nix :D
Schau Dir mal das Datenblatt der BY 500 an, da siehst Du eine VF (Forward Voltage) bei geringer Belastung von ~0,6V, bei 18 Stück sind das 10,8V, da bleibt nichts mehr über von Deinen 11,1V.
Die Forward Voltage = Vorwärtsspannung ist diejenige, die man hier zur Reduzierung der Betriebsspannung verwenden möchte.
Ich bin mir nicht ganz sicher, wie Du auf die Idee kommst, 18 Stück davon zu verbauen, aber ich schätze Du hast ein hochohmiges Voltmeter dran gehangen und eine hohe Restspannung auf Grund des relativ hohen Sperrstromes gemessen, den diese Leistungsdioden nun mal haben.
Dieser Sperrstrom ist angegeben mit < 10µA, für ein Messgerät problemlos messbar, aber sobald eine Last drankommt, bricht diese gemessene Spannung ein.
Sobald also der Servomotor drehen möchte, sackt die Spannung definitiv auf einen unbrauchbaren Wert ein.
Nimm also 7 oder 8 Dioden, schalte die von VCC in Leitrichtung und setz' von der Kathode der letzten Diode einen Widerstand von 1kOhm nach GND rein.
Miss dann die Spannung nochmal.
Hier nochmal das Programm:
habe schon versucht den Wert den Pulsein ermittelt, direkt an Pulseout zu geben....der Gedanke lag nahe das der Servo das ggf besser verstehen kann wegen seinem internen "mega8", aber auch da keine Reaktion.Code:
$regfile = "m8adef.dat"
$crystal = 4000000
'$sim
'$baud = 19200
$hwstack = 40
$swstack = 16
$framesize = 32
Ddrb.0 = 1
'Portb.0 = 0 'system run
Portb.0 = 1
' Ddrb.7 = 1
'Portb.7 = 0
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , Rs = Portd.7
Waitms 100
Config Lcd = 20 * 4
Waitms 10
'')
Dim Rc_1 As Byte
Dim F As Single
Dim F1 As Word
'Cls
'Cursor Off
Do
Pulsein Rc_1 , Pinc , 1 , 1
Locate 1 , 1
Lcd "Servo1 = " ; Rc_1
F = Rc_1 * 11.511
'4MHz = * 11.511 ; 8MHz = * 23.022
F1 = F
Locate 2 , 1
Lcd "Servo1 = " ; F1
Pulseout Portb , 7 , F1 '1600
Waitms 10
Loop
End
@MagicWSmoke: Wenn Du weißt das dort ein mega8 drin ist, dann weißt Du möglicherweise auch mit welcher Frequenz der läuft? Ob also die Pulse genau so ermittelt werden wie ich es mit meinem mega8 mache?
Was habe ich mir nur bei den 18 Dioden gedacht...wahrscheinlich habe ich wirklich falsch gemessen :(
EDIT: Mit 7 Dioden ohne 1k = 9,38V ; mit 1k = 9,30V :-k Die Kathode war doch da wo der dicke graue strich dran ist?
Mit 9 Dioden ohne 1k = 8,78V,; mit 1k = 8,70V
Out-o-the-box würde er mit 1MHz laufen. Wenn Du da nichts per Fuse geändert hast, dann macht er das noch immer.
Ein:
dauert 6459 Takte, das entspricht bei tatsächlichen 4MHz: 6459/4000000 = ~1,6msCode:Pulseout Portb , 7 , 1600
Sollte der Prozessor-Takt dagegen bei 1MHz liegen, dann dauert das 4x so lang, das wäre weit außerhalb der zulässigen Servoparameter.
Wie ich schon sagte, wahrscheinlich hast Du den Sperr-, also Leckstrom gemessen.Zitat:
Was habe ich mir nur bei den 18 Dioden gedacht...wahrscheinlich habe ich wirklich falsch gemessen