Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit

Diskutiere Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit im Nabenmotoren Forum im Bereich Fertig-Pedelecs; Moin, ich habe bereits im dem 'anderen' pedelec und E bike Forum meine Untersuchung und Ergebnisse veröffentlicht, hoffe aber hier zusätzlich...
  • Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit Beitrag #1
V

vspadrva

Themenstarter
Dabei seit
04.07.2018
Beiträge
24
Reaktionspunkte
41
Moin,
ich habe bereits im dem 'anderen' pedelec und E bike Forum meine Untersuchung und Ergebnisse veröffentlicht, hoffe aber hier zusätzlich noch weitere interessierte Leute zu erreichen.

Zunächst einmal ein Dank an Arthus Dent der schon vor über einem Jahr damit angefangen hat und auf dessen Arbeit ich aufgebaut habe.

Mein E-Bike NCM Venice + 48V mit Das-Kit C7 Display und vermutlich Lishui Kontroller.
Auf der Rückseite des Displays steht
C600-1705-B640
V2.7-EN

Das Display lässt nach Codeeingabe (8018) nur ein Ändern von drei Unterstützungsstufen (Eco Normal Power) und die Auswahl der Spannung 36 oder 48V zu. Abriegelgeschwindigkeit und Raddurchmesser sind nicht zugänglich.
Es gibt sehr schlecht verfügbare 119€ teure 'Tuningdisplays bei denen die beiden letzten Dinge auch veränderbar sind.

Also habe ich das Kabel aufgeschnitten und per Oszilloskop und Logic Analyser die Funktion der Kabel und die Steckerbelegung herausgefunden
index.php

index.php

(gelb ist Daumengas mit den üblichen ungefähr 1 bis 4 Volt)

Auf den Datenleitungen werden Nachrichten mit
9600 baud bei 3,3Volt TTL Pegeln ausgetauscht so das ich per USB TTL Adapter das Protokoll untersuchen konnte.
Mit ca. 10Hz kommen 12 Byte vom Display zum Kontroller, der mit 10Byte antwortet
Ohne Nachricht vom Display wird vom Kontroller nichts gesendet. Wenn man das Einschaltsignal auf die Versorgungsspannung legt benutzt der Controller die letzte Einstellung und funktioniert auch ohne Display.

Zum besseren testen habe ich mit eine Pfostenleiste in das Kabel gelötet so das ich einzelne Signale einfach unterbrechen kann:
index.php


Nun aber die spannenden Ergebnisse:

Display --> Motorcontroller
b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11
3A 2C 0A 46 1A 48 08 06 EC 00 0D 0A

Byte0: immer 3A
Byte1: immer 2C

Byte2: ändert sich je nach Unterstützungslevel

09 bei Eco
0A bei Normal
0B auf Power

Byte3: ändert sich mit der Fahrstufe

0x56 Schiebehilfe
0x40 Stufe 0
0x41 Stufe 1
... bis 0x46 Stufe 6


Byte4: Endgeschwindigkeit 0x1A=26km/h

Byte5: ?
Byte6: ?
Byte7: ?

Byte8: Prüfsumme (b1+b2+b3+b4+b5+b6+b7) mod 256

Byte9: ?

Byte10 und 11: 0D 0A (CR LF)


* Der Controller antwortet entsprechend:

Controller -> Display

b0 b1 b2 b3 b4 b5 b6 b7 b8 b9
3A 2C 00 60 EA 00 76 01 0D 0A

b0: immer 3A
b1: immer 2C

b2: Motorstrom 0x00 bis 0x2A
noch nicht überprüft macht aber Sinn, im Stand Hinterrad hoch und pedelieren bringt nur kurz eine 01

