PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVR defekten Input mit Firmware erkennen / Eigendiagnose



T.J.
17.02.2009, 13:41
Hallo ihr Freaks :)

Ich bins mal wieder, und habe eine spezielle Angelegenheit. Nehmen wir mal an bei meinem AVR geht aus irgendeinem Grund an PortA Pin 3 (input) kaputt. Im laufenden Betrieb irgendwo eingebaut, keiner merkts. Könnte ich mit meiner Firmware checken ob alle I/Os ok sind und ggf. eine Warnung rausgeben?

Ich habe schon nach dem Problem gesucht, aber scheinbar wird das sehhhr selten gebraucht.
Ach ja: An der Hardware lässt sich nix ändern.

MeckPommER
17.02.2009, 14:31
Ich wüßte nicht, wie das gehen sollte.

Man kann zwar einen Pull-Up ein- und ausschalten, aber brauchbare Resultate wird man dabei wohl nur bekommen, wenn extern mit größeren Pull-Downs gearbeitet wird, und das ist ja nicht sehr wahrscheinlich.

Gruß MeckPommER

McJenso
17.02.2009, 15:19
Hallo,

du kannst PIN auch lesen, wenn der Pin ein Ausgang ist. Nach dem Prinzipschaltbild müsste der reale Status gelesen werden und nicht das was nach dem Portregister logisch währe. Ich würde mal ein z.B. AtMega 16 nehmen und AVcc nicht beschalten. Interessant ist, ob dann nur die APorts nicht funktionieren oder ob das auch für die auswertende Logik gilt. Im ersten Fall kann man den Ausfall eines Ausgangs schön simulieren.

Gruß

Jens

Netzman
17.02.2009, 15:25
ohne an der Schaltung etwas zu ändern, kannst du IMHO zumindest u.U. die Input-Pins überprüfen, wenn das Signal irgendwelche Grenzparameter hat, zb. ein Servo-PWM Signal, das etwa alle 20mS kommen muss. Wenn das z.B. 50mS ausbleibt, könnte man daraus schließen, dass etwas nicht in Ordnung ist.

Für die Outputs (und die Inputs) muss schon eine externe Beschaltung her, z.B. ein Shift-Register mit daran hängendem Multiplexer (bi-direktional), das benötigt noch 2 freie Pins am Controller (1 Testpin, an dem das Testsignal liegt, entweder als Input oder Output und ein Select-Pin, der über das Shift-Register den zu testenden Pin weiterschaltet.
Hoffe ich hab das jetzt einigermaßen verständlich erklären können :)
Der Vorteil ist, dass man damit sowohl In- als auch Outputs testen kann, aber allein schon von der Theorie her kann man so keine 100% Sicherheit bekommen, wenn der Controller sich selbst prüft :) könnte aber ein externer übernehmen, z.B. ein Tiny (braucht ja nur 2 I/O's) der seriell die Testergebnisse dem zu testenden Controller mitteilt.

Aber das ganze testet nur den I/O-Port zusammen mit der daran hängenden Beschaltung, man kann also keine verlässliche Aussage über die Funktion des I/O Ports als solchen treffen.

mfg

edit:
wusste nicht dass man Outputs als Input abfragen kann, wieder was gelernt :)

Besserwessi
17.02.2009, 16:49
Bei den Ausgängen sollte das Testen noch einigermaßen gehen, den ausgangspegel kann man ja testen. Allerdings kann man da fehler wie lose Bonddräte oder Lötfehler natürlich nicht so einfach erkennen, höchstens aus der Zeit die es braicht um den Eingang mit hilfe des Pullups umzuschalten.

Bei Eingängen wird der Test schwierig, wenn man da kein Ausgangssignal draufgeben kann.

Wenn man AVCC wegläßt, kann mehr als nur der Port A nicht gehen. Unter anderem wird auch der Brownout-detektor davon beeinflußt, den den sollte man also abstellen. Der Fall ist nicht vorgesehen. Theoretisch könnte das sogar mit einem Latchup enden und sogar den Chip unter Umständen zerstören, wenn die Spannungsversorgung kräftig genug ist.