teacup. [ 掲示板 ] [ 掲示板作成 ] [ 有料掲示板 ] [ ブログ ]

 投稿者
  題名
  内容 入力補助画像・ファイル<IMG>タグが利用可能です。(詳細)
    
 URL
[ ケータイで使う ] [ BBSティッカー ] [ 書込み通知 ] [ 検索 ]

スレッド一覧

  1. 足あと帳(0)
スレッド一覧(全1)  他のスレッドを探す 

*掲示板をお持ちでない方へ、まずは掲示板を作成しましょう。無料掲示板作成


Re: ボケ防止にPTを

 投稿者:ケンケン  投稿日:2017年 9月20日(水)00時02分7秒 NE0356lan1.rev.em-net.ne.jp
返信・引用
  > No.659[元記事へ]

JA1WBY様

いやあ、オリジナル作者より先に次期MachiKaniaの基板を公開されてしまうとは、
というかまだソフトウェアが完成してもいないのに・・・
これは頑張らなければ。

秋月のPIC32MX370F512H実装基板を採用するか、チップ単体を採用するか、悩みどころですね。
Arduinoのシールドが使えると、いろいろ応用が広がりそうです。
 
 

ボケ防止にPTを

 投稿者:JA1WBY  投稿日:2017年 9月18日(月)16時11分33秒 nttcgi099081.tcgi.nt.ngn2.ppp.infoweb.ne.jp
返信・引用
  ケンケン様 皆さま

いつも楽しく記事を拝読いたしております。
私ことで。ボケ防止に・・・とかこつけて 飽きずにPT基板作成の記事
を作成いたしました。また「年寄りの日」に公開?。

暇なときに御覧ください。
作る手間はQFPの直付けのPT基板が一番楽です。個人差大ですが。

今回も必要な方にはPT基板の無料提供を行います。
(今回は試作の、作成数が少ないので1項と4項のMainPT基板のみで各2名様分です。)
(UL024TF代替のADP-PT基板は使い切って在庫がありません。
必要な方はメモをください。
そのうち再製作すると思うのですが・・・?中。)

http://ja1wby.art.coocan.jp/picc-test55/00-picc-test55.html
 

Re: PIC32MX370F512Hのサンプルプログラム(タイマー割り込みを使ったLチカ)

 投稿者:ケンケン  投稿日:2017年 9月17日(日)21時40分34秒 NE0356lan1.rev.em-net.ne.jp
返信・引用
  > No.656[元記事へ]

先日のPIC32MX370F512Hのひな形プログラムですが、なんとキャッシュが有効になっていません
でした。申し訳ありません。今は編集して修正済みです。

PIC32MXのプリフェッチキャッシュモジュールは、プリフェッチ機能とキャッシュ機能があり、
それぞれ別々に有効化しますが、プリフェッチだけ有効にしてキャッシュは有効になって
いませんでした。
プリフェッチだけでもノーウェイトでフラッシュ上のプログラムを動作させられますが、
キャッシュも有効にすると、小さなループなどでもウェイトなしで動作させられる場合が
あるので、より効果的です。
具体的には以下の行を初期化部分に追加しました。

__builtin_mtc0(16, 0, (__builtin_mfc0(16, 0) & 0xfffffff8 | 3)); // キャッシュ有効化
 

PIC32MX370F512Hの周辺ピン割り当て早見表

 投稿者:ケンケン  投稿日:2017年 9月16日(土)15時11分57秒 NE0356lan1.rev.em-net.ne.jp
返信・引用 編集済
  PIC32MX370F512Hでは各種入出力周辺機能をI/Oピンに柔軟に割り当てることができますが、
データシートの表が分かりにくいので、自分なりにまとめてみました。

出力ピンの設定方法
 RP[ポート番号]R=x のようにします。
 例えばC1OUTをポートB0に割り当てる場合「RPB0R=13」とします。

