Go Down

Topic: mehrere Relais schalten (Read 1 time) previous topic - next topic

HotSystems

@herbk
Danke, dass du auf alle Anmerkungen eingehst.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

SpaghettiCode

#31
Dec 03, 2018, 10:36 am Last Edit: Dec 03, 2018, 10:37 am by SpaghettiCode
Hallo,

ich habe das gerade mal für mich durchgespielt, da ich das auch irgendwann ähnlich brauche, hier aber mit den Werten für den TO.
Die Spannungsteiler sind individuell angepasst, außer an A0 hat man immer einen Pegel von ~ 4,0V bei ZellenNennspannung an A1 bis A5, damit hat man den Messbereich des ADC bei 5V Referenz zu 80% ausgenutzt. Die gemessen Spannung errechnet sich dann über den Spannungsteiler, die einzelne Zelle jeweils durch Abzug des darunter gemessenen Pegels. Die Kondensatoren habe ich im Plan weggelassen, kommen aber jeweils an die ADC-Eingänge.

Gruß André


herbk

mal wieder ein Zwischenstand von dieser Geschichte...:

Grundsätzlich funktioniert es jetzt erst mal, teilweise.... Danke an dieser Stelle an die Helfer.
Der Fehler sass nätürlich mal wieder vor dem Bildschirm.   :smiley-red: Ich hatt im sketch die Vergleichswerte falsch (auf die Spannung vor dem Spannungsteiler statt nach ihm), also viel zu hoch, gesetzt.
Nachdem ich die Werte korrigiert habe, wird jetzt der Ladestrom bei 2,55V Zellenspannung getrennt und bei 2,25 wieder eingeschaltet.
Allerdings leider nur an den Zellen die am A1, A2, A5 und A6 hängen.
An A3 und A4 misst der Arduino scheinbar nichts, denn A5 schaltet bei einer Wert wie wenn "spanndiv4" 0 wäre, A6 schaltet dann wieder richtig.
Was auch für das Fehelen eines Messwertes spricht: Die "Unterspannungs Sicherung" reagiert auch unmittelbar nach dem Einschalten des Arduino.
Spannung liegt an A3 und A4 aber jeweils die Richtige an, das habe ich wiederholt nachgemessen.

Auch den sketch habe ich jetzt wiederholt durch ohne noch einen Fehler (außer der unprofessionellen Struktur) zu erkennen...

Code: [Select]
/*
Experimentelle Laderegelung für "12V" LTO Akkus.
Die Regelung misst jede Zelle einzeln und schaltet den Ladestrom bei Erreichen der Ladeschlussspannung ab.
Es wird jede Zelle separat geladen, weshalb auch die Zellenspannung separat gemessen und der Ladestrom
für jede Zelle separat geschalten wird.


*/

const byte voltin1 = A1; // input Pin für Spannung Zelle 1
const byte voltin2 = A2; // input Pin für Spannung Zelle 2
const byte voltin3 = A3; // input Pin für Spannung Zelle 3
const byte voltin4 = A4; // input Pin für Spannung Zelle 4
const byte voltin5 = A5; // input Pin für Spannung Zelle 5
const byte voltin6 = A6; // input Pin für Spannung Zelle 6

//const byte voltinall = A7; // input Pin für Spannung ganze Batterie

const int lssp = 130; // digitalwert für Ladeschlussspannung
const int lwasp = 114; // digitalwert für wiederaufnahme des Ladevorgangs
const int cutoffsp = 100; // digitalwert für Unterspannungs Abschaltung

int voltzelle1 = 120; // Startwerte setzen
int voltzelle2 = 120;
int voltzelle3 = 120;
int voltzelle4 = 120;
int voltzelle5 = 120;
int voltzelle6 = 120;


void setup() {
  digitalWrite(2, HIGH);
  pinMode(2, OUTPUT);
  digitalWrite(3, HIGH); 
  pinMode(3, OUTPUT);
  digitalWrite(4, HIGH);
  pinMode(4, OUTPUT);
  digitalWrite(5, HIGH);
  pinMode(5, OUTPUT);
  digitalWrite(6, HIGH);
  pinMode(6, OUTPUT);
  digitalWrite(7, HIGH);
  pinMode(7, OUTPUT);

  digitalWrite(10, HIGH);
  pinMode(10, OUTPUT);

 
}



