AVRマイコン総合スレ Part37
■ このスレッドは過去ログ倉庫に格納されています
・I/O
入力1点:モーションセンサ
出力3点:赤色LED、緑色LED、発振出力
・動作
センサーオフの期間
>緑色LEDを0.5秒間隔で点滅、赤色LEDを消灯
>発振出力オフ(H出力)
センサーオンの期間
>緑色LEDを消灯、赤色LEDを点灯
>16KHz程度、デューティ比約1:2で発振出力オン(H/L反転出力)
PSoCだとPSoCブロック(内蔵ハードウェア)だけで全部出来そうだな。 Cypressがwin依存し過ぎだからだろう
開発ツールをOS限定した時点で流行るわけが無い
ルネサスも良い機種出してもWINしか対応してなかったから流行らなかった
技術者はUNIX系OS使用者の方が多いってことに気づくべき。 PSoCはハード屋から見ると分かりにくい。むしろFPGAのほうが見通しがいい。 AVRのアセンブラに興味がある人もいるかもしれないし,
ほんの雰囲気だけになりますが、短かくても完結しているので(長いプログラムの一部ではない)
発振器 >>645 のスタック未使用プログラムのメインのリストを載せます。
何の興味も無い方、スミマセン、読み飛ばして下さい。
発振周波数を決めるLo_period=115、Hi_period=55で、
センサはアナログコンパレータで入力しています。
発振は内蔵OSCの8MHz、緑色LEDの点滅間隔は1秒です。
できれば他のCPU、たとえばPIC24などのアセンブラのリストも見てみたい。 ;***** main loop **********************
;===== sensor OFF: LED_green blink
LED_Blnk:
wdr ;reset watch_dog timer
sbi PInB,_LED_Gr ;toggle LED_green ON/OFF
ldi YH,HIGH(1000) ;delay for 1Sec
ldi YL,LOW(1000)
;
LED_Blnk1: ;delay for 1mS
ldi ZH,HIGH(1989) ;adjusted by oscilloscope
ldi ZL,LOW(1989)
LED_Blnk2:
sbiw ZL,1 ;1mS elapsed ?
brne LED_Blnk2 ;No, wait 1mS
;
sbis ACSR,_ACO ;Yes, then comparator is Hi (sensor is OFF) ?
rjmp OSC_Out ; No, goto output OSC wave
sbiw YL,1 ; Yes, then 1S elapsed ?
brne LED_Blnk1 ; No, wait 1S
rjmp LED_Blnk ; Yes, loop again
;
;===== sensor ON: OSC output
OSC_Out:
sbi PortB,_LED_Gr ;LED_green turn OFF
cbi PortB,_LED_Rd ;LED_red turn ON ;
OSC_HL:
wdr ;reset watch_dog timer
sbi PortB,_AMP ;OSC High period (speaker ON)
ldi YL,Hi_period
OSC_H:
subi YL,1
brne OSC_H
;
cbi PortB,_AMP ;OSC Low period (speaker OFF)
ldi YL,Lo_period
OSC_L:
subi YL,1
brne OSC_L
sbis ACSR,_ACO ;comparator is Hi (sensor is OFF) ?
rjmp OSC_HL ;No, OSC go on
;
sbi PortB,_LED_Rd ;Yes, LED_red turn OFF
rjmp LED_Blnk ;return to LED_green blink
; >>658
FPGAよりずっとハード屋に優しいと思うけど。
ただ、デジタル一辺倒でアナログ回路的な思考ができないと
厳しいかもしれないね。 AVRのアセンブラは良いね
メモリ効率が良くて実行速度が速くてまるで中級言語(?)みたいに分かりやすい
これを命令コード16bitで実現していることに感心する レジスタ番号の若い方半分は、制約がかなり多くてあまり使い道が無い
むしろレジスタ数 半分で、その分アドレッシングの強化にまわしてもらってた方が
俺的には便利だったな
まぁ欲を言えばきりが無いからな、素直な方だと思うよ。 下位チップはメモリがほとんどないからメモリの代わりに使うんだよ。 I/O領域の扱いが不満。$00-$3Fまでの64バイトで収まってるうちは良かったけど
拡張I/O領域(メモリマッドI/O)が追加されてIN,OUT命令が使えなくなり
LD,ST系しか使えなくなった(SBI,CBIは元々I/O領域の前半$00-$1Fだけしか
対応していないのでもちろん使えない)
LD,ST系のメモリアクセスはXMEGAで改善されてるようだけど、それ以前の
Tiny,MEGA等だと2サイクル命令で遅い。 >>665
ループカウンタとか変数格納用途だね R0~7
俺の場合だけど
>>661
CPUのクロック周波数を幾らに設定しているの? 未だにDOSで遊んでいるせいか MOV と LD の使い分けで時々混乱してアセンブラに
怒られています >>668
CPUのクロックは内蔵RC発振器の8MHzです。分周はしていません。 >668
>ループカウンタとか変数格納用途だね R0~7
誰も指摘しないけど、即値系の命令が使えない等の制限があるのはR0〜R15では? 概要に 16 general purpose working registers って書いてあるやつだよ。 >>667
AVRも16bitなんてケチ臭いことにこだわってないで
AVR24上位コンパチ品とか出してくれれば
そういう使いづらいところが解消できたのにね
残念ッ! >678
>AVR24上位コンパチ品とか出してくれれば
それがXMEGAシリーズなのかも・・・。
AVRは最初の90Sシリーズから素晴らしいアーキテクチャだった、その後のTiny,MEGA,XMEGAも
良い出来だとは思うけど素晴らしいアーキテクチャの上にあぐらをかいて改良を怠った感がする >682
使えないと言ってるわけじゃなくてXMEGAに期待が大きかったのにあまりMEGAから改良されてないからじゃないか。
時期的にMicrochipがPIC18からPIC24,dsPICで凄い改良してきた時だし >>671,672
訂正、フォローありがと
そうでした
つい半年前にプログラム組んだのにもう忘れた
>>670
レス、ありがとう
対象物を検出したときの、スピーカーに与える信号は
オン、オフの繰り返しになるのですか?
変調のやり方がポイントという印象ですね >>680
使ってる人少ないけど良いよね
mp3デコード行けるパワー持ってるし
RX62と同等くらいか >>664
AVRの機械語はお世辞にもメモリ効率は良くはないぞ。 WebでAVRのプログラム見てるとほとんどが、フラッシュのアクセスにPROGMEMやpgm_read_byte()使ってるけど、
なぜNamed Address Spaces使わないの?
便利なのに。
https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/Named-Address-Spaces.html >>689
比較的最近実装された機能であるしWebに載ってる記事が新しい機能を
使いこなしてるとも限らないのでPROGMEMで書いてることも多いんじゃ
ないの。
素人に限ればAVRの最大派閥だと思うArduinoがちょい前まで古いGCC
使い続けてたのも大きいんじゃないかと思う。 >>690
CPUの命令やデータのビット数、プログラムの仕様で変わるだろうから
全く同じ条件での比較はできないと思うけど
とりあえず、仕様が書いてある >>661 のプログラムを他のCPUでも書いてみて
必要なバイト数を比べてみたらどうかな? >>688
メモリ上のデータを扱いだすとPICの倍以上にコードが肥大化する コードサイズは概ね32bit<16bit<8bit
要はレジスタ幅と本数が多い程コード効率は良くなるってだけ
例えば8bitで32bit演算なんてしたら4ワード掛かる >>689
古い開発環境だと通らないってのが大きいんじゃない
コピって来るような古いコードは古い環境で書かれてる訳だしな
ついでにputsとかで使う文字列ならPSTRの方が楽かもだし
新しいgcc入れても、新しいライブラリ向けに
リンクスクリクプトとスタートアップコードを変更すれば
古い開発環境でも使えるかもだけど、めんどいし… >>693
AVRにはメモリデータ相手の演算命令は無いからね
(そういう設計方針のCPUだから、と言うしかない)
でも例えばSRAM上の受信リングバッファ処理などでは
アドレッシングも特に問題は無いと思う
私が思うにCPUなんて用途・状況によってどれも一長一短で
8bitが常に32bitに負けるわけでも無いし
どんなCPUでもプログラムを組んでるときに
「あぁ、XXという機能があればなぁ」と思ったりするのでは? >>696
古い環境にこだわるやつがそんなにいるかね?
紹介してるやつがいないから広まってないだけでしょ。
AVRLibcの機能だけでも使ってるの見たこと無いのいっぱいある。 >>698
そこら辺は人によるんじゃね
個人的にはさすがにWin10-x64で動くライタ類は用意したけど
新しい開発環境の構築や学習、練習なんて
ちょうめんどいことは後回(ry
でも文字列定数へのPSTR挿入/削除や
const宣言に対する_flash空間等への追加書き換えとか
統合環境なんだしエディタにマクロ等用意して欲しい…とか思(ry >>689
> なぜNamed Address Spaces使わないの?
C++で使えないからだろ。 タイマをPLLで動かしたいのにPLL対応してるのがtinyばっかで苦労してるよ SDメモリからwav読み出して再生するのにDMA4チャンネル使い切ったりして遊んでるよ。
CPU使用率が限りなく0で何していいかわからん。 中華サイトで1番安いavrisp stk500を買ったらusbシリアル器だった
予備用にと思ったが、高い買い物なり 一方俺はISPシールドを買った
これでarduinoなattinyがお手軽に量産出来るぜ うちは、ミナトエレクトロニクスのユニバーサルプログラマ しばらくUSBBASPを使ってたんだけど何故かマイコンが3個連続で壊れたのでAVRWRTに回帰した
書き込みはメチャメチャ安定してるし、ヒューズビットの設定がラク
しかしただでさえボッタ栗な共立価格なのに、
今のはライタ基板だけじゃなくていろんな物がごちゃごちゃ付いてくるのが難点 Hidaspxばかり使っていますが、壊れたことは一度もありません UNOで焼いてるが問題なし
tiny85便利やね。普通にソフトシリアル使える ソフトシリアルなんかを使わなきゃいけない時点で全然便利ではない 今日もAtmel-Iceに助けられた。
データブレークポイントが無けりゃ簡単には捕まえられないバグだったわ。 デバッグ用のライン引いてる時だけ出ないバグとかあるからなぁ…
おっかねぇよ ATMEGA168用に公開されてるHEXファイルをそのままATMEGA328に書き込んでも
問題なく動きますでしょうか? デバイスなんて2クリックで変えられるもん何で変えないのか解せんがLチカレベルの単純なI/O程度なら動かなくはないはず
割り込みとかしてたら動かんものと見た方が良い >>724
すいません
>デバイスなんて2クリックで変えられる
これはどういうものでしょうか?ちょっと分かりませんでした ふつ〜にエスパーすりゃ
AVR Studioのプロジェクト辺りを前提にしていて
プロジェクトコンフィギュレーションを呼び出してDevice変えてリビルド
って事なんじゃね〜の?
ソースもプロジェクトも公開されてない、手元にあるのはHEXだけってなら
そりゃ無理な話だろうぜ マイコンソフト悩み事相談室スレにTiny2313の並列処理ソフトが紹介されているけど、
誰か動かした人いる? ハード組むまでもねえ。
AtmelStudioのシミュレータで試してみりゃいいじゃない。 そのスレの799のことかな?アセンブラ前提なら何でもありな気が >>728
2313みたいな小規模のマイコンではマルチスレッドの恩恵は薄いと思う
2個使うとかfunc()的なプログラムでRAMの消費を抑えた方が有用な気もするが >>731
マルチスレッドの言葉の意味分かってる? えっと、いろんなスレに同じ質問書くこと?(すっとぼけ ATmega168Pを使ってMK-156という音声再生モジュールを動かしたいと思っています。
基本シリアルで命令を送るのですが、命令を送ってもスンとも動かずで・・・
マイコン側はボーレート9600のパリティなし、8bit、ストップビット1、フロー制御なしの設定にするため
ATmega168PのCLKDIVを外して8MHz駆動に変えています
レジスタの設定も下記のようにしているのですが、何が間違っているのでしょうか。
// ADCの設定
ADMUX = 0b00000000; // AREF 右詰め
ADCSRA = 0b10000111; // 62.5kHz
// シリアル通信の設定
UBRR0 = 51; // ボーレート9600
UCSR0A = 0b00000000;
UCSR0B = 0b00011000; // RX,TX使用
UCSR0C = 0b00000110; // データ8bit, ストップビット1, パリティなし, 非同期
Windows側でTeraTermで確認したところ、特になにも信号が送られてくる気配はありませんでした。
シリアルの送信プログラム部分はこんな感じにしています
#define HEAD 0x7E
#define END 0xEF
void send_byte(uint8_t arg_b)
{
while(!(UCSR0A & 0b00100000));
UDR0 = arg_b;
}
void play_file(uint8_t arg_folder, uint8_t arg_file){
send_byte(HEAD);
send_byte(0x04);
send_byte(0x42);
send_byte(arg_folder);
send_byte(arg_file);
send_byte(END);
} >>735
AVRとMK156のRX、TXをクロス接続にしてないとか >>736
レスありがとうございます
一応TXRXの配線ミスしてないか何度か確認したり
あえて逆に接続してみたりしましたがダメでした… >>735
p出力を反転させないで、そのままつないでいるとか? >>735
>UCSR0C = 0b00000110; // データ8bit, ストップビット1, パリティなし, 非同期
bit1は倍速指定じゃないかな?
ゼロにしないと計算値通りにならないと思う。 >>738
すみません、p出力というものが調べても分からなかったのですが、
マイコンと出力確認用のPCは
http://akizukidenshi.com/catalog/g/gM-05841/
で繋いでいます。
また、他のATmega168pでも試してみてダメだったので
ハードというよりソフトもしくは自分の配線ミスが
怪しいと思ってますがこれ以上どうデバックしていけばいいのか分からず… >>741
TXのPortを出力にしてないとか(DDRレジスタ) >>741
クロックが内蔵RC8MHzならばクリスタルに変えるか又は
OSCCALかUBRRを調整すればいいかも TXEN有効にしてるならば自動でポート出力になるし、
ボーレート多少狂ってたってなんらかのデータは読めるはず。 すみません、シリアル通信は正常に出せていたようです。
PC側のteratermでちゃんと受信できていなかった原因は
AVRISP mkII の線をブレッドボードに差したままだったのが原因だったようです。。。
失礼致しました。。。
これ差してるとちゃんと挙動しないんですね・・・知らなかったです・・・
プログラムは正常に動いていて、シリアルの信号もちゃんと出せていたことは確認できました
■プログラム
http://codepad.org/OaqyWzv5
が、、、AVRISPの配線をとっぱらってもMK156はやはり音が鳴らず・・・
配線もシンプルなので特に間違ってるということはないと思うのですが、、、
http://i.imgur.com/8bHM2XJ.jpg
一応データシートというかMK156のマニュアルは読みましたが、
動かないとなると配線間違いか、使い方が違うか、
SDカードのデータが欠損しているか・・・ですね。
いまプログラム上からはフォルダ01の001のファイルを再生するように指定していますが、
そのファイルはMK156購入時にSDカードに入っていたmp3のデータで
PC上で再生確認できているものなのでこのデータが破損していたり
データ形式が間違っていたりする線はなさそうです。。。 ちなみに配線はこんな感じになってます
かなりシンプルなので配線ミスもないとは思うのですが…
3.3V動作なのでマニュアルどおりMKのRXとマイコンのTXは抵抗を挟まずに
直でつなげています
http://i.imgur.com/JDi8BR2.jpg あと現在進行形でデバッグ中ですが、
MK156の16番ピンのBUSYは再生中だと3Vになるようですが、
電圧を測っているところ常にLOWなので、そもそも再生されていないようです。
・・・というか原因がAVRの方にないということが分かったので
だんだんスレチになってきてますかね?
スレ変えた方がよければ言って下さい、移住します・・・ >>747
SDのフォーマットはFAT32だよね。ファイル名は8.3形式になってるよね。ぐらいしか思いつかねぇ。 >>747
あとファイル指定の後に再生コマンド送る必要があるかも。 >>ID:yzU1GKL7 ID:3m/JplAf
ただの通りすがりの者です。 間違えていたらゴメンなさいねw
ブレボの配線画像では、MK156の向きが逆みたいですよ。 1番ピンの位置を再確認しましょう。
MK156 マニュアル
http://www.mycomkits.com/reference/MK156manual.pdf
MK157 マニュアル (スイッチ10個/出力端子/電源端子付きMK-156用コントローラボードキット)
http://www.mycomkits.com/reference/MK157manual.pdf >>750
ほんっとうにすみません…
そしてありがとうございます…
死んできます…
無事再生されました… >一応TXRXの配線ミスしてないか何度か確認したり
>あえて逆に接続してみたりしましたがダメでした…
>かなりシンプルなので配線ミスもないとは思うのですが…
一体何を確認したんだ?っていう話 ■ このスレッドは過去ログ倉庫に格納されています