打印

【转】芯片应用总结

[复制链接]
906|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
人丑没人疼|  楼主 | 2017-2-11 12:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机概括

       所谓的单片机也就相当于人的大脑,所有的命令都由其发出。与之通信通过各个管脚,上电运行之后,单片机能自动运行存储在其内部的程序,先是启动代码(为后续程序能够运行提供一个良好的环境,例如:分配堆、栈空间等,启动代码是用汇编程序写的,与具体的硬件环境相关)(为什么用汇编,因为汇编也就相当于机器语言,只不过汇编用助记符而已,机器可直接运行,至于启动代码完成什么工作,最基础的是能让后续代码正常运行。而高级语言相当于通用语言,其生成的机器语言与使用的编译器有关,每种硬件对应的都有其编译器。而高级语言为达到通用目的,自然会提取每个事物的共性,而忽略其个性。)(可以为其举个例子就是我们所说的语言,地球上有许多种语言,为方便交流,我们把英语作为国际语言,在国际事物中,我们都可以用英语交流,若不会英语,我们就需要有翻译人员,翻译给不同的国家的人,就需要不同能力的翻译人员)。

       之后跳到main函数执行,除非有跳转语句,否则程序会顺序执行。为了防止main函数过于庞大及方便管理,我们编写一个个小程序,然后在main中调用这些小函数。所以说程序的执行过程不过是调用各个函数而已。

数码管

       当数码管个数较多时,为节省io口,利用了74hc573锁存器,分段锁存,位锁存。位是决定哪个数码管工作,段是显示什么。利用人眼的视觉暂留,快速的进行切换,即可给人以都在工作的错觉。

LED

       要让led点亮,需让led通过电流,若一端接vcc,则只需让单片机的对应管脚输出低电平,又因单片机输入输出的电流有一定限制 ,所以对于led的小负载需加限流电阻,当负载为直流电动机时,单片机就驱动不了,此处利用了uln2003,通过其来增大带负载能力(四两拨千斤)。对于直流电动机,练习了pwm控制,固定一个周期,改变通入电流的时间。(这个周期怎么取还不清楚)(应该根据通与不通应该最少要保证可以工作)

点阵

双色点阵也就是一个发光孔里有两个不同颜色的小灯,共用一个公共端,控制另一端可让其发光或不发光。这里利用了74hc595,也相当于一个串转并芯片,由一个移位寄存器和存储器组成,通过级联可依次传输(因为每个芯片都有一个串行输出端口,串行输入的同时也从这里串行输出),8位传输完毕后可锁存,即可一次一直输出8位数据。

AD/DA

       pcf85914路ad、da转换器,通过i2c通信。ad、da都要用到参考电压,通过与之比较进行转换。(相当于天平秤重,饭吗相当于各二进制),ad转换的值放在了对应的寄存器中,读取即可。

      scl=0;//因为没写这个,读命令时无应答的后一个上升沿,故pcf8991无法转换,可能初始化时转换的寄存器为全1,故一直显示的为全1.(因此对于关键部分必须搞清楚)

I2C总线

       I2c总线:一根数据线,一根时钟线,由开始信号,之后传输数据,应答信号,结束信号组成。一条i2c总线上可挂接多个i2c器件,通过发送地址确认。(利用线与的功能)

       I2c,spi总线等多种多样的时序,因为芯片的作用,复杂程度多种多样,所以通信也就不一样,像单总线,i2c都有一定时间限制,对于不同的场合,不同的作用,运用不同的方式,操作芯片,无非是写数据,写命令(也即向寄存器中写入相应的数据,先指定寄存器地址,随后写入的数据即放入了其中。也有的不用指定寄存器,datasheet中有的是输入相应的数据,就会产生相应的作用。先产生写命令时序,随后写入相应的数据,这些数据会被当成一个命令,就可产生相应的作用了。

写入不同数据,代表产生不同功能。


写入这个命令0x80即是对sec寄存器写操作,随后的数据就会写入这个寄存器中,发送0x81命令,即是读这个寄存器,之后会传出这个寄存器内的数据,接收即可。(0x80,0x81相当于此寄存器地址)

),读数据。(明确一个目标就是如何指定位置,即找到该位置,如何从指定位置读出或写入数据)

DS1302

        Ds1302即实时时钟,可对年月日,时分秒计时,放在对应的寄存器中,读取即可(只不过为bcd码)。有自己的晶振与备用电源。     date=(date&0x0f)+0x30;//注意此处要加括号

