PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suche Literatur für PWM-Signale mit AVR (z.B. ATMega8)



stardust19322
13.04.2014, 18:13
Hallo Community.


Ich habe mal eine gaaaanz spezielle Frage an euch und brauche eine noch speziellere Buchempfehlung:

Ich möchte mit einem Mikrocontroller Servo-Signale (1ms bis 2ms) eines Empfängers auswerten können, sodass der Controller daraufhin entsprechende Pins setzt oder gar eine PWM selbst erzeugt.
Nun habe ich bereits ein recht gutes Buch mit vielen Erläuterungen zum Thema AVR und auch die Befehle "PULSIN" und "PULSEOUT" sind dort enthalten, jedoch nur ganz kurz deklariert, ohne Anwendungsbeispiele. Und genau DAS brauche ich, entsprechende Literatur, wo solche Themen exakt abgearbeitet werden!

Der Controller soll an 2 Pins Servo-Signale unabhängig voneinander auslesen können und bei bestimmter PWM-Länge entsprechende Kanäle schalten.

Am Besten mit Anwendungsbeispielen zur Verdeutlichung.

Habt ihr da etwas für mich?


Das Buch, welches ich hier habe, ist "Programmieren der AVR RISC Mikrocontroller mit BASCOM-AVR" von Claus Kühnel.
Nur fehlt eben genau dieser Part.


Da ich bislang nur Erfahrungen im Bereich BASCOM-AVR gesammelt habe und damit auch recht gut umgehen kann, wäre ein entsprechendes Buch auch nicht verkehrt. Wenn mein Vorhaben mit BASCOM allerdings nicht mehr durchführbar sein sollte (quasi zeitgleich), würde ich mich notgedrungen auch mit C anfreunden, sofern das Buch auch entsprechenden Einsteigern Halt bietet.


Muss noch dazu sagen, dass ich nicht sofort jedes x-beliebige Buch kaufe und eher viele Antworten abwarte, auch Diskussionen eurerseits sind gern gesehen. Hintergrund ist, dass mir damals beim AVR-Einstieg die angeblich BESTEN Bücher für C präsentiert wurden, diese aber genauso viel Inhalt boten wie Toilettenpapier! Ich brauche also was anwanwendungsnahes, nichts, mit dem ich PC-Programme wie "Hallo Welt" schreiben kann.
War nicht in diesem Forum der Fall - don't panic ^^


Freue mich darum auf eure Empfehlungen. Wenn weitere Daten notwendig sein sollte - einfach fragen.

Nutze übrigens den ATMega8-16 sowie den ATTiny 45-20.


LG - Maik

Searcher
13.04.2014, 18:55
Hallo,
ich habe keine Buchempfehlung und kann mir auch nicht vorstellen, daß es eins gibt, daß genau Deinen Fall behandelt.

Die Grundlagen bzw Voraussetztungen, auf die auch die Bücher aufsetzten, stehen alle im Datenblatt zum jeweiligen Controller.

Hier wenigstens Links zu einem längeren thread zur Aufgabe. Zwei Servosignale mit einem AVR zu messen ist nicht einfach, theoretisch unmöglich, da Taktfrequenz und sequentielle Arbeitsweise Grenzen setzten. Es lief darauf hinaus, zeitkritische Programmstücke in Inline ASM zu schreiben und die PWM-Ausgabe zu beruhigen.

Anfang: https://www.roboternetz.de/community/threads/63750-Mehrere-RC-Signale-einlesen-und-mehrere-Servos-ausgeben?p=591025&viewfull=1#post591025
Auf Seite 4 lief es dann: https://www.roboternetz.de/community/threads/63750-Mehrere-RC-Signale-einlesen-und-mehrere-Servos-ausgeben?p=592016&viewfull=1#post592016

Gruß
Searcher

