Hallo zusammen! Ich verwende einen Mega32 16PU und mein Programm läuft einwandfrei. Das Problem: Es läuft nur einwandfrei wenn der Zusatz auf dem Chip 0803B lautet. Ist aus einer älteren Lieferung von 2009 aber das Programm ist von 01.15! Jetzt haben wir neue bestellt, der Zusatz lautet 1049, funktioniert aber nur bedingt und das Programm hängt sich manchmal auf. Das trifft nur auf die neuen zu, die 5 älteren Funktionieren einwandfrei. Nun meine Frage: Gibts da einen Unterschied bei diesen Bezeichnungen im Bezug auf Fuses o.ä.! Schon mal danke für die Hilfe....
:
Bearbeitet durch Admin
Wahrscheinlich hast du in dem alten ein paar Fuses geändert und in den neuen nicht. Technisch sollte es zwischen den alten und neuen keinen Unterschied geben.
Die Fuses sind absolut identisch, das ist ja das komische! Ich habe das Gefühl, das die Fuses-Register gar nicht richtig funktionieren. Ich habe Testweise mal eine wilkürliche Einstelllung genommen und der Fehler ist immer der gleiche, es ändert nichts....
Dann könnte es noch ein Programmfehler wie zb die implizite Annahme von Defaultwerten für nicht initialisierte Variablen im Speicher sein. Bei der einen Serie kippen die Bits zufällig in die eine Richtung, bei der neueren kippen sie in die andere Richtung.
kbuchegg schrieb: > Dann könnte es noch ein Programmfehler wie zb die implizite Annahme von > Defaultwerten für nicht initialisierte Variablen im Speicher sein. Bei > der einen Serie kippen die Bits zufällig in die eine Richtung, bei der > neueren kippen sie in die andere Richtung. Wie muss ich mir das Vorstellen und wie kann ich das beheben? Habe ich so noch nicht gehabt oder gehört!
elsche schrieb: > Wie muss ich mir das Vorstellen und wie kann ich das beheben? > Habe ich so noch nicht gehabt oder gehört! Die Zellen im RAM sind nach dem Einschalten undefiniert. Wenn deine unbekannte Software jetzt annimmt, das RAM wäre mit 0 initialisiert und diese Initialisierung nicht selber (oder per Compiler) macht, dann kann es beim Powerup zufällige Fehler geben. Und evtl. kippen bei einer anderen Charge die Bits eher nach '1' als nach '0'...
:
Bearbeitet durch Moderator
>Oder man hat dir Klone angedreht
Ist das echt schon mal vorgekommen , hat ein Bekannter auch erzählt das
schon mal
nicht funktionierende im Handel sind?!
Hallo! Noch einmal zum Thema, ich kann machen was ich will, es funktioniert nicht. Kann das denn echt minderwertige Ware sein? Hat jemand schon mal davon gehört oder auch schon so etwas erlebt? Bin drauf und dran von anderem Lieferanten welche kommen zu lassen, die ich jetzt hatte kosten ca. 3€ Stück und beim anderen ca.5€.
Hi >Noch einmal zum Thema, ich kann machen was ich will, es funktioniert >nicht. Und was hast du gemacht? >Hat jemand schon mal davon gehört oder auch schon so etwas erlebt? Nein. MfG Spess
spess53 schrieb: >>Hat jemand schon mal davon gehört oder auch schon so etwas erlebt? > > Nein. Klones noch nicht. Aber das Verhalten, dass sich ein Programm 'seltsam' verhält wohl schon hunderte male. Und es war immer ein Fehler im Programm. Ich weiss auch nicht warum sich die Leute immer so sträuben zu akzeptieren, dass die bei weitem wahrscheinlichste Ursache darin besteht, dass der Programmierer Murx gemacht hat. Und nein "Aber das Programm lief ja schon" ist kein Argument. Mein persönlicher Zeit-Rekord für einen Programmfehler der erst viel später aufgedeckt wurde, liegt bei knapp 15 Jahren. Das es nicht noch ältere bisher nicht entdeckte Fehler gibt, liegt wohl eher daran, dass aus meinen Anfangsjahren kaum noch Code vorhanden bzw. im Einsatz ist.
:
Bearbeitet durch User
Sehr oft wird vergessen, den Registern bei Programmbeginn feste Werte zuzuweisen, also sie zu initialisieren. (Meistens macht das nichts, weil sie im Programm vor der Verwendung mit Daten geladen werden). Beim späteren Lauf des Programms wird nach reset entweder Null in den Registern stehen oder auch, je nach Zufall, Teile eines vor Sekunden oder gar Tagen in den Zellen gewesenen Werts. Selbstverständlich können sich dann chargenabhängige Unterschiede ergeben. Die Auswirkung ähnelt manchmal wirklich einem Zufallsgenerator. Also: Software durcharbeiten und den Registern bzw. Variablen einen Anfangswert geben, wenn dieser nicht per Hardware vorgegeben ist, wie dann in den Datenblättern beschrieben. Beispiel, gerade selbst erlebt: ein Register wird für Stellen-multiplex mit dem Muster 00000001 verwendet und per Schiebefunktion über carry (ror)bestimmt die 1 die Auswahl der aktuellen Stelle. Wenn dann das Register beim Start den Inhalt 00000000 oder 1001000 bekommt, ergeben sich interessante Effekte: in einem Fall bleiben alle Stellen dunkel, im andren leuchten nur zweie. Siehe, im Anhang, wie mit r2 umgegangen wird, in der routine seraus. Da fehlte in init zuerst das Laden von r2 mit 00000001.
:
Bearbeitet durch User
Hallo! mein Hauslieferant hat mir freundlicherweise einen Kostenlosen IC geschickt um zu testen ob es mein Fehler ist oder nicht. Habe den Controller dann Programmiert und er lief nicht, alle Einstellungen und Variablen kontrolliert, meiner Meinung nach OK. Interessant ist das ich Controller ,alternativ, zu unserem Hauslieferanten bei einem anderen Lieferanten bestellt habe. Habe diese mit den gleichen Einstellungen und Programm versehen und sie Funktionieren, keine Probleme... Ist sehr seltsam....
Schon den Tipp alle Register und RAM zu initialisieren verfolgt? Einfach direkt nach dem Reset R0 bis R31 auf 0 setzen, eine Schleife bauen die den gesamten RAM durchläuft und auf 0 setzt. Programmieraufwand 10sec. Wenn es dann immer noch Probleme gibt, vielleicht mal den Code hier anhängen.
Das mit dem Initialisieren gilt nur für funktionslokale nichtstatische Variablen und Peripherie-Register, denn globale und statische Variablen werden automatisch, wenn nicht anders im Code angegeben, auf 0 initialisiert (wenn der Compiler keinen Unsinn macht) . Falls du den GCC verwendest, kannst du mal -Wuninitialized (iirc) übergeben, um dir Warnungen bei fehlender Initialisierung anzuzeigen. Ansonsten gebe ich meinen Vorrednern recht, ein Programmierfehler ist viel wahrscheinlicher, da hilft nur debuggen...
Peter R. schrieb: > Beim späteren Lauf des Programms wird nach reset entweder Null in den > Registern stehen oder auch, je nach Zufall, Teile eines vor Sekunden > oder gar Tagen in den Zellen gewesenen Werts. Selbstverständlich können > sich dann chargenabhängige Unterschiede ergeben. Lothar Miller schrieb: > Die Zellen im RAM sind nach dem Einschalten undefiniert. Wenn deine > unbekannte Software jetzt annimmt, das RAM wäre mit 0 initialisiert > und diese Initialisierung nicht selber (oder per Compiler) macht, dann > kann es beim Powerup zufällige Fehler geben. Es handelt sich ja um einen ATmega und es ist wohl davon auszugehen (ACHTUNG! unbestätigte Vermutung) dass avr-gcc + avr-libc zum Einsatz kommen. Dort gibt es keine "undefinierten Werte". Hier in der Firma erzählen manche aber auch immer Schauergeschichten über nicht-konforme Compiler. Meistens wollen die Kollegen da irgendwelche abstrusen MISRA-Regel damit rechtfertigen. Ich selbst hab so ein Verhalten noch nie erlebt.
Ich denke mal, solange Programm UND Schaltung geheim bleiben, wird das nichts. Zumindest nichts mit einer Lösung. Aber man kann ja darüber reden..... Und während man darüber redet, erledigt sich das Problem vielleicht von selber, oder die Sicht auf das Problem ändert sich. (was irgendwie beides aufs gleiche hinaus läuft)
bal schrieb: > Dort gibt es keine "undefinierten Werte". Doch. Lokale Variablen von built-in Typen (int, char, ...) werden nicht automatisch initialisiert. Nur deswegen gibt's ja auch (falls eingeschaltet) die Warnungen.
Morgen! Ihr dürft mich jetzt steinigen ;) ,ich habe tatsächlich noch 2 Variablen in einzelnen Funktionen gefunden die ich nicht initialisiert habe. Eigentlich sind das nur unterfunktionen mit nicht so wichtigen abläufen, aber anscheinend wichtig genug um mir das Leben schwer zu machen. Trotzdem Danke für die Hilfe und ich finde es trotzdem seltsam das so eine Reaktion stattgefunden hat. Danke!!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.