カテゴリー
学術

実験用電源の作製12

 デジタル部のレギュレータ出力の様子です。7812、7805それぞれ近い値が出ています。保護のためにダイオードを入れるとピッタリとした電圧にならないです。

カテゴリー
学術

実験用電源の作製11

 レギュレータから出ている電圧、逆流防止のダイオードがGNDと出力に接続されているため若干低い値です。

 プラス側の1/2の電圧

 マイナス側の1/2の電圧

 無負荷の状態のアナログ用電源の電圧です。概ね予定通りの値が出ています。

 負荷をつないだ様子です。

カテゴリー
学術

実験用電源の作製10

実験用電源装置
実験用電源装置

 ブレッドボード上にACアダプターから19V入力しアナログ用電源±6V、デジタル用電源5V・12Vを出力できるように部品を組み込みました。

カテゴリー
学術

実験用電源の作製09

 手持ちの抵抗の中でワット数の多いものを並べて実験用の負荷にします。直列・並列を組み合わせて電源装置の能力を検証します。


 ですが、手持ちのワット数の大きそうな抵抗器だったのですが発熱が大きく異臭までするのでもっと大きな抵抗器を入手しました。

カテゴリー
学術

実験用電源の作製08

 実験用なので金属ケース入れないでブレッドボードのまま使用するためには放熱器を工夫しなければなりません。金属を加工する腕も設備も有りませんのでアルミ缶かアルミホイルで何とかします。

ダブルクリップでアルミ箔を留める
ダブルクリップでアルミ箔を留める
ダブルクリップでアルミ箔を留める
ダブルクリップでアルミ箔を留める
ダブルクリップでアルミ箔を留める
ダブルクリップでアルミ箔を留める

 100cm位の長さのアルミホイルを長い方の中心線で二つ折りにしダブルクリップの中サイズの幅位で蛇腹にします。ハリセン状に出来たらレギュレータの金属部分に被せてダブルクリップ中で上から挟みます。

 更に両脇をダブルクリップ小で押さえ込み密着度を高めます。

 使用する時は蛇腹を広げて、しまう時は閉じて曲げればコンパクトになり便利かもしれません。百均で揃うし余っても家庭で使えるので無駄にもならないと思います。後は能力が有れば申し分ありません。


※放熱器とレギュレータの間の絶縁を忘れていました。

カテゴリー
学術

実験用電源の作製07

複合三端子レギュレータ
複合三端子レギュレータ

 デジタル部は殆ど5Vでなので19Vからいきなり5Vに下げたのですが放熱が間に合わず一旦12Vに下げてから7805で取り出すようにしました。二段階で放熱させています。

7812A
7812A
7805A
7805A
カテゴリー
学術

実験用電源の作製06


三端子レギュレータとレイルスプリッタ
三端子レギュレータとレイルスプリッタ
三端子レギュレータとレイルスプリッタ

 アナログ回路部に必要な両電源を作ります。19VのACアダプターからの入力を7812を使って降圧しトランジスターで組んだレイルスプリッタで仮想GNDを作ります。

7812A
7812A
2SC1162
2SC1162
2SB772
2SB772
カテゴリー
学術

実験用電源の作製05

 諦めずに前に進みます。電圧が負荷により不安定になるならばツェナーダイオードを使えば良いとわかったので早速ネットで調べ試しました。

 定格通りの電圧になることがわかり多段レイルスプリッタをばらさなくても良いかもしれないと期待しました。

 ここで新たな問題に気付きました。電圧は制御できても電力が小さいのです。

 トランジスタとツェナーダイオードを組み合わせて大きい電流を流せることが解り多段レイルスプリッタを諦めなくても良いかもしれないと調査を続けましが

 またもダメでした。ツェナーダイオードとパワートランジスタを組み合わせ保護回路も付け加えていくとそれはレギュレータになるとどなたかのブログにあったのです。レギュレータは知っていて持ってもいたのですが発熱が気になり別の方法をとチャレンジしたのですが失敗に終わりました。

 降圧には発熱が避けられないのです。

7805A
7805A
7812A
7812A
カテゴリー
学術

実験用電源の作製04

 レイルスプリッタが思いのほか簡単に出来たので更にもう一段追加して4分割しました。

