Wie könnte man übliche Pin-Funktionen (IO, Pull-Ups, ADC, PWM) durch den
selben Controller prüfen?
Alle Pins miteinander verbinden, jeweils einen auf Ausgang (opt. Pull-R)
schalten und mit den anderen messen?
Die Ergebnisse im RAM ablegen und dann mit dem Debugger auslesen.
Zweiter Fall: wäre so ein Selbsttest auch in "der" Schaltung möglich?
So ein Selbstest geht im Prinzip, aber ein Fehler der gleichzeitig beim
der Ausgabe und der Eingabe auftritt wird übersehen.
Info schrieb:> wäre so ein Selbsttest auch in "der" Schaltung möglich?
Ich würde lieber die "das" Schaltung nehmen :-)
Wie du selbst schon gemerkt haben dürftest, brauchst du dazu eine
Aussenbeschaltung.
Das beißt sich aber damit, dass der µC ja auch was sinnvolles tun soll,
d.h. es gibt eine Aussenbeschaltung die auch etwas 'vernünftiges' tut.
Deine 'Test'-Schaltung muss sich also nur auf Bedarf zuschalten.
Aber nur mal angenommen, du hättest so was:
woher weißt du, dass ein eventueller Fehler dann auf tatsächlich
fehlerhafte µC-Pins (oder allgmein auf Fehler im µC) zurückzuführen ist
und nicht auf eine fehlerhafte Testschaltung? Du bräuchtest dann eine
Testschaltung für die Testschaltung. Die natürlich ebenfalls fehlerhaft
sein kann. ad infinitum.
Das ganze lässt sich zusammenfassen mit:
Wer prüft eigentlich die Prüfer?
Conclusio: Lass es. Das lohnt nicht. Letzten Endes ist das Aufwand, von
dem du so gut wie nichts hast. Irgendeine Annahme musst du treffen, die
da lautet: der Teil funktioniert so wie er soll. Sichere lieber deine
Aussenbeschaltung so ab, dass im Fehlerfall nichts schlimmes passiert.
Info schrieb:> Wie könnte man übliche Pin-Funktionen (IO, Pull-Ups, ADC, PWM) durch den> selben Controller prüfen?
Nen Kondensator an den Pin hängen und über Output auf- und entladen.
Damit die anderen Funktionen prüfen
> Die Ergebnisse im RAM ablegen und dann mit dem Debugger auslesen.
oder Softserial
> Zweiter Fall: wäre so ein Selbsttest auch in "der" Schaltung möglich?
Ja, per Port dazuschalten, aber der Port muss dann ja dann auch getestet
werden ;-).
>woher weißt du, dass ein eventueller Fehler dann auf tatsächlich>fehlerhafte µC-Pins (oder allgmein auf Fehler im µC) zurückzuführen ist>und nicht auf eine fehlerhafte Testschaltung? Du bräuchtest dann eine>Testschaltung für die Testschaltung. Die natürlich ebenfalls fehlerhaft>sein kann. ad infinitum.
ganz einfach: erkennt man am ausschuß. oder wer überprüft den professor
der die klausur überprüft?
Karl Heinz schrieb:> Du bräuchtest dann eine> Testschaltung für die Testschaltung.
Das Argument ist nicht stichhaltig. Tritt kein Fehler auf, ist sowohl
das System als auch die Testschaltung ok, wenn diese korrekt entworfen
ist (Testabdeckung). Wenn nicht muss das Gerät überprüft werden, egal wo
der Fehler liegt. Der Selbsttest bringt also sehr wohl einen Gewinn an
Zuverlässigkeit.
Gruss Reinhard
Ich brauche das nicht zwingend, aber z.B. fliegen irgendwo in der
Restekiste Controller rum, deren Status unbekannt ist.
Der Aufwand, für jeden x-beliebigen Controller ein Testprogramm zu
schreiben, ist natürlich indiskutabel(*), und zuverlässig ist ein
defekter Controller dann auch nicht mehr.
Aber 'drüber Nachdenken kann man ja mal. Ausserdem wäre es natürlich
auch bei perfekt (?) geschützten Geräten eine tolle Debugging-Hilfe, um
Fehlerursachen auszuschließen.
Und bei der industriellen Gerätefertigung in Großserie werden sicher
auch Testfunktionen genutzt
https://de.wikipedia.org/wiki/JTAGhttps://de.wikipedia.org/wiki/Boundary_Scan_Testhttps://de.wikipedia.org/wiki/In-Circuit-Test
(*) Evtl. könnte man aber aus Headerdaten bzw. sonstigen Device-Infos
solche Testprogramme generieren?
Info schrieb:> Und bei der industriellen Gerätefertigung in Großserie werden sicher> auch Testfunktionen genutzt
Das sind Tests mit externen Geräten. Es ist aber auch immer sinnvoll,
einen Power On Self Test (POST) durchzuführen, soweit das mit
vernünftigen Mitteln möglich ist - ich prüfe z.B. immer das RAM durch,
meistens erzeugt man auch eine Prüfsumme des Programms, ob es noch
korrekt ist, das geht ja recht einfach. Nicht undumm ist auch die
Überprüfung von Versorgungsspannungen, oder ob sich Lüfter drehen, wie
das ja im PC üblich ist. Hat man ADC-Eingänge übrig. kann man auch den
ADC testen, usw. usw.
Zusätzlich kann man auch Manufacturing Tests einbauen, die nur bei
Inbetriebnahme aufgerufen werden (oder im Fehlerfall vom Service), die
können auch etwas Zusatzhardware erfordern. Ich habe z.B.
Kurzschlussstecker erstellt, mit denen sich die seriellen und parallelen
Schnittstellen per eingebauter Software testen lassen.
Gruss Reinhard
Da stimme ich voll zu. Einfache Selbstests nach dem Einschalten würde
ich immer dann machen, wenn es wichtig ist Fehler frühzeitig zu erkennen
und eventuell bereits das Ergebnis des Selbsttests anzuzeigen. Für
Speicher sind immer Prüfsummen sinnvoll(Quersumme und
Adressensummierung), die CPU schieben und rechnen lassen, sowie die
I/O-Port durch Ausgabe und zurücklesen, im Wechsel mit "Low" und "High".
Allerdings sollte die externe Pheripherie dies abkönnen. In der externen
Schaltung kann man auch einfache Testmöglichkeiten vorsehen um offene
Leitungen oder Kurzschlüssen zu erkennen(wie z.B. hier beschrieben:
http://www.ichaus.de/upload/pdf/EInfo_H6_2005_EA_Fehlerueberwachung_in_industriellen_Maschinensteuerungen.pdf
)
kopfkratz
Eine "ultimative" externe Testschaltung ist genauso unmöglich wie "42"
zu "bestimmen" ...
Wenn Du unterschiedliche Controller hast und feststellen willst was
davon noch OK ist mußt Du immer die jeweiligen Besonderheiten
berücksichtigen.
Ein PIC XYZ hat andere Eigenschaften als ein AVR XYZ oder ein STM XYZ
oder oder ...
Egal ob Du nun via "Testbeschaltung" die Funktion überprüfen willst oder
direkt in der endgültigen Schaltung mußt Du für jeden einzelnen µC ein
zum Typ passendes Testprogramm schreiben.
In der FAB werden die DIEs einem Prüfmarathon ausgesetzt, der ist aber
wieder für jeden einzelnen Typ individuell ...
Wenn der Käfer unter 10,- Teuronen liegt dürfte ein Neukauf sinnvoller
sein als sich tagelang mit Testschaltung und dazu passender
Programmierung herumzuärgern !
Was mich interessieren würde:
Wenn man beim AVR einen Pin als Output schaltet (per DDR-Register),
bekommt man dann, wenn man anschließend PINx liest als Ergebnis den
Soll- oder weiterhin den Istwert?
magic smoke schrieb:> Was mich interessieren würde:> Wenn man beim AVR einen Pin als Output schaltet (per DDR-Register),> bekommt man dann, wenn man anschließend PINx liest als Ergebnis den> Soll- oder weiterhin den Istwert?
Ich würde bei jeden Controller davon ausgehen, dass man den Istwert
erhält.
Im Anhang ein Beispiel von einem ATtiny-Datenblatt. Dort ist es auf
jeden Fall so.
Man könnte offene Pins ermitteln indem man den Pin bei externen
Pull-Down auf High schaltet und danach wieder Low zurück misst. Bei
externen Pull-Up entsprechend anders rum. D.h. wenn die Schaltung es her
gibt.
Pins die offen sein müssen (z.B. wenn direkt ein FET-Gate ohne
Pull-Widerstände angeschlossen ist) kann man auf High schalten, danach
High zurück messen und dann nochmal auf Low schalten und Low zurück
messen.
Das Rückmessen erfolgt dann über die Pin-Kapazität und die Kapazität von
den sonstigen am Pin angeschlossenen Bauteilen (z.B. das FET-Gate).
> durchführen. Wenn PORTn!=PINn -> Problem!
Dabei muss man je nach MCU aber berücksichtigen, dass es einen oder
mehrere Zyklen Verzögerung zwischen dem Setzen des Registers und dem
elektrischen Flankenwechsel geben kann.
Karl Heinz schrieb:
>> Du bräuchtest dann eine Testschaltung für die Testschaltung.Reinhard Kern schrieb:> Das Argument ist nicht stichhaltig. Tritt kein Fehler auf, ist sowohl> das System als auch die Testschaltung ok, wenn diese korrekt entworfen> ist (Testabdeckung).
"Tritt kein Fehler auf" ist aber keineswegs eine objektive,
unanzweifelbare Tatsache, denn auch diese Schlussfolgerung kann (genau
wie das Erkennen eines Fehlers) sehr wohl auf einem Fehler beruhen.
Soft- oder Hardwarefehler können ja durch andere Soft- oder
Hardwarefehler verdeckt oder vorgetäuscht werden. Dabei spielt es auch
keine Rolle, ob es sich um technische Systeme handelt oder um Menschen
("Die LED hat kurz geleuchtet" - Wirklich? Zu viel Kaffee getrunken,
Drogen, bisher unerkannte Hirnerkrankung, ...?).
Da hier ein logisches Problem vorliegt, nicht nur ein technisches, kann
man diese Möglichkeit - zumindest in unserem Universum - unmöglich
ausschließen. Man kann lediglich die Wahrscheinlichkeit von "False
Positives" und "False Negatives" verringern, z.B. durch mehrfache Tests,
Testvariationen etc.
> Der Selbsttest bringt also sehr wohl einen Gewinn an Zuverlässigkeit.
Ja. Wobei du dir hier in gewisser Weise selbst widerspricht ("ist ok" =
ist fehlerfrei; "Gewinn an Zuverlässigkeit" = geringere
Wahrscheinlichkeit eines Fehlers). Ich bin durchaus deiner Meinung und
als Softwareentwickler haben Tests für mich eine hohe Priorität, aber
deine Aussage (erstes Zitat) ist etwas missverständlich.
Das ist genau wie mit den CRCs... Die garantieren dir auch keine
100%-ige Fehlerfreiheit, nur ist die Wahrscheinlichkeit sehr gering.
Bei den Schutzschaltungen heißt es doch immer halbwegs pragmatisch:
"...must prevent any single error condition and any probable combination
of multiple error conditions to cause harmful effects..."
Die meisten mehrfachen Fehlerbedingungen werden doch durch "engineering
judgement" von vornherein als zu unwahrscheinlich ausgeschlossen, als
dass man sie näher betrachten müsste.
Oliver Döring schrieb:> Fehlerbedingungen werden doch durch "engineering> judgement" von vornherein als zu unwahrscheinlich ausgeschlossen
z.Beispiel in Harrisburg, Tschernobyl und Fukushima. Da ist überall was
passiert, was gänzlich ausgeschlossen war.
Bei einer Aquarienheizung ist die Beurteilung wahrscheinlich nicht
besser, bloss die Folgen sind weniger schlimm (ausser für die Fische).
Gruss Reinhard
Blödsinn. Die Atomunfälle waren allesamt menschliches Versagen. Hätte
beim TMI-Unfall niemand eingegegriffen, hätte sich die Anlage selbst
gerettet, der Tschernobyl-Unfall war ein fehlgeschlagener
Sicherheitstest bei gröbster Missachtung der Vorschriften und seit
Fukushima ist hoffentlich niemand mehr so blöde, dermaßen wichtige
Notstromgeneratoren an einer Tsunami-gefährdeten Küste in den
unverbunkerten Keller zu stellen.
magic smoke schrieb:> und seit> Fukushima ist hoffentlich niemand mehr so blöde, dermaßen wichtige
(OT) Deinen Optimismus teile ich nicht! $$$ und gesunder
Menschenverstand schliessen sich aus.