入力ピンの設定方法
 [ピン名]R=x のようにします。
 例えばIC1をポートB2に割り当てる場合「IC1R=7」とします。

この表を見ると、SDO1がやたらと自由度が高いとか、RF2が人気者だということがわかります。
回路設計時に役立ててください。
なお、万一この表に記載ミスがあった場合の保障はしませんので、最終確認は必ずデータシートで
行ってください。

http://www.ze.em-net.ne.jp/~kenken/misc/pic32mx370f512h-pps.pdf
 

PIC32MX370F512Hのサンプルプログラム(タイマー割り込みを使ったLチカ)

 投稿者:ケンケン  投稿日:2017年 9月 9日(土)14時10分16秒 NE0356lan1.rev.em-net.ne.jp
返信・引用 編集済
  (2017.9.17 プリフェッチは有効でしたが、キャッシュが有効になっていなかったのでソースを更新しました。)

PIC32MX370F512Hがついに秋月電子で取り扱い開始になりました!

■チップ単体
http://akizukidenshi.com/catalog/g/gI-12284/

■基板に実装したもの
http://akizukidenshi.com/catalog/g/gM-12417/

PIC32の最新のコンパイラに対応した解説書がほとんど出ていない現状、興味はあるけれど
最初の一歩が踏み出せない人がとても多いと思います。
あるいは買ってみたけれど、基本的なところで引っ掛かって性能が十分に出せていない人も
いると思います。

そこで、ひな形となるサンプルプログラムを用意しました。

内蔵クロックによる最大の96MHz動作、プリフェッチキャッシュを有効化し、タイマー
割り込みを使ってRB0につながれたLEDを1秒間隔で点滅させるというものです。

コンパイラはXC32 v1.42で動作確認しています。
以前のバージョンでサポートされていた周辺ライブラリ(PLIB)は使用していません。

■回路製作上の注意点(最低限の必要事項)
・VDD、VSSの端子は省略せずに全て電源/GNDに接続する
・AVDD、AVSSの端子も必ず電源/GNDに接続する
・MCLRは10KΩで電源にプルアップ
・各電源端子間(9と10、19と20、25と26、38と41)にパスコンとして0.1μFのセラミック
 コンデンサを接続。57番ピン(VDD)とGND間もパスコンを接続
・VCAP(56番ピン)には10μFのセラミックコンデンサを通してGNDに接続
・PICkit3等によるICSP書き込みはMCLRとPGECx、PGEDxを使用
 (xは1~3のどれでもOK、13番~18番ピンあたりに集まってる)

以下、サンプルプログラムのソースです。
MPLAB Xで新規プロジェクトを作成し、このソース1つ追加するだけでビルド可能です。

--------------------------------------------------------------

// タイマー割り込みによるLチカ for PIC32MX370F512H
// 内蔵クロック 96MHzで動作、周辺クロック:システムクロック = 1:1

// DEVCFG3
#pragma config FSRSSEL = PRIORITY_7     // Shadow Register Set Priority Select (SRS Priority 7)
#pragma config PMDL1WAY = OFF           // Peripheral Module Disable Configuration (Allow multiple reconfigurations)
#pragma config IOL1WAY = OFF            // Peripheral Pin Select Configuration (Allow multiple reconfigurations)

// DEVCFG2
#pragma config FPLLIDIV = DIV_2         // PLL Input Divider (2x Divider)
#pragma config FPLLMUL = MUL_24         // PLL Multiplier (24x Multiplier)
#pragma config FPLLODIV = DIV_1         // System PLL Output Clock Divider (PLL Divide by 1)

