AVRマイコン総合スレ Part41 at DENKI
[2ch|▼Menu]
[前50を表示]
600:774ワット発電中さん
19/01/23 18:38:28.80 HnGB1zOM.net
>>580
おまえらの世代はパンチカードだったかもしれんが、
入門者には画面と教えて問題ないだろ

601:774ワット発電中さん
19/01/23 20:40:03.41 RZdJJbBK.net
>>574
いまいち何やってるのかよく分からないけど
printf_UART()
なる関数を自作するよりかはスマートな方法なのね
たしかにprintf()で書いていた方が
UARTに出力するかLCDに出力するかそのときに応じて
ソースコードをほとんどいじらずに瞬時に対応できるよね

602:774ワット発電中さん
19/01/23 20:48:05.54 Oqfjg8Jf.net
>>584
マニュアルちゃんと読もうぜ
avr-libcのマニュアルに丁寧な解説付きで書いてあるぞ

603:774ワット発電中さん
19/01/23 21:54:34.91 lu5gAxuI.net
>>584
日本語訳のマニュアルも有るので一度熟読したほうが良いと思います
URLリンク(cega.jp)
URLリンク(cega.jp)

604:774ワット発電中さん
19/01/24 09:42:15.75 +PuFqesJ.net
URLリンク(elm-chan.org)

605:774ワット発電中さん
19/01/24 12:14:04.34 qPTBNqHl.net
久しぶりにマイコンいじった。mega3208ってやつ
これ8bitAVRコアにUC系のペリフェラルっぽいな

606:774ワット発電中さん
19/01/24 13:18:09.61 n3Rt6rFo.net
xmega系列になって従来のmega/tinyとちょっと変わったんだ。
UC系の周辺と揃えようって意思はあったんだろうね。
mega3208は名前こそmegaだけどxmega系の子孫なのよ。

607:774ワット発電中さん
19/01/24 14:33:52.73 Xou573Di.net
同じ処理を、3種類の環境でコンパイルしてみた。
cc5xは、制限の多いコンパイラで、ページを自分で割り付けなければ
ならないのと、固有の構文を多用する。
xcは、proバージョンでどのくらいコードがスリム化するんだろう?
gccベースという使いやすさと、PIC以外でも使えるので価格が折り合えば使いたいな。
avrgccは、データメモリとレジスタの転送でコードが膨らんでいるけど、対CPUクロックで考えると速度的に問題ないはず。要求プログラムメモリは要注意。PICは、word,avrは byteで単純比較できないけどね。

PIC cc5x (PIC16F18313)
; RAM usage: 51 bytes (11 local), 205 bytes free
; Maximum call level: 4 (+3 for interrupt)
; Total of 1027 code words (50 %)
PIC xc8 free (PIC16F18313)
Memory Summary:
Program space used 5ECh ( 1516) of 800h words ( 74.0%)
Data space used 41h ( 65) of 100h bytes ( 25.4%)
avrgcc (atmega48)
  Program Memory Usage 3586 bytes 87.5 % Full
  Data Memory Usage    42 bytes 8.2 % Full

608:774ワット発電中さん
19/01/28 23:25:08.21 74Zex59L.net
ATmega328PのUARTポート(RX, TX)とUSBシリアル変換器
URLリンク(akizukidenshi.com)
のUARTポート(TX, RX)をつないでPC上で立ち上げたTera Termをモニタ代わりに使用してる。
これはこれで問題無くモニタ出来てるんだけど他に問題があって
AVRの電源を切ってもAVRが稼働し続けてることに気付いた。
はじめ何が起きてるのかよく分からなかったけどテスターを当てていくと
USBシリアル変換器のUARTポートからAVRのUARTポートに電気が流れて
その電流が寄生ダイオードを経由してかAVRの電源側に回り込んで結果的に
AVRが稼働し続けてるっぽいことに気付いた。
大元たどるとパソコンのUSBポートの5Vが電気の供給源ってことになるね。
この状態でAVRの書き込みも出来るから恐ろしい。
AVRのUSBポートから流れ込んできた電気でAVRが稼働するってのも
AVRにとってあまりよろしくない状況だと思うんだけど何か解決方法ってあるかな?

609:774ワット発電中さん
19/01/29 00:41:28.05 5fr/4ilZ.net
そもそも電源の入っていないマイコンにUSBシリアル変換を接続しっぱなしにするのが間違った使い方。根本的な解決方法はない。
ポートに抵抗入れる、AVRの電源ラインにシャント抵抗を入れて電圧を下げるなどの対症療法はある。
しかし残留電圧でヒューズがリセットされないためデバッグワイヤが解除できない等の不具合が発生するので、その辺を理解して使うこと。

610:774ワット発電中さん
19/01/29 01:27:08.53 k48zQ8Sl.net
>>591
AVRに限らず禁止事項だよ。うっかりするとチップ内の保護ダイオードを壊したり、
外部にレギュレータがあると、こいつを破壊する。
とりあえずの対策としてはFT232XのRESET#をLowにしておけばOK
ATmegaの余っているポートをPull Downしておいて、ここにRESET#をつないでおく。
ATmegaの電源On時に、このポートをHiにしてRESET#を解除すれば普通に使えるし、
電源を落とせばFT232XはResetステートに入る。
FT232XはReset#がLoになっている間、UARTポーtははTri-state、入力は内部200kΩで
プルアップされる(データシートVer. 1.2だったらp. 23)
これで、ほとんどの場合問題はないが、Resetステートの時にUARTピンが浮くので、
気になる場合は弱く(高抵抗で)プルダウンしておけばよい。

