Sunstar S03+

Diskutiere Sunstar S03+ im E-Motoren Forum im Bereich Diskussionen; Ich habe mal versucht das KT 880 anzuschließen. Bisher hatte gar nichts funktioniert. Ich hatte gehofft, dass wenn ich den Motor mit gelb grün und...
B

bigpuster

Mitglied seit
09.05.2020
Beiträge
27
1589826632194.png

Ich habe mal versucht das KT 880 anzuschließen. Bisher hatte gar nichts funktioniert. Ich hatte gehofft, dass wenn ich den Motor mit gelb grün und Spucke erwecke, das Display dann angeht. Seltsam ist, dass nach dem Erwecken des Motors dann 5V zwischen grün und gelb anliegen, wenn ich die kabel mit rot schwarz des Displays verbinde und wenn ich die Verbindung trenne 12V
In jedem Fall tut sich optisch am Display gar nichts. Wenn ich das Display direkt an den Akku anschließe oder 12V Netzteil , dann startet das Display optisch wenigstens. Gibt es dafür eine einfache Erklärung? Macht es Sinn daran weiter zu probieren oder ist es aussichtslos? Ziel : Wenigstens irgendwie mit Motorunterstützung losfahren.
Post automatically merged:

Ist nicht so wichtig. In ein paar Tagen ist der Ardunio, widerstände und Schalter da, und dann geht es ja hoffentlich :rolleyes:
 
Zuletzt bearbeitet:
verlierer

verlierer

Mitglied seit
09.05.2012
Beiträge
106
Ort
bayern/thüringen
Macht es Sinn daran weiter zu probieren oder ist es aussichtslos?
Macht überhaupt keinen Sinn. Das Chinading kommuniziert über zwei Datenleitungen, also RX und TX getrennt. Der Sunstar nur über eine Datenleitung.
Es braucht den Arduino Nano um diese 1 Kabel Kommunikation zu bedienen.
Wenn Du jemand findest, der dir das Protokoll von Deinem Display sagen kann (und das können in diesem Forum einige), dann könnte man den Nano auch noch das Display bedienen lassen.
Da es aber nur um die Anzeige der drei Assiststufen geht, lohnt sich das nicht wirklich.
 
verlierer

verlierer

Mitglied seit
09.05.2012
Beiträge
106
Ort
bayern/thüringen
So ich hab die Kommunikation zwischen Display und Motor komplett neu geschrieben. Ganz ohne seriellen Port, sondern über zwei Interrupts.
Läuft bei mir sehr stabil, aber kann den Motor ja nicht im Fahrzustand testen.

Hier der code:
Code:
//#define _DEBUG

#ifdef _DEBUG
  #define DEBUG(txt, val) {Serial.print(txt); Serial.print(": "); Serial.print(val); Serial.print("\t");}
  #define DEBUGLN(txt, val) {Serial.print(txt); Serial.print(": "); Serial.println(val);}
#else
  #define DEBUG(txt, val)
  #define DEBUGLN(txt, val)
#endif

#define pin_Down 12 //13
#define pin_Yes 11  //12
#define pin_Up 10   //14

#define pinSunstar 2
#define BAUD_SCALE 104

void setup()
{
#ifdef _DEBUG
  Serial.begin(115200);
  Serial.println("Sunstar 2020 :-)");
#endif

  pinMode(pinSunstar,INPUT_PULLUP);

  pinMode(pin_Down,INPUT_PULLUP);
  pinMode(pin_Yes,INPUT_PULLUP);
  pinMode(pin_Up,INPUT_PULLUP);

  pinMode(LED_BUILTIN, OUTPUT);

  cli();//stop interrupts

  //set timer2 interrupt at 19200 Hz
  TCCR2A = 0;// set entire TCCR2A register to 0
  TCCR2B = 0;// same for TCCR2B
  TCNT2  = 0;//initialize counter value to 0
  // set compare match register for 8khz increments
  OCR2A = BAUD_SCALE;       // 249 = (16*10^6) / (8000*8) - 1 (must be <256)
                            // 104 = 19230 baud   103 = 19417 baud
  TCCR2A |= (1 << WGM21);   // turn on CTC mode
  TCCR2B |= (1 << CS21);    // Set CS21 bit for 8 prescaler
  TIMSK2 |= (1 << OCIE2A);  // enable timer compare interrupt

  attachInterrupt(digitalPinToInterrupt(pinSunstar),UartRobo,FALLING); 
  sei();//allow interrupts
}

int8_t  iPos = -1;      // time counter to receive and send the bytes. -1 = waiting
uint8_t wMotor = 0;       // data byte received from the motor
bool bReadParity = 0;     // read parity bit as global variable for debugging purposes
bool    bMotor = false;   // data byte is valid :-)

