利用MEGA8完成单光子脉冲计数

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用MEGA8完成单光子脉冲计数相关的知识,希望对你有一定的参考价值。

 

01 MEGA8计数


一、背景介绍

AD\\Atmel\\Mega8\\2023\\TestMEGA81.PcbDoc

在昨天制作了MEGA8的测试实验板, 这是用来对于前天制作的单光子雪崩信号进行计数统计。 下面通过MEGA8编程测试脉冲计数的性能。

▲ 图1.1.1 MEGA8测试电路板

二、MEGA8计数

1、程序设计

D:\\zhuoqing\\window\\Atmel\\test\\2023\\SPADCounter\\main.c

(1)主程序

/*
**==============================================================================
** main.c :             -- by Dr. ZhuoQing, 2007-3-31
**
**   This project is designed for the PumpCnt
**
**==============================================================================
*/

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void C_task main(void) 
    unsigned int nCount;
    unsigned char ucChar;        
    unsigned int nShowCount;
    
    //--------------------------------------------------------------------------
    Mega8Init();
    ControlInit();    
    //--------------------------------------------------------------------------

    //--------------------------------------------------------------------------
    nCount = 0;
    nShowCount = 0;
    TCNT1 = 0;
        
    for(;;) 
        //----------------------------------------------------------------------
        if(++nCount & 0x80) LED_ON;
        else LED_OFF;
        
        WaitTime(1);
        //----------------------------------------------------------------------
        
        if(++nShowCount > 500) 
            nShowCount = 0;
            SendInt16(g_nCnt1);            
            SendChar('\\r');
            SendChar('\\n');
        
        
        //----------------------------------------------------------------------
    


//==============================================================================
//             END OF THE FILE : main.c
//------------------------------------------------------------------------------

(2)MEGA8程序

  利用TIME1 作为计数器,来对T1的脉冲进行计数。 下面是TIMER1 的初始化程序。设置其中的寄存器: 

  • TCCR1A = 0x00:表示没有输出波形;  
  • TCCR1B = 0x6:表示利用外部的T1脉冲作为时钟源。 
void timer1_init(void)

 TCCR1B = 0x00; //stop
 TCNT1H = 0xC1; //setup
 TCNT1L = 0x81;
 OCR1AH = 0x3E;
 OCR1AL = 0x7F;
 OCR1BH = 0x3E;
 OCR1BL = 0x7F;
 ICR1H  = 0x3E;
 ICR1L  = 0x7F;
 TCCR1A = 0x00;
 TCCR1B = 0x6; //start Timer

  在Timer0的1MS中断中,使用: 

  • g_n1MS : 进行周期读取TCNT1控制; 
  • g_nCnt1:读取TCNT1,并将TCNT1清零。 
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void) 
    unsigned char ucValue;
    
    //--------------------------------------------------------------------------
     TCNT0 = 0x06; //0x06; //reload counter value

    //--------------------------------------------------------------------------
    g_ucCnt ++;
    //--------------------------------------------------------------------------
    
    if(g_ucCnt == 0) 
        g_ucCnt256 ++;
    
    
    //--------------------------------------------------------------------------
    if(++g_n1MS >= 500) 
        g_n1MS = 0;
        g_nCnt1 = TCNT1;
        TCNT1 = 0;
    
                    
    //--------------------------------------------------------------------------
    CommandReceiveCount();

2、程序测试结果

  程序下载之后,可以看到MEGA8给出500毫秒之内的脉冲数量。 这是将红外LED放置在黑盒子里面输出的结果。 如果将LED从黑盒子中拿出来,对应计数输出就增加非常大了。

 

  结 ※


  文初步测试了MEGA8单片机对于单光子脉冲计数的功能。 通过编程利用MEGA8内部计数器完成对于单光子脉冲计数。 通过串口将计数数据发送到计算机。


● 相关图表链接:

以上是关于利用MEGA8完成单光子脉冲计数的主要内容,如果未能解决你的问题,请参考以下文章

测试红外LED单光子信号整形电路

关于使用STM32单片机完成脉冲计数功能的问题

怎样利用MATLAB 完成周期矩形脉冲信号的频谱图??

怎样使用STM32准确的产生任意个数的脉冲信号

基于i.MX6UL实现PWM脉冲计数

Proteus仿真2片CD4026联级秒脉冲2位数码管计数