以上 過去スレリストはカットします。
こんな古いのリストしてもつまらんよ。いらん。
9 :
774ワット発電中さん :2013/06/26(水) 00:41:54.02 ID:fmy4QN4f
ATTiny2313でPCと通信をやろうと思っています。
ATTiny2313側は以下のコードになっています。
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
// ボーレートの設定
unsigned int baud = (8000000/16/9600)-1;
UBRRH = (unsigned char)(baud
>>8 ); //ボーレート上位
UBRRL = (unsigned char)baud; //ボーレート下位
UCSRA = 0b00000000;
UCSRB = 0b00011000; // 送受信機能(UART)使用
UCSRC = 0b00000110; // データ8bit
// stop 1bit
// パリティなし
// 非同期
while(1)
{
while(!(UCSRA & (1<<UDRE))){
}
UDR = 'A';
_delay_ms(200);
}
}
一方PCとはTera Termを使って、
受信したものを表示するようにしています。
しかし、↑のコードではTeraTerm側は何も表示されませんでした。
特に複雑なことはしていないのですが、コードに問題ありますでしょうか?
Tera Term側の設定は
Port: COM5(←合っています)
Baud rate: 9600
Data: 8bit
Parity: none
Stop: 1bit
Flow control: None
になっています。
11 :
774ワット発電中さん :2013/06/29(土) 17:19:43.04 ID:8zKnxK9u
>>13 連投中に返信が^^;
これはUSB-シリアル変換で、この出力は
>>14 で説明したようにRS-232C規格の出力になっています。
AVRのシリアル機能の出力はそのままではRS-232C規格とは合わないので、
レベルコンバータと言うICを使う必要があります。(14ではMAX232Cを使った例、他にも互換品があります)
マイコンの信号系(レベル)とRS-232C(シリアル)の信号系は違うので、変換(コンバート)する必要があるのです。
詳細は
>>14 のURL他、マイコン(Tiny2313に限ってもおk)のシリアル通信の作例が検索で一杯あります。
レベルコンバータを使わない例もありますが、まずはレベルコンバータを使用する回路を、一度試される事をお勧めします。
>>14 なるほど・・・今、意味がわかりました。。。
マイコン側の0-5Vの規格から±12Vの規格に変えるために
AVRとPCの間にADM3202みたいなのを挟まないといけないということですね。。。
ありがとうございます。
うぅ、配送期間待ってたらまた土日が潰れてしまう。。。
こういう変換アダプタ使ったことないからわかんないが RXDとTXDが逆な気がしないでもない
電圧レベルと正/負論理に注意。 論理が合っていれば、MCU側の出力が0〜5VでもPC側は受信できる。
追記 MAX232CPEなどのトランシーバICはレベルを変換し、論理を反転している。
どうせならFT232HL買った方がいろいろ遊べて便利なのに
>>20 ,23
すみません、さっきのやつをもうポチってしまいました。
>>19 RX/TXを逆にしても変わらなかったです。
>>21 電圧はマイコン側は5Vです。
正負論理とはどういうことでしょう?
0-5と、±12Vの論理のことでしょうか。
>24 正論理=+の電位で1を表す 負論理=グランドや−の電位で1を表す
>>24 12vのTxをマイコンのRxにつないだら壊れないか?
つなぐならマイコンからのTxだけにしとけよ。
送信だけなら動くかもしれないよ
何に繋がれるか判らないのは製品開発する時で、 用途が確定してるなら有り得ないケースは無視してよい
>>17 が届くのは月曜日か火曜日なのですが・・・
それまでで出来る事なんかないかなぁと思い、
ATTiny2313が壊れてもいいや的発想で
引き続き繋げてみたりしてるのですが、
// UART受信用割り込み
ISR( USART_RX_vect ){
unsigned char x = 0;
x = UDR;
//if(x == 'a'){
PORTB = 0b00000001;
//}
while(!(UCSRA & 0b00100000));
UDR = x;
_delay_ms(100);
PORTB = 0b00000000;
}
何かを受信したらPB0が光るようにして、PC側のTeraTermを叩いてみました。
結果からいうと、TeraTermに合わせて光るようですが、
if(x=='a')で、aの時だけ光るようにした場合に、
aを押しても光りませんでした。
何かは来てるけど、aではない。
ということは、
・電圧が違うからちゃんと認識できていない
・ボーレートが違うからちゃんと認識できていない
あたりが考えられそうなのですが、前者の場合は
>>17 が届いたら解決すると思います。
後者の場合は、ATTinyのプログラムのミスになるのですが、
>>10 が間違っている可能性はありますでしょうか?
例えばATTiny2313の出荷時のクロック周波数は8MHz?であってますか?
>>28 PC側のインタフェースがUSBなので、結局は
>>17 があれば事足りそうです。
ありがとうございます。
>>29 8MHz だけど、 1/8 に設定されてるから実質 1MHz
8MHzで動かしたいんならヒューズビットを書き換えないと
>>30-32 ありがとうございます。
8MHzで動かしたいというわけではなく、ボーレート違うと通信できないので確認です。
ということは、
>>10 のプログラムの
// ボーレートの設定
unsigned int baud = (8000000/16/9600)-1;
の部分がそもそも間違っているということですね。
8000000ではなく、1000000に設定しないといけなかったようです。
これを直しても特に現状は変わらなかったので、
あとは
>>17 が届くのを待ってリトライしてみます。
ありがとうございます。
1MHzなら9600bpsは速すぎると思うよ
>>33 avr-gccだとintが16bit。1000000(あるいは8000000)にUL付けたまえ。
…というか、データシートに早見表あるからそれ使った方が楽かも。
直結ならビットが反転したないんじゃね
>>34-35 // ボーレート(2400)の設定
UBRRH = (unsigned char)(25
>>8 ); //ボーレート上位
UBRRL = (unsigned char)25; //ボーレート下位
// (1000000/16/2400)-1 は 25
で設定して、PC側から受信したものをそのままPCに送り返すプログラムで
実験してみたら、PC側に反応がありました。
PC側から「abcde」と打つと、TeraTermに
Xl,vY
という反応がありました。文字は化けているようですが、
少し通信ができているようです。
文字化けの原因はよくわかりませんね・・・。
TeraTermの送受信の文字コードの設定はUTF-8にしてあります。
※それ以外の文字コードを設定しても文字化けは治りませんでした。
マイコン側のボーレートが微妙に違うんですかね・・・。うむむ。。。
ん、内蔵RCオシレータだと誤差10%だっけかな。
校正しなくても低いボーレートなら通信できそうなもんだけどな 'U'(0x55)を送ってどう見えるか
>>39 ちゃんと実際の周波数を計らないと誤差も増えるけどな
内臓RCは電源電圧で大きく変わるよ
あとはTXポートが出力になってないとか USART有効にした時点で出力になるんだっけか?
36の反転/非反転が通信できない原因だと思う。 だとしたら、今の君が論理を合わせるのは難しいだろうし(多分ね?) MCUのピンに負電圧がかかるのはあまり好ましい事ではないだろうし(多分ね?) AVR直結(TTLレベル)用USB変換ケーブルが届くのを待った方が良いのでは。
そもそも校正無しの内蔵クロックではUARTの要求する精度が出ない。 基準クロックに誤差があるならボーレートを落としても誤差は変わらないので 9600bpsがだめなら300bpsにしたってだめ。水晶付けときな。 がむしゃらにならず、部品が届くまでRS232Cってなんなのかググって勉強したほうがいいよ。
下手にRS232C付いてたばっかりに 知恵遅れが右往左往w
UARTはいずれ覚えた方がいいけどUSBに慣れた方が早い
なんで校正なしとか条件を付けるの? AVRは、工場出荷時に個別に10%未満になるように校正値が書き込まれている。 実際は生活温度内で5%位の誤差に収まっているから実験レベルなら通信できるよ。 ただ、ボーレート周波数を作るときの分周比は割りきれる値にしないと分周比誤差も加算される。 ボーレートを遅くすると分周比の誤差を少なくできるポイントがあるからあながち間違いではない。
ボーレートから逆算した周波数になるようにosccalをtuneすればいいのよ osccalのtuneで+−1%程度の精度で設定できる 電圧や温度をどう変化させても+−5%を越えてずれることはない お薦め
>>47 >>48 ボーレートジェネレータの分周比いじったりosccal合わせたりって
それが「校正」だろ? 出来るような流れかい?
出来る人はいっぱいいるんだろうがネタ元の人はどうなんだろう?
出荷時に10%未満ってのは知ってるよ。
調歩同期通信って何%でアウトなんだよ?
「水晶付けとけ」が一番シンプルなアドバイスだと思ったがなぁ・・・
以前に、内臓RC発振器の特性(出荷時の周波数精度や温度、電圧変化分)が知りたくて、 tiny2313を10個ほどテストした事があるけど、全てRS232C通信が出来た。 <条件:8MHz、周波数の再調整無し、電源5V、9600ボー> この特性でOKとするかどうかは人それぞれだと思う。(としか言いようが無い)
人それぞれだねぇ 俺は内蔵クロックで微妙に化けるのに当たったことが何度かある。 水晶付けるのが面倒なので覚悟の上でやったからいいんだが、 「初めてPCとシリアル通信します」ってな人にそんなハードル投げつけるってどうなのよって思う。 セルフキャリブレとかは、まともに通信できた次のステップじゃないかな?
水晶面倒ならせめてセラロックでも付けておけば
大抵水晶10個売りしかなくて22pFとセットで余らせてると思うw
56 :
774ワット発電中さん :2013/07/01(月) 21:34:31.54 ID:pdkinPGU
キャラクタ長やストップビット長などにもよるが、ボーレートが計算 上で±3%を超えるあたりから、通信エラーが出始める。 送信側と受信側でクロック位相がぴったりとか、相手側が理論値の ボーレートに対して誤差ゼロなんてことは、んあずありえないので、 発振器の周波数が誤差±10%なんてずれていたら、お話にならない。 たとえ水晶を使っても、ATカット品を使うのはもちろん、テキトーな セラミックコンデンサではなく温度補償コンデンサを使ってカウンタ でちゃんと公正しないと、刻印されたぴったりの周波数では発振 しない。
もう、同期式にしたら?
まあ、プロ用途なら規格内にあわせるのは当然だが 大抵そういう環境ならppmレベルで校正された外部発振器だろ
通信はきっちりしろよ
62 :
774ワット発電中さん :2013/07/02(火) 00:41:28.16 ID:pPOXpGv3
無知なWeb屋がシャシャリ出てハード手掛けて炎上、あるでぃ脳。 10.000MHzと書かれた水晶でキッチリ10.000MHzで発振してくれれば 世話がない。自称ハッカー、ゆとり脳最強伝説。 単なる外付け(水晶+適当な位相補償コンデンサ)で、無調整のままだと公称値 (例:10MHz)に対して100kHz(1%)くらいズレているのはわりと普通。 Dallas Semiconみたいな発振回路内蔵タイプを使っているM/Bを除いて、 パソコン内蔵の時計(RTC)がすぐに狂うのも無調整だから。 やってみるとわかるが、トリマを外付けして周波数カウンタを繋いで追い 込むのも簡単ではない。実用はせいぜい有効数字で5桁くらいまで。しばらく 時間をおいて計ると、また少しずれている。 恒温槽内蔵ではない、外部発振の水晶モジュールでも±50ppm/℃〜±200 ppm/℃くらいの周囲温度による周波数変動がある。
>>62 ラーメンタイマーに原子時計がいるとでもおもっているのかね?
やぁ、ゆとり君。 ルビジウム発振器が、CDの原音再生に有効と思っている オカルト君と友達になってはどうかね?
>>62 ものすごい脳内水晶だな
本当に存在するの?
水晶メーカーのステマ
ものすごい(特性悪い)脳内水晶だな、 なわけだが。 あるでぃ脳もゆとり脳も敵じゃないな、まさに最強。 データシート百遍読み直せ。
>>62 でたらめ書くのもいい加減にしろよ。水晶で1%もずらせたら逆にすごい
技術だ。
>100kHz(1%)くらいズレているのはわりと普通。 製品検査で今までに2千個くらいの水晶の発信周波数を調べてきたけど、 これはちょっと賛同できないし、ゆとりのない書き方にも賛同できません。 まぁ、そのなんだ、MCU内蔵RC発振器から恒温槽付き水晶発振器に変えようが、 調歩同期式から同期式に変えようが、通信エラーは発生するし、 アプリによってはチェック(CRCなど)、リカバー(再送など)が必須になる。
内蔵RCでUSBでの通信も可能だというのに
→
>>61
71 :
774ワット発電中さん :2013/07/02(火) 08:05:29.48 ID:pPOXpGv3
ゆとり脳は、VXOとか知らんのかね?
>>69 後半余分。
リトライとか知ってる俺スゲーってか (w
>>61 横レスだが、これすごいな。
邪道なのはわかっているが、世の中にはすごい人がいるもんだ。
>>61 横レスだが、これすごいな。
邪道なのはわかっているが、世の中にはすごい人がいるもんだ。
マイコンのクロックの話にVXO持ち出すのもおかしいし、 周波数公差と周波数偏差が混じってるのもおかしい。 1%って1万ppmだがVXOではないマイコン用発信回路の負荷容量で そこまで変えられないよね? 発信止まっちゃうよね? VXOは公称周波数より低いところで動作するからそれとごっちゃにしちゃってるのかな。
あちこちでホラふいて回ってる人だよ
>37 ボーレートの違いはなく、スタートビットは 0 ストップビットは 1。 次の文字を送る前は 1 が連続するはずだが今回は4回連続するものとしたら… PC から abcde と入力。LSB から送るということなので最初のビット列は 0-10000110-1111-0-01000110-1111-0-11000110-1111-0-00100110-1111-0-10100110-1111 ちなみに最初の 0- の部分がスタートビット。 -1111- がストップビットと連続した 1 の信号。 AVR は反転して受け取るので 1-01111001-0000-1-10111001-0000-1-00111001-0000-1-11011001-0000-1-01011001-0000 これを 0 が来たらスタートビットと認識し、ストップビットが来るまでの過剰の 0 は無視 するとすれば 1-0-11110010-000(ここ無視)-11-0-11100100-00-1-0-01110010-000-111-0-11001000-0-1-0-10110010-000... 11110010 'O', 11100100 'ESC', 01110010 'N', 11001000 'DC3', 10110010 'M' を認識して 送り返すと 0-11110010-1111-0-11100100-1111-0-01110010-1111-0-11001000-1111-0-10110010-1111... これがまた反転するので 1-00001101-0000-1-00011011-0000-1-10001101-0000-1-00110111-0000-1-01001101-0000... 最初の 0 をスタートビットとして認識したら 1-0-00011010-000-1-0-00110110-000-11-0-00110100-00-1-0-01101110-000-1-0-10011010-000/// PC が帰って来たと認識する文字は 00011010 'X', 00110110 'l', 00110100 ',', 01101110 'v', 10011010 'Y' 反転してるけど通信で来てるかも。
78 :
774ワット発電中さん :2013/07/03(水) 01:35:55.19 ID:dXYXoagb
>>10 の人ですが、色々と情報ありがとうございます。
そもそもの正負論理というか規格のところがあやふやな状態で、
色々と試行錯誤した結果をココで質問するのも申し訳ないと思い、
ひとまず
>>17 が届くまでは規格の勉強までに留めていました。
今日
>>17 が届いたので、仕事終わりに実験してみたら、
無事、問題なく動作しました。
クロック周波数も2400で合っていたようなので、
原因は5Vと±12Vのところですかね。
>>17 のやつはメチャクチャ便利ですね!!
C言語のprintfデバッグみたいなのがAVRはできないので、
これを使ってシリアル通信で似たようなデバッグができそうです。
ともあれ、ようやく次に進めそうです。
ありがとうございました。
>>57 クロックの分、配線が増えるけど、ボーレートだの考えなくていいし
取りこぼしとかなくなるから同期の方が断然便利だよな。
232なんてレガシーなものを使う意味が判らん。
>>79 配線が増える?
そりゃ、増えるやつもあるけど...
USARTの話してんだから同期式ならクロック線1本増えるじゃん
> 原因は5Vと±12Vのところですかね。 だ か ら 21~77まで何人かが電圧レベル以前の問題で、論理が合っていない、 論理が合っていれば内蔵RC発振でも通信できる、と書いているよ。 ちゃんと読んだ? ま、いいけどさ、とりあえずオメ。
>232なんてレガシーなものを使う意味が判らん。 残念だけど、機械制御などではいまだにRS232CやRS422/RS485が使われる事も多い。 だからサポートしているMCUも多い。
手頃な代替規格が無いし、PC環境でもUSB-シリアルブリッジで 実質は調歩同期通信使ってるしな。 それにPCのRS-232は同期通信が出来ないし。
電圧がバカ過ぎる以外特に不都合はないし
PROGMEMに記録させた文字列データを読み出したいんだけど、 #include <avr/pgmspace.h> const char head_0[] PROGMEM = "test001,"; const char head_1[] PROGMEM = "test002,"; const char head_2[] PROGMEM = "test003,"; PGM_P head_table[] PROGMEM = { head_0, head_1, head_2 }; char buf[10] = {}; while(1){ memset(buf, NULL, sizeof(buf)); strcpy_P(buf, (char*)pgm_read_byte(&(head_table[0]))); ←? } コンパイルは通るんだけど、いまいち文字がちゃんと書き込めてるのか、 そして読み込めているのか・・・ 文字がうまく読み書きできていないせいか、正常に動かないんだす。 なんか前もstrcatで文字列繋げようとして、 何故かうまくつながらないことがあったんだけど、 AVRは文字列扱うのに適してないんかな。
>>87 プログラム間違ってるだけ
AVRのせいにすんな
>>89 あ、ごめんなさい。
貼り付けミスです。
最初はpgm_read_wordだったんですけど、
ここがアレなのかなぁと思ってbyteにしたままでした。
pgm_read_wordでも上手くいかない・・・
だって、これでもNGなんだぜ・・・? C言語だったらこれで問題なく動くのに・・・。 const char a[4]="aaa"; const char b[4]="bbb"; char c[7]={0}; memset(c, '\0', sizeof(c)); strcpy(c, a); strcat(c, b);
>>91 head_table の型がわかんね
strcpy_P(buf, &(head_table[0]));
>>93 ん〜・・・、head_table[0]に格納されているのは、
char型のポインタの変数であるhead_0の、先頭のアドレスですよね。
それを引っ張り出して、strcpyの第2引数に持ってくれば、
コピーされるのは文字列なのでは?と思うのですが・・・。
それ以前にPROGMEMを使っていないのに
>>91 が上手くいかない時点で、
C言語から来た自分にとってはAVR意味不明すぎる・・・。
C言語使えるって聞いているのに!!!!
必要な情報が出てこないので エスパー試験と化してます
うーん、例えば strcpy_P(buf, PSTR("test")); でやってみると、普通に上手くいくから、 ROM上に書き込む時点で何かがおかしくなってるのかなぁ
まじ分からんな・・・。 ここで聞いても答えがでないとなると、 もうどうしようもない。
const char head_0[] PROGMEM = "test001,"; みたいな記述を関数の中でやるとうまく行かなくて 外に出したらうまくいったという成功体験
>>98 ああああああああああああああざす!!!!!!!!!!!!!!!!!!!
解説サイトにそういう注釈つけて欲しい。
10個くらいのサイトを上から下まで全部読んでたのに
そんなこと一言も書いてなかったよ。
strcpy_P(buf, (PGM_P)pgm_read_word(head_table[0])); じゃないの?
>>98-99 言語仕様を理解していない、にわかスキルだから、動かなくて当然。
関数内に記述すると、明示的にstatic宣言を付けない限り、呼び出しの都度
確保と開放されるローカル変数となる。(C言語仕様上はMPUにスタックが実装
されている前提があるわけではないが一般にスタック上に動的に確保される)
const宣言は、コード記述上での書込み禁止(読み出し専用、すなわち左辺式へ
指定するとエラーになる)ことを示すだけで、ROMメモリに置かれることを意味
しない。(const付けただけでROM配置なら、ディスクからロードして実行される
WindowsやLinuxのプログラム記述ではconstが使えない)
PROGMEM マクロは、リンカに対するメモリマップ指定なだけで、コンパイル時
の構文解析には影響を与えないので、エラーとはならない。
それと、配列型のローカル変数の初期化はGCC独自拡張だった気がするが、当然
ながら実行時はフラッシュ領域には転送できない(書けない)し、スタックも配置
できない。
>>91 > C言語だったらこれで問題なく動くのに・・・。
おおかた
void Yaruo_AVR_Hajimeruo()
{
const char a[4]="aaa";
const char b[4]="bbb";
char c[7]={0};
memset(c, '\0', sizeof(c));
strcpy(c, a);
strcat(c, b);
}
とかって、ローカル変数にしているというオチではないのか?
出力として出てくるlssファイルで何が起きてるか確認するのはAVRでは必須だと思う
AVRで乱数を発生させるときに seedってどういうものを設定するもんなんですか? 色々調べてると、電源入れてから、ユーザがボタンを押すまでの時間をとるとか、 リアルタイムクロックなどをつけてそれで初期化するのが主流の方法のようです。 ただ、僕はなるべく小型化を図りたいので、新しいICをつけたくないです。 また、ユーザに動作を要求するのは良くないと思うのでそれも避けたいです。 それ以外で何かいい方法ってありますでしょうか? ユーザに作業を強制せず、追加部品のいらない方法を知りたいです。 今ぼんやり頭で考えたのはEEPROMにSEEDを記録しておいて、 起動ごとにSEEDをインクリメントしていくという方法です。 /******** SEEDのロードとインクリメント ********/ unsigned char seed_h = eeprom_read_byte(SEEDH); unsigned char seed_l = eeprom_read_byte(SEEDL) + 1; if(seed_l==0x00){ seed_h++; eeprom_write_byte(SEEDH, seed_h); } eeprom_write_byte(SEEDL, seed_l); /******** SEEDの設定 ********/ srand(seed_h<<8 + seed_l); この方法って、あまりWebに書かれているのを見かけないのですが、 何か構造的欠陥というか、ダメな理由があるんでしょうか?
乱数って用途によるから 別にダメとかじゃないでしょ 何すんの
>>105 まだほとんど実装できてないんですが、
最終的には占いみたいなものを作ろうと思っています。
15くらいの占い結果を作ろうと思っていまして、
ユーザは特に何をすることもなく、
ただ電源を入れたら占いの結果が出てくる、というものを想定しています。
結果の表示方法はLEDにするかLCDにするか、特に決めてません。
自分の力量でできる範囲でやろうかなと。
個人的には、リアルタイムクロックつけたり、ボタン押したりなんかよりは 100倍実装が簡単で、time(NULL)をseedにするのと同じくらいの効果が 得られるんじゃないかなぁと思ってるのですが、 そういう実装方法が全然Webで見られないので、 乱数の発生のさせ方として何か致命的な欠陥があるのかなぁという単純な疑問です。
>>107 どんなもん作ろうとしてるのか今一よくわからんが、例えば大量生産品だと同じような占い結果になる製品ばかりになるのはよくないだろうね。
MAC アドレスみたいに、一品毎に異なるシードを設定できるならいいけど。
なすび、、 登頂できんかったな、、グスン、、、
占い程度ならカウンターをフリーランさせて ユーザーがボタン押した時の値読む程度でいいでしょ randなんか呼ぶ必要もなさそうだけど
>>104 電源ONで乱数が一つ必要ならsrandは必要ないと思うよ。
eepromの中身が乱数列で良いよ。
それよか低消費電力sleepて常にマイコンonにしといてswてwakeupすれば内部カウンタ等とswのタイミングで乱数になるよ
乱数の話からそれるが、 "15くらいの占い結果" を表示するための寸法の方が "なるべく小型化を図りたい" 上でネックになるような気がするのだが…
電源投入時のRAMの初期値1バイト程度じゃばらつき少ないだろうけど 全体ならそれなりに乱数として使えないかね
>>114 やってみればわかるけど、そんなにばらつかない。
そもそも、電源切るから駄目なんだろ。センス無さ過ぎ。 スリープしてればRAMは保持されるだろ。
>>116 電池入れ替えたら以降の出目が全部分かるとかセンス無さすぎ
電源入れ替えた時はボタン押すまで、若しくは離すまでカウントすれば良いだけ。 それ位思いつかないのかよ。どうしようもなくセンスねぇなー
アナログ入力が余っていれば、中間電位が入力されるようにしておいて、 必要回数サンプリングした下位1,2bitを使うとか
srand()を呼ばないで、いきなりrand()呼ぶと、出てくる乱数の順番は プログラム実行開始からいつも同じになる。 実装依存だけど、大抵のrand()はあくまで擬似乱数なので、一見すると 規則性のない数字が返されるように見えるだけで、ばらばらな数字が出て くる順番は実は同じ。 大抵はRTCの秒の値とか、Z80だとリフレッシュカウンタの値とか、とにかく srand()で初期値を散らさないとダメ。
Z80だと、パチンコ台がそんな感じで乱数を作ってるらしいな。
パチンコ台は内部にテーブルを持ってて、カウンタをどんどん進めてる 玉が入った瞬間に指してる場所で当たりかどうかが決まる それ以外の方式のものは警察の審査を通らない
>>110-111 あーなるほど、どうせ電源ONでユーザに1アクション要求するなら、
低消費電力Sleepモードで、INT0(でしたっけ)のボタンで復帰させて
その時の内部カウンタを使えばいいんですね。目から鱗です。
>>112 そこもいずれ考えないといけないんですが、、、。
今まだそこまで頭が回ってなくて・・・
しかしあれですね。
乱数なんて使用頻度も需要も高いのに、
乱数生成用の機能があらかじめ用意されていないとは・・・。
>>121 リフレッシュカウンタ調べてみましたが、いいもんがあるんですね。
AVRにもあれば・・・!!
>>120 あ、それいいですね!!
2〜3Vの電位をデジタル入力ピンに繋げておいて、
8回サンプリングしてランダムな0/1の8bitの数字を得て
%15するとかでも良さそうですね。
>>124 pSoCには、擬似乱数発生器PRSがあるよ。
>>130 すみません、書き方が悪かったです。
正確に言うと、AVRISPmkIIはすでにもっているのですが、
今はDIP型のものをブレッドボードにさして書き込んでいます。
http://akizukidenshi.com/catalog/g/gI-04386/ ただ、↑こういう形のものはブレッドボードに、というわけにはいかないので、
どうやって書き込むんだろう・・・と思っての質問です。
ISPとマイコンの間になるものが欲しいのです。
>>131 ありがとうございます!これでいけそうな感じですが、
>M48+ ADP ATmega48 ATmega88 ATmega168 mega48 mega88
>TQFP32 AVRのプログラミングのアダプターテストソケット+ Freeshipping
ATmega328と記載されていないですが、ATmega328でもいけるものなのでしょうか?
あぁ、ググったら分かりました。 TQFP32の形がATmega328の形なんですね。 じゃあ大丈夫そうですね。ポチります。
ポチったた!! 海外サイトは買うのに苦労する・・・。 需要ありそうだけど秋月に売ってないもんなんだねぇ
需要なんか無いだろ。ISPの意味わかってないのか?
AVRのアプリケーションに
AVR134 :非同期タイマを使用する実時間時計(RTC)
http://www.avr.jp/user/AN/PDF/AVR134.pdf 要点
■ 非常な低消費電力での実時間時計(4μA/3.3V)
■ 非常に低費用な解決法
■ 精度調節のための調整可能な前置分周器
■ 自動閏年補正付きの時間、日、月、年の計時
■ 2000年日付形式適合
■ RTC(非同期タイマ/カウンタ)部付きの全AVRマイクロ コントローラで使用可能
■ ATmega103用C言語コード内包
という嘘みたいな事が書かれている
ATmega103でもTimer0、それ以外の多くのAVRではTimer2に
32.768kHzのクリスタルを取り付けるというもの
この数字に何の意味が…
どこが嘘みたいなの? どの数字のこと言ってんだろう・・・エスパー試験多すぎる
>>137 32768Hzというのが…
何かの定数ですかね
当たり前にある時計用クリスタルの周波数だよ 低電力で発振できるの
>>139 時計用と聞いて思いついた
65536Hzにすれば、16bitタイマーの桁溢れごとに
1秒間隔のタイマー割り込みがかけられる
そうです。バイナリーカウンタで都合よくカウントできるように こんな一見中途半端な周波数になってる。
消費電力は倍になるけどな
どこからパワーダウンモードの話題が出たんだw
時計用筒と周波数なんて小学生でも知ってるのにw
>>140 時計には秒2パルス。
何故かは調べよう。
そういや秋月のmega328Pはタイマ2のバグ抱えたリビジョンて噂があったけど もう変わったのかな
>>145 4060が14bitとか中途半端なbit数なのはこれだったのか!
GPSレシーバーの1PPS使ってクロック校正組んでるんだが、 PCの周囲では建物の中なのでGPS受信できない・・・・
attiny2313をArduinoISPで使う場合に
arduinoIDEで,avr.jpなんかにあるプログラム例えば
http://www.avr.jp/user/an.htm avr155
なんかをコンパイルしてみると
LCD_cntrol.h
に記述してある
pgmspace.h
が見つからないというエラーが出ます
でもそのファイルは
\arduino\hardware\tools\avr\avr\include\avr
あるんです。
フルパスで
#include "\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h"
とすればいいのかもしれませんが、これに対応するライブラリはリンクできなさそうです
普通はどうするのでしょうか
#include "pgmspace.h" ってのはIAR用かな #include <avr/pgmspace.h> でリンクしませんか?
>>150 なるほど。帰ったらやってみます。
ありがとうございます
本来、K&R時代のCから #include <> は、コンパイラ提供のヘッダファイルをインクルードする #include "" は、ユーザ定義のヘッダファイルをインクルードする 用に使い分けるものだったはず。 完全パスで記述すれば同じだけど、両者 でヘッダファイルの読み込むフォルダの検索順序が異なる。 #include <> は、コンパイラのヘッダファイル格納場所(一般的に環境 変数 INCLUDE=等で指定)から検索されるのに対して、#include ""は、 ソースコードがあるプロジェクトのパスが優先して検索される。
「優先」されるだけで結局はincludeフォルダにも見に行く。 質問者はそれでも「見つからない」と言っている。 わかるか?
>>153 ""は、環境変数のPATHをみにいかないよ。
カレントPATHから見に行く
代表的な<avr/io.h>とかを"avr/io.h"に書き換えてビルドとか試してから書き込めよな。 「優先」って日本語わからないのかよ。 150の答えはそういうことを言っているのではない。
150の答えが理解できない人も居るようなので寝る前に書いとく。 ググればわかることなんだがな・・・・ 問題はpgmspace.hの場所が「...\include\」ではなく「...\include\avr\」であるという事。 質問者は自分で答えを書いているのに仕様を理解していないのだ。 コンパイラは環境変数PATHのサブフォルダには行かない。 つまり、include\からの相対パスを書かなければいけないのでヘッダファイル名の前に 「avr/」が必要なのだ。 arduinoの資料にも「avr/pgmspace.h」の説明があって、決して「pgmspace.h」ではない。 さりげなく<>に書き換えてあるのはドキュメンテーションの意味から独自ファイルではなく システムで用意されたファイルであることを明示的に示すことが当たり前になっているからだろう。
追記しておこう。なぜ"pgmspace.h"という書き方が出てきたのか? これも150が答えを書いている。サンプルはIARコンパイラを前提に書かれており、 そんなものはシステムとして用意しておらず独自作成していると言う意味だ。 そうすると<avr/pgmspace.h>をインクルードできたとしてもそのコードは動かない確率が高い。 名前が似ていても中身の定義内容がまるっきり異なるであろうから。 興味本位にAVR155を少しのぞいてみたが、<avr/pgmspace.h>で定義されているような内容は ソースのどこにも出てこなかった。 GNUのAVR-LibCベースで作られているarduinoにそのまま利用できるコードではない。
Cプログラマは大変だな、 コンパイラのバグに怒り狂い、独自仕様に右往左往し、バージョンアップに一喜一憂し、 アプリを書くヒマさえない! …なんて事が無いように、良い子のみんなはチャント勉強しましょうね。
>>157 フォルダの区切り文字を混在させるような奴は、無駄なレスしてないでさっさと寝てくれ
>>159 ちゃんと使い分けとるぞ、さっさと目をさませw
>>158 つまりアセンブラ最強ってことか。
PICだと気が狂うけどAVRだしな。
Cは遊びでしか使い物にならないな。 出来上がったプログラムの品質が、ライブラリに左右されたりバージョンで動作が変わるなんて いい訳はシビアな製品には向かない。コンパイラのせいで不具合とか、お客に失礼だろ。 アセンブラで地道に自作ライブラリを作っておけば、信頼性は高いし、開発効率はアセンブラの方がむしろ上
そうですか
>>163 何言ってんだ?
普通、開発環境はプロジェクトごとにプロジェクト完了まで固定だろ。
ライブラリしかりコンパイラしかり、着手前に決めたものを。
業務で物作った事無いだろ。
>>165 趣味でしか使ったこと無いのバレバレだな。
納品した後、メンテや改良を請け負えない仕事なんてありえんわw
しかも、プロジェクト毎に固定しなきゃならんって事は、プロジェクト毎に
プログラマの習熟度にバラつきはあるし、数年前のプログラムをメンテする時に、当時のコンパイラの癖を
思い出せるとも限らないから、更にプログラムの出来が悪くなる。
仕事の場合、バージョン単位に環境の再構築も可能になるよう、納品するもんだぞ?
>>166 当たり前だけど、それが仕事なんだけどな。
開発環境はHDDごと抜いて、ラベル張って保管だろ。
170 :
163 :2013/07/12(金) 14:20:12.35 ID:5fCSbcFT
>>169 >開発環境はHDDごと抜いて、ラベル張って保管だろ
そんなメンドクサイ事してるのかよ。使えねーw ほんとに仕事が出来ないんだな。
俺は仮想環境に構築してファイルをバックアップしてる。
linuxで済ます時はtarボールにするだけだ。
>>170 情けない…
ハード直接叩くこと、してないんだね。
うちの会社ではVB4.0がインストールされた端末が未だにある。 そーゆーことだろ。
>>171 ”HDDごと抜いて、ラベル張って保管”がハード直接叩くことかよwww
面白すぎwwww
どのやり方も一長一短だし業種によっても適不適はあるだろ。 自分の世界が世の中すべてみたいな論争やめれ。 アセンブラもCも一長一短だ。 移植性や透過性の良いCを利用しつつ、クリティカルなところはアセンブラ関数書くみたいに 両方利用できるようになればいいんじゃないのか? 俺もアセンブラ大好き派だが、Cの美味しいところも可能な限り使っている。 コードメンテナンスは別の人に頼むから全アセンブラじゃ現実的に仕事にならんのだ。 複数のアーキテクチャ扱うからな。
>>160 どこがトンチンカンか詳しく説明してもらおうか
>>161 はあ?
どう使い分けてるのか、説明してみな
>>168 単に、使えなかっただけだろ
いじめてやるなよ (w
必死だなw
>>173 仮想化は便利だけど、ISAバスのデバイス叩いたり出来ないだろ。
まだあるんだよ。ああいうのの保守。
まぁ純ソフト屋だったら仮想マシンの方が便利なんだろうけど。
>>176 ああ、俺の今朝の書き込みか。
質問者の勉強になるように書き分けたつもりだよ。無意識に混ぜたわけじゃない。
>>179 なんでAVRの開発環境でISAが必要なんだw
ISAバスとかw 老害が必死だなw
Cは遊び云々、自分はアセンブラ〜なんて釣りなのに、 よく相手にするな
2.11の時代から、MS-DOSはパスの区切り文字に、'\'ではなく'/'を使えた。 まぁ、大半のソフトは独自に'\'決め打ちでパス文字列の解析をしていたから 意味ないけど。(w 知っててごく当たり前だけど、大抵のCコンパイラは、複数のパスをセミ コロン(;)で区切ることで複数のパスを環境変数に記述できる。だから、 "/include/avr"を追加すれば相対パスで記述しなくても取り込んでくれる。 それと、インクルードファイルを探す環境変数「INCLUDE」は、実行ファ イルを探す環境変数「PATH」とは無関係。
レベル低い ID:tQAQzJLw 釣りにしか見えない ID:eUasoTJy
>>180 言い訳はどうでもいいから、書き分けた意図とやらを書けばいいんじゃね?
>>186 わかってないのオマエだけだからさ、煽っても恥ずかしいだけだよ。
AVRのスレと思ってきたけど違ったようだ
>>188 はいはい、なぜかは知らんけど意図は掛けないんだな。
それがわかれば充分だわ (w
夏休み前なのに、あるでぃ脳がいっぱいだなぁ。
AVRはアセンブラ必須か なるほど メモメモメ、、、 先は遠いな
実質的に組み込みでアセンブラは必須だと思うなぁ。 Cのソースだけではわからないバグってあるよ。 ゴリゴリに使える必要はないと思うけどニモニック表見ながら読める程度にはね。
読むだけじゃなくて書くのも必要 Cだけではどうにもならないことがある
やってればそういうに当たる事もあるよね。 でもまぁ趣味の範囲ならとりあえず読めれば何とかなるでしょ。 特殊レジスタを4クロック以内とか書いても数行だし。 ChaNさんのところのアセンブラ関数の書き方は読んどいたほうがいいね。
タイミングがシビアだから、というケースは希で、 スタックとか割り込み禁止とか、C言語が勝手にやってくれる部分で、 勝手にやられたら困る部分なんかによく出てくる
クリティカルな仕事してんだねw
まぁこれから頑張ろうって人ビビらせるこたないさ
>>193 がんばれ〜 必要にかられりゃそんなにドヨ〜ンなことじゃないよ。
組み込み向けの開発環境なら、割り込みとかは C から制御できるでしょ。 超マイナーな CPU 使ってるとかなら、別だけど。
デバイスドライバーってのはそうもいかないことも稀にあるんよ。 だから趣味の範囲ならほぼ無いってw でも、アセンブラ関数の書き方なんてのがあるって事はアセンブラの需要が ゼロでは無いって証拠じゃないかと思うんだ。 人によってはルーチン高速化したいなんてのもアセンブラ化する理由かもしれない。 要るか要らないか人それぞれ。
>>200 別に絶対ないと言ってる訳じゃないんだが...
そもそも趣味の方がいろいろ変なことやってて、アセンブラ使う機会が多い人もいるしね。
通常はAVR スピードと容量を求められるときはRaspberryPIでいくことにしました
RPiでスピードとかw
ふつうにあるだろ。
基本を知らないのに、アセンブラとか笑えるねぇ。
>>157 の「AVR-LibCベース」なんて何を言いたいのやら。
標準ライブラリを含めて、C言語は勝手に割込マスクしたりはしない。
そもそも言語仕様レベルでは割り込みやスタックの概念はない。関数内で
宣言するstaticではないローカル変数は、大抵のCPUでスタック領域に確保
されるが、あくまで実装依存。
アセンブラやってるからって偉い訳でもないし、趣味の大半はメンテ性無視だし、
本人の人件費ゼロというコストも度外視だし、それどころか間違った知識で
使ってたりもするからなぁ。
Windowsでさえドライバをカーネルモードではなく、ユーザーモードで動かそう
としてフレームワークを提供しているのに、きょうびデバドラごときでアセン
ブラ必須なんてないだろ。まぁ肝心のフレームワークが糞なせいで、青画面
で固まったりするけどな。
DOSのドライバならともかく、カーネルモードで動くWindowsドライバでさえ、
勝手に割込コントローラやDMACのレジスタとか直接操作したりはできんぞ。
windows?
私は<趣味でアセンブラ>でやっているので、スタックなんぞいつもイジリ倒している。 スタック領域をいくつか確保して乗り換える時もあるし、 SPの深いレベルからいきなりトップに初期化したり、 通常の処理から割り込み処理へジャンプしたりもする。 装置が完成すると、私の意のままに動いている健気なAVR、って感じです。 ただし、私にとってAVRはあくまでもヒマツブシなので、 分かりにくいプログラムは止めろとかのクレームは無しで(念のため)
いつの間にかAVRにOS載せて デバイスドライバー使うのが 主流になったのか。 しかもWindows・・・RTだよな、きっと。 ポート叩いてLEDチカチカさせてた あの頃が懐かしい。
>>203 スピードって、スループットの意味で使ってる人と、レスポンスの意味で使ってる人がいるから
普通にスタック使うのと、スタックいじり倒すとか、線引きはどこに?(w C標準の仕様だと、ローカル変数に実行時にサイズが決まる配列は宣言 できないけど、GCCは独自拡張しているので、AVR-GCCも可。 関数から関数へのジャンプも、関数ポインタ使えばできるし、スタック ポインタを直接触る部分だけインラインアセンブラで書けば足りるでしょ。 以前、x86でCコンパイラが吐いたアセンブラソースを関数単位でチマチマ 最適化して、最終的にバイナリサイズを1/3くらいにしたことあるけど、 命令が素直すぎるせいかAVRでアセンブラの最適化とかやる気がしない。
>>211 Cで関数ポインタさえ使えばコルーチンを実装できるとは初耳に水だが、どう実装するのかね? 後学のために教えたもれ。
おっと、ID:yLL+ReV4はWindows屋のようだったな。コルーチンという語に馴染みが無ければファイバと読み変えてもいいぞ。
可変長配列はC99から使えるよ
> 211 > 普通にスタック使うのと、スタックいじり倒すとか、線引きはどこに?(w > スタックポインタを直接触る部分だけインラインアセンブラで書けば ここだろ JK
itronを乗せる余裕は無いけどタスク切り替えとかしたい時に、 スタックを自分で管理することになる 処理能力のある石にしてRTOS乗せりゃいーじゃんという考えと、 C言語に任せりゃいーじゃんという考えは方向同じだな
>>203 早いよ。
プログラミングが下手なんじゃない?
UARTの受信割り込みの実験をしているのですが、
どうも割り込みが発生してくれないようです。
割り込み設定のレジスタもちゃんとHにしてますし、
割り込み許可のsei()も実行しています。
一度でもlSR(USART_RX_vect)の中に入ると
LEDが光るようにしているのですが、LEDは光らないので、
ちゃんと割り込まれていないという事が分かりました。
データを受信しているかどうかについては、
送信側のRXとTXの配線をつないで確認したところ、
エコーバックされるのでデータはちゃんと送受信されているようです。
なぜ割り込みが発生してくれないのでしょうか?
ATmega168Pです。
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
// UART受信割り込み
lSR(USART_RX_vect){
PORTB = 0b00000010;
unsigned char x;
x = UDR0;
while(!(UCSR0A&0b00100000));
UDR0 = x;
}
int main(void)
{
UBRR0H = (unsigned char)(25
>>8 );
UBRR0L = (unsigned char)25;
UCSR0A = 0b00000000;
UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);
UCSR0C = (1<<USBS0)|(3<<UCSZ00);
sei();
DDRB = 0b00000010;
PORTB = 0b00000000;
while(1)
{
_delay_ms(1000);
}
}
lSRじゃなくてISRかよぉぉぉぉぉお!!!! わかりにくいフォント使ってんじゃねぇええええええ!!
LSSファイルが読めればベクターテーブルがからっぽなのすぐわかったろうにねぇ
先頭だけ小文字って普通ありえんだろ…
>>222 見てたWebページのフォントが明らかに小文字のエルだったので、
そういうもんなのかぁと思って・・・。
よーし、次はI2Cの勉強だ!!
AVRの乱数で気付いたことが・・・。 電源ONにしたら、 srand(XXX); で初期化して、 rand()%40を2回実行しするだけのプログラムです。 電源をONにするたびに(x, y) x<40, y<40の組み合わせが生み出されるのですが、 rand()%40から生み出される数字が狭い範囲でループしているようです。 例えば、 (x,y)= 1,4 16,21 8,2 33,23 4,25 1,4 16,21 8,2 33,23 4,25 1.4 16,21 8,2 ... のような感じです。この比較的小さい幅でループするなんてあり得ますか?
乱数の初期化のアルゴリズムは // 乱数の種の上位8ビット、下位8ビットをEEPROMから取り出す uint8_t seed_h = eeprom_read_byte(SEEDH); uint8_t seed_l = eeprom_read_byte(SEEDL); // 上位8bitをインクリメント seed_h++; // 上位8ビットがオーバーフローして0に戻ったら、下位8bitを繰り上げる if(seed_h==0x00){ seed_l++; } // 乱数を初期化 srand(seed_h<<8 + seed_l); // EEPROMに乱数の種を保存 eeprom_write_byte(SEEDL, seed_l); eeprom_write_byte(SEEDH, seed_h); ※eeprom_busy_wait()はココでは見にくくなるので省略しています。 のようにしています。乱数の種は 0x0000 0x0100 0x0200 0x0300 ... 0xFE00 0xFF00 0x0001 0x0101 0x0201 のようになっていく想定です。
想定じゃなくてどの乱数のときにどんなシードだったのか調べればいいんでない? ぱっと見ではシードのアップデートにミスがあってループしてるバグのように見えるけど。
>>225 seedの上位バイトを順次インクリメントして初期化した最初のrand値は乱数じゃない。
randの答えを次のseedにしないと乱数にならないじゃないのかな?
詳しくはrandのソースを読むと理解できるかも
avr-libc
の中身抜粋
static int
do_rand(unsigned long *ctx)
{
long hi, lo, x;
x = *ctx;
if (x == 0)
x = 123459876L;
hi = x / 127773L;
lo = x % 127773L;
x = 16807L * lo - 2836L * hi;
if (x < 0)
x += 0x7fffffffL;
return ((*ctx = x) % ((unsigned long)RAND_MAX + 1));
}
int
rand(void)
{
return do_rand(&next);
}
void
srand(unsigned int seed)
{
next = seed;
}
>>225 >>srand(seed_h<<8 + seed_l);
これ、
srand((unsigned int)seed_h<<8 + (unsigned int)seed_l);
mint8付けてるんでなければ変わらんよ。 とりあえず、こうかな。 srand((seed_h<<8) + seed_l);
Cで書いてるんだしハードと関係ない処理はPCで確認すりゃいいのに
>>229 そだね。
+ の方が<<より演算優先順位高いから
srand(seed_h<<8 + seed_l);
は、
srand(seed_h<<(8 + seed_l));
になっちゃうね。
AVR Studioのシミュレータで見れるな
ここに書けば自動的にデバッグが済むから楽チンw 自分で手を動かす奴は負けw
え〜デバッグ楽しいしここのレス遅いよ〜
みなさんは void USART_Transmit(unsigned int data) { while ( !(UCSRnA & (1<<UDREn)) ); /* 送信バッファ空き待機 */ UCSRnB &= ~(1<<TXB8n); /* TXB8nを0に仮設定 */ if (data & 0x0100) UCSRnB |= (1<<TXB8n); /* 第9ビットをR17からTXB8nへ複写 */ UDRn = data; /* データ送信(送信開始) */ } 書き方しています? それとも定数でやってます?
そんな効率の悪いコーディングはしない。
俺には質問の意図そのものがわからんw 定数ってなんのことね?
決まった値しか送出しないんじゃね?
239 :
774ワット発電中さん :2013/07/18(木) 16:50:13.60 ID:KJZH2scJ
AVR studioの行番号の表示の仕方がわかりません ググって見たんですがでてきませんでした。。。
AtmelStudioなら、オプションから行番号にチェック入れるだけだが 古いソフトはわからんなぁ
241 :
774ワット発電中さん :2013/07/18(木) 17:08:22.35 ID:KJZH2scJ
>>240 AVR studioって古いソフトなんですか?知らずに使ってました。。。
文字をクリックすると右下にその行番号が表示されるんですが、常に表示できないかな
>>237 1 << UDREn とかが、実行時に計算されると思ってるんでしょ。
俺ならそのままにしておく。
それこそ逆アセ見りゃ分かるのにな ほんの数行じゃん
電源を切っても書き込んだプログラムが消えないようにしたいのですが、どのようにしたらいいですか? フラッシュROMに書き込めば消えないようですが、どうやってフラッシュROMに書き込めばいいかよく分からないです
むしろRAMで動かすのが無理
○rduino参考にすればよかよ
シミュレータで動かしてるのかな? AVRライタ(AVR ISP mark2など)を手に入れて AtmelStudio等から書き込めばいいんじゃね。 AVR Studio4しか使ってないので他のツールの場合は分からん。 (1) USBにAVR ISP mark2をつなぐ。 (2) AVR ISP mark2とAVRをつなぐ(RESET,VCC,GND,MISO,MOSI,SCKの6箇所) (3) AVR Studio4のメニューで tools>Program AVR>connectを選ぶ。 (4) ウィンドウが開くのでPlatformのAVR ISP mark2を選んでOK押す。 面倒になってきたので以下はぐぐってくれ。
Arduinoのスケッチの話だったらスレち
AT90CAN 用に移植された OSEK か AUTOSAR どこかにないかな?
秋月のHPをひさしぶりに見たら 8ピンのAttinyは10, 13しかないな AT90S2323は外部オシレータ必須という地雷だし 20ピンも2313と861しかない もう終わりなのか 861を買い溜めしておこうかな
861はシリアルないがな
2313はADCないがな
そこでxmegaですよ。 …DIPないがな
>>251 ArduinoISP使って
ArduinoIDEでプログラミングすると
SoftwareSerialが使えます
某サイトのSoft_I2Cを使うとI2Cも使い放題
2313と違ってADCがあるし、フラッシュメモリは8kもある
けっこう使いやすいですよ
どうしても両方欲しいなら88系あるしそういう話じゃないんだよな
非同期シリアルもI2Cも遅くていいなら実装は難しくないだろ。 I2Cのスレーブはちょっと面倒かな。
要するに秋月では「AVRは在庫整理商品」っていうことだ。 PIC派は喜んでるだろうな。
AVR でエアコン操作しようとリモコンコード調べてたら 264 ビットも送信しててわけわかめ とりあえず冷房1時間オフタイマーと電源オフだけコピーしたけど他を調べる気力がない 赤外線LEDチカチカさせるだけの簡単なお仕事のはずだったのに難しい
エアコンは学習リモコンでは無理なので、工作する意味がある貴重な分野だ メーカー間の互換性は無いだろうけど、一つのメーカー内なら同じ規格に なってる可能性が高いので、夏休みの自由研究として発表する価値がある
中華通販で買ったリモコンはエアコンも出来るよ。
>>258 以前、テレビのリモコン送信器用の受信器をAVRで作った時に
フォーマットその他を調べていたら、
あるエアコンメーカーの特許広告に
「誤動作防止の為にAGCが安定するまで受信ビットを捨てる」
なんてのがあった。
もしかしたら始めの何ビットかは使ってないのかも?
動作確認もしていないし、ウロ覚えだし、スマンけど。
18年前の日立のエアコンだけど リーダーコードと論理01は家電製品協会フォーマットに準じてて 先頭24ビットがメーカーコード? (8ビットデータ 反転8ビットデータ )×15 というところまでは調べた 運転種別(冷房、暖房、除湿、自動)とか 設定温度とか オフタイマー、オンタイマーとか 全部送信してる気がする
そのようにしないとリモコンと本体の状態が一致しなくなるからね。 うちの東芝のリモコンはボタンを放してから送信するようにできていて、 ボタンを押してすぐに向きを変えると取りこぼすんだよな。初心者が 設計したのか。
うちの携帯は、被写体をファインダーに入れて、シャッターのボタンを押して、 ビロリン♪て音が鳴り終わってから撮像を開始するので、大抵ブレている
>>263 モード切替や長押し、UP/DOWNキーの連打等で押すたびに送信すると不都合なキーは遅延送信
>>265 それは本体側で対応したほうがいいと思う
>>265 ボタンを離すたびに送信してるのを、ボタンを押すたびに一回送信すれば
いいだけだろ。
>>267 >>265 とは別人だが、ボタンを離す度に送信するのではなく、ボタンが押さ
れてから一定時間経過以内に別の操作がされなかった時に送信しているんだよ。
ソフトで構成したリトリガブルなワンショットタイマをボタンが押された時に
毎回トリガして、連続して操作された場合、タイマの延長だけで送信はしない。
最後の操作後にワンテンポ置いて1回だけ送信される。
電池消費を抑えるのと、連続データ部を誤って開始パターンと判定すること
による受信側の誤作動を防ぐため、規格で100ms程度のポーズ時間(無送信)
時間を置くことになっているので、一連の長いデータを毎回送信すると、
連続で送信するよりも早くボタン連打される。
送信中の連打を無視するとユーザにボタン操作が効かないと誤認され、送信
中の連打検出で送出を中断すると、受信側で前のコマンドが捨てられたり、
場合によっては誤認識されるので、ユーザにボタン操作が効かないとか、
誤作動すると思われる。
通信ってのは、常にエラーが起きる前提で設計する必要がある。
>>268 5秒間押しっぱなしにしても一度も送信されず、離してから送信されるのを
どう説明するの?
リモコンは東芝のWH-D5B。送信されたかどうかはデジカメで確認してる。
リモコンの仕様なんてそれぞれなんじゃない? 話変わるけどFreeRTOS使ってる人居る? ハード的な割り込みルーチンにコード書きすぎると別の割り込みとぶつかるのか変なアドレスで無限ループに陥る 仕方ないからコードの量を減らしてタスク側にウェイトを置いて回避してるんだけど、そもそもタイミング的な事でバグるのであればそのタイミングが発生する可能性が低くなっただけでバグ発生のリスクが消えてない この辺の仕様分かる人居ないかな
>>269 自分で考える能力がないのを棚に上げて逆切れされてもな。
こちとら、各社のリモコンを調べているわけでも、設計を請け負ってる
わけでもねぇからな。 ソリューションなんて1つじゃねぇんだよ。
なんかレベルの低いリモコン設計者らしき人が必死ですね。
>>269 リモコンが遠くて手元で操作しても送信できない時は、エアコンに向かってリモコンを持った手を伸ばしてから指を離す。
エアコンとリモコンの間に、ハイパワーの赤外線LEDと赤外線フォトトランジスタをつないだものを置いて中継させれば? 曲がり角に置けば見通せないところもOKかも。
鏡置けよw と言うのは半分冗談だが、俺の寝室ではテレビに向けてエアコンのリモコンを操作すると割と反応する。
送信しているタイミングはポータブルなAMラジオを近づけながらリモコン操作すると どのタイミングで送信しているのか位は判別できる。どんなコードを送っているのか迄は判るはずもないが、 単発/リピートコードなのか。送信するタイミング、リピートのタイミングなどはよくわかる。 別の話 眼球に向けてリモコンの赤外線を送信すると 意外とちゃんと届くもんだ。視線は受信させたい機器に向けておく。 民生用機器の赤外線リモコン程度の出力なら網膜損傷などの可能性は低いと思うが、 常用せず、確認程度にとどめておくことを推奨。
赤外線出てるか見るのは携帯かデジカメがデフォじゃね?
>>270 割り込みプライオリティの設定がおかしいとか、スタックぶっ壊してる
だけなんじゃないのかなあ?
RTOSで割り込み内に長い処理を入れないでイベント発行やセマフォ等の同期命令でタスクを起動させてタスクで長い処理をするのがセオリーだと想う。 じゃないとリアルタイム性が、、、、
勿論キューに放り込むような形にしてたんだけど、ADCなので割り込み頻度がかなり多い上に別のタスクでは20msec間隔で16bit変数同士の除算なんてさせてるものだからいっぱいいっぱいかも 取り敢えず割り込みではキューを使わずにADC値をグローバル変数に格納するだけにして、別にポーリング的なタスクを起こして処理させてる 割り込みはこれだけじゃなくて、5msec間隔でCANの送受信をしてて、これもまた面倒なことに不具合が起こるらしく、ラッパーを介して処理するとか面倒な事してる 除算部分をインラインアセンブラに置き換えたり色々やってるけど、8bitマイコンでは限界かも
これだからCしか出来ない奴はw 「いっぱいいっぱいかも」ってなんだよw ちゃんと各タスクの処理時間を計測して最大値を見積もれよ。
>>280 割り込みからのキュー操作は
xQueueSendFromISR
使ってる?
計測できるものならしてもらいたいくらいだわ デバッガーでコード追うのが精一杯で、精々各タスクの始めと終わりのブレイクポイントでCPUカウント数える程度のスキルしかない スキルとも言わないかも知れないけど マルチタスクをアセンブラレベルでってアセンブラコード読み書きできる程度じゃ無理だよね?
>>282 YES
その部分に関してはスタックのオーバーフローではない感じだったし、値のコピーのみで良しとしておくつもりです
ただ、タスクフリーズの原因が特定できてないので心配というか何というか
いくら除算命令持ってても、1命令に200クロック以上掛かって、9600bps 全二重のデータすら割り込みで拾えない8086に較べたら、8MHzや20MHzで もほとんどの命令が1クロックで動くAVRで、20ms周期で除算実行する くらいどうってことないと思うけどなァ。 通過ポイントでI/Oを叩くコードを追加して、ロジアナでタイミングでも 計ってみれば?
>>285 問題は速度もさながら、タスクのスタックが著しく消費されてしまうっぽい
てかFreeRTOSのスタックって何かの拍子に跳ね上がってオーバーフローしてくれるから本当に困る
>>286 割り込みルーチンで同じ割り込み受け付けるようになってない?
288 :
287 :2013/07/22(月) 22:35:49.12 ID:0CZ0Vw0d
よく見たら、意味不明だった。 割り込みルーチン実行中に、だな。
>>288 間隔的に同じ割り込みがかぶることはないと思うんだけど、一応該当部分をクリティカル領域に指定してもダメだった
>>283 俺が2313用に作ったマルチタスク処理は準備も含めて命令数十個だ。
裏の自家用の野菜畑に行くのにランドローバーは必要ないと思う。
積み荷の大きさを考えれば軽トラで十分だ。
そりゃ確かに軽トラではスキーや河原遊びには行けないけど、
大型車が通れるように道路を拡張する(大きなMCUに乗り換える)必要もない。
自分で作れば隅から隅まで把握できるので、不具合はすぐに対処できるし、
目的に応じて好きなように改造できる。
マルチタスクの構造を勉強し、
アセンブラが出来なければ勉強して出来るようになればいいだけ。
なんてエラそうな事を書いちゃったりして気に障ったらゴメンね。
早く動くようになるといいね、ガンバッテ下さい。
リエントラントくらいは知っているんだろうか。 組み込み用のOSなんてメモリー保護はないわ、下手すりゃ ライブラリまでリエントラントじゃないんだがな。 何も考えずに作ってそのままで動くとは思えん。
8ビットCPUでメモリ保護とかw ゆとりの弊害は恐ろしいな。
OS-9にはメモリ保護があったけどな。
294 :
287 :2013/07/23(火) 08:05:38.35 ID:/1TvT7Kn
メモリー保護もぴんきりだからなぁ 特定領域を書き込みできないようにするぐらいならやってたし
Failed to enter programming mode. ispEnterProgMode: Error status received: Got 0xc0, expected 0x00 AVRに書き込みをしようとしたらこのエラーが出て書き込めないのですが、 このエラーは何が原因ででるエラーなのでしょうか? ATmega2313、AVRISP mkII、AtmelStudio6を使っています。
ISPコネクタのピンアサイン間違ってるに1票
>>296 125kHzにしてもダメでした
>>297 ピンは間違っていないはずです。
もう長いこと色分けして全部覚えているのと、
データシートと何度か見比べたのですが
特に間違いはなさそうでした。
ちなみにDevice Programing→Memory→Programで書き込みをしようとすると
execution of command cancelled because of previous command failure
という表示がでます。
また、DeviceSignatureをReadしようとしても
読み込めませんでした。
そもそも書き込む以前の問題なのかもしれません・・・。
別の2313にしても同じなんですか?
メッセージ通りだよ。接続すらされてない。 情報が少なすぎるから誰も答えられないよ。 以前も「ピンアサインは間違ってない」といってた奴が ピンアサイン逆だったことがある。 一度接続してリセットピン無効にしたのかも知れんし、 シリアルプログラム無効にしてしまったのかも知れん。 内蔵クロック殺して水晶つけてないって落ちかも知れん。 色々思い当たりすぎて誰も答えられないんだよ。
接続されていないという事は、 ピンアサインを間違っているか、 接触の問題でしょうか。 新しい2313で試しても同様の症状です。 ブレッドボードを変えてみても同じ症状です。 ちなみに、ISPAVR mkIIのマイコン側のLED?が、 橙色で点滅しているのですが、 これは調べてみるとISPのファームウェアをアップデートしろという意味か、 リセットピンあたりに異常があるかも?みたいなサインらしいですが、 ISPのファームウェアはUp To Date状態なので最新のはずです。 リセットピンを無効にしたり、シリアルを無効にしたり、 内蔵クロックを殺すようなプログラムは書いてませんし、 AVRの設定を変えるようなこともしていません。 買ったまんまのAVRにISPを繋げて書き込もうとしています。 AVRもATtiny2313で、AtmelStudio上での設定も2313で間違いありませんし、 ISPの選択も間違っていません。 接触が悪いというのが一番可能性として濃厚でしょうか。。。
2313の基板にISPコネクタをつけるのがめんどくさくて、
2313そのものをつかむクリップにISPコネクタをつけて使ってたら、
あるとき以降
>>295 みたいなエラーが山ほど出て、
さんざんいじってみたもののエラーが消えず、
しょうがなくクリップを壊して、ブレッドボードで書き込んだら、
一発でうまくいって拍子抜けしたことがあった。
とりあえずライタ〜2313へのケーブルを新品にしてみるとかどうよ。
2313に電源入れてるか? リセットピンのプルアップ抵抗が低すぎないか? くどいがMISOとMOSIが逆とかではないか? このへんかな
そもそも、そのISPで今まで書き込んだことはあるのか? 買ったばかりで初めての書き込みなのか?
原因分かりました。。。
>>302 ライターから2313へのジャンプワイヤを一本ずつ変えていって、
RESETのジャンプワイヤーを変えたら直りました。
ブレッドボード側というよりも、ISP側のRESETの穴の接触が悪かったようです。
色々と助言いただきありがとうございました。
やっと進める・・・。
>>303 電源入ってました。リセットピンのプルアップはいつも2.2kΩにしています。
MISOとSCKとMOSIはどのAVRでも順番関係はだいたい同じで、
色で覚えつつデータシート確認してるので間違うことはあまりないのです。
>>304 いつも使ってるISPです。
ケーブルが断線してる可能性がある 適当にISPケーブル作って試そう
「dW/(RESET)線のプルアップ抵抗は10kΩよりも大きくなければなりません。」 データシート日本語翻訳版より抜粋
なんで小さくしがるのかな。 手持ちのせいか
>>308 ウォークマンの成功体験とかの影響では?
手持ちじゃなくて据え置きなら 多少大きくてもね。
作業服とか売ってる店?
商用電源の50/60Hzって、 クリップすればAVRの内蔵RCのキャリブレーションに使えるでしょうか?
↑内蔵RCの校正手段を安く上げようと思ったけど よく考えたら素直に水晶繋いだ方が安上がりな気がしてきた
分圧でなくてクリップなんだな・・・
attiny2313で、I2C接続のLCDを使えないかググっていたら
こんなのを見つけてしまった
I2C (master and slave) on the ATtiny85
http://playground.arduino.cc/Code/USIi2c arduinoの本家本元の記事かよ…
Modified LiquidCrystal_I2C for the ATtiny:
こんなものまで。
実験するのは明日にしよう
スレーブ側バグ抱えてるな 使い方によっては実害なさそうだが
>>315 おお、ナイスタイミング!
秋月のAQM0802という8x2のI2C小型LCDを
ArduinoISP+ArduinoIDE環境のAttiny861で動かそうとして
ここ2週間試行錯誤していたのです
某所のI2CLiquidCrystalというライブラリで、Arduino UNOを使って表示出来るのは確認しました
問題はWire.hのライブラリで動いている部分をAttiny861のUSIを使ったライブラリで置き換える事が出来るかでした
でもWire.h互換のライブラリが見つからず、非互換のUSI I2Cなライブラリを色々試してみましたが駄目でした
そのTinyWireM.hを今さっき組み込んで
I2CLiquidCrystal.cppの
Wire.を、TinyWireM.に
Wire.write()を、TinyWireM.send()に書き換えて
ArduinoISPで書きこむと、無事に動きました!
I2C の仕様書読めば実装できるだろ オシロは必須、プロトコルアナライザがあると楽ちん。
1284PのDIP、八潮に数個だけ残ってた。 それだけのために行く価値があるかは知らぬが、必要な奴は急ぐと良かろう
デジキーで好きなの買ったほうがマシ
attiny2313などのattiny系で システムクロックをINT0かINT1でカウントする方法はないでしょうか
2313ならヒューズでシステムクロック出力有効にすれば 出力ピンがそのままINT0入力だね。 でも1システムクロック毎に割り込みかかっても何も出来ないと思う。 1クロックで何をしろと・・・
>>321 周波数カウンターを作る場合に
普通は基準クロックを生成し、その1秒の間に信号を計数すると思うのですが
それだと1秒なり単位時間を計測するタイマー割り込みが必要になります
発想を変えて、信号を検出したらシステムクロックを計数し
もう一度信号を検出したら、その計数値を出力した上でカウンターをゼロに戻す
という風にすればタイマー不要になると思いました。
例えばシステムクロックが例えば8MHz、信号間のシステムクロック計数値60なら
両者を割れば、8MHz/60=0.1333kHzとか出るかなと思ったのです
これは計数する基準クロックをシステムクロックにしてるのですが
(それが内部で分周出来て計数できるのならその方が簡単ですが)
水晶振動子とインバータでシステムクロックよりも低い
1MHzの発振器を作り、それをINT0に入力するなどした方が
精度は出るのかもしれません
タイマーのキャプチャ機能使えばいいだけじゃないか。 考えた理屈はその通りなんだから後はデータシート読めばいい。 「タイマー割り込みがイヤ」「割ればいいかな」ってあたりが ハード屋っぽいなぁw
>>324 ああああ…
Timer1割り込みを動かした上で
INT0で立ち上がりを検出したら
TCNT1を0にして
次にINT0で立ち上がりを検出したら
TCNT1のカウント値を取り出し、クロックをそれで割ればいいんだ…
インプットキャプチャピンに信号入力して エッジ変化でその時点のシステムカウントを記録。 キャプチャ割り込み処理で記録したカウンタを取り込み、 前回の取り込みとの差分を割ればいい。 キャプチャ使わずにINTで処理してるとカウント取出しまでの 処理時間で誤差出るよ。キャプチャって何なのか調べなさいって。
>>326 これですか
1CES1:インプットキャプチャ エッジ選択
0:立ち下がり
1:立ち上がり
ここの設定に従ってインプットキャプチャがトリガされると、
タイマカウンタ値がインプットキャプチャレジスタ(ICR1)へコピーされる
※AVR.jpの和訳はキャプチャが「捕獲」になっていた
これで周波数カウント出来るとすればなんと簡単な…
んむ、わかっちまえば簡単でござんす。
一秒間に割り込みのかかった回数をカウントしたほうが精度良くね?
何の精度?
割り込み関数ISR( ... ){}の{}中で割り込みフラグをクリアしなくていいのでしょうか。 たとえば、ISR ( TIMER0_COMPA_vect ){}の{}の中で割り込みTIMSK0のOCIE0Aフラグをクリアするとか。
割り込みフラグはOCIE0AじゃなくOCF0A 割り込み関数に処理が移った時点でフラグはクリアされてるので気にしなくていい
割り込み処理に移っただけじゃクリアされないものもある ちゃんとデータシート読めよ
型番の話しか?w 「たとえば」TWI割り込みフラグはハードで自動クリアされない 「たとえば」レジスタ読み出しが自動クリア条件だったりするのもある 「たとえば」タイマー割り込みなら割り込みベクタ実行で自動クリアされる
MOSI,MISO,SCK,RESET等を通常のI/Oポートとして使いたいのですが、 その場合どのように使えばいいですか? また完成後もソフトの書き換えも行う予定です
パラレルライタ使うしかないね。 RESETまでポートとして使われるとシリアルプログラミングであるISPは絶対無理。
使ったことないけどブートローダー機能はどうよ?
いつかどこかのサイトでROMエミュレータ式シリアルライタというものが紹介されていた。 ISPに必要なリセット、I/Oをプログラミング時にハードで自動で切り替えるので、 回路を設計する時に、これらの信号に何の配慮も必要としないと書いてあったけど、 ターゲット側にICソケット必須ということで、私の用途ではXだった。
デバイスによるなTiny系はブート領域無いし。 てか、質問の内容から察してブートローダとかハードル高いわな。
例えばスイッチやジャンパーピンをMISO,MOSI,SCKとGND間に割り当てる スイッチ・オフ状態では空きピンと同じことになる
重ねて言うけどRESETピンだけ例外な
Tyniy861でUSIを使ったTWIでは MOSIとSDA SCKとSCL が同じピンだけど、両方さしたままで ArduinoISPからの書き込みと I2C液晶の表示が出来た
秋月で売ってるattiny2313はセラロックの16MHz動作時に3.3Vでも問題無いでしょうか?
つデータシート
データシート見ると13.3MHzが上限なんですけど 使用するI2C液晶が3.3Vなので合わせたいのです
危ぶめば道はナスダック! 逝けばわかるさ!
>>350 液晶が3.3Vだからといって、attiny2313が頑張ってくれると思うのか?
なお、p-MOS と書いてあるけど n-MOS ですから。
やってみればいいじゃん動くかもよ。
358 :
356 :2013/08/13(火) 08:17:03.66 ID:UUpmgNAU
専用 IC といっても、どう考えても中身は MOSFET でしょう。それなら 汎用の MOSFET を買っておいて他にも使い回しをしたらいいんじゃないかと。
なんでI2C如きにFETだのICだのが必要なんだ?
attiny2313 って入力トレラントだろ? I2Cの2線を3.3Vにプルアップしとけば、それだけで問題ないだろ
3,3Vにプルアップするんだから、トレラントの必要も無い。
トレラントというか、H/Lの判定の閾値が3.3V以下だよね、って意味で
366 :
356 :2013/08/13(火) 11:23:44.76 ID:UUpmgNAU
まぁ、たしかに V_IH は 0.6VDD だから 3V かかれば H と判定しますね。
オープンドレインなんだから 絶対定格さえ超えなければ、電圧はアバウトでいいじゃんね
夏だね
一応 High が保証されている電圧は 0.7VCC 〜 VCC+0.5 だから 3.5V 以上欲しいでしょ
VCC(2.4V〜) だと 0.6VCC 以上だった 3.0V あればいけるようだ 0.7VCC 以上は VCC(1.8V〜2.4V) のとき
普通にレベルシフターでやれよ。 そんなに手間じゃないだろ。
趣味ならやりたいようにやれば良いw 変換IC買えば同じ事で悩む事もないけど、 回路組んで解決するのもまた楽しいと思う。
直結で逝けるのに、意味も分からず、わざわざ部品を追加するとか ド素人としか言い様が無いなw
>373 マージンが変わるんじゃないか? LCDとMCUの資料を調べてないけど。
>>373 すげー、I2C液晶の型番も判らないのに断言できるとは玄人様はさすがですね!(w
>>377 当たり前。誰だと思ってるんだよ。
お前も沢山、勉強してレベルアップしろよ。
3.3V←→5V 程度ならプルアップを低い側にあわせて桶 1.8V←→5V とかだとレベルコンバータかませたほうが安心
attiny2313ってI2Cの液晶を動かせるほど、フラッシュメモリに余裕はないと思うんだけど arduino.cc謹製のライブラリTinyWireMとI2C用のLiquidCrystalライブラリを組みこむと3kB越えてた
できあいのクソでかいライブラリを使ってない俺は2313で十分液晶使えてる
なんでI2Cにフラッシュが要るんだよ
通信自体にはそんなにいらんけど、フォントとかその周辺で結構食ってるんじゃないの?(勝手な憶測)
たぶんarduinoISPで書きこむとarduinoのライブラリも書きこまれるのかも
385 :
774ワット発電中さん :2013/08/16(金) 01:51:34.03 ID:z7iR8sm+
高輝度赤外線LEDを使ってエアノンのスイッチを作ったんだけど、 純正のリモコンに比べてエアコンに向ける角度がシビアです。 拡散帽子を付けたらつけたで赤外線が弱くなってる気がします。 赤外線LEDに流れる電流値が小さいからでしょうか? しかし、大きくしようとも、抵抗を付けずに直で赤外線LED繋げてるので、 これ以上の電流を流す事もできません。 こういう場合って何かいい方法ありますか?
>>385 適正電流を守らないとLEDちゃんと光らないよん
そのマイコンが何mA流せるのか知らないけど
トランジスタ1個ぐらいおごってやろうよ
C1815で十分だから
高輝度じゃない LED しかなくても半値角がより広いものに替える、というのも手かも。 拡散帽子は、さすがに広がりすぎでしょう。
LEDの先端のRを大きく研磨する。好きな放射角に出来るぞ
>>385 変調周波数がずれている可能性は?
輝度高くしても受光モジュール側のピーク範囲をずれているとなかなか拾ってくれない事があったよ。
周波数ってCRで決めてるの?
>>385 ポートにLED直付けすると、ポートが壊れる気がする。
単純にTr付けるのが正解だろうな マイコンにとってLEDは電気食いで、普通はドライバを付ける でも、インジケータ程度なら繋げられるように電流量増やしてあるのもあるけど、 明るく光らせるのは無理
ここはAVRスレなんだからAVRなんだろう。 ならば絶対最大は40mA、常識的制限なら20mAだろうから 赤外線LEDフルパワーにはちょいと厳しいよな。 もちろん直結なんて論外と言いたいが、まぁ遊びならねw 売り物のキットでも直結なのあるし・・・
>赤外線LEDに流れる電流値が小さいからでしょうか? 左様です。たっぷり流さないといけません。
赤外線が見えればいいんだろうけど、フツーの人は見えないからなあ。 直接駆動とトランジスター駆動、デジカメで撮影して比べてみるとかしないと、実感沸かないよね。
て言うか、まずテスター買ってきて電流測定しなよ、って思うのは俺だけ?
だろうね。
電流計じゃソウルで理解できねえんだよゥ! …ごめんなさい、言い過ぎましたわ。
CRD入れて電圧をもっと上げればいい
CRDを大量に並列にすると、乾電池からでも大電流が引き出せる
何個くらい並列にすると原発位の電流が取り出せますか?
3歳児の疑問にも答えられないド素人乙
昔、俺がガキだった頃、お電気のお勉強のお時間に、先生が 「E=IRの理想的電源Eは全宇宙で必要としている電流も供給できます」 と言ったことを思い出した。
愛ある限り戦いましょう。命、燃え尽きるまで。
PCINTでPort Bの複数PINの変化を割り込みで検出したいのですが 例えば同時に複数のPort B PINが変化した場合、変化したPortの数分だけ PCINT割り込みが入るという認識であってますか?
一回だけだったと思うよ。 割り込みがあったときどうせ対象ピン全部チェックすることになるのだから、 複数回割り込まれても意味ないでしょ。
xmega c4のデータシート(Rev.D)見てるんだが、P52-53のportCのAlternateFunctionsの表って正しいのか? XCK0は無いわ、RxD2,TxD3なんて物があるわ、他のxmegaや他のポートと比べて配置が不自然きまわりないわで 怪しいことこの上ないのだが…
USARTC0はページまたぎによるテーブルずれかもしれないが USARTC1はRXD1とTXD1の書き間違いだなw 本家に報告入れといてくれ、俺英語はリードオンリーなんで・・・
XMega の情報少なすぎて泣いた
初めて触るのがXmegaじゃなければAVR.jpの和訳で十分じゃないの? 俺はそれでXmegaAとXmegaDを使えとる。
>>410 奇遇だな。俺も英語はリードオンリーなんだ。
上の方でtiny861でレシプロカルな周波数カウンターを 作っていると書き込みしていたものですが だいたい完成して、ウィーンブリッジ発振回路で簡単な周波数源を作って (残念ながら矩形波しか出てないようです) 測定した範囲では動いているように見えるので 内蔵のRCの8MHzから、セラロックの16MHzに挿しかえると 全くカウント出来なくなりました、パルスを検出できないようです 74HC14でプリアンプしてみても駄目でした tiny861自体はちゃんと16MHzで動いていて I2C液晶への表示も出来てます 試してないのですがインプットキャプチャの 雑音除去器(ICNC0)をenableにすればいいのでしょうか? それで、周波数源がおかしいのかもと555を買って発振回路を作り その発振周波数を測ってみました、こちらは何もしなくても測れました 10MHzの水晶発振器を内蔵したテスターの周波数カウンター機能を使って測定してみると attinyが400Hzに対してテスターが402Hzでした セラロックで0.5%も周波数がずれるなんて事がありえるでしょうか? それと、周波数を下げて200Hzに近付けると、液晶に表示している周波数が大きくなりました レシプロカルなカウント値を見ていると、5桁から急に3桁に飛んでました これはインプットキャプチャカウンタの65535を越えたということのようです これの一般的な対処法は、分周器の設定CS2, CS1, CS0を 分周無しから、8分周や64分周にするみたいなものでしょうか? それとも16ビットカウンターの桁上がりのフラグがどこかにあり、それを見るのでしょうか?
>>415 ああ、セラロックってけっこうあれなんですね
内蔵RCよりはましだし、校正すればいいのだろうか
たぶん表示クロックに対する絶対値がズレてるのだと思う
今のところはあえて水晶振動子は使わずに
16.000000MHzの部分を校正してみることにします
雑音除去器をenableにしてみましたが無関係でした
不思議です
16bitカウンタがオーバーする事に関しては
CS2, CS1, CS0を001の分周無しから、010の8分周にする事でなんとかなりました
ただし、これだと高周波では分周無し、低周波では分周有りの2モードを作る必要があるので
できればそのようなOVFフラグを見て、モード切り替え無しである程度範囲を
カウントできるようにしてみたいです
>>416 >たぶん表示クロックに対する絶対値がズレてるのだと思う
ド素人だからしょうがないのかも試練が
またいい加減なwww
外部クロックでCPUを動かし、そのクロックを測定してみれば
クロックの絶対値を気にせずデバッグ出来るぞ。
>>416 > 水晶振動子は使わずに16.000000MHzの部分を校正
「何事も経験!!」な人なら悪くは無いんだけどさ…。
・セラロックはQ値が低いので、負荷容量/浮遊容量によってコロッコロ周波数が変わる。ブレッドボード上なら安定が期待出来ない。
・温度特性も±200ppm。初期偏差±500ppmに対して結構デカイ。
・経年変化も同じくらいある。
・DIP型のセラロックは粉体外装。つまり完全に密閉されておらず、湿気の影響も受ける。
・合わせると最悪±2000ppm位覚悟すべし。
校正してどうなるものでないよ。やって見て、しばらく放置しておけば解ると思うけど。
それに同じ値段で水晶が買えるし。
http://akizukidenshi.com/catalog/g/gP-00545/
>>418 昨日、インプットキャプチャーで計算した発振器のパルス間のカウント数と
参照周波数カウンタの周波数から、16127000Hzの校正周波数を出して
それで周波数カウントしてみると4桁まで合ったので、これで様子見です
最初から0.79%もずれてるのが驚きなんですけど
これで温度変化などで変わるのであれば素直に水晶振動子をつけます
元々はXR2206のキットも買ってチープなファンクションジェネレータを
作るためのものなので、そんなに精度はいらないのですが3桁で合わないのはつらい
もともと精度要らない部分用だからなあ
負け惜しみw
踏み出せば その一歩が道となり 踏み出せば その一歩が道となる 迷わず行けよ 行けばわかるさ!
>>418 安定が期待出来ない。
これは私も経験した。
私の勉強不足で、最初は原因が分からなくて悩んでしまった。
水晶を使う時、コンデンサと組み合わせて配線するのが面倒だったり、
MCUから少し離れて配置したい、他のICとクロックを共通にしたい、などの場合に
金石(京セラ・キンセキ)の3端子型の発振器JXO5Sシリーズが小型なので便利に使っていた。
残念ながら製造中止になり、今や流通在庫のみになってしまった。
http://www.nex-nex.co.jp/page033.html
424 :
774ワット発電中さん :2013/08/25(日) 21:47:20.49 ID:DezN90Zj
86年製w スペースシャトルが現役だったら、NASA職員がうれし涙流して買い占めに来るだろうなw
>>420 本当に精度が要らないなら、水晶の代わりにLCつないでおけばいい。
そういえば、前にバラしたプロスペックの 画像安定化装置の基板には PICマイコン用にセラロックがついていた 垂直同期信号は、コンポジット信号から取りだすので PICマイコンの周波数はセラロックで十分だったのだろう
そのAVRで画像を処理するわけじゃないだろうし
429 :
774ワット発電中さん :2013/08/26(月) 12:11:31.23 ID:52H//ehX
>>424 近所住みなら無駄に買い占めたいZ80
実際は使わないんだろうけどw
>>430 ソフトウェアそのものを目的として活動する企業のQCを、
ソフトウェア開発による学習や研究を目的としているとこに
持ち込もうとか、ずいぶん空気読めない奴だなぁ
と思ってたら、最後の方… アスペやん。
つか、なんで他人にやらせるんだか。
手法変えて、オブジェクトサイズが増えた/減った とか、
コーディングがし易くなった/しにくくなった とか、
実行速度が速くなった/遅くなった とか、自分で評価して
持ち込めばいいのに。
赤字の奴が、自身が実機とプログラムに向き合ってないのが全ての原因
と、悟るのは何時なんだか…
>>430 >DIP で入手できる AVR マイコンも限られる時代となり、ISP 方式
>しか使えないことも増加しています。
だから秋月で取り扱ってるattinyが
10, 13, 2313, 861だけになったのか
他店で細々と売ってるのは流通在庫かな
I2Cのデバイスが増えてる気がするんだけど、逆行してる感じが・・
434 :
774ワット発電中さん :2013/08/26(月) 20:55:02.24 ID:P/cw1uG+
> 偉そうなことを言っていますが、私はマイコンでの実装2作目のド素人です。 > でも機能においては同業の追従を許さないものとなったのではないでしょうか。 すげぇな。 底辺ドカタの自信が。
時代はCAN
I2Cは手軽で便利なのよん。
ばんとさんがもっとレス付けて切れさせれば面白いのにと思っちゃった のは俺だけか
>>433 I2Cと言えば、秋月とストリナで売ってる8x2行の小型I2C-LCD
秋月のピッチ変換基板に、ストリナのバックライト付きを付けたら動いたよ
基板にバックライト用の端子を通す穴を2mmのドリルであける必要があったけど
バックライト付きの方が、バックライト無しでも文字がはっきりして見やすい
>>438 多分同じ物で基盤付きをスイッチサイエンスで買いました、
深く考えずに取りあえず買ったんですがライブラリとかどれを使用されました?
よければ教えてください。
>>439 ここの上の方であがってたattiny用のUSI使ったarduino.cc純正I2CライブラリのTinyWireM.hと
LCDのライブラリはI2CLiquidCrystal.hだったかな。これはArduinoのWire.h用なので書き換える必要があった。
最初、attiny2313ではメモリが足りなくて、attiny85で動いた
RAMから読み出して書き戻すだけで4ワード8バイトも食うからあっという間にメモリ不足 Y+qで全部届くのになんで使ってくれないんだか
442 :
774ワット発電中さん :2013/08/27(火) 13:20:44.03 ID:xR5susse
気に入らないなら自分でCPU創るしかないな
自分でコンパイラ修正する手もあるし、 アセンブラでサブルーチン作る手もある。
自分でコンパイラを作る手もある。
むしろ内蔵SRAM読んで書き戻す(LDS/STS)だけで4clk(xmegaなら5clk)かかるのが時に重く感じるし、 Flashはクロック当たり2byte読めるんだからLPMW作っといてもバチ当たらんだろうにと思うし、 xmega読みだしより書き込みの方が何で速いんだよとも思う。
HDDでもメモリでも、書き込みが早いのは当然だと思うが?
基本的にAVRはRISCで命令コード空間が16ビットしかないから、 設計者が色々と悩んだあげくの命令の割り振りだと思うよ。 AVRを初めて見た時の私の印象は「16ビット長なのに命令の種類が多いな」だった。 使っていれば「XXな命令があればなぁ」と思う場面もあるし、 特にメモリアクセスのアドレッシングが少ないなとも思うけど、 それはトレードオフで仕方がない。
>>433 フィリップスの特許が切れたから っていうのもあるな。
回路簡単だし、コスト安いし、実用的な速度でるし。
449 :
774ワット発電中さん :2013/08/27(火) 22:55:23.91 ID:ZDzAkffF
I/Oピンのオフ時の電圧が高いんですが仕様ですか? ATMEGA88PAでLEDをつなげてるピンの出力を0にしても暗く光ってるので 電圧を測ってると1.7Vもあって無負荷時は5Vもあったんですが、仕様でしょうか? TINY88PUで試しても同じでした。これじゃLED駆動できない・・・
出力0のつもりが、実は入力プルアップにしてたとかじゃないよね
>>445 > xmega読みだしより書き込みの方が何で速いんだよとも思う。
簡単な事だ。
書き込みは、アドレスとデータを同時に投げればメモリコントローラがなんとかしてくれる。
しかし読み出しは、アドレスを投げ、メモリコントローラがデータを読み出す手続きをし、それを返送するステップを踏む。
だからどうしても読み出しは遅くなる。
>>450 それが正解だろうな。
PORT=1のままDIR=0にして入力プルアップモードになってるオチ
川鉄のKC80でも内蔵RAMは1クロックでアクセスできたのに 初めて90S2313触ったときになんでだよとは思ったなぁ
>>451 それは、mega/tinyはLDSが2clk(tiny4/5/9/10なら1clk)で読めている以上妥当な主張とは思えない。
tiny10シリーズのLDSは内部的にIN命令じゃないか? 余計なロジック無いんでしょ
tiny10については命令長が1word(他は2word)だからなのだろうと思う。
457 :
774ワット発電中さん :2013/08/28(水) 00:36:07.31 ID:U0NXxTq+
>>450 ご名答です・・・うっかりしました。
ありがとうございます。
>>457 テスターの電圧レンジが20kΩくらいだと使いにくくない?
AVR Studio, GCCでタイマー割り込みをつかったプログラムを書いています。 ====================================== #include<avr/io.h> #include <avr/interrupt.h> char x; unsigned char i=0; ISR(TIMER0_COMPA_vect) { PORTB = 0b11111111; か、 PORTB = x; } int main(void) { TCCR0A = 0b00000010; TCCR0B = 0b00000011; OCR0A = 78; TIMSK0 = 0b0000010; DDRB = 0b11111111; sei(); while(1){ x = 0b11111111; } } ====================================== というコードで、ISR(TIMER0_COMPA_vect)の中を PORTB = 0b11111111; にすればちゃんと、値が代入されるのですが、 PORTB = x; にすると、代入されません(PORTBにはLEDをつなげています)なぜでしょうか・・・ お願いします。
>>461 char x;
を
volatile uint8_t x;
に変えるとうまくいきました!ありがとうございます。
>>430 キレルのどうでも良いが、話の中身はいいんじゃね?
組み込みではStateとStrategyパターンぐらいしか使わんが、仮想関数を使ってとか事大で物事考えてるな w
関数ポインターでの簡易継承を知らんようだ。
おそらく、組み込みでのStateとStrategyの相違点やキーポイントもわかっていないだろう きっと。
いけね。 仮想関数テーブルを使ってとか事大でxxx
volatileなんてAVRとか以前の言語の問題なんだしキリがないぞ staticまで説明せにゃならんのか?
>>454 アクセスサイクル83nsの石が1clkで読めるのは当たり前。
ネットに転がってるタイマ割り込みを使ったプログラムを見ると
普通にグローバルやstaticで変数を定義してるのを見ますが
.
>>459 のプログラムがvolatile使わないと思ったように動かないのは何が問題なんでしょうか?
-O0で最適化をオフにすればちゃんと動くと思う
>>469 だから、サンプルコードだけじゃなくてFAQを
ちゃんと読め。理由も丁寧に書いてある。
定番きたな・・・読まない調べない・・・
もう夏もおわりか〜
>>460 のページには最適化がどうのとか書いてないし流石に英語のサイト全部読んでから書き込めってのは無理でしょ
volatileでググれば日本語で山のように説明見つかるよな
>>475 しょっぱなに書いてあるじゃん
When using the optimizer,
>>469 volatileが無い状態で最適化されるとwhile(1)の中の動作は
「メモリのxをレジスタにコピーして、レジスタの値を無限に出力」
割り込みでメモリが書き換えられても二度とメモリ読みに行かないので出力が変わらない。
volatileがあると毎回メモリから読み出すので意図した動作になる。
やさしすぎって怒らないでねみんなw
>>476 volatileがわからんのにどうやってググるんだよ
volatile付けたら何でちゃんと動くの?ってのが469の質問なんだからググれるよな?
>>478 なんで説明しなきゃいかんのだw
そもそも、クロック数はアクセスサイクル83nsとは関係ない。
ディジタル回路なんだから、設計したクロック数で動くだけ。極当たり前の話だl。
アクセスサイクルは、プロセスルールで決まる。
483 :
774ワット発電中さん :2013/08/29(木) 12:05:16.03 ID:ZhROYvT6
>>482 おまw 説明になってねーよw
それはデジタル回路には違いないが、同期式回路だw
クロックで打たない非同期式回路も立派なデジタル回路だぜ?www
そういうのが組み込みCで?になるのかなって
特に「言語」から入ってきた人は苦労すんじゃね
今のマイコンて個人的にはASICだとおもてる
内蔵IFすべて「割込み」で見るのきついお
http://uni.2ch.net/test/read.cgi/denki/1325875159/110 なんだとおもうの(おいらじゃない)
「明示」とかは言語の作法の話っていうのかな
それを知った先にあるのはブロック図・データシートと格闘
もうばらしたいけどSoC化と相反するというジレンマ
マイコンで行くなら規模関係なくARMぶんまわしなんじゃね
しらんけど長文スマソ
長文はいいけど 日本語でたのむ
>>486 てにをはの使い方勉強中です
想像力を駆使して頂き赤ペン添削
お願いします(他力本願)
それはともかく「ググる」って行為
>>462 さんは想像だけど、「これからの人」な気がする。
その人がググっても動いた理由まではよくわからないんじゃね
おまえらは「マイコン」って、CPUボードでシステムバスがあって
ピンに対してレジスタアクセスは周辺バス割り当てIO空間だとか
知ってるからでしょ
多くの場合「言葉」で検索すると、そこには触れてない
じゃあどうすんだよ?調べないの?とか言われると困るけど
タマゴニワトリでいいよね(無責任)
>>484 同期式だろうと、そうでなかろうと、設計したクロック数で動くことに変わりは無いがw
ヤバいおもしれえw コアな話さっぱろわからんけど わざとやってるだろw モノの視点変えるって、自分にしっくりくるのを 選べるから勉強になる
どっちかの人は通信から見た同期・非同期 どっちかの人は周波数からラッチ・マージン そんな感じ?
>>489 おいおい、非同期式回路にクロックはねーよw
しかし、
>>482 > アクセスサイクルは、プロセスルールで決まる。
これを書きながらなんで「クロックで決まる」てな結論になるんだ?
答えは簡単、83nsよりアクセスサイクルが短いだけなのにさ。
逆にアクセスサイクルが長かったらどうなるか?
書き込みよりも読み出しのレイテンシーが無視できなくなる。
それだけのこと
前にセラロックについて相談したものですが、毎日校正してもどんどん狂うので 先日秋月に行って20MHzの水晶発信器が10個300円だったのでよく考えずに買ってきました。 で開けてみると、表面実装用でした orz 返品するのは格好悪いので、薄型のユニバーサル基板を万能ハサミで4x3穴分だけ切り取り、 細ピンヘッダを3ピン分を2個用意しピンヘッダの短い方を基板から頭を出すぎりぎりまで切った上ではんだ付けし ●●● ○○○ ○○○ ●●● ※この●部分 水晶発振器を4端子をピンヘッダの1-3-4-6部分にはんだ付けして、8ピンソケットに挿して クロック出力をAttiny861のXTAL1につなげて、ヒューズ書き換えてArduinoISPでプログラムを書き込んだら 何のエラーも出ませんでしたが、I2C液晶が映りませんでした TinyWireM.cppと.hを見るとクロックが8MHzになってたので、20MHzにして再度プログラムを書き込むと I2C液晶に周波数が表示されました。でもテスターとは微妙に一致しない。 秋月が叩き売りしていた安物だからかテスターが変なのか ひと手間かかりましたがセラロックより良さそうです 余ったXTAL2端子って他の用途に使っていいのでしょうか
>>493 >>418 だけど、いい経験になったでしょ?
発振回路はアナログ回路。
初期偏差だけではないのさ
>>494 周波数カウンターやパルスカウンターにセラロックは×なのはわかりました
聞いた話によれば高速なRS-232通信でもセラロックではきびしいとか
16MHzのセラロックが10個ぐらい余ってますが
あんまりシビアじゃない用途に使おうと思います
これで安心してファンクションジェネレータを組めます
>>495 > これで安心してファンクションジェネレータを組めます
俺の試行錯誤は300円かよ、と思うか、
300円で面白い経験ができた、と思うか、どっち?
見てた俺は300円すら払ってない後者なんだけどw
シリアル通信は、高速でも低速でも誤差は同じジャマイカン
>>493 XTAL端子って外部クロック使う限り余っても転用出来なかった気が。
解決してよかた
ただ何目的の何作ろうとしてるのかよくわからんけど
マイコン側で「カウント数えるよ」方式でやってると苦労したワリに変わらんw
いつくるかわからないものだから1パルス拾う・拾わないがデカい
キャプチャ・カウンタぐるぐる回したところでやっぱり同じ
>>497 だから…
「幅」で見てみれ地味だけど、ワロタになる
それはクロックソースの振舞いそのものであり、得るのも出すのもそうなる
れーてんいくつとなんちゃらppmとか値しか見てないけど
それ300円で出来ちゃったらテクトロ潰れるからやめてあげて!!
だんだん意味不明になってきた
>>493 ヒューズビットのCKSEL[3:0]が 0b0000 なら PB5 は普通に使えるよ
とデータシートに書いてある
おれも意味不明なんだ…すまん これが解決になってるのかよくわからん 「使い方」の前に聞くことあんじゃね
>>493 セラロックと水晶の違いをしっかり勉強できたんだから良かったじゃないか。
誤差とか、温度変化とか手に入れた知識に比べれば、
セラロック代なんて安いもんだよ。
それに 495 に書いているように、用途によってはセラックで十分だし。
FGガンバッテね!
>>502 あまり自分の世界にひたって「俺流」で書かかれると理解が困難になる。
自分でも意味不明なら、いわんや他人おや。
見せパンツなら構わんけどさ。
…などと書くと私も同じになっちゃうね。
>>495 セラロックでも、
1. 粉体外装でなく、セラミックパッケージを選ぶ。
2. 負荷容量無しの2端子品にする。
3. 負荷容量と周波数の相関を、コンデンサを取り替えながら確認
4. その変化を打ち消す温度特性を持つコンデンサを探しだす。
5. 基板には周波数の微調整の為に、予備コンデンサのパッドを設ける。
てなことをすれば、結構追い込めるけどね。
水晶が安くなった今は
苦労してはるなあ
コンデンサ内蔵3端子水晶発振子ってなんで存在しないのかな、 あれば便利なのに。
発振回路内蔵水晶発振子使えばいいじゃん
小型の3端子発振器も使ってるけど値段が少し高い。
>>507 負荷容量内蔵のマイコン使えばいいじゃない
AVRが好きだから、C内蔵とAVRの2者択一ならAVRを選びたい。
秋月で扱い減った、何てこった。
>>492 >おいおい、非同期式回路にクロックはねーよw
息を吐くように嘘を吐くなよ。あ、ほんとに知らないのかw
非同期式回路だろうと、クロックがあっても全然問題ない。
ま、その辺が理解出来て無いから、他の書込みも滅茶苦茶で無意味w
今時の回路は、同期と非同期の混合が普通だけどな。
夏休みも最終日…ってかw
516 :
774ワット発電中さん :2013/08/31(土) 23:45:50.82 ID:p5fKKvKv
2ちゃんの最終日でもある
最終日ってなんの話だ?
>>503 俺流押しつけてるよ、思いっきり出してる
そして自らツッコミしてる
勉強嫌いでバカだから教科書嫌い
いかに楽して目的・結果を満たすか
こういうのやる奴ってそうじゃないの
ビビってなにも出さない奴はいらないと思う
理解不能?そもそもすべてに精通するなど無理
「選択」すればいい。選択肢はたくさんある
それはおまえら一人一人が持ってる「俺流」
519 :
【凶】 :2013/09/01(日) 09:30:33.83 ID:IZypjupG
!omikuji
>>507 ないのは、半固定コンで調整する人がいるからかも。
RC(ラジコン)やってるけどここ1年でAVRのATmegaを組み込みに使った製品がもの凄く増えてるよ ある意味AVRコアが様々な製品の開発のスタンダードになりつつある感じ、 それで自分も開発してみたいと電子関係は素人だけどAVRプログラムを始めた。 素人考えだけど既に成熟して競争相手も居ないので新製品の要求って少ないんじゃないの?
客からの要望があまり無いと言う事だな。 RCなんて数で言ったら微々たるもんだから、RCに使えるチップを使う側が選択するだけで そもそも、RCなら大抵のチップは使える。 製品にバリエーションが無いって事は、市場にあまり出回ってないか、よっぽど高機能って事だろうけど 後者は無いな。
ラジコンのヘリとか農薬散布に実用にしてるし、 ラジコンの船とかも遠くまで探査に行かせて自動で戻ってきたり、 普通にSFみたいなことが実現してる アイディアだけで簡単に軍事に転用できる世界
>>523 > よっぽど高機能って事だろうけど 後者は無いな。
素人だけど高機能だと思うよ、
いま3g程度のAVRを使用した制御モジュールでGPSや各種センサを駆使して指定したとおりに飛んでかえってくるRCマルチコプタが流行ってる、
改造ファームもAVRの機器でそのま流し込めるので凄く便利、
あと送信機なんかもAVRが入っててISP端子もついてる、これもカスタムファームが開発されてる
どれも今まではブラックボックス化されててユーザーの介入はかなり困難だったけど
AVRベースになって凄く世界が広がってる、
電子機器のことはよく解らないけど今までは出来なかったわけだからコストを含めて高性能って事じゃないんだろうか?
>>525 ド素人だから判らないのかもしれないけど
GPSを実現してるのはAVRじゃ無いだろ。GPSモジュールからシリアルで位置情報を取得してるだけ。
その他のセンサにしたって、似たり寄ったりで、AVRじゃないと出来ないって事は無い。
お前さんが言ってる「高機能」ってのは、全てソフトが実現してるだけだから、AVRだろうとPICだろうと関係ないんだよ。
>>523 が言ってる「高機能」ってのは、周辺IOの事。
多分、自分で設計してプログラムも書けるようになったら理解出来ると思う。
くだらない揚げ足とりするなよ。
揚げ足じゃ無いだろ。日本語が理解出来ないのか?
何を言いたいのかは理解できないけど、偉そうにしたいんだなということは伝わった
理解できないなら仕方が無い。学校じゃあるまいし、手取り足取り教えてもらえる所じゃ無いしな。
企業規模の話だが、8bitマイコンのシェアではルネサス、マイクロチップ、アトメルの順で AVRが衰える気配は無いと思う。数年前までは5位程度だった。 マイクロコントローラーディビジョン全体での売り上げはこの5年で2倍以上となってるし、 digikeyでもかなりの売り上げがあるらしいし、しばらく心配ないんじゃないのか? 日本で流行らないのは日本のアマチュア層に媚びる宣伝活動してないからでしょ。
>>526 GPS付の誘導装置の部類だから輸出規制になるが、しょぼいCPUならおもちゃとして認められる
アトメルのシェアが大きいのは、スマホ用が大きいんじゃないかな。 つまり、一過性の物って事だな。 タッチパネルには良いかもしれんが、普通に色々制御したいならAVRは向いてない。 市場は細分化さrてるから、戦艦大和が一石では多様な用途に使えない。 遊びで使うなら何でも良いけどね。 それにしたって、最近は色々な遊びが出来る様になってきたから、今のラインナップじゃ厳しいな。
>>532 GPSは、それこそソフトがメインだから、マイコンだけじゃGPSにならないよ。
トラ技のいつだかで売れ筋ランクとか特集やってたじゃん 8bitマイコン部門ではQFPのmega328がトップだったよ 対象はデジキーだったかな? 実質世界で一番多く使われてんじゃね プロ・アマしらんけどバランスいい
>>531 はじめて使うとき「ソフト」でポート反転ぶんまわす
理由はシステムバスとI/Oどんな感じかみたいから
DIPのだったけど
自身のクロック(/2)でこんなきれいな
矩形波出すのwwwがんばるのwwww
200円ちょいでこれとか鼻水でた
>>533 8ビットマイコンのシェアの話だ。スマホが8ビットAVRで動いてるのかね?
俺にはラインナップとして何が弱いのか分からない
xmegaは相当多機能だがなぁ
>>536 最速で綺麗な矩形波なら、CPUが遅いかオシロが安物かのどちらか。
>>537 次はxmegaだ!
とおもて買いこみモタモタ模索してたら
次々いろんなものにすっとばされててワロ…
微妙というかはがゆいというか、結局CPLDブリッジなんぞこれ
だれか有効活用おしえて…
youtubeで動画見てたらatmelのCM入って萌えた
>>543 見たいwwww
今のまるもじロゴ萌える
Lんとこ
残念ながらスマホのタッチパネルコントローラとしてのシェア%は一桁なのだ Q-Touchソリューションはスマートフォンではあまり受け入れられていない。 もちろんメインのコントローラとしても受け入れられていないので、 マイクロコントローラディビジョンのシェアアップの要因とは考えにくい。 もちろん売り上げ増加そのものについてはスマートフォン景気による部分もあるだろうが、 そうなるとここ数年伸び率の低いマイクロチップには皮肉な話ではある。 まあ、趣味で触る人たちにあまり心配ないよと言いたいだけだ。 AVRがマイナーなのはむしろ日本独特の現象であり、Arudioも含めて世界では受け入れられている。
産業品で使わんわあんなもん なにおきてんのかわかんねえ 人の指先の感覚なめんなよ それより おっぱいたっちの技術はよ
時代の変化が読めるかどうか。 8bitがいつまで持つんだろうねw
たまに16bit欲しい時はあるけど、それ以上はいらね。
551 :
774ワット発電中さん :2013/09/02(月) 08:48:41.44 ID:A3Tmg8mT
大抵の用途には8ビットで十分。 というか、4ビットでも良い。 能力の無い奴は無駄に高性能なチップが必要になる。 しかも、バグつきw
ATTINY生存確認(末尾の数字は最大動作周波数(MHz)、PがDIP、SがSOP) 秋月 10 450円(10個) 13A-PU 50円 2313-20PU 100円 861A-PU 200円 千石 13V-10SU 147円 45V-10SU 231円 85-20PU 210円 2313-20P 210円 861-20PU 315円 若松 2313-20SV 740円220 マルツ 25-20PU 199円 45-20PU 220円 85-20PU 225円 2313-20SU 199円 2313-20PU 367円 24-20PU 346円 44-20PU 388円 26-16PU 420円 461-20PU 430円 共立は省略
秋月安いなー、取り扱い品種増やしてくれないかな。 PICなんか放っといていいからさ。
>>536 逆に、適当な波形を出す石はどんなのがあるのw?
特定の変数のみ、電源が切れても値を記憶するようにしたいんですけど どのように書いたらいいですか?
AtmelがCortex-M0って、他と差別化できるような点ってあるの? 単にCortex-M0というだけでは、先行しているNXPやST Microと競合する のは難しいのでは? ST MicroはローエンドのCortex-M0を大口向け32セントとか出しているし、 叩き売りは8bit限定というわけではない。開発費や設備の償却が終わって いる分、旧プロセスとはいえ既存AVRの方が値引きの余地はあると思う。
>>559 世界中の顧客が、その理屈で納得すると思うの?
今時、8ビットで頑張っても、もう誰も褒めてくれない。何で時間かかっていると思われるだけで損。
>>554 秋月が安いのは、在庫処理したがってるから。MSPとか、凄い安くて、俺は助かるけど
次は無さそうw
>>561 学生のお遊び程度の使い方しかしないならそうだろうな。
プロがこんなところで情報収集ですか? お疲れ様ですw ってどんな低レベルの技術者だよ、 ってお遊びの素人は思っちゃいますよ。
ちなみにたまに見掛ける格好いいプロって 客観的具体的にきちんと説明し茶々や煽りを華麗にスルー、絶対w なんて書かない。 こんな人に憧れるけど、おれはもっと修行しないと無理だろうなw。orz
照れるじゃねーか
低レベルでも設計者としての給料もらってるのが世の中にはゴマンといるんだよな。 8ビットなくなる議論って10年後も20年後もやってんだろうな。 そしてきっと8051系統もまだ残ってるんだろうな。 工業製品の開発って超保守的だよ〜 新規非推奨?なにそれ?状態だもんな・・・・
>>564 >ってお遊びの素人は思っちゃいますよ。
そういうもん。ド素人なんだからしょうがない。
CHIP1とかで見ると、1個、100個の価格(日本円)は Attiny4313-PU 511, 123 (20pin, ADC無) Attiny85-20PU 439, 106 (8pin, ADC有) Attiny84-20PU 514, 206 (14pin, ADC有) Attiny861-20PU 357, 211 (20pin, ADC有) なので、秋月が本気出せば 大容量(?)フラッシュなDIPのTinyAVRを100円とか200円で売れるはず
S1C63等の 4bitマイコンは安くて動作時も超低消費電力だから、いまだに生き残ってますね。
LCDドライバーになったり温度計になったりしている。
8bitマイコンもメモリーが大きかったり高性能なのは16bitと競合して負けるが規模、価格で住み分けができている。
>>556 のグラフを見ると8bitマイコンの出荷数は横ばいかプラスで総価格は下がっているから小さい物ものは8bit採用、メモリーや端子が多く必要な物は無理せずに16bit採用の傾向かな
571 :
774ワット発電中さん :2013/09/03(火) 14:21:26.59 ID:FgpfnkJl
うん、わかるよ。 会社の底辺社員がわずかな知識でド素人をこき下ろしてストレス解消できるもんね、 しかし稀に本物の技術者が現れて大恥かくこともある諸刃の剣wだけど
2chの恥はかき捨てだもんね^^
はじめてMLF32を使ったけどこれいい。 凄い小さいし、手でもわけなくハンダ付け出来た(goot RX-80HRT-3K使用)。 ただ、チップ下にサーマルパッドがあってパターン設計は結構きつい。
578 :
774ワット発電中さん :2013/09/03(火) 18:39:31.14 ID:s8f3zjPP
>>569 秋月に861Aが200円であるし
44と4313は妙楽堂で売ってるだろ
Attiny1634-PUとか、Attiny32313-PUとか札束でAtmelはたいて作らせて安価に売ってくれる、 秋月ならきっとやってくれるさ、きっと…
世の中の大抵のもんは、有効数字2桁あれば十分なんだよ 金勘定とかは10桁でも20桁でも使ってやればいいけど、 マイコンで制御するべきパラメータは、2桁で困らない
>>577 値段だけの問題だから電池動作する趣味の工作なら迷わずMSP430で良いと思う。
582 :
774ワット発電中さん :2013/09/03(火) 19:30:49.43 ID:f1HIaO6v
天気情報を取得して、天候に合わせて光るものを作ろうと思ってます。 今考えているのはAVRとパソコンをPCで繋いで PC側でgetTenki.exe(自作予定)を常時起動、 AVRをUSBポートにさしたらexe側でそれを検知し、天候情報をとってきて、 AVRにシリアル通信で送る、みたいな構造を考えてます。 それでやりたいことは実現できるといえば実現出来るのですが、 もっとスマートな方法はありませんでしょうか? もちろんこれを売るつもりはさらさらないですが、 これを商品として考えた時に、いちいちgetTenki.exeをダウンロードしてもらって、 プログラムを常時起動させておいてもらう、 みたいな手法はユーザフレンドリーではありません。 理想を言うと、AVR側に(パソコンのUSBポートを通して)インターネットから 天気情報をとってくる機能を入れ込んで、 ユーザは特に何もしなくてもPCにさすだけで 天気が分かっちゃうくらいのものが作りたいです。 そんな事は可能ですかね…。 それかもっといい方法とかあれば教えて欲しいです。 最初に挙げた手法は別の工作で一度やったことのある手法で、 実現可能なことはすでに分かっているので、 勉強というかステップアップの意味も込めて もっといい方法に挑戦してみたいです!!
Arduinoでできんじゃね?
>>582 USBはデータの送受信はすべてホスト側が駆動してる
ソフトをサービスとして動かすしかない
>>582 USBじゃなくてEtherにすれば?
ところで、当然ブツは通天閣型に作るんだよな?
586 :
774ワット発電中さん :2013/09/03(火) 20:04:44.93 ID:f1HIaO6v
>>583 Arduinoで出来るという事はAVRでも出来るという事ですよね。
>>584 ということは結局ソフトをダウンロードなりしてもらうような
設計になるということですかね。。。
kickstarterで成功してたblink(1)みたいなものを
目指してるんですが、blink(1)も調べてみたらソフトダウンロードさせてますね。。。
ううむ、USBメモリとかのautorun.infみたいな感じで
どうにかならないものかしら…。
587 :
774ワット発電中さん :2013/09/03(火) 20:07:23.46 ID:f1HIaO6v
>>585 Eatherケーブルはアリですね。
ただ電源とEatherケーブルの2本線が飛び出てるのが
少しカッコ悪い感じがして躊躇してます。
Eatherから電源とれれば万事解決かもしれませんが…。
そして何故通天閣ですか?
>>587 PoEでググレ。あと通天閣 天気予報でもググレ
あー、あとPLCもあった。忘れてた。
ついでに、"Ambient Orb"も見とくといいかもなー
>>582 気圧センサー、温度・湿度センサーetc
無線LANが便利
下駄に重力センサーみたいなのつけて 蹴りあげて、落ちた時に上か下かで明日の天気を判定してはどうか
天気情報はネットから取得して 表示装置を下駄型にする
気象庁門外不出のタングステン合金削りだし予報下駄がまず入手できねぇだろ
>>581 MSP430G2xxxクラスだと、PIC,AVRよりも安い
天気は予報するもんじゃない制御するもんだ 世界の気候はAT90S1200に支配されている
>>569 DigiKeyで1個の値段
LPC810M021FN8FP 148.0 8DIP ADC無 30MHz 4KB ROM 1KB RAM
LPC812M101FD20FP 170.0 20SOP ADC無 30MHz 16KB ROM 4KB RAM
MKL02Z32VFK4 186.0 24QFN ADC有 48MHz 32KB ROM 4KB RAM
MKL02Z32VFM4 194.0 32QFN ADC有 48MHz 32kB ROM 4KB RAM
>>571 > 2ちゃんは役に立つよ
十中八九はしょ〜もない話しだけど、中には固定概念を打破するキラリとしたカキコがあるんだよな。
視野を広げるのにいい。
>>570 > 4bitマイコンは安くて動作時も超低消費電力だから、
それは偏見。
16/32bitマイコンでも処理性能が高い分、ゆ〜っくりと超低クロックで動かせばア〜ラ不思議w
> 8bitマイコンも … 規模、価格で住み分けができている。
本当?
規模も価格も16/32bitマイコンに負けてないかい?
601 :
774ワット発電中さん :2013/09/04(水) 10:24:34.95 ID:F8u16Apn
キラリとしたカキコも十中八九は糞だけど
>>601 バカだなぁ。
そこから「一を聞いて十を知る」だよ
俺バカだから十を聞く頃は一を忘れてしまう。 2ちゃんを読んで感じることは「人間は醜い」だな。
606 :
774ワット発電中さん :2013/09/04(水) 14:50:12.51 ID:QI6kTZeR
ブーメランが飛び交う かわすのが大変
>>582 RaspberryPiでも使ったらいいんじゃね?
>>605 ならば、9を覚えてるって事じゃん。十分。
>>598 いつになったら入荷するんだか
迷惑な話だ
I2Cx2はともかく、UARTx1,SPIx1とかじゃおれっちの用途にはまったく足らん。 xmegaカワイイヨ
シリアルはそれぞれ二系統は欲しい。 そう言えば、俺が初めて使ったPICにはUARTが入っていなかった事を今思い出した。 客先の指定だったので変更も出来ず、仕方なくソフトでUARTを組みながら、 でぇつ嫌いだPICなんか、と嘆いたんだよ、懐かしいな。
xmegaでUARTといえばA4UのUART0のREMAP機能の存在意義に付いて小一時間悩まされたな。
>>612 > UARTx1,SPIx1とかじゃ 〜 まったく足らん。
一対一で繋ごうとするからだよ。
SPiならデイジーチェーンにしてもいいし、パラで繋いでもいい。周辺の数だけGPIOがあれば清む。
UARTも、自分が通信を支配しているならLogicICで通信相手を切り替えればいい。その時にはRTSでビジー出すのを忘れるな。
相手がRTSで制御出来ないなら、I2CーUARTチッブか、UARTが多い上位チップにするか、RSー422か485にすればいい。
ちょっと工夫するだけで、大抵は1ポートあれば事足りるのさ。
特にUARTはシステム中に10系統位必要な場合があるけど、SHでも5系統がせいぜい。
工夫の仕方を知らないと「ではマイコンを2つ積みましょう」とかなるし、実際に見たことある。勿論、大笑いしたよ。
何かとお役立ちなPSoC
面白いなw マイコンにIO余ってて、処理に余裕があるならソフトUART組まされそうだw
>>615 > SPiならデイジーチェーンにしてもいいし、
複数デバイスをパラ接続してHC138/139みたいなデコーダでチップセレクト
切り替えるなら判るが、SPIって、選択されていないデバイスのDI入力って、
DOへ筒抜けになるなんて仕様あったっけ?
> UARTも、自分が通信を支配しているならLogicICで通信相手を切り替え
> ればいい。その時にはRTSでビジー出すのを忘れるな。
RTSをBUSYにしても、すぐに通信が止まるわけではない。ハードフロー制御
でも、既に送信が始まっていれば、最低1キャラクタは送られる。
マルチプレクサによる切り替えは、自分側からコマンドを送って、相手の
レスポンスを待つだけで、絶対に相手側の都合で勝手に通信が開始され
ないという、特殊な使い方でなければ使えない。
それに、コマンドを送出直後に、レスポンスを待つ間は、マルチプレクサ
を他の相手に切り替えることもできない。
そういう場合でも、普通は芋づる接続できるRS485等を使う。
上位通信、ジャーナルプリンタ、操作パネル、SDカード 全部同時にxmegaA3UのUSARTとそのMSPIモードで使用してる。めっちゃ楽w ダブルバッファとDMA転送でメカ制御しながらでも余裕♪ 16550で増設してた昔は何だったのよ状態。 あ、マルチプロセッサ通信もやってるわ。マスタは決まってるからCANなんていらん。
621 :
615 :2013/09/05(木) 22:42:22.70 ID:Xn9myvSY
>>617 (ぉぃぉぃ) 一番いい所を持って行ってくれちゃって。憎いよ〜w
そう、PSoCなら外付け回路無しの内部でポートを増やせるし、なんならUARTブロックそのものをDBAに並べればいい。
>>618 低レベルなハード屋と組まされたら、その可能性はあるねぇw
>>619 > 相手側の都合で勝手に通信が開始され
> ないという、特殊な使い方でなければ使えない。
その場合でもソフトフロー制御でなんとかなる。
まさかハードフローでない3線式でサポートしていないなんて … いるんだよなぁ〜、そういうしょ〜もないドライバを書くソフト屋って。
しかもそれが製品で、「仕様です」とか言ってくれちゃうとかw
仕方無いから通信専用MCUを載せて回避したけどさ、美しく無いんだよなぁ orz
来ましたねぇ、キラリ発言!
>>620 > 全部同時にxmegaA3UのUSARTとそのMSPIモードで使用してる。めっちゃ楽w
へぇ〜
> Seven USARTs with IrDA support for one USART
> Three serial peripheral interfaces (SPIs)
すごいな。何かの時に検討してみるよ。
ただ、こんなデバイスをAtmelに作らせたAVRユーザって一体…
…とも思ってしまったw
A3UだとUSBも喋れるんで、PCIの232Cボードからの置き換えには(繋ぐものにも依るけど)悪くないよ。
> AVRユーザって一体… 前言撤回w NXPにも UART x6, SPI x3なデバイスがあるのを見つけた(汗 世の中、メーカに無茶言う人が多いって事か。
産業機器はまだまだシリアル通信多いんだよ。 SDカードは昔のP-ROM代わりだけどね。 「昔はROM差し替えればすんでたのに今はパソコン要るのかよ!」 現場の声ですwwww ファーム書き換えられればいいんだからFATなんて使ってないよ。
>>623 それは魅力感じないなぁ。
USBならデバイス機能だけでなくホスト機能を持ち、スピードも速く、Flashもより大容量で、しかも ATXMEGA128A3U-AU の1個500円(DigiKey)よりも安いKL24Z(Cortex-M0+, 48MHz, 64kB ROM)があるから。
おっと、ROMはKL24Zが小さかった(汗
>>625 > 産業機器はまだまだシリアル通信多いんだよ。
ソフトの負担が軽いからね。
肝心のUART数が少ないんじゃ話にならんじゃん。
PCのUSBに繋ぎたい? はい、USB-RS232C変換ケーブル付けときますね。 これで終わらせてる。 なんで少量生産でベンダーIDなんて取得せにゃならんのだ。 HIDデバイスにしてもPC側に専用アプリ必要になるし・・・ ましてやUSB on the goなんてやってられるかぃw そんなの民生品の世界だよ。産業屋の俺には関係ね〜
>>621 > その場合でもソフトフロー制御でなんとかなる。
マルチプレクサで選択していない状態の相手デバイスから勝手に送信して
きたら、ソフトフロー制御も糞もなかろう。
それとも、マルチプレクサで非選択状態にする前に、X-OFFを送るのか?
同一電源で動くオンボードならともかく、相手デバイスがハードリセット
または電源再投入されたら? まともに、通信の異常系設計やったこと
ないんだろうなぁ。
あと、制御系システムのコンソールI/Oはともかく、ソフトフロー制御だと
バイナリを直接送れないんだよな。
> SPiならデイジーチェーンにしてもいいし、
都合の悪いこれは華麗にスルーか? もしかして、SPiはSPIとは違う
パラレルワールドの規格とか?
>>629 その方が雷に強かったりするしな。
USBは5m以上ケーブル伸ばせないし。
>>630 なになにw 相手にされなかったのでムクれているの?w
>>619 は大筋
>>615 の焼き直しだし、
そもそも「UARTも、自分が通信を支配しているなら」と断った上での話しだし、
ソフトフローやら選択/非選択は、相手機器の仕様を睨みながら決めればいいこと。
> 非選択状態にする前に、X-OFFを送るのか?
> 相手デバイスがハードリセットまたは電源再投入されたら?
> バイナリを直接送れないんだよな。
文句の多い奴w
こういう奴がゴテゴテしたシステムを作るんだろうな〜。
バイナリを送る? ハードフローが無い3線のUARTで?
何も考えてないだろ? 相手のバッファがオーバーフローしたらどうするんだよ?
相手がリセットされたら?
それってさ、そもそもハートビートを考慮しなけりゃいけない機器じゃないの?
えっ? まさか考えずに作ってないよな?w
> > SPiならデイジーチェーンにしてもいいし、
> 都合の悪いこれは華麗にスルーか?
恥ずかしいなぁ、おい!w
「SPI デイジーチェーン接続」でggrks
(折角スルーしてあげたのに、二度も赤っ恥かく奴って一体…)
>相手のバッファがオーバーフローしたらどうするんだよ? 組込みならエラーがあるのは大前提だから、必ずプロトコル つーもんがあるんじゃねぇの? デイジーチェーンはどうも間違えやすくてな。面倒になってきて、 結局I2Cにしてしまった。
>>632 >バイナリを送る? ハードフローが無い3線のUARTで?
>何も考えてないだろ? 相手のバッファがオーバーフローしたらどうするんだよ?
オーバーフローなんてしないよ。お前の作ったプログラムはするのかも試練が、ま、実力だからしょうがない。
まともに作れば、3線どころか、2線でさえ、バイナリを送れる。勿論、オーバーフローなんてしない。
そろそろ追っかけるのが面倒になつてきた。 コテ付けて雑談すれでやってくれよ。 俺流wの提示は有り難いのでまた宜しく。
もちろん、1線でも無線でさえバイナリーを送れる。
AVRって、ある種のガラパゴスマイコンなんだな。 独自の進化をした呪縛マイコン。
どういうところが他と違って独自なのか説明してくれよ
pic16やpic18に比べればコア性能は神。
プログラム可能なインターフェースコントローラーと比べるなよ
それでも神
コードサイズは貧乏神
PICはすでに老害だもん… 24系や30系なら改善されたけどあっち使うくらいなら他のにするもん… これ以上はPIC厨が暴れるのでNGってことで
>>645 > PICはすでに老害だもん…
似たようなもの、どんぐりの背くらべ。
>>646 1すら言って無いと思うんだ。ガラパゴスの意味を理解してない。
導入しやすくPIC16系みたいに応用の利かないアーキテクチャでもない。
C言語との親和性もいいし、素直で当たり前なMCUだと思うよ。
設定可能なインターフェースも前例があるから悩むことは無かったし、
Z80使いのおっさんが
>>620 の様にいともあっさり移行できた。
他のマイコンに乗り換えづらい変なところなんて無いから呪縛なんてのも無い。
これで勉強して他の製品に飛んでいけると思う。
ルネサスのR系、MSP430、STM32等と比較調査してmega系なら魅力無かったけど、
xmegaで強化された周辺機能が目を引いたかな。十分安くて使いよいヤツですよ。
次の進化で割り込み時のレジスタ退避にハードウェア処理を選択できると嬉しいかな。
これも他のマイコンが既にやってる当たり前な進化だし、タスクチェンジの
オーバーヘッドが激減するからね。
MLFパッケージは実装検査しにくいから、特に必要が無ければやめて欲しいって言われたよ。
実装されたあれ見てニヤニヤするのが隠れた楽しみなのにw
>>633 > 必ずプロトコルつーもんがあるんじゃねぇの?
そそ、ご明察!
なのにさ、それも考えられずに「まともに作れば」とのたまう、赤っ恥なのに気がついてない
>>636 みたいな奴もいるw
>>636 >>638 > まともに作れば、3線どころか、2線でさえ、バイナリを送れる。勿論、オーバーフローなんてしない。
あのさ、それって車輪の再発明。
先人が30年前にKermitで解決したことを今頃ドヤ顔されても、「おまえ、アホだろう?」としか思えないw
「ZMODEM Kermit」でggrks
昔の人はシリアルがこんなに高速化して主流になるとは思わなかっただろうな
>>648 > 実装されたあれ見てニヤニヤするのが隠れた楽しみなのにw
仕事に趣味を持ち込むのはどうよ?
>>649 ZMODEMだと、オーバーフローやデータ化けは再送じゃね?
PCに繋ぐときは便利だけど。
>>640 愛がないなぁ・・・
文末に「キリッ」を付け忘れたってことぐらい推測してやれよ
>>652 >>633 > 組込みならエラーがあるのは大前提だから、必ずプロトコル
> つーもんがあるんじゃねぇの?
そういえばI2Cのケーブルって専用品があるのでしょうか? 7cmぐらいジャンパワイヤーでAttinyとI2C液晶をつなげているのですが 液晶表示がときどきばけて、ケーブルさわるとばけばけになる ケーブルをツイストすると全く映らなくなるし
>>655 転送速度とかプルアップ抵抗を疑ったほうがいいかも?
>>655 5線のフラットケーブルを用意して、GND SCL GND SDA GNDの順に割り当ててみな。
LCD の GND が浮いてるとみた (自分がやったことある症状と似てる)
抵抗高すぎるんだろうけど低すぎると今度はスレーブ機器によってLOにできてない場合があるから 一回オシロで見とくのが確実
>>657 別人ですが
> GND SCL GND SDA GNDの順に
いまサンプルなどに従って4線で繋いでるんだけど5本繋ぐ意味ってなんですか?
ハードは素人なので良ければ教えてください。
ヒント:サンドウィッチ
SCSIも半分以上GNDだったな
AVRのクロックでも水晶の周りを「ばーりあ」ってやるじゃん
IDEも規格拡張で間にGNDいれた80芯になりましたね。
657で言われているのはフラットケーブル限定の話ですよ。
信号と信号の間にGNDを挿入することによってクロストーク
と呼ばれる信号同士の影響を軽減します。
信号とGNDペアですとどちらかの端に信号が来てしまうので
そこにもGNDを入れて5本になってるんですね。この1本はさしたる
効果は無いと思われますが、邪魔でも無いのでお好みでって感じでしょうか。
>>655 ツイストしてみたと書かれていますが、SDAとSCL一緒によじったりしてませんか?
そんなことするとクロストークが増加して言われている現象になりますよ。
ただよじることとツイストペアは違うものです。
7cmのケーブルで触れると化けるってプルアップつけてないくらいじゃないかな?
ついでにプルアップについて教えてください、 I2CのセンサとLCDをつけた小道具を作ったのですが サンプルなどではプルアップ抵抗については殆ど記載されていません、 まれに配線してある図も見掛けます、 取りあえずどちらも試してみて差を感じていないのですが基本的に要る物なのでしょうか? またどのようなメリットや意味があるのでしょうか?
>>665 NXP社のサイトでI2Cの規格書がフリーでダウンロードできるのだから、
まずは読むべし。
I2CってHiのときは誰も駆動していないオープン状態ですから プルアップ抵抗は必要ですよ。 当たり前すぎて省略して書かれていることもあります。 デバイスによっては高抵抗のプルアップが内蔵されている場合もありますので、 抵抗を外付けしなくても動いてしまう場合もあるでしょう。
668 :
657 :2013/09/07(土) 18:14:30.89 ID:Q6PiNPXI
>>665 >>667 が言うとおり、各デバイスはオープンドレインで接続されるから必要。
プルアップ抵抗の計算式は以下。
Rp(max) = tr / (0.8473 x Cb)
Cb : バスの総負荷容量
>>664 > この1本はさしたる効果は無いと思われますが、
I2Cの3.4Mbit/s程度なら意味無いけど、ちょい周波数が高くなるとその一本でコプレーナ導波路と見なすことが出来、インピーダンスマッチングが出来るんだよ。
>>668 追加情報はありがたいですが、プルアップも知らなかった人がバスの負荷容量ってわかんないですよね。
インピーダンスマッチングの件にしたって知ってますけど、今はそんな話してないですよね。
知識が豊富なのはお察ししますが、質疑応答はスッキリシンプルに行きましょうよ。
話が広がりすぎてノイズだらけになるw
>>669 質疑応答でなく、あなたの知識に対するツッコミだよ。
AVRの世界から一歩外に出たら、その認識では通用しないよ。
>>669 プル・アップ抵抗10kΩで多分いける。
う〜ん・・・何の認識だろう・・・
初心者さんがI2Cでハマってる話題でしょう?
マイクロストリップラインの話にでも発展させましょうか?
メンドクサイカラシナイケド
>>671 うん、10kΩで多分動くでしょうね。
でも私の実績で10kΩがNGだった事もあるから断定的な数字出したくなかったんです。
無難な数字の代弁ありがとう。
>>672 ネットで検索したら、IICの仕様書はいくらでも転がってる。
タイミングとか、速度に応じたプルアップ抵抗の値とかも載ってるよ。
674 :
670 :2013/09/07(土) 22:32:07.60 ID:Q4QlewE0
違うやんw
>>660 の質問が「4線でなく5本繋ぐのは何故?」なのだから、
>>668 でいいやんw
ただ、一気に「コプレーナ導波路」だと確かに飛躍しすぎと反省して、その中間を補足。
>>660 SCL, SDAを左右からGNDで挟むのは、クロック/シグナルのガードの為だよ。
これは
>>664 も行っているけど、信号を並走させると浮遊容量が生じ、容量結合によって隣の信号に影響を与える(クロストーク)。
考慮しなければいけないのは並走信号だけでなく、近接する他のワイヤーもあれば、トランス近くを通すと磁気結合さえありうる。
それを防ぐのがGNDによるガードで、信号線路と並走させてあえて静電/磁気結合させておく。
結合させておけば、他からの影響を減らす事が出来、ノイズ耐性を高める事が出来る。
これがI2Cでも計5本の理由。
回路はちょっとした工夫で、格段に安定度を向上させられるのさ。
>>673 そうそう、調べりゃ出てきますよね。
調べて欲しかったし、複数の資料比べればちょっと違うじゃないかとか、
気付いてもらおうと思うわけですよ。
下手に言っちゃうと「10kΩでいいて言われたもん」とかになるしw
>>674 そうでしたか。読解力弱くて申し訳ない。リケイナモンデ・・・
でもやっぱりわざわざ両サイドGNDは好みですよ。
その理屈が一般的ならセントロニクスパラレルやSCSIが端面信号なのはおかしいでしょ。
外来のコモンノイズ対策なら内側とはいえGND一本あれば十分。
(いや、GNDラインが+一本ならコンモードじゃなくなるな・・・・)
シールド的意味合いでガードというなら鉛直面むき出しで意味ないですよ。
それでも全く無意味でもないから「好み」って書いたんです。
何でこんなに食いつくのか・・・それさんざん実験したんだもんw
ノイズ試験キライ!
I2Cのスピードで7cmぐらい、クロストークなんか気にする必要あるか? (そりゃ、極細線を50umピッチで並走させたら影響でるかもわからんが・・・)
4.7kくらいにしてる 理由はない
入手しやすいから 10kΩ にしてる
679 :
774ワット発電中さん :2013/09/08(日) 02:05:59.43 ID:GljaJxl3
>>641 >>645 他の物と比べるの止めろよ。ただ単に何処がどう良いのかを書けば良いのに
他のものを持ち出してたんじゃ、こっちから喧嘩売ってるようなもんだぞ
あと、2chだからって人を馬鹿にしたような事言うなよ。住人のレベル疑われるぞ
セントロやパラレルSCSIの装置間接続は、本来ツイストペア線の多芯シールド 付きキャプタイヤケーブルを使う前提。外付けフロッピーI/Fもそう。 外側絶縁被覆下のシールドは片側コネクタのみでシャーシに落として、電流 ループができないようにする。 裂いて使えば別だけど、フラットケーブルの芯線は偶数しかないし、バラ線と 1列コネクタの組み合わせだとケーブル間の距離が一定にならないので、インピー ダンスが保証されない。GHz帯でもないのに導波管効果説は眉唾。
>>675 お前の思想はどうても良い。
ズバリ答えないなら黙ってろ!
通常5kから10k程度と一言で良いだろ
私はいつもi2cのクロック800kHz位で使いますから 抵抗は2kΩが標準です
>>676 論より証拠で実験してみれば?
・7cmぐらいジャンパワイヤーを2本捩り、一方をCMOSの出力に繋ぎ、他方をプローブに繋ぎオシロで観測する。
どんな波形が見えるかな?
言葉にすると、
・I2Cはオープンドレイン出力であり、2〜10kΩ台の抵抗でプルアップされている。
・つまり結構ハイインピーダンスな線路であり、外来ノイズは即電圧として見える線路。
・そしてCMOS入力もハイインピーダンス受け。
さて何が起きるかな?
AVRの資料には(たとえばmega168の2545R-AVR-07/09、307ページ) TWIのプルアップ抵抗のMin.〜Max.の計算式が記載してあります。 相手側デバイスの条件もANDして(相手がAVRでない場合には) 指定された範囲内で環境(ノイズレベルなど)を考えて低めに決めればよいと思う。 プルアップ抵抗が適切で、クロック数100KHz、長さ7cm、実験室レベル程度で I2Cが誤動作するなら、何か他に原因があるのでは。
>>675 > シールド的意味合いでガードというなら鉛直面むき出しで意味ないですよ。
> 何でこんなに食いつくのか・・・それさんざん実験したんだもんw
直列保護抵抗、入れ忘れただろ?
何でも10kだな っていうかもう、茶黒橙
688 :
665 :2013/09/08(日) 08:39:36.49 ID:qvVPGvkN
色々参考になります、 でもハードは素人で何となくしか理解出来ません arduinoのセンサに付属のサンプルとか殆どプルアップの指示は無いんですよね、 石がAVRでもarduinoだとまた違うのかな? まあ変な動きが出たらプルアップ入れてみます。
>>683 脳内乙
オシロで見りゃ乗るけど、ロジックに影響を与えるまでいかんよ
>>683 I2Cは、差動信号じゃないのに何故捻る?
>>689 10kΩって、結構ローインピーダンスだよな
お、寝てる間に伸びてますね。
>>686 いやいや、空間のイズの乗り方の実験の話だからダンパー云々はまた別。
ちなみにその抵抗でかくしていって、どんなメリットデメリット出るかの実験もしましたよ。
>>688 いやだから、マスター側でプルアップしておくのが暗黙的当たり前なことなので、
スレーブであるセンサ類には説明が無いんです。変だったらじゃ無くて絶対に入れなくちゃいけません。
>>689 実験して10kがNGだったのは外来ノイズ食らったからなんです。
まぁ、パターン長が20cmくらいあってデバイスも3個あったからなんですが・・・
インパルスなめちゃいかんですよ。
私はシンク電流2mAくらいで2.2kにしてます。消費電流気にしない使い方なので。
>>683 LVDSじゃなくてもリターングランドとよじるのはやることですよ。
>>684 ケーブルだけ売っててもな。圧接コネクタがないと思うが?フラットケーブル
用コネクタ自体だって、インピーダンス整合されていないだろうに。
導波管効果云々と言うなら、パターンは一筆書き、スタブ配線禁止、プル
アップは終端効果で、レシーバ側の直近に置くくらいは当然だよな。
感覚的にハイインピーダンスは数百kΩ以上かなぁ。パターンを指で触れたら
誤作動するかどうかのレベル。
高周波成分に対して減衰効果のあるフェライトビーズ等を入れるならともかく、
5Vへの短絡でも最大で0.5mAしか流れない線路に、百Ωそこそこのダンピング
抵抗入れる効果って何よ?
下手にシリーズ抵抗入れると、信号の立ち上がりだけでなく、立ち下がりも
鈍ってしまう罠。浮遊容量と低消費電流を両立させるなら、抵抗による
プルアップではなく、定電流回路でアクティブ終端するしかないな。
SOT23パッケージで2回路入りのアクティブ終端とかあればいいけど。
大昔、客先指定のピン並びでGNDペアになっていないフラットケーブルで
4.77MHzのISAバスを60cmくらい引き出したことがあるけど、そこそこ動い
ていたな。
> I2Cは、差動信号じゃないのに何故捻る?
真空管のヒータ配線だってハム防止に捻るけど、あれは差動だからなのか?
いや、あれはふつーに差動だろw
I2Cは差動じゃないよ SCLはクロックだ
差動じゃなかったらグランドとツイストにするだろ
>>真空管のヒーター配線 信号線とリターン線の2本のケーブルの特性インピーダンスが同じで、 電流の方向が逆なら差動信号だと思う。
うわ〜センサ側に問答無用でプルアップ入ってるんだ。 バスって概念無視の1個接続前提なんですね。 ホビー界の常識知らなかった・・・・ごめんなさい・・・・
たとえばBMP085 Breakoutってのはその基板にプルアップ抵抗が乗ってるね
まあおもちゃですから^^
親切で乗せてあるんだよ 嫌ならこんなの簡単に外せるし
>>700 I2Cはマルチマスタもできるからマスター側に入れるってのも厳密には正しくない
>>693 とてもおもろいです(煽りじゃないっす)
途中の話題飛ばします、まず「考えうること」してから
ぼくもうむむ(選択)・・・って感じです。
そんなことはともかくケーブルパラシングル4.MHzとかすげえww
>>700 別に複数個所でプルアップしても問題は無い。
>>700 必要に応じて外せる仕様ってのには頭が回らないのね
おもちゃならせいぜい2個くらいまでしか繋がないからって割り切りなんだろうな。 そして10個くらい繋いだ奴が動かないとか騒ぐんですね。 AVRなら合成470Ωくらいでも動いちゃうか。
>>708 チップ抵抗二個のコストを気にするような
量産品なら、こんな汎用モジュールなんか
積極的に使わないし、仮にどうしても使う
なら、抵抗を実装してない特別仕様にする
だろ。
>>705 力業でなんとかしてきた、老人のたわごとに感動してどうする?w
>>710 コストと聞いて部品代しか思い付かないのね。
>>700 良い機会だから、バス(1本のケーブルに複数の入出力を接続する)とか
スリーステート出力とか、オープンコレクタ(オープンドレイン)出力とか
チップセレクトとか、ワイアードオアとかについて勉強したら?
意味が理解出来ていないと知識として残らないよ。
ttps://www.sparkfun.com/products/11282 >
> We've made some minor hardware changes this time around to address some suggestions from the comment
> section including the addition of a solder jumper to disable the I2C pull-ups.
ちゃんと対策済みだ。
最後まで説明を読まないで使おうとするから悪い。
>>712 コストを気にするような場面なら、こんなモジュール使わずに
チップを直接実装するに決まってるだろ。バカなのか?
>>710 書いてる意味がわからねぇけど、チップ抵抗2個が
最初から付いてるから、線で繋ぐだけでOKになってんじゃねぇのかい?
たかがプルアッブ抵抗で、これだけ盛上がるおまえらって一体…
DIPな1284、げと。在庫限り品の箱の中で発掘。
1284はFatfsを試すときほんと役に立った長いファイル名も試せるし 試しただけでおわったけど
最近名古屋にできたな
>>711 ISAよく知らないし当時の環境・状況(I/O電圧とかブリッジバッファらしいのなし)
想像でしかないですが直叩きに近い感じだったのかな?
でケーブルとかすぐ信号貼りついちゃうwwでバス通すとかwww思て…
前述の話題からそれ出したのってそんな感じからと思ったんです
「整合」とか「減衰」とか表現や、「シリーズ」・「終端」とか話題
I2Cて「非透過・共有型」のようなものでしょ的な延長上からかなって
勝手な想像ですし、自分でも「そもそも」とか忘れることが多くて
なんかよくわかんないけど刺激になって満足したのでレス結構です
おわり
>>722 > なんかよくわかんないけど刺激になって満足した
ではその満足を、「な〜んだ」に変えてやろう。
>>693 > 大昔、客先指定のピン並びでGNDペアになっていないフラットケーブルで
> 4.77MHzのISAバスを60cmくらい引き出したことがあるけど、そこそこ動い
> ていたな。
先人が27年前にIDE(PATA)でやった事を今頃ドヤ顔されても、「おまえ、アホだろう?」としか思えないw
>>722 補足しておく。
古いHDDにIDEってのがある。これは今のSATAの元であるPATAの原型。
さてこのIDE、PCから見ると何故かHDDがレジスタとして見える仕様。
PCに接続するデバイスの中で、かなり珍しい仕様になっている。
何故か? 実はIDEの信号はISAバスそのもの。(ボード上のコントローラをHDD側に統合した仕様)
ケーブルの先にあるレジスタが見える仕様なのはこの為。
そんな訳でISAバスを延ばす事なぞ、珍しくもなんともないのさ。
>>721 コストについて聞かれて、なにも言い返せずに「くやしいのう」とか、笑える
ひょっとして、自分に言ってるのか? (w
>>723 >そんな訳でISAバスを延ばす事なぞ、珍しくもなんともないのさ。
ドヤ顔して書いてたのに?
>>723 転送速度 最大3.3MHz ケーブル長最大45cm
夏休みも終わったってのに・・・ これって、特定モジュールについて聞かれたのに、プルアップについてドヤ顔で講釈たれてたら 「そのモジュール、プルアップ抵抗実装してるし」で赤っ恥。「こんなオモチャは・・・」とか 「コストが・・・」とか言い出す始末。(そもそも、自分でオモチャって言ってる時点でコスト度外視だろうに) まぁ、なんだ・・・ 聞くほうも答えるほうも、データシートぐらいちゃんと読んでからにした方が恥さらしにならなくて良いとおもうぞ
でもデーターシート読まなくても・知らなくても適当なツールがサンデープログラマーレベルで出来ちゃうことに arduinoの意味があると思うんだ、つかデーターシートとかきちんと読む人なんかは そもそもarduinoが流行る前に他のPICとかでバシバシ作ってるんじゃないかな? いい加減でもそれなりに動くのは凄く貴重で重要だと思う。
まあ、ここはArduinoスレじゃないし
データシート読まないやつが迷い込んでくる所だろココ それに質問時点で使うモジュール言ってれば一瞬で終わった流れだったな 情報を何も出さずに質問するやつ多いよね まあ平常運転だ
質問も解答もここではよくあるパターンです 論争もこんな所で点火するのかと驚くがその後の展開はいつも通り 当人は必死だろうけどはたから見てるとその必死ぶりにニヤニヤする
初心者スレとかわざと出さない奴いるから気をつけろ! 始末書書くのにいい感じの言い訳浮かばなくて 大量のレスから拾ってコピペし合体・文章完成させるとかいるらしいぞ
しかし何故データシート読まないのかな? 俺はデータシート読まないと不安で先に進めない
データシートというものの存在を知らないから
>>729 > まあ、ここはArduinoスレじゃないし
そっか、
俺みたいなハード素人だとついついAVR≒arduinoって思いがちなんだけど大きな差があるのかな?
自分は簡単なものはarduinoボードで実験して石とセンサ類を基盤に移して使用、
あとtinyとかはAVRstudioで簡単なプログラム作って同様に石単体で使用。
arduino=簡易的なAVR開発環境だと思いこんでた。
arduinoってのはスケッチまで含んだ環境のことだからなあ AVRstudio使えちゃったら別の環境まで覚える気ない arduinoのボードを流用することはあるけどね VC使いがVBを覚えようとするかどうかってな例えであってるか?
>>737 今はVBが出来れば組み込みアプリが書ける時代さ。
あくまでもアブリ限定で、リアルタイム性が要求されないトコってな条件付きだけどw
ブラックなド玄人がいい加減なこと書いているなぁ。 素人は煙に巻くこと
はできても、表面的な知識だけで実務経験がないのが丸わかり。
> さてこのIDE、PCから見ると何故かHDDがレジスタとして見える仕様。
フロッピーだって、SCSIだって、およそ全てのバスの先にあるものは、プロ
グラムから見たらI/Oレジスタなわけだが? 単に信号を端折ったx86バスを
ISAだと言い張るなら、Compact Flashも、PCMCIAもみな同じ。
ISAバスもオリジナルのPCとXTは4.77MHzだが、PC/ATは6MHz、XT/286は8MHz
だったはず。 COMPAQの386マシンだったかが、16MHzにして動かないボードが
続出した。 各社てんでばらばらな仕様の互換機が販売され、ISAバスの
仕様が標準化されたのは、それより後の話。
IDEが延長できるのは、信号線のうち半分(コネクタの片列)が全てGNDで、
しかも電源は別コネクタから供給していたから。 それとISAバスのI/O
サイクルには、1ウェイト入っていたのでタイミング的には、PC98のCバス
よりも遅かった。 当然、バスにはバッファも入っている。
もともと、IBM-PC/XTで採用されていたHDDインターフェースは、当時から
ドライブとはフラットケーブルは使われていたが、ST-506と呼ばれるFDD
インターフェースに近い信号仕様で、Western Digital製のコントローラ
は、ISAの拡張ボード側に載っていた。
後に、COMPAQがHDDコントローラをHDD側に移して、コントローラに必要な
信号線のみを残して、40PコネクタにまとめたのがIDE。 この時点では
HDCのレジスタ仕様は、ST-506と同じ。
http://ja.wikipedia.org/wiki/ST-506 ちなみに、ISAバスの延長を作ったのは、25年以上も前の話で、基板も当時は
まだ当たり前の手張りアートワークの両面スルーな。
その数年後に、IBM製PS2向けにMicro ChannelバスをISAに変換して外付け
拡張ボックスを繋いだこともあったな。Chips & Technologies製のバス
コントローラをPLCCソケットでMicro Channelのユニバーサル基板に手配線。
Arduinoは、IDEが劣化版のEclipseもどきなだけ、あらかじめ用意された プリプロセッサで、ソースからプロトタイプ宣言を自動生成することで ヘッダファイルを書かなくてよくて、フレームワークがmain()を隠蔽 しているだけで、言語としてはC++だぞ。コンパイラやリンカ本体は、 AVR-GCCをそっくりそのまま使っているし、AVR独自のヘッダファイルも そのまま使える。 ただ、あれで業務に使えるというか、系統的にハードやソフトの 知識が得られるかと言えば、かなり疑問。 本来、あれは小学生や せいぜい中学生くらい迄の子供に、プログラムに興味を持たせさせる ための教材だと思う。 あと、OLEとかでExcelやInternet Explorerを制御するようなコード を書く場合は、VC++も、VBも、EXCELマクロ(VBA)も、C#(.NET)も大差 ない。 ただ、VBが嫌なのは、標準コントロールがWindowsのコモンコントロール ではないので、挙動が微妙に違うし、小回りが効かない。DelphiやC++ Builderも同様。
ブラックなド玄人がいい加減なこと書いているなぁ。
>>739 > IDEが延長できるのは、信号線のうち半分(コネクタの片列)が全てGND
ttp://www.t13.org/documents/UploadedDocuments/project/d0791r4c-ATA-1.pdf p.21
| HOST RESET 1 | ----- RESET- -------->| 1 |
| 2 | ----- Ground -------- | 2 |
| HOST DATA BUS BIT 7 3 |<----- DD7 ----------->| 3 |
| HOST DATA BUS BIT 8 4 |<----- DD8 ----------->| 4 |
| HOST DATA BUS BIT 6 5 |<----- DD6 ----------->| 5 |
| HOST DATA BUS BIT 9 6 |<----- DD9 ----------->| 6 |
| HOST DATA BUS BIT 5 7 |<----- DD5 ----------->| 7 |
| HOST DATA BUS BIT 10 8 |<----- DD10 ---------->| 8 |
| HOST DATA BUS BIT 4 9 |<----- DD4 ----------->| 9 |
| HOST DATA BUS BIT 11 10 |<----- DD11 ---------->| 10 |
| HOST DATA BUS BIT 3 11 |<----- DD3 ----------->| 11 |
| HOST DATA BUS BIT 12 12 |<----- DD12 ---------->| 12 |
| HOST DATA BUS BIT 2 13 |<----- DD2 ----------->| 13 |
| HOST DATA BUS BIT 13 14 |<----- DD13 ---------->| 14 |
| HOST DATA BUS BIT 1 15 |<----- DD1 ----------->| 15 |
| HOST DATA BUS BIT 14 16 |<----- DD14 ---------->| 16 |
| HOST DATA BUS BIT 0 17 |<----- DD0 ----------->| 17 |
| HOST DATA BUS BIT 15 18 |<----- DD15 ---------->| 18 |
| 19 | ----- Ground -------- | 19 |
| 20 | ----- (keypin) ------ | 20 |
以下略
もう一つ言えば、
>>664 > IDEも規格拡張で間にGNDいれた80芯になりましたね。
と、
>>664 さんが40ピンでは片側GNDでは無いよと、折角教えてくれていたのにさ
( ´_ゝ`)フッ
>>693 > ケーブルだけ売っててもな。圧接コネクタがないと思うが?
「圧着端子」でggrks
> フラットケーブル用コネクタ自体だって、インピーダンス整合されていないだろうに。
世の中、整合しているコネクタがどれだけあると思ってるの?
SMAとて、俺に言わせれば整合してないな。
> プルアップは終端効果で、レシーバ側の直近に置くくらいは当然だよな。
複数のデバイスがぶら下がるI2Cやバスで、それでマッチング出来ると思ってるの?
おまえ、DDR1/2/3 SDRAMの設計したことないだろ?
> 感覚的にハイインピーダンスは数百kΩ以上かなぁ。
そんな感覚で設計されたらたまんないねぇ ( ´_ゝ`)フッ
> 5Vへの短絡でも最大で0.5mAしか流れない線路に、百Ωそこそこのダンピング
> 抵抗入れる効果って何よ?
おまえ、サージが判ってないだろ?
> 定電流回路でアクティブ終端するしかないな。
おまえの頭の中には終端しかない訳?
なるほど、ISAレベルでドヤ顔する訳だ ( ´_ゝ`)フッ
> 4.77MHzのISAバスを60cmくらい引き出したことがあるけど、そこそこ動い
> ていたな。
PCIを引き出した事がある俺に言わせれば、それ、子供騙し。
…ってな事は
>>722 に書いたとおり。
もっとも、PCIは波長短縮率から60cmも引き出せないけどね。
(60cmも延ばすと、タイミングが完全にPCIの仕様を満たせなくなる)
(遅延時間を計算すれば判るさ)
あ〜ぁ、折角スルーしてあげてたのに。鳴かねば撃たれなかったのにさ… ( ´_ゝ`)フッ
リストラされて夜も眠れない自宅警備かね? そういや、最初のIDEはGNDじゃなかったっけか。 シングルエンドSCSIと 記憶がゴッチャだったかもな。年には勝てんな。 最近というか、ここ何年もハードのドカタ仕事なんてしていないしさぁ。 PCIをゲートあたり遅延25nsレベルのLS-TTLだけで引き出したというなら 話は別だが、高速で高集積度のC-MOSデバイスを使えば、どうとでもなる わな。 DDRにしたって、昔と違って規格の段階から実装を含めて設計されているし、 デバイスの特性も各社揃っているし、相対的なタイミングマージンも大きい。 それなりのCADを使えば等長配線もインピーダンス計算もしてくれる。 チミの自慢のスキルなんぞ、もはやドカタ仕事になっちゃったわけよ。 ぢゃ、明日(というか今日)も仕事なんでこれで。
>>739 これは恥ずかしいw
知らないならでしゃばらなきゃ良いのに…
あと、wikipediaはソースとして使えないから…
>>744 > PCIをゲートあたり遅延25nsレベルのLS-TTLだけで引き出したというなら
> 話は別だが、高速で高集積度のC-MOSデバイスを使えば、どうとでもなる
> わな
なりません。
>>743 ちょww
お風呂入って参戦しよ思てたのにwww
>>722 おれだからww
PCI食ってるのアドレスデコードだろww
別の突破あるけど言えねえww
おれ言いたかったのは「ちょっとこの回路みて」って言われた
外注に出したものらしく年配の人だと・・・
数個のですくりでなんで動くのかわからず組んでみた
「なるほどwwwすげえwww」
汎用性・入手良し・コストもおk
でICに頼る設計に反省、おれやってんのお絵かきだわと…
昔もくそも経験ある人は手数多いわって尊敬しただけ
んで基板もケーブルも全部リターンパスだろ
パラってりゃチップゲート同士いっせーのせでそっち合わせ
80芯で多すぎとか一部言われてたのはそれ
いい・わるいじゃないの、信号になの?電源になの?
ごっちゃにこもんってた人いたから
ああもうwwお風呂wwww
おわったの?なんでもこいや! 初心者スレ行ってすげえ人に教わってくるっ!!
言葉悪いよね、整合とかコントロールとか 「なんのため目的」と「値いくつ」って別だと思うの
オハヨーゴザイマス! 昨夜は風呂に入れましたか? 中にはイライラして眠れなかった人がいるかもしれないけど、 チャント起きれましたたか? 今日も一日ガンバッテください。 ところで、出来ればPCIやISA、SCSIやIDEではなくて AVRの話が聞きたいです。 よろしくお願いします。
要約すると、『AVRだけではこの先暗いよ』と老人が言っている訳だが?
>>744 > 高速で高集積度のC-MOSデバイスを使えば、
32bit 33MHz PCIってCPLDで組めるぼど簡易なバスなんだよな。
ロジック組んでピン間の遅延がそれだったら、実力で動きそうだ。
つまり、高速で高集積デバイスなんかイラネ
爺さんは過去しかないから聞き流しや歩み寄りやスルーと言う概念が無い
754 :
774ワット発電中さん :2013/09/11(水) 10:07:14.26 ID:W/XRRS6L
化石にしがみ付いての昔語りスレですかね?
>>741 >以下略
ってそこが大事なんじゃないの?
DIOW-とかDIOR-はグランドで挟まれてる。データバスは必要なタイミングに
確定すればいいわけで。
>>755 そうだけど、ご老人のアルツの訂正目的だから勘弁してくれw
アルツは放置でAVRに戻ろうぜ。
一旦はスルーしたのに悪かった。すまん
マルツがどうしたって?
マルツパーツ館 検索結果 AVR … 173件 xmega … 0件 attiny … 13件 atmega … 25件 こんなんでますたw
tiny261/461/861にあるような高速タイマー持ってるmegaあれば、教えてください。 20pinじゃ足りないので。
メーカーサイトにプロダクトファインダーあるよ 好み似合うやつ選びな
xmega が 仲魔にしたそうに こっちをみている
パーツの産直: 秋月 パーツの八百屋: 千石 パーツのスーパー: マルツ
マルツはコンビニだろ…。
共立のことも覚えてあげてください・・
秋月は雑貨屋じゃね?
雑貨屋って聞くと割高なイメージしかない
長文失礼します
スレチでしたらすいません!
パーツ屋で安く売られていた制御ICなどがついた6ピンで制御できる16×32のマトリクスLEDを買ったのでAVRで制御してみようと思っています。
それについて質問させていただきます。
ttp://blog.digit-parts.com/archives/51872590.html PDFです↓
ttp://blog.digit-parts.com/pdf/dot32x16.pdf モジュールとはいえ16×32のデータを保存してダイナミック制御までやってくれるわけではないようで
リアルタイムで自分でデータを送信してダイナミックで点灯させなければならないようです。
表示するデータは「SIN_1」「SIN_2」「SIN_3」の3bitをCLOCKでシリアルで送信します。
SIN_1は縦の16bit
SIN_2は横の32bitの左半分の16bit
SIN_3は横の32bitの右半分の16bit
に対応していて、CLOCKにパルスを送ってビットシフトして16回で一列のデータが送信できます。(3つともCLOCKは共通しています)
縦横が同時にビットシフトされるためパルスを送るごとに左下から右上に送信したデータが移動していきます。(左右の16×16を別々に見て)
なので基本的にSIN_1(縦)は16bitの内、Hになるのは1bitのみです。これを順にずらしていくことでダイナミック点灯します。
LATCH端子はHighのとき表示データを保持し、Lowのときは常に制御IC内部のデータを表示に反映します。ダイナミック制御なので
保持→次の列のデータをセット→反映、保持→次の列のデータをセット、のように多用すると思います。
ENABLE端子はHigh時に無条件に全LEDを消灯します。
このような仕様になっているので上から下に32個ずつダイナミック点灯していくプログラムを書いたのですがうまくいきません
どのような原因が考えられるでしょうか・・・?
#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define CLOCK_ON PORTB = PORTB || 0b00000100 //CLOCKピンH #define CLOCK_OFF PORTB = PORTB && 0b11111011 //CLOCKピンL #define ENABLE_OFF PORTB = PORTB || 0b00100000 //表示ON #define ENABLE_ON PORTB = PORTB && 0b11011111 //表示OFF 無条件に全LEDをOFFに #define LATCH_ON PORTB = PORTB || 0b00010000 //制御IC内部のデータをマトリクスに表示する #define LATCH_OFF PORTB = PORTB && 0b11101111 //表示状態保持、制御IC内部のデータを編集してもマトリクスの表示が変わらない unsigned volatile long x[16];//試験用の表示するデータを格納 ISR(TIMER0_COMPA_vect){ unsigned static char i = 0;//横何個目かをカウント unsigned static char j = 0;//縦何列目かをカウント LATCH_ON;//保持モード(保持するのは表示の状態なので制御IC内部のデータは編集できる) if(j == 16)j = 0;//16列表示が終わったら一番上の列に戻る for(i = 0; i < 16; i++){ PORTB = (PORTB && 0b11111101) || ((0b00000010 && (x[j] >> i)) << 1); //試験用データの0bit目〜15bit目をビットシフトして順番に送信 PORTB = (PORTB && 0b11111011) || ((0b00000100 && (x[j] >> (i + 16))) << 2); //試験用データの16bit目〜32bit目をビットシフトして順番に送信 //表示する列だけON if(i == j)PORTB = PORTB || 0b00000001; else PORTB = PORTB && 0b00000001; //クロックパルス送信 CLOCK_ON; CLOCK_OFF; } j++;//次の列に移動 //データ更新後、保持モードに切り替え LATCH_ON; LATCH_ON; } int main(void) { DDRB = 0b11111111; //PORTBを出力に設定 //タイマー設定 約200msごとに割り込み TCCR0A = 0b00000010; TCCR0B = 0b00000101; OCR0A = 200; TIMSK0 = 0b00000010; sei();//割り込み許可 char k; for(k = 0; k < 50; k ++){//内部、表示データをすべて0に初期化 PORTB = 0b00111000; PORTB = 0b00110000; } ENABLE_ON;//表示ON //試験用の表示するデータ x[0] = 0b1111111111111111111111111111111; x[1] = 0b1100000000000011100000000000001; 〜 x[14] = 0b1000000000000011000000000000011; x[15] = 0b1111111111111111111111111111111; while(1){ ; } }
>>767 > プログラムを書いたのですがうまくいきません
何がどう「うまくいかない」のか、コンパイルエラーなのか、焼けないのか、少し動作するけど期待通りの結果でないとか、現象をキチっと書けよ。
まさかソース中に全角空白を使っているとかでは無いよな?
>>769 申し訳ありません
コンパイル、書き込みはできますがLEDはひとつも点灯しません
ICSPで書き込みしてるためライターとモジュールの端子がかぶっていて、書き込みが終わるとLEDがすべて点灯してしまうので
最初の初期化するfor分を入れています。
その初期化には成功していて、LEDはちゃんとすべて消灯できているんですが
その後のタイマ割り込みによるデータ送信には失敗してるようでLEDは消灯したままです。
プログラムメンに問題があると思われます。
論理演算子とビット演算子を混同してないかい PORTB = PORTB || 0b00000100 これだとPORTBに入る値はtrueかfalseになっちゃう
>>771 Cの初心者だと結構嵌るよね&&とかも
まぁ PORTB = PORTB | 0b00000100だったら、普通
PORTB |= (1<<2) か
PORTB |= _BV(2)
って書くかな?
>>771 ありがとうございます。
やってみたところ表示が正しくありませんがLEDが点灯しました!
たぶんあとはデータの演算をミスってるだけだと思うので自力で何とかしようと思います。
>>772 演算子をまだおぼえてなくてバカ正直な書き方になってしまします・・・
書き方参考にさせていただきます。
>>722 if () の中を ( a = b) とかって書く間違いは多いけど
逆は珍しいな。
#define FALSE 0 #define TRUE (!FALSE) のWinAVR定義だと全部Highになっちまうのかな? #define true 1 なんて定義もたまにあるが・・・
#define の行で = と書いてるのもおかしい 変数の代入の書き方をするとこではないよ
defineをマクロとして使ってるだけだろ よくやる
おお、スペースあったのか 見落としてたわスマン
AVRを勉強しようとATMEGA88-20PUを買ってきたばかりなのですが、入り口と思われるところで行き詰ってます 7seg LEDで数字を点灯させたいのですが、下記のプログラム(0を点灯)を書き込むと点滅してしまいます while(1){PORTD = 0b00111111;} しかし、while(1){PORTD = 0b00000001;} のように1segのみだと点滅せずに点灯します。 2つ以上のsegのポートをhighにすると点滅する(2つ以上いくつでも見た目の点滅速度に変化はありません) ようなのですが、原因がさっぱりです。 原因もしくは原因を探す手がかりを教えて頂けないでしょうか
LEDにつける抵抗を各1k程度に増やしてみてください。
オームの法則から勉強したほうがいいな
電流流しすぎでリセットしちゃってるって事かな?
電源なんだろねw DDRDで出力にしてんのかね つか初めは2313で何個か飛ばしたほうが財布は痛くないが・・w
何オームの抵抗使ってるの?
ダイナミック点灯にしようず
VCC GND間に 0.1μF のコンデンサいれれば解決しそうだが
>>785 俺もそう思う。
そのwhileする前に時間待ちのループを入れて点滅周期が変わればリセット確定
ATmega88の絶対定格(1ポートあたり40mA, 前部合わせて200mA以下)は越えてないよね?
>>776 TRUEはC言語的には非FALSEと決まっとる。値で見ると処理系によって-1の場合もあれば1の場合もある。最近はほぼ-1だが。
!FALSEにせずに勝手に1固定でdefineするやつは信じちゃいかん。色々バグってる事が多い。無知すぎる。
>>792 C99規格とかJIS何とかではヘッダでtrueは1に定義されている。
linuxやBSDでも1。
-1になる処理系は知らない
796 :
782 :2013/09/16(月) 06:20:25.31 ID:tviCnOPE
ありがとうございます。 電源は9V電池から作った5Vを供給、各LEDには1k抵抗をつけています。 DDRDで出力にしています。 しかし、絶対定格を意識せず電流量は調べていませんでした。 ちゃんと計算、計測して、抵抗・コンデンサをいじったり、while前のループを試してみます。
7セグコモンはトランジスタかまさないと、avrの電流定格は簡単に越えるんじゃなかろーか。 燃えはしないだろうけど、ポートが潰れるな。
>>792 true と判断する値 ⇒ 0 以外
と
true と判断した値 ⇒ 1
の区別がついてないだろ
>>792 極論すれば、ニモニックで確認すべき、というなら理解。
>>796 まさかツェナーダイオードで5V作ってるとかじゃないよね。
>>788 去年リハビリで電子工作を始めたころに
4桁7セグをスタティック点灯させようと
秋月の「高輝度」7セグ(カソードコモン)を4個と
8ビットシフトレジスタNJU3711を4個を
ユニバーサル基板上につなげて
attiny2313で制御してみた
7セグの制限抵抗は、何も考えずに
昔発光ダイオードを使ってた経験から200Ωにしていた
1桁だけだと無事点灯して数値も表示出来た
2桁を回路的に接続すると点灯していたけどなんか暗い
3桁点灯するとマイコンがバグりはじめ
4桁だと全体にうす暗く、やがて電源が落ちた
電源の7805につけた放熱器が触れないほど熱くなっていた
7セグのVfが1.8Vとして、200Ωだと、(5-1.8)/200=16mA
8個×4桁で512mA、確かにattiny2313の電流供給能力を超えている
試してみると、この高輝度7セグは1kΩでも十分光るので
制限抵抗を1kΩに変えたら正常になった
>>794 小学生の頃に遊んでたMSX-BASICでは、Trueは-1だったよ
0がFalseなんだけど実際にやってみると
PRINT not(0)
-1
OK
大学の頃に使っていたQuickBASIC 4.5でも
print not(0)
-1
>>801 LEDの電流はNJU3711に流れているだけで、マイコンには流れてないでしょ。
Tiny2313の制限ではなく、7805の熱制限。
>>802 C と Basic の違いぐらい理解しようよ...
あと、Basic の Not( ) はビット演算
>>7 セグの制限抵抗は、何も考えずに
過去に実績のある回路ならともかく、初めての回路なら何か考えた方がよい。
>>電源の7805につけた放熱器が触れないほど熱くなっていた
入力電圧と回路の消費電流を考える→レギュレータの発熱量を考える→放熱器を考える。
ギャンブルでは無くてリハビリの電子工作ならなら、
是非、考える習慣を身につけましょう。
レギュレータに放熱器つけずに焼いちゃうのはよくある話だよな 許容損失ってデータシート読んでも初心者には分かりにくい項目だし
よろしい。ならばスーパー三端子だ!
~と!の違いを認識してないと&と&&あたりを誤用して嵌まるよな
>>806 シリーズレギュレータの損失って
(入力電圧ー出力電圧)×流している電流
これが全部熱になるから堪らん
しかも7805なんかは最低でも2V差をつけなきゃいけないから
電池4本じゃ足りないし・・・
(最近はLDOタイプしか使わんなぁ)
つ スイッチングレギュレータ
>>809 アナログ回路が混じっていると
躊躇するんだよな
AVRは、スリープさせときゃ良いとして
電源からのノイズがシャレにならん
xmega使ってるひといますか?これのAD変換部です シングル・差動、結果いまひとつで気になってます。 実質どうのという程でもないんですが… うまく言えませんがそんな印象持った人います?
>>767 です。皆さん回答ありがとうございました。
おかげでダイナミック点灯で正しく表示することに成功したのですが、順送りが遅すぎて肉眼でも激しくちらつきます。
割り込み周期が遅いのかと思ったのですが、いくら短くしても変わりません・・・(極端に遅くすると普通に悪化します)
割り込み時の処理は
for(i = 0; i < 16; i++){
PORTB = (PORTB & 0b11111011) | ((0b00000001 & (x[j] >> i)) << 2);//x[n]の左からj番目だけを抽出→PB3に代入
PORTB = (PORTB & 0b11111101) | ((0b00000001 & (x[j] >> (i + 16))) << 1);//x[n]の左からj+16番目だけを抽出→PB2に代入
if(i == j)PORTB = PORTB | 0b00000001;
else PORTB = PORTB & 0b11111110;
//クロックパルス送信
CLOCK_ON;
CLOCK_OFF;
}
(約1khzで割り込み)
このようなfor文を含んでるのですがこれが原因でしょうか?
x[0〜15]は32bitの変数です、8bitにかえてみたのですが変わりませんでした。
for文の繰り返す回数を減らしてみるとちらつきが収まりました。i < 10くらいから目立ちます。
ATTINY2313で内部1Mhzで動かしてます。単純な処理不足でしょうか?
ヒントお願いします。
>>813 >割り込み周期が遅いのかと思ったのですが、いくら短くしても変わりません・・・(極端に遅くすると普通に悪化します)
割り込み内部の処理が終わってないっぽいな。
1MHzだと1000サイクルしかない。
割り込みじゃないほかの処理も考えれば100サイクル以下が理想だろう。
>>812 割り込みの中の処理が重た過ぎる気がする。
>>813 ありがとうございます。やはり処理不足ですか・・・、できれば内部クロック周波数の変更はしたくないので・・・
プログラムに工夫が必要そうですね
といってもどうすればいいのだろう・・・
MEGA88で動かしてたときのコードをはってしまいました、「PORTB」ではなく「PORTD」でした。
割り込み処理はフラグの上げ下げで mainで処理実行はダメかな
クロック数優先で直すと、こんな感じかな?
x[_] → x_h[_] (上位16bit) , x_l[_] (下位16bit)に分離しておく
----
c=0x80;
for(i = 0; i < 16; i++){
//x[n]の左からj番目だけを抽出→PB3に代入
if ( h_h[j] & c ) PORTB |=0b00000100 ;
else PORTB &= 0b11111011;
//x[n]の左からj+16番目だけを抽出→PB2に代入
if ( h_h[j] & c ) PORTB |=0b00000010 ;
else PORTB &= 0b11111101;
c = c
>>1 ;
if(i == j)PORTB = PORTB | 0b00000001;
else PORTB = PORTB & 0b11111110;
//クロックパルス送信
CLOCK_ON;
CLOCK_OFF;
}
>>811 xmegaのAD使いまくってるけど何がどうおかしい?
正常に使えてるよ。
オフセット校正ちゃんとしてる?
変換クロック速すぎて結果がボケてない?
>>817 c=0x80; → c=0x8000;
>>814 ありがとうございます。
>>816 なるほど!ならそのままwhileにコピペで解決
かとおもいましたが
そもそも1khzの割り込みに間に合ってなくて、つねに処理してる状態なのでwhileに移したところで同じでした・・・
実用化する際は常に表示するデータは変化していてリアルタイムで処理するのは避けられませんし
クロックあげるほかないでしょうか?
コンパイルされたアセンブルコード見ると分かるけど
本当にビット演算になってるんじゃないかな。
>>772 さんの書き方に変えた方がいい。
if(x[j] & 128) PORTB|=0b00000100;
else PORTB&=0b11111011;
ってベタ書きなら早いかも
>>812 ちらつくのはラッチ信号ほったらかしてるからだろ
伝送中は前回の表示ラッチしておいて
伝送完了したらラッチパルス入れて表示更新すりゃいいじゃないか
ああすまん、カラムもラッチ更新だから表示全体保持じゃないのか。 メンゴメンゴ
>>822 いや、表示は正しいのでそれはないと思います。肉眼で順送りが見えるので遅いだけかと
LATCHほったかすと表示自体がぐちゃぐちゃになります。
プログラムが一部だからわからないけど、割り込みの入口と出口に 何か出力をつないで、オシロで測れば割り込みにどれくらいかかってるか わかると思う。でも、何かそれ以前のような気がする。 割り込みを使わないでテストパターンを表示してテストしてみた?
最適化オプションも確認したほうがいいかもね。 -o3になってるかな?
割り込み毎に1ラインずつの表示にしないと点灯時間が短すぎてチラついて見える
資料にはカラム・コモン同時って書いてあるけど コモンにラッチが入ってないなら ENABLE(H)LATCH(H)→カラムデータ送り→LATCH(L)→コモン送り→ENABLE(L) で表示するんじゃないかな あとx[]の格納方向を縦横変えたほうが効率的かもしれない
データ構造を考えるのは重要だね
以下はイディオムだからとっとと覚えよう。 REG |=(BIT<<1); REG &=~(BIT<<1); ビット演算は単ビットと複数ビットで命令と命令数が変わる。 1命令のつもりが複数になっている場合がある。 ハンドラ内でループで配列参照なんかするな。 ループは全部展開して配列のインデックスを即値で書くとほとんどの場合使用レジスタが減る。 .lss読む習慣を付けよう。
イディオムくらいちゃんと覚えようよ…
2313のような非力マイコンで多少凝った事をやりたい場合はgccのABIを理解して ハンドラをnakedのインラインアセンブラかアセンブラで書いた方がいい
REG |=(1<<BIT); REG &=~(1<<BIT); おれはもうだめだ 後は任せた
俺ならUSARTのMSPIとUSIで2列のデータとクロックを自動送信するけどな
_BV()使わんのかい、まあいいけど。
>>817 わざわざありがとうございます・・・
if文ってこう使うんですね、とても参考になります。
>>821 書き直しました。ありがとうございます。
>>825 割り込み自体はちゃんとできていますが、処理が間に合ってません。
割り込みを使わずWhileだけで動かしても同じでした。
>>826 -Osになってます
>>827 LATCH信号により、表示は維持されるので1ラインずつ表示できてると思います。というか割り込みを遅くして目視で確認しました。
>>828 LATCHでちゃんと表示データ保持すればENABLEは常に(L)で問題ないと思うのですが・・・
16bit,16bit,16bitの三組が16bit,32bitになってしまいますがこっちのほうが効率がいいのでしょうか・・・?
>>836 if文は ()の中が 0以外なら 真、0なら偽、なので、わざわざ 0 と比較する必要は無い。
コンパイラーによっては最適化してくれて、((x_h[j] & c) != 0) と書いても、
同じ結果になるので、その場合は真面目に比較した方がソースが見やすくなる。
>>836 >>828 です
LATCHで表示データは保持されるけどコモンは保持されないっていうモジュールだった場合の話ね
そのときはコモンのif判定をforから出せるから多少軽く出来るかな
どっちも保持されるなら今みたいにするしかないね
データの縦横はちゃんと変わってたねゴメン
839 :
774ワット発電中さん :2013/09/18(水) 03:20:32.10 ID:Cbu7ss/n
asm("SBI REG, BIT"); asm("CBI REG, BIT");
>>830 仰るとおり、メモリを盛大に消費しておりました。
左と同じものは表示できるのに、右半分の表示がどうしてもおかしい、よく見ると
Data: 136 bytes (106.3% Full)となっておりました・・・
試験用の16bit×32個のデータ最後のほうが格納できてなかったようです。
mega88としてコンパイルすると6.4%、こんな違うモンなんですね・・・
書き方をいろいろ参考にさせていただいたおかげで処理面は軽くなりちらつきは一切なくなりましたが
今度はメモリ不足です。
lssファイルをよんでみましたがおそらく一命令でできてると思います。
ためしに割り込みの処理をすべて消してみましたが101.6%Fullとあまり改善はされませんでした
x[0〜31]を消すと
Data: 1 bytes (0.8% Full)
とスッカラカンになりました、16bitが32個なので64バイトでしょうか?SRAMは128バイトなので半分のはずですが満タンになってます
ためしにx[0〜15]にすると使用率も半分程度になりました。
表示するデータを格納するためのメモリなので節約する方法は半分に分けて送るとかそれぐらいしかないでしょうか?
ISR(TIMER0_COMPA_vect){
if(j == 16)j = 0;
c = 0x0001;
LATCH_OFF;
for(i = 0;i < 16;i++){
if(x[j] & c){MPORT |= 0b00000010;
}else{MPORT &= 0b11111101;}
if(x[j+16] & c){MPORT |= 0b00000100;
}else{MPORT &= 0b11111011;}
if(i == j){MPORT |= 0b00000001;
}else{MPORT &= 0b11111110;}
CLOCK_ON;
CLOCK_OFF;
c = c << 1;
}
j++;
LATCH_ON;
LATCH_OFF;
}
>>832 20個ぐらい余ってる2313を見て思うのは
「これを活用するぐらいならattiny861やatmegaを使った方がいい」
です。
それでも使いたい場合でも、メインで使うのは苦しいので、例えば
7セグ用のダイナミックドライバーに使えないかとか考えるかもしれませんが
制御線をどうするかが問題になります
I2Cを使う場合、AVR StudioだとUSIベースのI2Cドライバを独自実装する必要があります
ArduinoIDEだとTinyWireS.hがありますが、どちらにしてもメモリーオーバーか
良くてギリギリです
じゃあ格好悪いけどシリアル接続でUSARTでいこう!とか言ってもけっこうギリギリで
カジュアルに何かしようとするとすごく制限が多いです。
実は7セグの4桁ダイナミック表示だけなら、12ビットのシフトレジスタ(NJU3714など)
があれば可能です。しかも制御線は3本で済みます。ダイナミック表示の実装は
attiny861やatmegaでやる必要がありますが、そんなに手間でもありません。
2KBytesというのは非アセンブラでプログラミングする上でネックだと思います
2313売れば良いんじゃね。
アセンブラでカリカリやるのも楽しいよ。 ってか、それを言ったらオイラの90S1200なんてどうすりゃいいのさ!
tiny2313ではメモリ不足より、どちらかというとI/O点数不足を感じる事の方が多いかな。 まぁ、これこそ人それぞれ、作る物によると思うけど。 (ちなみに私はアセンブラ派)
2313はvusbで遊んだりI2Cブリッジにしたり使い方次第だよ
2kバイトってのはアセンブラで書くには手頃なサイズと思うんだけどな。 というか、Cで書いてたらクロック単位でパキっと合わせるの面倒じゃん。
>>843 さすがに、AT90S1200は…
俺も最初に使ったのは1200だったけど
AT90S2313使って以降は二度と使うことはなかったな
>>846 だな。
ピン数は違うが、Tiny15に近い。
外付けオシレータが要るのが面倒っちゃー面倒だが。
>>837 > if文は ()の中が 0以外なら 真、0なら偽、なので、わざわざ 0 と比較する必要は無い。
わざわざそんな変な癖つけさせるなよ。
最適化しないコンパイラなんてほぼないんだし。
在庫の2313が1個死んでた。 変なヒューズビット飛ばしたかなあ。 導通スポンジに挿してあったのにぃ。 HVプログラムで復活すっかな。
やり方教えて
Delayの時間がおかしくて困ってます tiny2313を内蔵8MHz使ってるんですが500msのDelayを入れても大体3〜4秒くらいになってしまいます? なんででしょう?例えば以下の様なLED点滅プログラムでもそうなります。 #define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { DDRA = 0xff; while(1) { PORTA = 0b00000001; _delay_ms(500); PORTA = 0b00000010; _delay_ms(500); } }
ヒューズビットのDIV8を確認しる
>>853 CKDIV8にはチェックが入ってる
で,SUT_CKSELはINTRCOSC_8MHZ_14CK_65MS
になってる
動作クロックって8MHzでいいんだよね?
>>857 クロックのプリスケーラ。1/1から1/256まで8通り設定可。
データシート(バージョン8246B)なら6.3 System Clock Prescalerとp33の表。
>>858 へぇー
プリスケーラか・・・
2313にはCLKPSは無いのかな
ヒューズビットになかった
>>859 フューズじゃなくて普通のレジスタ。Aのつかない2313にもある模様。
#define F_CPU が20MHzとかになってるとかは?
>CKDIV8にはチェックが入ってる つまり1/8になってるんじゃないか デフォなんだから外さないとだめだよ
そもそも、_delay_ms なんて使うなよ。
>>863 そうなんだ!
ありがとう,知らなかった
前やったときはなんで大丈夫だったんだろう
実は最近PICから乗り換えたばかりでいまいちよく分かってないんだよね
>>864 _delay_ms以外にもいい方法があるの?
500mSを8倍で4秒。
大体あってる、2313も
>>852 の点滅実測も
>>867 ちゃんと測ったわけじゃなくて,適当に数えただけだけどねw
Lチカくらいなら_delay_ms使ってもいいじゃないか。 F_CPUに合わせて時間生成してくれるんだしお手軽だよ。 カウンター/タイマーユニットくらい使えるようになれって言いたいんだろうけどね。
つまりはTCCR0Aとか弄ってPWMでやれって事? LEDを交互に点滅させるのにも使えるの?
カウンター/タイマーユニットってのは時間計ったりにも使えるんだから 自分で_delay_ms相当の機能を書くことは出来るよね。 でも、_delay_msで0.5秒待ってる間は何の処理も出来ないんだよ。 0.5秒経過するまで別の処理したいってなったらどうすんだい? だからユーティリティーに頼らず勉強してタイマーいじれるようになりな っと言いたいのではないかとエスパー予想
それよりavr-libcの_delay_msや_delay_usは結構神経を使う関数だよ。 ちゃんと注意書き読んでる? > The maximal possible delay is 262.14 ms / F_CPU in MHz. > > When the user request delay which exceed the maximum possible one, _delay_ms() provides a decreased resolution functionality. > In this mode _delay_ms() will work with a resolution of 1/10 ms, providing delays up to 6.5535 seconds (independent from CPU > frequency). The user will not be informed about decreased resolution.
delayを使うような用途は単純なロジックでしょ そこまで神経質にならなくても… まあ注意するのは良いことだと思うけど100均の商品化って説明を熟読するような感覚だな。
>>872 よんでるよ〜
6秒ちょいも使えれば十分
>>871 なるほど,何もしないならいいけど,裏で何かしたいならタイマー使うしか無いのか
>>870 Vcc-R-[A LED K]-PWMピン-[A LED K]-R-GND
でええんと違う?
機能確認くらいならディレイは便利。 目的と手段のマッチングやね
>>876 出力ピンって低インピになってるんじゃないの?
それやって大丈夫なの?
881 :
864 :2013/09/19(木) 21:46:36.76 ID:cGKqcbgl
>>871 タイマー弄るのは当然なんだけど、微妙に違う。
タイマーは、限りあるんだから、LEDの点滅なんかに使うのは勿体無い。
1〜10m秒位の一定時間毎に割り込みを掛けて、タスクを起動させる為に使えば
ボタン入力も、LED点滅も、LCD表示も、通信も、全てタイマーを使わずに決まった時間で起動出来る。
LEDが点滅してる時は、ボタン入力が出来ないとか、通信出来ないとか、ド素人が組んだっぽいモッサリ動作とおさらば出来るぞ。
そして、AVRにマルチタスクモニタやOSは必要か?と言う激論が始まる…
明らかなマイコン初心者相手に飛躍しすぎだ
RTOS知らないことを見下して楽しいか?
何人か言ってるがLチカ程度なら_delay_msでもよかろーが
>>871 みたいな言い方のほうが次はタイマーいじってみようかって気にならぁ
ああ、またこのスレの悪い流れが始まる予感・・・・・・
みんなありがとう とりあえず,解決できて良かった 言ってること,よくわかんないけど頑張って勉強するわ
>>883 別にRTOS使えとは言ってない。
簡単なタスクコントロールで十分。
Lチカ程度なら_delay_msで十分とか言うが
い つ ま で L チ カ や っ て ん だ よ w
マイコンで重要なのは、アルゴリズムを考える能力だ。
_delay_msなんか使ってるうちは進歩しないと思っとけ。
最後の1行で十分なのにな
>>871 はそれを分かりやすく先に言ってるだろうに
結局見下して悦にいりたいいつもの人だろ?
ま、質問主が〆てくれたんでおひらきだな
>>886 >
>>871 はそれを分かりやすく先に言ってるだろうに
言ってない。
単語は知ってるのに、知ってるだけで理解出来てないんだな。
基本的に割り込みは呼び出されるまでが遅いし前後の命令や禁止期間でジッタが発生する 究極的には命令サイクル計って時間内に収める 実は監視対象が数個ならこの方法が正解に近い RTOSはその辺を自動でやってくれるだけの事
そもそも_delay_msに500とかはそのまま入らなかったと思うんだが 入れる値はF_CPUに依存してたと思う
>>888 >RTOSはその辺を自動でやってくれるだけの事
そんな事しねーよw
>>888 > RTOSはその辺を自動でやってくれるだけの事
RTOS に期待し過ぎ (w
RTOS と言っても単なるソフトだよ。
>>810 > アナログ回路が混じっていると
たかが DDコン。習うより慣れろ。
> 電源からのノイズがシャレにならん
作り方次第。
DDコンは出力電流が少なければノイズは減る。
また、一気に減らしたいなら後段にLDO噛ませばいい
>>841 > じゃあ格好悪いけどシリアル接続でUSARTでいこう!
少ないリソースでなんとかするのは、スマートなだよ。
USARTでも1:N通信は出来るし。
もうね、Arduino 使ってればいいと思うの
私も
>>885 簡単なタスクコントロールで十分。
に賛同するけど、そう言えば最近、「RTOSは最高」さん見ないね。
自分でディスパッチャとか作れるようになったのかな?
ここを読んでいると、
<人間は自分の能力以上のプログラムは作れない>
を痛感する。
> ここを読んでいると、 > <人間は自分の能力以上のプログラムは作れない> > を痛感する。 どうかな? 不必要な細かな仕様にこだわってる自称高スキルの人が多いように思うけど。 Lチカにdelayを使っててもその時点ではそれしか知らなくても他の機能にそれ以上のコントロールが必要なら学ぶでしょ。 自称高スキルの人は人が必要に応じて成長や勉強すると言うことを忘れてるんじゃないかな? 能力は伸ばせるんだよね。
能力は謙虚な努力によってしか伸ばせません。
> 能力は謙虚な努力によってしか伸ばせません。 能力は必要に迫られればそれなりに伸びますよ、生物の進化の基本 犬小屋作るのに建築士レベルの設計を学ぶ人は少ないと思うが どうしても家を自分で建てる必要が出来れば勉強するでしょ。 ここには犬小屋作りたい人に強度計算をしらないのw とか言って嘲笑してる人が少なくない。
せめてイナバの物置くらいの作りたい
姉歯さんの設計した建物はこの間の地震でも何でもなかったんでしょ?
姉歯さんは優秀な設計者だったのが証明されちゃったよね、 表面的な基準準拠より、考え抜いた節約設計の方が実は強かった 強度とコストの最高のバランスを実現してたわけだよね。 まあ基準ってのはボンクラが設計しても大丈夫なように多めにマージン取ってるわけで 設計優秀なら本来それほどの過剰な部材は不要なんだよね。
>>901 まあねー。
性能規定を多少割っても、即危険ってわけじゃないからな。
施工のレベルでも多少は強度がばらつくわけだし。
一見動いてるように見えても、中はズタボロってのは、ド素人にありがち。 必要に迫られて作るだけだと、行き当たりばったりになりがち。 普段からの弛まない努力をしている奴が伸びる。
ボンクラ・ズタボロ… 文章からどうしても2ちゃん的なの感じない、人に対して憎悪 隙間のレスにボケツッコミ以前、「目に入る」と気分落ち込む… ありがとうAVRスレ
趣味前提なら マイコンでやりたいことがあるからマイコン使うんであって お恥ずかしいコードだろうがなんだろうが 目的達成できりゃあなんでもいいよw なんかの精神修行やりたいならどうぞご勝手にw
傲慢な努力でも伸びることは伸びると思うよ。
ボンクラと言えば コンピュータ将棋のボンクラーズの富士通の人が CPUなんか使ってるから、いつまでたっても人間に勝てない いっそのことFPGAにしちゃえば、クロック無関係に高速に解ける これなら十分に人間の脳に勝てるとかブログで書いてた 確かにノイマン型コンピュータを人間の脳に近付けるより FPGAを使った方が早道かも
DeepBlueが専用IC詰んでたとかいう話をどこかで聞いたような気がするけど、 同じような話なのかねぇ?
どうだっけか 現在の配駒から取りうる全ての選択肢で価値のある攻撃ほどポイントを付与し(防衛要素も含めて)、 樹状図を描いて最大限のポイントを得るように次手の選択ロジックを構成したってやってたような希ガス。
クロック無関係ってことはないと思うけど・・・
>>904 ドシの人だと思うけど、
むしろ一部プロの方が行き当たりばったりな事をしてる。
自称組み込み出来ますやります、という畑違いの所から来た人で
そういう組織があった。
>>908 ノイマン型コンピュータと人間の脳の処理方式は対極にあると思うし、
ノイマン型がどんなに発展しても脳には近づけないと思う。
FPGAの方が向いているのか、う〜ん、私には分かりまっしぇん!
>>914 ノイマン型の処理系で実装した非ノイマン型のアルゴリズムをどう定義する?
まずはチューリングマシンから
>>908 FPGA にもクロックあるし、なんか魔法のデバイスとでも思ってるのかな? (w
>>885 賛同だが、AVR 8ビットごときの素人スレで言ってもはじまらん。
20年カーニハン・リッチを座右の銘にしていても、ハードのテストプログラム程度しか作れない連中と同じように
上を望まない連中に何言っても無理。
>>917 FPGAでも、クロックを使わない構成にいくらでも出来るんだが?
あれ? ここなんのスレだっけ?
>>920 クロックなしで構成できる FPGA 教えて。
FFなしの組み合わせ回路 RS-FFは使ってもいいのかな? AtmelもFPGA作ってるよな。 AVR内蔵型もあったような。
>>923 FF使っても非同期は非同期だよ。
非同期バスのアドレスやデータの確定を考えればいいよ。
ノイマンと同期は関係ないし 非同期のARMコアもあるし。 そもそもスレチですしおすし
非同期のデータ駆動型か・・・
非同期の FPGA とか ARM コアとか言うわりには、具体的には出てこない件。
非同期の FPGA とか ARM コアとか言うわりには、具体的には出てこない件。
すまん、エラーで二回書き込んでしまった。
>>933 リンク先がFPGAの非同期回路と何の関係もないんだが
出来るかどうかと、やって意味があるかどうかは別問題だよな…
936 :
774ワット発電中さん :2013/09/22(日) 08:48:04.42 ID:EkopUYHd
これは宗教じゃないんですかね?
>>934 非同期のARMプロセッサも話題に上がってなかったか?
>>929 具体的というより、常識。
グ グ レ カ ス!
AVR でHIDなどの小さなUSBデバイス作るとき、何かオヌヌメありまつか? AT90USB1287は高級すぎるので、もすこし小さくてSOPなのがあればいいなと思います
>>939 自己レススマソ。ググりますた。
SOPではないですが、Digikey見ると AT90USB162 一択のようです。$3.71はPICと比べるとちょっと高いでつ。
秋月でATTINYが50円からあるわけだが。
>>940 自分だけが使う趣味の範囲なら
attiny84 + 水晶 + V-USB
vusbでSPIやI2C使うだけならtiny45/85で動く けどクロックが内蔵RCだとUSBの認識が不安定だからお薦めしない
xmega16クラスで300円くらいか こいつらもUSBあるしそれでいいんでね?
xmegaだとUSBでも水晶要らないしな。
みなさん、ありがとうございました。 USBの選択肢もいろいろあるんですね。 まずは、水晶でvusb試してみます。
秋月でついに値上げキターッ ATTiny2313 ¥150- AT90S も買ってあげてね
>>946 そういえばFTDIのUARTチップも水晶不要だな。
AVRも全部不要にして欲しいな。
そのまえに、新チップが出ない悪寒が…
xmegaに32ピンのEシリーズなんて増えてやがる。いつのまに・・・・
バグをこっそり直したがらです キリッ
>>944 内蔵RCだとコールドブートのBIOSでの認識が結構失敗する
OS起動した後はあまり変わらんのだが
クロック校正がホストの同期信号に依存してるから
たまに糞信号しか出さないハブ経由な環境だと全く成功しない
秋月に、USB付きのAVR入ってる。 どうせ使わんだろうな。 tiny2313いきなり1.5倍かよ。とても痛い。
開き付きで値上げって珍しいな ついでに4313売ってくれよ
値上げとか信じられねぇ、あれか?安いのは利益が少ないから 付加価値が高くて利益の大きい製品に移行してくのか?
>>954 最近、ほかでも値上げあった。
「開き付き」でググったら、秋月がトップに来るの初めて知った
余剰品を安く手に入れられなかっただけだろ 800個使うけど1000個買ったほうが安い 余った200個処分しよう的なブツ
USB付きいいな。今度買ってこよう。 最近は328P-AUを使うことが多かったし、FT232とか必要なくなれば楽だし。 DIPじゃなきゃイヤンなんて俺は言わないよ。
しれっと秋月にxmegaが入ってる、やったー。 mega328と同価格で性能大幅うp、すらばしい。 …が、痺れを切らしてdigikeyで買った16d4がまだ手元に20ばかりあるんだよな。
秋月はいつまでA無しの2313売るつもりなんだ?
いいかげん入手きつくなってんじゃないの
>>959 遊びなら実験開発用エリアのID使えばいいし、その他HIDならIDゼロでも
いいんじゃなかったっけ? ← 読みかじりでいい加減な記憶
>>961 お、ほんとだxmega32D4がある。
でもこれUSBもDMAもDACもない残念なシリーズ・・・・・
>>962 まーそうなんだが、mega/tinyにくらべりゃだいぶ上等だし、
余計なモン載ってないだけ消費電力が低い(データシート見比べてないけど:-)と思えばいいじゃないか
# それに秋月クラスの量でAシリーズ輸入したら暗号機能まわりで面倒なことになりそうじゃないか。
AES/DESか? リールでAシリーズ買っても何にも言われないんだが・・
時計用とメインクロック用で二つの水晶をつけられるみたいだから それなりに使えそう
こいつはメインと時計のピンが共通だからどちらかしかつなげないんだ。 でも時計用水晶で内部32MHz発振器の自動校正ができるんだよ。
>>967 設定で
PR0 PR1 に XTAL
PE2 PE3 に TOSC
がいけるみたいな感じに読めたけど違うかな
>>967 PR0/1の他にPE2/3に付けられるぞ。
うお!リビジョン上がってピン切替の機能追加されてやがるw TWIE動かないのも修正されてるのか でも秋月のってどのリビジョンだろうなあ?
>>970 写真見る限り1310とあるから比較的最近のじゃないかい
バカな話だけど俺の持ってるリビジョンBはBOD設定を3.49Vにしてしまって動かないものがある ま、3.5V加えて書き直せばいいんだがそんな電源持ってないし作るの麺土井氏で放置中w それも修正されてるんだなぁ・・・・在庫捨てちゃおうかしらん
5-0.7-0.7=3.6じゃ駄目なのか?
あと、91:39で5Vを分圧とか。
それすら麺土井w ピッチ変換基板につけただけの実験用だから書き換えるだけのために ママ板作らないといけないからね。 それにダイオードはそう都合よく0.7V下がんないよ。 3.3VのレギュレータにSBDか抵抗分圧の下駄とかも考えたんだけどね。 どうせもうDシリーズは使う気がないからいいんだ。 DMA使う前提でライブラリ整備しちゃったからAとEがあれば幸せ 通信やタイマーの割り込み処理がほとんどなくなっちゃうから タスクの処理予測がすんげーやり易くなるんよ。
そりゃまぁ都合よう0.7下がるとは思っちゃ居ないが、 壊れてもダメモトなら適当にそれっぽく下がれば十分だろとおもってな。 EはXCLの出来がちょっと期待外れなのを除けば悪くない出来だな。 # EもDMA載ってないとは思うが… C/Dはこれといって特徴も無いかも知れんが、素直でいい子だよ。 ただし、C4のマニュアルはさっさと直されるべきだと思うが。 Aは嫌いじゃないんだが、メモリ量が大きめなものになるためもあって相対的に高コストなのが難点だと思う。 B? ナニソレ?
EのDMAはEDMAと名を変えて載っとるがね 16A4Uを主に使ってるんだが安いぞえ。足りなきゃ32に上げるけど。 8E5だと俺のカーネルではSRAMきついんよ。スタックなくなっちまう
お、気付かなかった。Thx>EDMA SRAMが足りないってのはまだ食らったことはないなー。 xmegaだとldでのSRAM1クロックペナルティが地味に痛いので、 ぎりぎりまでSRAMを使わないようにしたいんだよね。 そのせいでレジスタが足りないってのはあったけど。 VPORTのマッピング解除でGPIORが増やせればいいのに!と何度思ったことか…
>>975 そこら辺に転がっている基板から3.3Vを線で取り出すとか、
乾電池2個つなぐとか、好きにしろ。
AVRを専用IcなどなしでLANを直接つなげて通信できますか? まぁ入出力だけだし理屈ではできなくはないんでしょうけど、現実的にどうですか? NTP時計なんかを作りたいと思ってます
>>982 981は専用ICなしでと言っているんですが…
あれ?、どちらにせよパルストランスとか必要じゃね?
EthernetでなくともLANを構成することはできる
CANなら可能だわな。ただ、CAN上でNTPだのというのが非現実的だが、 接続相手を用意すれば一応完結はできる(かなり苦しい言い訳)。 Ethernet用のパルストランスは、パルストランス内蔵のRJ45ジャックを使えば 見かけ上で不要にできるから問題ないと思う。 あとはプロトコルスタックをどのように実装するのかだ罠。
UDPで流せばできなくもないかも… NTSC信号をPICと外付け抵抗だけで作ってる作例があったから、 不可能ではないと思うが、制作というより苦行だなw
RS422でがんばってAppleTalkとか…
ルーターのSIOに接続する
もう、PCに繋いじゃいなYO!
というか、時計ならJJY拾った方がいいんじゃ…
中華パッドで十分。
>>983 10BASE-T Manchester-code 2値 (2PAM)
100BASE-TX MLT-3 3値 (3PAM)
100BASE-T2 PAM5(Five-level Pulse Amplitude Modulation) 5値 (5PAM)
PAM : pulse-amplitude modulation (パルス振幅変調)
PHY無しで10Mbpsのパルス振幅変調が出来ると思ってるの?
マンチェスタ符号ならCODEC出来るのか?
>>986 パルストランス入りの RJ45ジャック で見かけ上外付け部品無しというならXPort使おうよ
一番現実的な解が出たw
XPort はプロトコルとか実装済みってのは魅力だけどいい値段するな イーサネット内蔵のマイコンだとPICがよさげ
PICはそういうのがいろいろあっていいなぁ ハイエンドになってくるとPICに乗り換えたほうがいいのかな ほかのハイエンドなマイコンより入手性とかもいいし 自分にとっては遠い話だけど
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。