第11节 RSS/XML 消息源 阅读器的硬件
推荐给好友
打印
加入收藏
更新于2009-01-11 23:49:12


图19 RSS/XML feed阅读器硬件

11.1 Freescale半导体公司的M52233DEMO板
        M52233DEMO是ColdFire MCF52233 处理器的评估板。该演示板包括一个串口,USB BDM调试口和一个以太网口。对于以太网工程来说,该板以及配套的免费(只能使用128kb的flash空间)CodeWarrior工具都是不可缺少的。本文将在演示板上运行Freescale 公司 的免费且开源 TCP/IP 协议 栈(见http://www.freescale.com)。ColdFire TCP/IP 协议栈参见文档 AN3407,ColdFire TCP/UDP/IP协议栈与RTOS。
        演示板提供了一个40引脚的接口,可以访问ColdFire微控制器的大部分信号,还提供了一个 3 轴加速器(three-axis accelerometer),连接到微控制器的 3个模拟端口、1个电位器和2个用户按钮。

11.2 并行LCD接口
        该并行LCD的显示屏是4*20字符的,使用标准的Hitachi指令集。在4位(four-bit)模式下,与微控制器只要6根连线:4位数据线,时钟信号(E),寄存器选择(RS)。使读写线(RW)接地处于只写状态(没理由从显示屏上读数据)。本文中的显示只需要一个E时钟,一些大数据量的显示可能需要两个E时钟。
        该 LCD 的显示电压为 5V。而微控制器的工作电压是 3.3V,所以需要进行电平转换。这可以通过如图20所示的简单晶体管开关电路来完成。不过,这个电路也是一个反用换流器(inverter)。软件在与LCD通信时必须使用负逻辑。

图20 一个简单的3.3V到5V的信号转换电路
        11.2.1 ColdFire到5V供电的LCD的接口
表5 ColdFire演示板与LCD的连线表


        11.2.2 LCD接口板原理图
图21 LCD接口电路原理图

        11.2.3 LCD接口固件
        LCD驱动的核心是函数WriteToLCD。该函数通过GPIO总线将字符数据或控制命令发送给LCD。把要写入LCD的数据发送到总线,同时发送一个RS信号,指出该数据是需要显示的字符还是命令字符。然后E时钟信号将该数据锁存到LCD控制器。下载一个字节需要执行两次这样的操作,先高四位,后低四位。
        WriteToLCD函数每调用一次只下载四位。有2个参数:需要显示的四位(低四位),该数据是控制命令还是字符数据。
        //**************************************************************** /
        /* 函数名: void WriteToLCD(unsigned char data, unsigned char rs)
        //****************************************************************
        //* 编者: Eric Gregori - Freescale FAE (Chicago)
        //*
        //* 完成LCD 初始化序列
        //*
        //* Rev # Date Who Comments
        //* ------ ----------- ------------- -----------------------------
        //* 1.0 23-Jun-07 E.Gregori Initial code release
        //****************************************************************
        void WriteToLCD(unsigned char data, unsigned char rs)
        {
                volatile unsigned longdelay;

                // 将数据写到总线上
                board_led_display(~data);

                for(delay=LCD_SHORT_DELAY; delay; delay--);

                // 将E时钟信号拉高,如果有需要则设置RS
                if(rs)
                        board_gpt_display(LCD_RS_HIGH_E_HIGH);
                else
                        board_gpt_display(LCD_E_HIGH);

                // E时钟信号在高电平延时
                for(delay=LCD_SHORT_DELAY; delay; delay--);

                // 将E时钟信号拉低
                if(rs)
                        board_gpt_display(LCD_RS_HIGH);
                else
                        board_gpt_display(LCD_E_LOW);

                // 在E时钟的下降沿锁存数据
                for(delay=LCD_SHORT_DELAY; delay; delay--);
        }

        其他的所有LCD函数都位于该底层驱动之上。LCD固件是一个驱动栈,栈低为底层驱动,栈顶为高层函数。

图22 LCD驱动栈

        11.2.4 LCD驱动API
                11.2.4.1 LCD_Init函数
                        void LCD_Init (Void)
                        初始化与LCD通信的硬件。必须在调用驱动内的任何其他函数之前调用。

                11.2.4.2 LCD_Clear函数
                        Void LCD_Clear (Void) 清屏,并将光标放在第4行(最后一行)。

                11.2.4.3 LCD_String函数
                        在第二个参数指定的行显示一个以NULL结束的字符串。

                11.2.4.4 LCD_Display函数
                        在指定的行显示一串字符。该字符串不需要以NULL结尾。

                11.4.2.5 lcd_print_char函数
                        在显示屏的最后一行从左到右显示data。当最好一行显示满了就滚动显示。
                        在发送第一个字节之前必须调用 LCD_Clear,该函数对显示大流量的数据很有用。

11.3 与一个RCSystems V-Stamp 语音合成器的接口
        RCSystems V-Stamp 语音合成器是一个简单易用的文本语音处理 器。V-Stamp是一个完全自载模块,只需要1个电源、1个扬声器、1个电阻、2个电容和 1 个串口就可以接入嵌入式系统,通过 UART进行通信。该模块自动将其波特率设置为被接入的嵌入式系统的波特率。从硬件和固件的角度来说,很容易就可以将V-Stamp模块加入RSS 消息源阅读器中。
        11.3.1 语音合成器的硬件
        V-Stamp模块需要2个电容、1个电阻,当然还要1个扬声器。V-Stamp用户手册中提供了语音合成器的硬件电路图。需要外部提供3.3V工作电压。

图23 V-Stamp模块输出引脚


图24 V-Stamp的典型应用

        将ColdFire的UTXD0与V-Stamp的RXD相连,其他引脚就取决于软件了。

图25 V-Stamp的硬件图

        11.3.2 对文本语音处理器的控制
        复位后,V-Stamp就开始将文本转换为语音。本项目对语音的默认设置作了修改。V-Stamp提供了很多修改其配置的命令,详情参见RC8660用户手册。
        配置命令以CTRL-A (0x01)开头,其后紧跟一串ASCII序列。即时命令只需单一的CTRL字符:CTRL-P (0x10),CTRL-R (0x12)和CTRL-S (0x13)。这些命令还可以被嵌入到需要转换成语音的文本信息里。下节讨论需要修改的配置参数。

        11.3.3 改变语音
        RC8660支持11种标准语音。不幸的是,除了听没有其他方法来描述这些语音间的差别。Precise Pete听起来很清晰;Robo Robert听起来很像2001年《A Space Odyssey》里的HAL;Vader的声音就像这个名字一样(没有呼吸)。O命令就是用来修改语音的,它前面的0~10之间的数字表示你所选择的语音。所有的配置命令前必须加一个CTRL-A (0x01)。
        该命令序列即为:CTRL-A (0x01) nO,其中n = 0~10。
表6 语音选项


        11.3.4 改变语速
        语速可以在14个级别内修改。0表示最慢,13 最快,默认是5。本文将其降到2。调整语速用命令S,前面的0~13之间的数字表示你所选择的语速。所有的配置命令前必须加一个CTRL-A (0x01)。
        该命令序列即为:CTRL-A (0x01) nS,其中n = 0~13(0最慢,13最快)。

        11.3.5 改变音量
        音量可以由软件控制。当ColdFire TCP/IP 协议栈在复位后抑制所有的诊断数据时,通过音量调节使语音处理器静音是很有用的。音量可以在0~9之间调整,默认为 5。调整音量用命令 V,前面的 0~9 之间的数字表示你所选择的音量,9表示的音量最大。所有的配置命令前必须加一个CTRL-A (0x01)。
        该命令序列即为:CTRL-A (0x01) nV,其中n = 0~9(0最低,9最高)。

        11.3.6 Flush文本缓冲区
        RC8660有一个很大的UART/text缓冲区(8K字节)。这样,文本语音处理器的工作就不会 被嵌入式系统的操作所干扰;嵌入式系统也基本不用关心RC8600的UART缓冲区是否溢出。CTRL-X命令用于清楚缓冲区,即将所有的ColdFire TCP/IP协议栈的复位诊断数据从RC8660的8K字节缓冲区清除掉。该命令不需要加CTRL-A,也没有任何参数,只有一个字节。
        该命令序列即为:CTRL-X (0x18)

        11.3.7 语音合成器配置固件
        void emg_rss_reader_init(void)
        {
                LCD_Init;
                LCD_String((unsigned char *)RSS FEED READER , 1);
                LCD_String((unsigned char *)By , 2);
                LCD_String((unsigned char *)Eric Gregori , 3);
                LCD_String((unsigned char *)www.emgware.com , 4);
                printf(\x18); // Stop/Flush Talker
                tk_sleep(200);
                printf(\x01);// CTRL-A
                printf(3O); // Select voice
                printf(\x01);// CTRL-A
                printf(2S); // Slow down voice
                printf(\x01);// CTRL-A
                printf(5V); // 5 volume
                tk_sleep(2*200);
                printf(RSS feed reader by Eric Gregori\n);
                printf(RSS feed reader by Eric Gregori\n);
                tk_sleep(10*200);
        }


<<上一页    下一页>>
相关链接


 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.