複合レイルスプリッタ
複合レイルスプリッタ

 最初のレイルスプリッタの上下にもう一段追加したので19V/4=4.75Vが四つできます。GNDとする位置を変えればプラスマイナス様々な組み合わせで便利だと考えました。実際に電圧を測定すると均等に四分割されていたのです。

 更に入力側にある上下の抵抗値を調整すれば分割の比率を変えることができるため実験用電源として申し分ない物ができたとその時は思いました。

 しかし、この理屈はあくまでも負荷が均等であれば成り立つことに作ってから気付きました。実験用ですからそれぞれの電圧に様々な状態の負荷が接続されるので開放時の電圧がそのまま維持されるはずもありません。回路図上どこを見ても電圧を維持する機構がないからです。出力側のコンデンサは瞬間的な変動を抑えてくれるだけです。

 ぞろぞろトランジスターを並べてみても上手くいかずまた失敗をしてしまいました。

 

カテゴリー
学術

実験用電源の作製03

 ATX電源の実験装置化に失敗したので次に19VのACアダプターを利用することにしました。3.75Aもあるアダプターなので電力は十分ですが電圧が少し高いので降圧します。

 損失が少ない方が良いと思いレイルスプリッタでまずは1/2にしてみました。

レイルスプリッタ

 綺麗に二分割され結果は上々でした。

2SB512
2SB512
2SD313
2SD313
カテゴリー
学術

実験用電源の作製02

 ある物を利用してROMライターの電源を作ることにしたので、まず初めにATX電源を利用することにしました。

 ±5V、12Vが取れ数百Wの電力があれば何でも出来ると思い早速ネットで先達のチャレンジを調べました。

 皆さんうまく利用できてることを知り真似してPower ONの端子をショートすると、

 回ったのです。FANが。ATX電源単独で動き出しました。

 幸先が良い気がして直ぐに各端子の電圧をテスターで調べたところマイナス5Vもプラス5Vも12Vもちゃんと出ていました。

 念のため規格通りか一通りテスターを当てていたのですが突然「バンッ」と振動を伴うような音が出たのです。

ATX電源
ATX電源
ATX電源
ATX電源

 壊れたようです。中を見たのですが全くわかりません。焼けたり焦げたり割れたりなど外面的な損傷は見つかりませんでした。

 このような繊細な機器は実験用には向かないです。ATX電源の目的外使用は止めました。

カテゴリー
学術

実験用電源の作製01

オペアンプで両電源を作る
オペアンプで両電源を作る

 ROMライターを作成中で電源は12VのACアダプターを使っています。上の写真のようにオペアンプを二つ並べてレイルスプリッタを構成しアナログ部には両電源をデジタル部にはプラス電源のみを供給していました。

 いよいよEPROM周りの実装段階になった時、電力と書き込み時の電圧の不足に突き当たったのです。

 そこで
安定化電源装置を買う
部品として電源ユニットを買う
今のまま昇圧する
ある物を利用する
等の選択肢がありましたが、ある物を利用することにしました。

カテゴリー
学術

数について

数について
数について

 デーデキントは初めて微分学の講義をすることになったとき数の理論の真に科学的な基礎に欠けていることを痛感したそうです。

 それによって生み出されたこの本は21世紀の極東の島にさえ現地の言語に訳されて流通しています。

 自らの至らなさを痛感し基本に立ち帰って学び直す。素晴らしいことです。

カテゴリー
学術

UPD8048C

UPD8048C
UPD8048C

ChatGPTに聞いてみた。

User
UPD8048Cは何ですか。

ChatGPT
UPD8048Cは、NEC(日本電気株式会社)が開発した8ビットマイクロコントローラ(MCU)の1つです。UPD8048Cは、インテル(Intel)の8048マイクロコントローラと互換性があります。

UPD8048Cは、40ピンのデュアルインラインパッケージ(DIP)で提供され、8ビットのデータバス、16ビットのアドレスバス、1KBのROM、64バイトのRAM、2つのタイマ/カウンタ、および入出力ポートを備えています。また、UPD8048Cは、最大2MHzのクロック周波数に対応しています。