严格按照时序即可,其中的下降沿读出,意思是下降沿时数据会放在数据线上。(严格按照时钟周期)

1602液晶

      1602液晶内部带有ascll码字库,故输入ascll码会显示对应的字符。(不用刷新,只要有电会一直显示。)(注意写入的地址,第一行起始地址0x80,第二行0x80+0x40,有个命令写入后地址可自动加1,故只需换行即可)

蜂鸣器

,音乐发声,300ms是每个频率的持续时间,1hz即1秒变化一次,周期为1秒。(300ms与1hz似乎不搭配)

DS18B20

       DS18B20为单总线结构,通过一根数据线进行通讯,(时序比较严格,特定时间采样)另外两根为电源与地线。内部有个寄生电源,就是一个电容,当数据线为高电平时对电容进行充电,低电平时断开(也即接一个二极管,利用二极管的单向导电性)。用此电容对ds18b20供电,当然也可直接接一个5v电源。当温度变换时,因ds18b20工作电流较大,5k的上拉电阻式io没有足够的驱动能力,因此可在温度变换时,提供一个强的上拉。(例mosfet管或vdd引脚接外部电源)

注意正确解读(注意看datasheet的文字说明,不要猜测)

自我感觉是数据线由高电平拉低到低电平为一个时间片的开始。(那怎么结束呢,从开始之后60us内?)(仔细理解芯片手册,读写有时间限制)自我感觉是进行一次初始化代表一次读写结束或开始下次的器件从新操作。

不要太相信中文翻译,有时有错误而且有的没有翻译出来,有遗漏。对于ds18b20的写,每写一位,注意释放总线。


,晶振频率12M,51单片机上时延时为time*2+5us。注意:time的类型为unsigned int时,延时时间变化(可能因为51是8位的,int型时要取两次),函数体写为其他形式时,延时时间也变化(怎样变化要看生成什么样的汇编语言)。


相关帖子

沙发
人丑没人疼|  楼主 | 2017-2-11 12:47 | 只看该作者
RS232、485

串口通信

       对于51单片机,设置好之后,把要发送的数据放到SBUF即可。接收时,等待接收中断标志位置位即把SBUF内的内容复制出来即可。异步通信要注意波特率,接收方与发送方的要一致,因为传送的数据帧有一定格式(可设置),两者一起配合,故可正确通信。而同步通信两方用的是一个时钟源,更可正确接收。利用的中断发送一串字符(发送或接收完会产生中断,做相应处理即可)。

中断处理矩阵键盘的方法很独特,如下图所示:,另一端是接的矩阵键盘的上拉电阻与vcc,j25接外部中断,没键按下时二极管不导通,所以j25为高电平,有键按下时,因有另一端会被拉低,使二极管导通,低电平传到j25端,产生中断,处理按键即可。(二极管的作用是什么,防止两个管脚连接?否则一个高电平一个低电平,二极管有压降0.7v)

Stm32简要说明

       一个外设,只有设置好之后才让它工作,故在stm32中操作外设时,配置完成之后,都有一个使能。Stm32中,调用库函数对外设初始化时,传递的参数有一个结构体型指针,注意定义变量时先定义为普通变量,然后把此地址传递过去(也可定义为指针,但要先给指针自己个地址,否则为野指针,此类错误较隐蔽,特别注意指针)。

Stm32首先是开启相应的外设时钟,再者是用到哪一个端口,就配置相应端口的功能。之后开始思考如何与外设通信,通信道路建立完成之后,就先完成外设的初始化。之后就可编写相应的应用程序,完成相应的功能。