uint8_t wDisplay = 0;     // data  byte send to the motor 0 = no buttons pressed
uint8_t wSending = 0;     // copy from wDisplay that is now transmitted
uint8_t bSendParity = 0;  // parity bit calculated from wSending that is transmitted last

void UartRobo()
{
  if (iPos < 0)  
  {
    iPos = 0;             // now read and send
    wMotor = 0;           // reset data byte
    bMotor = false;       // assume we fail to read vaild data
    TCNT2 = BAUD_SCALE/2; // sync the timer interrupt to the beginning of this start bit
  }
}

ISR(TIMER2_COMPA_vect)
{
  if (iPos >= 0)  // yes we are reading or sending
  {
    iPos++;

    if (iPos == 1)  // still stop bit
    {
      return;
    }

    if (iPos < 10)
    {
      wMotor <<= 1;
      //buttonState = PORTB & _BV(pinSunstar);  // might be faster
      wMotor |= digitalRead(pinSunstar);
    }
    else if (iPos == 10)
    {
      bReadParity = digitalRead(pinSunstar);

      bool b = 1;
      uint8_t w = wMotor;
      while(w)
      {
        b ^= ( w & 1);
        w >>= 1;
      }
      bMotor = bReadParity == b;  // set data to be vaild if parity bit matches
    }
    else if (iPos == 21)  // now return display byte after we waited a bit. begin with startbit 
    {
      pinMode(pinSunstar,OUTPUT);
      digitalWrite(pinSunstar,LOW);
      uint8_t w = wSending = wDisplay>0 ? wDisplay : 0x3c;

      bSendParity = 0;
      while(w)
      {
        bSendParity ^= (w & 1);
        w >>= 1;
      }
    }
    else if (iPos < 30)  // send the 8 display bits
    {
      digitalWrite(pinSunstar,wSending & 1);
      wSending >>= 1;
    }
    else if (iPos == 30)  // send the parity bit
    {
      digitalWrite(pinSunstar,bSendParity);
    }
    else if (iPos == 31)  // send stop bit and go to sleep
    {
      pinMode(pinSunstar,INPUT_PULLUP);
      iPos = -1;
    }
  }
}

uint8_t iAssist = 0;  // 0 = no motor communication yet. 1-3 = low , mid , high
bool bLightOn = false;  // motor may have different behavior with lights turned on ??

uint8_t iAssistSet = 3; // start with assist mode: high

unsigned long iTimeButton = 0;  // time in millisesoncds since last time a button was pressed
unsigned long iTimeMotor = 0;  // time in millisesoncds since last time a valid motor byte was received

void loop()
{
  unsigned long iNow = millis();

  if (iNow-iTimeMotor > 1000) // motor seems to have turned off :-(
    iAssist = 0;

  digitalWrite(LED_BUILTIN,iAssist == 0 ? (iNow%200) < 100 // no motor communication :-(
            :(  ((iNow / 500) % 4) < iAssist ?  (iNow%500) < 250 : LOW  ));

  boolean bDown = !digitalRead(pin_Down);
  boolean bYes = !digitalRead(pin_Yes);
  boolean bUp = !digitalRead(pin_Up);
  //Serial.print("down:");Serial.print(bDown);  Serial.print("\tdyes:");Serial.print(bYes);  Serial.print("\tup:");Serial.println(bUp);

  if (iTimeButton < iNow)
  {
    if (bYes || bUp || bDown)
    {
      iTimeButton = iNow + 500;
      if (bYes)
      {
        iTimeButton += 500;
      }
      if (bDown)
      {
        //wDisplay = 0x38;  // 00111000 = 38 = light button
        if (iAssistSet > 1)  iAssistSet--;
      }
      if (bUp)
      {
        //wDisplay = 0x1c;  // 00011100 = 1c = boost button
        if (iAssistSet < 3)  iAssistSet++;
      }
    }
  }
  
  wDisplay = 0;   // assume to not send some buttons pressed
  if (bMotor) if (wMotor) // wMotor can never be 0 ??? when driving it seems to be 0xff a lot !!!
  {
    iTimeMotor = iNow;
    if ((wMotor & 0b11110000) == 0b11000000)  // additional error checking, first 4 bits always seem to be 1100 ?!
    {
      if      (wMotor & 0b00001000) iAssist = 2;
      else if (wMotor & 0b00000100) iAssist = 3;
      else if (wMotor & 0b00000010) iAssist = 1;
      else iAssist = 0; // invalid data :-(

      bLightOn = wMotor & 0b0000001;
    }

    if (iAssist && (iAssist != iAssistSet) && (iNow%1000 < 200) ) // send a 200ms button push every 1000 ms
    {
      wDisplay = 0x1c;
    }
#ifdef _DEBUG
    Serial.print(wMotor,BIN); //Serial.print(" "); Serial.print(bReadParity);Serial.print(" == "); Serial.print(GetParityOdd(wMotor));
    Serial.print("\tiAssistSet: "); Serial.print(iAssistSet);Serial.print(" ?= iAssist: "); Serial.print(iAssist);
    Serial.print("\twDisplay: "); Serial.println(wDisplay,HEX);
#endif
  }
}