BMS
13.04.2014, 19:19
Hallo,
die Anwendung ist relativ speziell, ich kann mir nicht vorstellen, dass es genau dazu Literatur gibt.
Möglichkeiten der Umsetzung dafür gibt es viele, hängt auch davon ab, wie genau die Pulsdauer bestimmt werden muss und was nebenher gesteuert/berechnet etc. werden muss.
Denkbar z.B.:
- Polling: im Hauptprogramm ständig die PWM-Pins abfragen und einen Zähler in SW hochzählen lassen solange Pin auf High ist
- Timer/Counter/Capture mit externem Pin gesteuert
- Interrupts auf steigende/fallende Flanke des PWM-Signals ...
Natürlich hat jeder Ansatz seine Vor- und Nachteile. Was sich eignet, hängt stark davon ab, was nebenher laufen muss und welche Genauigkeit der Pulsbreitenbestimmung erforderlich ist. Muss die Pulslänge aufs Prozent genau bestimmt werden oder reicht die Bestimmung von "linker Anschlag/Mitte/rechter Anschlag" o.ä. ? Was genau soll der Controller später schalten?
Grüße, Bernhard

stardust19322
13.04.2014, 20:39
Hallo und danke schon einmal für die ersten Antworten.

Die Pulsweiten-Auflösung sollte ca. 0,01ms genau sein (also von 1ms bis 2ms) - das reicht vollkommen aus. Dabei soll eine Mittelstellung erkannt werden sowie in eine beide Richtungen die Endposition des Sticks der Fernsteuerung.
Hintergrund:
Ich möchte damit den Gas-Kanal sowie den Lenkkanal an einem RC-Fahrzeug auswerten. Am Gaskanal soll der Controller erkennen können, wenn gebremst wird, also der Stick zurück gezogen wird. Sobald er negativ die Neutral-Stellung verlässt, sollen die gedimmten Rückleuchten (elektrisch gedimmt via Vorwiderstand) als Bremslicht voll aufleuchten. Als weiterführende "Spinnerei" (sage ich mal) will ich dem Controller dann noch beibringen können, wann eine Rückfahrleuchte angehen soll (z.B. von Vollgas innerhalb 1s auf Bremse gezogen wird, dann erst Neutral abwarten, 2s warten und bei erneutem Rückwärts dann erst Pin für Rückfahrleuchten setzen.
Der 2te Kanal sollte die Lenkung abfragen und ab einem bestimmten Lenkeinschlag Blinker setzen. Die Auflösung hier bräuchte nur maximal 0,2ms genau sein.

Ansonsten müsste ich für beide Kanäle einen extra Controller verwenden, z.B. ATTiny, die die Eingangssignale auswerten und anschließend an einen ATMega übergeben. Wäre aber Verschwendung...


LG - Maik

hegewald
03.05.2014, 08:24
ich besitze ein Superbuch von Günter Schmitt

Verlag Oldenburg.de (ISBN 978-3-486-58988-7)
Ich meine es auch bei Amazon gesehen zu haben.

Grüße

Rolf

Besserwessi
03.05.2014, 10:26
Direkte Bücher zu so speziellen Aufgaben wird man nicht finden. Da wird man i.A. 2 Quellen ("Bücher") brauchen: einmal etwas zur Programmiersprache. Das man mit C nicht gleich klarkommt ist auch nicht ungewöhnlich. Welche Art Buch man bevorzugt ist auch ganz unterschiedlich - ich mag z.B. solche mit viel Inhalt und wenig Buchstaben, d.h. kurz und knapp aber vollständig. Andere bevorzugen eher viele ausführliche Beispiele und ein Schrittweise Einführung.

Der 2. Punkt ist die Erklärung zur Hardware - das ist in aller Regel das Datenblatt zum µC. Auch die Applikation Notes von Atmel sind ggf. hilfreich. Allerdings ist das beides in Englisch.

Konkret zum Problem ist das noch relativ gut machbar: sehr genau mit einem größeren µC, der 2 ICP Kanäle bietet. Man kann es auch mit Interrupts machen. Nur wenn die Servo-pulse gleichzeitig kommen (bei einer digitalen Fernsteuerung möglich, bei den alten analogen passiert das nicht), kann die Ausführungsgeschwindigkeit kritisch werden - man könnte das aber umgehen, indem man abwechselnd den einen oder anderen Kanal misst. Die Spezielle BASCOM funktionen Pulsein ist in dem Fall eher nicht mehr so geeignet - da muss man dann schon selber Programmieren.