2008年07月24日

ひっさびさにAVRを弄る。

研究室の中間発表もひと段落し、一応の夏休みはもらえたので

現在は自宅でマイコンを弄っています。遊んではいませんw


H8やSHのタイマ用の端子(パルス入出力端子)は外部RAM使用時に

使えなくなってしまう仕様のマイコンボードがすっごい多いので、

使い慣れているAVRをサブマイコンとして使おうかと。


研究室には大量のH8S-2633(+開発環境)があるのでメインはコレを使います。

シリアル通信(USART)でPWMのduty比をH8SからAVRに送信して

PWMパルスをAVRから出力させようってことです。そんなに難しくない。


この前段階としてLEDをPWM駆動して、シリアル通信でパソコンから輝度を

コントロールしようとしたんだけど、パソコンと通信ができなかった。

文字化けだったり、表示できなかったり。

もしやと思い、パソコン側の通信速度を上下させてみると、1/4の速度で正常に動作ww

ソースを見てみると、シリアルの2倍速動作が間違って有効になっていたり、

フューズビットのシステムクロックの1/8分周が有効になっていたので

これらを無効にしたら、すんなり動いた。分周のことをすっかり失念してました・・・。


あとは、通信で用いるデータのフォーマットと、フローを設計すれば、OK。


ついに自宅にブレットボードを導入しました。

自由に回路を組みかえるのはやっぱり快感ですねぇ。



AVRファミリの中にTinyシリーズがあるけども、どうも使い道がわからないものが。

Tiny25/45/85なんかはどんなものに使えるんだろう?
posted by ヤシガニ at 18:37| 石川 ☁| Comment(0) | TrackBack(0) | マイコン | このブログの読者になる | 更新情報をチェックする

2006年12月14日

試しにやってみたけど

SH7046Fのリンカファイルをいじって、ありえないメモリ割り当てをしてみた。

  rom    : o = 0x00008000, l = 0x00038000
  ram    : o = 0xffffd400, l = 0x00001bf0
  stack  : o = 0xffffeff0, l = 0x00000010

これを

  rom    : o = 0x00008000, l = 0x00038000
  ram    : o = 0x0ff00400, l = 0x0003ffff
  stack  : o = 0xffffeff0, l = 0x00000010

って感じに変更してmake。

結果はもちろん「メモリは問題なし!」

OSって結構容量食うんだね・・・。もっと勉強しておきまふ。


Winny開発者の金子氏が有罪判決。

インターネット網では世界トップクラスの日本だけど、

ソフトウェアの大事さを全然わかってない人が多い。


ITの仕事をやるんだったら、絶対海外(アメリカかな?)。
posted by ヤシガニ at 23:22| 石川 ☔| Comment(0) | TrackBack(0) | マイコン | このブログの読者になる | 更新情報をチェックする

2006年12月12日

RTOSを搭載してみようと

SH2とAVRのマイコン間通信のめどは立ったんだけど、不安要素がいくつか。

・C++を用いたオブジェクト指向開発をしてみたいが、開発環境が対応してない
 →最新の開発環境は導入に20万かかる
・効率のよいシステムの構築ができていない
 →シングルタスクは、マシンを効率よく動かすプログラムが書きにくい(ってか面倒)

ってことで、開発環境の導入は放って置いてOSの導入を検討してみた。

・Yellowsoft製 NORTi3
・Linux
・REALi/SH
・TOPPERS JSP

ぐらいがあがった。

でも、Linuxの導入には抵抗があるし、現在の環境で開発できるわけがない。
AlphaProjectのAP-SH2F-4Aをそのまま利用することを大前提にするので
AlphaProjectの純正RTOSであるREALi/SHを利用してみようと思う。

REALi/SHはフリーであるので、お財布にはやさしいかと。

ソースコードを見てみたところ、SH7046Fに関する記述がされてなかったので
書き換えを要するねぇ・・・・。
posted by ヤシガニ at 21:52| 石川 ☁| Comment(0) | TrackBack(0) | マイコン | このブログの読者になる | 更新情報をチェックする

2006年09月27日

一応生きてます

これが生きてる証拠↓
AVRMicroController_Board.jpg


AVRのATmega168に簡易モータドライブボード、RS232-C通信機能、加速度センサなどを

搭載したものです。


片面基板で製作するのが目標(絶対条件)なため、ちょっと線の引き方がえぐいですね。

まだ暫定的なものなので、ちょくちょくと改良を加えていきます。


