VMLAB: 40 kHz wird nicht erreicht und alle anderen Funktionen werden übersprungen

OP #4579993
Lesenswert?

Hallo,

ich simuliere mein Programm mit VMLAB und mein Problem liegt bei der 
Erzeugung eines 40 kHz-Signals. Ich verwende einen Atmega 8535 und 
dieser arbeitet mit 4,096 MHz. Die Schaltung ist bereits aufgebaut. Zum 
Problem: Mit meiner Interrupt-Funktion erreiche ich max. 29850 Hz und 
dazu kommt, das alle anderen Funktionen nicht aufgerufen werden, weil 
der uC anscheinend nur mit diesem Interrupt beschäftigt ist. 
Normalerweise müssten die 4,096 MHz trotz Maschinenzyklus die 40 kHz 
generieren können. Was läuft da falsch?
Angehängte Dateien:
(Firma: Vescomp) #4584303
Lesenswert?

Constantin Alexandru M. schrieb:
> Ich hatte auf 50 gehabt und da war maximal 29850 Hz, ich habe nur den
> Wert nach oben verstellt um eine Änderung festzustellen.

 Nein.
 F=4.096MHz, Prescaler=1, OCR2=69 ergibt 29,257.143 Hz.
 F=4.096MHz, Prescaler=1, OCR2=50 ergibt 40,156.863 Hz.

 P.S.
 M8535 hat auch OC2 Output (PD.7) da wird das von alleine gemacht,
 man spart sich ISR und verliert keine Zeit.
OP #4594838
Lesenswert?

Wenn ich den Timer 2 "raus kommentiere", dann läuft das Programm ganz 
normal, bis auf das 40 kHz Signal halt. Beim Flankenwechsel, bevor main 
() von Anfang an aufgerufen wird, ist der letzte Programmbefehl "if 
(pwm_setting_tmp[j]<min)". Die PWM-Steuerung geschieht über den Timer 1. 
Beide Timer laufen über die Output Compare Match Interrupt Funktion.

Timer 1 -> PWM Steuerung (6 Kanäle) -> PD0, PD1, PD3, PD4, PD5 und PD6
Timer 2 -> 40 kHz Signal -> PD7 (OCR2)

Ich schätze mal, der Timer 2 ist im Konflikt mit dem Timer 1 und lässt 
das Teilprogramm bezüglich der PWM Steuerung nicht bis zum Ende 
arbeiten. In der Funktion pwm_update () habe ich sowohl mit cli() bzw. 
sei() als auch mit TIMSK &= ~(1<<OCIE2) bzw. TIMSK |= (1<<OCIE2) am 
Anfang und am Ende eingesetzt und es passierte dasselbe, Programm fängt 
wieder bei main() an. Wie kann man das entkomplizieren?
Angehängte Dateien:

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