完成が楽しみなエントランスの工事(エントランス)

完成が楽しみなエントランスの工事(エントランス)
(画像クリックで1920x1080サイズ)



顔認証になるらしいけど、年パを見せないで入園出来るならいいな。回転バーもなし。ハンドスタンプもなし。フリー通行!楽しみだな。
無理でしょうね。
きっと「帽子を取ってください」となるのでは。ウイッグは?メイクは?楽しみだな。

撮影場所
スポンサーサイト

テーマ : ディズニー・ギャラリー
ジャンル : 写真

セレブレーションストリート夜2(ワールドバザール)

セレブレーションストリート夜2(ワールドバザール)
(画像クリックで1920x1280サイズ) (セレブレーションタワー)(モニュメント)




撮影場所

テーマ : ディズニー・ギャラリー
ジャンル : 写真

GPS-PPSを基準信号にしたPIC周波数計(8桁)

TTL7476の遅延と揺らぎ(備忘録)」の記事でGPSの1秒パルスを基準信号にした周波数計を作ってみよう思い立ってから、4ヶ月後にやっと完成しました。

主な用途は汎用の周波数計ではなくて、以前に買った「秋月の超高精度・水晶発振器(12.8MHz)」を基準周波数として使用する時に実際に発信している正しい周波数を確認する為に使用する目的です。


GPS-PPSを基準信号にしたPIC周波数計(8桁)
上側がPICとTTLで作成した周波数計、下側はGPS受信機

■主な部品
GPSモジュール : VK2828U7G5LF TTL Ublox GPSモジュール(アンテナ付)(\1049)
PIC : PIC16F18313
PPSプリスケーラ : SN74LS163
ゲート等 : SN7400
7Seg表示器 : MAX7219 8-ビット デジタル LED ディスプレイ チューブ(\325)



回路


GPS受信機とカウンター部は分離して作成しました。
理由はGPS衛生の補足場所とPPS出力までの所要時間が分単位であるので、常時電源ONとする為に分離しました。

カウンターの部分は主な部位毎にUNIT化し回路変更を簡単にする為、マザーボードに各ユニットを差し込む方式にしました。

■BUS
GPS-PPSを基準信号にしたPIC周波数計(8桁)
JP4 : 7seg表示器、PPS入力端子、+5V電源を接続する
JP1 : PICで作成したパルスカウンター(周波数計のメイン部分)
JP2 : GPSのPPS信号をn倍化する部分、計測パルスを基準期間通過させる為のGATE部、PICに表示するタイミング信号を送る部分
JP3 : 計測パルスの増幅器(今回は作成せず、そのまま通過させている)
JP5 : 計測パルスの入力を接続、テスト用の信号引き出し用



■PIC
GPS-PPSを基準信号にしたPIC周波数計(8桁)



■PPSxn GATE
GPS-PPSを基準信号にしたPIC周波数計(8桁)



■GPS受信機
GPS-PPSを基準信号にしたPIC周波数計(8桁)



写真




■カウンター部分
GPS-PPSを基準信号にしたPIC周波数計(8桁)



■GPS受信機
GPS-PPSを基準信号にしたPIC周波数計(8桁)



PICソース


/* 
 * File:   main.c
 * Author: 
 *
 * Created on 2018/02/01, 18:07
 */

/* 
 * OSC 内部32MHz ソフトでの設定 CSWEN:OFF
 * 計測パルス入力端子:RA2 TMR0 clock(input)
 * 表示タイミング入力端子:RA3 : 1秒パルス(input)立ち上がりエッジで7seg表示指示
 * * テスト信号:
 *      RA5:(output)
 * * 7セグ8桁LED:
 *      RA4:7segLOAD(output) 橙
 *      RA1:7segCLK(output)  黄
 *      RA0:7segDIN(output)  緑
 */

/*
 * * *概要
 * *カウンター
 * カウンターはunsigned long
 * パルスのカウントはTMR0を16bitカウンターとして使用(RA2をTMR0のclockとする)
 * TMR0のオーバーフロー割り込みで、unsigned long counterHを+1
 * TMR0は常にカウントしている。停止する事はないが、
 * 前段のTTL回路でRA2へ計測パルスを1秒間送り出し、次の一秒間は遮断する。
 * 遮断期間中に7segに計数結果を表示する。
 * *7seg表示
 * MAX7219(7segLED8桁用)を使用
 * メモリ節約と簡易化の為、カウンタ値は最大999,999,999以下と仮定する
 * 99,999,999以下の時、上位ゼロサプレスをする
 * ゼロの時は下一桁に0を表示
 */


