วันพฤหัสบดีที่ 18 พฤศจิกายน พ.ศ. 2564

STM8S103F3 ADC

 บันทึกกันลืม
    เป็นเรื่อง ADC ของบอร์ดที่ใช้ชิพ STM8S103F3 ปกติก็คุ้นเคยกับ Arduino ถ้าใช้ Arduino IDE มันก็สะดวก แต่ถ้าใช้ STVD+COSMIC นี่ก็วุ่นๆ พิลึก สำหรับเซียน MSC8051 คงไม่ใช่ปัญหา

    Register ที่ต้องกำหนดค่า เพื่อเริ่มใช้งาน analogRead
        ADC_CR1 //ADC control , ADC On/Off
        ADC_CR2 //ADC control , Align
        ADC_CSR //Control/Status
        ADC_DRL //Data register low
        ADC_DRH
//Data register high

Fig.1 ADC_CR1 setting.

 
Fig.2 ADC_CR2 setting.


Fig.3 ADC_CSR setting.

Fig.4 STM8S103 AINx pinout.

 

    ADC_CSR ถ้าจะใช้ D3 เป็นขารับสัญญาณ analog อ้างอิง Fig.3 ADC_CSR
    ดูที่ Fig.4 ขานี้ชื่อ AIN4 ดังนั้นต้องกำหนดค่าที่ bit 2
        0b0000    AIN0
        0b0001    AIN1
        0b0010    AIN2
        0b0011    AIN3
        0b0100    AIN4    *ตั้งค่า bit2 ให้เป็น 1
        0b0101    AIN5

โค้ด:
void ADC_Init(){
    ADC1_CSR |= (1<<2);    //CONTROL&STATUS CHANEL BIT2 AIN4 SET.
    ADC1_CR2 |= (1<<3);
    ADC1_CR1 |= (1<<0);    //CONFIG REG. BIT0=1 A/D ON.
}

uint16_t ADC_READ(){
    uint8_t Hval, Lval;
    ADC1_CR1 |=(1<<0);
    while(!(ADC1_CSR &(1<< 7)));  //CONTROL&STATUS BIT7 EOC SET
        Lval = ADC1_DRL;
        Hval = ADC1_DRH;
        ADC1_CSR &=~(1<<7); //CLEAR FLAG
    return ((Hval <<8)| Lval );
}

 เวลา monitor ก็ใช้ UART ส่งข้อมูลไปดูใน PC เอานะ
สุดท้ายนี่มันก็ได้แค่ analogRead(PD3);  ของ Arduino IDE.


MAPs

วันก่อนได้ลองเขียนแบบ แบบตัวนั้นมันต้องแนบแผนที่สังเขปของโครงการ ลองๆ แล้วก็ใช้ snazzymaps แล้วก็เอามาทำต่อใน inkscape มันก็ออกมาดูได้ระดับห...