0

Anzeige | ||
![]() |
||
Hallo Michael,
Danke, das Du Dich der Sache annimmst.
GR-12L = S1012
Funduino Mega 2560
Die Platinen liegen nebeneinander auf der Werkbank. GR-12L / Spannungsregler 5V / Steckbrett / Arduino verbunden mit den Steckbrettlitzen
GR-12L mit Graupner-Litze auf Steckbrett.
Wo kann ich den Firmwarestand vom GR-12 finden?
Ist das bei den Telemetrieeinstellungen Receiver 1.92 ??
https://www.graupner.de/News/Empfaen...-Version-2a05/
und mit verdrahtung meine ich welche pins am arduino mit was am gr-12l verbunden sind
————————————————————
Je älter ich werde, desto besser war ich
Plus und minus auf Steckbrett
gelb von GR-12L Stecker 6 auf Digital 2 Arduino PWM-Leiste
ist so einer, oder: https://www.robotshop.com/media/file...0datasheet.pdf
der gelbe kommt auf rx einer seriellen schnittstelle (ist ja ein serielles protokoll, nicht pwm!) des 2650. der 2650 hat vier serielle schnittstellen. serial, serial1, serial2 und serial3. serial.begin() oeffnet die erste. die ist schlecht, weil da auch das eingebaute usb/ftdi drauf ist mit dem du wahrscheinlich das 2560 programmierst. besser eine der anderen drei seriellen schnittstellen, z.B. die zweite nehmen. dann das gelbe kabel auf rx1 (pin19) und mit serial1.begin() und serial1.xxx() arbeiten. viel erfolg.
————————————————————
Je älter ich werde, desto besser war ich
Kaum macht man's richtig - und schon gehts!!!
Vielen Dank!
Hallo Michael,
Ich habe gestern den Leseanteil in meine Motorsteuerung eingebaut. Da ergibt sich noch eine Frage:
Auf Seite2 gleich nach dem ersten Anzeigeblock stehen u.a. die Anweisungen
pulslaenge1=channel(0);
Der Compiler reklamiert das und sagt man könne das so nicht zuweisen.
exit status 1
'channel' cannot be used as a function
Warum kann ich im Anzeigeblock channel(0) anzeigen aber der Int-Variablen nicht zuweisen?
Grüße Fiete
mit eckigen Klammern sollte es klappen
Danke! Brauche wohl ne stärkere Brille!
Hallo,
Ich bin immer noch am kämpfen und heute total frustriert. Ich hatte Programm und Hardware fertig und wollte alles einbauen. Bei der letzten Prüfung auf der Werkbank liest das Board plötzlich keine Empfänger-Signale mehr. Ich dachte erst der Empfänger wäre verstorben, aber nein, der Ozi zeigt das Summensignal. Nächste Vermutung RX1 wäre tot. Aber auch mit RX2 und RX3 ohne Erfolg probiert. (Natürlich das Programm jeweils angepasst!) Dann anderes Mega-Board geholt und probiert. Gleiche Ergebnisse. Ich habe dann das von Michael geprüfte Basis-Programm geladen. Auch hier kommt nur noch NULL an. Jetzt hatte ich heute morgen die neue Ardu-Version 1.8.10 installiert. Nächste Vermutung, hat vielleicht die noch eine Macke? Also wieder zurück auf 1.8.9. Aber auch hier keine Signalauswertung. Habt Ihr noch eine Idee? Schrottet 1.8.10 wohlmöglich die RX-Eingänge????
Grüße Fiete
Jetzt hatte ich gehofft mich inzwischen etwas in "Arduino" eingearbeitet zu haben, war aber ein Trugschluss. Nachdem ich aus vorgeschilderten Gründen alles kpl neu aufgebaut hatte, funktioniert die Anzeige nicht mehr. Libary ist da und eingebunden. Was fehlt jetzt noch?
Libary.pdf
SUMD-auslesen-1.pdf
Gruß Fiete
Hallo,
ich habe weiter gesucht.
1. Frage : Ist das Signal des GR12L-SUMD in Ordnung? 2-2,5V ??
2. Frage: Ich habe einen minimal-sketch erstellt, der wenn er Signale lesen kann mit der OnBoard LED 13 kurz blinken sollte.
SUMD-1-2.pdf
Alles auf einen fabrikneuen Mega hochgeladen - geht aber nicht!
Kann mir jemand aus meinem Frust helfen?
Grüße vom Fiete
Das Problem mit der Anzeige konnte ich lösen.
Man hat im Code "lcd.begin" in "lcd.init" geändert. Sowie "lcd.backlight" zwingend eingeführt. Das muss man erst mal rausfinden.
Bleibt noch das Thema "Empfang auf RX".
Ich habe leider gerade keinen Empfänger zum Spielen da, deshalb nur Trockenübung. Was auffällt:
warum #include <wire.h>? brauchst Du für das Beispiel im pdf nicht.
--> keine includes, die Du nicht brauchst
int val = Serial2.read();
der Datentyp int ist ein 16Bit signed integer. Auch wenn die Arduino Beispiele das so machen ist es eigentlich falsch. Über die serielle Schnittstelle werden immer nur Bytes übertragen.Jedes Serial.read() liefert 8Bit.
--> besser uint8_t val = Serial2.read();
delay(50)
SUMD schickt alle 10ms einen Frame. Du stoppst mit dem Delay das Programm und verdonnerst es 50ms nichts zu tun. Nennt man busy wait. Du verpasst nach jedem ordentlich empfangenen Frame immer die nächsten 5.
--> Zeit spielt eine Rolle. Busy waits sind immer schlecht.
Formatierung
Dein Code sieht grauslig aus, ist schwer lesbar und so kaum per Braindebugger zu debuggen. Lerne Code zu strukturieren. Einrücken, Leerzeilen, Kommentare usw. Zum Anfang: Tools/Auto Format in der Arduino IDE drücken.
All das wird wahrscheinlich nicht die Ursache sein warum es nicht funktioniert. Dein Oszillogramm sieht nicht gut aus. Die Pegel sollten sauber zwischen ca. 0V und 3V liegen. So kann das nicht funktionieren. Sieht nach Last auf dem Pin aus, d.h. ich vermute einen Verdrahtungsfehler. Klemm mal das Arduino board ab und schaue Dir direkt am empfänger an, wie das dort aussieht. Kannst ja mal Detailbilder zu Deiner Verdrahtung machen.
VG Michael
————————————————————
Je älter ich werde, desto besser war ich
Guten Morgen Michael,
Danke für Deine Hinweise!! Zwei Fehler gleichzeitig können einen schon zur Verzeiflung bringen.
Ich habe parallel weitergesucht und auch den zweiten Fehler gefunden. Der Empfänger (4 Wochen alt) ist schrott. Mit einem anderen (ausgeborgten) Gr12L läuft alles planmäßig. Hier ein Bild vom korrekten Signal:
Was die Codestruktur angeht, habe ich mea culpa nur das Forumsmuster um meine Anteile erweitert. Dieses ist auch nicht mein vollständiger Sketch sondern nur eine Testversion.
Ich werde mir Deine Hinweise zu Herzen nehmen! Habe mich eh schon gewundert welche Funktion Wire.h hat.
Nur noch eine Frage: Gibt es einen Grund so einfach von "serial.begin()" zu "serial.init()" zu wechseln? Bis man auf so was kommt -------?
Grüße und Vielen Dank vom Fiete
Serial.init() gab und gibt es auch in 1.8.10 nicht. Ist nach wie vor Serial.begin().
Kleine Denksportaufgabe zur Frage, ob Dein Programm nicht nur meistens funktioniert, sondern auch robust ist. Denke mal folgende Situation durch: Du startest Dein Programm und erwischt mit der ersten Abfrage von Serial.available() nicht eine Lücke zwischen den Frames, sondern mitten in den Frame. Und dummerweise ist das erste Byte das Du liest ein Datenbyte, das zufälligerweise, aber völlig berechtigt den Wert 0xA8 hat. Viel Erfolg beim Robustmachen.
————————————————————
Je älter ich werde, desto besser war ich
Lesezeichen