/*
 * Config 設定上の注意
 * ICD3によるデバッグを行う場合、WDTは無効にする必要がある。
 * ICD3によるデバッグを行う場合、LVPは無効にする必要がある。
 */


// PIC16F18313 Configuration Bit Settings
// 'C' source line config statements
// CONFIG1
#pragma config FEXTOSC = OFF    // FEXTOSC External Oscillator mode Selection bits (Oscillator not enabled)
#pragma config RSTOSC = HFINT32 // Power-up default value for COSC bits (HFINTOSC with 2x PLL (32MHz))
#pragma config CLKOUTEN = OFF   // Clock Out Enable bit (CLKOUT function is disabled; I/O or oscillator function on OSC2)
#pragma config CSWEN = ON       // Clock Switch Enable bit (Writing to NOSC and NDIV is allowed)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)

// CONFIG2
#pragma config MCLRE = OFF      // Master Clear Enable bit (MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up under control of port pin's WPU control bit.)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config WDTE = OFF       // Watchdog Timer Enable bits (WDT disabled; SWDTEN is ignored)
#pragma config LPBOREN = OFF    // Low-power BOR enable bit (ULPBOR disabled)
#pragma config BOREN = ON       // Brown-out Reset Enable bits (Brown-out Reset enabled, SBOREN bit ignored)
#pragma config BORV = LOW       // Brown-out Reset Voltage selection bit (Brown-out voltage (Vbor) set to 2.45V)
#pragma config PPS1WAY = ON     // PPSLOCK bit One-Way Set Enable bit (The PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle)
#pragma config STVREN = ON      // Stack Overflow/Underflow Reset Enable bit (Stack Overflow or Underflow will cause a Reset)
#pragma config DEBUG = OFF      // Debugger enable bit (Background debugger disabled)

// CONFIG3
#pragma config WRT = OFF        // User NVM self-write protection bits (Write protection off)
#pragma config LVP = OFF        // Low Voltage Programming Enable bit (HV on MCLR/VPP must be used for programming.)

// CONFIG4
#pragma config CP = OFF         // User NVM Program Memory Code Protection bit (User NVM code protection disabled)
#pragma config CPD = OFF        // Data NVM Memory Code Protection bit (Data NVM code protection disabled)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>


#include <stdio.h>
#include <stdlib.h>

#define _XTAL_FREQ 32000000

#define testp PORTAbits.RA5 = 1;PORTAbits.RA5 = 0;

#define M7219LOAD PORTAbits.RA4
#define M7219CLK PORTAbits.RA1
#define M7219DIN PORTAbits.RA0

unsigned long counterH;
char go_disp;

void max7219businit() {
    M7219LOAD = 1;
    NOP(); //32MHz対策
    M7219CLK = 0;
    M7219DIN = 0;
}

void max7219sendloaddata(unsigned char address, unsigned char data) {
    //LOAD OFF
    M7219CLK = 0;
    M7219LOAD = 0;

    //address 送出
    unsigned char m = 0x80;
    do {
        M7219DIN = ((address & m) != 0);
        NOP(); //32MHz対策
        M7219CLK = 1;
        M7219CLK = 0;
    } while (m >>= 1);

    //data送出
    unsigned char m = 0x80;
    do {
        M7219DIN = ((data & m) != 0);
        NOP(); //32MHz対策
        M7219CLK = 1;
        M7219CLK = 0;
    } while (m >>= 1);

    M7219LOAD = 1; //LOAD ON (送信データラッチ指示)
    NOP(); //32MHz対策
    M7219DIN = 0;
}

void max7219bcddisp(unsigned long x, int punctuation_capability, int zero_suppress) {
    char buff[10];
    char n;

    ultoa(buff, 1000000000 + x, 10);

    if (punctuation_capability) {
        buff[6] = buff[6] | 0x80;
        buff[3] = buff[3] | 0x80;
    }

    if (zero_suppress) {
        for (n = 1; n < 9; n++) {
            if (buff[n] & 0x0F) {
                break;
            }
            buff[n] = 0x0F;
        }
    }

    max7219sendloaddata(0x09, 0xFF);
    for (n = 0; n < 8; n++) {
        max7219sendloaddata(0x08 - n, buff[n + 2]);
    }
}


char hosei_sw;
void counter_disp(){
    unsigned long count; 
    unsigned long hosei;
    
    //TMR0H,TMR0Lの順次変更禁止。TMR0Hを読み出せない   
    count = (((unsigned long) counterH * 0x10000) + ((unsigned long) TMR0H * 0x100) + TMR0L);
    count = count;
    
    //ゲート時間が狂っている場合の補正(今回は補正の必要なしのため、0)
    if (hosei_sw) {
        hosei = ((count / 1000) * 0)/100000;
    } else {
        hosei = 0;
    }
    
    max7219bcddisp(count-hosei, 1, 1);
}

