/*
* Comptage d'évènements
* 1 10 2023
* attiny85 arduino
* fichier : arduino_compteur_1_10_2023
* https://www.gadgetronicx.com/attiny85-counter-counting-events-signals-interrupts/
*/
/*
* un bouton-poussoir est utilisé pour simuler des événements
* externes à la broche PB2 ou T0. LED1 dans PB1 et LED2 dans
* PB0 ajoutées pour indiquer quand un événement externe dépasse
* une limite particulière.
*/
/*
* le nombre d'événements allume la LED dans PB1 lorsque le
* nombre dépasse 1000.
* bouton PB2
* led en PB1 et led en PB0
*/
#include<avr/io.h>
#define F_CPU 16500000UL
int comptage = 0;
int j = 0;
void counter_setup()
{
DDRB=(1<<PB1)|(1<<PB0); // PB1=1 PB0=1 : broches en sortie
TCCR0A = 0X00; //TCCR0A les bits suivants du registre TCCR0A:
//COM0A0, COM0A1, COM0B0, COM0B1 doivent être effacés
//pour fonctionner dans le fonctionnement normal du port.
//Cela désactive la fonction de comparaison de
//correspondance intégrée au minuteur.
TCCR0B = 0X00; //WGM02=0 Attiny85 se compose du compteur bidirectionnel
//programmable 8 bits. Comme nous allons utiliser une source
//d'horloge externe pour le comptage, nous devons configurer
//les bits CS0[2:0] dans ce registre.
TCCR0B |= (1<<CS02)|(1<<CS01); //CS02=1, CS01=1 CS00=0 Clock on falling edge
TCNT0 = 0x00; //initializing the counter to 0
sei(); //enabling global interrupt
TIMSK|=(1<<TOIE0); //enabling timer0 interrupt
}
ISR (TIMER0_OVF_vect) //Interrupt vector for Timer0/Counter0
{
comptage++;
}
int main()
{
counter_setup();
int actual_count;
while(1)
{
j=TCNT0;
actual_count=j+(comptage*256);
if ( actual_count>=1000) // First 10 counts
{
PORTB |= (1 << PB1); //light up LED in PB1 if count reaches 1000
}
}
}