Hallo zusammen, ich arbeite mich gerade mit Hilfe eine PIC 18F458 Entwicklungsboard in die µC Thematik ein und bin jetz dabei ein 50 kHZ PWM Signal für einen PWM Modulator zu erstellen. Es gibt da viel Möglichkeiten und ich habe jetzt mal 2 realisiert. Einmal über die SETUP_CCP Funktion und einmal über einen Timer Interrupt. Das funktioniert soweit, nur bei der Methode mit dem Interrupt erhalte ich nicht die berechnete Frequenz. Ich habe wie immer schon in diesem Forum und bei Tante Google gesucht aber nichts gefunden was mir weiter hilft. #include <18f458.h> #device ICD=TRUE #fuses HS,NOLVP,NOWDT,PUT #use delay(clock=20000000) void init_timers() { SETUP_TIMER_1(T1_INTERNAL); SET_TIMER1(65436); SETUP_CCP1(CCP_PWM); setup_timer_2(T2_DIV_BY_4, 24, 1); set_pwm1_duty(1); } #INT_TIMER1 void timer0_isr() { SET_TIMER1(65436); //Einstellen der gewünschten Frequenz output_high(PIN_D1); //Einstellen des gewünschten Pulsbreite output_high(PIN_D1); output_high(PIN_D1); output_low(PIN_D1); } void main() { setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); SET_TRIS_D( 0x50 ); SET_TRIS_C( 0x00 ); init_timers() ; enable_interrupts(INT_TIMER1); enable_interrupts(GLOBAL); While(True); } Nach meinen Berechnungen müsste 20Mhz/4 => 0,2µs Tick ergeben. 50 kHz entsprechen 0,02 ms und somit ergeben sich 0,02ms/0,2µs = 100 Ticks. Somit muss ich rechnerisch den Zähler des Interrupts auf 65536-100 = 65436 einstellen um die gewünschte Frequenz zu erhalten, damit ergeben sich leider nicht 50 kHz sondern 33.79kHz. Ich muss den Wert auf 65484 einstellen um 50 kHz zu erhalten, ich kann den Fehler in meiner Berechnung nicht finden?! Kann mir jemand sagen was ich falsch mache oder falsch annehme/ verstanden habe?
:
Bearbeitet durch User
Geo M. schrieb: > damit ergeben > sich leider nicht 50 kHz sondern 33.79kHz. Die Interruptrate ist so hoch, daß die Ausführungszeit bis zum Timerreload schon ins Gewicht fällt. Nimm einen Mode mit automatischem Reload. Bzw. falls es einen Compareinterrupt gibt, kann man darin auch den Comparewert hochzählen.
:
Bearbeitet durch User
Danke für die Antwort, dem kann ich soweit folgen. Wie ich jetzt einen automatischen Reload hinbekommen bzw. einen Comparewert hochzähle ist meine Aufgabe fürs WE ;-)
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.