../ADCm328P.c:231:1: warning: control reaches end of non-void function
warning:が出るのですが、どの様にしたらとれますか?
mainの中にb16toLED();を記述すると、とれるのですが。
int b16toLED()
{
unsigned char tbup,tblow,msk,n;
msk = 0x01;
tbup=0xAA; tblow=0x55;
for(n=0;n<8;n++)// 0 1 2 3 4 5 6 7
{
tblow = tblow>>n;//0111 0111-->0011 1011
if(tblow &= msk)
{
PORTB |= _BV(0);//b0=1
PORTB &= ~_BV(1);//Clk ↓
PORTB |= _BV(1); //Clk ↑
}
else
{
PORTB &= ~_BV(0);//b0=0
PORTB &= ~_BV(1);//Clk ↓
PORTB |= _BV(1); //Clk ↑
}
tblow = tblow >> 1 ;
}//n=0 --> n<8
}
//***************************
int main(void)
{
port_init();//
unsigned int BADC0,BADC1,BADC2,BADC3,BADC4,BADC5;
//------------------------------------
while(1)
{
while( (ADCSRA & 0x40) != 0 );// Wait Conversion End (ADSC=0 ?) 0b0100 0000
ADMUX = 0x00;// REFS1 REFS0 ADLR ----- MUX3_ MUX2_ MUX1_ MUX0_ ref=AREF ADLR=0(Right)
_delay_us(1);
ADCSRA = 0xC0;// ADEN_ ADSC_ ADATE ADIF_ ADIE_ ADOS2 ADPS1 ADPS0 ADEN=1,ADSC=1 ADC0 Start ADC
while( (ADCSRA & 0x40) != 0 );// Wait Conversion End (ADSC=0 ?) 0b0100 0000
//* ADSC=0 *
BADC0 = ADC;
b16toLED();
}
}
warning:が出るのですが、どの様にしたらとれますか?
mainの中にb16toLED();を記述すると、とれるのですが。
int b16toLED()
{
unsigned char tbup,tblow,msk,n;
msk = 0x01;
tbup=0xAA; tblow=0x55;
for(n=0;n<8;n++)// 0 1 2 3 4 5 6 7
{
tblow = tblow>>n;//0111 0111-->0011 1011
if(tblow &= msk)
{
PORTB |= _BV(0);//b0=1
PORTB &= ~_BV(1);//Clk ↓
PORTB |= _BV(1); //Clk ↑
}
else
{
PORTB &= ~_BV(0);//b0=0
PORTB &= ~_BV(1);//Clk ↓
PORTB |= _BV(1); //Clk ↑
}
tblow = tblow >> 1 ;
}//n=0 --> n<8
}
//***************************
int main(void)
{
port_init();//
unsigned int BADC0,BADC1,BADC2,BADC3,BADC4,BADC5;
//------------------------------------
while(1)
{
while( (ADCSRA & 0x40) != 0 );// Wait Conversion End (ADSC=0 ?) 0b0100 0000
ADMUX = 0x00;// REFS1 REFS0 ADLR ----- MUX3_ MUX2_ MUX1_ MUX0_ ref=AREF ADLR=0(Right)
_delay_us(1);
ADCSRA = 0xC0;// ADEN_ ADSC_ ADATE ADIF_ ADIE_ ADOS2 ADPS1 ADPS0 ADEN=1,ADSC=1 ADC0 Start ADC
while( (ADCSRA & 0x40) != 0 );// Wait Conversion End (ADSC=0 ?) 0b0100 0000
//* ADSC=0 *
BADC0 = ADC;
b16toLED();
}
}
10bit AD値(MAX3FF、1023)
Ref=5V
MAD 1023/2---512(十進)
2560/1000=2
560/100=5
60/10=6
... 0
とりあえず、上記やってみます。
> 無いでしょうか?
10進数の文字列に変換すると言う意味なら、itoaやultoaなどがあります。
詳しい使い方は、itoaやultoaをネットで検索してください。
やむなく、AVRSP、AVRISP-mkⅡで作業を完了した。HIDspxが4個くらい有るので、HIDspxをTESTしたが、思うように書き込めない。
あれこれ、TESTしているうちに、
AVRSP>hidspx -ph -rでチップ情報が読めた。
分裂思考であるが、使用しない両面ユニバ-サル基板が有る事に気が付きHIDspxを製作する事
にした。(はんだ鏝で製作したく成った。)
無いでしょうか?
ChanさんのASM Subroutine使用も考えているのですが、難しく考えてしまいます。
対象は、AVR、16x16 bit, 16/16 bit
欲しく成ってしまった。
(AD値/1023)x5000=5115 もうこの段階で
誤差が2%か?
上手い方法は、無いか?
(1個\12のLED)2.2Kを使用したが、かなり
明るい。500ms on/off。
半田付けの確認をした。
LCD Connector(Connecter)の5pin R/Wが
浮いていた。
ユニバ-サル基板で製作の場合、誤配線の
チェックが必要な事、再確認した。
ユニバ-サル基板にTQFPを両面テ-プで貼り付け、Directにはんだつけした。途中修正する事無く終了した。
-rfで読みだすとATMEGA168と読めた。
ひとまず成功。
考えると、迷ってしまう。
まずは、どの様に表示させるか?
CH0 CH1 CH2 CH3 CH4 (20Character)
5.0 5.1 5.2 5.3 5.4 (20Character)
http://www.microbot-ed.com/j_2x16ser_new_backlit.html
良く考えて見たら、LCD表示の時、LED表示を
同時に使用する事は、まれで有るので、通常の
LCD SC1602Bの回路を組む事にした。
これなら、Programも有るし、直ぐに組み込み
出来る。
シリアルLCDの研究をする事にした。
SC1602Bくらいの大きさでシリアルLCDを
探してみよう。
シリアルLCDに挑戦するか、PORTBはb0,b1,b2は
使用済み
普通のLCDにするか PORTD b5,b4 b3,b2,b1,b0
検討中
void b16toLED(unsigned int idata)
{
PORTB = 6;// 0000 sync,latch,clock,data
imsk = 0x0001;// 0000 0000 0000 0001;
for(n=0;n<16;n++)// 0--15
{
if( (idata & 0x0001) !=0)// 0x3A5 & 1
{
PORTB |= _BV(0);//b0=1
}
else
{
PORTB &= ~_BV(0);//b0=0
}
_delay_us(1);// _ for strobe
PORTB &= ~_BV(1);//Clk↓
_delay_us(1);// _
PORTB |= _BV(1);//Clk ↑
_delay_us(1);// ↓_↑_
idata = idata >> 1; //
}
}
//----- main ------
// ***** 16btoLED *****
//unsigned int idata = 0x03A5;
PORTB = 6;
idata=0x3A5;
b16toLED(idata);
// *** latch ***
PORTB &= ~_BV(2);// clock ↓
_delay_us(1);// _
PORTB |= _BV(2);// clock ↑
// _ _
_delay_us(1); //Clk ↓_↑
___
data | |
clock _ _
|_|
latch _ _
|_|
確かめる事にした。
data,clock,latch,sync(LED)のLEDのみ出力されていた。出力無し確認したら、配線されていなかった。出ないはず。
clockを10usくらいに設定し、オシロで観測、
同期をsyncに掛けて、data,clock,latchが
きちんと見える様にしなければダメだと
思う。
Rf=10MΩ
Rd=74KΩ
C1,C2=22PF
周波数計測 32.769-32.770KHz
C1,C2=15PF(回路図は15PF)に変更してどう成るか(f↑に成る?)
data(b0)
clock(b1)
latch(b2)
sync LED(b3)
オシロスコ-プで波形観測してみよう。
Warning無しに成りました。
考え、subroutineとした。functionでは無く
単純に8(16)bitdataをLED表示するため。
void b16toLED(void または、dbuf)と
すれば、良かったかも知れない。後で
TESTしてみます。
Cのサブルーチンは関数です。
関数へは通常はデータを渡して結果の値を受け取るので、int型、char型などになります。
数値を渡さず、LED点灯などの動作をするだけでは戻り値が不要ですから、サブルーチンの型を「何も戻さない」void型とするのが普通のように思います。
でも、b16toLED()はそもそも何かを返す必要のあるfunctionなのでしょうか。
返礼で由と考えていましたが、自己本位過ぎの考えは、思い浮かびませんでした。いたらなさ
すみません。
下記に回答致します。
何故出たか
Subroutineの最後にreturn 0;が無かった。
どういう意味だったか
Subroutineの処理の結果をmainに渡して完結するが、結果0を渡していず、suburoutineが終了
していない。(少し表現が悪い?グロ-バル変数使用?)
どうしたら解決したか
return 0;を追加記述した。
おおざっぱに、この様に考えています。
なぜ出たのか
どういう意味だったのか
どうしたら解決したのか
を書いてください。
それが公開の意味ではないでしょうか。
「わかりました。解決しました。」だけでは自己本位過ぎないでしょうか。
思い出すが、電源ON直後の安定度に問題が
有る事が解った。
32.768KHz--74HCU04--74LS393--74LS393--LED
配線は、長いし、C=22Pで大きい、Xtalの固定
ア-ス無しなので作りかえる事にした。
FREQUENCY COUNTERで計ると+10KHz位を表示している事も有る、
(FREQUENCY COUNTERも電源ON直後、1年も前に校正しただけ)
発振回路
http://www.tamadevice.co.jp/pdf/32.768KHz-osc-circuit(revA).pdf
Codingしdebugしている。
74HC595を2個使用した。Latchの組み込みを忘れていたのでCodeを追加した。
どんなERRORが出るか?これの解決が醍醐味かも知れない。