void interrupt intservice() {
    INTCONbits.GIE = 0;
    asm("MOVF PORTA,W");

    if (PIR0bits.TMR0IF) {
        PIR0bits.TMR0IF = 0;
        counterH++;
    } else if (PIR0bits.IOCIF) {
        PIR0bits.IOCIF = 0;
        IOCAFbits.IOCAF3 = 0;
        go_disp = 1;
    } else {
        PIR0 = 0;
    }

    INTCONbits.GIE = 1;
}

/*
 * 
 */
int main(int argc, char** argv) {

    //INT Disable 
    INTCON = 0x00; //GIE,PEIE:0;

    //I/O PORT
    PORTA = 0x00; //Clear PORTA
    LATA = 0x00; //Clear PORTA DATA LATCH REGISTER
    ANSELA = 0x00; //digital I/O
    TRISA = 0x0C; //RA2:input; (RA3はinput only) 
    WPUA = 0x0C; //RA3,RA2:Pull-up enabled
    
    
    OSCCON1 = 0x60; //OSCILLATOR CONTROL REGISTER  NOSC:110 HFINTOSC(1 MHz)
    OSCFRQ = 0x7; //OSCFRQ: HFINTOSC FREQUENCY SELECTION  HFFRQ<3:0>  32MHz

    //OSCTUNE = 0x3B; //HFINTOSC TUNING REGISTER

    //INT reg clear
    PIE0 = 0x00;
    PIE1 = 0x00;
    PIE2 = 0x00;
    PIE3 = 0x00;
    PIE4 = 0x00;
    IOCAP = 0x00;   //INTERRUPT-ON-CHANGE PORTA POSITIVE PORTA30:1
    IOCAN = 0x08;   //INTERRUPT-ON-CHANGE PORTA NEGATIVE

    //PPS
    //T0CKIPPS =  0x02; //T0CKI input is RA2 明示的に指定すると機能せず

    //TMR0 init
    //TMR0 is an 8-bit timer 1:1 Postscaler
    T0CON0 = 0x90; //The module is enabled and operating;TMR0 is a 16-bit timer;T0OUTPS:1:1; 
    T0CON1 = 0x10; //T0CKIPPS (True);not synchronized;1:0
    TMR0H = 0;
    TMR0L = 0;


    //MAX7219
    //初期化
    __delay_us(1000); //7seg起動待ち
    max7219businit();
    max7219sendloaddata(0x0c, 0x01); //シャットダウンレジスタ,Normal Operation
    max7219sendloaddata(0x0b, 0x07); //スキャン制限レジスタ,Display digits 0 1 2 3 4 5 6 7

    counterH = 0;
    TMR0H = 0;
    TMR0L = 0;
    counter_disp();

    max7219bcddisp(0,1,1);
    go_disp = 0;
    hosei_sw = 0;


    PIR0 = 0;   //PERIPHERAL INTERRUPT REQUEST REGISTER 0
    PIE0 = 0x30; //TMR0IE=1;IOCIE:1;
    INTCONbits.GIE = 1;
    while (1) {
        if (go_disp) {
            counter_disp();
            go_disp = 0;
            counterH = 0;
            TMR0H = 0;
            TMR0L = 0;
        }
    }

    return (EXIT_SUCCESS);
}





結果


満足のいく結果でした。GPS、秋月の12.8MHz発振器、いずれも短時間のゆらぎも全くないといっていい位でした。
秋月の12.8MHzの超高精度・水晶発振器の温度特性も8秒間のゲート時間で-0.018ppm/℃でした。

感想


GPSのPPS、どのような仕掛けは知りませんが、非常に安定していて驚くばかりです。
感度も良いし、値段も1049円送料無料。ZenFone Go ZB551KLに付けたい。



PPSのプリスケラーをTTLの74163で作成しましたが、最近は簡単に入手できるTTLの種類が減ってきました。
少し寂しい気がしました。



回路を変更しやすくする為に、マザーボード式にしましたが、半分は失敗でした。
ユニット内のGND処理もいい加減なので、信号間の漏れが比較的大でした。誤動作までは至っていませんが。
それに、部品のコストも高くなります。



回路図を清書するのにEAGLEを使いましたが、やっぱり面倒くさい。ライブラリーに無い部品は作らないといけないし、
回路図作成のUIもイマフタツだし。



