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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.