611:774ワット発電中さん
19/01/29 02:48:36.73 8mXSpai6.net
わかりやすいわー

612:774ワット発電中さん
19/01/29 06:01:07.27 +FSj8ZJ+.net
>>591
根本的にはAVRの入力に74VHC04のような入力保護ダイオードが入っていない
バッファを入れる。インバータなので2段入れる。

613:774ワット発電中さん
19/01/29 08:55:41.87 AF5sg+3v.net
↑が正解
不都合だけじゃなく、流しすぎるとデバイスがお釈迦になるよ
オレは↓を使ってる
URLリンク(akizukidenshi.com)

614:774ワット発電中さん
19/01/29 12:02:11.55 GBVPzw3Y.net
小信号ダイオードはさんでオープンドレインもどき接続にして
USBシリアルからのHレベルを遮断すればとりあえず大丈夫なんじゃね

615:774ワット発電中さん
19/01/29 12:17:16.32 yBXyxlEE.net
>>592
>>593
AVR書き込むたびにUSBケーブルも抜き差しするの面倒くさくてさぼってたけど
やっぱこういう使い方禁則事項だよね^^;)
> FT232XはReset#がLoになっている間、UARTポーtははTri-state、入力は内部200kΩでプルアップされる
FT232XのRESET#ピンを制御するのはいい方法かも
ただ細かいことを言うとまっさらな状態のAVRに書き込もうとしたときは
RESET#ピンの制御は無理になるかな。
初回限定のほんとどうでもいい細かいことだけど。
>>595
> 74VHC04のような入力保護ダイオードが入っていないバッファを入れる
あ、この方法もいいね。ものぐさな自分にはぴったりの方法かもしれん。
VHCシリーズを選べば入力に保護ダイオードが入っていないことは
確約されるんだっけ?

616:774ワット発電中さん
19/01/29 12:19:54.72 b9fyunmq.net
>>598
VHCシリーズはVCCに関係なく入力電圧の上限が5.5Vまで印加可能だったと思う
簡易電圧変換なんかにも使われるよね

617:774ワット発電中さん
19/01/29 16:25:55.73 yBXyxlEE.net
>>599
VHC, LVC, LCX, VCXは入力から電源にむけて寄生ダイオードが無いから
電源に電流が流れることが無いのね
URLリンク(toragi.cqpub.co.jp)
一つ勉強になった
ありがとう

618:774ワット発電中さん
19/01/31 00:17:18.42 urqG5+GC.net
float型の変数を文字列に変換する際の定番の sprintf はメモリを馬鹿食いするから
次点の dtostrf を使ってみたんだけどこれも結構メモリ馬鹿食いするんだよね
もうちょい軽く済ます方法って無いかしらん

619:774ワット発電中さん
19/01/31 06:03:19.62 X2Vd5Ifm.net
>>601
float使わずにintで固定小数点数として格納する

620:774ワット発電中さん
19/01/31 17:51:59.93 45mnZPLm.net
おまいら巣から出てくるなや

621:774ワット発電中さん
19/01/31 18:34:45.34 pAwOkKrJ.net
固定小数点で間に合うならベストだね。
速度も有利

622:774ワット発電中さん
19/01/31 18:43:14.95 DV6EpONT.net
誰しもが通る系の道よ…
固定少数にしても表示が遅い、間に合わないってんで
LCD表示ルーチンの改良してみたり
割り込みでマルチスレッド的に出来ないか?
とか
アセンブラで書くか?
とか、やる訳よ…

623:774ワット発電中さん
19/01/31 19:47:05.69 r7y8o76G.net
1980年代のパソコンみたい

624:774ワット発電中さん
19/01/31 20:44:52.84 urqG5+GC.net
>>602
>>604
その発想は無かったわ
たとえばfloat型数値 3.1415 を小数点第2桁まで文字列にするとしたら
まずこいつをint型にキャスト


625:オて3を取り出し (int) 3.1415 → 3 取り出した3を引いて小数点以下を抽出し、 3.1415 - 3 = 0.1415 抽出した小数点以下に100をかけて再びint型でキャストし 0.1415 x 100 = 14.15 (int) 14.15 → 14 3と14を atoi() 使って文字列に変換。ピリオドを間に挟んで結合すれば 文字列 3.14 のできあがり。こういうことか



626:774ワット発電中さん
19/01/31 20:45:58.93 hxu1wqAa.net
ATmegaもtinyも8bitやで

627:774ワット発電中さん
19/01/31 21:01:24.78 ysN1Wi3R.net
>>607
>>602 >>604 の助言を無視して float で演算してどうするんだ?

628:774ワット発電中さん
19/01/31 21:12:49.71 a7jyaf99.net
30年前だがZ80でどうしてもfloatが使いたくて、MSX-C 買ったらできないでやんの。
しょうがないからアセンブラでやるfloatのライブラリが載ってる本買って、そこだけ関数呼び出し
に書き直してしのいだわ。

629:774ワット発電中さん
19/01/31 21:40:09.88 jvXK8rxN.net
sprintfが重いって話だろ?
floatの演算自体は仕方なかろうし、大した負荷じゃなかろう。

630:774ワット発電中さん
19/02/01 00:09:51.79 S1ArDI5h.net
まあでも小数2桁って決まってるんなら最初から100倍しておいて整数で演算するわな。

631:774ワット発電中さん
19/02/01 06:18:43.11 wqKgNkoQ.net
そう考えると、昔のBASICとか優秀だよな
あれしかメモリなかったのに

632:774ワット発電中さん
19/02/01 08:12:16.65 GESkO/eE.net
プログラムのフットプリントを意識出来ないのは池沼やで

