Sie sind vermutlich noch nicht im Forum angemeldet - Klicken Sie hier um sich kostenlos anzumelden Impressum 
Sie können sich hier anmelden
Dieses Thema hat 12 Antworten
und wurde 1.096 mal aufgerufen
 Deltang Empfänger DSM2 & DSMX
Saichino Offline




Beiträge: 90

09.11.2020 12:42
PWM vom Deltang Rx43d-1 am ATTiny84 lesen Zitat · Antworten

Hallo ihr Mircocontroller-Helden,

Mein Problem ist irgendwie... kompliziert. Ich versuche es aber so kurz und bündig wie möglich zu beschreiben.

Ich habe ein Programm mit der Arduino Umgebung geschrieben und dann über einen Arduino Uno (als ISP genutzt) in einen ATTiny84 geladen. Das Programm soll an einem PIN des ATTiny ein Trigger-Signal wahrnehmen und dann durch verschiedene Modi schalten, welche vier LEDs am Heck eines Feuerwehr-Fahrzeugs in unterschiedlichen Sequenzen leuchten lassen.

Mein aktueller Ansatz ist, den Trigger durch eine Hebelbewegung (oder Schalter) an der Fernsteuerung (Spectrum DX9) mit der Übertragung eines proportionalen Signals im negativen Bereich (Modi rückwärts schalten) oder positiven Bereich (Modi vorwärts schalten) zu realisieren.

Ich hab mich bei der Umsetzung von einem Experiment von @Björn L (Danke dafür!) und diesem Youtube-Video inspirieren lassen:
https://www.youtube.com/watch?v=ZVCg14uSpNs

Folgende Ausschnitt meines Programms ist für meine Frage relevant:

1
2
3
4
5
6
7
8
9
10
11
 

pwmSignal = pulseIn(pwmSignalPin, HIGH); // Read the pulse of current input signal

if (pwmSignal < 1200) {
triggerCommand = -1;
} else if (pwmSignal > 1600) {
triggerCommand = 1;
} else {
triggerCommand = 0;
}
 
 



Die Werte "< 1200" für den Ausschlag des Hebels zur einen Seite und "> 1600" für den Ausschlag zur anderen Seite habe ich dem Youtube-Video entnommen. Ich bin bzgl. PWM-Signalen noch nicht wissend genug, aber ich nehmen an, dass diese Werte einem allgemeinen Standard für PWM im Zusammenhang mit Servos entsprechen.

Ich schließe nun zum Test den ATTiny84 mit dem Programm an den Deltang Rx41d-1 (P5, als Servo-Ausgang konfiguriert, dem entsprechenden Kanal der Fernsteuerung zugeordnet) an. Die Stromversorgung mit 5V kommt bei diesem Test über den Arduino Uno, welcher auch über den Serielen Monitor das PWM-Signal darstellt. In dieser Konstellation funktioniert alles gut. Die PWM-Werte liegen im erwarteten Bereich, der ATTiny84 schaltet vorwärts und rückwärts durch die Modi.

Dann nehme ich den Arduino Uno aus dem Aufbau heraus. Der ATTiny84 und der Deltang werden an einen Lipo 1S 500mAh zur Stromversorgung (ca. 4V) angeschlossen. Nun ändert sich das Verhalten des ATTiny84: Der Microcontroller verhält sich so, als ob er dauerhaft einen PWM-Wert "< 1200" am PIN wahrnimmt. Die Modi werden ohne Pause rückwärts durch geschaltet. So funktioniert die Anwendung des ATTiny84 natürlich leider nicht...

Folgendes haben ich leider ohne Erfolg ausprobiert:
- einen anderen Lipo 1S
- einen anderen Deltang Rx43d-1
- gleichen Aufbau mit Lipo am P6 des Deltang (statt P5)
- Servo am P5 angelötet - Servo funktioniert wie gewohnt

Und - ich habe den Deltang an den Lipo angeschlossen. Den Ausgang P5 hab ich an einen Input des Arduino Uno (eigene 5V-Stromversorgung über USB) gelötet und mit der Funktion pulseIn() das gesendete PWM-Signal ausgelesen. Am Serial Monitor werden mir dann plötzlich Werte zwischen 10000 und 11000 ausgegeben. Allerdings sind auch immer wieder mal Werte von 0 oder 900 oder dazwischen dabei, also hoch dynamisch. Interessanterweise haben die Hebelbewegungen an der Fernsteuerung nun auch keinen Einfluss mehr auf die PWM-Werte.




