PIC18 CCP1 funktioniert nur manchmal.

Gast #3040069
Lesenswert?

Ich bin gerade dabei, mich ins CCP1 des PIC18F45k22 einzuarbeiten. Der 
Code Funktioniert so wie er soll, aber nur manchmal. Der Code soll an 
RC7 und RC0 ein Rechteck mit 90° Phasenverschiebung erzeugen.
Manchmal passiert an RC7 mach dem Reset nicht, manchmal funktioniert es 
nach dem Reset. Das TMR3-Interrupt funtioniert immer. Ich habe keine 
Ahnung wieso der PIC das macht. Der PIC ist nicht kaputt, ein anderer 
hat das gleiche Problem.

Bitte um Hilfe.
Angehängte Dateien:
Gast #3040106
Lesenswert?

Mir ist aufgefallen, manchmal geht es nach dem programmieren nach jedem 
2. Reset.

Manchmal geht es nie, egal wie oft ich Reset drücke, wenn ich aber noch 
mal Programmiere, dann verhält es sich wie oben.
#3040782
Lesenswert?

Ach jaa.. Kann es vielleicht sein, dass der Interrupt ausgelöst wird:

void IVH(void)
{
  _asm            // So werden Assembler-Befehle in C eingebettet
    goto ISH        // Interrupt Service Routine fuer HP
  _endasm
}

Er geht dann in die IVH, ein GOTO zur ISH Funktion, diese wird aber mit 
einem return beendet?

Kannst ja mal probieren statt das _asm .... _endasm nur ein Aufruf der 
Funktion zu machen: ISH();

Oder den inhalt der ISH in die IVH zu schreiben. Wenns dann geht, liegts 
daran.
Gast #3049599
Lesenswert?

Erich schrieb:
> Dein Code ist schlecht lesbar, weil praktisch unkommentiert.

Die Interrupts.c-Datei habe ich doch kommentiert, und die main.c müsste 
sich von selbst erklären.
Am Anfang werden die Ports initialisiert, dann wird ein Text auf dem LCD 
ausgegeben und dann werden CCP1 Timer3 und Interrupts initialisiert.

In der ISR wird jeweils ein Pin getoggelt.
Gast #3049636
Lesenswert?

Auf der Website steht auch:
>>Vermeiden Sie redundante Kommentare. Es bringt keine zusätzliche
>>Information über das Programm, wenn Sie leicht verständliche Anweisung
>>durch Kommentare versehen. Darunter leidet die Übersichtlichkeit.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren