ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

AVRマイコンコミュのAVRでLCD表示

  • mixiチェック
  • このエントリーをはてなブックマークに追加
こんにちは、いきなり質問します
いまATmega168でLCD表示(4ビット送信)の勉強をしてます。
一応表示は成功したのですが今度はprintfを使って表示させてみようと思い
いろいろ調べてfdevopenを使えばprintfが使えるようになるとわかったので早速プログラムを書いてみました。そしてビルドも成功したのですがLCDに文字が表示できませんでした。
どうかご教授お願いします

作成したプログラム(要点だけ抽出)

void Lcd_setcmd( char cmd )
{
lcd_setcmd4( RS_MODE_COMMAND, LCD_DATMASK & ( cmd >> 4 ));// 上位4bit送信
lcd_setcmd4( RS_MODE_COMMAND, LCD_DATMASK & cmd );// 下位4bit送信
lcd_busywait();// Busyチェック
}

main
{
fdevopen(Lcd_setcmd, NULL);
printf("hello world");


このようにしたのですがうまくいきませんでした。
これだけ判断できなかったらプログラム全部を載せます
よろしくお願いします

コメント(26)

動画通りに進めていったんですがうまくいきません
LCDのピンの配置が違うのですがSC1602を使っています
またプログラムをビルドすると
Build succeeded with 3 Warnings...
と出ます。動画ではwarningが1つと言ってるのですが
この違いによるものなのでしょうか?

具体的にどんなwarinigが出てるのかを見せてもらわないとなんとも言えないのでわ。
ありがとうございます
今実家に帰省してしまってwarningの内容がわかりません
アパートに帰り次第報告いたします

それとは別の質問なんですが
皆さんはAVRの勉強は独学でしょうか?
度々すみません
warningの内容です(warningが2つになってました)

../testest.c:5: warning: pointer targets in passing argument 1 of 'Lcd_Write' differ in signedness

c:/avr/lib/gcc/../../avr/include/util/delay.h:85:3: warning: #warning "F_CPU not defined for <util/delay.h>"

> ../testest.c:5: warning: pointer targets in passing argument 1 of 'Lcd_Write' differ in signedness

testest.cの5行目で呼んでいるLcd_Write関数の1番の引数の型が呼ぶ側と呼ばれ側で不一致がありませんか?

> c:/avr/lib/gcc/../../avr/include/util/delay.h:85:3: warning: #warning "F_CPU not defined for <util/delay.h>"

util/delay.hでF_CPUと言うdefineを使っているが、F_CPUが未定義でなので警告しています。
このままだとutil/delay.hで定義している処理を使っていると正しく動作しないでしょう。

F_CPUはAVRの動作クロックを指定するものです。
ありがとうございます!!
みなさんのアドバイスを参考にしてやってみます
またここに助けを求めにくるので、その時はよろしくお願いします!!
完成(動作)したらその報告もお待ちしています。
わかりました!!
ゆっくりと暇があればやっている程度なので
今しばらくお待ち下さい
調べれば調べるほど分からなくなりました
特にプログラムをいじってないのに
Build succeeded with 0 warning...
と出てきました。なのに文字表示がうまくいきません
ピン接続も動画を見ながらやり直しました
(ATmega168からATmega88Pに変更しました)

また試しにオシロスコープでどんな出力が出ているか調べたところ
各出力ピン?が5Vになっているだけで、シグナルっぽいものは見られませんでした
LCDの制御はこんなシグナルなんですか?

長文で申し訳ありません
連続投稿申し訳ありません
Build succeeded with 1 warning...
となりました。エラー内容は前と同じ
pointer targets in passing argument 1 of 'Lcd_Write' differ in signedness
です。
Lcd_Write関数の1番の引数の型はuint8_tなのですがこれではダメなのですか?
ありがとうございます
早速第一回から見てきます
すみません、私はキャラクタLCDを使ったことがないので分かりません。
>セラミックスさん、

>>また試しにオシロスコープでどんな出力が出ているか調べたところ
>>各出力ピン?が5Vになっているだけで、シグナルっぽいものは見られませんでした
>>LCDの制御はこんなシグナルなんですか?

どんな信号がCPUから出てくるのかわからないのに測定しても
意味ないのんとちゃいますか?
こういう質問をするということはLCDのインターフェース信号について何も
調べてないですよね?

それではLCDに限らず、ペリフェラルは動作しませんよ。
せめてEやR/W信号の意味を知らないと。
こういう姿勢では 「動かなければ 動かない」 ということです。
どうしようもないですよね?

愛の渇きさんのおっしゃるように、LCDを動かす前に1個のLEDを
ピカピカするところから始めて下さい。というか、逆にLEDピカピカが
ちゃんとできれば(コンパイラのWarninに対処できることも含めて)、
LCDの制御はライブラリに頼らずすぐにできます。
最初の方を読んでなかったのですが、

>>一応表示は成功したのですが

だったらぜんぜん問題ないように思いますけど?
>>そら。さん
いつもありがとうございます

>>かつぼんさん
そうですよね。ちゃんとLCDの制御を理解しようとしないのは駄目ですよね
とりあえず作っちゃえ!!という考えっだったので・・・
LCDの表示は出来るんのですけどfdevopenでprintfを使って
例えば時計などを作りたいなぁと思ってます
fdevopen、printf以外の方法で表示できるということはハードウェアの問題ではなく、ソフトウェアの問題ですね。

プログラムにミスがあるか、何か設定に不備があるのかもしれません。
>いろいろ調べてfdevopenを使えばprintfが使えるようになるとわかった
この部分が問題じゃないのかな。「わかった」じゃなくれ、「らしい」でしょ?
ライブラリの中身というか動作をきちんと追いかけてみましょう。

自分がマイコンやるときはこの辺はほとんどフルスクラッチで組むから次元が違うなぁ。
>>そら。さん&カズさんさん

私もプログラムの問題だと思ってます。
printfを使おうと思ったきっかけは
文字表示を成功させたあとに本(http://nicotak.com/avr/)を購入して
その本にfdevopenでprintfができると書いてあったので
成功したプログラムと本のプログラムを比較し、書き換えてできなかった状態です。

一つアイディアを思いついたのですが
printf(”〜=%d”,a)みたいに引数を使えるような関数を自作出来ればいいではないかと思ったんですがどうですか?

現在は
void Lcd_setstr( char *str )
{
while( *str ){
Lcd_setchar( *str );
str++;
}
}

Lcd_setstr( "〜〜〜" )

と関数を使って表示させてるのを

Lcd_setstr("〜〜〜=%d" ,a)

と使えるようにすれば解決するのですが・・・
ヒントなどをもらえるとありがたいです
>>愛の渇きさん
いつもすいません。
本当に参考になります


一応以前に成功した(printfを使わないで)動画を貼っておきます
http://video.mixi.jp/view_video.pl?owner_id=21379670&video_id=10685362
>>愛の渇きさん
sprintfで
print(〜〜%d , i);
みたいに引数?を使えるようになりました
まだまだ使いにくいプログラムなのですが
これから洗練していこうと思います

〜アドバイスをしていただいた皆さんへ〜
みなさんのおかげでスキルアップした気がします
本当にありがとうございました
まだまだ課題が山積みですがその時はまた質問しに来ます
その時はよろしくお願いします
本当にありがとうございました

ログインすると、残り4件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

AVRマイコン 更新情報

AVRマイコンのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング