INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
RC-Signal mit Attiny85 einlesen
07.12.2020, 21:09
Beitrag #1
RC-Signal mit Attiny85 einlesen
Hallo zusammen!
Mein Name ist Christian und ich komme aus Niederösterreich. Ich habe schon einiges mit dem Arduino gemacht nur mein aktuelles Projekt bringt mich zur Verzweiflung. Ich möche für meine ferngesteuerte Boeing die Beleuchtung über die Fernsteuerung ein- und ausschalten können. Senderseitig habe ich alle Funktionen auf einen Kanal gebracht und lese diesen Kanal dann im Flieger mit dem Tiny85 ein. An die 4 Ausgänge kommt ein Treiber und dahinter dann die LED´s des Flugzeugs. Leider klappt das Ganze noch nicht so wie ich mir das vorstelle, die LED´s leuchten nicht so wie sie sollten (statt Ausgang 1 und 2 leuchten alle, bei anderen Schalterstellungen ist es richtig). Dank dem Beitrag Serial Monitor als Debughilfe für den ATtiny85 und andere ATMEL-Mikrocontroller von ardu_arne hier in diesem Forum kann ich die eingelesenen Werte über den UNO auslesen. Diese habe ich in meinen Code eingetragen. Leider stimmt die Ausgabe dann immer noch nicht, es werden immer wieder Ausgänge aktiv die aus bleiben sollten. Der Tiny85 ist auf 8MHz intern eingestellt, BLINK funktioniert richtig. Hat vielleicht jemand eine Idee was da im Tiny nicht richtig läuft, dass die Werte scheinbar falsch verarbeitet werden?
Das ist der Code den ich aktuell verwende:
Code:
//          _____
//   nc - 1|     | 8 5V
// out1 - 2|     | 7 receiver in
// out2 - 3|     | 6 out4
//  GND - 4|     | 5 out3
//
// out1 = positionlights = p
// out2 = acl = a
// out3 = beacon = b
// out4 = cabinlight = c

int out1 = 3;
int out2 = 4;
int out3 = 0;
int out4 = 1;
int in = 2;
void setup() {
  noInterrupts();
  pinMode(out1, OUTPUT);
  pinMode(out2, OUTPUT);
  pinMode(out3, OUTPUT);
  pinMode(out4, OUTPUT);
  pinMode(in, INPUT);

}

void loop() {

  switch (pulseIn(in, HIGH))

  {
    case 1690 ... 2000: //p0 a0 b0 c0 1638-1644
      digitalWrite(out1, LOW);
      digitalWrite(out2, LOW);
      digitalWrite(out3, LOW);
      digitalWrite(out4, LOW);
      break;
    case 1600 ... 1689: //p0 a0 b0 c1 1616-1622
      digitalWrite(out1, LOW);
      digitalWrite(out2, LOW);
      digitalWrite(out3, LOW);
      digitalWrite(out4, HIGH);
      break;
    case 1531 ... 1599: //p1 a0 b0 c0 1572-1578
      digitalWrite(out1, HIGH);
      digitalWrite(out2, LOW);
      digitalWrite(out3, LOW);
      digitalWrite(out4, LOW);
      break;
    case 1466 ... 1530: //p1 a0 b0 c1 1482-1488
      digitalWrite(out1, HIGH);
      digitalWrite(out2, LOW);
      digitalWrite(out3, LOW);
      digitalWrite(out4, HIGH);
      break;
    case 1411 ... 1465: //p1 a1 b0 c0 1438-1444
      digitalWrite(out1, HIGH);
      digitalWrite(out2, HIGH);
      digitalWrite(out3, LOW);
      digitalWrite(out4, LOW);
      break;
    case 1366 ... 1410: //p1 a1 b1 c0 1374-1380
      digitalWrite(out1, HIGH);
      digitalWrite(out2, HIGH);
      digitalWrite(out3, HIGH);
      digitalWrite(out4, LOW);
      break;
    case 1331 ... 1365: //p1 a1 b0 c1 1348-1352
      digitalWrite(out1, HIGH);
      digitalWrite(out2, HIGH);
      digitalWrite(out3, LOW);
      digitalWrite(out4, HIGH);
      break;

    case 1285 ... 1330: //p1 a1 b1 c1 1304-1310
      digitalWrite(out1, HIGH);
      digitalWrite(out2, HIGH);
      digitalWrite(out3, HIGH);
      digitalWrite(out4, HIGH);
      break;

    default:
      digitalWrite(out1, LOW);
      digitalWrite(out2, LOW);
      digitalWrite(out3, LOW);
      digitalWrite(out4, LOW);
  }
}

LG Christian
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.12.2020, 21:56 (Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2020 22:07 von hotsystems.)
Beitrag #2
RE: RC-Signal mit Attiny85 einlesen
Warum verwendest du nicht die passende Library IRRemote, mit der das sicher funktioniert. Ich habe damit auch schon Projekte mit dem ATtiny85 aufgebaut.
Das solltest du mal probieren.

Oder ist es gar ein komplett anderes Signal ? Das mit IR war mal geraten, da du es uns noch nicht verraten hast.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2020, 01:29 (Dieser Beitrag wurde zuletzt bearbeitet: 08.12.2020 15:15 von Bitklopfer.)
Beitrag #3
RE: RC-Signal mit Attiny85 einlesen
(07.12.2020 21:09)chcs schrieb:  Hallo zusammen!
Mein Name ist Christian und ich komme aus Niederösterreich. Ich habe schon einiges mit dem Arduino gemacht nur mein aktuelles Projekt bringt mich zur Verzweiflung. Ich möche für meine ferngesteuerte Boeing die Beleuchtung über die Fernsteuerung ein- und ausschalten können. Senderseitig habe ich alle Funktionen auf einen Kanal gebracht und lese diesen Kanal dann im Flieger mit dem Tiny85 ein. An die 4 Ausgänge kommt ein Treiber und dahinter dann die LED´s des Flugzeugs. Leider klappt das Ganze noch nicht so wie ich mir das vorstelle, die LED´s leuchten nicht so wie sie sollten (statt Ausgang 1 und 2 leuchten alle, bei anderen Schalterstellungen ist es richtig). Dank dem Beitrag Serial Monitor als Debughilfe für den ATtiny85 und andere ATMEL-Mikrocontroller von ardu_arne hier in diesem Forum kann ich die eingelesenen Werte über den UNO auslesen. Diese habe ich in meinen Code eingetragen. Leider stimmt die Ausgabe dann immer noch nicht, es werden immer wieder Ausgänge aktiv die aus bleiben sollten. Der Tiny85 ist auf 8MHz intern eingestellt, BLINK funktioniert richtig. Hat vielleicht jemand eine Idee was da im Tiny nicht richtig läuft, dass die Werte scheinbar falsch verarbeitet werden?
....
LG Christian

Hallo,
was mir in deinem Sketch auffällt ist das du die Schaltschwellen auf die uS genau aufgeteilt hast. Das führt dann dazu das wenn dein Fernsteuersignal gerade auf der Grenze steht der Switch-Case mal dahin und mal dahin springt. Hier wäre ein Abstand von sagen wir mal 50uS schick um eine Schalthysteres zu bewirken. Des weiteren würde ich dir empfehlen den alles aus Abschnitt nicht als default zu programmieren sondern für einen definierten Wertebereich wie 800 ... 1200 dann werden auch z.B. erkannte Impulse die kürzer als 800uS sind weggebügelt.
Zudem empfehle ich beim pulseIn Befehl den Timeout auf z.B. 2500uS zu setzen um längere Impulse auch zu eliminieren. Auch kann man noch das Impulsabfrageergebnis per if Abfrage auf einen zugelassenen Wertebereich eingrenzen und behandeln.
Wenn das noch nichts nützt dann kann man noch 5 ... 10 Impulse aufaddieren und dann wieder durch die Anzahl der erfassten Impulse teilen und damit dann erst zum Switch Case zulassen....damit wären dann Ausreiser bei der Messung gedämpft.
Und irgendwo habe ich mal gelesen das die Auflösung von pulseIn nur 4uS beträgt...also hier uS genau zu entscheiden wo es langgeht taugt da auch nicht viel.
Ahja...um Störungen auf der Signalleitung zu dämpfen könnte auch ein Widerstand von sagen wir mal 2,2K bis 5,6K gegen GND auch noch was helfen. Dies könnte man noch mit Kondensatoren zwischen dem Widerstand und dem Tinyport gegen GND optimieren...aber da anzufangen mit pF Kondensatoren wird dann müßig.
Denke mal du hast nun einiges zu tun um meine Betrachtungen umzusetzen.
lgbk