UPD8048Cは、多くのアプリケーションに使用されています。具体的には、電子レンジ、自動販売機、自動車用途、家庭用電子機器、制御装置などがあります。UPD8048Cは、低消費電力設計であるため、電池駆動のアプリケーションにも適しています。

UPD8048Cは、インテルの8048と互換性があるため、既存の8048ベースのシステムをアップグレードするためにも使用されます。また、UPD8048Cは、NECのマイクロコントローラファミリーの1つであり、他のNEC MCUとの互換性があるため、システム設計者が複数の製品を開発する場合に便利です。

カテゴリー
学術

M80C39

M80C39
M80C39

ChatGPTに聞いてみた。

User
M80C39は何ですか。

ChatGPT
M80C39は、インテル(Intel)が開発した8ビットマイクロコントローラ(MCU)の1つです。このMCUは、8039とも呼ばれます。M80C39は、周辺デバイスとのインタフェースが容易であるため、多くのアプリケーションに使用されています。

M80C39は、40ピンのデュアルインラインパッケージ(DIP)で提供され、8ビットのデータバス、16ビットのアドレスバス、128バイトのRAM、2つのタイマ/カウンタ、および入出力ポートを備えています。また、M80C39は、外部クロックソースによって駆動され、最大12MHzのクロック周波数に対応しています。

M80C39は、多くのアプリケーションに使用されています。具体的には、自動車用途、産業用途、制御装置、セキュリティシステム、家庭用電子機器などがあります。M80C39は、堅牢なデザインと高い信頼性を備えているため、長期にわたって使用され続けています。

User
OKI M80C39は何ですか。

ChatGPT
OKI M80C39は、インテル(Intel)が開発した8ビットマイクロコントローラ(MCU)の1つで、OKIがライセンス生産したものです。M80C39と同様の機能を持ち、互換性がありますが、OKI M80C39にはいくつかの異なる特徴があります。

OKI M80C39は、OKIの製造プロセスで製造されたため、一部のパラメーターが異なる場合があります。たとえば、M80C39には最大動作周波数12MHzのバージョンと16MHzのバージョンがありますが、OKI M80C39には最大動作周波数12MHzのバージョンしかありません。

また、OKI M80C39には、内部ROM(Read-Only Memory)が8KBまたは16KBのバージョンがありますが、M80C39には内部ROMがないため、外部ROMを使用する必要があります。

OKI M80C39は、同様のアプリケーションに使用されます。自動車用途、産業用途、制御装置、セキュリティシステム、家庭用電子機器などに使用され、長期間にわたって信頼性が高いことが証明されています。

カテゴリー
学術

M82C37A-5

M82C37A-5
M82C37A-5

ChatGPTに聞いてみた。

User
M82C37A-5は何ですか。

ChatGPT
M82C37A-5は、8ビットのプログラマブルインタフェースコントローラ(PIC)の1つです。このICは、複数のデバイスを制御するために使用されます。具体的には、キーボード、マウス、ディスクドライブ、プリンターなど、様々な入出力デバイスを制御するために使用されます。

M82C37A-5は、PLCC(プラスチックリード付きチップキャリア)パッケージで提供され、68ピンのパッケージングを採用しています。このICには、8つのビット幅のデータバス、8つの入力/出力ポート、および制御信号を生成するための論理回路があります。

M82C37A-5は、DMA(Direct Memory Access)制御機能を持ち、高速なデータ転送を実現することができます。また、このICは、CPUとの接続が容易であるため、多くのシステムで使用されています。M82C37A-5は、PC/AT互換機、POS端末、携帯型デバイスなどのアプリケーションに広く使用されています。

カテゴリー
学術

認識

 コンピュータを使って情報の認識を行なってみます。

$$認識対象o、認識関数f、認識結果c$$

$$c_n=f_n(o)$$

$$認識結果集合C$$

$$C=\begin{Bmatrix}c_{1}, c_{2}, \dots, c_{n}\end{Bmatrix}$$

$$本能p、本能集合P$$

$$P=\begin{Bmatrix}p_{1}, p_{2}, \dots, p_{n}\end{Bmatrix}$$

$$学習対象関数g$$

$$g:P\stackrel{onto}{\longrightarrow}C$$

$$学習結果l$$

$$l=\left( o,g \right)$$

$$学習結果集合L$$

$$L=\begin{Bmatrix}l_{1}, l_{2}, \dots, l_{n}\end{Bmatrix}$$

$$新しい認識対象o’$$

$$l’=\left( o’,g \right)$$

$$l’ \in L の時答え有りとする。$$

$$l’ \notin L の時学習結果集合に追加する。$$

 ここまでを認識とし更に判断するためには勇気、創造、神、現実、空想等も属性に加えアナムネーシスの方法で学習する仕組みが良いと考えます。

カテゴリー
学術

形而上学叙説

形而上学叙説
形而上学叙説

 冒頭の略伝に「力学の究極理由、運動法則そのものの究極理由を求めた時に、それが数学の中には見つからない、形而上学に戻らなければならないと気が付いて全く驚きました。そこで私はエンテレケイアに立ち帰って」とあります。

 数学や物理は自然科学の分野ですが究極理由を追い求めると哲学まで遡って考えを深める必要があったと理解しました。

 この本が神学ではなく自然科学であるということなら神、現実と空想も人工知能には必要と思いました。

カテゴリー
学術

自作ROMライター その7

 変調波の周波数をもっと高くして実用的なデータ転送速度にする為に搬送波の周波数は高いほうを使います。

 ステレオサウンド出力の左右それぞれ二つの変調波を載せて合計4チャンネルの信号を装置に送ります。

搬送波:19kHz, 21kHz
変調波:700Hz
をそれぞれ左右に出力

 この時アナログ/デジタル変換にシュミットトリガーを使っていたのですが上手くいかずヒステリシス付きのコンパレータに変更しました。

変調波を700Hzにして実用的なデータ転送速度にする
変調波を700Hzにして実用的なデータ転送速度にする
この図の搬送波は500Hzです。
この図の搬送波は500Hzです。
この図の搬送波は500Hzです。
#include <iostream>
#include <windows.h>
#include <math.h>
#include <MMSystem.h>

#pragma comment (lib, "winmm.lib")

constexpr auto SAMPLING = 192000;
constexpr auto CHANNEL = 2;
constexpr auto BITSPERSAMPLE = 16;
constexpr auto MAXAMP = 32767;
constexpr auto DIV = 4;
constexpr auto BUFFERING = 10;

void createWave(LPWORD lpData, size_t frequency, size_t sampling, WORD amplitude) {
    double wavelength = (double)sampling / (double)frequency;
//    double pi = 3.14159265359;
    for (int i = 0; i < wavelength; i++) {
        lpData[i] = (WORD)(amplitude * sin((i*6.28318530718) / wavelength));
    }
}

BOOLEAN isON(unsigned char data, size_t bit, size_t bitLength, size_t value) {
    int oneByte = 8;
    for (int i = 0; i < oneByte; i++) {
        unsigned char mask = 0x80 >> i;
        if (((data & mask) == mask) &&
            //            (bitLength * ((bit - oneByte) + i)) <= (value % (bitLength * bit)) &&
            //            (value % (bitLength * bit)) < (bitLength * ((bit - oneByte + 1) + i))) {
            (bitLength * (bit - oneByte + i)) <= (value % (bitLength * bit)) &&
            (value % (bitLength * bit)) < (bitLength *(bit - oneByte + 1 + i))) {
            return true;
        }
    }
    return false;
}

void addWave(LPWORD param1, LPWORD param2, size_t length) {
    for (int i = 0; i < length; i++) {
        param1[i] += param2[i];
    }
}