void loop() {

int spanndiv1 = 0; // Spannungs Ausgleichswerte auf 0 setzen
int spanndiv2 = 0;
int spanndiv3 = 0;
int spanndiv4 = 0;
int spanndiv5 = 0;


voltzelle1 = analogRead(voltin1); //Spannung an A 1 auslesen
spanndiv1 = voltzelle1; // ausgelesenen Wert merken

voltzelle2 = analogRead(voltin2); //Spannung an A 2 auslesen
spanndiv2 = voltzelle2;
voltzelle2 = voltzelle2 - spanndiv1;

voltzelle3 = analogRead(voltin3); //Spannung an A 3 auslesen
spanndiv3 = voltzelle3;
voltzelle3 = voltzelle3 - spanndiv2;

voltzelle4 = analogRead(voltin4); //Spannung an A 4 auslesen
spanndiv4 = voltzelle4;
voltzelle4 = voltzelle4 - spanndiv3;

voltzelle5 = analogRead(voltin5); //Spannung an A 5 auslesen
spanndiv5 = voltzelle5;
voltzelle5 = voltzelle5 - spanndiv4;

voltzelle6 = analogRead(voltin6); //Spannung an A 6 auslesen
voltzelle6 = voltzelle6 - spanndiv5;


if (voltzelle1 >= lssp) digitalWrite(2, LOW); //Schaltet bei Ladeschlussspannung den Ladestrom ab
if (voltzelle1 <= lwasp) digitalWrite(2, HIGH); //Schaltet bei Wiederaufnahmespannung den Ladestrom an.
if (voltzelle1 <= cutoffsp) digitalWrite(10, LOW); //Nimmt bei Unterspannung einer Zelle die Last von der Batterie.

if (voltzelle2 >= lssp) digitalWrite(3, LOW); //Schaltet bei Ladeschlussspannung den Ladestrom ab
if (voltzelle2 <= lwasp) digitalWrite(3, HIGH); //Schaltet bei Wiederaufnahmespannung den Ladestrom an.
if (voltzelle2 <= cutoffsp) digitalWrite(10, LOW); //Nimmt bei Unterspannung einer Zelle die Last von der Batterie.

if (voltzelle3 >= lssp) digitalWrite(4, LOW); //Schaltet bei Ladeschlussspannung den Ladestrom ab
if (voltzelle3 <= lwasp) digitalWrite(4, HIGH); //Schaltet bei Wiederaufnahmespannung den Ladestrom an.
if (voltzelle3 <= cutoffsp) digitalWrite(10, LOW); //Nimmt bei Unterspannung einer Zelle die Last von der Batterie.

if (voltzelle4 >= lssp) digitalWrite(5, LOW); //Schaltet bei Ladeschlussspannung den Ladestrom ab
if (voltzelle4 <= lwasp) digitalWrite(5, HIGH); //Schaltet bei Wiederaufnahmespannung den Ladestrom an.
if (voltzelle4 <= cutoffsp) digitalWrite(10, LOW); //Nimmt bei Unterspannung einer Zelle die Last von der Batterie.

if (voltzelle5 >= lssp) digitalWrite(6, LOW); //Schaltet bei Ladeschlussspannung den Ladestrom ab
if (voltzelle5 <= lwasp) digitalWrite(6, HIGH); //Schaltet bei Wiederaufnahmespannung den Ladestrom an.
if (voltzelle5 <= cutoffsp) digitalWrite(10, LOW); //Nimmt bei Unterspannung einer Zelle die Last von der Batterie.

if (voltzelle6 >= lssp) digitalWrite(7, LOW); //Schaltet bei Ladeschlussspannung den Ladestrom ab
if (voltzelle6 <= lwasp) digitalWrite(7, HIGH); //Schaltet bei Wiederaufnahmespannung den Ladestrom an.
if (voltzelle6 <= cutoffsp) digitalWrite(10, LOW); //Nimmt bei Unterspannung einer Zelle die Last von der Batterie.

}





Rentner