硬件i2c与软件i2c基本上是同一个意思,硬件时也要按照通信的步骤,一步步设置寄存器,产生相应的功能。方便之处是如接收数据,到相应的寄存器读取即可。(其实感觉硬件不方便啊,自己理解:硬件i2c可以用dma方式,也可以每个处理完成之后产生一个事件,然后产生中断(观察硬件连接,要产生随机中断,硬件必须满足,例

再继续处理,更充分利用cpu)(硬件好像是为你提供了多种选择的一个框架,根据数据手册设置即可。会设置也就能写出软件模拟的了)(还有标志位,可随时查看状态。)

Stm32分配给外设的有一段空间,这个空间的起始地址就是外设基地址,而不同的外设挂载在不同的总线上,故每个总线也有个起始地址,叫总线基地址。


配置一个模式只需要4位,为什么此处有8位


相当于有的位是标示位,是输入还是输出。

液晶

       对于此液晶显示,因为不含字库,故需添加字库,例英文字库,先用字模软件生成ascll码字库。(其实对于液晶显示就是判断每一位,是1则该像素亮,否则灭),液晶显示的一个重要函数是生成窗口函数(液晶显示基本是显示完一行后就会自动换行,开始下一行的显示,而窗口函数也相当于规定显示的起始点,与一行的结束点,也即在哪开始,在哪换行)(液晶各点位置使用坐标表示的,要操作某点,先要知道坐标,在利用开窗函数,再显示)(对于触屏,也即利用一定的换算关系,确定接触点的坐标,再产生相应的动作。)

我们在编写程序显示某一个字符,例‘A’,可直接写’A‘(可能编译软件中含有字模,实际编译时会解析为对应的ascll码(一个16进制数,规定其就代表对应的字符,实际解析的是ascll,因为字模中的字符是按一定规律排列的,故根据其ascll码可找到对应的字模,然后提取,进行显示。也可在字库的每个字模的开头写上对应的字符,然后先判断ascll码值是否相同,若相同则提取,进行显示)(对于汉字,因较多,用的两个字节表示的)。

自制字库显示方法:


[cpp] view plain copy


  • #include <stdio.h>  
  • #define STR_WIDTH           6            /* 字符宽度 */  
  • #define STR_HEIGHT          12           /* 字符高度 */  
  • /*
  • * 常用ASCII表,偏移量32,大小:12(高度)*6 (宽度)
  • */  
  • const unsigned char asc2_1206[95][12]={  
  • {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"",0*/  
  • {0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0x00,0x00},/*"!",1*/  
  • ..........................................  
  • char i = 1;      /*! */  
  •    
  • int main()  
  • {  
  •        chartemp = 0, page = 0, column = 0;  
  •    
  •        for(page=0; page < STR_HEIGHT; page++ )  
  •        {  
  •               temp= asc2_1206;  
  •    
  •               for(column=0; column < STR_WIDTH; column++ )  
  •               {  
  •                      if(temp & 0x01 )  
  •                      {  
  •                             printf(" * " );  
  •                      }  
  •                      else  
  •                      {  
  •                             printf(" . " );                                                   
  •                      }  
  •                      temp>>= 1;                  
  •               }  
  •               printf("\n" );         /* 写完一行 */  
  •        }  
  •        printf("\n" );                /* 全部写完 */  
  • }  



显示为:


注意此处生成的字库相当于和平常思维相反,此开头为低位。

此处制作的字库,12*6,即高度为12,宽度为6。显示即可先开一个12*6的窗口,提取一个数据,判断各位是0还是1,是1则显示,是0,则不显示。因为宽度为6,所以只需6位即可表示,而一个字节8位,头两位不用为0.(其实为什么这样,可以想一下是如何制作字模的,如上图,把液晶想象为一块方板,上面有一排排的点,可以发光,因为宽度为6.所以一行我只需6个点,高度为12,所以需要12行,有6个点,可以用8位,也即一个字节表示一行中哪个点亮(多出的两个位用0表示,判断时可忽略),故判断6位即可。所以有12个字节。)

,画出坐标容易分析,不同的设置有不同的扫描方式。根据屏幕来确定开窗的长宽(此处x方向为宽,y为长。与扫描方式有关,注意理解,若扫描方向向下,若xy不变,则x方向为长,y为宽)。

对于芯片的操作我感觉考察的主要是理解能力与英文能力,需要的是耐心与细心。而应用程序考察的主要是编程能力与全局意识。(原材料、零件、产品)

中文编码

操作系统简要

       操作系统从广义讲就是管理计算机的软硬件资源,其实主要的就是任务调度,例如优先级管理的,一个高优先级的任务来了,需要运行,但此时运行着其他任务的,我怎么样获取cpu,被中断的那个任务下次运行时怎么从被中断处继续运行,怎么与其他的任务进行通讯。进入延时函数后怎么释放cpu,给哪个任务等,这就是操作系统的事。对于硬件管理就是让不让该任务访问等。


使用特权

评论回复
板凳
vivilzb1985| | 2017-2-12 22:16 | 只看该作者
针对DS18B20的开发还是蛮经典的

使用特权

评论回复
地板
vivilzb1985| | 2017-2-12 22:17 | 只看该作者
这个开始学单片机的时候,,采集温度的就是18b20的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

97

帖子

0

粉丝