加速度センサには秋月のADXL202を使用しており、デジタル(デューティー比)入力が

AVRでは1本しかなかったので、アナログ入力にしてあります。


一応タミヤの模型用ギヤドモータセットを駆動できるぐらいの性能を持っています。(TA8440HQを使用)


これで、簡易的なマイコンカーを制御することができると思われます。


マイコンのことが分からない人向けに「なんちゃって講習会」を行うつもりなので

これを搭載したマイコン講習用ロボットが動けば・・・・いいね。


あ・・・・そういやその前に設計講習会やらなきゃいけないね。>ZORO君
現在進行中の設計
posted by ヤシガニ at 01:51| 石川 ☔| Comment(0) | TrackBack(0) | マイコン | このブログの読者になる | 更新情報をチェックする

2006年09月18日

AVRStudio + WinAVR

昨日、就寝しようとベッドにあがった瞬間

目の前にゴキブリを発見しますた。


また久しぶりの投稿になります。



開発予定だったAVRのモジュールの設計が軌道に乗りますた。


結局、ATTiny2313には16BitTimer/Counterが2つなので

1モジュールに2つ積むことに決定。


基板の設計も順調で、初期の設計よりもだいぶ小型化。


しかし、今回開発中で感心したのが

「WinAVR と AVRStudio の組み合わせが最強」

だってこと。


だって普通考えられられないでしょ?

デバッガ(Atmel純正) + C言語コンパイラ + ライブラリ

全てフリー☆


フリーって言う割りに明らかに強力で、

現在IO周辺のプログラミングはほぼ終了。


多少マイコンでプログラミングをしたことがある人だったら、

あっという間に組めてしまう。(ただし、一部マニュアルが英語なので読めないときついかも)



たとえば、割り込み処理の記述だと

interrupt.h をincludeしておいてから

ISR (TIMER0_COMPA_vect){
〜適当な処理〜
}

main(){
〜適当な処理〜
    sei();      //割り込み許可
〜適当な処理〜
}

これを書くだけ。特別な記述がぜんぜんいらない。

しかも割り込みフラグを自分でクリアしなくとも自動でやってくれる(例外はあると思うけど)


EEPROM関連の関数がたくさん用意されているので、この辺はまったく困らない。


長い間H8やSH2を使ってきたけど、こんな強力な開発環境を

フリーで手に入れられるなんて信じられない。

これからH8とか使うよりもAVRでやっていこうかな?


でもちょっと残念なのが、レジスタのビット単位での操作なんだな〜。

H8だったら

P6.DR.BIT.B6 = 0;

っていうふうに構造体へぶち込む方式だったので、非常に見やすかった。

AVRだと

UCSRB |= _BV(RXEN);

っていうふうに_BV()を使わなきゃいけないし。ちょいと見づらい。

構造体のビットフィールドを利用した方式にならないかと期待。



上記のひとつだけを除いて、めっちゃお気に入りの開発環境になりますた。
posted by ヤシガニ at 22:16| 石川 ☁| Comment(0) | TrackBack(0) | マイコン | このブログの読者になる | 更新情報をチェックする

2006年07月31日

リンカで弾かれてる??

普通にmakeをすると、次のメッセージが。


collect2: ld はステータス 1 で終了しました
make: *** [test_sh.mot] エラー 1


簡単なテストファイル(test.m , test.h)を組み込んで、

makefileにも登録しておいたのだが、どこが間違っているかワカンネ〜。

ただし、Objective-C関連のファイルを抜いてmakeすると問題なし。

test.m test.hで宣言しているメソッド等はあくまで飾りですのでつっこまないように!


//makefile

OBJCLIB = /usr/local/sh-hms/lib/


CFLAGS  = -c -v -g -m2
LDFLAGS = -v -m2 -nostartfiles -Wl,-t,-Map ${TARGET}.map -Tlinker.x


SRC = ・・・test.m・・・
OBJ = ・・・test.o・・・


LIBS += ${OBJCLIB}libobjc.a


test.o:test.m
    ${CC} ${CFLAGS} test.m -o test.o




//test.m
#include "test.h"

@implementation MSObject

- (int)getTestNumber
{
    return test;
}

@end


//test.h
#include
#include

@interface MSObject : Object {
    int test;
}

- (int)getTestNumber;

@end

続きを読む
ラベル:Objective-C
posted by ヤシガニ at 15:47| 石川 ☁| Comment(0) | TrackBack(0) | マイコン | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。