:::


Browsing this Thread:   1 Anonymous Users






PIC10F320電源切換LED
#1
初級會員
初級會員


查看用戶資訊
各位先進好,我目前要做一個電源開關切換LED的產品,打開電源則RA0的LED0亮;將電源關掉,在0.5秒內打開,就能切換RA1的LED1亮(LED0為暗);再將電源關掉,在0.5秒內打開,變成RA0的LED0亮(LED1為暗),等於是切換2顆LED燈,之前有試過用RA2輸入,如電路圖所示,結果不穩定,有時能切,有時不行。後來將RA2用INT外部中斷的方式,電路圖一樣,結果有比較好,大概切換5次會有3次成功(成功是指一直開、關電源,則LED會一直變換,不會有LED切不過去的問題)。請問如果要100%成功,要如何修改。謝謝



#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
uchar k=0;


void port_init()
{
OSCCON=0B01010000; //設為4MHZ,這樣速度才可延用
OPTION_REG=0B11111111;//正觸發(用負觸發怪怪的)
ANSELA=0X00; //設RA0~2為數位I/O
WPUA=0X00; //PORTA全部不要PLUU HIGH
TRISA=0B00000100; //RA2 做輸入
PORTA=0X00;
INTCON=0B11010000; //開GIE、PEIE、INTE中斷
}


void output(k)
{
switch(k)
{

case 1:
PORTA=0B00000001;break; //RA0輸出LED0亮
case 2:
PORTA=0B00000010;break; //RA1輸出LED1亮
}
}

void interrupt ISR(void)
{
if(INTF==1)
{
INTE=0;
INTF=0;
k=k+1;
if(k>2)
{
k=0;
}
else
{
}
}
INTE=1;
}

void main()
{
port_init();

while(1)
{
output(k);
}

}

Attach file:



jpg  (0.00 KB)


發表於: 2/11 22:07
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC10F320電源切換LED
#2
資深會員
資深會員


查看用戶資訊
電源關掉 0.5sec ,

所以你的電路至少要能在斷電下自保 0.5sec (大電容),並有斷電偵測的功能/電路。

發表於: 2/12 18:11
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC10F320電源切換LED
#3
初級會員
初級會員


查看用戶資訊
在0.5秒以內都可以,在右邊5V的地方有一個100u電容。10k的可變電阻是調整分壓,大約在2.2V時可切換,電阻值約7.5K。斷電偵測的功能是輸入到RA2的INT外部中斷。

發表於: 2/12 19:11
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC10F320電源切換LED
#4
資深會員
資深會員


查看用戶資訊
1. 將電源關掉
2. 在0.5秒內打開(復電)
切換LED

從電路圖來看,你的電源指的應該是 12V

你在電源(12V)關掉時,又要MCU計時,必須VDD(5V)正常供電...

1. 12V一關電要馬上得知
2. 大電容放電提供VDD(5V),至少1秒以上
最好可以有個三五秒(愈長愈好), 電容會老化...

12V ---(A)---|>|----(B)--

A點 是檢測12V是否斷電
A,B點中間用二極體,做反向電容放電隔離
B點 之後要有大電容,提供斷電(放電)保持5V供電...

1. 12V(A點)斷電
斷電產生中斷, 開始計時
關掉全部LED(或你的LED行為定義)

2. 計時0.5秒前,A點復電
切換LED

3. 計時超過0.5秒
重設LED(或重置MCU)
關掉全部LED(或你的LED行為定義)

以上個人看法供參考...

註: 如果12V電壓也是緩慢下降,
A點前也有大電容放電,則要檢測12V電壓值.

發表於: 2/13 13:09
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC10F320電源切換LED
#5
版主
版主


查看用戶資訊
PIC10F320 內部記憶體有:

Memory
• Up to 512 Words of Flash Program Memory
• 64 Bytes Data Memory
High-Endurance Flash Data Memory (HEF)
- 128B of nonvolatile data storage
- 100K erase/write cycles


1. 可否利用此 HEF 的記憶空間來儲存動作的部分。在掉電時將目前的狀態存到 HEF 裡,開機後看一下 HEF 的狀態來決定要做何種動作?

2. 掉電偵測可以用內部的參考電壓 (FVR) 及 ADC 的參考電壓的相對變化值來判斷是否掉電。
(FVR 是固定電壓,ADC 參考電壓在掉電時期電壓值會變小,這時 FVR 轉出來的數值就會變大。當變化的數值超過所設定的門檻值時就代表掉電,立即將狀態存到 HEF。

發表於: 2/13 14:52
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC10F320電源切換LED
#6
資深會員
資深會員


查看用戶資訊
斷電偵測不能直接用 io 判斷 ,一般是用 adc ,要快那就是用比較器,電壓掉多少就會反轉信號。

※你知道什麼叫 debounce 嗎? 你以為信號會很乖的 直上直下? 正常的信號都會抖抖抖~~~

沒做 debounce 你的程式會正常?

發表於: 2/14 16:51
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC10F320電源切換LED
#7
初級會員
初級會員


查看用戶資訊
您好,目前用ADC的方式已經可以用,但用HEF寫入和讀出資料都有問題,請問有無相關FLASH讀寫的教材或範例,謝謝

發表於: 5/24 18:28
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC10F320電源切換LED
#8
版主
版主


查看用戶資訊
該搜尋了一下 PIC10F320 的主網頁,但該網頁目前無法顯示,所以無法提供有關 Flash Memory 的範例程式。

但在 PIC10F320 的 Data Sheet 裡的第九章節裡: 9.0 FLASH PROGRAM MEMORY CONTROL 有詳細的 Flash Read/Erite 的流程及組合語言的範例,可以參考一下。

PIC10F320 沒有支援 HEF 的功能,只能用 Flash Memory 來取代,注意一下 Flash Memory 的抹寫次數只有 1 萬次左右。

發表於: 5/25 11:35
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
You cannot start a new topic.
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]