7

PIC微控制器

 2 years ago
source link: https://z-rui.github.io/post/2016/10/pic_mcu/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

PIC微控制器

Fri Oct 14, 2016

PIC是Microchip公司生产的微控制器,有8位、16位、32位的型号。其中PIC12系列为8引脚8位微控制器,它的引脚数非常少,很适合做一些小型项目。例如最简单的流水灯,如果用微控制器来做,那么就不需要其他IC芯片了(振荡器为微控制器自带,而移位寄存器的功能可以用软件实现)。

我有一片PIC12F629和一片PIC12F675。两者功能基本一致,后者多了A/D功能。之前我尝试自制PIC编程器给629编程,试了很久也没有成功,只好买了一个正规的编程器来用,结果发现629似乎被我折腾坏了。现在只剩下一片675,我用它制作了两个小项目:音乐播放器和字符显示器。

picmcu-1.jpg

图中:上为字符显示器,下为音乐播放器。音乐播放器中的PIC芯片被拔下来了。

音乐播放器

picmcu-2.png

这里我用了一个额外的555定时器产生节拍时钟。这个时钟控制音乐的节拍,改变电位器的值就可以改变音乐播放的速度。生成各个音的频率则使用PIC12F675内置的定时器。

在PIC12F675内部,有两个定时器Timer0和Timer1,它们各自可以设置一个预分频器(prescaler)。这个功能很有用,例如本来是四分音符的时长为一拍,经过一级分频之后,就变成了二分音符的时长;对于音符而言,经过一级分频,频率降低一半,即降低一个八度。

软件只需要实现最短的音符(我实现的是十六分音符)和最高的八度(我是实现的是音C7所在的八度),此外只需要调整预分频器的参数即可,非常方便。

原理图中的蜂鸣器部分有所简化,实物中是一个由PNP管控制的蜂鸣器模块,主要是为了方便那些驱动能力不够的芯片。据我所知PIC12系列的IO引脚驱动能力有20mA,可以直接驱动蜂鸣器。调节和蜂鸣器串联的可调电阻可以控制音量。当然,如果用对数可调电阻,调节起来会显得比较“线性”。

我也许会在以后将软件提交到我的GitHub代码仓库。

这个电路在使用直流电源的时候,并联47μF的电容(也许可以更小,但我试过4.7μF,效果不好)可以有效防止干扰。当不并联电容时,蜂鸣器里只播出杂音而没有音乐。使用电池供电则没有这个问题。

但是,在使用编程器给PIC芯片编程时,则需要去掉并联的电容,否则容易导致编程失败。

字符显示器

picmcu-3.png

显示器是一块8×8的LED点阵。需要接16个引脚并使用扫描控制,不过PIC12F675只有6个IO引脚所以不可行。可以用74595这样的串入并出寄存器来减少IO口,但是扫描的逻辑还是需要由单片机完成。我这里用了一个现成的基于MAX7219的模块。MAX7219的功能很强,自带扫描和解码的逻辑,而且有驱动能力,可以驱动数码管、LED点阵等。微控制器通过类似SPI的串行通信将需要显示的内容发送到MAX7219,后者就可以生成驱动信号。用MAX7219做成的模块可以串接,不论串接多少块显示器,都只需要3根数据线。

因为显示器的驱动由MAX7219完成,所以PIC中的程序就只剩下了最基本的逻辑、和MAX7219的通信,以及字符的点阵数据。

PIC有一套自己的汇编语言,指令集比较精简。和MAX7219通信的一部分代码如下。

; 发送一个字节
TX_BYTE
    MOVLW D'8'
    MOVWF TX_LEN	; TX_LEN初始化为8
; 发送TX_LEN个比特
TX_BITS
    BCF GPIO, MOSI	; MOSI置零
    RLF TX_DATA, F	; 将TX_DATA最高位取出
    BTFSC STATUS, C	; 如果最高位是1
    BSF GPIO, MOSI	;  则MOSI置一 (否则MOSI保持置零)
    BSF GPIO, SCLK	; SCLK置零
    BCF GPIO, SCLK	; SCLK置一,完成一个比特的写入
    DECFSZ TX_LEN, F	; TX_LEN减一
    GOTO TX_BITS	; 若TX_LEN不为零则回到TX_BITS
    RETURN

PIC的架构对编译器不够友好,市面上针对PIC架构的C语言编译器很少,主要是Microchip自家的MPLAB XC编译器。上面的程序也可以用C语言写,大概可以写成如下的样子(仅供意会):

void TX_BYTE(uint8 TX_DATA)
{
	uint8 TX_LEN = 8;

	do {
		MOSI = TX_DATA & 0x80;
		TX_DATA <<= 1;
		SCLK = 0;
		SCLK = 1;
	} while (--TXLEN);
}

不过对于这种低资源的芯片以及简单的项目而言,倒也没有必要使用C语言。使用汇编编写程序对我来说倒不是什么困难事,问题在于程序没有可移植性,如果需要移植到其他硬件则会是很大的麻烦。话说回来,即便是C程序,涉及到的硬件专有特性(特殊端口名称等)也是不可移植的。所以微控制器的程序移植似乎是一个问题。



Recommend

  • 79
    • Github github.com 6 years ago
    • Cache

    GitHub - helloxz/xz-pic: 小z图床

    XZ Pic XZ Pic(小z图床)是一个简易的图床程序,开箱即用,实现快速上传图片到本地服务器(或七牛),支持一键复制HTML、Markdown链接,方便快捷。 PHP >= 5.6 后端使用PHP开发,支持上传图片到本地、七牛云存储...

  • 4
    • www.bunniestudios.com 3 years ago
    • Cache

    Hacking the PIC 18F1320

    Hacking the PIC 18F1320 I thought it would be fun to try out some of the hacking techniques I had heard about on the PIC series of microcontrollers. PIC microcontrollers typically come with a set of “configuration fuses”...

  • 8

    Kellyanne Conway's Twitter Account Posted A Nude Photo Of Her Underage Daughter Claudia. Twitter Won't Say If It's Banning Her. Local police are “looking into concerns” around the incident. ...

  • 9
    • blog.henix.info 3 years ago
    • Cache

    Pic 语言:画示意图的又一利器

    Pic 语言:画示意图的又一利器 最后更新日期:2011-06-04   最近读编程珠玑II ,其中介绍了 pic 这个 DSL 。...

  • 4

    And that’s a wrap! Halle Bailey celebrated the end of her filming Disney’s new live-action version of

  • 4

    Shellcoding in Rust We previously saw how to craft an HelloWorld shellcode in Rust. This time, we are going to create a shellcode that… actually launches a shell, using the e...

  • 4
    • www.producthunt.com 2 years ago
    • Cache

    Santa Hat Profile Pic Maker

    Add a Christmas Santa hat on your profile picture for freeCelebrate 2021 Christmas by adding a Santa hat to your social media profile picture on Twitter, Instagram, LinkedIn, and Tiktok. We remove your background & add c...

  • 5

    agi-upscale This is a tool written in Ruby to upscale old Sierra AGI game backgrounds. Examples Before:

  • 4

    This Week In Security: Breaches, ÆPIC, SQUIP, And Symbols

  • 3

    Sofía Vergara Shares Jaw-Dropping G-String PicMehera BonnerWed, January 3, 2024, 5:29 AM GMT+9·1 min read

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK