Hallo zusammen, ich will eine Lüftersteuerung aufbauen, die sechs Lüfter steuert. Am Anfang sollten alle Lüfter langsam runterfahren, bis jeder zum Stillstand kommt - da wollte ich dann die Werte abspeichern, bei dennen die Lüfter gerade noch drehen. Aber so weit bin ich noch nicht. Ich habe mal eine Routine geschrieben, mit der ich das Impuls/Pause - Verhältinis durchfahren kann - es bleiben aber nur zwei Lüfter stehen und dann hängt sich der PIC 18F43331 auf - Lüfter laufen alle volle Pulle durch. Was habe ich für einen Fehler gemacht? Kann mir einer weiterhelfen? Ach ja, die Treiberbausteine mit denen ich die Lüfter ansteuere sind invertiert. Vielen Dank im Voraus Programm: movlw b'00000000' movwf PTCON0 movlw 0xFF movwf PTPERL movlw 0x0F movwf PTPERH movlw b'01000111' movwf PWMCON0 movlw b'00000001' movwf PWMCON1 movlw b'00000000' movwf DTCON movlw b'00111110' movwf OVDCOND movlw b'00000000' movwf OVDCONS clrf FLTCONFIG movlw 0x00 movwf SEVTCMPL movlw 0x00 movwf SEVTCMPH movlw 0xFC movwf PDC0L movlw 0x3F movwf PDC0H movlw 0xFC movwf PDC1L movlw 0x3F movwf PDC1H movlw 0xFC movwf PDC2L movlw 0x3F movwf PDC2H movlw 0xFC movwf PDC3L movlw 0x3F movwf PDC3H bsf PTCON1, 7 regLB ;Sektion Lüfter langsam herunterfahren Low-Byte btfss Lernjp goto Main incf runterLB ;Low-Byte Reg. um eins erhöhen movf runterLB, W movwf ErgebnisLB movlw 0xFC subwf ErgebnisLB btfsc STATUS,Z goto Übertrag bsf PWMCON1, UDIS movf runterLB, W andlw 0xFC ;da die unteren zwei Bits von PDCxL den Takt angeben=> Q1 movwf ErgebnisLB movwf PDC0L movwf PDC1L movwf PDC2L bcf PWMCON1, UDIS call WAIT goto regLB regHB incf runterHB ;High-Byte um eins erhöhen movf runterHB, W movwf ErgebnisHB movlw 0x40 ;zählt bis 3F subwf ErgebnisHB btfsc STATUS,Z goto Main bsf PWMCON1, UDIS movlw 0x00 movwf PDC0L movwf PDC1L movwf PDC2L movf runterHB, W movwf PDC0H movwf PDC1H movwf PDC2H bcf PWMCON1, UDIS call WAIT clrf runterLB call regLB goto regHB Übertrag bsf PWMCON1, UDIS movf runterLB,W movwf PDC0L movwf PDC1L movwf PDC2L bcf PWMCON1, UDIS call WAIT goto regHB
Weiß dazu keiner was? Habe ich vielleicht einen Interrupt ausgelöst, der zum Absturz des Programms führt?
Ohne was über PICs zu wissen: Ein Schaltbild wäre hilfreich. Vielleicht liegt ein Verdrahtungsfehler vor ? Code, der länger als eine Bildschirmseite ist, sollte als Attachment angefügt werden. Viel Erfolg.
Hallo, ein Verdrahtungsfehler kann ausgeschlossen werden. Da ich in einer anderen Routine die Funktionstüchtigkeit der Platine festgestellt habe. Ich habe jetzt folgendes getestet, wenn ich am Ende des Durchlaufs (das ich mir durch eine LED anzeigen lasse) eine Warteschleife einbaue (Ende der Warteschleife LED erlischt), dann stelle ich fest, dass alle Lüfter korrekt runterfahren, das Programm hängt sich dann zwischen den "LED´s" auf und die Lüfter laufen an, bremsen, laufen an, bremsen (LED an, aus, an....) Also funkioniert das "Durchlaufen" der Lüfter aber hernach gibt es irgendein Problem. Kann es sein das es am Program Counter liegt? Bin ratlos...... Bitte um Hilfe
Nachschlag: wenn ich den Debugger aufhalte während das Programm sich aufgehängt habe und danach wieder den Debugger starten will, dann bekomme ich folgende Meldung: Halting Target MPLAB ICD 2 Ready MPLAB ICD 2 Ready ICD0083: Debug: Unable to enter debug mode. Please double click this message for more information. Running Target ICD0083: Debug: Unable to enter debug mode. Please double click this message for more information. ICD0069: Debug: Unable to run target MPLAB ICD 2 Ready Ich habe dann mal probiert, den PIC gleich zu programmieren, aber auch da tritt dieser Fehler auf! Hat irgendwer eine Idee was da sein könnte?
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.