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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于MCU紅外發射和接收能不能同時完成?

  [復制鏈接]
跳轉到指定樓層
樓主
設計一個產品,其中用到紅外開關,為防止干擾,采用紅外一體頭,為使程序簡單,紅外發射采用555產生38k載波,發射數據由單片機p10口提供,紅外接收由外中斷(p32)實現,原理圖如下:

現在的問題是:不能接受。
分析:接收頭正常(能接收一般遙控器的信號),紅外發射管好像正常(檢測到紅外光),555可能正常(3端有高電平輸出),
          可能是數據傳輸的問題:從程序分析,555調制發射應該是可以的,但是一旦外中斷發生(此處是發射管的漫反射光被反射到接收管),
          中斷程序開始執行,發射程序中止,因此中斷程序不能接受到數據,只能接收到38k載波。
請問各位大俠:像這樣的用一塊單片機同時完成紅外的發射和接收,能行嗎?有什么辦法實現本項目的紅外開關目的?謝謝!
下面貼出程序的相關部分:










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

使用道具 舉報

沙發
ID:134430 發表于 2020-11-5 15:33 | 只看該作者
補充說明:發送數據里的4個數據是固定碼,代替32位設備碼和鍵碼
回復

使用道具 舉報

板凳
ID:283954 發表于 2020-11-5 23:45 | 只看該作者
既然是自己發自己收就不一定要照著別人的格式,你可以讓發射管發射固定的38k間歇信號,比如10MS開,10MS關,接收管分析接收信號的周期,若符合就不是干擾信號,而產生間歇信號可以用單片機的一個定時器來完成,而且是用中斷來控制,該定時器的中斷權位比P3.2高,因此在P3.2中斷期間輸出信號不會中斷。若還有其他定時器可用,應該用來產生38K信號直接輸出到發射管,不必用555IC。
回復

使用道具 舉報

地板
ID:134430 發表于 2020-11-6 08:57 | 只看該作者
dalaoshi 發表于 2020-11-5 23:45
既然是自己發自己收就不一定要照著別人的格式,你可以讓發射管發射固定的38k間歇信號,比如10MS開,10MS關 ...

謝謝了!但是,用定時器產生38k信號不是需要頻繁中斷嗎?能否提供一個程序參考一下?再次謝謝!
回復

使用道具 舉報

5#
ID:134430 發表于 2020-11-6 09:08 | 只看該作者
dalaoshi 發表于 2020-11-5 23:45
既然是自己發自己收就不一定要照著別人的格式,你可以讓發射管發射固定的38k間歇信號,比如10MS開,10MS關 ...

我最主要的疑問是:一個單片機能否實現紅外的發和收?按君所言,定時器產生38k信號,在接收管接收時這個38k信號已經發送完畢,如何才能收到?這是我最不懂的地方。
回復

使用道具 舉報

6#
ID:382699 發表于 2020-11-6 10:18 來自觸屏版 | 只看該作者
P1口好像漏了上拉電阻,那樣的話555第4腳一直都是低電平,不能工作了!
回復

使用道具 舉報

7#
ID:573999 發表于 2020-11-6 10:18 | 只看該作者
理論上說是不能同時的,但芯片接收和發射用的時間特別短毫秒級的,給人的感覺像同時處理的,接收一般用定時器捕獲或中斷做接收。
回復

使用道具 舉報

8#
ID:283954 發表于 2020-11-6 14:09 | 只看該作者
STC12單片機有定時器輸出口,定時器可以自己重裝,有需要可以開中斷,但產生38k無需中斷。
再開一個定時器T1定時10ms, 這個要中斷,每次中斷反轉TR0。
跑的時候,若TR0為1,接收管輸入端產生中斷,進入測量脈載波長度程序,過程中T1發生中斷將TR0置0,載波消失,即獲得載波長度,若與10ms相符則非干擾,大概是這樣。


AUXR EQU 8EH
WAKE_CLKO EQU 08FH   

ORG 0000H

MOV WAKE_CLKO,#00000001B      ;ENABLE BRT(=4),T1(=2) T0(=1) HAVE CLOCK OUTPUT BRT@P1.0 T1@P3.5 T0@P3.4
MOV AUXR, #11111100B              ;T0x12,T1x12,UART_M0x6,BRTRUN,S2SMOD,BRTx12,EXTRAM,S1BRS
MOV TMOD, #00100010B            ;TIMER1 AS MOD2(8 BYTE AUTO RELOAD TIMER)
                                                ;GATE, C/T,M1,M0(T1) GATE, C/T,M1,MO(T0)

MOV TL0, #111                 ;Tx12 111=38.2K OUTPUT AT P3.4
MOV TH0, #111
SETB TR0                         ;RUN T0
回復

使用道具 舉報

9#
ID:311846 發表于 2020-11-6 17:16 | 只看該作者
此時有個示波器你就比較好解決問題了,收發端口是否正常就可以檢測出來,考慮中斷是否會影響發數據,有沒有辦法避免,然后就是最好先用兩個單片機先驗證收發數據都可以了,再看怎么整合在一個單片機驗證
回復

使用道具 舉報

10#
ID:134430 發表于 2020-11-10 10:44 | 只看該作者
感謝大家的指導!
我重新寫了程序,自定義了協議,用555連續發送1、0碼,接收端接收到一組1、0,即算成功。
程序在keil 上運行看不出毛病,但是搭實際電路,總不成功。
555的電阻電容參數根據555的軟件求得,通過手工計算也對,因為沒有示波器,不能最終驗證38k。
現將程序和電路圖貼出,請大家看看毛病在哪里?


/*------- 用555發生38k載波的紅外發射、接收實驗程序 -------------

        At89s52/STC89c52RC + 555 + (f=12)
       
        自定義紅外協議:連續發送1,0,    1:10ms高電平,0:10ms低電平
                        接收端只要接收到一組1,0即算成功。
       
        555提供38k載波,
       
        發射管處于常發射狀態,所以程序中沒有發射函數.
       
        工作過程:發射管接收管處于漫反射狀態,發射管不停地發射1、0,
                  當有物體將紅外光反射到接收管時,外中斷啟動接收程序。
                  
//-------------------------------------------------------------*/

#include <reg52.h>

#define uchar unsigned char
#define uint16 unsigned int

sbit ir_se                =P1^0;
sbit ir_re      =P3^2;                //receive 接收,  接收管輸出,與外中斷復用!
#define ir_re_H                ir_re==1
#define ir_re_L                ir_re==0

sbit Led                =P3^3;                //代表具體應用

bit re_OK;                                        //接收成功標志

//------函數聲明-------------
void Sever();
void ir_receive();


//==============================
void main()
{
        Sever();
        while(1)
        {        //主程序處于等待外中斷(p32==0)
                if(re_OK==1)                //接收成功
                {
                        re_OK=0;
                        Led=0;
                }
//                EX0=1;
        }
}

//----------中斷服務程序----------
void Sever()                                   
{
        //----- 定時器初始化 -----                          
    TMOD=0x21;              //定時器0工作方式1; (定時器1工作方式2: 暫不用)
          
        //----- 定時器0 :1ms計時,晶振=12 ----
    TH0=0xfc;               
    TL0=0x18;                                 
    ET0=1;                  //允許定時器0 中斷
    TR0=1;                  //開定時器0中斷, 本定時器常開!!

        //----- 外中斷初始化 -----
    EX0=1;                  //允許外中斷 0中斷
        IT0=1;                  //外中斷 0下降沿觸發
//        PX0=1;                  //外中斷 0優先

        //----- 開總中斷 -----
    EA=1;                               
}


//----- 定時器0中斷:紅外發射管發射計時 -----
uchar  msForIr_se=0;                       
uchar  msForIr_re=0;

void Timer0() interrupt 1              
{
    TH0=0xfc;                                        //1ms 定時,初值
    TL0=0x18;

        msForIr_se++;
        if(msForIr_se>=10)
        {
                ir_se=~ir_se;
                msForIr_se=0;
        }
        msForIr_re++;                       

}

//========= 紅外接收:外中斷0 中斷服務程序 (p32)============
void Extern0() interrupt 0      
{
        ir_receive();
}


//-------紅外接收函數-------------

void ir_receive()
{
        uchar i;

        EX0=0;
        msForIr_re=0;                                //低電平開始計時

        for(i=2;i>0;i--)
        {
                while(ir_re_L);                        //等待高電平
                if(msForIr_re>=8)                //檢查高電平之前的低電平持續時間,
                                        //每個1,0碼發送時間但是10ms,所以這里取8ms
                {
                        msForIr_re=0;                //高電平開始計時

                        while(ir_re_H);                //等待低電平
                        if(msForIr_re>=8)        //檢查低電平之前的高電平持續時間,
                        {
                                msForIr_re=0;        //低電平開始計時
                                re_OK=1;                //高、低電平都接收到
                        }
                }
                if(re_OK==1)                        //只要接收到一組1,0,就終止程序
                        break;
        }
        EX0=1;                                                //重開中斷
}



下面是電路圖,發送的數據由p10提供,分別接與1、2、3、4處試驗,都不能成功


回復

使用道具 舉報

11#
ID:450849 發表于 2020-11-10 11:32 | 只看該作者
wh8010jky 發表于 2020-11-6 09:08
我最主要的疑問是:一個單片機能否實現紅外的發和收?按君所言,定時器產生38k信號,在接收管接收時這個3 ...

完全可以做到,最主要的是你發射和接受不能用堵塞式延時。
回復

使用道具 舉報

12#
ID:841476 發表于 2020-11-10 12:54 | 只看該作者
樓上說得對:理論上說是不能同時的,但芯片接收和發射用的時間特別短毫秒級的,給人的感覺像同時處理的,接收一般用定時器捕獲或中斷做接收。其實實際上沒有做到同時,但對人來說也差不多了
回復

使用道具 舉報

13#
ID:283954 發表于 2020-11-10 16:09 | 只看該作者
你得首先確定555發射的38K信號能讓P3.2產生中斷,反射式紅外線距離是很短的,用萬用表量一下P3.2腳就能看出,或者在中斷入口處點亮一顆LED指示燈也能測出。
回復

使用道具 舉報

14#
ID:134430 發表于 2020-11-16 19:04 | 只看該作者
本帖最后由 wh8010jky 于 2020-11-17 00:14 編輯

最近,一直做紅外發射接收的試驗,今天終于成功了,現將結果公布:
一、程序:












二、電路圖:



電路圖中元件的說明:
發射管電阻:500~700,這里選用680時,工作電流2.5mA,作用距離20cm,
                     電阻太小,電流很大,并且直接干擾接收管,出現“沒有遮擋物,一體頭就收到信號”。
555的電阻實際是7.93k,  和18.73k

三、體會:
用一塊單片機實現紅外的發射和接收是不可行的。(上面的例子單片機沒有干預紅外發射)
原因是單片機不能同時控制發射和接收過程,有朋友認為紅外發射和接收都是ms級的,
人根本感覺不到,這是對的,但是單片機能感覺到,紅外光從發射管到接收管的時間是什么級的
大家有概念,當接收管啟動時發射管已經停止,先前發射的紅外光早已飛到無限遠,
如果一直有遮擋物在適當位置,由于接收程序滯后,接收管未啟動,紅外光也“失效”了。
試驗中寫過用兩塊單片機分別控制發射和接收程序,試驗很成功,但將兩個程序結合由一塊單片機
控制就失敗了,具體以后再發布。

以上認識如有不當,請指正,并希望看到更多的方案。

感謝各位參與本帖討論,從討論中吸取了各位的經驗!










評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

15#
ID:134430 發表于 2020-11-17 01:25 | 只看該作者
wh8010jky 發表于 2020-11-16 19:04
最近,一直做紅外發射接收的試驗,今天終于成功了,現將結果公布:
一、程序:

剛剛覺得程序還可簡化,現將簡化后的程序貼出







回復

使用道具 舉報

16#
ID:89515 發表于 2020-11-17 08:54 來自觸屏版 | 只看該作者
沒這樣做過,但是理論上是可行的。38khz頻率,周期26us可以執行很多指令。使用32位單片機(8位高速也行),用兩個定時器來做應該可行。如果模擬nec協議,脈寬是100us級的就更沒問題了。用接收數據的定時器控制發送數據的定時器,考慮優先級,接收數據脈寬范圍,時間精度等。
回復

使用道具 舉報

17#
ID:685385 發表于 2020-11-17 08:56 | 只看該作者
這是NEC協議,你程序代碼的時間設置不對,就是判斷時間,你多測試幾次就可以了,重要的是你的載波發生一定要正確
回復

使用道具 舉報

18#
ID:342954 發表于 2020-11-17 09:46 | 只看該作者
程序設計思想問題,發送和接收用中斷,
回復

使用道具 舉報

19#
ID:342954 發表于 2020-11-17 09:47 | 只看該作者
接收時,脈充寬度,做一個容差
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人精品一区二区三区 | 国产视频亚洲视频 | 国产午夜精品久久 | 午夜精品视频在线观看 | 中文字幕综合 | 国产一区二区三区高清 | 一区二区在线不卡 | 婷婷中文字幕 | 在线免费观看黄色网址 | 欧美成人免费 | 99久视频 | 国产精品99 | 国产精品久久久av | 欧美精品中文字幕久久二区 | 9久久婷婷国产综合精品性色 | 亚洲成人中文字幕 | 五月精品视频 | 黄色一级免费 | 国产98色在线 | 日韩 | 日韩在线视频一区 | 日韩电影一区 | 国产精品一区在线 | 影音先锋男 | 综合久久久久 | 精品中文字幕在线 | 亚洲精品天堂 | 亚洲免费在线播放 | 亚洲一区 中文字幕 | 日日干夜夜操 | 九九精品热 | 亚洲成人免费在线 | 日本三级播放 | 国产一区二区三区在线免费观看 | 国产蜜臀| 性网站免费| 国产专区在线 | 4hu最新网址| 拍真实国产伦偷精品 | 精品国产99 | 中国美女撒尿txxxxx视频 | 日韩av在线不卡 |