led avec timer0

Pour toutes vos questions sur WinAVR, AVR-GCC et la programmation en C en général

Modérateur: Modérateur

led avec timer0

Messagede Omsi le 14 Mar 2008 14:46


lu all, j'aimerai l'avis d'utilisateur du 8535 experimentés pour voir ce qui va pas dans mon programme,je veux donc simplement allumer une led sur le portB via le timer 0:help merci.
#include <avr/io.h>
#include <avr/interrupt.h>
int TOV0;
int count = 0;
void initialise(void)
{
DDRB=0x0F;
PORTB=0X00;
TCCR0 = 0x05; // Timer 0 avec F_CPU / 1024 + Mode compa ena
TCNT0 = 0x00;
sei();
}

int main(void)
{
initialise();
do
{
if(TOV0 ==1)
{
count++;
}
}while(count!=10);
return 0;

}
Omsi
 

Messagede jbe le 14 Mar 2008 18:51

Il ne te manquerait pas un while(1), aprés initialise.


JBE
jbe
HABITUE
HABITUE
 
Messages: 66
Inscription: 06 Juil 2007 20:03
Localisation: Berry

Messagede zid le 15 Mar 2008 11:16

Salut,
désolé, mais je comprends pas trop ton prg.
Tu testes la valeur de TOV0 avant de l'avoir initialisée ?
Je ne vois pas ou est ta commande de LED, donc à priori, pourquoi s'allumerait-elle ?
Au démarrage, il y a peu de chance que TOV0 soit égale à 1 , donc tu n'incrémentes jamais count, donc ça tourne à l'infini ... ton code ne fais rien d'autre, il me semble.

Tu peux essayer ce code qui devrait mieux marcher je pense (je n'ai pas testé).

Code: Tout sélectionner
#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU 8000000UL      // Fréquence du quartz
#include <util/delay.h>

#define DDR_LED      DDRB
#define PORT_LED   PORTB
#define PIN_LED      PINB0  // Port sur lequel se trouve la LED

// Pause de cnt millisecondes
void delay_ms(long cnt) {
   while (cnt-->0) {
      _delay_ms(1);
   }
}

SIGNAL(SIG_OUTPUT_COMPARE1A)
   {
   PORT_LED |= _BV(PIN_LED);
   delay_ms(500);
   PORT_LED &=~_BV(PIN_LED);
   delay_ms(500);
   }

void main(void)
{

   DDR_LED      = 0xFF;       // Port en sortie

   // Timer qui lance les interruptions
   TCCR1B = _BV(CS10 ) | _BV(CS11 ) | _BV(WGM12);
   OCR1A = (F_CPU/1024);
   TIMSK = _BV(OCIE1A) ;
   sei();
   
   while(1) {};

}



Bon courage
Zid
zid
NOUVEAU
NOUVEAU
 
Messages: 6
Inscription: 02 Jan 2008 18:18


Retourner vers WinAVR-AVR GCC

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

cron