Forum: Mikrocontroller und Digitale Elektronik Programm läuft mit einigen M168, mit anderen M168 nicht


von Frank M. (frank-wob)


Lesenswert?

Hallo,

ich habe folgendes Problem:

Ich habe 6 mal die gleiche Hardware. Platine mit Mega168, LAN Interface, 
RS485 und ein wenig drum herum.

Ich habe ein Programm geschrieben (gcc) und in die Mega168 geschrieben, 
zwei Platinen funktionieren, die anderen vier nicht. Zuerst dachte ich 
an einen Hardware Defekt, doch mit den beiden m168 aus den 
funktionierenden Platinen funktionieren auch alle anderen.

Ich habe die Controller getauscht, 3 verschiedene Programmer eingesetzt, 
komme aber immer zum gleichen Ergebnis.

Ich habe auch schon den Code in den nicht funktionierenden Controllern 
mit den funktionierenden verglichen. Bis auf Byte gleich. Fuse Bits 
stimmen auch.

Ich weis nicht mehr weiter. Hat jemand eine Idee, woran das liegen 
könnte.

Wäre echt für jeden Tip dankbar.(Mein Chef bekommt langsam schlechte 
Laune)

Gruß Frank

von Spess53 (Gast)


Lesenswert?

Hi

Fusebits identisch?

MfG Spess

von holger (Gast)


Lesenswert?

Internen RC Osci benutzt ?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Seltsam

-- die µC reagieren unterschiedlich empfindlich auf 
Störungen/Einstrahlungen/langsam ansteigende VCC, anschwingenden Quarz, 
SUT Fuses passen zur Spannungsversorgung? ...

-- Irgendein Parameter ist am Rande der Spez: CPU-Frequenz, Spannung, 
Temperatur, Strom, den die Ports versenken/liefern müssen, interner 
RC-Oszi zu ungenau, BrownOut ...

-- schon mal die Errata für ATmega168 durchgelesen, insbesondere "Part 
may hang in Reset"? Vielleicht greift ja einer der Silicon-Bugs

-- Haben die µC alle das gleiche Produktionsdatum oder sind's 
verschiedene Chargen?
(BTW: Wie erkennt man am Produktionsdatum eigentlich die Revision, auf 
die sich ja die Errata beziehen?)

-- Uninitialisierte Variablen? Je nach µC hat eine solche Variable 
vielleicht andere Werte, beim gleichen µC aber immer wieder einen 
ähnlichen Wert nach Powerdown-Reset.

von Frank M. (frank-wob)


Lesenswert?

Hallo,

danke für die Tips.

Ich benutze externen Quarz 11.0592 Mhz / 22pF.
Fusebits sind identisch.

Ich nehme mir jetzt noch mal den Quellcode vor, vielleicht habe ich ja 
tatsächlich irgendwas nicht initialisiert.

Ob die Controller aus der gleichen Charge kommen, kann ich nicht sagen. 
Wir kaufen die Dinger Stangenweise. Sie waren jedenfalls alle im 
gleichen Blister.

Ich habe gerade noch mal eine Platine ans Oszi gehangen und alles genau 
nachgemessen.Spannung stabil und sauber. Auch die Portzustände scheinen 
alle in Ordnung zu sein.

Ich werde jetzt erstmal versuchen rauszufinden ob gar nichts läuft oder 
wo genau sie hängen bleiben. ICh werde auch mal versuchen die 
betreffenden Controller mit internem Takt laufen zu lassen. Vielleicht 
finde ich heute Morgen was, dass ich gestern übersehen habe.

Viele Dank erst mal. Für weitere Tips oder Meinungen bin ich nach wie 
vor Dankbar.

Gruß Frank

von seacrash (Gast)


Lesenswert?

Nutzt Du evtl. das EEPROM? Variablen die dort stehen, könnten auch 
diesen Fehler verursachen.

von Peter D. (peda)


Lesenswert?