4ヶ月も掛かった理由は、GPSの通販が中国からなので遅いのと、自身のやる気が起きずに部品を前に何もしないという日々が続いた事ですね。怖い人に進捗報告しない自由意志の個人作業は進みません。精神鍛錬が必要ですね。

5月のディズニーカレンダーはアラビのミニーちゃん

5月のディズニーカレンダーはアラビのミニーちゃん(再掲)
画像は再掲です (画像クリックで1920x2880サイズ)


なんで今頃、アラビのミニーちゃんがカレンダーに??
また出てきてくれればいいのにな。


テーマ : ディズニー・ギャラリー
ジャンル : 写真

試み(ダンサーさん)

試み(ダンサーさん)



テーマ : ディズニー・ギャラリー
ジャンル : 写真

スロープの電装(イクスピアリ)

スロープの電装(イクスピアリ)
(画像クリックで1920x1080サイズ)

色々試みているのですが、なかなか上手くいまきません。


上手くいかない事が多すぎる


ZenFone Go ZB551KLのGPS機能がお粗末過ぎて、gooのg08(Android7.1.2)をキャンペーンでかいました。
目的のGPS機能は正常で目的は達成しましたが、またまた都合の悪い事象がありました。

それは、スリープ中にメール(K-9)やメッセージ(050plus)を受信しません。
どうやら、Android6以降に実装されたDozeという機能が関係しているようです。
一定期間経過後のスリープ中ではいろんな機能に制限を付けて、電池の消耗を抑えるのが目的らしいのですが、
これって、iPhoneで問題となった所とよく似ていますね。

このDozeから逃れる為に「電池の最適化」で「最適化していないアプリ」に指定しました。
K-9のみならず、影響しそうなアプリを軒並み。でも駄目でした。

仕方なく、有料アプリ「Disable Doze(ベータ版)」を導入しましたが、
結果的には、長期のスリープ中もメールやメッセージを受信する時もあるし、しない場合もあります。

iPhoneにせよ、Androidにせよ「本末転倒」の極みですね。
電池の長持ちの為に、高額な機種の性能を犠牲にしたり、リアルタイム性の重要なモバイル端末でリアル性を犠牲にしたり。
はっきり言いたい「バカか」と。その機能を利用するか否かはユーザーが選択できる様にしてあれば「流石」と褒めそやされるのに。
ここ数日、すなわち人生の0.01%以上をこの為に失いました。

他にもトラブルだらけですが、この件はユーザーが出来る範囲でもう少し頑張ってみます。


撮影場所

テーマ : ディズニー・ギャラリー
ジャンル : 写真

お気に入り(イクスピアリ)

お気に入り(イクスピアリ)
(画像クリックで1920x1280サイズ)


何時もの休憩場所。実際より古めかしい感じにしてみました。

撮影場所

テーマ : ディズニー・ギャラリー
ジャンル : 写真

裏通り(レストラン櫻)

裏通り(レストラン櫻)
(画像クリックで1920x1080サイズ)



撮影場所

テーマ : ディズニー・ギャラリー
ジャンル : 写真

色の印象(イクスピアリ)

色の印象(イクスピアリ)
(画像クリックで1920x2880サイズ)


撮影場所

テーマ : ディズニー・ギャラリー
ジャンル : 写真

IKSPIARIのイメージ(イクスピアリ)

IKSPIARIのイメージ(イクスピアリ)
お知らせ
■注意:Google Chrome以外のブラウザでは動作しない事もあります。
お好みに応じて
画像だけの表示でいいよ
やっぱり全部表示して
背景は黒がいいな
背景を元に戻して
サブジャンル
メモリアルマップ
My Favorite Photo
検索フォーム
プロフィール

otsu.usiwakamaru

Author:otsu.usiwakamaru
五条の橋でひらりひらりと欄干を飛び渡る牛若丸のように、興の向くまま電子回路にプログラミングに写真にと飛び回っています。

プロフィール詳細

カレンダー
06 | 2018/07 | 08
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
キーワード
クリックしたキーワードの記事のみ表示します。

ダンサー ミニー ミッキー デイジー ドナルド グーフィー キャラクター  3D 試み MFP 電池 ティンカーベル デザイン クラリス 全天球 チップデール プルート パークテーマ キャスト IXY スクルージ マレフィセント スモールプラネット ダッフィー SPOT 改造 

最新記事
月別アーカイブ
全記事表示リンク

全ての記事を表示する

おすすめプログ(新着記事)
リンク


にほんブログ村
カテゴリ
橋 (1)
PIC (3)
カウンタ
訪問者数(UU)

アクセス数

現在の閲覧者数

tael no013用