bool GetParityOdd(uint8_t  data)
{
  bool parity = 1;
  while(data)
  {
    parity ^= (data &1);
    data>>=1;
  }
  return (parity);
}
Einstellen der Assiststufe findet über zwei Taster up/down statt, welche die zwei Input-Pins auf Masse ziehen.
Wettertauglicher wäre ein dreistufen Kippschalter on-off-on. Der würde dann in den zwei on-Stellungen dauerhaft die zwei seitlichen Kippschalter Inputpins auf den mitterlern Kippschalter Massepin ziehen.
Asssiststufe 1 wäre dann 01, Stufe 2 = 11 und Stufe 3 = 10 = rechte Kippschalterstellung zieht den rechten Pin auf Masse.

Die Ausgabe der tatsächlichen Assiststufe (wird vom Motor gesendet) wird über die kleine grüne LED des Arduino kommuniziert:

schnelles Blinken: keine Kommunikation zum Motor = Motor aus ?
1x blinken alle 2 Sekunden = Assist low
2x blinken alle 2 Sekunden = Assist mid
3x blinken alle 2 Sekunden = Assist high

Schön zu sehen wenn man von 3 auf 2 tastet, dass der der Motor dann zwischendurch Assist low sendet, weil man mit dem boost-taster vom Original Display ja auch nur der reihe nach durchtasten kann.

das Roland
der Code sei public domain. Wem er gefällt, der schaue sich bitte die vollen 35 Minuten meiner letzten www.robo4future.de Folge an:


(und erspare mir seine veblödeten Kommentare)
 
verlierer

verlierer

Mitglied seit
09.05.2012
Beiträge
106
Ort
bayern/thüringen
Es gibt ein Problem!

Der Arduino Nano braucht zu lange um zu starten, da hat der Motorcontroller schon wieder abgeschaltet.
Ich werde morgen mal versuchen, den Bootloader durch Optiboot zu ersetzen.

Um den bootloader neu zu flashen braucht man aber mindestens einen zweiten Arduino Nano. Der zweite fungiert dann als ISP-Programmer.
Ist kein Hexenwerk und man müsste es auch nur einmal machen, danach kann man wie gewohnt über den Usb-Mini Port meine Software installieren/updaten.

Lese gerade, dass die orginal Nanos seit 2018 schon mit diesem Optiboot Bootloader ausgeliefert werden. Meine China Clone sind sich von vor 2018. Wer aktuell billige Nanos kauft hat vielleicht glück ? Dann muss unter "Werkzeuge"->"Prozessor" auch nicht der ATMEGA328 (old bootloader) ausgewählt werden.
 
Zuletzt bearbeitet:
B

bigpuster

Mitglied seit
09.05.2020
Beiträge
27
Ich habe drei Stück Arduino gekauft für drei Motoren und drei on-off-on Kippschalter. Hoffe Freitag kommt es und die Arduinos sind neu. Dann geht es los!
Danke
 
verlierer

verlierer

Mitglied seit
09.05.2012
Beiträge
106
Ort
bayern/thüringen
Okay mit dem aktuellen Bootloader funktioniert es :)
Wenn Deine Nanos angekommen sind, dann versuch also zuerst mit "Werkzeuge"->"Prozessor"->"ATmega328P" zu flashen.
Also Code kopieren und strg+U drücken.

Wenn das nicht klappt, dann probiere es mit "Atmega328P (old bootloader)". Wenn dass dann klapp brauchst Du die Anleitung zu installieren des aktuellen Bootloaders.

Da so wenig zu löten ist, empfehle ich Dir, die Kabel direkt an den Nano zu löten.
Dazu finde ein altes USB Kabel von dem Du 10 cm abschneiden kannst. Dann hast Du 4 verschiedenfarbene Adern, die Du an die Pins D12, D11 löten kannst. Zusätzlich eine Ader den quadratischen Pin von dem "Sechersblock auf der gegenüberliegenden Seite vom USB-Port" - der ist auch GND.

wwwhpag.staufer-gymnasium.de/de/grundlegende-schaltungen/arduino-nano-pinout/

Die beiden seitlichen Kontakte des on-off-on schalters dann an die Adern D12 und D11, den mittleren Kontakt an die Ader vom "quadratischen" GND

Die Pins 5V, GND, D2 kannst direkt an 150 cm altes USB-Kabel löten. Und dam am Kabelende für den Motorstecker

5V an braun
gnd an grün
D2 an rot
Am Übergang zum Motorstecker noch den 500 kOhm Widerstand zwischen grün und gelb
und braun mit organge verbinden.

Siehe neuster Schaltplan im Anhang.

Als Stecker für den Motor kannst Du vermutlich 5 Pins von der Steckerleister abbrechen, die dem Arduino Nano beiliegt.
And die kurzen Enden dieser 5er Leiste kannst Du das 1,5 Meter lange USB Kabel anlöten (und den 500 kOhm Widerstand und die Brücke zwischen braun und orange).

Wenn am Ende alles funktioniert, verklebe den Stecker mit dem Motorstecker komplett mit Heißklebepistole.
Zumindes den eignen Stecker, den könntest Du dann auch mit Elektrikerklebeband am Motorstecker fixieren.

Ich muss noch den Code für on-off-on Schalter statt pushbottons anpassen.

Als Gehäuse könntest Du eine Multivitamin-Röhre nehmen, die Du auf 10 cm kürzt. In den Boden dann den Kippschalter und das USB-Kabel durch enges Loch im Stopfen. Allerdings wird man dann die BlinkLED kaum noch erkennen.
Du könntest an der Stelle der LED auch ein Loch bohren und die Röhre sauber mit transparentem Klebeband umwickeln.
Besser wäre also eine kleine transparente Box - schau was Du findest.
Post automatically merged:

So hier der code für on-off-on schalter. Wer doch die zwei Tasten mag kann die zwei // vor //#define DIALWHEEL entfernen.

Code:
//#define _DEBUG    // uncomment to get some debug output on serial monitor 115200 baud

//#define DIALWHEEL   // keep commented when using an on-off-on switch :-)

#ifdef DIALWHEEL
  #define pin_Down  12
  #define pin_Yes   11
  #define pin_Up    10
#else
  #define pin_Down  12
  #define pin_Up   11
#endif

#define pinSunstar 2    // must be interrupt pin 1 or 2
#define BAUD_SCALE 104

void setup()
{
#ifdef _DEBUG
  Serial.begin(115200);
  Serial.println("Sunstar 2020 :-)");
#endif

  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(pinSunstar,INPUT_PULLUP);
  pinMode(pin_Down,INPUT_PULLUP);
  pinMode(pin_Up,INPUT_PULLUP);

#ifdef DIALWHEEL
  pinMode(pin_Yes,INPUT_PULLUP);
#endif

  cli();//stop interrupts

  //set timer2 interrupt at 19200 Hz
  TCCR2A = 0;// set entire TCCR2A register to 0
  TCCR2B = 0;// same for TCCR2B
  TCNT2  = 0;//initialize counter value to 0
  // set compare match register for 8khz increments
  OCR2A = BAUD_SCALE;       // 249 = (16*10^6) / (8000*8) - 1 (must be <256)
                            // 104 = 19230 baud   103 = 19417 baud
  TCCR2A |= (1 << WGM21);   // turn on CTC mode
  TCCR2B |= (1 << CS21);    // Set CS21 bit for 8 prescaler
  TIMSK2 |= (1 << OCIE2A);  // enable timer compare interrupt

  attachInterrupt(digitalPinToInterrupt(pinSunstar),UartRobo,FALLING); 
  sei();//allow interrupts
}

int8_t  iPos = 0;      // time counter to receive and send the bytes. -1 = waiting
uint8_t wMotor = 0;       // data byte received from the motor
bool bReadParity = 0;     // read parity bit as global variable for debugging purposes
bool    bMotor = false;   // data byte is valid :-)

uint8_t wDisplay = 0;     // data  byte send to the motor 0 = no buttons pressed
uint8_t wSending = 0;     // copy from wDisplay that is now transmitted
uint8_t bSendParity = 0;  // parity bit calculated from wSending that is transmitted last

void UartRobo()
{
  if (iPos < 0)  
  {
    iPos = 0;             // now read and send
    wMotor = 0;           // reset data byte
    bMotor = false;       // assume we fail to read vaild data
    TCNT2 = BAUD_SCALE/2; // sync the timer interrupt to the beginning of this start bit
  }
}

