音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

天啊老問(wèn)題.8535A/D..有誰(shuí)也用么?看看啦

作者:cosinfu 欄目:單片機(jī)
天啊老問(wèn)題.8535A/D..有誰(shuí)也用么?看看啦
AT90S8535還是老問(wèn)題,我上次問(wèn)過(guò)了,我檢查以后,發(fā)現(xiàn)硬件也沒(méi)問(wèn)題啊,參考電壓 LM336-5V提供,AVCC VCC沒(méi)問(wèn)題, AGND GND 沒(méi)問(wèn)題啊
可就是A/D出不來(lái),管叫沒(méi)壞   幾天了,都急死了
有人也用這個(gè)8535A/D的么? 有什么應(yīng)該注意的?或者我沒(méi)想到的地方? 書上沒(méi)說(shuō)明白的地方? 謝謝啦

我得程序只要為
.include "8535def.inc"
.def adhbyte=r21
.def adlbyte=r20
.def TEMP=r16
.org $0000
rjmp reset
.org $0010
reset:
  ;棧指針
  ldi r16,low(ramend)
  out spl,r16
  ldi r16,high(ramend)
  out sph,r16
  ;端口設(shè)置
  ser TEMP   ;B,C,D  都設(shè)為輸出
  out ddrb,TEMP
  out ddrd,TEMP
  out ddrc,TEMP
  clr TEMP   ;A口 模擬輸入
  out ddra,TEMP
  out porta,TEMP
clt
ldi TEMP,$07     ;第一次啞轉(zhuǎn)換,數(shù)據(jù)部計(jì)
out admux,TEMP
ldi TEMP,$86
out adcsr,TEMP
sbi adcsr,adsc
ADWAit:
  sbic adcsr,adsc
  rjmp ADWAit
in adlbyte,adcl
in adhbyte,adch

ldi r17,$00
ldi r18,$00
ldi r25,10     ;轉(zhuǎn)換10次
compae:
ldi TEMP,$07      ;第七通道
out admux,TEMP
ldi TEMP,$86        ;無(wú)中斷,單次轉(zhuǎn)換
out adcsr,TEMP
sbi adcsr,6
ADWAi1t1:         ;等待轉(zhuǎn)換完畢
  sbic adcsr,6
  rjmp ADWAi1t1
  ADWA:
  sbis adcsr,4
  rjmp ADWA
cbi adcsr,adif  
in adlbyte,adcl         ;取數(shù)據(jù)
in adhbyte,adch
andi adhbyte,$03
mov r27,adlbyte            ;r27.r28為作后一次轉(zhuǎn)換的值
mov r28,adhbyte
add r17,adlbyte           ;r17,r18為十次轉(zhuǎn)換的和
adc r18,adhbyte
rcall delay        ;延時(shí)5ms
dec r25
brne compae

  ;中間調(diào)用除法,r17,r18最后為原來(lái)的1/10 ---略
okay:
cp r17,r27
brne compae
cp r18,r28
brne compae     ;該段我想看看十次平均和最后一次是否相等

  mov TEMP,r18   ;結(jié)果輸出到B.D口.看其結(jié)果
out portd,TEMP
mov TEMP,r17
out portb,TEMP
;延時(shí)略

結(jié)果老是
輸入模擬電壓5V   11 11111111   0v  00 00000000
其它輸入  要么是 00 00000000  要么是00 00001111
難道A/D會(huì)壞?????


另外我用A/D中斷來(lái)測(cè)試,結(jié)果也是一樣,郁悶啊
.include"8535def.inc"
.org $0000
    rjmp reset
.org $000e
    rjmp inter
.def    hledbyte=r19
.def     lledbyte=r18
.def     TEMP=r16
reset:    ldi TEMP,$02
    out sph,TEMP
    ldi TEMP,$5f
    out spl,TEMP
    ldi TEMP,$ff
    out ddrb,TEMP
    out ddrd,TEMP
         out ddrc,TEMP  
    clr TEMP
    out ddra,TEMP        
    out pina,TEMP
main:    clt
    sei
    rcall conini    ;調(diào)用A/D初始化
wait:     brtc wait    ;等待中斷
    clt
    ldi r20,100
start:    out portc,lledbyte
        out portb,hledbyte
        rcall delay
        dec r20
        brne start
    rjmp main
inter:    in lledbyte,adcl
    in hledbyte,adch
    cbi adsc,6
    set
           reti
conini:    ldi TEMP,$8d
    out adcsr,TEMP
    ldi TEMP,$07
    out admux,TEMP
    sbi adcsr,6
    ret

2樓: >>參與討論
techwell
我大約在前年用過(guò)8535的AD,沒(méi)什么問(wèn)題呀!
我大約在前年用過(guò)8535的AD(ICCAVR編譯的),沒(méi)什么問(wèn)題呀!

3樓: >>參與討論
coke
沒(méi)有問(wèn)題
我多次用了8535 ADC.絕對(duì)沒(méi)有問(wèn)題.效果很好!告訴我E-mail.我現(xiàn)在沒(méi)有時(shí)間.OK

4樓: >>參與討論
zlei
8535 A/D
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>

#include "global.h"
#include "a2d.h"

// 定義全局變量

//! 定義一個(gè)軟件標(biāo)志位,用來(lái)指示A/D轉(zhuǎn)換是否完成
volatile unsigned CHAR a2dCompleteFlag;

//! ADC完成中斷的ISR
SIGNAL(SIG_ADC)
{
    // 置軟件標(biāo)志位,表明A/D轉(zhuǎn)換已經(jīng)完成
    a2dCompleteFlag = TRUE;
}

// 函數(shù)、實(shí)現(xiàn)部分

//! 初始化A/D轉(zhuǎn)換器
void a2dInit(void)
{
    sbi(ADCSR, ADEN);        // 使能 ADC
    cbi(ADCSR, ADFR);        // 設(shè)置為單次轉(zhuǎn)化模式
    a2dSetPrescaler(ADC_PRESCALE);    // 設(shè)置預(yù)分頻(使用默認(rèn)值)
    a2dSetReference(ADC_REFERENCE);    // 設(shè)置參考電壓(使用默認(rèn)值)
//    cbi(ADMUX, ADLAR);        // 設(shè)置A/D轉(zhuǎn)換結(jié)果數(shù)據(jù)寄存器的移位方式

    sbi(ADCSR, ADIE);        // 使能ADC完成中斷
        
    a2dCompleteFlag = FALSE;    // 清A/D轉(zhuǎn)換完成的軟件標(biāo)志位
    sei();                // 打開(kāi)中斷
}

//! 關(guān)閉A/D轉(zhuǎn)換
void a2dOff(void)
{
    cbi(ADCSR, ADIE);        // 禁用ADC完成中斷
    cbi(ADCSR, ADEN);        // 禁用A/D轉(zhuǎn)換
}

//! 設(shè)置A/D轉(zhuǎn)換時(shí)鐘(預(yù)分頻)
void a2dSetPrescaler(unsigned CHAR prescale)
{
    outp( ((inp(ADCSR) & ~ADC_PRESCALE_MASK) | prescale), ADCSR);
}

//! 設(shè)置參考電壓
void a2dSetReference(unsigned CHAR ref)
{
    outp( ((inp(ADMUX) & ~ADC_REFERENCE_MASK) | (ref<<6)), ADMUX);
}

//! 設(shè)置A/D轉(zhuǎn)換的輸入通道
void a2dSetChannel(unsigned CHAR ch)
{
    outp((inp(ADMUX) & ~ADC_MUX_MASK) | (ch & ADC_MUX_MASK), ADMUX);    // 設(shè)置通道
}

//! 開(kāi)始一個(gè)A/D轉(zhuǎn)換(在當(dāng)前通道)
void a2dStartConvert(void)
{
    sbi(ADCSR, ADIF);    // 清ADC轉(zhuǎn)換完成的硬件標(biāo)志位
    sbi(ADCSR, ADSC);    // 開(kāi)始A/D轉(zhuǎn)換
}

//! 當(dāng)A/D轉(zhuǎn)換完成時(shí),返回 TRUE
u08 a2dIsComplete(void)
{
    return bit_is_set(ADCSR, ADSC);
}

//! 執(zhí)行一個(gè)10位的A/D轉(zhuǎn)換
//  開(kāi)始A/D轉(zhuǎn)換,并等待;直到A/D轉(zhuǎn)換完成,然后返回結(jié)果
unsigned SHORT a2dConvert10bit(unsigned CHAR ch)
{
    a2dCompleteFlag = FALSE;                // 清ADC轉(zhuǎn)換完成的軟件標(biāo)志位
    outp((inp(ADMUX) & ~ADC_MUX_MASK) | (ch & ADC_MUX_MASK), ADMUX);    // 設(shè)置通道
    sbi(ADCSR, ADIF);                    // 清ADC轉(zhuǎn)換完成的硬件標(biāo)志位
    sbi(ADCSR, ADSC);                    // 開(kāi)始A/D轉(zhuǎn)換
    //while(!a2dCompleteFlag);                // 等待,直到A/D轉(zhuǎn)換完成
    //while( bit_is_clear(ADCSR, ADIF) );    // 等待,直到A/D轉(zhuǎn)換完成
    while( bit_is_set(ADCSR, ADSC) );    // 等待,直到A/D轉(zhuǎn)換完成

    // 注意: 先讀 ADCL,再讀 ADCH !!!
    return (inp(ADCL) | (inp(ADCH)<<8));    // 讀ADC(10 位)
}

//! 執(zhí)行一個(gè)8位的A/D轉(zhuǎn)換
//  開(kāi)始A/D轉(zhuǎn)換,并等待;直到A/D轉(zhuǎn)換完成,然后返回結(jié)果
unsigned CHAR a2dConvert8bit(unsigned CHAR ch)
{
    // 執(zhí)行一個(gè)10位的A/D轉(zhuǎn)換,并返回其高8位
    return a2dConvert10bit(ch)>>2;        // 返回
}

5樓: >>參與討論
zlei
8535 A/D 的頭文件
#ifndef A2D_H
#define A2D_H

// 定義宏

// A/D轉(zhuǎn)換時(shí)鐘預(yù)分頻選擇:
//    *默認(rèn)情況下,A/D轉(zhuǎn)換的逐次比較轉(zhuǎn)換電路需要一個(gè)50KHz~200KHz
//   之間的采樣時(shí)鐘。采樣時(shí)鐘=CPU時(shí)鐘/預(yù)分頻值。
//    *在要求轉(zhuǎn)換精度低于10位的情況下,A/D轉(zhuǎn)換的采樣時(shí)鐘可以高于200KHz
//   以獲得更高的采樣率。        
//    *低的采樣率(高的預(yù)分頻值),可以獲得更高的采樣精度。
#define ADC_PRESCALE_DIV2        0x00    ///< 0x01,0x00 -> CPU clk/2
#define ADC_PRESCALE_DIV4        0x02    ///< 0x02 -> CPU clk/4
#define ADC_PRESCALE_DIV8        0x03    ///< 0x03 -> CPU clk/8
#define ADC_PRESCALE_DIV16        0x04    ///< 0x04 -> CPU clk/16
#define ADC_PRESCALE_DIV32        0x05    ///< 0x05 -> CPU clk/32
#define ADC_PRESCALE_DIV64        0x06    ///< 0x06 -> CPU clk/64
#define ADC_PRESCALE_DIV128        0x07    ///< 0x07 -> CPU clk/128
// 默認(rèn)值
#define ADC_PRESCALE            ADC_PRESCALE_DIV64
// 不要改變掩碼值。
#define ADC_PRESCALE_MASK        0x07

// A/D轉(zhuǎn)換的參考電壓選擇
#define ADC_REFERENCE_AREF        0x00    ///< 0x00 -> AREF引腳電壓, 關(guān)閉內(nèi)部VREF
#define ADC_REFERENCE_AVCC        0x01    ///< 0x01 -> AVCC引腳電壓, 關(guān)閉內(nèi)部VREF
#define ADC_REFERENCE_RSVD        0x02    ///< 0x02 -> 預(yù)留
#define ADC_REFERENCE_256V        0x03    ///< 0x03 -> 使用內(nèi)部2.56V VREF
// 默認(rèn)值
#define ADC_REFERENCE            ADC_REFERENCE_AVCC
// 不要改變掩碼值!
#define ADC_REFERENCE_MASK        0xC0

// ADC通道選擇器的位掩碼
#define ADC_MUX_MASK            0x1F

// 定義通道號(hào)
#define ADC_CH_ADC0            0x00
#define ADC_CH_ADC1            0x01
#define ADC_CH_ADC2            0x02
#define ADC_CH_ADC3            0x03
#define ADC_CH_ADC4            0x04
#define ADC_CH_ADC5            0x05
#define ADC_CH_ADC6            0x06
#define ADC_CH_ADC7            0x07
#define ADC_CH_122V            0x1E    // 1.22V 參考電壓
#define ADC_CH_AGND            0x1F    // AGND
// 以下這些通道只有在ATMEGA128里有
// 差分輸入和增益控制
#define ADC_CH_0_0_DIFF10X        0x08
#define ADC_CH_1_0_DIFF10X        0x09
#define ADC_CH_0_0_DIFF200X        0x0A
#define ADC_CH_1_0_DIFF200X        0x0B
#define ADC_CH_2_2_DIFF10X        0x0C
#define ADC_CH_3_2_DIFF10X        0x0D
#define ADC_CH_2_2_DIFF200X        0x0E
#define ADC_CH_3_2_DIFF200X        0x0F
// 差分輸入
#define ADC_CH_0_1_DIFF1X        0x10
#define ADC_CH_1_1_DIFF1X        0x11
#define ADC_CH_2_1_DIFF1X        0x12
#define ADC_CH_3_1_DIFF1X        0x13
#define ADC_CH_4_1_DIFF1X        0x14
#define ADC_CH_5_1_DIFF1X        0x15
#define ADC_CH_6_1_DIFF1X        0x16
#define ADC_CH_7_1_DIFF1X        0x17

#define ADC_CH_0_2_DIFF1X        0x18
#define ADC_CH_1_2_DIFF1X        0x19
#define ADC_CH_2_2_DIFF1X        0x1A
#define ADC_CH_3_2_DIFF1X        0x1B
#define ADC_CH_4_2_DIFF1X        0x1C
#define ADC_CH_5_2_DIFF1X        0x1D

// 聲明函數(shù)原形

//! 初始化A/D轉(zhuǎn)換器
void a2dInit(void);

//! 關(guān)閉A/D轉(zhuǎn)換
void a2dOff(void);

//! 設(shè)置A/D轉(zhuǎn)換時(shí)鐘(預(yù)分頻)
// 本函數(shù)會(huì)自動(dòng)地被a2dInit()調(diào)用
// 從而在初始化A/D轉(zhuǎn)換器時(shí),設(shè)置一個(gè)默認(rèn)值
void a2dSetPrescaler(unsigned CHAR prescale);

//! 設(shè)置參考電壓
// 本函數(shù)會(huì)自動(dòng)地被a2dInit()調(diào)用
// 從而在初始化A/D轉(zhuǎn)換器時(shí),設(shè)置一個(gè)默認(rèn)值
void a2dSetReference(unsigned CHAR ref);

//! 設(shè)置A/D轉(zhuǎn)換的輸入通道
void a2dSetChannel(unsigned CHAR ch);

//! 開(kāi)始一個(gè)A/D轉(zhuǎn)換(在當(dāng)前通道)
void a2dStartConvert(void);

//! 當(dāng)A/D轉(zhuǎn)換完成時(shí),返回 TRUE
u08 a2dIsComplete(void);

//! 執(zhí)行一個(gè)10位的A/D轉(zhuǎn)換
//  開(kāi)始A/D轉(zhuǎn)換,并等待;直到A/D轉(zhuǎn)換完成,然后返回結(jié)果
unsigned SHORT a2dConvert10bit(unsigned CHAR ch);

//! 執(zhí)行一個(gè)8位的A/D轉(zhuǎn)換
//  開(kāi)始A/D轉(zhuǎn)換,并等待;直到A/D轉(zhuǎn)換完成,然后返回結(jié)果
unsigned CHAR a2dConvert8bit(unsigned CHAR ch);

#endif


6樓: >>參與討論
zlei
以上代碼是在winavr 上的
測(cè)試通過(guò),效果很好。請(qǐng)根據(jù)需要,加入濾波代碼。
如果再不行,可能是電路問(wèn)題。

7樓: >>參與討論
coke
試一試.
首先﹕
你把ldi TEMP,$86改為
    ldi TEMP,$e6
試一試.



8樓: >>參與討論
jfzjfz
應(yīng)該可以阿,效果很好的阿,精度也比較高的阿
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
救命!項(xiàng)目中遇到的8515的可靠性問(wèn)題,歡迎討論
AVR單片機(jī)中基于PWM的DA轉(zhuǎn)換的實(shí)現(xiàn)原理是什么?請(qǐng)指教。
SPI與SCI有和不同?請(qǐng)教個(gè)問(wèn)題。ǹ眨
幫忙
土土一問(wèn),什么是熔絲位?與寄存器位有何不同?
免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)