程序分析
发布时间:2012/6/12 20:35:27 访问次数:941
程序进入无限DSP56F807PY80循环以后,每10ms改变一次Penod的值,并且当Period等于1023时将Updown变量由0变为1,而当Period等于O时,将UpDown由1变为0,这样就形成了上升和下降的过程。随后调用SetPeriod函数来设置CCPRIL及附加的2位。
按我们的想像,当占空比从1%变化到990/6时,灯将会如荧火虫一样一闪一闪地发光。结果事实令我们大失所望,灯的明暗变化那是有了,可是变化的样子根本不像荧火虫的发光。问题何在呢?原来这段程序非常线性地控制了流经LED的平均龟流,但电流的线性并不意味着LED发光强度的线性,更不意味着与荧火虫发光的过程一致。如何解决这一问题呢?
理想的方法是:抓个荧火虫,关在黑盒子里,放个照度计,每隔一段时间采样一次,如实记录下光亮强度与时间芙系的曲线;然后研究LED的亮度,同样将发光管置于黑盒子中,通过调节流过发光管的电流,拟合出一条与荧火虫发光过程一致的曲线出来。
这似乎太离谱了吧,我只想尝尝苹果的滋味,你却让我从种苹果树开始工作?当然,这个练习中我们不会这么做。但是这里提出这个问题绝非玩笑,事实上很多单片机初学者会把完成一个项目当成是“编写程序”,进行预算时考虑很不周到。殊不知编程仅仅只是项目很小的一部分工作,大量的工作是在程序之外做的。由此造成项目的误工、误期乃至各种纠纷。也许能不能考虑到这些程序外的东西可以作为老鸟和菜乌的区分吧9
闲言少叙,回到任务中来。为避免浩大的工程,我们就借助于自己的眼睛作为仪器,来大致地确定一下LED的亮度等级。因为不想节外生枝再来做个数码管用作显示,所以这里用了最原始的方法来做这个工作。程序2是一段调整数码管亮度的程序,变量LedBright的值决定了LED的亮度。不断改写LedBright,然后重新编译、链接,再将得到的代码写入芯片来观察LED的亮度。为简单起见,这里将LED的亮度分成20等分,通过人眼大致判断的方法来确定对应的LedBrigh{f直的大小。和理想的方法相比,这是一个非常屎始和粗略的方法,但就是这样,要分出这20个级别来,要花的时间也不少,建议读者都能够动手做一做以体会其中的艰辛。从作者的经验来看,不同型号的LED对于参数的影响很大,如果使用高亮度LED,R2应取1k(/,而普通亮度的LED,Fl2可以取3300。另外,各人眼光也不尽相同,作者获得的数据未必与你得到的一致,因此自己做一做是很有必要的。
通过实验,确定了20个数值对应20级亮度,那么程序3就是用来实现荧火虫灯了。这段程序就不再多作解释了,这里使用了查表的方法来确定亮度的变化。将程序写入芯片运行,马上就能看到LED的变化了,瞧,一闪一闪,那不正是夏夜里的荧火虫吗?
按我们的想像,当占空比从1%变化到990/6时,灯将会如荧火虫一样一闪一闪地发光。结果事实令我们大失所望,灯的明暗变化那是有了,可是变化的样子根本不像荧火虫的发光。问题何在呢?原来这段程序非常线性地控制了流经LED的平均龟流,但电流的线性并不意味着LED发光强度的线性,更不意味着与荧火虫发光的过程一致。如何解决这一问题呢?
理想的方法是:抓个荧火虫,关在黑盒子里,放个照度计,每隔一段时间采样一次,如实记录下光亮强度与时间芙系的曲线;然后研究LED的亮度,同样将发光管置于黑盒子中,通过调节流过发光管的电流,拟合出一条与荧火虫发光过程一致的曲线出来。
这似乎太离谱了吧,我只想尝尝苹果的滋味,你却让我从种苹果树开始工作?当然,这个练习中我们不会这么做。但是这里提出这个问题绝非玩笑,事实上很多单片机初学者会把完成一个项目当成是“编写程序”,进行预算时考虑很不周到。殊不知编程仅仅只是项目很小的一部分工作,大量的工作是在程序之外做的。由此造成项目的误工、误期乃至各种纠纷。也许能不能考虑到这些程序外的东西可以作为老鸟和菜乌的区分吧9
闲言少叙,回到任务中来。为避免浩大的工程,我们就借助于自己的眼睛作为仪器,来大致地确定一下LED的亮度等级。因为不想节外生枝再来做个数码管用作显示,所以这里用了最原始的方法来做这个工作。程序2是一段调整数码管亮度的程序,变量LedBright的值决定了LED的亮度。不断改写LedBright,然后重新编译、链接,再将得到的代码写入芯片来观察LED的亮度。为简单起见,这里将LED的亮度分成20等分,通过人眼大致判断的方法来确定对应的LedBrigh{f直的大小。和理想的方法相比,这是一个非常屎始和粗略的方法,但就是这样,要分出这20个级别来,要花的时间也不少,建议读者都能够动手做一做以体会其中的艰辛。从作者的经验来看,不同型号的LED对于参数的影响很大,如果使用高亮度LED,R2应取1k(/,而普通亮度的LED,Fl2可以取3300。另外,各人眼光也不尽相同,作者获得的数据未必与你得到的一致,因此自己做一做是很有必要的。
通过实验,确定了20个数值对应20级亮度,那么程序3就是用来实现荧火虫灯了。这段程序就不再多作解释了,这里使用了查表的方法来确定亮度的变化。将程序写入芯片运行,马上就能看到LED的变化了,瞧,一闪一闪,那不正是夏夜里的荧火虫吗?
程序进入无限DSP56F807PY80循环以后,每10ms改变一次Penod的值,并且当Period等于1023时将Updown变量由0变为1,而当Period等于O时,将UpDown由1变为0,这样就形成了上升和下降的过程。随后调用SetPeriod函数来设置CCPRIL及附加的2位。
按我们的想像,当占空比从1%变化到990/6时,灯将会如荧火虫一样一闪一闪地发光。结果事实令我们大失所望,灯的明暗变化那是有了,可是变化的样子根本不像荧火虫的发光。问题何在呢?原来这段程序非常线性地控制了流经LED的平均龟流,但电流的线性并不意味着LED发光强度的线性,更不意味着与荧火虫发光的过程一致。如何解决这一问题呢?
理想的方法是:抓个荧火虫,关在黑盒子里,放个照度计,每隔一段时间采样一次,如实记录下光亮强度与时间芙系的曲线;然后研究LED的亮度,同样将发光管置于黑盒子中,通过调节流过发光管的电流,拟合出一条与荧火虫发光过程一致的曲线出来。
这似乎太离谱了吧,我只想尝尝苹果的滋味,你却让我从种苹果树开始工作?当然,这个练习中我们不会这么做。但是这里提出这个问题绝非玩笑,事实上很多单片机初学者会把完成一个项目当成是“编写程序”,进行预算时考虑很不周到。殊不知编程仅仅只是项目很小的一部分工作,大量的工作是在程序之外做的。由此造成项目的误工、误期乃至各种纠纷。也许能不能考虑到这些程序外的东西可以作为老鸟和菜乌的区分吧9
闲言少叙,回到任务中来。为避免浩大的工程,我们就借助于自己的眼睛作为仪器,来大致地确定一下LED的亮度等级。因为不想节外生枝再来做个数码管用作显示,所以这里用了最原始的方法来做这个工作。程序2是一段调整数码管亮度的程序,变量LedBright的值决定了LED的亮度。不断改写LedBright,然后重新编译、链接,再将得到的代码写入芯片来观察LED的亮度。为简单起见,这里将LED的亮度分成20等分,通过人眼大致判断的方法来确定对应的LedBrigh{f直的大小。和理想的方法相比,这是一个非常屎始和粗略的方法,但就是这样,要分出这20个级别来,要花的时间也不少,建议读者都能够动手做一做以体会其中的艰辛。从作者的经验来看,不同型号的LED对于参数的影响很大,如果使用高亮度LED,R2应取1k(/,而普通亮度的LED,Fl2可以取3300。另外,各人眼光也不尽相同,作者获得的数据未必与你得到的一致,因此自己做一做是很有必要的。
通过实验,确定了20个数值对应20级亮度,那么程序3就是用来实现荧火虫灯了。这段程序就不再多作解释了,这里使用了查表的方法来确定亮度的变化。将程序写入芯片运行,马上就能看到LED的变化了,瞧,一闪一闪,那不正是夏夜里的荧火虫吗?
按我们的想像,当占空比从1%变化到990/6时,灯将会如荧火虫一样一闪一闪地发光。结果事实令我们大失所望,灯的明暗变化那是有了,可是变化的样子根本不像荧火虫的发光。问题何在呢?原来这段程序非常线性地控制了流经LED的平均龟流,但电流的线性并不意味着LED发光强度的线性,更不意味着与荧火虫发光的过程一致。如何解决这一问题呢?
理想的方法是:抓个荧火虫,关在黑盒子里,放个照度计,每隔一段时间采样一次,如实记录下光亮强度与时间芙系的曲线;然后研究LED的亮度,同样将发光管置于黑盒子中,通过调节流过发光管的电流,拟合出一条与荧火虫发光过程一致的曲线出来。
这似乎太离谱了吧,我只想尝尝苹果的滋味,你却让我从种苹果树开始工作?当然,这个练习中我们不会这么做。但是这里提出这个问题绝非玩笑,事实上很多单片机初学者会把完成一个项目当成是“编写程序”,进行预算时考虑很不周到。殊不知编程仅仅只是项目很小的一部分工作,大量的工作是在程序之外做的。由此造成项目的误工、误期乃至各种纠纷。也许能不能考虑到这些程序外的东西可以作为老鸟和菜乌的区分吧9
闲言少叙,回到任务中来。为避免浩大的工程,我们就借助于自己的眼睛作为仪器,来大致地确定一下LED的亮度等级。因为不想节外生枝再来做个数码管用作显示,所以这里用了最原始的方法来做这个工作。程序2是一段调整数码管亮度的程序,变量LedBright的值决定了LED的亮度。不断改写LedBright,然后重新编译、链接,再将得到的代码写入芯片来观察LED的亮度。为简单起见,这里将LED的亮度分成20等分,通过人眼大致判断的方法来确定对应的LedBrigh{f直的大小。和理想的方法相比,这是一个非常屎始和粗略的方法,但就是这样,要分出这20个级别来,要花的时间也不少,建议读者都能够动手做一做以体会其中的艰辛。从作者的经验来看,不同型号的LED对于参数的影响很大,如果使用高亮度LED,R2应取1k(/,而普通亮度的LED,Fl2可以取3300。另外,各人眼光也不尽相同,作者获得的数据未必与你得到的一致,因此自己做一做是很有必要的。
通过实验,确定了20个数值对应20级亮度,那么程序3就是用来实现荧火虫灯了。这段程序就不再多作解释了,这里使用了查表的方法来确定亮度的变化。将程序写入芯片运行,马上就能看到LED的变化了,瞧,一闪一闪,那不正是夏夜里的荧火虫吗?