Frank Matth wrote:
> Ich habe ein Programm geschrieben (gcc) und in die Mega168 geschrieben,
> zwei Platinen funktionieren, die anderen vier nicht.

"funktioniert nicht" kann man sich an die Backe schmieren.

Es hilft kein Wehklagen, Du must schon rauskriegen, was genau nicht 
funktioniert.

Kommt denn der AVR überhaupt aus de Puschen, also mal direkt nach dem 
Reset ne LED einschalten und z.B. mit 1Hz ne Weile blinken lassen, damit 
man sieht, ob der Clock stimmt usw.

Generell ist es eine gute Idee, sich ein Programm zu schreiben, was nur 
die Hardware testet.
Man muß ja erstmal rauskriegen, ist das Board defekt oder liegt der 
Fehler in der Software.
Unbenutzte floatende Eingänge, die trotzdem mit ausgewertet werden 
(if(PINB==), ist für mich klar ein Softwarefehler.


> Ich habe die Controller getauscht, 3 verschiedene Programmer eingesetzt,
> komme aber immer zum gleichen Ergebnis.

Planlos rumprobieren sollte man schnell aufgeben, das kostet nur unnütz 
Zeit.


Peter

von Frank M. (frank-wob)


Lesenswert?

So,

jetzt laufen die Mistdinger endlich. Es lag am Watchdog. Ich habe den 
Watchdog vor initialisierung des Wiznet Moduls gestartet. Während der 
ganzen Entwicklungsphase (mit immer dem gleichen µC) und bei zwei 
weiteren Controllern gab es keine Probleme. (Sollte auch zeitlich nicht) 
Bei den anderen funktioniert es nur, wenn der Watchdog nach 
Initialisierung gestartet wird. Sonst hing der Controller in einer 
Reset-Schleife.

Danke für eure Tips und Ratschläge
Gruß Frank

@Peter
Wenn du genau gelesen hast, wirst du festgestellt haben, dass die 
Hardware funktionieren mußte, weil sie ja mit den anderen Controllern 
funktionierte.

3 Posts weiter unten wirst du auch lesen, dass ich alles explizit 
durchgemessen habe und gerade dabei war zu sehen wo es hängt.

Mit dem Planlos rumprobieren hast du allerdings recht. Aber nach 16 
Stunden Arbeit, wird man zuweilen etwas Planlos.(Ich jedenfalls)

Wenn es nicht erlaubt ist, bei einem Problem das nach 16 Stunden 
Arbeitszeit auftritt einfach mal zu Posten und um einen Vorschlag zu 
bitten, dann entschuldige ich mich dafür. Da habe ich dann den Begriff 
"Forum" wohl falsch verstanden.

Das nächste mal Poste ich dann, wenn ich einen Fehler ganz klar 
eingegrenzt und bereits gelöst habe. Allerdings... wozu sollte ich dann 
noch Posten?

Frank

von Peter D. (peda)


Lesenswert?

Frank Matth wrote:

> Wenn es nicht erlaubt ist, bei einem Problem das nach 16 Stunden
> Arbeitszeit auftritt einfach mal zu Posten und um einen Vorschlag zu
> bitten, dann entschuldige ich mich dafür. Da habe ich dann den Begriff
> "Forum" wohl falsch verstanden.

Du brauchst Dich nicht zu entschuldigen und hast auch nicht das Forum 
falsch verstanden.
Ich wollte nur Tips geben, wie man vorgehen sollte, mehr nicht.

Den Watchdog benutze ich prinzipiell nicht.
Er führt nur dazu, daß Entwicklungsfehler verschleiert werden und 
dardurch sinkt die Zuverlässigkeit.
Wenn er aber gefordert wird, dann erst ganz zum Schluß einfügen, wenn 
alle Funktionen bereits fehlerfrei laufen.

Ich habe so eine Anwendung und dann muß er auch per Fusebit aktiviert 
werden, damit er nicht einschlafen kann.
For das ganze Init-Geraffel erhöhe ich ihn dann auf 2 Sekunden.


Peter

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
Noch kein Account? Hier anmelden.