Go Down

Topic: Drehzahlmesser am Moped - stürzt ab/friert unregelmäßig ein (Read 458 times) previous topic - next topic

combie

Quote
Bist du sicher, dass die 100V auch bis an die Batterie kommen (könnten)?
Aber ganz sicher!

Hier ein Teil der Testverfahren, welche eine Baugruppe im KFZ Bereich ohne Störung überstehen muss.
http://www.compel.ru/wordpress/wp-content/uploads/2017/05/ISO-7637-22011E.pdf

Die Tests wären nicht so hart, wenn diese Störungen NICHT auftreten würden.

Das mag bei einem Moped etwas anders aussehen...
Aber tendenziell passt der Schuh auch dort.
Wer seine Meinung nie zurückzieht, liebt sich selbst mehr als die Wahrheit.

Quelle: Joseph Joubert

HotSystems

Bist du sicher, dass die 100V auch bis an die Batterie kommen (könnten)? Ich habe auf meinem Moped onboard schon einen Spannungsregler und bin auch recht sicher, dass der direkt hinter der Lichtmaschine hängt und für alles was dran hängt die Spannung auf ~14V oder sowas begrenzt (weiß ich aber nicht sicher zugegebenermaßen). Hätte jetzt gedacht das ist auch üblich, weil alles andere gefährlich für Verbraucher/Batterie wäre?! Klär mich gern auf wenn du zu dem Thema mehr weißt als ich.
Sicher nicht, aber es sind Spannungssitzen, die im Netz auftreten können.
Hier etwas zum nachlesen. https://www.mikrocontroller.net/topic/272130
Gruß Dieter

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

Faddi

Hi,
also was ich jetzt schonmal sagen kann ist:
Wenn ich das Signalkabel für den Interrupt abziehe, stürzt der Atmega trotzdem ab.
Morgen kommt hoffentlich der Entstörfilter an, dann baue ich den noch fix vor der Mopedtour ein.

Viele Grüße,
Marcus

HotSystems

Hi,
also was ich jetzt schonmal sagen kann ist:
Wenn ich das Signalkabel für den Interrupt abziehe, stürzt der Atmega trotzdem ab.
Morgen kommt hoffentlich der Entstörfilter an, dann baue ich den noch fix vor der Mopedtour ein.

Viele Grüße,
Marcus
Na dann ist schon mal klar, dass es nicht (allein) der Interrupt-Pin ist.

Allerdings die Frage, an welcher Stelle hast du das Kabel abgezogen ?
Am Motor ? Dann ist der Eingang offen und kann noch Störungen empfangen.
Am Chip ? Dann liegt es def. mit an der Betriebsspannung.

Gruß Dieter

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

Faddi

Moin,
das Kabel hatte ich hinter dem Spannungsregler (von der Lichtspule her gesehen) abgezogen. Vom Eingangspin des Optokopplers lag dann das ca. 0,5m lange Kabelende frei.

Es gibt Neuigkeiten! Ich will den Tag nicht vor dem Abend loben und der Langzeittest wird´s zeigen, aber:
Ich habe gestern nochmal eine Kleinigkeit (?) am Code angepasst und konnte eben gerade zum aller ersten Mal ohne Absturz zur Arbeit fahren. Zudem hatte ich auch keine Ausreißer der Drehzahlanzeige in die 9000er Drehzahlen wie noch vor wenigen Tagen, sondern die Schwankungen waren bei +/-50. Bei Vollgas schöne 7200, wenn ich im Windschatten anderer Fahrzeuge etwas schneller als normal fahren konnte auch 7600 Umdrehungen, im Stand 1800 - also eigentlich perfekt  :D

Ich habe ja drei 7-Segmentziffern, die die 1000er, 100er und 10er der Drehzahl anzeigen. Was passiert, wenn sich der Atmega doch mal "verzählt" und es Ausreißer, wie ich sie letztens hatte, in die 9000er Drehzahlen geht? Was passiert bei Drehzahlen >= 10.000? Kann dadurch das Schieberegister aus dem Tritt kommen und der Atmega daher abstürzen? Ich weiß es jedenfalls nicht und habe daher dem Programm einfach eine Begrenzung hinzugefügt, dass bei Drehzahlen >=9500 die Drehzahl auf 9500 begrenzt wird.
Das erstmal als ein hoffnungsvolles Update meines Problems...

Viele Grüße,
Marcus

noiasca

Kann dadurch das Schieberegister aus dem Tritt kommen und der Atmega daher abstürzen?
wenn dein Code noch so aussieht wie auf Seite 1 dann nein. In deiner SSA() schickst du nur drei Stellen raus. Für eine "Zehntausender" Stelle hast du keinen Code. Wie soll dann ein Schieberegister danebentreten?

Aber so allgemein:

An deiner Stelle würde ich noch alle Variablen prüfen ob sie den richtigen Datentyp haben.
Jedes "int" ist grundsätzlich mal verdächtigt, dass sich der Arduino Programmierer keine Gedanken gemacht hat, seltene unsigned ebenso.

Code: [Select]

