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

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.