Anschrift eMail
Checkliste für PIC-Controller
Erforderliche Angaben zur Beantwortung von Fragen
Welcher Prozessor wird eingesetzt ?
Welche Entwicklungsumgebung wird verwendet ?
In welcher Programmiersprache ist das Programm ?
Womit wurde der Prozessor programmiert (gebrannt) ?
Um was für eine Anwendung / Steuerung handelt es sich ?
Wie lautet die Frage / Fehlerbeschreibung ?
Liegt ein Programm-Listing vor (bei Bedarf) ?
Steht ein Schaltplan zu Verfügung (bei Bedarf) ?
 
Wenn das Programm augenscheinlich nicht startet
Sitzt der PIC richtig im Sockel / ist er richtig angelötet ?
Hat der PIC normale Betriebstemperatur ?
Ist Versorgungsspannung vorhanden ?
Liegt am Reset-Eingang High-Pegel an ?
PIC16 + LVP enabled: Ist an PGM / RB3 ein PullDown-Widerstand angeschlossen ?
PIC18 + LVP enabled: Ist an PGM / RB5 ein PullDown-Widerstand angeschlossen ?
Schwingt der Quarz mit seiner angegebenen Frequenz ?
Werden alle I/O-Pins während Reset hochohmig (Peripherie berücksichtigen) ?
Ändern programmierte Ausgänge nach Reset ihren Pegel ?
Haben alle Eingänge für einen Programmstart den richtigen Pegel ?
Wird ein Programmstart durch ständige Interrupt-Auslösungen behindert ?
 
Hat der PIC ein lauffähiges Programm in seinem Programmspeicher ?
Befinden sich im Eeprom alle erforderlichen Daten ?
Sind alle Startwerte und -Bedingungen gegeben ?
Sind alle erforderlichen Parameter für den Programmstart vorhanden ?
Sind alle erforderlichen Zustände für den Programmstart vorhanden ?
Bleibt das Programm in einer Endlosschleife hängen ?
Wartet das Programm in einer Schleife auf eine Bedingung, die nicht erfüllt wird ?
Wartet das Programm auf ein Flag / Bit, das nicht gesetzt / gelöscht wird ?
Wartet das Programm auf einen Interrupt, der nicht ausgelöst wird ?
Wartet das Programm auf externe Daten, die nicht eintreffen ?
Wartet das Programm auf externe Ereignisse, die nicht eintreten ?
 
Weitere mögliche Fehlerursachen unter Assembler- oder C-Programmier(er)-Fehler
 
Wenn das Programm augenscheinlich nicht richtig läuft
Hat der PIC normale Betriebstemperatur ?
Ist die Versorgungsspannung ausreichend und stabil ?
Ist die Versorgungsspannung frei von Spikes und sonstigen Störungen ?
Werden durch Endstufen, Phasenanschnitt, Induktion, etc. EMV-Störungen erzeugt ?
Sind Kondensatoren mit ca. 100 nF zum Abblocken schneller Schaltspitzen eingelötet ?
Sind (Tantal-) Elkos mit ca. 10 uF zum Abblocken niederfrequenter Störungen eingelötet ?
Treffen PIC-Ausgänge und Peripherie-Ausgänge aufeinander ?
Besteht ein (Kurz-) Schluß durch Drahtenden, Kupferreste, Lötperle, etc. ?
Treten Unterbrechungen bei Erschütterung der Platine auf (Wackelkontakt) ?
Haben alle Lötstellen eine saubere Verbindung (kalte Lötstelle) ?
Können Störungen durch schlechte Masseverbindungen auftreten ?
Können Störungen durch fehlende Abschirmungen auftreten ?

Haben alle Eingänge für den Programmablauf rechtzeitig den richtigen Pegel ?
Sind alle sonstigen erforderlichen Zustände für den Programmablauf vorhanden ?
Sind alle erforderlichen Parameter für den Programmablauf konstant vorhanden ?
Wird der Programmablauf durch ständige Interrupt-Auslösungen gestört ?
 
Weitere mögliche Fehlerursachen unter Assembler- oder C-Programmier(er)-Fehler
 
