| Voir le sujet précédent :: Voir le sujet suivant |
| Auteur |
Message |
zanzeoo Invité
|
Posté le: 30 Sep 2007 20:44 Sujet du message: probleme de timers probleme de timers |
|
|
salut a tous
j'essaye de generer un signal de 40Khz sur la broche PORTB.0 d'un atmega8
j'utilise l'osc interne de 1Mhz sans prescale
je charge donc le registre TCCR1B a 0x01 (prescale =1) les fusibles sont configurés pour avoir cksel3=0 cksel2=1 cksel1=0 cksel0=0 (1Mhz)
Pourtant la freq sur l'oscillo est d'environ 10Khz !!! je pige pas j'ai pourtant reussi avec des freq plus basses
voici le code:
/****************************** **********************
#include <mega8.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x01;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x01;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
while (1)
{
if (TCNT1>=25)
{
PORTB.0^=1;
TCNT1=0;
};
};
} |
|
| Revenir en haut de page |
|
 |
nanick HABITUE

Inscrit le: 28 Mai 2006 Messages: 70
|
Posté le: 01 Oct 2007 6:02 Sujet du message: probleme de timers |
|
|
bonjour,
40khz --->1/40000= 25us avec un rapport cyclyque de 0.5 il faut basculer ta sortie à 12.5 us. en tounant à 1Mhz avec le code suivant,
| Code: | while (1)
{
if (TCNT1>=25)
{
PORTB.0^=1;
TCNT1=0;
};
|
tu perd trop de temps.
à ùmon avis , soit il faut augmenter la fréquence de travail soit ( meilleure solution) mettre une interruption sur ton timer.
A + |
|
| Revenir en haut de page |
|
 |
|
|
Vous pouvez poster de nouveaux sujets dans ce forum Vous pouvez répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum Vous ne pouvez pas joindre des fichiers Vous pouvez télécharger des fichiers
|
|