// DEVCFG1
#pragma config FNOSC = FRCPLL           // Oscillator Selection Bits (Fast RC Osc with PLL)
#pragma config FSOSCEN = OFF            // Secondary Oscillator Enable (Disabled)
#pragma config IESO = OFF               // Internal/External Switch Over (Disabled)
#pragma config POSCMOD = OFF            // Primary Oscillator Configuration (Primary osc disabled)
#pragma config OSCIOFNC = OFF           // CLKO Output Signal Active on the OSCO Pin (Disabled)
#pragma config FPBDIV = DIV_1           // Peripheral Clock Divisor (Pb_Clk is Sys_Clk/1)
#pragma config FCKSM = CSDCMD           // Clock Switching and Monitor Selection (Clock Switch Disable, FSCM Disabled)
#pragma config WDTPS = PS1048576        // Watchdog Timer Postscaler (1:1048576)
#pragma config WINDIS = OFF             // Watchdog Timer Window Enable (Watchdog Timer is in Non-Window Mode)
#pragma config FWDTEN = OFF             // Watchdog Timer Enable (WDT Disabled (SWDTEN Bit Controls))
#pragma config FWDTWINSZ = WINSZ_25     // Watchdog Timer Window Size (Window Size is 25%)

// DEVCFG0
#pragma config DEBUG = OFF              // Background Debugger Enable (Debugger is Disabled)
#pragma config JTAGEN = OFF             // JTAG Enable (JTAG Disabled)
#pragma config ICESEL = ICS_PGx1        // ICE/ICD Comm Channel Select (Communicate on PGEC1/PGED1)
#pragma config PWP = OFF                // Program Flash Write Protect (Disable)
#pragma config BWP = OFF                // Boot Flash Write Protect bit (Protection Disabled)
#pragma config CP = OFF                 // Code Protect (Protection Disabled)

#include <xc.h>
#include <sys/attribs.h>

int counter=0;

// タイマー2割り込み処理ルーチン
void __ISR(_TIMER_2_VECTOR, IPL4AUTO) T2Interrupt(void) {
    counter++;
    if (counter == 10) {
        LATBINV = 1; // Toggle LED (RB0を反転)
        counter = 0;
    }
    IFS0bits.T2IF = 0; // Reset interrupt flag
}

int main(void) {
    // Data Memory SRAM wait states: Default Setting = 1; set it to 0
    BMXCONbits.BMXWSDRM = 0; // SRAMのウェイトステートを0にする

    // Flash PM Wait States: MX Flash runs at 3 wait states @ 100 MHz
    CHECONbits.PFMWS = 3; // フラッシュのウェイトステートを3にする(100MHz動作時)

    __builtin_mtc0(16, 0, (__builtin_mfc0(16, 0) & 0xfffffff8 | 3)); // キャッシュ有効化

    // Prefetch-cache: Enable prefetch for cacheable PFM instructions
    CHECONbits.PREFEN = 1; //プリフェッチ有効化

    // Set the interrupt controller for multi-vector mode
    INTCONSET = _INTCON_MVEC_MASK; //割り込みをマルチベクタモードに設定

    // Set the CP0 Status IE bit to turn on interrupts globally
    __builtin_enable_interrupts(); //割り込み有効化

    // ピンの入出力設定(全て出力)
    TRISB = 0;
    TRISC = 0;
    TRISD = 0;
    TRISE = 0;
    TRISF = 0;
    TRISG = 0;

    //タイマー2割り込み設定
    T2CON = 0x70; // prescale 1:256, 16bit mode
    PR2 = 37500; // 100ms (96MHz/256*0.1)
    TMR2 = 0; // clear Timer 2 counter

    IPC2bits.T2IP = 4; // T2割り込み優先度4に設定
    IFS0bits.T2IF = 0; // T2割り込みフラグをクリア
    IEC0bits.T2IE = 1; // T2割り込み有効化

    T2CONbits.TON = 1; // タイマー2開始

    while (1) {
        // 割り込み待ち
    }
}
 

+5V LED看板

 投稿者:BINGE  投稿日:2017年 8月16日(水)09時53分47秒 p276027-ipngn200609kobeminato.hyogo.ocn.ne.jp
返信・引用
   先日、某模型店で、工事中のサインを表示する、小さいフィギュアを入手いたしまして、このフィギュアの底の部分を確認すると、スイッチとボタン電池が装備してありまして、このスイッチを”入”にすると、白色に光り、工事中という文字が、くっきりと表示されるようです。これで、自分は、これをUSB端子の+5Vで光らせる事に成功しました。

くわしくは、ホームページの文章をご覧ください。

93.工事中の看板について
http://binge3.web.fc2.com/bun/93.html

http://binge2.web.fc2.com

 

Re: Re: MachiKania type Zでキーボードを使わず数字入力

 投稿者:ケンケン  投稿日:2017年 8月15日(火)22時52分36秒 NE0356lan1.rev.em-net.ne.jp
返信・引用
  > No.653[元記事へ]

eibow様

こういう実用的に使われるのって、楽しいですね。
WAIT 1だと1つ2つスキップして、WAIT 2だと安定するというのは、私は経験していないのですが、
チャタリングの影響でしょうかね。だとするとずいぶん派手なチャタリングですね。
秋祭りで使ってもらえましたら、また報告ください。
 

Re:Re: MachiKania type Zでキーボードを使わず数字入力

 投稿者:eibow  投稿日:2017年 8月15日(火)16時41分41秒 i27-114-15-169.s41.a035.ap.plala.or.jp
返信・引用
  ケンケン様

スマートな解決方法ありがとうございました。

さっそく組み込みました。
すると当方の基板では「wait 1」だと数字が1つ2つスキップしてしまいます。
なので「wait 2」にしてみました。これだと安定して動作しています。
これで一応完成です。

昨年、毎年秋に郊外で行う「なしぶどう祭り」では、前作の福引装置で抽選を行いました。
今年また要請があったら、こちらをプロジェクターと一緒に貸し出そうと思っています。
福引を行うソフトや装置ってありそうで無いですからね。

どうもお世話になりました。
次に作るときは「USEVAR命令」で変数名をわかりやすくしたいと思います。
 

Re: MachiKania type Zでキーボードを使わず数字入力

 投稿者:ケンケン  投稿日:2017年 8月14日(月)23時17分25秒 NE0356lan1.rev.em-net.ne.jp
返信・引用
  eibow様

ボタンのリピート入力を避ける方法として、私がいつも使っている方法を紹介します。
下記プログラムでサブルーチンINPUTを呼ぶと、以下の変数が設定されます。
K:今回押されているボタン
M:前回押されていたボタン
L:前回押されていなくて今回押されているボタン
サブルーチンINPUTを一定期間おいて呼ぶことでチャタリングはほぼ防げます。
この例では60分の1秒に1回呼んでいます。
なお、「M XOR 63」は各ビットの反転をしています。

DIM G(3)
V=0
K=0
FOR I=0 TO 3:G(I)=9:NEXT

WHILE 1
U=G(V)
CURSOR 0,5
FOR I=0 TO 3
  IF I=V THEN COLOR 6 ELSE COLOR 7
  PRINT G(I);
NEXT
GOSUB INPUT
IF L=32 THEN BREAK
IF L=1 THEN U=(U+1)%10:G(V)=U
IF L=2 THEN U=(U+9)%10:G(V)=U
IF L=4 THEN V=(V+3)%4
IF L=8 THEN V=(V+1)%4
WAIT 1
WEND
END

LABEL INPUT
M=K
K=KEYS()
L=M XOR 63 AND K
RETURN
 

MachiKania type Zでキーボードを使わず数字入力

 投稿者:eibow  投稿日:2017年 8月14日(月)01時49分29秒 i27-114-15-169.s41.a035.ap.plala.or.jp
返信・引用
  福引プログラムの続きです。

4桁の分解の部分と表示サブルーチンのスマートなアルゴリズムありがとうございました。
さっそく使わせていただきました。

