uplaod mit USB und ISP macht 2 Programme daraus

Hi, ich habe gerade mit meinem Projekt ein großes Problem. >:( >:(
Ich habe einen Code geschrieben und den lade ich auf einen Arduino über USB, funktioniert. Super.
Jetzt lade ich den gleichen Code( nichts verändert) auf meine Platine , ebenfalls ein 328er, nur über ISP ( AVRISP MKII) und er funktioniert nicht. ( alles funktioniert, dallas, ausgabe, nur die Zeit nicht)
In beiden fällen sind die Belegungen die gleichen, die Platine ist die fertige Variante und der UNO soll nur zum testen sein. Ich habe auf der Platine leider keine Serial ausgabe, deswegen der UNO.
Während der Code auf dem UNO ohne Problem läuft, habe ich auf der Platine nur Probleme.

  1. upload mit ISP , wird der eeprom immer wieder gelöscht. ( ich glaube, das wäre normal, oder)

  2. es geht hier rum:

if (millis() - altMillis >= 900)
{
altMillis = millis();
sekunden++;

return; <---------- WICHTIG!!!
}

//Minute***
if (sekunden > 59)
{
sekunden = 0;
minuten++;
test_minute = 1;
}
wenn ich return einfüge, dann zählt er genau richtig, ABER nur auf dem UNO (SerialMonitor), auf der Platine geht garnichts, ( habe es auf dem LCD ausgegeben), dort zählt er immer weiter, auch wenn sekunden > 59 ist. Als ob es die nächste if Anweisung nicht geben würde? :o
Auf dem UNO setzt er sekunden richtig wieder auf 0.

wenn ich aber return entferne, dann zählt der UNO langsam und die sekunden stimmen nicht ABER auf der Platine zählt er jetz die sekunden und setzt sie dann wieder auf 0

Warum gibt es hier einen unterschied?? Der upload erfolgt erst auf den UNO und dann auf die Platine( nichts verändert) oder umgekehrt, beides das gleiche.

Hardware sollte es nicht sein, weil die Temperaturmessungen funktionieren, der Rest geht auch und die LCD sind die gleichen, alles das gleiche.

Der compiller meckert auch nicht.
Ich sitze schon den ganzen Tag vor dem Problem und finde kein Lösung! >:( >:(

Wer kann mir helfen??

MfG Marco

mit welcher Frequenz ist den der stand alone getaktet?

Aha. Du bist sicher daß alles stimmt, daß weder Fehler in der Hardware noch in dem Sketch sind und gibst uns darum diese Informationen nicht.

Du vertraust auf unsere Kristallkugeln, Kaffeesatz und unser Gefühl im Urin.

....

Also wenn die Zeiten nicht stimmen, kann es an dem Takt liegen. Dann würde man es aber bei der Temperatur Messung merken. Ich seh auf deiner Platine die heiß geliebten Abblockkondensatoren nicht.

Steck doch mal den Standalone 328 ins Uno Board. Dann weisst du schonmal, ob es an der restlichen Hardware oder an uC liegt.

Hi, mir geht es um den Befehl return ( mit wichtig markiert, siehe oben), wenn ich ihn setze gehts und sonst nicht. Warum? Der Takt ist 16Mhz. Die Platine ist doppelseitig, drunter ist auch noch was. Das stimmt alles. Es hängt nur LCD , 2 Dallas, 1 Taster, 3 Optokoppler als Eingang , dran. Mehr nicht.

Den µC tauschen werde ich nachher noch mal versuchen.

Ich verstehe nur nicht, warum es beim upload, so einen Unterschied macht?? :confused: :confused:

MfG Marco

Während der Code auf dem UNO ohne Problem läuft, habe ich auf der Platine (mit 328) nur Probleme

Wenn du das unvoreingenommen liest, ist dir auch sofort klar, wo das Problem ist :P

Aber mal im Ernst: Beim upload ist der Unterschied, dass per USB der Bootloader im oberen Adressbereich erhalten bleibt, wenn du über ISP lädst, wird erstmal der komplette Speicher gelöscht. Das sollte bei ordentlicher Programmierung, wenn dein Code nur dort läuft wo er soll, keinen Unterschied machen.

Ein return in loop bewirkt, dass sofort nach main() zurückgesprungen wird und nach ein paar Befehlen (SerialEvent) loop wieder von vorne anfängt. Ohne return passiert das gleiche bem letzten ``` ** }** ``` von loop. wenn bis dahin der Stack nicht kaputt ist.

Meine Erfahrung sagt: - Der Fehler ist meist in dem Teil des Codes, der nicht gepostet wird. - Variablendefinitionen sind der wirklich wichtige Teil des Codes. - Ich mag nicht, haufenweise irrelevantes zu ignorieren, daher verkneife ich mir den Satz "Poste alles", - Statt dessen: verkleinere den Sketch auf eine minimale Demo des Problems, und poste das, komplett. Evtl. siehst du das Problem dann schon selbst.

michael_x: Verkleinere den Sketch auf eine minimale Demo des Problems, und poste das, komplett. Evtl. siehst du das Problem dann schon selbst.

Genau!! Bei praktisch jeder Art der Fehlersuche ist die Fehlereingrenzung ein ganz wesentlicher Teil - meist auch der Lösung.

Meist ergibt sich: Kaum schmeisse ich x raus, ist der Fehler bei y weg. (Liegt das Problem dann an x oder y? Oder an beidem? ...)

Hi, habe nun eine Nacht darüber geschlafen und jetzt sieht es doch schon ganz anders aus.
Ich habe den Code mal aufgeräumt und abgeändert. Ein Fehler war, ein mehrmaliges Aufrufen einer Funktion, obwohl ich sie nur einmal brauch.
Jetzt hat sich heraus gestellt, es liegt am Interrupt und an pulseln() !! Ich habe sie beide auf Pin 2 und 3 gelegt. Wenn ich beim Interrupt den PullUp aktiviere, passiert garnicht, er zählt nicht. Aktiviere ich den PullUp beim ( Pin3) pulseln(), so funktioniert er und zählt. Ich kenn mich mit beiden funktionen noch nicht so aus und würde mich über hilfe freuen.
Der interrupt soll ein Drehzahlmesser sein. 12v vom Motor (Zündspule) Optokoppler zum 328er. bringt gerade minus Werte
Der pulseln() ist eine blinkende Lampe(LED? keine Ahnung) 12v vom Motor Optokoppler zum 328er. funktioniert, zeigt Öldruck an
Der Schwellwert liegt so bei 50ms, drunter ist 0 und drüber 1, mehr nicht.

Jetzt habe ich die ganze Sache am Motor verbaut und nun gehen andere Probleme los. Ich geh gerade ab, wie´s zäpfchen. :slight_smile: :slight_smile: :slight_smile: :slight_smile:

Ist der Motor aus , liefern die Dallas richtige Werte. Mache ich den Motor an, zeigt er mir -128°C ??? Mache ich ihn wieder aus, ist alles normal. Ich habe beide Seiten mit Masse verbunden und wieder getrennt, aber ohne Erfolg. Die Sensoren liegen am Gehäuse an.

Die Platine wird mit einem 12V Akku versorgt ( Massen sind alles verbunden)

Wer sieht mal über meine Code drüber, wo gibt es noch fehler und wo könnte ich was verbessern?

Danke

MfG Marco

bordcomputer_temp_test.ino (7.38 KB)

Dallas_Temp.ino (321 Bytes)

DRZ_Messer.ino (345 Bytes)

eeprom_service.ino (1 KB)

lcd_ausgabe.ino (1.14 KB)

beginner34: Ist der Motor aus , liefern die Dallas richtige Werte. Mache ich den Motor an, zeigt er mir -128°C !???? Mache ich ihn wieder aus, ist alles normal. Ich habe beide Seiten mit Masse verbunden und wieder getrennt, aber ohne Erfolg. Die Sensoren liegen am Gehäuse an.

Die Platine wird mit einem 12V Akku versorgt ( Massen sind alles verbunden)

Das sind Störimpulse aus dem Fahrzeug. Die must du verhindern bzw. entstören.