Gast
#3146458
Hallo zusammen,
brauche Hilfe.
Ich möchte per CTC Modus einen 10us Takt erzeugen. Hier der Code:
/*CTC & Timer_0*/
#define F_CPU 8000000
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdbool.h>
#include "C:\WinAVR-20100110\avr\include\Eigene
Header\bit_manipulation.h"
#include "C:\WinAVR-20100110\avr\include\Eigene Header\rad_funktion.h"
volatile bool Takt=false;
//Interrupt erzeugt einen 10us Takt
ISR(TIMER0_COMPA_vect)
{Takt=true;}
int main (void)
{
//Timer Initialisieren
TIMSK|=(1<<OCIE0A); // Overflow aktivieren
TCCR0A|=(1<<WGM01); // CTC Modus
TCCR0B|=(1<<CS00); // Teiler auf 0
OCR0A=80-1; // Register auffüllen
TIFR|=(1<<TOV0); // Überlauf freigabe
// (((8000000/0/)/1000)/100))=80
sei(); // Freigabe
//E/A Definieren
set(DDRB,PB4);set(DDRB,PB3);set(DDRB,PB2);set(DDRD,PD0);
int u_sek=0;
int m_sek=0;
int Sekunde_1=0;
bool M1=false;
while(1)
{
if(Takt==true)
{u_sek++;if(u_sek>=100)
{m_sek++;u_sek=0;}if(m_sek>=1000){Sekunde_1++;m_sek=0;}}
if((Sekunde_1>=1)&&(M1==false))
{set(PORTB,PB4);M1=true;Sekunde_1=0;}
if((Sekunde_1>=1)&&(M1==true))
{clr(PORTB,PB4);M1=false;Sekunde_1=0;}
Takt=false;
}
}
Das Problem: es wird ein 30us Takt erzeugt. Warum ist das so? Wo ist der
Fehler?
Nutze einen Attiny 2313 mit einem 8MH Quarz. Fuses sind soweit richtig.
Jemand eine Idee?