Hat irgendjemand Erfahrung mit dem Auslesen von Signalen vom Deltang an einem ATTiny84? Ich habe mich bisher nicht in BASCOM eingearbeitet, was ja viele hier im Forum nutzen, sondern wollte das möglichst mit der Ardunio Umgebung machen.
Ein anderer Ansatz wäre die P5 vom Deltang als On/Off-Schalter zu konfigurieren und am ATTiny84 dann nur einen Schaltimpuls zu prüfen. Das habe ich aber noch nicht ausprobiert.

Lieben Dank und Grüße,
Daniel


Selbstfeiermeister Offline




Beiträge: 1.814

09.11.2020 13:11
#2 RE: PWM vom Deltang Rx43d-1 am ATTiny84 lesen Zitat · Antworten

Pullup-Widerstand vergessen?

Gruß
Sebastian

https://www.shapeways.com/shops/sebastians-shapeways-shop


Saichino Offline




Beiträge: 90

09.11.2020 14:00
#3 RE: PWM vom Deltang Rx43d-1 am ATTiny84 lesen Zitat · Antworten

Hm, guter Punkt. Einen Pull-Up Widerstand habe ich definitiv nicht eingebaut.
Das versuche ich dann mal.

DANKE, Sebastian!

Ich hatte bisher den Sinn einen Pull-Up Widerstands nicht ganz verstanden - ist aber recht sinnvoll, wenn man sich damit mal beschäftigt.

Frage: Welchen Einfluss hat denn der Pull-Up auf die Pulsweitenmodulation?

Danke und Gruß,
Daniel


Björn L Offline




Beiträge: 460

09.11.2020 14:20
#4 RE: PWM vom Deltang Rx43d-1 am ATTiny84 lesen Zitat · Antworten

Hallo Daniel,
an welchem Fuß des Attiny84 hast du denn die Signalleitung angelötet?
PWM Ausgänge gibt es nur an Anschluss 5,6,7 und 8.

ATtiny44-84.png - Bild entfernt (keine Rechte)

----------------------------------------------------
Viele Grüße aus dem Norden

Björn

https://www.youtube.com/channel/UCS-QU-plI0K0gqP8ssFMyJA


Saichino Offline




Beiträge: 90

09.11.2020 15:21
#5 RE: PWM vom Deltang Rx43d-1 am ATTiny84 lesen Zitat · Antworten

Hallo Björn,

ich habe irgendwo gelesen (finde den Link leider nicht mehr), dass der ATTiny84 auf jedem INPUT/OUTPUT Pin ein PWM-Signal lesen, aber eben nur auf den Pins 5, 6, 7, 8 auch senden kann.
Für diese Theorie würde ja auch sprechen, dass die Funktion voll gegeben ist, wenn ATTiny und Deltang die 5V gemeinsam vom Arduino Uno als Stromquelle beziehen...

Aber ausprobieren werde ich das. Danke.


Selbstfeiermeister Offline




Beiträge: 1.814

09.11.2020 15:28
#6 RE: PWM vom Deltang Rx43d-1 am ATTiny84 lesen Zitat · Antworten

@Björn
Er ließt doch nur das PWM-Signal vom Deltang. Also hat er sicher Pin13/PA0 für den externen Interrupt verwendet.

@Daniel
Ich kann mir eigentlich nur vorstellen, dass vielleicht das Signal vom Deltang nicht schnell genug den minimalen Highwert erreicht, weil keine Pullup-Widerstände fur den Eingangspin gesetzt wurden.
Statt den Highwert würde ich aber lieber die steigende Flanke als Trigger nehmen.

Gruß
Sebastian

https://www.shapeways.com/shops/sebastians-shapeways-shop


Saichino Offline




Beiträge: 90

09.11.2020 15:52
#7 RE: PWM vom Deltang Rx43d-1 am ATTiny84 lesen Zitat · Antworten

Genau richtig. Der Pin 13 / PA0 ist mein Input-Pin vom Deltang kommend - aber tatsächlich ohne den Pull-Up Widerstand.

Den Hinweis mit der steigenden Flanke verstehe ich leider noch nicht, hast Du dazu Lektüre oder einen anderen Beitrag im Kopf, mit dem ich mich da annähern kann?

Wie immer - vielen Dank!


Otton Offline




Beiträge: 50

09.11.2020 16:33
#8 RE: PWM vom Deltang Rx43d-1 am ATTiny84 lesen Zitat · Antworten

Zitat von Saichino im Beitrag #1