633:774ワット発電中さん
19/02/02 17:49:37.05 B6fk9Cou.net
昔、友人が変数名がアルファベット1文字というVTL系のコンパイラを作っって
私にくれたことがある。
プログラムサイズは512バイト程度だったと思う。
付属のサンプルプログラムが「月面着陸ゲーム」 だった。

634:774ワット発電中さん
19/02/03 01:34:34.79 nxe4/MJx.net
Digi-keyにTiny3216¥119が入荷している。 マルツは¥166

635:774ワット発電中さん
19/02/03 04:12:18.91 1jBmDB8n.net
>>616
やっときたか!

636:774ワット発電中さん
19/02/03 07:07:15.57 RZYCs11Q.net
マルツってdigikey発注代行だろ?
それでこんなに取るのか
ボリ松もびっくりだな

637:774ワット発電中さん
19/02/03 07:42:25.48 4binZOhL.net
50円でボッタクリ。
じゃあ、Digikey で買えよ。送料払って。

638:774ワット発電中さん
19/02/03 12:49:52.32 8ZNRr/p5.net
すぐ欲しい数個で買って
数十百個になったら海外通販使う
新しい品種とかは前者で探すのが困難だけど

639:774ワット発電中さん
19/02/03 21:57:55.37 fqMmK1Ai.net
>>618 あなた本気で言ってる?

640:774ワット発電中さん
19/02/04 00:31:28.20 ywIii5HS.net
貧乏人は頭の中が貧しいから

641:774ワット発電中さん
19/02/04 01:09:40.55 JmCERjpC.net
>>621
どうせ人件費は0円とかいう無職の発想でしょ
親が買い置きした家にある食い物はタダ、みたいな

642:774ワット発電中さん
19/02/04 01:38:05.73 MJaJfAPE.net
>>623
話が妙に具体的だな、さてはお前…。

643:774ワット発電中さん
19/02/04 02:26:13.00 X+uUi4sh.net
>>623
おい!それってYO!

644:774ワット発電中さん
19/02/04 12:19:51.16 qgiXYbWd.net
秋葉逝ったついでにマルツで買う

645:774ワット発電中さん
19/02/04 13:33:36.41 9szrlDG+.net
店頭受け取りは送料無料!

646:774ワット発電中さん
19/02/04 14:36:58.54 L15laJmX.net
送ってないから当たり前

647:774ワット発電中さん
19/02/04 15:56:27.14 9szrlDG+.net
いやいや、Digikey取り寄せ品の話。

648:774ワット発電中さん
19/02/04 17:20:17.90 gBErcpkB.net
貧しいやつばっかりだな。
貧困は日本の問題だ。

649:774ワット発電中さん
19/02/04 22:19:09.18 JmCERjpC.net
>>625
爺さんしか居ないスレでsyamuなんかわかる奴ほぼいないだろ…

650:774ワット発電中さん
19/02/06 22:48:40.53 GDnkb5rg.net
ボン円、ガラるとしても0時過ぎかなこりゃ

651:774ワット発電中さん
19/02/07 00:04:56.54 yvxwWn1E.net
632です。神様、今週ボン円140円で買い戻しさせて下さい!

652:774ワット発電中さん
19/02/07 06:09:48.83 BiMXIdhR.net
>>633
はよ損切りしろや

653:774ワット発電中さん
19/02/07 12:58:35.55 HwlAc9hF.net
>>634
632です
goodなつっこみ(爆笑

654:774ワット発電中さん
19/02/16 20:18:56.09 27MspbiO.net
UARTで何かデータを受信したら割り込みを発生するテストプログラムを書いてみた。
volatile unsigned char moji='a';
ISR(USART_RX_vect)
{
char x = UDR0;
while (!( UCSR0A & (1<<UDRE0)));
UDR0 = ++moji;
}
int main()
{
UCSR0B = 0x00;
UCSR0A = 0x00;
UCSR0C = 0b00000110;
UBRR0L = 25;
UBRR0H = 0;
UCSR0B = (1<<RXCIE0) | (1<<TXCIE0) | (1<<RXEN0) | (1<<TXEN0);
while(1)
{
}
}
うまく動けばUART経由で一文字打ち込むたびに変数mojiがインクリメントされていきターミナルには
bcdefgh・・・
みたいな感じの文字が表示されてしかるべきなのになぜか
bbbbbb・・・・
といつまでたってもbしか表示されない。なにか設定おかしいところある?

655:774ワット発電中さん
19/02/16 20:51:41.29 F4GluCmK.net
ATMEGA328P使っておもちゃを改造した。
犠牲になったのはプリキュアのハッピーメロディマイク
URLリンク(i.imgur.com)
プリキュアの音楽が流れない酷いやつ。
マイクに入るように小さく工作
URLリンク(i.imgur.com)
無事に収まった
URLリンク(i.imgur.com)
アニメの音楽が流れるようになった
URLリンク(i.imgur.com)

656:774ワット発電中さん
19/02/16 20:54:26.77 rFP3qrWF.net
>>636
送信完了ベクタが登録されていないので動作がおかしくなっているんじゃない?
送信割り込みを使わないような設定にすれば良いと思う
UCSR0B = (1<<RXCIE0) | (1<<TXCIE0) | (1<<RXEN0) | (1<<TXEN0);

UCSR0B = (1<<RXCIE0) | (0<<TXCIE0) | (1<<RXEN0) | (1<<TXEN0);
main()関数内に sei(); が無いけど、割り込み発生するの?

657:774ワット発電中さん
19/02/16 21:16:28.97 27MspbiO.net
>>638
> 送信割り込みを使わないような設定にすれば良いと思う
それ!ビンゴだった!
え?どゆこと?
”送信割り込み使う”に設定すると
ISR(USART_TX_vect)
{
}
送信側をきちんと定義してあげないと
ISR(USART_RX_vect)
{
}
受信側の挙動に影響が出るってこと?

sei()はごめん、コピペするの忘れた^^;)

