ATMEGA328pのADC0から値を読み取ろうとしています。予想される値は0〜5Vです。これはADC0がXplainedミニの5V出力に接続されたポテンショメータに接続されているためです。私は通常0Vか5Vのいずれかを得ています。ポテンショメータを変更しても変化はありません。私は複数のADCの例とチュートリアルをオンラインで見ましたが、私のコードでエラーを見つけることができません。コード内のADC変換エラーATMEGA328p
void adc_initialise(){
//set vref to AVcc, channel selection is initially ADC0 as wanted
ADMUX |= (1<<6);
//set ADC enable, Set adc clock prescalar 64
ADCSRA |= (1<<7)|(1<<2)|(1<<1);
}
uint16_t adc_read(){
ADCSRA |= (1<<6); // start conversion
while(ADCSRA & (1<<ADSC)); //wait until conversion is complete
return ADCW;
}
float adc_calculation(uint16_t adcValue){
float stepSize = (5.0/1024.0);
float voltageIn = adcValue*stepSize;
return voltageIn;
}
はその後、私のメインの中で私は
while(1){
adc_initialise();
uint16_t adcValue = adc_read();
float voltageIn = adc_calculation(adcValue);
adcConverterToUART(voltageIn);//I know that this part of the code is working as I have hardcoded many test values and all have transmitted correctly.
}
を持っていると私はエラーがどこかに上記のADCコードで私のUARTのコードではありませんが、知っている上述したように。あらゆる助けを事前に乾杯してください。
整数値をどこかに格納し、メモリを検査したり、そこにブレークポイントを置きます。また、もちろん、マルチメータを使って、実際にADCが接続されている時点で電圧が変化していることを確認してください。エレクトロニクスは難しい。 :) – unwind