Und - ich habe den Deltang an den Lipo angeschlossen. Den Ausgang P5 hab ich an einen Input des Arduino Uno (eigene 5V-Stromversorgung über USB) gelötet und mit der Funktion pulseIn() das gesendete PWM-Signal ausgelesen. Am Serial Monitor werden mir dann plötzlich Werte zwischen 10000 und 11000 ausgegeben. Allerdings sind auch immer wieder mal Werte von 0 oder 900 oder dazwischen dabei, also hoch dynamisch. Interessanterweise haben die Hebelbewegungen an der Fernsteuerung nun auch keinen Einfluss mehr auf die PWM-Werte.







Hallo. Ich denke, hier war es notwendig, ein Allgemeines minus zu machen.

Переводчик не всегда передает суть!


Saichino findet das Top
Saichino Offline




Beiträge: 90

10.11.2020 20:00
#9 RE: PWM vom Deltang Rx43d-1 am ATTiny84 lesen Zitat · Antworten

Meine Herren, der Pulldown-Widerstand brachte die Lösung. Ich habe einen 10k Ohm Widerstand zwischen den Pin13/PA0 und Masse geschaltet.

Ich bin überglücklich und der Selbstfeiermeister hat erneut einen Grund sich zu feiern - ich feiere Dich auf jeden Fall!

Danke und viele Grüße,
Daniel


Folgende Mitglieder finden das Top: Theoretiker und Skippy
Selbstfeiermeister Offline




Beiträge: 1.814

10.11.2020 20:19
#10 RE: PWM vom Deltang Rx43d-1 am ATTiny84 lesen Zitat · Antworten

Ich hätte zwar vermutet, dass es eher in die andere Richtung fehlt, aber wenn es so funktioniert: Bitteschön

Gruß
Sebastian

https://www.shapeways.com/shops/sebastians-shapeways-shop


Saichino Offline




Beiträge: 90

12.11.2020 08:52
#11 RE: PWM vom Deltang Rx43d-1 am ATTiny84 lesen Zitat · Antworten

Ich wäre noch neugierig auf den Ansatz auf die steigende Flanke als Trigger zu gehen. Wie würde sich das denn z.B. in Code umsetzen lassen?

Danke und Gruß,
Daniel


Selbstfeiermeister Offline




Beiträge: 1.814

12.11.2020 11:04
#12 RE: PWM vom Deltang Rx43d-1 am ATTiny84 lesen Zitat · Antworten

Das steht eigentlich alles in der Dokumentation (Datenblatt) vom ATtiny. Schau mal in Kapitel 11 (External Interrupts) 2. Absatz.

Gruß
Sebastian

https://www.shapeways.com/shops/sebastians-shapeways-shop


derniwi Offline



Beiträge: 455

13.11.2020 20:30
#13 RE: PWM vom Deltang Rx43d-1 am ATTiny84 lesen Zitat · Antworten

Hallo,

evtl. musst Du noch prüfen, ob Werte unterhalb bzw. überhalb eines bestimmten Wertes ignoriert werden. Ich habe auch vor einiger Zeit mal etwas mit ATTiny85 angefangen, mangels Zeit liegt das Projekt aber still. Das Problem in Kürze: der Prozessor kann nur mit 8-Bit-Werten intern umgehen, für Zeitwerte über 255 braucht man aber 16 Bit oder noch mehr. Für die Pulsezeiten von 1500 (für uns hier eigentlich der Bereich zwischen 900 und 2100) kann es bei den Timern theoretisch und auch praktisch Werte geben, die überhaupt nicht in diesen Puls passen, weil ein Interrupt genau in eine Berechnung reinhaut. Dann muss man sich Gedanken machen, was solche Werte auslösen kann, in den meisten Fällen wäre es sinnvoll, einzelne Ausreisser zu ignorieren. Kommen mehrere in Folge, dann ist etwas faul. Daher würde ich zum Test mal etwas programmieren, wenn der Wert unter 900 liegen (dann z.B. nur eine LED dauerhaft an für 5 Sekunden oder so) oder wenn der Wert über 2100 liegt (dann eine andere LED dauerhaft für s Sekunden an). Und dann mit der Funke oder einem Servotester ein wenig spielen. Wenn nach mehreren Minuten keine LED dauerhaft an war, ist die Umsetzung des Compilers und des Codes wohl gut gelöst. Bleibt eine LED an, solltest Du die Ausnahmen integrieren.

Gruß
Nils


 Sprung  

disconnected Mikromodell-Chat Mitglieder Online 2
Xobor Xobor Community Software
Datenschutz