Hallo, Ich möchte mir eine Steuerung für min 1 Servo bauen. Die Steuerung sollte außerdem auch min 2 Servo signale einlesen und auswerten. Unabhängig von den servo soll die schaltung auch noch nen ldr per adc auslesen und ggf. outs steuern Das erste Servosignal sollte mit Referenzwerten verglichen werden und bei über/unterschreiten gewisser werte sollte eien Art Notlauf Programm an den Servo gesendet werden, anasonsten wird das eingelesene Signal durchgereicht. Beim 2. Servo Signal solls so aussehen das je nach Signal ein Out geschaltet wird. An HW/Plattform möchte ich gerne Die Atmel AVR Familie verwenden(Atmega/attiny) und bestenfalls der Code in C sein. Wobei hier gilt desto kleienr desto besser :-)(mein den µc) Aufgrund dieser sachen hab nun erstmal nen paar Fragen: -Wie genau müssen die Timer für Servosignale sein. Müssen es 16-bit timer sein oder tun es auch 8 Bit timer. Benötige ich überhaupt für jedes Seervo signal nen eigenen Timer? -Hat jemand beispiel c-code speziell fürs auslesen der servo signale? Ich dnek in der nächsten Zeit werden noch mehr fragen auftauchen, aber im moment wärs das erstmal. Besten Dank im vorraus
Hi, benutz einfach die lib von Julian Mendel. Damit kannste bis zu 10 Servos ansteuern. http://derjulian.net/mikrocontroller Gruesse Dusty
Erstmal Danke für die Antwort... ich suche aber vorallendingen nen bespiel für die Servo Signalerfassung in "C"
M. H. schrieb: > nen > bespiel für die Servo Signalerfassung in "C" Lass einen Timer durchlaufen. Das Zählregister des Timers wird dann von einem Pinchange-Interrupt, steigende Flanke, ausgelesen und zwischengespeichert in eine Variable nennen wir sie mal x. Das Zählregister des Timers wird dann von einem Pinchange-Interrupt, fallende Flanke, ausgelesen und x davon abgezogen. Man erhält die Pulslänge in Timer-Counts. Überlauf des Timers macht hier nix aus(Beispielrechnung in uint16_t: 23 - 65530 ergibt eben 29, das genüger hier als Beweis, geht aber nur wenn COUNT_MAX des Timers dem INT_MAX der Variable zum rechnen entspricht). Von hier aus kann dann eine Auswertung erfolgen if(pulslaenge > 30){ tuediesunddas(); } else if(pulslaenge > 30 && pulslaenge < 100){ tuejenes(); }//usw... Um einen Servopuls auszugeben, "Waveform Generation Mode" eines Timers nutzen, die gemessene Pulslänge in die OCR-Register stecken und fertig(musst natürlich den Timer erst zurechtkonfiguruieren). mfg mf
@ Mini Float Vielen Dank für die Antwort... scheint echt plausibel zu klingen ;-). Kann man bei Steigender Flanke nicht auch das Zählregister auf 0 setzen? So würde dann kein Überlauf passieren, bzw könnte ich den dann als Fehler auswerten und ich hät direkt die passende Zeit im Timer. Reicht denn ein 8-Bit Timer dafür aus, oder brauchs ich genauer?
M. H. schrieb: > Kann man bei Steigender Flanke nicht auch das Zählregister auf 0 setzen? Könnte man, aber wenn du zwei Servosignale oder mehr auswerten möchtest, werden irgendwann die Zähler knapp. Und sooo schlimm ist eine Subtraktion ja nun nicht.
M. H. schrieb: > Reicht denn ein 8-Bit Timer dafür aus, oder brauchs ich genauer? Woher sollen das hier einer wissen. Wie genau ist dein Ausgabeservo, wie genau sind die Servoeingangssignale und wie genau muß das Signal rauskommen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.