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.
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.
Habe ich vielleicht irgendein Register vergessen zu konfigurieren?
Also wenn ich im Datenblatt auf Seite 9, Tabelle 2 gucke, dann sehe ich bei RC7 nur einen AD-Eingang und eine RX-Leitung. Und bei RC0 ist P2B, also vom CCP2-Modul ein Ausgang.
In meinem Programm werden die Pins aber als normale IOs verwendet (siehe ISR)
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.
Die ISR funktioniert, das timer interrupt funktioniert ja immer.
Sieh' mal dort, Beitrag "Re: Beispielprogramm PIC18F45k22" lade dir die "lesson" Datei, das Beispiel Nr. 12 CCP PWM wird die wohl weiterhelfen. Gruss
Das Beispiel hilft mir leider nicht weiter, da ich mit dem Compare Interrupt arbeiten will und das Beispiel sich mit dem PWM-Modus befasst.
Mein Gott Luca, ist dein GOOGLE defekt? Dann nimm' doch das hier http://www.technik.dhbw-ravensburg.de/~lau/datenlogger.html und sieh' dir den Code an (Quelltext). nochmals Gruss
Erich schrieb: > Dann nimm' doch das hier > http://www.technik.dhbw-ravensburg.de/~lau/datenlogger.html > und sieh' dir den Code an (Quelltext). Der verwendet den Capture-Moder. Bei Google habe ich auch schon gesucht, aber nicht viel Gescheites gefunden... Ich habe ja auch schon eine Code geschrieben, nur funktioniert er nicht immer wie er nicht immer wie er sollte.
Dein Code ist schlecht lesbar, weil praktisch unkommentiert. Gruss
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.
>müsste sich von selbst erklären Ja, klar ! Deshalb haben dir auch bisher so viele verschiedene Leute geschrieben. http://c-buch.sommergut.de/Kapitel2/Regeln-beim-Schreiben-von-C-Programmen.shtml Gruss
Erich schrieb: >>müsste sich von selbst erklären > > Ja, klar ! > Deshalb haben dir auch bisher so viele verschiedene Leute geschrieben. Was bitte ist daran so unverständlich? Erich schrieb: > http://c-buch.sommergut.de/Kapitel2/Regeln-beim-Sc... Der Compiler versteht es auch ohne Kommentare, deshalb wird mir das bei der Lösung meines Problems nicht weiterhelfen
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.