ISR(TIMER2_COMPA_vect)
{
  if (iPos >= 0)  // yes we are reading or sending
  {
    iPos++;

    if (iPos == 1)  // still stop bit
    {
      return;
    }

    if (iPos < 10)
    {
      wMotor <<= 1;
      //buttonState = PORTB & _BV(pinSunstar);  // might be faster
      wMotor |= digitalRead(pinSunstar);
    }
    else if (iPos == 10)
    {
      bReadParity = digitalRead(pinSunstar);

      bool b = 1;
      uint8_t w = wMotor;
      while(w)
      {
        b ^= ( w & 1);
        w >>= 1;
      }
      bMotor = bReadParity == b;  // set data to be vaild if parity bit matches
    }
    else if (iPos == 21)  // now return display byte after we waited a bit. begin with startbit 
    {
      pinMode(pinSunstar,OUTPUT);
      digitalWrite(pinSunstar,LOW);
      uint8_t w = wSending = wDisplay>0 ? wDisplay : 0x3c;

      bSendParity = 0;
      while(w)
      {
        bSendParity ^= (w & 1);
        w >>= 1;
      }
    }
    else if (iPos < 30)  // send the 8 display bits
    {
      digitalWrite(pinSunstar,wSending & 1);
      wSending >>= 1;
    }
    else if (iPos == 30)  // send the parity bit
    {
      digitalWrite(pinSunstar,bSendParity);
    }
    else if (iPos == 31)  // send stop bit and go to sleep
    {
      pinMode(pinSunstar,INPUT_PULLUP);
      iPos = -1;
    }
  }
}

uint8_t iAssist = 0;  // 0 = no motor communication yet. 1-3 = low , mid , high
bool bLightOn = false;  // motor may have different behavior with lights turned on ??

uint8_t iAssistSet = 3; // start with assist mode: high

unsigned long iTimeButton = 0;  // time in millisesoncds since last time a button was pressed
unsigned long iTimeMotor = 0;  // time in millisesoncds since last time a valid motor byte was received

void loop()
{
  unsigned long iNow = millis();

  if (iNow-iTimeMotor > 1000) // motor seems to have turned off :-(
    iAssist = 0;

  digitalWrite(LED_BUILTIN,iAssist == 0 ? (iNow%200) < 100 // no motor communication :-(
            :(  ((iNow / 500) % 4) < iAssist ?  (iNow%500) < 250 : LOW  ));

  boolean bDown = !digitalRead(pin_Down);
  boolean bUp = !digitalRead(pin_Up);

#ifdef DIALWHEEL
  boolean bYes = !digitalRead(pin_Yes);
  //Serial.print("down:");Serial.print(bDown);  Serial.print("\tdyes:");Serial.print(bYes);  Serial.print("\tup:");Serial.println(bUp);
  if (iTimeButton < iNow)
  {
    if (bYes || bUp || bDown)
    {
      iTimeButton = iNow + 500;
      if (bYes)
      {
        iTimeButton += 500;
      }
      if (bDown)
      {
        if (iAssistSet > 1)  iAssistSet--;
      }
      if (bUp)
      {
        if (iAssistSet < 3)  iAssistSet++;
      }
    }
  }
#else
  iAssistSet = bDown ? 1 : (bUp ? 3 : 2);
#endif
  
  wDisplay = 0;   // assume to not send some buttons pressed
  if (bMotor) if (wMotor) // wMotor can never be 0 ??? when driving it seems to be 0xff a lot !!!
  {
    iTimeMotor = iNow;
    if ((wMotor & 0b11110000) == 0b11000000)  // additional error checking, first 4 bits always seem to be 1100 ?!
    {
      if      (wMotor & 0b00001000) iAssist = 2;
      else if (wMotor & 0b00000100) iAssist = 3;
      else if (wMotor & 0b00000010) iAssist = 1;
      else iAssist = 0; // invalid data :-(

      bLightOn = wMotor & 0b0000001;
    }

    if (iAssist && (iAssist != iAssistSet) && (iNow%1000 < 200) ) // send a 200ms button push every 1000 ms
    {
      wDisplay = 0x1c;
    }
#ifdef _DEBUG
    Serial.print(wMotor,BIN); //Serial.print(" "); Serial.print(bReadParity);Serial.print(" == "); Serial.print(GetParityOdd(wMotor));
    Serial.print("\tiAssistSet: "); Serial.print(iAssistSet);Serial.print(" ?= iAssist: "); Serial.print(iAssist);
    Serial.print("\twDisplay: "); Serial.println(wDisplay,HEX);
#endif
  }
}

#ifdef _DEBUG
  #define DEBUG(txt, val) {Serial.print(txt); Serial.print(": "); Serial.print(val); Serial.print("\t");}
  #define DEBUGLN(txt, val) {Serial.print(txt); Serial.print(": "); Serial.println(val);}
  bool GetParityOdd(uint8_t  data)
  {
    bool parity = 1;
    while(data)
    {
      parity ^= (data &1);
      data>>=1;
    }
    return (parity);
  }
#else
  #define DEBUG(txt, val)
  #define DEBUGLN(txt, val)
#endif
 

Anhänge

Zuletzt bearbeitet:
verlierer

verlierer

