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

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

arduinoコミュのATMega168とATMega328の動作の違いについて

  • mixiチェック
  • このエントリーをはてなブックマークに追加
Arduino Duemilanoveを使用しています。

http://timothytwillman.com/itp_blog/?page_id=213
こちらにあるSHT1Xのライブラリを使って、温度湿度を測定するスケッチを書いたのですが、上記ライブラリをインストールして、

#include "sht1x.h"

と表記すると、BoardでATMega168を選択するとコンパイルに成功するのですが、ATMega328を選択すると、コンパイルでエラーになります。

ATMega168とATMega328の違いはメモリー容量だけだと思っていたのですが、ほかにも何か違うのでしょうか?

とりあえずATMega168では動作するので問題はないのですが、なんだか釈然としません。

ATMega328買っちゃってるし。。。

コメント(9)

新しいファイルでコンパイルしても駄目でしょうか?
コンパイル時のゴミが残っているとか!?
PD2, PD3が未定義というエラーが出ますね。
ヘッダファイル見てみましたが、168と328とで、ポートを定義する名称が違っているようです。知らなかった〜。

ATMega168の場合、<avr/iomx8.h>がインクルードされ、その中で次のように定義されています(PORT-Dの抜粋)

#define PD7 7
#define PD6 6
#define PD5 5
#define PD4 4
#define PD3 3
#define PD2 2
#define PD1 1
#define PD0 0

ATMega328pの場合は<avr/iom328p.h>がインクルードされ、その中のPORT-Dの定義は、

#define PORTD0 0
#define PORTD1 1
#define PORTD2 2
#define PORTD3 3
#define PORTD4 4
#define PORTD5 5
#define PORTD6 6
#define PORTD7 7

と、名称が異なってました。

手っ取り早いのは、あまり美しくはありませんが、sht1x_hw.hの中の、

# define SHT1X_CLOCK_LINE PD2
# define SHT1X_DATA_LINE PD3

を、

# define SHT1X_CLOCK_LINE 2
# define SHT1X_DATA_LINE 3

と書き換えてしまうことでしょうかね。
とりあえずこれで168でも328でもコンパイルは通るようになりました。
"PD3"が定義されていないってエラーが出ますね。
hardware\tools\avr\avr\include\avr の中の
チップ別のヘッダーファイルで、PD3が定義されていたりされていなかったりの違いが出ているようです。
こちらを全部調査して正しくするのは大変なので、
sht1xライブラリの sht1x_hw.h の中身

#ifndef SHT1X_PORT
# define SHT1X_PORT PORTD
# define SHT1X_DDR DDRD
# define SHT1X_PORT_IN PIND
# define SHT1X_CLOCK_LINE PD2 ←ここと
# define SHT1X_DATA_LINE PD3 ←ここが未定義
#endif

を

#ifndef SHT1X_PORT
# define SHT1X_PORT PORTD
# define SHT1X_DDR DDRD
# define SHT1X_PORT_IN PIND
# define SHT1X_CLOCK_LINE PORTD2
# define SHT1X_DATA_LINE PORTD3
#endif
と直せば良いようです。
あら、PCが不調で強制リセットを食らっているうちに、
かぶってしまった(^^;
io.h の中で、チップ別のヘッダーの他にportpins.hを呼んでいて、
その中で
#if defined(PD3)
# define PORTD3 PD3
#endif
なんて定義が入っているので、
168でも328でもPD3の代わりにPORTD3を使えば良いようです。

実際 3 に書いた設定で、ご紹介サイトのサンプルが168,328どちらでもコンパイルできました。
>まりすさん
おぉ、そこまでは読まなかった! 参考になりました。
なんか、過去に安易な命名をした反省のようなものが感じられます(笑)。

ということで、私が2で書いた「美しくない」方法は、非推奨とします。
168と328で違いがあるんですね。
勉強になりました。w
皆さんいろいろとありがとうございます。

おかげで無事コンパイルできました。
(動作までは確認できていませんが)

168と328でインクルードされるファイルが違うとは知りませんでした。

いろいろと勉強になりました。
こういう情報さがしてました。ありがとうございました。

ログインすると、みんなのコメントがもっと見れるよ

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

arduino 更新情報

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

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