DWORD soundOut(
    LPWORD* lpWaveData,
    HWAVEOUT hWaveOut,
    unsigned char data,
    size_t bit,
    size_t cFrequency,
    BOOL reset,
    BOOL control
) {
    LPWORD lpSinWave;
    LPWORD lpWave;
    LPWORD lpWaveTemp;
    size_t i, j;
    size_t cWavelength = SAMPLING / cFrequency;
    size_t dataLength;
    size_t andSequence = 0;
    size_t dWavelength;
    size_t dFrequency;

    dataLength = (size_t)CHANNEL * (BITSPERSAMPLE / 8) * cWavelength * bit / sizeof(WORD);
    if (control == TRUE) {
        andSequence = (size_t)CHANNEL * (BITSPERSAMPLE / 8) * cWavelength / sizeof(WORD);
    }

    lpWave = (LPWORD)calloc(sizeof(WORD), dataLength + andSequence);
    for (i = 0; i < dataLength + andSequence; i++) {
        lpWave[i] = 0;
    }
    lpWaveTemp = (LPWORD)calloc(sizeof(WORD), dataLength + andSequence);
    lpSinWave = (LPWORD)calloc(sizeof(WORD), SAMPLING);

    /*  チャンネル1 ********************************/
    // シリアルデータ
    dFrequency = 21000;
    dWavelength = SAMPLING / dFrequency;
    createWave(lpSinWave, dFrequency, SAMPLING, MAXAMP / 2);
    memset(lpWaveTemp, 0x00, (dataLength + andSequence) * sizeof(WORD));
    for (i = 0, j = 0; i < dataLength; i += CHANNEL, ++j) {
        lpWaveTemp[i] = lpSinWave[j];
        if (j >= dWavelength) { j = 0; }
    }
    for (i = 0; i < dataLength; i += CHANNEL) {
        if (isON(0xff- data, bit, cWavelength * CHANNEL, i)) {
            lpWaveTemp[i] = 0;
        }
    }
    addWave(lpWave, lpWaveTemp, dataLength + andSequence);

    // 制御データ
    if (andSequence > 0) {
        dFrequency = 16000;
        dWavelength = SAMPLING / dFrequency;
        createWave(lpSinWave, dFrequency, SAMPLING, MAXAMP / 2);
        memset(lpWaveTemp, 0x00, (dataLength + andSequence) * sizeof(WORD));
        for (i = dataLength + andSequence / 2, j = 0; i < dataLength + andSequence; i += CHANNEL, ++j) {
            lpWaveTemp[i] = lpSinWave[j];
            if (j >= dWavelength) { j = 0; }
        }
        addWave(lpWave, lpWaveTemp, dataLength + andSequence);
    }

    /*  チャンネル2 ********************************/
    // クロック
    dFrequency = 21000;
    dWavelength = SAMPLING / dFrequency;
    createWave(lpSinWave, dFrequency, SAMPLING, MAXAMP / 2);
    memset(lpWaveTemp, 0x00, (dataLength + andSequence) * sizeof(WORD));
    for (i = 1, j = 0; i < dataLength; i += CHANNEL) {
        lpWaveTemp[i] = lpSinWave[j];
        ++j;
        if (j >= dWavelength) { j = 0; }
    }
    for (i = 1, j = 0; i < dataLength; i += CHANNEL, ++j) {
        if (j < cWavelength/1.4) { lpWaveTemp[i] = 0; }
        if (j >= cWavelength) { j = 0; }
    }
    addWave(lpWave, lpWaveTemp, dataLength + andSequence);

    // リセット
    if (reset == TRUE) {
        dFrequency = 16000;
        dWavelength = SAMPLING / dFrequency;
        createWave(lpSinWave, dFrequency, SAMPLING, MAXAMP / 2);
        memset(lpWaveTemp, 0x00, (dataLength + andSequence) * sizeof(WORD));
        for (i = 1, j = 0; i < cWavelength/2; i += CHANNEL, ++j) {
            lpWaveTemp[i] = lpSinWave[j];
            if (j >= dWavelength) { j = 0; }
        }
        addWave(lpWave, lpWaveTemp, dataLength + andSequence);
    }

    free(lpSinWave);
    free(lpWaveTemp);

    *lpWaveData = lpWave;
    return (DWORD)(dataLength + andSequence) * sizeof(WORD);
}