658:774ワット発電中さん
19/02/16 21:31:46.11 rFP3qrWF.net
>>639
割り込みベクタテーブルの初期値は 0x0000 だったハズ(データシートを読んでみて下さい)
ISR(〜) を定義しないと割り込み発生時に 0x0000 にジャンプする
送信完了→送信完了割り込み発生→ベクタテーブルを参照して 0x0000 にジャンプ(見かけ上、リセット動作となる)
送信完了割り込みが必要無いのなら空の ISR(USART_TX_vect) {} を定義するよりも、送信完了割り込みを禁止したほうがコードサイズが小さくなるし余計な割り込みも発生しませんよ

659:774ワット発電中さん
19/02/16 21:57:23.03 rFP3qrWF.net
>>639
補足
>受信側の挙動に影響が出るってこと?
 ISR(USART_RX_vect) 内で送信処理しているでしょ
 送信処理が完了すれば ISR(USART_TX_vect) に飛ぼうとするので結果として 0x0000 にジャンプします

660:774ワット発電中さん
19/02/17 01:07:21.43 e3U5fsZq.net
>>640
そういうことなのね
UARTで一文字送信するたびにリセットボタンを押してたようなものか
どうりで変数が常に初期化されるわけ


661:セ こういう挙動ってちゃんとしっとかんとあかんね(´・ω・`)



662:774ワット発電中さん
19/02/17 14:23:35.19 OLsc/n62.net
>>640
横からだけど、なんか勉強になった。ありがとう

663:774ワット発電中さん
19/02/19 03:19:24.43 CpC/ZqnN.net
>>637
楽しそう!
お子さんの?

664:774ワット発電中さん
19/02/19 23:46:53.17 WmSSklev.net
ATMEGA328P使って環境モニターっぽいことやってる
常時起動してるのは電池の無駄だからスリープ使ってるんだけど
スリープ復帰後にI2Cセンサとの通信ができなくなることがある。
詳細に調べてみるとスリープモードが
・パワーダウン
・パワーセーブ
・スタンバイ
のときはスリープ復帰後にI2Cが使えない(通信途中でフリーズする)ことが分かった。
ただ唯一、一番省エネ効果が低い
・アイドル
に設定するとスリープ復帰後もI2Cは問題無く使える。
I2Cってディープスリープ状態から復帰後は使えなくなるんだっけ?

665:774ワット発電中さん
19/02/20 01:43:01.69 1DISpaXs.net
そんな話聞いたことないし、そうだとすれば大炎上してるよ。
ソース晒してみなよ。

666:774ワット発電中さん
19/02/20 01:46:45.55 1DISpaXs.net
もしかしてTWIの電力削減レジスタ弄って、なおかつウェークアップ後初期化してないとか?

667:774ワット発電中さん
19/02/20 15:36:29.97 Z8sZQfkV.net
あれ?再スタート出来るでしょ?

668:774ワット発電中さん
19/02/20 20:59:33.69 +tpxrGaP.net
>>646
全部掲載はさすがに足りないから無理だけど要所くらいなら・・・
ちなみにTWIの電力削減レジスタとか難しいことは一切やってないよ
やってることだけどRTC使って一定時間ごとにAVRに割り込み(INT0)かけて起動してデータセーブ。
セーブが終わったらスリープして待機。
具体的にはRTC使ってINT0ピンをLowに引っ張って割り込みをかけてやる。
RTCの仕様でそのままLowに引っ張り続けるからI2C経由でAVRからRTCに命令出してHighに戻すよう命令
(release_interruption関数)。
問題はこのI2C通信で発生するっぽい。パワーダウンスリープから目覚めた直後だとI2C通信の途中で応答不能になり
アイドルスリープから目覚めた直後だと問題無く動作する。スリープを一切使わない場合もむろん問題無く動作する。
↓ちなみに以下ソース

669:774ワット発電中さん
19/02/20 21:00:44.95 +tpxrGaP.net
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include "FatFs/ff.h"
#include "FatFs/diskio.h"
volatile UINT Timer;
ISR(TIMER0_COMPA_vect)
{
Timer++;
disk_timerproc();
}
// 以上FatFsで必要なタイマー割り込み
volatile unsigned char int0_cnt;
ISR(INT0_vect)
{
int0_cnt--;
release_interruption(); // ←I2Cで通信しようとするこの関数で止まる
}
volatile char usart_recvData[256];
volatile unsigned char usart_recv_write;
ISR(USART_RX_vect)
{
char x = UDR0;
usart_recvData[++usart_recv_write] = x;
}
int main(void)
{
TIMSK0 = _BV(OCIE0A);
TCCR0A = _BV(WGM01);
TCCR0B = 0b101;
OCR0A = F_CPU / 1024 / 100 - 1;
EICRA = (0<<ISC01) | (0<<ISC00);
EIMSK = 1<<INT0;
UCSR0B = 0x00;
UCSR0A = 0x00;
UCSR0C = 0b00000110;
UBRR0L = 25;
UBRR0H = 0;
UCSR0B = (1<<RXCIE0) | (0<<TXCIE0) | (1<<RXEN0) | (1<<TXEN0);
sei();
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
int0_cnt = 5;
while (1)
{
if ( int0_cnt == 0 )
{
int0_cnt = 5;
save_data();
}
sleep_mode();
}
}

670:774ワット発電中さん
19/02/21 00:09:21.04 40+hINCy.net
>>650
TWIで割り込み使ってたりして

671:774ワット発電中さん
19/02/21 00:17:18.89 1mBEjo2+.net
俺は小心者なので、
割り込みハンドラの中で通信ルーチンコールとか、
怖くて出来ない
スタック食い潰しの原因追求で泣きそう
になったこととかあるし…

672:774ワット発電中さん
19/02/21 00:33:13.05 40+hINCy.net
INT0割り込み→i2cでRTCにINT0ピンHIGH指示→割込処理から抜ける。でもこのときRTCはまだINT0ピンHIGHの処理完了してないので、またINT0割り込み入る。AVRはi2c始めようとするけどRTCは前の指示実行中なのでしらんぷり。

673:774ワット発電中さん
19/02/21 01:00:46.20 a31cyszz.net
>>INT0ピンHIGH指示
の後に割り込みをすぐに抜けずに、INT0ピンがHiになるのを待ってから抜ければOKってことか。

674:774ワット発電中さん
19/02/21 01:16:43.08 1mBEjo2+.net
ちょっと待て
EICRA = (0<<ISC01) | (0<<ISC00);
ってなんぞ?
これじゃ
EICRA=ISC01|ISC00
と同じだから、立ち上がりトリガにならんか?
(他もだけど…)

675:774ワット発電中さん
19/02/21 01:28:58.76 mfwbhZjO.net
>>655
ならない。無意味ではあるけど…
普通は
EICRA &= ~(_BV(ISC01) |_BV(ISC00) );
かな。
_BV() 使ったり、直接シフトしたり一貫性がないとは思う

676:774ワット発電中さん
19/02/21 12:18:33.68 vj4JZ5b7.net
いろんなとこからコピペしたとか?

677:774ワット発電中さん
19/02/21 16:56:23.11 +p1+Xh6O.net
>>656
ちょっと興味あったので・・・
DDRA = (0 << PA0) | (0 << PA1) ; は
out DDRA, zero
ふむふむ
DDRA |= (0 << PA0) | (0 << PA1) ; は
in tmp, DDRA
out DDRA, tmp
うーむ -Os オプション付けても刈取らないのね・・・
(atmel stuido 7)

678:774ワット発電中さん
19/02/21 18:57:34.89 dey808pv.net
意図して読み出した1を書き戻すことも有るからね。バグになっちゃう。

679:774ワット発電中さん
19/02/22 08:38:26.52 nzDShw1O.net
秋月の通販サイトみたらDIPのAVRマイコンATMEGA1284P−PUが売ってた。
750yen
AVRマイコンの未来は明るい。

680:774ワット発電中さん
19/02/22 09:38:49.50 ZNVWCvt4.net
来たかっ(ガタッ

681:774ワット発電中さん
19/02/22 14:13:08.11 cS9aGyWb.net
何年も前からあるが・・・

682:774ワット発電中さん
19/02/22 16:07:15.94 5qo4q1Lg.net
前からあるよね…

683:774ワット発電中さん
19/02/22 16:23:07.89 C8innWJq.net
>>660
URLリンク(akizukidenshi.com)
発売日 2011/01/04
128Kバイトもの巨大なプログラムメモリと、16Kバイトもの広大なSRAMを内蔵しています。
ちなみに
URLリンク(akizukidenshi.com)
発売日 2019/02/22
プログラムメモリ:256KB RAM:28KB

684:774ワット発電中さん
19/02/22 17:37:09.47 2ytdRX31.net
>>664
DIPだからクソデカくて面白いって話なのにSMD貼られても……

685:774ワット発電中さん
19/02/22 17:50:52.72 4EQI3SDG.net
>DIPだからクソデカくて面白いって話
それどこに書いてる?

686:774ワット発電中さん
19/02/22 17:52:09.83 Np8CmBaC.net
>>665の脳内、しかも17:37:05頃のこと。

687:774ワット発電中さん
19/02/22 18:44:50.96 MEC1rnMB.net
フラッシュを10,000回書き換えて
書き込み不能にした強者っているのかな

688:774ワット発電中さん
19/02/22 18:59:14.43 iTZfS6ry.net
>>668
どこかで実験したブログか何かをみた

689:774ワット発電中さん
19/02/22 19:45:24.66 es8BCpBs.net
>>669
オレもどっかで見た。だけどフラッシュではなくEEPROM(PICの)

690:774ワット発電中さん
19/02/22 22:21:50.35 4RXsUzoZ.net
>>670
URLリンク(madlabo.oops.jp)
ここのオッチャン、リレー式計算機とか作ったり色々とやってるな
しかし電子工作者のこの文体のテンション、ついていけない…

691:774ワット発電中さん
19/02/22 23:01:51.46 ePdxNrEt.net
>>664
CAN入りAVRが700円か

692:774ワット発電中さん
19/02/22 23:14:43.02 moB5Fynl.net
>>672
罐パッケージのAVRがあるのかと思ったw

693:774ワット発電中さん
19/02/22 23:35:36.28 5BJLG1gH.net
> フラッシュを10,000回書き換えて
> 書き込み不能にした強者っているのかな
何回書きかえたら壊れるか(書けなくなるか)に関しては
実際に試して確認した情報を どっかで見たな

694:774ワット発電中さん
19/02/23 22:28:32.89 BGsrrv4G.net
見たな

695:774ワット発電中さん
19/02/23 22:30:59.40 9rPqi2pp.net
見た見たってオバケみたい

696:774ワット発電中さん
19/02/26 00:57:37.44 NFTn/ZGf.net
ESP-WROOM-02にリセットボタンを付けて連続でパチパチとリセットしてたら、
テレビの受信デシベルが低くなって映像が途切れたりした。
2.4Ghzって地デジの電波に影響あるんだな

697:774ワット発電中さん
19/02/26 23:06:05.57 UzzwTNJy.net
>>673
リードが64本か・・・

698:774ワット発電中さん
19/02/26 23:16:34.98 +WFg7jAV.net
>>678
球状の缶からウニみたいに出てくるリード

誰か作らんかなぁ

699:774ワット発電中さん
19/02/27 01:03:40.41 PlbPXMaw.net
フラッシュに書き込んだプログラムがいつまで保持されてるのか気になる
たしか100年ぐらいは持つんだっけな?
書き込みを繰り返したやつは酸化膜がやられてて電荷が抜けるのが早くなるだろう

700:774ワット発電中さん
19/02/27 01:56:25.10 3+9bHPDt.net
>>680
フラッシュは20年や
データシートの表紙みろや

701:774ワット発電中さん
19/02/27 02:16:59.98 zzvMYAu+.net
見た!
電源切った!
寝るー!

702:774ワット発電中さん
19/02/27 03:25:04.95 MVY/lNE/.net
ちょっとさっきくしゃみしたら
変換基盤に仮置きしていたATtiny10が全部消えたんだが?
こないだ家電のケンちゃんで書き込み用補助具買ったばかりなんだが?
秋月の10個入り全部消えたんだが?
朝の鼻くそに混ざっていそうなんだが?

703:774ワット発電中さん
19/02/27 08:13:50.66 94TjmYL5.net
小せいのはICでなくお前のケツの穴というオチかい?

704:774ワット発電中さん
19/02/27 19:35:10.51 adapApLE.net
>>673
缶のオペアンプを開けて中にATtiny85埋め込むか?

705:774ワット発電中さん
19/02/27 20:47:39.08 MVY/lNE/.net
>>684
バカヤロー鼻くそだって書いてあっだろ!
俺の繊細なケツからあんなもん出てきたらあっという間にパンツ血まみれ

706:774ワット発電中さん
19/02/27 21:42:41.17 T/B+R8oC.net
SSDなら耐久テストをしたサイトがあったな
東芝製が書き込み禁止にして保護するとか

707:774ワット発電中さん
19/02/27 21:58:05.37 adapApLE.net
>>687
その人福島の地震で死んだはず

708:774ワット発電中さん
19/02/27 22:46:46.58 6AVGd6dV.net
UART経由でターミナルに文字列吐いてからパワーダウンスリープするプログラム作ってみたんだけど、
void uputc(unsigned char x)
{
 while( !(UCSR0A & (1<<UDRE0)) )
 ;
 UDR0 = x;
}
ターミナルに表示される文字列の末尾が文字化けしてしまう。
(上記のプログラムは一文字UARTに送信する関数。
これを連続呼び出しすることで文字列をターミナルに送ってる)
パワーダウンではなくアイドルスリープに変更したり、スリープそのものをしないようにすれば
末尾まで正常に表示されることからUARTの送信バッファから文字が全て吐かれる前に
AVRがスリープしちゃってるのが原因じゃ無いかと踏んだ。
だったら送信バッファが空になるまで待てばいいじゃんと思い、
void uputc(unsigned char x)
{
 while( !(UCSR0A & (1<<UDRE0)) )
 ;
 UDR0 = x;
 while( !(UCSR0A & (1<<UDRE0)) )
 ;
}
と修正してみたけど変わらなかった。他にも送信シフトレジスタが空になったとされるTXCフラグが1
になるまで待ってみたりしたけど、



709: while( !(UCSR0A & _BV(TXC0)) || !(UCSR0A & _BV(UDRE0)) )  ; これも変わらなかった。最後の一文字までターミナルに無事送り届けられたタイミングを知るには どうしたらいいのかな?



710:774ワット発電中さん
19/02/27 23:05:56.16 RapFhyb5.net
>>689
AVRのプログラム経験あまり無いけどバッファが空に成った後に空ループ回しながら暫く待ってスリープは試してみた?

711:774ワット発電中さん
19/02/27 23:25:39.92 ytHC5ZXo.net
TXCフラグは割り込みを使用していなければ、
プログラムから動的にクリアされなければならない。
UDR0 = x;
の次に
UCSR0A |= _BV(TXC0);
っていれてみれば?

712:774ワット発電中さん
19/02/27 23:29:04.24 1y6F2gOX.net
>>690の対症療法でもいいが…そもそも根本的な勘違いがある。TXCフラグの説明読んだか?
『The TXCn Flag bit is automatically cleared when a transmit complete interrupt is executed, or it can be cleared by writing a one to its bit location.』
とある。日本語にすると『TXCnフラグは、送信完了割込みを起こすか、自分で1を書くことで初期化できます。』ということだ
つまり、送信完了割込みを使ってないのならば、自分で毎回クリアしないと、最初に何か送信して空になって1になったら…あとはずっと1のままだ!!!
送信中は0で終わったら1に勝手に変わるとかいう便利なものではないぞ???

713:774ワット発電中さん
19/02/27 23:35:55.82 0TOANvas.net
なぜ動かないんだ!MPUのバグか?
って時の99%は、データシートをちゃんと読んで
無かった自分のせい

714:774ワット発電中さん
19/02/27 23:40:07.26 MwsScFW1.net
どうでも良いけど、なぜ
loop_until_bit_is_clear();
使わないんだ?

715:774ワット発電中さん
19/02/27 23:59:49.64 6AVGd6dV.net
>>690
↓みたいにforループ1000回入れてみたら最後までターミナルに正しく表示されるようになったから
 たぶん送信バッファを確実に空にするまで待つ、という戦略であってると思う
void uputc(unsigned char x)
{
 while( !(UCSR0A & (1<<UDRE0)) )
 ;
 UDR0 = x;
 for(int i=0;i<1000;i++)
 ;
}
>>691
ほ、ほんとだ!
void uputc(unsigned char x)
{
 while( !(UCSR0A & (1<<UDRE0)) )
 ;
 UDR0 = x;
 UCSR0A |= _BV(TXC0);
 while( !(UCSR0A & (1<<UDRE0)) )
 ;
}
これでも正しく末尾まで正しくターミナルに表示されるようになった!
>>692
そういうことなのね。自分で1にsetしてやらないと0に戻らないのね。
勉強になった、ありがとうノシ

716:774ワット発電中さん
19/02/28 06:31:20.36 UjtlN9fm.net
Aliで売ってる1000円以下のJTAGって使い物になる?

717:774ワット発電中さん
19/02/28 06:49:50.65 U+qVd/wO.net
>>695
for(int i=0;i<1000;i++);
って、最適化したら真っ先に消されるコードだろ?

718:774ワット発電中さん
19/02/28 07:12:05.26 7MTrS+a2.net
「馬鹿の考え休むに似たり」

719:774ワット発電中さん
19/02/28 07:46:58.49 Nn1mUl6z.net
>>697
intの前に「volatile」付ければ?
>>695
問題解決良かったね。
>>692
AVR初心者として参考になった。
ありがとう。
>>693
そう。焦れば焦るほどバグ、つまり自分のミスに気付かない。
俺はプログラミングは己れの煩悩を取り払う能力を養う最強の修行法だと解ったわ。

720:774ワット発電中さん
19/02/28 20:03:42.63 uVd7pv8a.net
デジタル時代の写経だなw

721:774ワット発電中さん
19/02/28 20:27:12.64 JyrSY46l.net
デバッガ使いまくってる軟弱ものでスマン

722:774ワット発電中さん
19/02/28 20:42:53.98 uv1Hvimb.net
>>695
送信後のウエイト処理で見ているフラグが違うと思います。
while ( !(UCSR0A & (1<<TXC0)) );
こうじゃないですか?

723:774ワット発電中さん
19/02/28 23:56:04.02 S1p7QpKp.net
>>702
すんません
凡ミスしてた
> while ( !(UCSR0A & (1<<TXC0)) );
そうです、それで正しいっ


724:キ



725:774ワット発電中さん
19/03/01 11:34:43.01 cT6i7a3v.net
>>694

726:774ワット発電中さん
19/03/01 14:30:22.06 RmtoqY4z.net
所詮マクロだし推奨するのは構わんが強制することでもないべ

727:774ワット発電中さん
19/03/08 10:26:54.69 zI2zNano.net
AVRマイコンはプログラムメモリの自己書き替えはブートローダー用の領域に書き込まれた
プログラムからしかできないんだな。アプリケーション用領域に書き込まれたプログラムからだと
書き替えのための処理が無視される。良く読めばデータシートにも書いてある。
PICマイコンからの類推で当然できるものだとおもってたから意外。

728:774ワット発電中さん
19/03/08 11:05:20.98 5UY1pC+P.net
デバイスによる。
ブートローダ領域の無いものはどこからでも実行できる。

729:774ワット発電中さん
19/03/12 23:35:27.82 /5m/NIze.net
割り込みに呼応する関数は一般的にmain関数の前に記述するわけだけど、
volatile unsigned char x;
ISR(USART_RX_vect)
{
x = UDR0;
}
int main()
{
・・・
}
割り込みに呼応する関数を丸々関連するヘッダファイル(uart.h)に移動してやって
そのヘッダファイルをincludeすれば割り込み処理も忘れずに定義できることを思いついてこうした、
#include "uart.h"
int main()
{
・・・
}
記述もすごくシンプルになって満足していたんだけどAtmel Studioのコンパイラーから3つの警告が出るようになった。
警告 2 type of '__vector_18' defaults to 'int' [enabled by default]
警告 1 return type defaults to 'int' [enabled by default]
警告 3 control reaches end of non-void function [-Wreturn-type]
割り込み処理をまるまるヘッダファイル(uart.h)に移動してやっただけなのになんでこんな警告が出るんだろう?

730:774ワット発電中さん
19/03/12 23:45:25.49 /5m/NIze.net
あと話は全く変わるんだけど今ChaN氏のFatFs使ってSDカードに書き込みするプログラム組んでるんだけど
付属のf_puts関数でSDカードにデータを書くのは問題無く出来てるんだけど
もう一つの付属のf_printf関数でSDカードにデータを書き込もうとするとエラーが返ってくる。
原因をしらみつぶしに調べていったところグローバル領域で宣言した配列の要素数がある程度大きくなると
f_printfの方だけエラーが出るっぽいところまで突き止めた。(f_putsの方は要素数によらず常に書き込みに成功する)
具体的にはグローバル領域で、
volatile unsigned char hogehoge[255];
みたいな巨大配列を宣言するとf_printfによる書き込みが失敗する。
配列の要素数を少し減らして、
volatile unsigned char hogehoge[200];
にするとf_printfでも問題無く書き込みできるようになる。
ターゲットはATmega328P。
プログラムメモリもデータメモリも90%以下の値であることは確認済み。
オーバーフローしてるわけではない。
宣言した配列のサイズによってプログラムが異常動作するなんてことはありえるかね?

731:774ワット発電中さん
19/03/13 00:02:52.38 BChGBX8R.net
>>709
ビルドログに出てくるデータメモリの使用率はグローバル宣言した変数分のみ。RAMはファンクション内で宣言した変数にも使われるから足りなくなることはある。

732:774ワット発電中さん
19/03/13 01:28:28.30 JK0CeApG.net
スタックもじゃね?
グローバル変数+ローカル変数+スタック≦RAM
でなければならん
アセンブラで書いてないと取りうるスタックの最大量は読みにくい

733:774ワット発電中さん
19/03/13 06:30:52.15 qNBzP1Vx.net
>>708
Cの言語仕様上、そうなるんじゃね?

734:774ワット発電中さん
19/03/13 07:54:19.03 f8c4PDBy.net
>708
ぱっと見だけど、char xがグローバル変数なのに、グローバル変数として宣言できてないのでは?

735:774ワット発電中さん
19/03/13 08:23:57.94 WoGC53wT.net
オイラもそんな希ガス

736:774ワット発電中さん
19/03/13 08:25:30.24 WbI6GhOW.net
そもそもヘッダファイルに入れる意味あるのか?
忘れずにと言うが、main関数のあるファイルからしかincludeしないなら、そこに直書きするのと何が違うのか

737:774ワット発電中さん
19/03/13 08:38:58.32 3EPG0DWL.net
>>708
#include "uart.h" の前かuart.hの中にavr/interrupt.hが無いから。

738:774ワット発電中さん
19/03/13 23:42:56.28 RGwTm6P4.net
>>710
>>711
そういうことなのね
コンパイルしてメモリ使用量が100%未満だからといって安心しちゃいけないのか
>>713
volatile unsigned char x;
だけmain関数の真上のグローバル変数領域に移設してみたけど
エラーが出るようになっちゃった
>>716
一応"uart.h"の前でavr/interrupt.hは宣言してあったわ
ヘッダーファイルに割り込み処理を押し込もうとしたのはそもそもの間違いか
下手に楽しようとせずmain関数の上に書くようにするわ
ありがとう

739:774ワット発電中さん
19/03/14 00:20:00.08 QNl9+HES.net
>>717
ヘッダーに関数その物を書くのが作法違反っすよ

740:774ワット発電中さん
19/03/14 06:55:52.34 2HCCJtDa.net
>>717
volatile unsigned char x;
の前で uart.h をインクルードしているのでは?
uart.h の中で変数 x を使うコードが書かれていると、そんな変数知らないとコンパイラに叱られる
一見、すっきりした様に見えるけど、uart,h の中にプログラムコードを書くのは違うような気がする
ISR() を外に出したいのなら uart.c のような別の *.c ファイルに記述して、 必要な定義類を uart.h に記載するのが良いでしょう

741:774ワット発電中さん
19/03/14 11:50:44.14 rLeIhSLi.net
Cはあほ言語だからな。

742:774ワット発電中さん
19/03/14 13:50:37.87 LZnKV9qc.net
×あほ言語
○あほには使えない言語

743:774ワット発電中さん
19/03/14 14:22:23.10 ANpkEu8K.net
Cは、エンジニアの個性と能力が、目立つ言語。

744:774ワット発電中さん
19/03/14 14:30:39.02 +EIIS3sp.net
Cがアホ言語かどうかはともかく、
なんでこんなにMCU向けにCがはやるようになったんだろ?
FORTHなんか機械制御用として作られたユニークな言語だし、
小さなMCU向けにはVTLみたいなものでも十分だと思うけどな。
だれかアッと驚くようなD言語処理系でも作っておくれでないかえ。

745:774ワット発電中さん
19/03/14 14:47:55.22 +m943z4G.net
ラダー最強

746:774ワット発電中さん
19/03/14 16:42:21.46 UHNeTLui.net
>>723
いまさらテープドライブ?
まあMCUならいいのかもね。

747:774ワット発電中さん
19/03/14 16:59:54.20 8EXHrIv3.net
当時はさ
CPU速度が遅くメモリも潤沢ではなかったが為に
インタプリタ系言語が敬遠されたってだけだと思う
PASCALもpコードの奴はトロいしw

748:774ワット発電中さん
19/03/14 17:53:01.26 rLeIhSLi.net
Cの設計思想はコンパイラ開発者に楽させるためだから、Cはあほ言語なんだよ。
プログラマに楽させるためのJavaとは真逆の設計思想。

749:774ワット発電中さん
19/03/14 18:22:26.68 SrpVBwWG.net
Cはあほ言語なんだよ、だってさ。あの人いつも極論言ってカッコイイって思ってるのかな。クスクス。

750:774ワット発電中さん
19/03/14 18:41:34.96 w/46pvfA.net
Javaで楽になった感じが全くないですよ。

751:774ワット発電中さん
19/03/14 19:27:05.42 LQVzyV9A.net
なに使ってもダメな人はダメ
アホなのは言語じゃなくて
その言語の思想を理解できずに
「あほ」って言っちゃう方
所詮、道具なんだから気に入らなきゃ
スルーして別の道具を選択するなり、
自分で道具から作りゃいいのに…

752:774ワット発電中さん
19/03/14 20:50:09.37 tV5MuKOm.net
>>718
>>719
反省しとります
ヘッダーに記述するのやめておきますm(_ _)m

753:774ワット発電中さん
19/03/14 22:35:24.46 UHNeTLui.net
>>730
自分でコンパイラ作るの?
しかもアセンブラで



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

1700日前に更新/263 KB
担当:undef