Mega8 Timer1 mit 1µs ?

Gast #2390203
Lesenswert?

Hallo,

ich möchte bei einem Mega8(F_CPU = 16MHz) mit dem Timer1 einen Interrupt 
alle 1µs erzeugen.
Innerhalb des CompareMatch Interuptes sollen dann Portpins entsprechend 
gesetzt werden.

Leider macht mein Timer alles andere, als das gewünschte.
Zu Testzwecken habe ich im Compare-Interupt eine LED toggeln lassen.

Hier der Code:
1
void init(void)
2
{  
3
// Timer1 initialisieren ´1µs  
4
TCCR1B |= (1<<WGM12)|(1<<WGM13)|(1<<CS10);  // CaptureCompare / No precaler
5
TIMSK |= (1<<OCIE1A);                       // Compare A Interupt Enable
6
ICR1 = (F_CPU/1000000)-1;              // 1µs
7
OCR1A = (ICR1*50)/100;          // DC = 50%        
8
}
9

10

11
ISR (TIMER1_COMPA_vect )
12
{
13
  toggle_led(2);
14
}

Nach Aussage meines Oszi's toggelt die LED mit einer Frequenz von 
84,21kHz.
Der Duty-Cycle stimmt aber mit 50%.
Etwas verwunderlich finde ich, dass egal ob ich als Timerfrequenz 1µs 
oder 500ns einstelle immer die selbe ausgangsfrequenz zu messen ist.

Könnt Ihr mir da irgendwie helfen?
Spielt es eigentlich hier eine Rolle welchen der beiden CTC-Moden(4,12) 
ich verwende?

Gruß
Martin
Gast #2390249
Lesenswert?

@Lothar Miller:

ich möchte 2 Halbbrücken(IRF7389) ansteuern. Dazu benötige ich eine 
Frequenz von 92kHz und einem DC von 45,5%. Allerdings kann ich ja nicht 
beide Mosfets einer Halbbrücke gleichzeitig ansteuern, da ich eine kurze 
Totzeit brauche, damit ich im Zwischenkreis keinen Kurzschluss erzeuge.

Für die Zweite Halbbrücjke benötige ich das Signal von der 1. 
Halbbrücke, jedoch um ca. 90° Phasenverschoben.

Hintergrund ist die Ansteuerung des PiezoWave Motors (www.piezomotor.se)

In dem Compare Interrupt wollte ich dann die vier Gates der Vollbrücke 
entsprechend ansprechen.

Vielleicht ist jetzt auch mein Ziel klarer.

Grüße
Martin
#2390259
Lesenswert?

Martin schrieb:
> Allerdings kann ich ja nicht
> beide Mosfets einer Halbbrücke gleichzeitig ansteuern, da ich eine kurze
> Totzeit brauche, damit ich im Zwischenkreis keinen Kurzschluss erzeuge.

Dann schau Dir mal im Datenblatt an:

Figure 39. Phase Correct PWM Mode, Timing Diagram

Damit kannst Du Totzeit, Frequenz und Tastgrad beliebig einstellen 
(OCnx, /OCnx benutzen).


Peter

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