Mitglied seit
09.05.2012
Beiträge
106
Ort
bayern/thüringen
Was schätzt Ihr denn, wieviel dieser Sunstar S03+ noch existieren: 50 , 250, 500, mehr ?

Könnte so eine Lan-Verlängerung kaufen: de.aliexpress.com/item/32952248801.html
20 cm hinter der Buchse durchschneiden und die Enden direkt im Motor mit den Displaykabeln verbinden (3 der 8 Adern). Zusätzlich noch die je eine Datenader vom PAS und Geschwindigkeitssensor durchschleifen (4 der verbleibenden 5 Adern).

Die Enden des 180cm Lan-Kabel dann an ESP32 und Pegelwandler am Lenker montiert.
Das wäre dann ein 13 Euro Mini Farbdisplay mit Bluetooth, Wlan als Alarm mit 50 Meter Reichweite und SD-Karte zum Daten loggen.
 
B

bigpuster

Mitglied seit
09.05.2020
Beiträge
27
Auf jeden Fall besser als die Schalterlösung. Heute sind die Arduinos gekommen.Ich hoffe, ich komme morgen zum Testen
 
verlierer

verlierer

Mitglied seit
09.05.2012
Beiträge
106
Ort
bayern/thüringen
Auf jeden Fall besser als die Schalterlösung.
Das war nicht die Frage..

Es sollte übrigens noch möglich sein, die Batteriespannung zum messen.
An meinem 670 kOhm Widerstand fällt die Spannung auf so 4,8 Volt ab. Wenn ich die "Batteriespannung" von 27 Volt auf 25 Volt runter regele, sinkt die Spannung auf so 3 Volt. Wenn man den Einschaltwiderstand also geschickt wählt, könnte man mit der noch freien 4ten USB-Leitung das gelbe Kabel zu einem Analogen Inputpin des Nano führen.

Die LiIon Batteriespannung ist zwar direkt aussagekräftig über die verbleibende Restkapazität, aber nur wenn der Motor die Spannung nicht runterzieht. Und ich bin mir nicht sicher, ob das Byte vom Motor die Aktivität des Motors ans Display leitet.

Allerdings kenne ich ja die Bedeutung der ersten 4 bit nicht. Und die scheinen sich durchaus zu ändern.
Desswegen kein Frust wenn der Nano mit meiner Software nur Störung blinkt. Da lege ich ja fest, dass diese 4 bits 1100 sein müssen. Hab da zuletzt wieder probleme mit gehabt. Aber ich warte jetzt erstmal bis die Testergebnisse kommen.
 
B

bigpuster

Mitglied seit
09.05.2020
Beiträge
27
Ich scheitere schon beim Auswählen des Prozessors.
Ich nehme den Menupunkt "Werkzeuge" und dann habe ich kein "Prozessor" zur Auswahl. Der einzige Menupunkt, der mir eine Auswahl an Prozessoren bietet, ist " Board : Arduino Uno" . Aber hier ist kein "Atmega 328p"?!

Danke
Habe jetzt im Internet geforscht und es ist dann wohl der Arduino uno?! Den habe ich jetzt ausgewählt. Mal schauen
1590219251677.png

Post automatically merged:

Fehlermeldung nach Strg + U
 

Anhänge

Zuletzt bearbeitet:
verlierer

verlierer

Mitglied seit
09.05.2012
Beiträge
106
Ort
bayern/thüringen
Ich hab Dir doch schon meine handy nummer geschickt. Ich kann kostenlos telefonieren, reicht also wenn Du mich anbimmelst, dann rufe ich zurück
 
B

bigpuster

Mitglied seit
09.05.2020
Beiträge
27
Danke!
Hat jetzt geklappt. Hatte Arduino Uno statt Nano ausgewählt. Leider ging es nur mit dem "Atmega328P (old bootloader)" . Das heisst, ich muss jetzt noch den Bootloader ersetzen durch Optiboot. Hast Du da noch eine idiotensichere Anleitung?
 
verlierer

verlierer

Mitglied seit
09.05.2012
Beiträge
106
Ort
bayern/thüringen
Anleitungen gibt es zu viele um eine zu verlinken.
Fang mal mit dem löten an. Für das flashen des bootloader brauchst Du eh zwei Nanos mit Kabeln an den Pins 12 und 11, die Du auch später brauchst. Da also 10cm usb adern dran die Du später an den Schalter lötest.
5V und GND bekommen beide Boards über die Verbindung zum PC/Laptop. Dafür brauchst du zwei USB-Mini kabel.
Fehlt nur die Verbindung der beiden pins 13 und der beiden Reset pins (Arduino Uno ist identisch mit dem Nano, Nano nur kompakter aufgebaut):