Assembler-Programmier(er)-Fehler
Wird die maximale Stacktiefe nicht überschritten ?
Wird ein aktiver Watchdog rechtzeitig berücksichtigt ?
Wird in der InterruptServiceRotine das W- und STATUS-Register gerettet und restauriert ?
Wird in der ISR das FSR-Register gerettet und restauriert (nur bei Benutzung) ?
Wird in der ISR das PCLATH-Register gerettet, auf Rom-Page 0 gesetzt und restauriert (nur bei Benutzung) ?
PIC18: Werden in der ISR die PRODH/PRODL-Register gerettet und restauriert (nur bei Benutzung) ?
 
Ist für alle Register-Zugriffe die richtige Register-Bank gesetzt worden ?
Ist für alle Bit-Zugriffe die richtige Register-Bank gesetzt worden ?
Ist für alle Variablen-Zugriffe die richtige Register-Bank gesetzt worden ?
Ist vor Computed GOTO (addwf PCL) Register PCLATH geladen worden (256 Byte Adress-Grenzen) ?
Ist vor GOTO oder CALL die richtige Rom-Page gesetzt worden (nur bei Benutzung) ?
 
Beginnt die InterruptServiceRoutine an der richtigen Adresse ?
Werden die Interrupt-Enable-Bits (xxxIE) der verwendeten Interrupts gesetzt ?
Werden die Interupt-Flags (xxxIF) der verwendeten Interrupts gelöscht ?
Wird das Globale Interrupt-Enable-Bit (GIE) gesetzt (nur bei Interrupt-Benutzung) ?
 
Wurden Error-Meldungen oder Warnungen des Assemblers übersehen ?
Ist der richtige Prozessor-Typ angegeben (INCLUDE "p16f877.inc" / PROCESSOR p16f877) ?
Sind die Configuration-Bits richtig angegeben worden (__CONFIG) ?
Wird jedes IF - ELSE mit ENDIF abgeschlossen ?
Wird jedes Macro mit ENDM abgeschlossen ?
Wird jeder Constant Block mit ENDC abgeschlossen ?
Wird jede WHILE-Schleife mit ENDW abgeschlossen ?
Wird das Assembler-Programm mit END abgeschlossen ?
 
C-Programmier(er)-Fehler
Wurden die richtigen Header-Dateien eingefügt ?
Sind alle Variablen richtig deklariert ?
Wurden Error-Meldungen oder Warnungen des Compilers übersehen ?
Wird die maximale Stacktiefe nicht überschritten ?
Wurden die Configuration-Bits richtig angegeben ?
Ist bei Array-Zugriffen der Array-Index nicht größer als die Anzahl reservierter Elemente ?
Wird in Ausdrücken mit unterschiedlichen Datentypen für die nötige Typumwandlung gesorgt ?
 
Fehler und Störungen mit MPLAB-ICD
Ist die Verbindung zwischen PC und ICD-Module vorhanden ?
Ist die Verbindung zwischen ICD-Module und Target-Board vorhanden ?
Ist Versorgungsspannung vorhanden ?
Sitzt der PIC richtig im Sockel / ist er richtig angelötet ?
Hat der PIC normale Betriebstemperatur ?
Ist an I/O-Pin MCLR ein PullUp-Widerstand von 1 - 10 K ?
ICD1: Ist der I/O-Pin PGM = RB3 frei von Allem ?
Sind die I/O-Pins PGC = RB7 und PGD = RB7 frei von Allem ?
Ist LVP disabled ?
 
Ist in MPLAB die richtige Schnittstelle und Baudrate konfiguriert ?
Ist in MPLAB der richtige Prozessor angegeben ?
Ist in MPLAB der richtige Oszillator angegeben ?
Wurde die richtige HEX-Datei importiert ?
Debug: Ist im Programmspeicher noch Platz für die Debug-Befehle ?
Debug: Sind alle Debug-Optionen richtig gesetzt ?
Debug ICD1: Ist die Register-Adresse 0x70 frei ?
Debug ICD2: Sind 16 Register-Adressen und 2 Stack-Level frei ?
 
Fehler und Störungen mit Programmern / Brennern
Ist die Verbindung zwischen PC und Programmer vorhanden ?
Ist der Programmer / Brenner eingeschaltet ?
Sitzt der PIC richtig im Sockel ?
 

PIC-Assembler-Beispiele gibt es   hier