2012年2月21日 星期二

Atmel Chip要注意的地方跟常忘記的事情

Compiler Software is AVR Studio 4
********************************************************************************************
一般Timer的算法:
頻率:4M
打出軟體PWM:3K
1.4000000/3000=1333.33333333 ; 所以4M/1333.3333333=3000.00000007輸出約3K
  所以4M/1334=2998.50074962   
2.8bit-(0.00033333333*4M/8/1)
  8bit=256
  256-(0.00033333333*4000000/8(軟體除頻)/1(cpu除頻))=90 ==>輸出約3K

Atmega48/88/168 CTC Mode 要注意的地方
1.目前所實驗的是使用 WGM13:0 = 4 ((WGM13,WGM12,WGM11,WGM10)=0100)
2.OCR1A 可以用來設定PWM的輸出
3.TCNT1跟OCR1A做比較後,計數器會歸零,EX:TCNT1=0x0000, OCR1A=0x0FF0, TCNT1會計數到0x0FF0會產生中斷,並將TCNT1清除歸零
4.OCR1A定義是計數器的TOP值
*5.OCR1A計數到TOP時,會產生中斷,
*6.OCR1A小於TCNT1,計數器會丟失這次比較,並會數到0xFFFF,然後再重0x0000重新計數到OCR1A所設定的值
*7.OCF1A是計數到TOP值後,所產生的中斷旗標,
1.如果使用Timer 去計算 時間的中斷的話,OCR0A絕對不能去設定


********************************************************************************************
//AVR Studio 4
*****  函式裡的參數第一個字不能是大寫
Bug mesesge ==>.././_include/UART_Mega48.h:82:26: error: expected ';', ',' or ')' before numeric constant

********************************************************************************************
ATmega48
裡面UART的RX要接TX,TX接RX
自己做的UART轉USB,GND的旁邊是TX,再過來是RX

********************************************************************************************
Tiny461 使用AD有關問題,需要注意的地方
Auto trigger mode 有個bit要注意 ADCSRA |= (1<<ADATE);這bit要注意,
   ADATE Enable:當使用外部的crystal,不知為什麼不能使用會抓不到值,但使用內部的8Mhz,就可以抓的到
   ADATE Disable:可以使用外部的Crystall就沒問題
***特別要注意的地方,在JTAGICE裡面的fuses==>BODLEVEL要選Brown-out detection disable 因為如果要做ADC的功能的話必須要Disable,不然會影響ADC,
  EX:選4.3v會偵測到3.76v
    選Brown-out detection disable就可以detect到0~5v
  
EX 1:  這的設定結果只能抓到0v~3.76v之間的電壓,以上的話是會顯示最大值,192==>192/255(8bit)*5v= 3.7647  <<此現象必須把BODLEVEL disable
 ADCSRA_Prescaler_Select(Division_2);  //ADCSRA = (1<<ADPS0);
 ADCSRB_Auto_Trigger_Enable(Counter0_Overflow); //ADCSRB |= ((1<<ADTS2));  // ADCSRA |= (1<<ADATE); //use Auto trigger enable, but can't use external crystall
 ADMUX_Voltage_Mode(VCC_Voltage);  //VCC used as voltage reference,disconnected from AREF ADMUX &= ~((1<<REFS1)|(1<<REFS0));
 ADMUX_InputChannle_Mode(AnalogCannel_1); //ADC0   ADMUX &= ~((1<<MUX4)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0));  //  ADC0 (PA0)
 DIDR0 |= ((1<<AREFD) | (1<<ADC0D));
 ADCSRA_Enable();
 ADCSRA_Start();

2012年2月13日 星期一

C++ MFC

剛玩VC++,MFC有點不清楚,所以就用筆記,記錄下來,
1.新增專案==>win32專案
2.應用程式設定==>選windows應用程式,跟空專案
3.在方案總管下的自己命名的名稱中,按下右鍵,在最下面有個"屬性"
   ==>MFC的使用==>使用MFC的靜態程式庫
   ==>字元集==>使用多位元組字元集
4.在方案下的自己命名的名稱下,裡面有"原始程式檔",按下滑鼠右鍵==>加入==>新增項目==>C++檔
*******************************************************************
***m_pMainWnd 屬性(事實上,此屬性是由CWinApp類別繼承自CThreadWnd類別),此屬性將指定應用是物件使用的視窗框架物件
***InitInstance(),程式進入點,必須設定該屬性
***MyApp a_app; 建立應用程式物件
以上是最基本的條件

#include <afxwin.h> //載入afxwin標頭檔
class MyApp : public CWinApp //繼承CWinApp
{
public:
 BOOL InitInstance() //程式進入點
 {
  CFrameWnd *Frame = new CFrameWnd(); //建立CFrameWnd物件
  m_pMainWnd = Frame; //將m_pMainWnd設定為Frame
  Frame->Create(NULL,"Hello MFC"); //建立視窗
  Frame->ShowWindow(SW_SHOW);
  return true;
 }
};
MyApp a_app; //建立一個應用程式物件,MyApp為自訂的應用程式類別