Wenn Du das hast, ziehst Du einen Nano vom PC ab, dann bleibt nur noch ein COM-Port zum Auswählen in "Werkzeuge" - das wird der Nano den Du als ArduinoISP programmieren musst, damit dieser dann den zweiten Nano seinen neuen Bootloader flasht. Wenn Du also den "Programmer"-Nano am PC hast, dann "Datei"->"Beispiele"->"ArduinoISP"->"ArduinoISP".

Dann Strg+U und die Programmiersoftware auf den "Programmer"-Nano installieren.
Jetzt zweiten Nano zusätzlich an PC stöpseln damit der Strom bekommt, oder die 5V und GND zwischen den beiden Nanos verbinden.
Nun "Werkzeuge"->"Programmer"->"Arduino as ISP" auswählen.
Und schließlich "Werkzeuge"->"Bootloader brennen"

Das sollte funktionieren.
Ich bin jetzt bis min 12:00 offline.
 
B

bigpuster

Mitglied seit
09.05.2020
Beiträge
27
Alles fertig...
Zwei Fragen :
1. Kann ich den Unterstützungsgrad (einfach/ mittel/ max) mittels externer LED anzeigen lassen?
2. Würde sich eine externe "Akku low WarnLED" einrichten lassen?
Vielen Dank für Deinen Livesupport
 
B

bigpuster

Mitglied seit
09.05.2020
Beiträge
27
Wahnsinn....ich habe es nicht ausgehalten bis morgen früh und doch noch alles ngeschlossen. FUNKTIONIERT 🕺
Einzig der Widerstand zwischen gelb und grün ist scheinbar falsch bemessen. Ich hatte schon abgekotzt, weil der Arduin nicht zum Leben erweckt wurde, als ich den Akku zugeschaltet hatte. Dann habe ich den Spuckeversuch gemacht und tadaaaaa, es lief.
Welche Größe würdest Du jetzt empfehlen? Schätze kleiner, oder?
Ansonsten merkt man beim Anfahren, dass der Motor arbeitet und auch die verschieden starken Unterstützungen. Beim Fahren merkt man es nicht so stark. Ich habe aber jetzt nur eine kleine Runde gedreht. Morgen mehr.
 
verlierer

verlierer

Mitglied seit
09.05.2012
Beiträge
106
Ort
bayern/thüringen
1. Kann ich den Unterstützungsgrad (einfach/ mittel/ max) mittels externer LED anzeigen lassen?
2. Würde sich eine externe "Akku low WarnLED" einrichten lassen?
Vielen Dank für Deinen Livesupport
Also ich wäre erstaunt, wenn mein Code einfach so zu 100% bei Dir funktioniert.
Kannst Du also tatsächlich die drei Stufen über den Kippschalter einstellen und die interne LED am Nano blinkt dann 1x, 2x oder 3x ?!

Sicher kannst Du an einen der vielen D Pins auch noch eine LED anschlissen, die über Widerstand an +5V anschließt. Dafür brauchst Du halt eine LED und muss wissen, wieviel mA die braucht um hell zu leuchten. Du könntest Den Nano dann auch im Motor verbauen, und mit dem 4 adrigen USB kabel nur den kippschalter und die LED hoch zum Lenker führen. Aber wie war das mit dem Keep it simple..

Für akku low warn led bräuchtest Du dann aber die 5te ader. Also viel besser, den Arduino Nano am Lenker zu montieren.
Du musst mir schon sagen was für einen widerstand Du zwischen gelb und grün verwendet hast.
Wenn der nich klapptist er zu hoch gewählt.
Dann einfach zwei dieser Widerstände parallel zwischen die adern löten.
Und Du solltest die Spannung messen, die sich dann bei Betrieb zwischen den Widerständen einstellt.
Dann solltest Du den Widerstand so weit erniedrigen, bis die Spannung bei absolut vollem Akku unter 5 V und über 4 Volt ist.
Diese Spannung kann man nutzen um den Akkustand zu bestimmen.

Aber das ist jetzt langsam der Zeitpunkt an dem ich mich ausklinke.
So Schnickschnack ist Dein Privatvergnügen.
Kannst ja mit Deinem Sohn anfangen Arduino Tutorials zu schauen.
 
B

bigpuster

Mitglied seit
09.05.2020
Beiträge
27
Kannst Du also tatsächlich die drei Stufen über den Kippschalter einstellen und die interne LED am Nano blinkt dann 1x, 2x oder 3x ?!
Blinken kann ich nicht sagen, da ich den Arduino in einen undurchsichtigen Kasten eingebaut und mit Kabelbinder am Lenker befestigt hatte. Aber eine unterschiedlich starke Unterstützung habe ich mir zumindest eingebildet. Morgen fahre ich länger, klebe den Arduino ein und lasse den Deckel ab, dann kann ich die LEDs sehen
Du musst mir schon sagen was für einen widerstand Du zwischen gelb und grün verwendet hast.
Du hattest 500k vorgeschlagen. Den habe ich genommen. Dann lege ich immer einen parallel dazu und Taste mich runter.
Die meiste Zeit ist im übrigen mein Sohn gefahren. Er war ziemlich beeindruckt... Ich lasse ihn mal in dem. Glauben, dass ich das geschafft habe
Post automatically merged:

Hab mich mal mit einem Multimeter selbst vermessen. Liege bei 140k. Also mit drei bis vier parallel von den 500k müsste es passen. Hab leider sonst nichts passendes herumliegen
 
Zuletzt bearbeitet:
B

bigpuster

Mitglied seit
09.05.2020
Beiträge
27
3x 500k parallel geht. Im Stand reagiert der Arduino prompt auf die Änderung des onoffon Schalters und die Anzahl der LED Blinker ändert sich entsprechend
 
verlierer

verlierer

Mitglied seit
09.05.2012
Beiträge
106
Ort
bayern/thüringen
Blinken kann ich nicht sagen, da ich den Arduino in einen undurchsichtigen Kasten eingebaut und mit Kabelbinder am Lenker befestigt hatte. Aber eine unterschiedlich starke Unterstützung habe ich mir zumindest eingebildet. Morgen fahre ich länger, klebe den Arduino ein und lasse den Deckel ab, dann kann ich die LEDs sehen
Den Nano komplett (mit Heissklebepistole) zu vergießen halte ich für ziemlich dumm.
Meine Idee mit der gekürzten Multivitamintablettenröhre war da schon deutlich besser. Die kannst Du auch farbig einsprühen oder mit feinem Sandpapier weiss schleifen. Löcher bohren geht durch das dünne Plastik schlecht weil es splittert. Mit dem Lötkolben kann man aber prima runde Löcher für Schalter, Kabel und LED schmelzen.

Es ist noch viel zu früh um die Bastelei als so stabil einzustufen, dass man die komplette Elektronik einklebt.
 
B

bigpuster

Mitglied seit
09.05.2020
Beiträge
27
Ich habe nur die Ecken eingeklebt, damit er im Gehäuse nicht herumwackelt.
Ansonsten funktioniert es schon gut. Die Kinder sind begeistert und ich bin heute einige Runden gefahren. Gerade Bergfahrten machen Spaß :D
 
Thema:

Sunstar S03+

Sunstar S03+ - Ähnliche Themen

  • Problem mit Sunstar S03+

    Problem mit Sunstar S03+: Hallo :) Bitte entschuldigen Sie mein Deutsch. Google hat mir beim Übersetzen geholfen. :-) Ich habe gerade die Batterie (und den Halter) meines...
  • Sunstar S03 Zahnkranz / Ritzel gesucht

    Sunstar S03 Zahnkranz / Ritzel gesucht: (Zahnkranz-Nr. WB 304-41T) Falls Jemand dieses Teil übrig hat bitte melden. Ich benötige es als Ersatzteil. Die Hersteller-Firma gibt es leider...
  • Suche Sunstar s03 bedienteil

    Suche Sunstar s03 bedienteil: Hallo zusammen ich habe mir ein sunstar s03 Motor gekauft nur habe ich kein bedienteil und als ich nachgeforscht habe musste ich feststellen das...
  • Sunstar s03 bedienteil

    Sunstar s03 bedienteil: Hallo zusammen ich habe mir ein sunstar s03 Motor gekauft nur habe ich kein bedienteil und als ich nachgeforscht habe musste ich feststellen das...
  • Similar threads
  • Problem mit Sunstar S03+

    Problem mit Sunstar S03+: Hallo :) Bitte entschuldigen Sie mein Deutsch. Google hat mir beim Übersetzen geholfen. :-) Ich habe gerade die Batterie (und den Halter) meines...
  • Sunstar S03 Zahnkranz / Ritzel gesucht

    Sunstar S03 Zahnkranz / Ritzel gesucht: (Zahnkranz-Nr. WB 304-41T) Falls Jemand dieses Teil übrig hat bitte melden. Ich benötige es als Ersatzteil. Die Hersteller-Firma gibt es leider...
  • Suche Sunstar s03 bedienteil

    Suche Sunstar s03 bedienteil: Hallo zusammen ich habe mir ein sunstar s03 Motor gekauft nur habe ich kein bedienteil und als ich nachgeforscht habe musste ich feststellen das...
  • Sunstar s03 bedienteil

    Sunstar s03 bedienteil: Hallo zusammen ich habe mir ein sunstar s03 Motor gekauft nur habe ich kein bedienteil und als ich nachgeforscht habe musste ich feststellen das...
  • Oben