// Pinbelegungen ###################################################################
int impulsPin           = 2;                                                          // ImpulsPin auf Pin 2 --> Interrupt
int helligkeit          = 3;                                                          // Pin verbunden mit "OE" des 74HC595 als PWM zum Dimmen --> Richtung GND: Je niedriger, desto heller
int shiftPin            = 4;                                                          // Pin verbunden mit SRCLK des 74HC595
int storePin            = 5;                                                          // Pin verbunden mit RCLK des 74HC595
int dataPin             = 6;                                                          // Pin verbunden mit SER des 74HC595
int zehn                = 7;                                                          // 7SA: 10er-Stelle an/aus
int hundert             = 8;                                                          // 7SA: 100er-Stelle an/aus
int tausend             = 9;                                                          // 7SA: 1000er-Stelle an/aus
int fotodiode           = A2;                                                         // Fotodiode zur Helligkeitserkennung
int Fuellstand          = A0;                                                         // Ermittlung des Füllstands (Reedkontakte)
int Leerlaufanzeige     = 10;                                                         // Leerlaufanzeige dauerhaft an, wartet auf GND von Leerlaufkontaktschalter

// Variablen ######################################################################
Time t;
volatile unsigned long drehimpuls = 0;                                                // Zählen der Drehimpulse
unsigned long drehzahl  = 0;                                                          // Drehzahl in min^-1
int LEDintensitaet      = 0;                                                          // Leuchtkraft der LEDs
int LEDintensitaet_alt  = 0;                                                          // alter Wert Leuchtkraft der LEDs
int sensorWert          = 0;                                                          // Wert der Fotodiode (0 ... 1023)
int Fuellstandswerte[5] = {0,1,2,3,4};                                                // Wert f. Spannung vom Tankgeber
int tankWert            = 0;                                                          // Faktor für Tankanzeige
byte tankWert_alt       = 0;                                                          // alter Faktor für Tankanzeige
int checkintervall      = 2000;                                                       // Wann soll die Hellligkeit der LEDs aktualisiert werden? --> Puffer
int messintervall       = 500;                                                        // Messintervall der Drehzahl (ursprünglich 1500)
int stunden;
int minuten;
int minuten_alt;
int Jahr;
int Monat;
int Tag;
byte Wochentag;
byte Sommerzeit         = 0;


const machen was const sein kann.

wozu holst du dir die Zeit Variablen in extra globale Variablen?
Code: [Select]

  minuten = t.min;
  Jahr    = t.year;
  Monat   = t.mon;
  Tag     = t.date;
Wochentag = t.dow;


du kannst ja auch direkt t.date etc. zugreifen.

Deine Sommerzeitumstellung ... kann ich mir nicht vorstellen, dass die sauber ist:

Code: [Select]

stunden = t.hour + Sommerzeit;


bist schon mal um Mitternacht mit dem Moped unterwegs gewesen? Wenn du zu 23 +1 zählst, was wird dir dann angezeigt? Welches Datum hast dann?
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

Faddi

Hi,
ja, der Code ist, bis auf die "Ergänzung des Überlaufs" noch der Gleiche.
Stimmt, von "const" habe ich auch schonmal was mitbekommen, das werde ich noch umändern. Ich habe jetzt fast 2 Jahre am Code rumgetüftelt, damals wusste ich noch nichts davon. Habe das danach wohl immer übersehen, nicht mehr kontrolliert und keinen Gedanken dran verschwendet. Danke für den Hinweis!

Den Code von der Sommerzeit habe ich irgendwo gefunden, ich glaube sogar hier im Forum. Den verstehe ich auch mathematisch ehrlich gesagt nicht, aber ich habe ihn versucht mit meinen mir zur Verfügung stehenden Mitteln anzupassen. Vorher fand ich den so kompliziert, dass ich gar nichts davon verstanden habe. Aber zumindest hat die Umstellung der Sommerzeit gepasst. Mehr habe ich damit noch nicht getestet. Ich bin mir relativ sicher, dass die Uhrzeit gegen Mitternacht passt. Kann aber auch sein, dass das noch vor der diesjährigen Sommerzeit war - das habe ich nämlich erst dieses Jahr, kurz vor der Umstellung reingebracht.

Mit den Variablen der Uhrzeit hatte ich Probleme, die am OLED anzuzeigen. Wahrscheinlich war das nur ein Syntax-Fehler, den ich einfach nicht geschnallt hab. Das kann ich jetzt leider nicht mehr nachvollziehen - das ist der Nachteil, wenn man da so lange dran rumbastelt ;)
Aber die extra Variablen dafür probiere ich auch herauszunehmen.

Viele Grüße,
Marcus

noiasca

Die Formel zum Feststellen der Sommerzeit wird schon korrekt sein.
Nur was du dann daraus machst, ist ein "Schmarren". Man zählt nicht einfach zur Stunde 1 dazu sondern zum aktuellen Zeitstempel den Versatz für die Sommerzeit. Dann gibt man den veränderten Zeitstempel aus. In den meisten Beispielen für Mitteleuropa wirst du irgendwas mit +3600 finden (60 Minuten *60 Sekunden ) und dann die Addition auf die aktuelle interne Zeit. Vorteil, Überläufe um Mitternacht, Tage, Wochentage, Monate ... alles wird korrekt sein.
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

Faddi

Hi,
ich gebe dir vollkommen Recht, da muss ich nochmal ran. Bisher ist's nur echt nicht aufgefallen mit der Uhrzeit.
Der atmega ist eben wieder ohne Absturz durchgelaufen - es scheint, als wäre da doch etwas mit den Drehzahlen > 10000 nicht in Ordnung gewesen. Gleich bin ich über das Wochenende auf Mopedtour und werde im Anschluss berichten. Der Entstörfilter bleibt erstmal draußen, ich nehme ihn aber mit.

Viele Grüße,
Marcus

Go Up