Menu

Adskeeper - header widge

728x90

Search This Blog

468x60

Navbar

AdsKeeper - IAB Display Standard Ad Unit

Saturday, July 9, 2022

Atmega32 Timer/Counter1 in Counter Mode

The Timer/Counter1 module of Atmega32 is able to count external pulse. It has a 16-bit counter/timer registers pair, TCNT1H and TCNT1L. We need to select its clock source of the Timer/Counter1 Control Register B - TCCR1B to allow this module working in external event counting mode. It work in two clock transitions, falling edge and rising edge. The clock source must be point to T1 (PB1) pin.

Atmega32 Timer/Counter1 in Counter Mode
Running program in Proteus Simulator

It also have a pre-scaler to divide a number of input clock pulse. Basically I will need only the TCCR1B, TCNT1H, and TCNT1L register to make this module operate in external counting mode.

  • Timer/Counter1 Control Register B - TCCR1B

Atmega32 Timer/Counter1 in Counter Mode

Timer/Counter1 Control Register B - TCCR1B

I need to select clock select bits to allow it to work in counter mode, with a rising edge of external clock.

Atmega32 Timer/Counter1 in Counter Mode
Clock Select Bit Description

I choose the "External clock source on T1 pin. Clock on rising edge". So CS12, CS11, and CS10 will set.

  • Timer/Counter1 - TCNT1H and TCNT1L Register 

Atmega32 Timer/Counter1 in Counter Mode
Timer/Counter1 – TCNT1H and TCNT1L Registers

This register composes of two 8-bit registers pair, TCNT1H and TCNT1L. They are readable and writable.

In this example, I make a counting system that could count up to 10000 before it rolls down. Since this register is 16-bit it maximum value is 65536 values. But it's not necessary here.

  1. /*
  2.  * m32Counter1MuxDisplay.c
  3.  *
  4.  * Created: 7/9/2022 6:10:41 PM
  5.  * Author : aki-technical
  6.  */
  7.  
  8. #include <avr/io.h>
  9.  
  10. #define F_CPU 4000000UL
  11. #include <util/delay.h>
  12.  
  13. int main(void)
  14. {
  15. int temp;
  16. /*Common Cathode Display*/
  17. unsigned char displayData[10]={0x3F,0x06,0x5B,0x4F,
    0x66,0x6D,0x7D,0x07,0x7F,0x6F};
  18. /*PortB and PortD Output*/
  19. DDRC=0xFF;
  20. DDRD=0xFF;
  21. /*Select T1 Clock in, rising edge*/
  22. TCCR1B|=(1<<CS12)|(1<<CS11)|(1<<CS10);
  23. /*Clear Timer/Counter1*/
  24. TCNT1H=0;
  25. TCNT1L=0;
  26. while (1)
  27. {
  28. /*Read the 16-bit counter registers*/
  29. temp=(TCNT1H<<8)+TCNT1L;
  30. /*Reset if it reaches 10000*/
  31. if (temp>9999)
  32. {
  33. temp=0;
  34. TCNT1H=0;
  35. TCNT1L=0;
  36. }
  37.  
  38. /*Display processing*/
  39. PORTD=0x00;
  40. PORTC=displayData[temp/1000];
  41. PORTD=0x01;
  42. _delay_ms(5);
  43.  
  44. PORTD=0x00;
  45. PORTC=displayData[(temp%1000)/100];
  46. PORTD=0x02;
  47. _delay_ms(5);
  48.  
  49. PORTD=0x00;
  50. PORTC=displayData[(temp%100)/10];
  51. PORTD=0x04;
  52. _delay_ms(5);
  53.  
  54. PORTD=0x00;
  55. PORTC=displayData[temp%10];
  56. PORTD=0x08;
  57. _delay_ms(5);
  58. }
  59. }
  60.  
  61.  

 Click here to download its source file.

Atmega32 Timer/Counter1 in Counter Mode
Schematic


No comments:

Post a Comment

Adskeep- Standard Ads

Electronics and Programming Tutorials

336x280

DIY Electronic Projects And Instruments

AdsKeeper - 2091654

Labels

23K256 (1) 24C16B (2) 25AA010A (2) 8051 (7) 93AA46B (1) ADC (40) Analog Comparator (1) Arduino (16) ARM (32) AT89C52 (7) ATMega32 (59) ATMega644P (27) AVR (88) AVR PCB (2) Bootloader (1) CCS PICC (31) Change Notify Interrupt (CNI) (2) DAC (2) DHT11 (5) Display (157) Distance Sensor (3) dot matrix (1) ds1307 (10) DS18B20 (6) ds3231 (2) ds3232 (2) dsPIC (16) dsPIC30F1010 (3) dsPIC30F2010 (15) EEPROM (5) Environment Sensor (6) ESP32 (1) esp8266 (1) Graphical LCD (3) HD44780 (12) I2C (40) ILI9341 (1) Input/Output (84) Interrupt (22) IoT PCB (1) Keil (5) Keypad (16) KS0108 (3) LCD (87) LM35 (4) Master/Slave (2) MAX7221 (1) MCP23017 (8) MCP23S17 (7) MCP4921 (1) MCP4922 (2) Meter (3) MikroC (2) MikroC ARM (1) MikroC dsPIC (11) MikroC PIC (1) Module PCB (2) Motor (15) MPLABX (73) Nokia 5110 LCD (5) OLED (2) One-Wire (7) Oscillator (8) PCB (13) PCD8544 (3) PCF8574 (13) PIC (121) PIC12F (3) PIC16 (105) PIC16F628A (3) PIC16F630 (2) PIC16F716 (4) PIC16F818 (11) PIC16F818/819 (3) PIC16F84A (16) PIC16F876A (2) PIC16F877A (9) PIC16F88 (2) PIC16F887 (60) PIC18 (19) PIC18F1220 (5) PIC18F2550 (5) PIC18F4550 (13) PICKit2 (1) PICMicro PCB (4) Pin Change Interrupt (1) PLL (1) PWM (12) RTC (13) SBN0064G (1) Sensor (15) SH1106 (3) Shift Register (15) Shift Registers (19) SN74HC595N (9) Software SPI (1) Software TWI (3) SPI (44) sprinf (3) ST7735 (1) STM32 (29) STM32 Black Pill (1) STM32 Blue Pill (12) STM32 HAL (23) STM32CubeIDE (32) STM32F103C8T6 (9) STM32F103R6 (18) STM32F401CCU6 (1) SysTick (7) temperature sensor (15) TFT (1) TG12864A (1) Thermometer (22) Timer/Counter (32) TM1637 (2) twi (10) UART (11) Ultrasonic (4) Voltmeter (7) WDT (1) XC16 (2) XC8 (96)