久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4057|回復: 0
打印 上一主題 下一主題
收起左側

監(jiān)控數(shù)碼相機的制作,含單片機源碼,原理圖和介紹文檔

[復制鏈接]
跳轉到指定樓層
樓主
ID:276009 發(fā)表于 2018-1-16 10:53 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
  本文介紹一個監(jiān)控用的數(shù)碼相機的軟硬件工作原理和實現(xiàn)方法。整個裝置以51單片機為核心,采用CMOS圖像傳感器芯片OV7640進行圖像的采集,由OV528芯片進行圖像壓縮,然后經(jīng)SL811HS USB主機芯片將圖像保存到U盤中。這是我多年前制作的小裝置,經(jīng)過了實際使用的測試。

1   引言
    在面對低端用戶的應用中,設計一種體積小、使用安裝容易,價格低廉,并能滿足應用要求的簡易視頻監(jiān)控裝置,無疑會有較好的應用前景。基于性價比考慮,本裝置以51單片機為控制中心,用CMOS圖像芯片為傳感器,以U盤作為存儲介質(zhì)來制作一個能自動拍攝的簡易數(shù)碼相機。它采用靜態(tài)圖像單幀間隔采集保存的方式,可以滿足普通家庭安全監(jiān)控的要求。

2    硬件設計

    圖像處理芯片OV7640和OV528均是美國OmniVision公司的產(chǎn)品。OV7640是CMOS彩色圖像傳感器,負責圖像的采集。它內(nèi)置640×480分辨率的象素陣列,并支持外部水平、垂直同步輸入格式、數(shù)字視頻輸出、增益控制、自動白平衡等。OV528則是一款高性能的DSP。本裝置采用的OV528有兩個功能:一是將單片機發(fā)出的圖像設置和讀寫控制命令傳給OV7640,二是將OV7640采集到的圖像數(shù)據(jù)壓縮成JPEG格式后,再傳輸給單片機。最后,由單片機將JPEG圖像文件經(jīng)SL811HS的USB主機接口寫到外接U盤中。
USB主機接口采用Cypress公司的SL811HS的USB芯片。它兼容USB1.1規(guī)范,支持usb主機或usb設備功能。
由于USB接口芯片SL811HS的M/S腳接低電平時,工作于主機方式;當M/S腳接高電平時,工作于設備方式。為了能讓它充當外接U盤設備的主機接口,所以將M/S腳接地。而SL811HS的地址和數(shù)據(jù)信號是分時復用的,所以只要將的AD0-AD7與單片機的數(shù)據(jù)總線連接即可。至于地址信號和數(shù)據(jù)信號的區(qū)分,則由充當?shù)刂房刂凭的A0決定。在讀寫SL811HS,先讓A0=0,向數(shù)據(jù)總線發(fā)送要讀寫的地址;然后讓A0=1,再向數(shù)據(jù)總線發(fā)送要讀寫的數(shù)據(jù)。連接INT0的中斷信號可使SL811HS有事件發(fā)生時(當有USB設備接入時,可觸發(fā)該中斷),單片機可通過讀取SL811HS 的狀態(tài)寄存器來判斷事件類型,并做出相應處理。
STC89LE51RD+是51系列兼容的單片機,它有64K的FLASH可用于裝載運行程序。由于它只有1K的RAM,不能滿足工作要求,所以另外擴展了32K的RAM(圖中未畫出)。由單片機的A15提供片外RAM和SL811HS的片選信號(A15=0選片外RAM,A15=1選SL811HS)。單片機通過串口向OV528發(fā)送圖像采集命令和接收圖像數(shù)據(jù),通過并口和SL811HS將圖像數(shù)據(jù)寫到U盤。
3     軟件設計

程序開始時,先進行初始化操作,然后就進入圖像采集和存儲的循環(huán)。對SL811HS芯片的初始化操作主要包括內(nèi)部寄存器復位和USB總線復位。對圖像芯片初始化是通過ov528實現(xiàn):它設置圖像尺寸為320*240的JPEG格式,每個數(shù)據(jù)包大小為518字節(jié)(內(nèi)含512字節(jié)圖像數(shù)據(jù),這是允許的包數(shù)據(jù)最大字節(jié)數(shù))。
在主程序的循環(huán)體中,單片機不斷檢測USB設備狀態(tài),如果發(fā)現(xiàn)設備(U盤)接入,則通過SL811HS進行U盤設備枚舉。一旦枚舉成功,就創(chuàng)建文件,進行圖像采集和數(shù)據(jù)存盤,如此不停循環(huán)。當然每次創(chuàng)建的文件名應該不同(文件名采用字母加序號方式)。
因為實現(xiàn)U盤文件系統(tǒng)的程序設計已有很多文獻介紹,在此不予討論。
4   圖像采集命令
圖像采集是由單片機通過串口向OV528發(fā)送控制命令來實現(xiàn)的(命令格式由OV528手冊提供)。單片機每次發(fā)送圖像采集命令前,均要發(fā)送一系列同步(SYNC)信號,以便讓單片機與OV528建立通訊連接(OV528有波特率檢測和自適應功能)。工作正常時,命令和應答包都是6個字節(jié)。“同步信號”的格式為16進制“AA 0D 00 00 00 00”,“應答(ACK)”的格式為“AA 0E XX** 00 00”。“XX”表示根據(jù)不同命令取不同值,“**”表示可取任意值。
單片機收到OV528的應答和同步信號后,才開始圖像采集。圖像采集的工作流程如圖5所示,其各步驟涉及的相關命令如下:
(1)為了保證圖像采集工作方式不變,單片機每次開始圖像采集時,都先設置圖像格式和每個數(shù)據(jù)包的大小。“設置圖像格式”的命令字為“AA 01 00 07 ** 05”。其中07表示圖像為JPEG格式,05表示圖像尺寸為320*240,“**”表示該字節(jié)可取任意值。
(2)“設置數(shù)據(jù)包大小”的命令為“AA 06 08 06 02 00”,其中第3-4字節(jié)“0602”為數(shù)據(jù)包大小。因為是低字節(jié)在前,高字節(jié)在后,調(diào)整后為0206H,即518字節(jié)。
(3)“獲取圖像”命令的格式為“AA 04 05 00 00 00”。當單片機發(fā)出“獲取圖像”命令時, OV528會回應1個6字節(jié)的應答包和1個6字節(jié)的數(shù)據(jù)包。該6字節(jié)數(shù)據(jù)包的第4和第5字節(jié)為圖像文件的長度。
(4)單片機根據(jù)圖像文件長度參數(shù)來計算后面要接收多少個512字節(jié)的圖像數(shù)據(jù),才能接收完整個圖像文件(注意,最后一個包的圖像數(shù)據(jù)通常不夠512字節(jié))。
(5)單片機發(fā)出帶有包序列號的“請求數(shù)據(jù)包”命令,并逐個接收數(shù)據(jù)包。“請求數(shù)據(jù)包”命令格式為“AA 0E 00 00 LL HH”, 后2個字節(jié)為包序列號,低字節(jié)在前,高字節(jié)在后。如“AA 0E 00 00 00 00”為“請求第0個數(shù)據(jù)包”, “AA 0E 00 00 01 00” 為“請求第1個數(shù)據(jù)包”,依此類推。
(6)單片機接收到的一個518字節(jié)的數(shù)據(jù)包結構依次為:2字節(jié)的包序列號,2字節(jié)數(shù)據(jù)長度,512字節(jié)的圖像數(shù)據(jù)和2字節(jié)的校驗碼。所以單片機每接收一個數(shù)據(jù)包后,都應剔除開不屬圖像數(shù)據(jù)的這6個字節(jié)。當接收完所有的數(shù)據(jù)包后,就將圖像文件存盤。由于對U盤的操作比較慢,最后應有短暫延時,待寫U盤操作完成后,再進入下一次圖像采集過程。
本系統(tǒng)采用320X240的JPEG圖像格式時,每個文件大小為5-14KB,寫一個文件到U盤約要3秒左右。可以滿足一般安防監(jiān)控的要求。
采集圖像的關鍵函數(shù)源碼及注解如下:
  1. void Get_Picture(void)
  2. {   unsigned charxdata   *Ptr1;
  3.     byte idata bI;  byte idata bM;
  4.     byte idatabBuffer[6],bBuffer1[5];  word idatawK,wPackNo;
  5.     unsigned longwwI;

  6.     wwI = 0x01ffff;         wRec_Num = 0;
  7.     bBuffer[0] =0xAA;  bBuffer[1] = 0x04;  bBuffer[2] = 0x05; //get picture:
  8.     bBuffer[3] =0x00;  bBuffer[4] = 0x00;  bBuffer[5] = 0x00;
  9.     Send_Command(bBuffer,6);    //發(fā)送“獲取圖像”命令
  10.     WDT_CONTR = 0x00;       //0x3f  //feed watchdog //喂狗
  11.     MCU_LED1=1;MCU_LED2=1;MCU_LED3=1;MCU_LED4=1;   //運行狀態(tài)指示-4個LED滅

  12.     while(wRec_Num<12) MCU_LED1=0;MCU_LED1=1;  //waitc328's ack+image size=12B
  13.     wRec_Num = 0;
  14.     if (RxBuf[1] ==0x0E && RxBuf[2] == 0x04 && RxBuf[7] == 0x0A)  //c328's ack
  15.     {   bBuffer1[3] = RxBuf[9];     bBuffer1[4] = RxBuf[10];    //=jpeg length
  16.         wPackNo =((word)bBuffer1[4] << 8) + (word)bBuffer1[3];
  17.         wPackNo /=512;  
  18.         bBuffer[0] =0xAA;  bBuffer[1] = 0x0E;  bBuffer[2] = 0x00;
  19.         bBuffer[3] =0x00;  bBuffer[4] = 0x00;  //bBuffer[4]=0th packetID=0
  20.         bBuffer[5] =0x00;
  21.         Send_Command(bBuffer,6);    //發(fā)送應答命令+ask for packetID=0
  22.         WDT_CONTR= 0x00;       //0x3f  //feed watchdog //喂狗
  23. //-------------------start of loop to receive wPackNo ofpackets----------
  24.         for (bI =0;bI < wPackNo;bI ++ )    //loop toreceive wPackNo of packets
  25.         {   
  26.             while(wRec_Num < 7) MCU_LED2=0;    MCU_LED2=1;  //wait for data size
  27.             WDT_CONTR= 0x00;   //0x3f  //feed watchdog //喂狗
  28.             wK =((word)RxBuf[3] << 8) + (word)RxBuf[2];//datasize=packetsize-6=512
  29.             while(wRec_Num<=wK) MCU_LED3=0;MCU_LED3=1; //waitimage receive finish
  30.             EA =0;  //DISABLE_INTERRUPTS;   
  31.             Ptr1=RxBuf+4;   //omitted the first 4B(ID+datasize)
  32.             WriteImg(Ptr1,wK);//omittedthe first 4B and last 2B(only write 512B)
  33.             EA =1;  //ENABLE_INTERRUPTS;

  34.             for (bM= 0;bM < 50 ;bM ++ )    // wait forc328 to receive MCU's ack
  35.             { }     //ifcode down by 12 Tcyc,bM<30 isnot enough;50 is ok

  36.             wRec_Num= 0;   wK = 0;                 
  37.             bBuffer[0]= 0xAA;  bBuffer[1] = 0x0E;
  38.             bBuffer[2]= 0x00;  bBuffer[3] = 0x00;
  39.             bBuffer[4]= bI + 1;        //bBuffer[4]=bI+1thpacketID
  40.             bBuffer[5]= 0x00;
  41.             Send_Command(bBuffer,6);    //發(fā)送應答命令+next packet ID
  42.             WDT_CONTR = 0x00;       //0x3f  //feedwatchdog //喂狗
  43.         }
  44. //----------------------//end of loop to receive wPackNoof packets-------------

  45.         while(wRec_Num < 7) MCU_LED4=0;    MCU_LED4=1;
  46.         WDT_CONTR= 0x00;   //0x3f  //feed watchdog //喂狗
  47.         wK =((word)RxBuf[3] << 8) + (word)RxBuf[2];    //lastpacket size
  48.         while(wRec_Num<=wK)MCU_LED1=0; MCU_LED1=1;     //waitlast package data
  49.             EA =0;  //DISABLE_INTERRUPTS;   
  50.             Ptr1=RxBuf;
  51.             WriteImg(Ptr1,wK); //omitted the first 4B and last 2B
  52.             EA =1;  //ENABLE_INTERRUPTS;   
  53.         MCU_LED1=0;     MCU_LED2=1;MCU_LED3=1;MCU_LED4=1;   //運行狀態(tài)指示
  54.         bBuffer[0] =0xAA;  bBuffer[1] = 0x0E;      bBuffer[2] = 0x00;
  55.         bBuffer[3] =0x00;  bBuffer[4] = 0xF0;      bBuffer[5] = 0xF0;
  56.         Send_Command(bBuffer,6);        //發(fā)送last應答命令to c328
  57.         WDT_CONTR= 0x00;   //0x3f  //feed watchdog //喂狗
  58.     }   //end of "if (RxBuf[1] ==0x0E............"
  59.     WDT_CONTR = 0x00;       //0x3f  //feed watchdog //喂狗
  60. }
復制代碼
我給出的附錄源碼為4個主要的C文件:Main.c,SL811.C,F(xiàn)at32.c,serial.c。主程序在Main.c中,SL811.C和Fat32.c有U盤相關函數(shù),serial.c里有圖像驅(qū)動函數(shù)。均是經(jīng)無錯誤編譯并成功完成圖像采集和存盤的源程序。硬件結構和接口圖及軟件流程圖的介紹請看附件的“監(jiān)控數(shù)碼相機的制作.DOC”。 其他程序和頭文件如果有人感興趣,過后可以繼續(xù)補充提供。


全部資料51hei下載地址:
camera-code -主要源碼 DOC.zip (116.66 KB, 下載次數(shù): 25)




評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一a一片一级一片 | 自拍视频网| 精品一区二区三区不卡 | 成人精品国产免费网站 | 亚洲久久| 日本久久精品视频 | 亚洲成人精品在线 | 日韩成人在线观看 | 精品久久久久久亚洲国产800 | 亚洲成人一区二区 | av一级| 7799精品视频天天看 | 日韩欧美三区 | 亚洲一区视频在线 | 日韩在线看片 | 欧美涩涩网 | 91久久精品国产 | 久久精品成人 | 欧美一级片在线 | 国产精品1区2区3区 男女啪啪高潮无遮挡免费动态 | 日本精品视频一区二区三区四区 | 黑人精品| 欧美精品一区二区三区四区五区 | 日韩精品一区二区三区第95 | 日本手机看片 | 日日操网站 | 97久久精品午夜一区二区 | 91麻豆精品国产91久久久久久 | 欧美激情精品久久久久久变态 | 国产一区二区三区在线看 | 91五月婷蜜桃综合 | 三级av在线 | 久久69精品久久久久久久电影好 | 精品国产乱码久久久久久88av | 在线一区 | 天天操夜夜操免费视频 | 男人的天堂在线视频 | 视频国产一区 | 91中文字幕在线观看 | 插插宗合网| 日韩中文一区二区 |