Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

MSP430F419 用 I/O 翻轉電平寫時序的延遲問題?

$
0
0


MSP430F419 用 I/O 翻轉電平寫時序的延遲問題?


我是用MSP430F419發送資料給HT1621 , 讓段碼LCD顯示


#下圖示HT1621的其中一個模式

HT1621命令模式  

WR是由低電平變為高電平時取DATA的資料

      __                                                                                                                                                       ______
CS      |                                                                                                                                                    |
           |__________________________________________________________________________|
     ______      __       __       __        __       __        __       __       __       __       __        __       __    
                |     |     |     |     |     |     |     |     |     |     |     |     |     |    |     |     |    |     |     |     |     |     |     |     |  
 WR         |__|      |__|      |__|      |__|      |__|      |__|      |__|     |__|      |__|     |__|      |__|      |__|      |_______
 
         ____      __                          _________________________________________________________________  
                 |    |     |                        |                                                                                                    |
DATA        |__|     |____________|__________________________________________________|
 
                         1        0         0    |-- C8        C7      C6      C5      C4       C3      C2       C1     C0 --|
                                                                                            要發送的命令碼

       _______      __       __       ____
                     |     |    |     |    |     |  
  WR             |__|     |__|     |__|
                     |----|----|
                        t1  t2

                   T = t1 + t2


F = 1/T = 1/t1+t2 = 1/5us+5us = 1/10us= 100KHz ,  我要讓WR位的頻率在100kHz , 這樣寫入頻率可以在100KHz , 所以我t1與t2用延遲5us


我運用 _NOP(); 做 t1 = t2 的延遲5us , 我MCLK=2MHz , 用示波器去查看當P1.0由高電平變成低電平的時間是否為5us , 如下程式碼

void delay_5us(void)  
{   
  P1OUT=0x01;  
  _NOP();
  _NOP();
  _NOP();
  _NOP();
  _NOP();
  _NOP();
  P1OUT=0x00;
}

上列程式實際測試為5us


#下面是我寫的HT1621命令模式程式碼

void HT1621Cmd(uchar CmdValue)
{
  uchar i;
  uchar value = COMMAND_ID;  //COMMAND_ID=0x80;
  CS_OFF;         //CS=0
  delay_5us();   
  for( i = 0; i < 12;  i++ )
   {
     if(i==3)
         value = CmdValue;
     WR_OFF;
     delay_5us();
     if((value&0x80)==0)
      {
        DATA_OFF;
        delay_5us();
      }  
     else
      {
       DATA_ON;
       delay_5us();
      }       
     WR_ON;
     delay_5us();
     value<<=1;
   }
   CS_ON;         //CS=1
   delay_5us();  
}



我有接示波器去看 WR 與 DATA 整個時序的對應沒有問題 , 但是t1與t2的時間不是5us , 而是 t1 = 14us , t2 = 20us , 請問為什麼不是5us呢?

因為我之後有要寫I2C介面 , 如果用 I/O 翻轉電平方式模擬 I2C 時序 , 上面延遲時間方式(如delay_5us)依需求設定好延遲時間 , 但實際帶入時序運用時,實際延遲時間卻不同 , 這樣就不能達到自己需求的 I2C 寫入頻率,也會遇到上面延遲問題,希望能解決此問題.

麻煩大家看一下,是哪裡有問題呢? 謝謝





Viewing all articles
Browse latest Browse all 3634

Trending Articles