[Help] Đọc ADC và hiện số thực trên LCD

lee_trieu

Gà con
:)Chắc bạn dung CCS quá, mình thì IAR thôi:D


Tùy vào con chip bạn sử dụng riêng g2553 thì khó hết với level code của mình đâu, chắc bạn mô phỏng mấy con bé tí trên proteus chứ gì? Temp nội là tương đối thôi ah tham khảo được
Ah không em dùng IAR đó chứ:-(
Hi chắc là do mô phỏng dùng con nhỏ quá, Em chuyển sang g2553 nó không báo lỗi nữa:5cool_sweat:để mai em ráp mạch thật test thử xem sao:-s
 

Carue

Trứng gà
:)Chắc bạn dung CCS quá, mình thì IAR thôi:D


Tùy vào con chip bạn sử dụng riêng g2553 thì khó hết với level code của mình đâu, chắc bạn mô phỏng mấy con bé tí trên proteus chứ gì? Temp nội là tương đối thôi ah tham khảo được
Ah không em dùng IAR đó chứ:-(
Hi chắc là do mô phỏng dùng con nhỏ quá, Em chuyển sang g2553 nó không báo lỗi nữa:5cool_sweat:để mai em ráp mạch thật test thử xem sao:-s
phần cứng của tôi hơi phức tạp nên không đưa lên được, cái code đó được tách từ đây nè
:1cool_byebye:
 

lee_trieu

Gà con
:)Chắc bạn dung CCS quá, mình thì IAR thôi:D


Tùy vào con chip bạn sử dụng riêng g2553 thì khó hết với level code của mình đâu, chắc bạn mô phỏng mấy con bé tí trên proteus chứ gì? Temp nội là tương đối thôi ah tham khảo được
Ah không em dùng IAR đó chứ:-(
Hi chắc là do mô phỏng dùng con nhỏ quá, Em chuyển sang g2553 nó không báo lỗi nữa:5cool_sweat:để mai em ráp mạch thật test thử xem sao:-s
phần cứng của tôi hơi phức tạp nên không đưa lên được, cái code đó được tách từ đây nè
:1cool_byebye:
Nhìn pro quá anh !!:)
Em tìm hiểu xong ADC chắc chuyển sang UART liền luôn quá, trước giờ em chỉ mới quang cái Real Time Clock từ BQ32000 lên PC chứ chưa quăng ADC hay mấy thứ khác :-s
 

lee_trieu

Gà con
Code:
void Read_Volt_Temp()
{
    volatile long value;
    int results[3];
    unsigned char degC;
    // Temp Sensor ben trong uC
    ADC10CTL1 = INCH_10 + ADC10DIV_3;      // Temp Sensor ADC10CLK/4
    ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE;
    for( degC = 240; degC > 0; degC-- );    // delay to allow reference to settle
    ADC10CTL0 |= ENC + ADC10SC;            // Sampling and conversion start
    __bis_SR_register(CPUOFF + GIE);        // LPM0 with interrupts enabled
    results[0] = ADC10MEM;
    ADC10CTL0 &= ~ENC;
 
  // Volt-meter
    ADC10CTL1 = INCH_6;                      // ADC ->> volt-meter
    ADC10CTL0 =SREF_1|ADC10SHT_2|REFON|ADC10ON|ADC10IE|ADC10SR|REFBURST;
    for( degC = 240; degC > 0; degC-- );      // delay to allow reference to settle
    ADC10CTL0 |= ENC + ADC10SC;              // Sampling and conversion start
    __bis_SR_register(CPUOFF + GIE);          // LPM0 with interrupts enabled
    results[1] = ADC10MEM;
    ADC10CTL0 &= ~ENC;
  // Temp Sensor ben ngoai uC (lm35)    kenh A7
 
    ADC10CTL1 = INCH_7;                      // ADC ->> volt-meter
    ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON + ADC10IE;
    for( degC = 240; degC > 0; degC-- );      // delay to allow reference to settle
    ADC10CTL0 |= ENC + ADC10SC;              // Sampling and conversion start
    __bis_SR_register(CPUOFF + GIE);          // LPM0 with interrupts enabled
    results[2] = ADC10MEM;
    ADC10CTL0 &= ~ENC;
 
    ADC10CTL0 &= ~(REFON + ADC10ON);          // turn off A/D to save power
//============================================================================
//============================================================================
    // Xu ly ket qua Temp Sensor ben trong uC
    value = results[0];
    degC_uC = ((value - 673) * 423) / 1024;
 
 
    // Xu ly ket qua dien ap
    value = results[1];
    //volt = (value*25)/512;
    // Hien thi du lieu dien ap
    volt= (int)((value*quantum)*1000);
    //__no_operation();
    // Xu ly ket qua lm35
    value = results[2];
    degC_lm35 = (float)(value/6.8);
 
}
Anh cho em hỏi làm sao để config để đọc nhiệt độ bằng cảm biến nhiệt bên trong MCU được vậy anh????
Chỗ thanh ghi ADC10AE0
mình phải config sao anh???:-(
ADC10AE0 |= ??? ;(Thanh ghi này có 8 bit ah, trong khi Cảm biến nhiệt bên trong MCU là kênh 10??):5cool_sweat:
 

Carue

Trứng gà
Code:
void Read_Volt_Temp()
{
    volatile long value;
    int results[3];
    unsigned char degC;
    // Temp Sensor ben trong uC
    ADC10CTL1 = INCH_10 + ADC10DIV_3;      // Temp Sensor ADC10CLK/4
    ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE;
    for( degC = 240; degC > 0; degC-- );    // delay to allow reference to settle
    ADC10CTL0 |= ENC + ADC10SC;            // Sampling and conversion start
    __bis_SR_register(CPUOFF + GIE);        // LPM0 with interrupts enabled
    results[0] = ADC10MEM;
    ADC10CTL0 &= ~ENC;
 
  // Volt-meter
    ADC10CTL1 = INCH_6;                      // ADC ->> volt-meter
    ADC10CTL0 =SREF_1|ADC10SHT_2|REFON|ADC10ON|ADC10IE|ADC10SR|REFBURST;
    for( degC = 240; degC > 0; degC-- );      // delay to allow reference to settle
    ADC10CTL0 |= ENC + ADC10SC;              // Sampling and conversion start
    __bis_SR_register(CPUOFF + GIE);          // LPM0 with interrupts enabled
    results[1] = ADC10MEM;
    ADC10CTL0 &= ~ENC;
  // Temp Sensor ben ngoai uC (lm35)    kenh A7
 
    ADC10CTL1 = INCH_7;                      // ADC ->> volt-meter
    ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON + ADC10IE;
    for( degC = 240; degC > 0; degC-- );      // delay to allow reference to settle
    ADC10CTL0 |= ENC + ADC10SC;              // Sampling and conversion start
    __bis_SR_register(CPUOFF + GIE);          // LPM0 with interrupts enabled
    results[2] = ADC10MEM;
    ADC10CTL0 &= ~ENC;
 
    ADC10CTL0 &= ~(REFON + ADC10ON);          // turn off A/D to save power
//============================================================================
//============================================================================
    // Xu ly ket qua Temp Sensor ben trong uC
    value = results[0];
    degC_uC = ((value - 673) * 423) / 1024;
 
 
    // Xu ly ket qua dien ap
    value = results[1];
    //volt = (value*25)/512;
    // Hien thi du lieu dien ap
    volt= (int)((value*quantum)*1000);
    //__no_operation();
    // Xu ly ket qua lm35
    value = results[2];
    degC_lm35 = (float)(value/6.8);
 
}
Anh cho em hỏi làm sao để config để đọc nhiệt độ bằng cảm biến nhiệt bên trong MCU được vậy anh????
Chỗ thanh ghi ADC10AE0
mình phải config sao anh???:-(
ADC10AE0 |= ??? ;(Thanh ghi này có 8 bit ah, trong khi Cảm biến nhiệt bên trong MCU là kênh 10??):5cool_sweat:
rõ ràng quá mà bạn temp nằm ở kênh 10, ban xem trên sơ đồ chân thì đâu có đâu? nó ở bên trong chip cơ mà
:6cool_boss:ADC10CTL1 = INCH_10 + ADC10DIV_3; // Chọn kênh 10, xung nhịp /8
xem file msp430g2x33_adc10_temp là hiểu thôi
 
Top