@hotsystem
...ich weiß jetzt nicht welche Art von Signal bei der IR-Remote unterwegs sind. Aber bei einer Fernsteuerung ist es ein einfaches Pulsbreiten Modulierter Impuls von 1 bis 2mS Länge...typischerweise geben die RC-Hersteller einen kleineren Bereich an wie z.B. 1,1mS bis 1,85mS und 1,55mS als Mittelstellung der dann alle 20mS wiederholt wird. Wenn dann wiederum Leute das mit der Arduino PWM generieren wollen krieg ich nen Schreikrampf weil mit 8 Bit ist das nichts brauchbares mehr...


An alle Neuankömmlinge hier, wenn ihr Code(Sketch) hier posten wollte dann liest euch bitte diese Anleitung durch.

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2020, 08:03
Beitrag #4
RE: RC-Signal mit Attiny85 einlesen
Hallo,

@Hotsystems,
wie BK schon beschrieben hat ; Ein RC Signal ist einfach Ausgedrückt ein Servo Signal.

@Bitklopfer,
Das mit den 4µs müßte richtig sein.
Dein Vorschlag mit der Hysterese und der Dämpfung ist ein sehr guter Ansatz.

@Cristian,
Im Grunde ist das ja ein Multiswitch, so wie von Robbe oder Graupner.
Nur eben mit 4 statt 8 Kanälen.
Da gab es im Schiffsmodell Forum mal einen schönen Beitrag mit dem Attiny85 selbstbau.
Alternativ währen hier auch die MoBaTools von Microbahner ideal.
Nur weiß ich jetzt nicht ob die auf dem Attiny85 noch laufen.

Gruß, Markus

Immer in Stress
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2020, 08:51
Beitrag #5
RE: RC-Signal mit Attiny85 einlesen
Hallo und danke für eure Berichtigungen.
Für mich ist ein RC-Signal erstmal nur ein "Remote-Control" Signal, was vieles sein kann. Und so kann ein Fragesteller das auch gern etwas genauer angeben.
Deswegen ja auch nur geraten.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Attiny85 Probleme mit Schleifen und Serial-Ausgabe lucki.luke 9 639 07.03.2021 20:55
Letzter Beitrag: Tommy56
  Kamera Blitz Signal für Steppermotor Stephan123 29 1.746 27.02.2021 13:57
Letzter Beitrag: Stephan123
  Sensor-Adressdaten mittels json von Webserver einlesen und hinterlegen MLuhmann 7 578 22.02.2021 18:56
Letzter Beitrag: Tommy56
  zweiten Wert über Serial einlesen vlakvark 7 607 14.12.2020 21:06
Letzter Beitrag: Tommy56
  Schwimmerschalter einlesen (Wasserkraftwerkmodell) bobby85cr 29 2.493 18.09.2020 07:56
Letzter Beitrag: hotsystems
  Serielle Werte in String einlesen um damit zu rechnen 425t 2 888 26.08.2020 13:19
Letzter Beitrag: 425t
  8 Bit als Variable Parallel einlesen Holzauge 4 1.960 24.03.2020 20:18
Letzter Beitrag: Holzauge
  ATTiny85 sleep time hYtas 7 1.354 22.01.2020 15:26
Letzter Beitrag: hYtas
  Programm läuft auf UNO aber nicht auf ATTINY85 Diwo13 55 7.624 17.12.2019 17:45
Letzter Beitrag: Diwo13
  attiny85 und PIEZO Buzzer / Speaker Thor Wallhall 6 1.421 16.11.2019 21:14
Letzter Beitrag: Thor Wallhall

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste