ExBus Sensor Eigenbau auf Basis 328PB
- andreobi
-
Offline Autor
- Neues Mitglied
-
- Beiträge: 19
- Dank erhalten: 23
Hallo,
ich habe einen recht umfangreichen Sensor auf Basis des atmega 328PB entwickelt. Alle die sich gerne inspirieren lassen möchten, können den Code unter github.com/andreobi/Jeti_ExBusSensor finden.
Der Sensor unterstützt Strom-, Kapazitäts- und Spannungsmessung, Vario, Höhe, GPS, Drehzahl, Lage wie Roll und Nick, außerdem wird das Kontronik ESC Protokoll auf den ExBus umgesetzt. Zusätzlich gibt es ein paar Ausgänge, um z.B. eine Positionsbeleuchtung zu steuern. Die Sensorkonfiguration kann im JetiBox Menu geändert werden.
Gruß
Andre
ich habe einen recht umfangreichen Sensor auf Basis des atmega 328PB entwickelt. Alle die sich gerne inspirieren lassen möchten, können den Code unter github.com/andreobi/Jeti_ExBusSensor finden.
Der Sensor unterstützt Strom-, Kapazitäts- und Spannungsmessung, Vario, Höhe, GPS, Drehzahl, Lage wie Roll und Nick, außerdem wird das Kontronik ESC Protokoll auf den ExBus umgesetzt. Zusätzlich gibt es ein paar Ausgänge, um z.B. eine Positionsbeleuchtung zu steuern. Die Sensorkonfiguration kann im JetiBox Menu geändert werden.
Gruß
Andre
von andreobi
Folgende Benutzer bedankten sich: Henning, Sepp62, dit71, Mario42
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Henning
-
Offline
- Elite Mitglied
-
- Beiträge: 316
- Dank erhalten: 144
Hallo Andre,
whow - Hut ab! Das ist ja wirklich eine eierlegende Wollmilchsau, und das auf dieser Platform...
Ich hab CRC32 und m328PB-Support installiert und als Target das A-Star 328PB ausgewählt, da bringt mir Arduino beim Linken allerdings eine Fehlermeldung, dass der Flashspeicher nicht ganz ausreicht...
Vermutlich liegts am Speicher, den Arduino für den Bootloader reserviert, oder?
Wie schaffst Du es, den Linker auf den kompletten Flashspeicher (ohne Bootloader) anzusetzen?
Grüße,
Henning
whow - Hut ab! Das ist ja wirklich eine eierlegende Wollmilchsau, und das auf dieser Platform...
Ich hab CRC32 und m328PB-Support installiert und als Target das A-Star 328PB ausgewählt, da bringt mir Arduino beim Linken allerdings eine Fehlermeldung, dass der Flashspeicher nicht ganz ausreicht...
Code:
Der Sketch verwendet 32524 Bytes (100%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
Vermutlich liegts am Speicher, den Arduino für den Bootloader reserviert, oder?
Wie schaffst Du es, den Linker auf den kompletten Flashspeicher (ohne Bootloader) anzusetzen?
Grüße,
Henning
von Henning
Folgende Benutzer bedankten sich: FuniCapi
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- andreobi
-
Offline Autor
- Neues Mitglied
-
- Beiträge: 19
- Dank erhalten: 23
Hallo Henning
der einzige Unterschied kann nur in der CRC32 sein, da ich ja sonst alle anderen Libs angepast hatte.
Ich verwende Arduino 1.8.12 und erhalte folgendes Ergebnis:
Der Sketch verwendet 32146 Bytes (99%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
Globale Variablen verwenden 914 Bytes (44%) des dynamischen Speichers, 1134 Bytes für lokale Variablen verbleiben.
Ich verwende folgende CRC32
//
// Copyright (c) 2013 Christopher Baker < christopherbaker.net >
//
// SPDX-License-Identifier: MIT
//
Vielleicht sollte ich die CRC Berechnung mit ins Paket mit aufnehmen.
Flashen kannst du entweder mittels Bootloader (keine Watchdog / Brownout Erkennung; der Boot loader löscht das Register und soll den Inhalt über bestimmte Befehle an das Userprogramm weitergeben, liegt aber an der Optiboot version) oder per ISP dann könnte man auch noch 512 Byte mehr Programmcode schreiben. Dies geht aber nur, wenn man in der boards.txt folgende Zeile anpasst: a-star328PB.upload.maximum_size=32256 => 32768.
Welches CRC32 Programm nutzt du?
Gruß
Andre
der einzige Unterschied kann nur in der CRC32 sein, da ich ja sonst alle anderen Libs angepast hatte.
Ich verwende Arduino 1.8.12 und erhalte folgendes Ergebnis:
Der Sketch verwendet 32146 Bytes (99%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
Globale Variablen verwenden 914 Bytes (44%) des dynamischen Speichers, 1134 Bytes für lokale Variablen verbleiben.
Ich verwende folgende CRC32
//
// Copyright (c) 2013 Christopher Baker < christopherbaker.net >
//
// SPDX-License-Identifier: MIT
//
Vielleicht sollte ich die CRC Berechnung mit ins Paket mit aufnehmen.
Flashen kannst du entweder mittels Bootloader (keine Watchdog / Brownout Erkennung; der Boot loader löscht das Register und soll den Inhalt über bestimmte Befehle an das Userprogramm weitergeben, liegt aber an der Optiboot version) oder per ISP dann könnte man auch noch 512 Byte mehr Programmcode schreiben. Dies geht aber nur, wenn man in der boards.txt folgende Zeile anpasst: a-star328PB.upload.maximum_size=32256 => 32768.
Welches CRC32 Programm nutzt du?
Gruß
Andre
von andreobi
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- bodri
-
Offline
- Neues Mitglied
-
- Beiträge: 3
- Dank erhalten: 2
Hi,
I have something similar: github.com/bodri/kapuki-cursen-fw , but for STM32 MCUs. This is a small current sensor which measures: current, voltage, capacity and power. The motor RPM measurement is under development.
I have something similar: github.com/bodri/kapuki-cursen-fw , but for STM32 MCUs. This is a small current sensor which measures: current, voltage, capacity and power. The motor RPM measurement is under development.
von bodri
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- dit71
-
Offline
- Elite Mitglied
-
- Beiträge: 160
- Dank erhalten: 85
Hallo,
ich würde das ja gerne verwenden um die Daten aus dem Kosmik, anstelle der teuren telme, auszulesen. Aber was ich bei Teros Sensoranleitungen gerade noch schaffe, dazu fehlen mir hier die Kenntnisse. Ist das nur für Spezialisten gedacht oder kann man das mit vertretbaren Aufwand auch Laien wie mich erklären was man da machen muss?
LG
Dieter
ich würde das ja gerne verwenden um die Daten aus dem Kosmik, anstelle der teuren telme, auszulesen. Aber was ich bei Teros Sensoranleitungen gerade noch schaffe, dazu fehlen mir hier die Kenntnisse. Ist das nur für Spezialisten gedacht oder kann man das mit vertretbaren Aufwand auch Laien wie mich erklären was man da machen muss?
LG
Dieter
dbdis App:
github.com/ribid1/dbdis
TStatus App: github.com/ribid1/TStatus
Notizbuch App: github.com/ribid1/Notebook
3D_Modelle: www.printables.com/@dit71_651800/models
TStatus App: github.com/ribid1/TStatus
Notizbuch App: github.com/ribid1/Notebook
3D_Modelle: www.printables.com/@dit71_651800/models
von dit71
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- andreobi
-
Offline Autor
- Neues Mitglied
-
- Beiträge: 19
- Dank erhalten: 23
Hallo Dieter,
für eine Telme Funktion benötigst du im Wesentlichen JetiEx..., Control_K und den richtigen CRC (hier hatte der Hersteller das Verfahren geändert). Die Jeti Menü Funktion wird für einen einfachen Konverter nicht benötigt. Also viel Löschen oder wenig Kopieren. Als Aufgabe bleibt, dass du im Hauptprogramm die Reglerwerte als Jeti Sensorwerte ausgeben musst.
Bitte beachte, wenn alle Reglerwerte übernommen werden ist der EX Bus "voll". Des Weiteren scheinen die Reglerwerte im K-Protokoll Rohwerte zu sein. Wenn der Regler z.B. im Jeti Protokoll sendet, habe ich den Eindruck, dass die Werte etws gefiltert wurden. Eine Filterimplementierung habe ich nicht.
Meine Empfehlung mit dem Wissen von heute ist:
- die Reglerwerte zu filtern
- nicht alle Werte alle 20ms senden (klappt eh nicht). Die Werte gemäß ihrer Dynamikanforderung an die Jeti Lib zu übergeben. Es werden nur aktualisierte Werte ausgegeben. z.B. akualisierst du den Kapazitätswert nur alle 500ms in der Lib, wird er auch nur alle 500ms auf dem EXBus ausgegeben.
Da du 2 schnelle Serielle Schnittstellen benötigst, ist der 328PB 16MHz Prozessor eine notwendige Voraussetzung. Fertige Boards gibt es z.B. von Pololu bei der Firma Eckstein.
Gruß
Andre
für eine Telme Funktion benötigst du im Wesentlichen JetiEx..., Control_K und den richtigen CRC (hier hatte der Hersteller das Verfahren geändert). Die Jeti Menü Funktion wird für einen einfachen Konverter nicht benötigt. Also viel Löschen oder wenig Kopieren. Als Aufgabe bleibt, dass du im Hauptprogramm die Reglerwerte als Jeti Sensorwerte ausgeben musst.
Bitte beachte, wenn alle Reglerwerte übernommen werden ist der EX Bus "voll". Des Weiteren scheinen die Reglerwerte im K-Protokoll Rohwerte zu sein. Wenn der Regler z.B. im Jeti Protokoll sendet, habe ich den Eindruck, dass die Werte etws gefiltert wurden. Eine Filterimplementierung habe ich nicht.
Meine Empfehlung mit dem Wissen von heute ist:
- die Reglerwerte zu filtern
- nicht alle Werte alle 20ms senden (klappt eh nicht). Die Werte gemäß ihrer Dynamikanforderung an die Jeti Lib zu übergeben. Es werden nur aktualisierte Werte ausgegeben. z.B. akualisierst du den Kapazitätswert nur alle 500ms in der Lib, wird er auch nur alle 500ms auf dem EXBus ausgegeben.
Da du 2 schnelle Serielle Schnittstellen benötigst, ist der 328PB 16MHz Prozessor eine notwendige Voraussetzung. Fertige Boards gibt es z.B. von Pololu bei der Firma Eckstein.
Gruß
Andre
von andreobi
Folgende Benutzer bedankten sich: dit71
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Ladezeit der Seite: 1.056 Sekunden