Generátor obdélníku 60kHz

Mám zakomentovanou jen předděličku (1024)

Udělal jsem změny:

  1. Výměna krystalu za 14 745 600Hz
  2. tento MCU jsem měl doma i s DPS…tak není co řešít…inak to samozřejmě nepotřebuju

Když odkomentuju předděličku a přepíšu konstanty v časovači, bude to vypadat takhle:

[code]#define F_CPU 14745600UL

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <math.h>

volatile unsigned int tim0; //pomocna promenna - kolikrat pretece TIMER0

int main(void)
{
sei();//init interrupt
TIMSK|= (1 << TOIE0);// prerušeni pri pretečení TCNT0
TCCR0|= (1 << CS00)|(1 << CS00); // preddelicka /1024 //datasheet str.73
DDRB |= (1 << PB0); // LEDka na PB0

while (1) 
{

}

}

//////////////////////////////////////////////////////////////////////////
// TIMER 0
ISR (TIMER0_OVF_vect){ //pocita do 255 - 8bitu
TCNT0 = 111; //Prerusi se po 10ms =>(14745600/1024)/(255-111)
tim0++;

switch (tim0)
{
	case 1:
	PORTB = (1 << PB0); 
	break;
	
	case 2:
	PORTB ^= (1 << PB0);
	tim0=0;
	break;

}

}[/code]

FUSES - LOW 0xDF, HIGH 0x D9

Výsledná frekvence by pak měla být 14745600/ 1024/ (255-111)/2
=20ms

Zpoždění MCU je 2us/cyklus…

Takže byl zřejmě špatný krystal…

Teď už jen vymyslet, jak to udělat, aby MCU dával přesně! 60 kHz (nebo 40kHz)

PS: Není to úkol…

Chtěl jsem udělat 12 000 000 bez předděličky, jenom do CASEů napsat 100+100

…bez zpoždění by to vyšlo přesně, byl by prostor na doladění (99+99)
scope_5.bmp (394 KB)