Hallo

Lass dir doch die einzelnen gemessen Gesamtsoannungen und die berechneten Zellenspannungen Mal auf dem Monitor mit Serielle.print anzeigen

Wenn du mit einem Messgerat was messen kannst , aber nicht einlesen könnte es noch sein das der Eingang gestorben ist

Also Test Sketch und ohne deine Schaltung messen ob die Hardware noch okay ist.

Wenn ja muss es an der Schaltung liegen

postmaster-ino

Hi

Wenn Das nicht der komplette Sketch ist, sondern nur der Teil, Der Deinen Fehler zeigt - benutzt Du I²C?
Z.B. für Display-Ausgaben - beim Nano sind A4/A5 SDA und SCL.
Da dürfte dann aber A5 nicht funktionieren. (oder Du hast Dich verzählt und statt A3/A4 ist A4/A5 ... weit her geholt, ich weiß)
A6 und A7 sind reine Analog-IN (gibt's z.B. auf dem Uno nicht) - sollte hier aber eigentlich egal sein.

Aber prüfe erst, ob die Pins noch tun, an Alle die gleiche Spannung und schauen, was der analogRead dazu sagt.

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

harryberlin

blöde zwischenfrage.
macht man das so?:
1. digitalWrite vor pinMode.
2. kein pinMode für die Analogpins

herbk

Das ist der ganze sketch, ich habe kein Display dran.

An die defekten Eingänge hatte ich auch schon gedacht und einen anderen probiert, - genau das gleiche...

Ich habe im sketch A3 und A4 auf A0 und A7 gelegt. Morgen löte ich die Eingänge dann schnell um.
Wenn dann auch nichts geht muss ich halt doch mal ein Display einbauen...

Doc_Arduino

Hallo,

@ harryberlin:
Die Pins sind standardmäßig Eingänge. pinMode mit INPUT ist überflüssig. Außer für INPUT_PULLUP.
Für analoge Eingänge konfiguriert die analogRead Funktion alles weitere.
Es gibt keine pinMode Option für analoge Eingänge.
Den Ausgang setzt man mit digitalWrite auf High vor pinMode Output, wenn man sichergehen möchte das er nicht kurz auf Low zuckt. Ob das lohnt muss man testen.

@ herbk:
Habe nur einen seriellen Monitor eingebaut, damit du erstmal siehst wie die Werte zappeln und was sie überhaupt ausgeben..
Vielleicht ergibt sich daraus alles weitere.
Serieller Monitor der IDE bitte unten rechts auf 250.000 einstellen.

Code: [Select]

/*
  Experimentelle Laderegelung für "12V" LTO Akkus.
  Die Regelung misst jede Zelle einzeln und schaltet den Ladestrom bei Erreichen der Ladeschlussspannung ab.
  Es wird jede Zelle separat geladen, weshalb auch die Zellenspannung separat gemessen und der Ladestrom
  für jede Zelle separat geschalten wird.
*/

const byte voltin1 = A1; // input Pin für Spannung Zelle 1
const byte voltin2 = A2; // input Pin für Spannung Zelle 2
const byte voltin3 = A3; // input Pin für Spannung Zelle 3
const byte voltin4 = A4; // input Pin für Spannung Zelle 4
const byte voltin5 = A5; // input Pin für Spannung Zelle 5
const byte voltin6 = A6; // input Pin für Spannung Zelle 6

//const byte voltinall = A7; // input Pin für Spannung ganze Batterie

const int lssp = 130;     // digitalwert für Ladeschlussspannung
const int lwasp = 114;    // digitalwert für wiederaufnahme des Ladevorgangs
const int cutoffsp = 100; // digitalwert für Unterspannungs Abschaltung

int voltzelle1 = 120; // Startwerte setzen
int voltzelle2 = 120;
int voltzelle3 = 120;
int voltzelle4 = 120;
int voltzelle5 = 120;
int voltzelle6 = 120;

int spanndiv1;        // Spannungs Ausgleichswerte
int spanndiv2;
int spanndiv3;
int spanndiv4;
int spanndiv5;

void setup() {

  Serial.begin(250000);
  
  digitalWrite(2, HIGH);
  pinMode(2, OUTPUT);
  digitalWrite(3, HIGH);
  pinMode(3, OUTPUT);
  digitalWrite(4, HIGH);
  pinMode(4, OUTPUT);
  digitalWrite(5, HIGH);
  pinMode(5, OUTPUT);
  digitalWrite(6, HIGH);
  pinMode(6, OUTPUT);
  digitalWrite(7, HIGH);
  pinMode(7, OUTPUT);

  digitalWrite(10, HIGH);
  pinMode(10, OUTPUT);
}


void loop() {

  voltzelle1 = analogRead(voltin1); //Spannung an A 1 auslesen
  spanndiv1 = voltzelle1; // ausgelesenen Wert merken

  voltzelle2 = analogRead(voltin2); //Spannung an A 2 auslesen
  spanndiv2 = voltzelle2;
  voltzelle2 = voltzelle2 - spanndiv1;

  voltzelle3 = analogRead(voltin3); //Spannung an A 3 auslesen
  spanndiv3 = voltzelle3;
  voltzelle3 = voltzelle3 - spanndiv2;

  voltzelle4 = analogRead(voltin4); //Spannung an A 4 auslesen
  spanndiv4 = voltzelle4;
  voltzelle4 = voltzelle4 - spanndiv3;

  voltzelle5 = analogRead(voltin5); //Spannung an A 5 auslesen
  spanndiv5 = voltzelle5;
  voltzelle5 = voltzelle5 - spanndiv4;

  voltzelle6 = analogRead(voltin6); //Spannung an A 6 auslesen
  voltzelle6 = voltzelle6 - spanndiv5;

  serieller_Monitor();
/*
  if (voltzelle1 >= lssp) digitalWrite(2, LOW); //Schaltet bei Ladeschlussspannung den Ladestrom ab
  if (voltzelle1 <= lwasp) digitalWrite(2, HIGH); //Schaltet bei Wiederaufnahmespannung den Ladestrom an.
  if (voltzelle1 <= cutoffsp) digitalWrite(10, LOW); //Nimmt bei Unterspannung einer Zelle die Last von der Batterie.

  if (voltzelle2 >= lssp) digitalWrite(3, LOW); //Schaltet bei Ladeschlussspannung den Ladestrom ab
  if (voltzelle2 <= lwasp) digitalWrite(3, HIGH); //Schaltet bei Wiederaufnahmespannung den Ladestrom an.
  if (voltzelle2 <= cutoffsp) digitalWrite(10, LOW); //Nimmt bei Unterspannung einer Zelle die Last von der Batterie.

  if (voltzelle3 >= lssp) digitalWrite(4, LOW); //Schaltet bei Ladeschlussspannung den Ladestrom ab
  if (voltzelle3 <= lwasp) digitalWrite(4, HIGH); //Schaltet bei Wiederaufnahmespannung den Ladestrom an.
  if (voltzelle3 <= cutoffsp) digitalWrite(10, LOW); //Nimmt bei Unterspannung einer Zelle die Last von der Batterie.

  if (voltzelle4 >= lssp) digitalWrite(5, LOW); //Schaltet bei Ladeschlussspannung den Ladestrom ab
  if (voltzelle4 <= lwasp) digitalWrite(5, HIGH); //Schaltet bei Wiederaufnahmespannung den Ladestrom an.
  if (voltzelle4 <= cutoffsp) digitalWrite(10, LOW); //Nimmt bei Unterspannung einer Zelle die Last von der Batterie.

  if (voltzelle5 >= lssp) digitalWrite(6, LOW); //Schaltet bei Ladeschlussspannung den Ladestrom ab
  if (voltzelle5 <= lwasp) digitalWrite(6, HIGH); //Schaltet bei Wiederaufnahmespannung den Ladestrom an.
  if (voltzelle5 <= cutoffsp) digitalWrite(10, LOW); //Nimmt bei Unterspannung einer Zelle die Last von der Batterie.

  if (voltzelle6 >= lssp) digitalWrite(7, LOW); //Schaltet bei Ladeschlussspannung den Ladestrom ab
  if (voltzelle6 <= lwasp) digitalWrite(7, HIGH); //Schaltet bei Wiederaufnahmespannung den Ladestrom an.
  if (voltzelle6 <= cutoffsp) digitalWrite(10, LOW); //Nimmt bei Unterspannung einer Zelle die Last von der Batterie.
*/
}


void serieller_Monitor ()
{  
  static const unsigned int INTERVAL = 200;
  static unsigned long last_ms = 0;

  if (millis() - last_ms < INTERVAL) return; // Zeit noch nicht erreicht, Funktion abbrechen

  last_ms += INTERVAL;
  Ueberschriftszeile();
  Serial.print(voltzelle1);   Serial.print('\t');
  Serial.print(voltzelle2);   Serial.print('\t');
  Serial.print(voltzelle3);   Serial.print('\t');
  Serial.print(voltzelle4);   Serial.print('\t');
  Serial.print(voltzelle5);   Serial.print('\t');
  Serial.print(voltzelle6);  
  Serial.println();
}


void Ueberschriftszeile ()
{
  static int counter = 33;

  counter++;

  if (counter < 30) return; // Zeilen noch nicht erreicht, Funktion abbrechen

  counter = 0;
  Serial.print(F("volt1"));  Serial.print('\t');
  Serial.print(F("volt2"));  Serial.print('\t');
  Serial.print(F("volt3"));  Serial.print('\t');
  Serial.print(F("volt4"));  Serial.print('\t');
  Serial.print(F("volt5"));  Serial.print('\t');
  Serial.print(F("volt6"));  
  Serial.println();
}
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

herbk

Hallo Doc Arduino,

Danke, ich denke das hat etwas weitergeholfen. - jedenfalls ist sichtbar, dass die Spannungen ausgelesen werden...
(Die Frage ist jetzt: wie kommt das oben beschriebene Verhalten zu stande... wieder ein Denkfehler beim Messen?? Da muss ich mir beim Messen noch mal genau auf die Finger sehen...)


OK, wenn alle Eingänge funktionieren, kann es ja nur am Skech oder den Ausgängen liegen.

Die Messwerte selbst finde ich ganz OK, das Springen um einen oder 2 Werte könnte man sicher mit einem Durchschnittswert aus 5 oder 10 Messungen ausgleichen.
Trotzdem: woher kommt es? Die Zellen haben doch eine konstante Spannung...
Die Unterschiede zwischen den Zellen sind auch OK, es entspricht dem Ladezustand der jeweiligen Zelle.


Noch was: wie mache ich es, dass das hochgeladene Bild angezeigt wird?

herbk

Ich habe jetzt noch mal einen neuen Nano für den Sketch verwendet und siehe da jetz schalten auch die Relais die auf A3 und A4 reagieren sollen. Scheinbar habe ich 2 Nanos mit dem gleichen Defekt...

Nochmal ein Danke an Doc_Arduino, das mit dem seriellen Monitor war eine gute Idee.
Am Monitor konnte ich beim Ändern der Zellenspannungen erkennen, dass das ganze so nicht geht... Verliert eine Zelle deutlich Spannung, verfälscht dies den Messwert an der Zelle "darüber" in Richtung voll.

Ich denke ich werde doch jede Zelle mit einen eigenen Nano messen...

SpaghettiCode

Verliert eine Zelle deutlich Spannung, verfälscht dies den Messwert an der Zelle "darüber" in Richtung voll.
Wenn das passiert, wertest Du die gemessenen Spannungen falsch aus. Du bekommst doch die Spannung der jeweiligen Zelle über die Differenzbildung der Spannung drunter problemlos raus.

Gruß André


herbk

Hi André,

[/quote]

Wenn das passiert, wertest Du die gemessenen Spannungen falsch aus. Du bekommst doch die Spannung der jeweiligen Zelle über die Differenzbildung der Spannung drunter problemlos raus.

Gruß André
Du hast recht, aber der Fehler liegt wieder darin wie ich das Fallen einer Zellenspannung simuliere, nicht in der Auswertung

Doc_Arduino

#42
Dec 05, 2018, 11:46 am Last Edit: Dec 05, 2018, 11:49 am by Doc_Arduino
Hallo,

der gegenseitige Einfluss der Messwerte ist normal, wenn du den vorherigen Messwert beim nächsten subtrahierst.
Ich habe die Variablenname für mehr Überblick und die Rechnung geändert. Theoretisch sollte das funktionieren. Es dürfte sich nichts gegenseitig beeinflussen.
Code: [Select]


/*
  Experimentelle Laderegelung für "12V" LTO Akkus.
  Die Regelung misst jede Zelle einzeln und schaltet den Ladestrom bei Erreichen der Ladeschlussspannung ab.
  Es wird jede Zelle separat geladen, weshalb auch die Zellenspannung separat gemessen und der Ladestrom
  für jede Zelle separat geschalten wird.
*/

const byte messPin1 = A1; // input Pin für Spannung Zelle 1
const byte messPin2 = A2; // input Pin für Spannung Zelle 2
const byte messPin3 = A3; // input Pin für Spannung Zelle 3
const byte messPin4 = A4; // input Pin für Spannung Zelle 4
const byte messPin5 = A5; // input Pin für Spannung Zelle 5
const byte messPin6 = A6; // input Pin für Spannung Zelle 6

//const byte voltinall = A7; // input Pin für Spannung ganze Batterie

const int lssp = 130;     // digitalwert für Ladeschlussspannung
const int lwasp = 114;    // digitalwert für wiederaufnahme des Ladevorgangs
const int cutoffsp = 100; // digitalwert für Unterspannungs Abschaltung

int messpunkt1;
int messpunkt2;
int messpunkt3;
int messpunkt4;
int messpunkt5;
int messpunkt6;

int spanndiv1;        // Zellenspannung - Differenzwert der Messpunkte
int spanndiv2;
int spanndiv3;
int spanndiv4;
int spanndiv5;
int spanndiv6;

void setup() {

  Serial.begin(250000);
  
  digitalWrite(2, HIGH);
  pinMode(2, OUTPUT);
  digitalWrite(3, HIGH);
  pinMode(3, OUTPUT);
  digitalWrite(4, HIGH);
  pinMode(4, OUTPUT);
  digitalWrite(5, HIGH);
  pinMode(5, OUTPUT);
  digitalWrite(6, HIGH);
  pinMode(6, OUTPUT);
  digitalWrite(7, HIGH);
  pinMode(7, OUTPUT);

  digitalWrite(10, HIGH);
  pinMode(10, OUTPUT);
}


void loop() {

  messpunkt1 = analogRead(messPin1); //Spannung an A 1 auslesen
  spanndiv1 = messpunkt1; // ausgelesenen Wert merken

  messpunkt2 = analogRead(messPin2); //Spannung an A 2 auslesen
  spanndiv2 = messpunkt2 - messpunkt1;
  
  messpunkt3 = analogRead(messPin3); //Spannung an A 3 auslesen
  spanndiv3 = messpunkt3 - messpunkt2;
  
  messpunkt4 = analogRead(messPin4); //Spannung an A 4 auslesen
  spanndiv4 = messpunkt4 - messpunkt3;
  
  messpunkt5 = analogRead(messPin5); //Spannung an A 5 auslesen
  spanndiv5 = messpunkt5 - messpunkt4;
  
  messpunkt6 = analogRead(messPin6); //Spannung an A 6 auslesen
  spanndiv6 = messpunkt6 - messpunkt5;

  serieller_Monitor();
/*
  if (spanndiv1 >= lssp) digitalWrite(2, LOW); //Schaltet bei Ladeschlussspannung den Ladestrom ab
  if (spanndiv1 <= lwasp) digitalWrite(2, HIGH); //Schaltet bei Wiederaufnahmespannung den Ladestrom an.
  if (spanndiv1 <= cutoffsp) digitalWrite(10, LOW); //Nimmt bei Unterspannung einer Zelle die Last von der Batterie.

  if (spanndiv2 >= lssp) digitalWrite(3, LOW); //Schaltet bei Ladeschlussspannung den Ladestrom ab
  if (spanndiv2 <= lwasp) digitalWrite(3, HIGH); //Schaltet bei Wiederaufnahmespannung den Ladestrom an.
  if (spanndiv2 <= cutoffsp) digitalWrite(10, LOW); //Nimmt bei Unterspannung einer Zelle die Last von der Batterie.

  if (spanndiv3 >= lssp) digitalWrite(4, LOW); //Schaltet bei Ladeschlussspannung den Ladestrom ab
  if (spanndiv3 <= lwasp) digitalWrite(4, HIGH); //Schaltet bei Wiederaufnahmespannung den Ladestrom an.
  if (spanndiv3 <= cutoffsp) digitalWrite(10, LOW); //Nimmt bei Unterspannung einer Zelle die Last von der Batterie.

  if (spanndiv4 >= lssp) digitalWrite(5, LOW); //Schaltet bei Ladeschlussspannung den Ladestrom ab
  if (spanndiv4 <= lwasp) digitalWrite(5, HIGH); //Schaltet bei Wiederaufnahmespannung den Ladestrom an.
  if (spanndiv4 <= cutoffsp) digitalWrite(10, LOW); //Nimmt bei Unterspannung einer Zelle die Last von der Batterie.

  if (spanndiv5 >= lssp) digitalWrite(6, LOW); //Schaltet bei Ladeschlussspannung den Ladestrom ab
  if (spanndiv5 <= lwasp) digitalWrite(6, HIGH); //Schaltet bei Wiederaufnahmespannung den Ladestrom an.
  if (spanndiv5 <= cutoffsp) digitalWrite(10, LOW); //Nimmt bei Unterspannung einer Zelle die Last von der Batterie.

  if (spanndiv6 >= lssp) digitalWrite(7, LOW); //Schaltet bei Ladeschlussspannung den Ladestrom ab
  if (spanndiv6 <= lwasp) digitalWrite(7, HIGH); //Schaltet bei Wiederaufnahmespannung den Ladestrom an.
  if (spanndiv6 <= cutoffsp) digitalWrite(10, LOW); //Nimmt bei Unterspannung einer Zelle die Last von der Batterie.
*/
}


void serieller_Monitor ()
{  
  static const unsigned int INTERVAL = 200;
  static unsigned long last_ms = 0;

  if (millis() - last_ms < INTERVAL) return; // Zeit noch nicht erreicht, Funktion abbrechen

  last_ms += INTERVAL;
  Ueberschriftszeile();
  Serial.print(spanndiv1);   Serial.print('\t');
  Serial.print(spanndiv2);   Serial.print('\t');
  Serial.print(spanndiv3);   Serial.print('\t');
  Serial.print(spanndiv4);   Serial.print('\t');
  Serial.print(spanndiv5);   Serial.print('\t');
  Serial.print(spanndiv6);  
  Serial.println();
}


void Ueberschriftszeile ()
{
  static int counter = 33;

  counter++;

  if (counter < 30) return; // Zeilen noch nicht erreicht, Funktion abbrechen

  counter = 0;
  Serial.print(F("volt1"));  Serial.print('\t');
  Serial.print(F("volt2"));  Serial.print('\t');
  Serial.print(F("volt3"));  Serial.print('\t');
  Serial.print(F("volt4"));  Serial.print('\t');
  Serial.print(F("volt5"));  Serial.print('\t');
  Serial.print(F("volt6"));  
  Serial.println();
}
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

herbk

Hallo Doc_Arduino,

Noch mal Danke, aber das war wirklich wieder ein Fehler im Messaufbau.
Wenn ich es (das Messen) richtig mache, dann bekomme ich mit Deinem letzten Sketch genau die gleichen Abweichungen als mit dem Vorherigen. Der Messwert aller anderen Zellen springt aber nur um 1 bis 2 Digits (z.B. von 122 auf 124) hoch wenn der Überladeschutz einer Zelle schaltet.

Das ist jetzt aber auch erst mal "im Lehrlauf", es hat noch keine Ladung bei den Schalttests stattgefunden. Ich rechne damit, dass mit Ladestrom die Sprünge deutlich größer werden...

 

Doc_Arduino

Hallo,

okay. Etwas zappeln bzw. schwanken die Digits immer. 1-2 Digits sind bei Werten um die 100 2%. Solange das nicht stört.

Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Go Up