b3: Radumlaufzeit v=1325/b3 (bei 27,5") im Stillstand immer 0x60

b4: b3 und b4 sind Lowbyte und Highbyte der Radumlaufzeit.

b5: Motor läuft: 0x00 im Stillstand, geht auf 0x16 sobald der Motor eingeschaltet wird

b6: Prüfsumme (b1+b2+b3+b4+b5) mod 256

b7: im Stand 0x00 wenn sich das Hinterrad 6km/h+-0,8km/h dreht geht es auf 0x01. Auch bei ca. 2km/h, in einem kleinerem Geschwindigkeitsfenster.

b8 und 9: 0D 0A (CR LF)


Als nächstes habe ich mir einen Microkontroller (Teensy) geschnappt und die Nachrichten die vom Display zum Kontroller kommen so verändert das er wenn ich Stufe zwei auswählte an den Kontroller Stufe 6 mit 36km/h Maximalgeschwindigkeit schicke.
index.php

Mit 3d gedruckem Gehäuse:
index.php

Je nach Akkuspannung regelt der Kontroller bei 29 bis 32km/h ab.
Da ja das Fahrad auch in den USA von Magnumbikes als Metro plus mit 500Watt und 45km/h verkauft wird hoffe ich das da noch mehr geht. Es kann aber sein das dort ein anderer Motor verbaut wird der schneller drehen kann.

Wenn Interesse besteht kann ich auch eine detailiertere Anleitung wie man einen 5 Euro Microkontroller dort anschließt und programiert schreiben. Falls es jemand einfach nachbauen möchte.

Man könnte auch einen einfachen Zwischenstecker bauen und hätte damit eine steckbare Lösung.

Sebastian
 
  • Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit Beitrag #2
reido

reido

Dabei seit
17.07.2018
Beiträge
6
Reaktionspunkte
8
Hallo Sebastian.
Hier meine Lösung des Datenkabels zum Controller

Wie ich bereits beschrieben habe, wird in den Programmen: BaFang MotorController Debug V1.0 von www.szbaf.com und von Lishui Controller (FOC) Parameters Adjustor SN1-0 keine Verbindung hergestellt. Die USB-Schnittstelle wird jedoch errkannt.

Hoffentlich liegt es nicht an der USB-RS232 TTL Schnittstelle. :-(

Reinhard
 

Anhänge

  • Datenkabel.JPG
    Datenkabel.JPG
    191,6 KB · Aufrufe: 2.682
  • USB_Kabel.jpg
    USB_Kabel.jpg
    72,1 KB · Aufrufe: 2.540
  • Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit Beitrag #3
V

vspadrva

Themenstarter
Dabei seit
04.07.2018
Beiträge
24
Reaktionspunkte
41
Hallo Reinhard,
das hatte ich auch ausprobiert. Da die Kommunikation mit 9600baud läuft ist es wohl kein Bafang Kontroller.

Die Lishui sind ja häufig von Werk aus gegen umkonfigurieren gesperrt und könnten nut mit einer neuen Firmware zurückgesetzt werden.
Da ich aber nicht genau weiss welche Firmware dort passen würde habe ich das STLink V2 erst einmal nicht ausprobiert.

Als USB TTL Kabel hatte ich mir sogar eines FTDI chip gekauft und per Logic Analyzer gecheckt das es auch versucht Verbindung aufzunehmen. Aber wie gesagt vermutlich gesperrt am Werk...
 
  • Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit Beitrag #4
Hiasi

Hiasi

Dabei seit
28.07.2017
Beiträge
1.065
Reaktionspunkte
1.107
Ort
Bayern
Details E-Antrieb
Bosch Performance, Bafang Max, BMC, GMAC mit Reku
Ich habe mal einen Controller von NCM, er hieß CT6, geöffnet. Es war ein Lishui.
 
  • Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit Beitrag #5
V

vspadrva

Themenstarter
Dabei seit
04.07.2018
Beiträge
24
Reaktionspunkte
41
Auch die früheren Controller waren von Lishui LSW-irgendwas. Auch die mit den Umbausätzen verkauften Controller sind solche.
Aber solange ich nicht die genaue Bezeichnung habe brauche ich nicht zu versuchen eine jungfreuliche Firmware aufzuspielen.
Auslesen der Firmware ist ja über die zugängliche serielle Schnitstelle nicht möglich, neu bespielen könnte funktionieren da gibt es ein Tool aber wie gesagt nur bei verfügbarer Firmware.

Sebastian
 
  • Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit Beitrag #6
V

vspadrva

Themenstarter
Dabei seit
04.07.2018
Beiträge
24
Reaktionspunkte
41
sorry, das Bilder hochladen hatte wohl nicht geklappt.
Also die Bilder jetzt noch einmal...

Also habe ich das Kabel aufgeschnitten und per Oszilloskop und Logic Analyser die Funktion der Kabel und die Steckerbelegung herausgefunden

https://preview.ibb.co/mvvcgy/20180717_105234.jpg
https://image.ibb.co/iY0FZJ/20180718_221613.jpg

(gelb ist Daumengas mit den üblichen ungefähr 1 bis 4 Volt)


Aktuell habe ich stattt des Teensy einen ESP2866 verbaut da ich später die WLan Möglichkeiten nutzen möchte.

Code:
// C7 Display Tuning

#include <SoftwareSerial.h>
#define BAUD_RATE 9600

SoftwareSerial swSer1(12, 13, false, 256);        //Software Seriell 1 auf GPIO12 und 13
SoftwareSerial swSer2(14, 15, false, 256);        //Software Seriell 2 auf GPIO14 und 15

const byte numBytes = 32;
byte receivedBytes1[numBytes];
byte numReceived1 = 0;
byte receivedBytes2[numBytes];
byte numReceived2 = 0;
boolean newData1 = false;
boolean newData2 = false;

byte sendBytes[numBytes];

void setup() {
    Serial.begin(BAUD_RATE);                    //eingebaute USB Schnitstelle
    swSer1.begin(BAUD_RATE);                    //Software seriell1
    swSer2.begin(BAUD_RATE);
    Serial.println("<Arduino is ready>");
}

void loop() {
    recvBytesWithStartEndMarkers1();       // Nachsehen ob neues Telegramm von Display da ist
    modNewData();                        // Bytes tauschen
    Checksumm();                         // checksumme berechnen
    showNewData();                       //verändertes Telegramm senden
    //delay(20);
    recvBytesWithStartEndMarkers2();       // Nachsehen ob neues Telegramm von Motorcontroller da ist
}

void recvBytesWithStartEndMarkers1() {
    static boolean recvInProgress = false;
    static byte ndx = 0;
    byte startMarker = 0x3A;             //muss mit 0x3A beginnen
    byte endMarker1 = 0x0D;
    byte endMarker2 = 0x0A;              // und mit CR LF enden
    byte rb;

 
 

    while (swSer1.available() > 0 && newData1 == false) {
        rb = swSer1.read();

        if (recvInProgress == true) {
            if ((rb != endMarker2) || (receivedBytes1[ndx-1] !=endMarker1)) {
                receivedBytes1[ndx] = rb;
                ndx++;
             
                if (ndx >= numBytes) {
                    ndx = numBytes - 1;
                }
            }
            else {
                receivedBytes1[ndx-1] = '\0'; // terminate the string
                recvInProgress = false;
                numReceived1 = ndx-1;  // save the number for use when printing
                ndx = 0;
                newData1 = true;
           
            }
        }

        else if (rb == startMarker) {
            recvInProgress = true;
         
        }
    }
}

void recvBytesWithStartEndMarkers2() {
    static boolean recvInProgress = false;
    static byte ndx = 0;
    byte startMarker = 0x3A;             //muss mit 0x3A beginnen
    byte endMarker1 = 0x0D;
    byte endMarker2 = 0x0A;              // und mit CR LF enden
    byte rb;

 

    while (swSer2.available() > 0 && newData2 == false) {
        rb = swSer2.read();

        if (recvInProgress == true) {
            if ((rb != endMarker2) || (receivedBytes2[ndx-1] !=endMarker1)) {
                receivedBytes2[ndx] = rb;
                ndx++;
             
                if (ndx >= numBytes) {
                    ndx = numBytes - 1;
                }
            }
            else {
                receivedBytes2[ndx-1] = '\0'; // terminate the string
                recvInProgress = false;
                numReceived2 = ndx-1;  // save the number for use when printing
                ndx = 0;
                newData2 = true;
           
            }
        }

        else if (rb == startMarker) {
            recvInProgress = true;
         
        }
    }
}

void modNewData() {
  sendBytes[0]=0x3A;                          // neues Telegramm mit 0x3A beginnen
  for (byte n=0; n < numReceived1; n++) {
    sendBytes[n+1]=receivedBytes1[n];          // Die empfangenen Bytes an die nächsten Positionen
  }
  sendBytes[10]=0x0D;                          // CR und LF ans Ende
  sendBytes[11]=0x0A;
 
  if (sendBytes[3] == (0x42) ) {                // Wenn das 4. Byte 0x42 (2. Stufe) dann
    sendBytes[2]=(0x0B);                        //  3. Byte (Unterstützungslevel)
    sendBytes[3]=(0x46);                        //  4. Byte (Stufe) auf 6
    sendBytes[4]=(0x24);                        // und 5. Byte (Speed) auf 36km/h
 
  }
 
}

void Checksumm() {
  sendBytes[8]=0;
  for (byte n=1; n<8; n++){
    sendBytes[8]=sendBytes[8]+sendBytes[n];
  }
}

void showNewData() {
    if (newData1 == true) {
        Serial.print("received: ");
        for (byte n = 0; n < numReceived1; n++) {
            Serial.print(receivedBytes1[n], HEX);
            Serial.print(' ');
        }
        Serial.println();

        Serial.print("mod: ");
        for (byte n = 0; n < 12; n++) {
            Serial.print(sendBytes[n], HEX);
            Serial.print(' ');
         
        }
        Serial.println();                          // bis hier DebugInfo via USB an PC

     
     
        swSer1.write(sendBytes,12);              // Telegramm rausschicken
        newData1 = false;
    }

  if (newData2 == true) {
        Serial.print("receivedMotorC: ");
        for (byte n = 0; n < numReceived2; n++) {
            Serial.print(receivedBytes2[n], HEX);
            Serial.print(' ');
        }
        Serial.println();
        newData2 = false;

        Serial.println();                          // bis hier DebugInfo via USB an PC
}
}
 
  • Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit Beitrag #7
V

vspadrva

Themenstarter
Dabei seit
04.07.2018
Beiträge
24
Reaktionspunkte
41
Mal ein Update von den gesendeten Nachrichten

Display --> Motorcontroller
b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11
3A 2C 8F C3 19 70 08 00 0F 02 0D 0A (von Arthur)
3A 2C 0A 46 1A 48 08 06 EC 00 0D 0A (von mir)

Byte0: immer 3A
Byte1: immer 2C

Byte2: ? ändert sich mit der Fahrstufe 09 bei Eco
Unterstützungslevel 0A bei Normal
0B auf Power
die 8F von Arthur konnte iich bei mir nicht einstellen, aber als Anmerkung noch:
es ist üblich nicht nur einen Parameter in einem Byte zu übertragen, das Unterstützungslevel
könnte in den letzten zwei Bits codiert sein, und die verbleibenden 6 andere Parameter übertragen

Byte3: ? ändert sich mit der Fahrstufe 56 Schiebehilfe
40 Stufe 0
41 Stufe 2
... bis 46 Stufe 6
wie bei Byte 2 auch hier könnten die vorderen Bits andere Informationen übertragen
ich muss nach einmal genauer nachsehen, aber eines der vorderen Bits ändert sich wenn die Display Hintergrundbeleuchtung eingeschaltet wird

Byte4: Endgeschwindigkeit 0x19=25km/h

Byte5: Raddurchmesser

Byte6: Raddurchmesser
Dank Matthias tatsächlich der Radumfang in mm 48 08 sind, wenn 48 das LowByte und 08 das Highbyte sind 2120mm also 28Zoll
bei Arthur wären es 2160mm


Byte7: Daumengas
bei 0x06 funktioniert das Daumengas (gelbes Kabel) bis 6km/h, wenn man 0x00 schickt funktioniert es bis Vmax


Byte8: Prüfsumme (b1+b2+b3+b4+b5+b6+b7) mod 256 passt!

Byte9: ? 01 oder 02 00 bei mir

Byte10 und 11: 0D 0A (CR LF)
 
  • Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit Beitrag #9
M

maganzi

Dabei seit
13.07.2017
Beiträge
17
Reaktionspunkte
4
Ich hab zwar kein NCM Venice+ aber ein Moscow + mit 48V und C7 Display.
Ich werd ein MC auch nachrüsten.
Eine Frage: Byte4 Endgeschwindigkeit... Was kann man da denn maximal eintragen? :D

Vielen Dank für Deine Arbeit. Falls man Dich irgendwie unterstützen kann oder du Vergleichswerte von meinem Rad brauchst meld dich.
 
  • Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit Beitrag #10
V

vspadrva

Themenstarter
Dabei seit
04.07.2018
Beiträge
24
Reaktionspunkte
41
Hi,
ich habe nicht probiert welchen maximalen Wert der Controller für die Maximalgeschwindigkeit noch akzeptiert. Ich glaube ich habe momentan 38km/h drin aber mein Motor läuft trotz 59Volt 'nur' 36km/h. Vermutlich gehen dort noch höhere Werte.

Wenn du es drin hast berichte doch hier einfach ob es gut geklappt hat. Die Software schickt über die USB Schnitstelle momentan die empfangenen Daten, die modifizierten und die vom Controller zurück geschickten Daten, wenn ich mich recht erinnere, so das mal leicht sieht ob überhaubt was verändert wurde und wenn was usw.

Sebastian
 
  • Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit Beitrag #11
M

maganzi

Dabei seit
13.07.2017
Beiträge
17
Reaktionspunkte
4
Hey,
regelt er bei 36km/h dann schlagartig ab?
Wie sieht es im C7 Gehäuse aus, passt dort noch ein kleiner MC rein? Zur Not drucke ich vielleicht eine neue Gehäuserückseite.
Ich meld mich wenn der MC da ist.

René
 
  • Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit Beitrag #12
M

maganzi

Dabei seit
13.07.2017
Beiträge
17
Reaktionspunkte
4
Hab mal das Display abgebaut und geguckt wie und ob man es öffnen kann. Meins scheint geklebt zu sein, bewegt sich leider kein Stück obwohl alle Schrauben entfernt sind.
Würdest du mir die Steckerbelegung nennen? Welches Kabel sich wohinter verbirgt?
Vielen Dank schonmal
Grüße
René
 

Anhänge

  • IMG_1205.jpeg
    IMG_1205.jpeg
    59,5 KB · Aufrufe: 1.939
  • Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit Beitrag #13
M

maganzi

Dabei seit
13.07.2017
Beiträge
17
Reaktionspunkte
4
Hier einmal die Steckerbelegung.
Teste morgen dein Programm
 

Anhänge

  • Bildschirmfoto 2018-10-16 um 17.03.09.png
    Bildschirmfoto 2018-10-16 um 17.03.09.png
    845,6 KB · Aufrufe: 2.015
  • Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit Beitrag #14
V

vspadrva

Themenstarter
Dabei seit
04.07.2018
Beiträge
24
Reaktionspunkte
41
https://image.ibb.co/iY0FZJ/20180718_221613.jpg
ist bei mir die Steckerbelegung, das Display habe ich auch nicht öffnen können.

Bei abregeln geht er ähnlich vor wie bei den 25km/h. Er nimmt langsam die Leistung raus so das man (bei overvolted auf 59Volt) etwa 32km/h ohne treten fährt aber bei 34km/h noch etwas unterstützung vom Motor bekommt, bei 36 km/h ist dann kein Balken mehr im Display .

Sebastian
 
  • Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit Beitrag #15
M

maganzi

Dabei seit
13.07.2017
Beiträge
17
Reaktionspunkte
4
So für die welche sich auch den Stecker kaufen möchten:
https://meilaibike.de/p/verlaengerungskabel-universal-8-pin-julet-stecker-25cm

Ich habe dein Programm auf meinen ESP2866 geladen und es funktioniert einwandfrei.
Stufe zwei habe ich jetzt noch nicht ausprobiert.
____________________

Jetzt hätte ich aber gerne die Schiebhilfe bis Vmax.
Kannst du mir bitte deine IF-Abfrage einmal schreiben, irgendwas mache ich falsch

Byte7: Daumengas
bei 0x06 funktioniert das Daumengas (gelbes Kabel) bis 6km/h, wenn man 0x00 schickt funktioniert es bis Vmax


Code:
// C7 Display Tuning

#include <SoftwareSerial.h>
#define BAUD_RATE 9600

SoftwareSerial swSer1(12, 13, false, 256);        //Software Seriell 1 auf GPIO12 und 13
SoftwareSerial swSer2(14, 15, false, 256);        //Software Seriell 2 auf GPIO14 und 15

const byte numBytes = 32;
byte receivedBytes1[numBytes];
byte numReceived1 = 0;
byte receivedBytes2[numBytes];
byte numReceived2 = 0;
boolean newData1 = false;
boolean newData2 = false;

byte sendBytes[numBytes];

void setup() {
    Serial.begin(BAUD_RATE);                    //eingebaute USB Schnitstelle
    swSer1.begin(BAUD_RATE);                    //Software seriell1
    swSer2.begin(BAUD_RATE);
    Serial.println("<Arduino is ready>");
}

void loop() {
    recvBytesWithStartEndMarkers1();       // Nachsehen ob neues Telegramm von Display da ist
    modNewData();                        // Bytes tauschen
    Checksumm();                         // checksumme berechnen
    showNewData();                       //verändertes Telegramm senden
    //delay(20);
    recvBytesWithStartEndMarkers2();       // Nachsehen ob neues Telegramm von Motorcontroller da ist
}

void recvBytesWithStartEndMarkers1() {
    static boolean recvInProgress = false;
    static byte ndx = 0;
    byte startMarker = 0x3A;             //muss mit 0x3A beginnen
    byte endMarker1 = 0x0D;
    byte endMarker2 = 0x0A;              // und mit CR LF enden
    byte rb;

 
 

    while (swSer1.available() > 0 && newData1 == false) {
        rb = swSer1.read();

        if (recvInProgress == true) {
            if ((rb != endMarker2) || (receivedBytes1[ndx-1] !=endMarker1)) {
                receivedBytes1[ndx] = rb;
                ndx++;
            
                if (ndx >= numBytes) {
                    ndx = numBytes - 1;
                }
            }
            else {
                receivedBytes1[ndx-1] = '\0'; // terminate the string
                recvInProgress = false;
                numReceived1 = ndx-1;  // save the number for use when printing
                ndx = 0;
                newData1 = true;
          
            }
        }

        else if (rb == startMarker) {
            recvInProgress = true;
        
        }
    }
}

void recvBytesWithStartEndMarkers2() {
    static boolean recvInProgress = false;
    static byte ndx = 0;
    byte startMarker = 0x3A;             //muss mit 0x3A beginnen
    byte endMarker1 = 0x0D;
    byte endMarker2 = 0x0A;              // und mit CR LF enden
    byte rb;

 

    while (swSer2.available() > 0 && newData2 == false) {
        rb = swSer2.read();

        if (recvInProgress == true) {
            if ((rb != endMarker2) || (receivedBytes2[ndx-1] !=endMarker1)) {
                receivedBytes2[ndx] = rb;
                ndx++;
            
                if (ndx >= numBytes) {
                    ndx = numBytes - 1;
                }
            }
            else {
                receivedBytes2[ndx-1] = '\0'; // terminate the string
                recvInProgress = false;
                numReceived2 = ndx-1;  // save the number for use when printing
                ndx = 0;
                newData2 = true;
          
            }
        }

        else if (rb == startMarker) {
            recvInProgress = true;
        
        }
    }
}

void modNewData() {
  sendBytes[0]=0x3A;                          // neues Telegramm mit 0x3A beginnen
  for (byte n=0; n < numReceived1; n++) {
    sendBytes[n+1]=receivedBytes1[n];          // Die empfangenen Bytes an die nächsten Positionen
  }
  sendBytes[10]=0x0D;                          // CR und LF ans Ende
  sendBytes[11]=0x0A;
 
  if (sendBytes[3] == (0x42) ) {                // Wenn das 4. Byte 0x42 (2. Stufe) dann
    sendBytes[2]=(0x0B);                        //  3. Byte (Unterstützungslevel)
    sendBytes[3]=(0x46);                        //  4. Byte (Stufe) auf 6
    sendBytes[4]=(0x24);                        // und 5. Byte (Speed) auf 36km/h
 
  }

  if (sendBytes[7] == (0x06) )                  // Daumengas auf vmax
   {               
    sendBytes[7]=(0x00);                        //ersetze auf vmax (0x00)
  }
 
}

void Checksumm() {
  sendBytes[8]=0;
  for (byte n=1; n<8; n++){
    sendBytes[8]=sendBytes[8]+sendBytes[n];
  }
}

void showNewData() {
    if (newData1 == true) {
        Serial.print("received: ");
        for (byte n = 0; n < numReceived1; n++) {
            Serial.print(receivedBytes1[n], HEX);
            Serial.print(' ');
        }
        Serial.println();

        Serial.print("mod: ");
        for (byte n = 0; n < 12; n++) {
            Serial.print(sendBytes[n], HEX);
            Serial.print(' ');
        
        }
        Serial.println();                          // bis hier DebugInfo via USB an PC

    
    
        swSer1.write(sendBytes,12);              // Telegramm rausschicken
        newData1 = false;
    }

  if (newData2 == true) {
        Serial.print("receivedMotorC: ");
        for (byte n = 0; n < numReceived2; n++) {
            Serial.print(receivedBytes2[n], HEX);
            Serial.print(' ');
        }
        Serial.println();
        newData2 = false;

        Serial.println();                          // bis hier DebugInfo via USB an PC
}
}





Ich danke dir nochmal für deine klasse Arbeit und für die Zeit, die du investiert hast und dann allen zur Verfügung stellst!

Grüße
René
 

Anhänge

  • IMG_4842.JPG
    IMG_4842.JPG
    123,3 KB · Aufrufe: 1.690
Zuletzt bearbeitet:
  • Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit Beitrag #16
V

vspadrva

Themenstarter
Dabei seit
04.07.2018
Beiträge
24
Reaktionspunkte
41
Hi,
mit Schiebehilfe meinst du vermutlich nicht ein Daumengas (das habe ich nämlich in Stufe 2 auch in Schnell drin) sondern das lange halten von dem Knopf am Display?
Dann geht Byte3 auf 56. Ich habe moch nicht probiert ob sich diese Geschwindigkeit auch ändert wenn man Byte7 ändert, was ich ja eigendlich immer mache...
Aber ich muss mal ausprobieren ob das auch auf den Knopf am Display Wirkung hat...

Sebastian
 
  • Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit Beitrag #17
M

maganzi

Dabei seit
13.07.2017
Beiträge
17
Reaktionspunkte
4
Hey Sebastian,
Wenn ich lange auf "-" von der Fernbedienung Drücke, die dann per Kabel zum Display geht, kommt diese 6km/h Schiebhilfe.
Diese Schiebhilfe würde ich gerne, erweitern ;) Aber wenn nen kontrolliertes Gas wäre natürlich auch nicht schlecht.
Was meinst du mit Daumengas? Am Display selber ist ja kein weiterer Knopf.

Grüße
René
 
  • Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit Beitrag #18
M

maganzi

Dabei seit
13.07.2017
Beiträge
17
Reaktionspunkte
4
Ah Okay du hast nicht nur das C7BB Display sondern ein C7BBT. Mir fehlt quasi dieser "Daumengashebel"
Mhhh jetzt überlege ich gerade ob ich auf das Display umbaue....
 
  • Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit Beitrag #19
V

vspadrva

Themenstarter
Dabei seit
04.07.2018
Beiträge
24
Reaktionspunkte
41
Den Daumengashebel habe ich auch ohne das C7 BBT Display verbaut. Einfach ein 15€ Daumengas welches 5 Volt am Ausgang hat an das gelbe Kabel zum Controller angeschlossen und schon habe ich ein Daumengas.
Die 5Volt Versorgungsspannung und GND sind ja auch im Kabelbaum vorhanden. Dafür braucht man kein neues Display
 
Thema:

Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit

Kommunikation zwischen C7 Display und Motorkontroller NCM Venice+ Das-Kit - Ähnliche Themen

Extern Balancer für 10S selber bauen?: Hi, ich habe das hier ins Auge gefast: TP4056 Platine Chip Datasheet Meine Cellen Technische Daten (kurzfassung)...
Haibike Yamaha: Reverse-Engineering: Hallo, nachdem ich zusammen mit dem Nutzer @hErMeS den Yamaha Thread mit dem Akku-protokoll vollgequatscht hatte, haben wir uns über die...
Oben