Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen
Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.
Hinweis kann nach Kenntnisnahme deaktiviert werden!
Hallo, Fernsteuerimpulse (800ms bis 2000ms) sollen in Spannungswerte 0 bis 5V ausgegeben werden und ich möchte einen Attiny13 benutzen.
Zur Zeit habe ich einen blackout. Kann mir da jemand bitte helfen ?
0..5V geht mit Pulsweitenmodulation samt einem RC-Glied. Jetzt musst du halt die Pulslängen messen und in den Wertebereich deiner PWM bringen. 800ms ->0, 2000ms ->255. Sollte mit einer Geradenformel gehen pwm=x*Pulslänge +y. Wobei dann die Pulslänge der Zählerstand eines timers ist.
Dann hast du den Pulswert des RC-Signals in einer Variable vorliegen?
Zeig doch mal bitte dein Programm, damit ich nicht alles nachfragen muss.
Prinzipiell musst du jetzt einfach von dem Pulswert einen Offset abziehen und den Rest mit einem Faktor multiplizieren, um von 5-10% auf 0-100% zu kommen.
Wird interessant, das mit einem 8-bit timer zu machen. Pwm ist ja klar, jetzt käme noch die Pulslängenmessung mit dem frei laufenden timer dazu.
Was wird denn mit den 0..5V betrieben? Led? Motor?
ahh, ok, mit Pulsein.
Das ist leider etwas ungenau, weil sich nicht vorraussagen lässt, welchen Wert Pulsein genau annimmt.
Der Sollwert von Pulsein sollte zwischen 100 und 200 liegen.
Tatsächlich (und nach meiner Erfahrung) liegt er etwas darunter, so 60 bis 150
Ich würde das mal so probieren:
Systemtakt 8MHz
fast pwm einrichten mit prescale 8. Das geht meines Wissens nur durch setzen von Registern, der Befehl config timer0=pwm macht das glaub' ich nicht. Das gibt eine PWM-Frequenz von knapp 4 kHz. Ein Motor würde pfeifen, bei einer Led wär's ok.
Jetzt läuft der timer0 mit 1 MHz durch, bei Überlauf startet er wieder bei 0. Mit einem interrupt bei Überlauf wird ein Überlaufzähler incrementiert.
Der pin Int0 wird so configuriert, dass bei change eine interrupt-Routine angesprungen wird.
In der wird der Pegel vom pin int0 abgefragt und entweder wird der aktuelle timer0 Stand gemerkt und der Überlaufzähler auf 0 gesetzt (Beginn der Messung) oder der aktuelle Stand wird mit dem vorher gemerkten Stand des timer0 zur Differenz verrechnet und der Überlaufzähler ausgelesen.
In der main wird daraus die Pulslänge errechnet (1 tic=0,001msec) und daraus der pwm-Wert.
Und so geht's dahin.
Edit: 8MHz ist natürlich Quatsch, 9,6MHz wäre der richtige
Dann ist die Fernsteuerung keine Taschenlampe? Und das m ein µ . Dann sollte es gehen.
Ein Fernsteuerungsprotokoll das verschiedene Pulslängen hat? -Eigenkonstruktion?
Das sind doch die Pulslängen für Modellbauservos. Solche Pulse kommen alle 10msec (oder sind es 20msec?) aus dem Fernsteuerempfänger raus. So ganz grob beschrieben. Jetzt will halt der Fanpost2010 statt einem Servo einen Motor mit variabler Geschwindigkeit steuern.
leider hältst Du Dich mit Details zu Deinem Projekt etwas zurück, sodass es nicht ganz einfach ist, gezielt zu antworten. Wenn Du RC-Signale hast und "nur" einen (Gleichstrom-) Getriebemotor damit steuern möchtest, dann würde doch ein einfacher Fahrtregler für Bürstenmotoren reichen.
Du musst lediglich darauf achten, dass er auch mit 5 Volt arbeitet und (je nach Deinem Anwendungszweck) nur vorwärts oder vorwärts und rückwärts laufen kann. Wenn Du die vorhandenen RC-Signale vorher noch bearbeiten möchtest, dann einfach Deinen Attiny zwischen Empfänger und Regler klemmen und mit dem Programm von Michael das RC-Signal nach belieben verändern. Brushed_ESC.jpg
@tschoeatsch
Standart sind ca 20ms, aber viele Hersteller bieten mittlerweile die Möglichkeit, die Wiederholungsfrequenz auf bis zu 6-8ms zu reduzieren. Die günstigen Standartservos mögen dass aber gar nicht