int main() {

    LPWORD lpWave[BUFFERING];
    WAVEHDR whdr[BUFFERING];
    WAVEFORMATEX wfe;
    HWAVEOUT hWaveOut;

    wfe.wFormatTag = WAVE_FORMAT_PCM;
    wfe.nChannels = CHANNEL;
    wfe.wBitsPerSample = BITSPERSAMPLE;
    wfe.nBlockAlign = CHANNEL * BITSPERSAMPLE / 8;
    wfe.nSamplesPerSec = SAMPLING;
    wfe.nAvgBytesPerSec = wfe.nSamplesPerSec * wfe.nBlockAlign;

    for (int i = 0; i < BUFFERING; i++) {
        whdr[i].dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP;
        whdr[i].dwLoops = 1;
        lpWave[i] = NULL;
    }

    std::string str;
    std::cout << "2桁毎の16進コードを入力しEnterを押して下さい。(00 ~ FF)" << std::endl;
    std::cout << "続けて入力する場合は間を空けないでください。" << std::endl;
    std::cout << "Ctrl+Zを入力しEnterで終了します。" << std::endl;
    std::cin >> str;

    waveOutOpen(&hWaveOut, 0, &wfe, 0, 0, CALLBACK_NULL);

    char strData[3];
    strData[2] = 0x00;
    size_t bit = 9;
    // 変調波
    size_t frequency = 700;
    int freeBuffer = 0;

    for (int i = 0, j = 0, k = 0; i < str.size(); i += 2, j++, k++) {
        if (j >= BUFFERING) {
            j = 0;
        }

        freeBuffer = j + 1;
        if (freeBuffer >= BUFFERING) {
            freeBuffer = 0;
        }
        if (lpWave[freeBuffer] != NULL) {
            free(lpWave[freeBuffer]);
            lpWave[freeBuffer] = NULL;
        }

        strData[0] = str[i];
        strData[1] = str[(size_t)i + 1];
        // 入力された文字列をデータに変換
        unsigned char data = (unsigned char)strtol(strData, NULL, 16);

        // サウンド出力
        if (j % 3 == 0) {
            whdr[j].dwBufferLength = soundOut(&lpWave[j], hWaveOut, data, bit, frequency, TRUE, FALSE);
        }
        else if (j % 3 == 2) {
           whdr[j].dwBufferLength = soundOut(&lpWave[j], hWaveOut, data, bit -1, frequency, FALSE, TRUE);
        }
       else {
            whdr[j].dwBufferLength = soundOut(&lpWave[j], hWaveOut, data, bit - 1, frequency, FALSE, FALSE);
        }

        whdr[j].lpData = (LPSTR)lpWave[j];
        waveOutPrepareHeader(hWaveOut, &whdr[j], sizeof(WAVEHDR));
        waveOutWrite(hWaveOut, &whdr[j], sizeof(WAVEHDR));

        if (k > BUFFERING - 3) {
            Sleep((1000 * (DWORD)bit) / (DWORD)frequency);
        }
    }

    int num = (int)str.size() / 2;
    if (num == 0) {
        num = 1;
    }
    else if (num > BUFFERING) {
        num = BUFFERING;
    }
    Sleep((1000 * (DWORD)bit * (num + 1)) / (DWORD)frequency);

    waveOutReset(hWaveOut);
    waveOutClose(hWaveOut);

    for (int i = 0; i < num; i++) {
        if (lpWave[i] != NULL) {
            free(lpWave[i]);
            lpWave[i] = NULL;
        }
    }
}
カテゴリー
学術

不完全性定理

不完全性定理
不完全性定理

 前書きによれば特殊相対性理論は初等的知識で理解することができるが不完全性定理は入門書を読んだくらいでは到底理解することはできないと威し文句が書かれています。恐ろしげな本ですが勉強してみます。


 読んでみましたが前半の論文本体はやはり難しく理解が進みませんでしたが後半の解説でかろうじて概要を掴むことができたと思います。

 ある数学の系に矛盾がないことをその系自体で証明できない。

 自身の正当性を自身のみでは証明できないなんて人間のような話でした。


 常々人工知能には「知」のみでは無く「能」もなければそれは単なる知の集合であって知能ではないと思っていました。

「能」に当たる部分を本能とすれば知の集合と本能を併せて人工知能ができると考えた訳です。

 不完全性定理を読んで「知」と「能」のみならず「勇気」と「創造」も必要であると考えを改めました。

 ゲーテルに勇気と創造がなければ系が持つ矛盾を乗り越えることはできなかったでしょう。