うちの夏祭りでは、福引券は当日会場に来た人にジュース券と引き換えに渡すそうです。
なので、〆切時間までに渡した券の最後の数字を入力必要があります。
ついでに最初の数字も入力できるようにしました。なぜか1000番から始めるそうですので。

今年はこれをキーボードから入力するようにしたのですが、キーボードが大きくて邪魔です。
なのでプログラムを見なおして、矢印キーで入力できるようにしてみました。

チャタリングで誤動作するので、フラグを立ててキーが押された後、手が離されたことを
検知するようにしてみました。

動作は左右矢印で桁選択し、上下矢印で数字のアップダウンを行うようにしました。
決定は[Fire]キーです。

大変ダサいプログラムになってしまいました。もっとスマートにできないですかね。
まあ動いているからいいんですけど。

以下この部分の抜粋です。全部掲載すると長いので・・・

dim a(h),f(9,4),g(3)
rem --MAIN--------------------
label MAIN
rem width 40
rem --MAXMIN------------------
label MAXMIN
u=9:v=0
g(0)=9:g(1)=9:g(2)=9:g(3)=9
cls
rem --MAX---------------------
label MAX
cursor 1,1:print "サイダイ スウ (MAX<9999) ";g(0);g(1);g(2);g(3)
cursor 21+v,1:color 6:print g(v):wait 5:color 7
if keys()=1  then p=1:wait 5
if keys()=2  then q=1:wait 5
if keys()=4  then r=1:wait 5
if keys()=8  then s=1:wait 5
if keys()=32 then t=1:wait 5
if keys()=0 and p=1 then u=u+1:if u>9 then u=0
if keys()=0 and p=1 then p=0:g(v)=u
if keys()=0 and q=1 then u=u-1:if u<0 then u=9
if keys()=0 and q=1 then q=0:g(v)=u
if keys()=0 and r=1 then r=0:v=v-1:if v<0 then v=3
if keys()=0 and s=1 then s=0:v=v+1:if v>3 then v=0
if keys()=0 and t=1 then t=0:goto MAXDT
goto MAX
rem --MAXDT-------------------
label MAXDT
x=g(0)*1000+g(1)*100+g(2)*10+g(3)
u=1:v=0
g(0)=1:g(1)=0:g(2)=0:g(3)=0
wait 10
rem --MIN---------------------
label MIN
cursor 1,2:print "サイショウ スウ (MIN>0   ) ";g(0);g(1);g(2);g(3)
cursor 21+v,2:color 4:print g(v):wait 5:color 7
if keys()=1  then p=1:wait 5
if keys()=2  then q=1:wait 5
if keys()=4  then r=1:wait 5
if keys()=8  then s=1:wait 5
if keys()=32 then t=1:wait 5
if keys()=0 and p=1 then u=u+1:if u>9 then u=0
if keys()=0 and p=1 then p=0:g(v)=u
if keys()=0 and q=1 then u=u-1:if u<0 then u=9
if keys()=0 and q=1 then q=0:g(v)=u
if keys()=0 and r=1 then r=0:v=v-1:if v<0 then v=3
if keys()=0 and s=1 then s=0:v=v+1:if v>3 then v=0
if keys()=0 and t=1 then t=0:goto MINDT
goto MIN
rem --MINDT-------------------
label MINDT
y=g(0)*1000+g(1)*100+g(2)*10+g(3)
wait 10
cursor 1,4:color 6:print "  MAX=";x
cursor 1,5:color 4:print "  MIN=";y
rem --DTSET-------------------
label DTSET
color 7
cursor 1,7:print "コレデ OK デスカ?"
cursor 1,9 :print "OK ナラ アカ [F]"
cursor 1,10:print "NO ナラ キ  [S]"
if keys()=16 then s=1:wait 2
if keys()=32 then t=1:wait 2
if keys()=0 and s=1 then MAXMIN
if keys()=0 and t=1 then INIT
goto DTSET

rem --INITIALIZE--------------
label INIT
 

レンタル掲示板
/65