JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

PIC16F1705 MCC LED Blink

2022-03-31 19:18:46 | MPLAB X MCC
 Raspberry Pi Picoの勉強が一段落しましたので、PICの勉強を再開します。

 対象とするPICは、PIC16F1705です。このPICについては、2019年にMPLAB X + XC8で様々テストをして、このブログとJH7UBCホームページに掲載しました。

 PIC16F1705の特徴は、PPS(Peripheral Pin Select)、DAC、オペアンプ内蔵などですが、設定はけっこう面倒です。今回は、MCC(MPLAB X Code Configurator)を利用して、各種テストをやってみることにします。

 まず、定番のLチカ(LED点滅)をやってみましょう。RC3にLEDを接続して、点滅させます。回路図です。



 MPLAB X + XC8でプロジェクトを作り、MCCを立ち上げます。
 System Moduleです。Clockは、INTOSC,FOSC,8MHz_HF,PLL Enableとし、32MHz(最高速)としました。
 Low-Voltage Programming Enableのチェックを外し、RC3を出力に設定します。



 Pin Moduleの設定です。



 プログラムリストです。非常に簡単です。
-------------------------------------------------------------
/*
 * PIC16F1705 MCC LED Blink
 * 2022.03.31
 * JH7UBC Keiji Hata  
*/

#include "mcc_generated_files/mcc.h"

void main(void)
{
     // initialize the device
     SYSTEM_Initialize();

     while (1)
    {
         LATC3=1;
         __delay_ms(500);
         LATC3=0;
         __delay_ms(500);
    }
}
-------------------------------------------------------------
ブレッドボードです。0.5秒ごとにLEDが点滅します。



新QSLカード

2022-03-27 10:55:20 | アマチュア無線
 久しぶりにQSLカードを作りました。4月以降、交信いただいた各局にお届けします。


 写真は、喜多方市三ノ倉高原のひまわり畑で、2012年に撮影したものです。
 喜多方市の北部、喜多方市熱塩加納町にある三ノ倉スキー場は、春は菜の花、夏はひまわり、秋はコスモスと季節の花が一面に咲き乱れます。
 「花でもてなす喜多方」をテーマに行われていた事業ですが、コロナ禍になってこの2年ほどは中止されています。今年は再開されるかもしれません。

NHK オールデイ・ジャズ・リクエスト

2022-03-21 14:02:55 | JAZZ
 NHK FMのジャズ番組「オールデイ・ジャズ・リクエスト」をエアチェックしたカセットテープが出てきました。

 この番組は、1992年から始まり10年以上続いた、一日中ジャズのリクエストを放送する番組でした。当時は録音はまだアナログで、このようにテープに録音するのが一般的でした。

 10時間以上の番組ですから、カセットテープはC120を使い、5本から6本になります。録音にはラジカセを使い、片面の録音が終わるとひっくり返すという操作を繰り返します。うーん、暇だったんですね。これらのテープ、録音から20年以上経ちましたが、今でも十分聞くことができます。


 この日は、一日中(10時間30分以上)ジャズを楽しめるジャズファンにとっては極楽のような一日でした。

 私は1回だけリクエストをして採用されたことがありました。懐かしい思い出です。

 因みに、録音した日付とデータです。

 第6回オールデイ・ジャズ・リクエスト
 1997年10月10日(金)12:15~22:45
 司会 立子山博恒アナウンサー 中川ヨウ

 第8回オールデイ・ジャズ・リクエスト
 1999年10月11日(月)12:15~22:45
 司会 浜中博久アナウンサー 齋藤陽子

 第9回オールデイ・ジャズ・リクエスト
 2000年10月9日(月)12:00~22:45
 司会 浜中博久アナウンサー 小川もこ

 第10回オールデイ・ジャズ・リクエスト
 2001年10月28日(日)14:00~25:00
 司会 浜中博久アナウンサー 小川もこ

 この番組、2003年までは続いたことが確認できましたが、いつ終わったかは分かりませんでした。

富士通ノートパソコン LIFE BOOK AH52/DAのキーボード交換

2022-03-14 12:50:18 | パソコン
2011年製の富士通ノートパソコンAH52/DAのキーボードが壊れました。

 このノートパソコンは、2021年6月にHDDが不調となり、SSDに換装。ついでにCPUもCore i3 2350M SR0DN 2.3GHzに換装。Windows 10で快適に動くようになりました。そして、今回はキーボード破損。インターネット閲覧程度ですが、快調に動いているので、キーボードを交換することにしました。

 AH52/DA用のキーボードネット上で探すと、Amazonやヤフオクでまだ手に入ることが分かりました。
 今回は、ヤフオクで新品を落札し、購入しました。3,280円+送料560円でした。本日到着しましたので、さっそく交換作業にかかりました。

 まず、バッテリーを外します。

 キーボードの上部の細長いカバーをは外します。(黄色の四角の部品)
 右側からドライバなどで少しこじれば、手で簡単に外れます。


 キーボードを固定している5本のビスを外します。(黄色い〇)

 キーボードの左下にコネクタがありますので、コネクタの両側のプラスチックの部品を上にスライドすれば、キーボードが外せます。

 キーボードを外した状態です。 


 新しいキーボードを左下のコネクタに取り付け、5本のネジを締め、カバーを元のようにはめて、交換完了です。所要時間は10分ほどです。

  バッテリーを戻し、パソコンの電源を入れて、動作確認をしました。OKです。
 キーボード交換は、簡単ですね。これでもう少し使えそうです。

Raspberry Pi Pico MiroPython エレキーその2

2022-03-09 15:13:02 | Raspberry Pi Pico
 前の記事で製作したエレキーにメモリーキー機能を加えてみました。
 Raspberry Pi Picoは、EEPROMを持っていませんので、メッセージは、プログラム(スクリプト)の中に記載します。

 回路図です。前の記事とほぼ同じです。メモリは、とりあえずM1とM2とし、それぞれのボタンが押された時、メモリに記憶されたメッセージが送出されます。メッセージ送出中にdotまたはdashが押されれば、メッセージ送出は中断されます。単3電池2本3Vで動作するようにしました。
 

ブレッドボードです。2SC1815オープンコレクタ出力の部分は省略しています。

 パドルとスピーカーを接続して、テストをしています。


 プログラム(スクリプト)です。メモリ送信中の速度調節はできません。
 通常、モールス符号送信では、文字間は、3dot分、語間は、7dot分と決められています。今回は、dot_outでdot+space、dash_outでdash+spaceを送出しています。(dash=3dot、spaceはdotと同じ時間)したがって、文字間(char_space)=2dot分、語間(word_space)=6dot分としています。
dash_time=dot_time*3
char_space=dot_time*2
word_space=dot_time*6
とすれば、良いのですが、掛け算は時間がかかりますので、全て足し算と左シフト(2倍)で計算しています。
 文字→モールス符号送出は、メモリのメッセージを左から一文字ずつ取り出し、ASCIIコードから47を引き、/~Zの文字を0~43の数字に変換し、M_codeリストの当該数値の符号を取り出して、送出しています。
 ただし、語間を表すスペース(ASCIIで32)の時は、word_spaceを送出しています。
 M1='CQ CQ DE JH7UBC・・・・'
 M2=’’DE JH7UBC K
の部分を各局用に書き換えてください。
------------------------------------------------------------------------------------
"""
Raspberry Pi Pico MicroPython Elekey メモリキーヤー付き
2022.4.13
JH7UBC Keiji Hata
"""
from machine import Pin,ADC,Timer,PWM

#setup
led = Pin(16,Pin.OUT)#エレキー出力
TX = Pin(20,Pin.OUT)#TX キーイング出力
dot_key=Pin(0,Pin.IN,Pin.PULL_UP)#パドルのドットキー
dash_key=Pin(1,Pin.IN,Pin.PULL_UP)#パドルのダシュキー
M1_button=Pin(12,Pin.IN,Pin.PULL_UP)#メモリー1
M2_button=Pin(13,Pin.IN,Pin.PULL_UP)#メモリー2

a=ADC(0)#速度調整用
timer=Timer()#割込みタイマー
count=0
gate_flag=0
led.value(0)

#PWM(side tone)設定
pwm = PWM(Pin(15))   #GP20に出力
pwm.freq(700)       #周波数700Hz
pwm.duty_u16(0)  #最初、音を出さない

mode=0 #mode 0:no signal 1:dot out 2:dash out
dot_flag=0
dash_flag=0
mem_flag=0

#モールス符号(/0~9~A~Z)ASCII順
M_code = ['-..-.','-----','.----','..---','...--','....-','.....',
          '-....','--...','---..','----.','---...','--..--',
          '','-...-','','..--..','.--.-.','.-','-...','-.-.','-..',
          '.','..-.','--.','....','..','.---','-.-','.-..','--','-.',
          '---','.--.','--.-','.-.','...','-','..-','...-','.--',
          '-..-','-.--','--..']

#ここにメッセージメモリーの内容を書き込む
M1='CQ CQ DE JH7UBC JH7UBC JCC 0708 PSE K'
M2='DE JH7UBC K'

#割込みサービスルーチン
def ISR(t):
    global count,dot_flag,dash_flag,mem_flag
    if gate_flag==1:#gateが開いていればカウントアップ
        count=count+1
    if mode==1 and dash_key.value()==0:
        dash_flag=1
    if mode==2 and dot_key.value()==0:
        dot_flag=1
    if mem_flag==1:#メモリ送信中にdotまたはdashが押されたら送信停止
        if dot_key.value()==0 or dash_key.value()==0:
            mem_flag=0

#Timer割込み設定
timer.init(freq=1000,mode=Timer.PERIODIC,callback=ISR)#1msごとに割込み

def dot_out():#dotとspaceを出力
    global count,dot_time,gate_flag,mode
    count=0
    mode=1
    gate_flag=1    
    led.value(1)
    TX.value(1)
    pwm.duty_u16(32768)
    while count <= dot_time:
        pass
    count=0
    led.value(0)
    TX.value(0)
    pwm.duty_u16(0)
    while count <= dot_time:
        pass
    gate_flag=0
    mode=0

def dash_out():#dashとspaceを出力
    global count,dash_time,gate_flag,mode
    count=0
    mode=2
    gate_flag=1    
    led.value(1)
    TX.value(1)
    pwm.duty_u16(32768)
    while count <= dash_time:
        pass
    count=0
    led.value(0)
    TX.value(0)
    pwm.duty_u16(0)
    while count <= dot_time:
        pass
    gate_flag=0
    mode=0

def char_space_out():#文字間スペース出力
    global count,char_space,gate_flag
    count = 0
    gate_flag=1
    led.value(0)
    TX.value(0)
    pwm.duty_u16(0)
    while count <= char_space:
        pass
    gate_flag=0

def word_space_out():#語間スペース出力
    global count,word_space,gate_flag
    count = 0
    gate_flag=1
    led.value(0)
    TX.value(0)
    pwm.duty_u16(0)
    while count < word_space:
        pass
    gate_flag=0

def morse_out(n):
    global M_code
    m=M_code[n]
    l=len(m)
    for j in range(l):
        s=m[j]
        if s=='.':
            dot_out()
        elif s=='-':
            dash_out()
    char_space_out()

def memory_send(mem):
    global M1,M2,mem_flag
    mem_flag=1
    if mem==1:
        M=M1
    elif mem==2:
        M=M2
    ml=len(M)
    i=0
    while mem_flag==1:
        ascii=ord(M[i])
        if ascii==32:
            word_space_out()
        elif ascii >=47 and ascii<=90:
            ascii=ascii-47
            morse_out(ascii)
        i=i+1
        if i >= ml:
            mem_flag=0

#main loop
while True:
    dot_time=a.read_u16()>>8
    if dot_time <= 40:
        dot_time = 40 #最高速度を30wpm(150字/分)に制限
    elif dot_time >=200:
        dot_time = 200#最低速度を6wpm(30字/分)に制限
    char_space=dot_time+dot_time
    dash_time=char_space+dot_time #dash_time=dot_time * 3
    word_space=dash_time<2 # word_space=dot_time*7
    #メモリーボタンが押された時
    if M1_button.value()==0:
        memory_send(1)
    if M2_button.value()==0:
        memory_send(2)
    #dot_keyが押されたとの処理
    if dot_key.value()==0 or dot_flag==1:
        dot_out()
        dot_flag=0
    if dash_key.value()==0 or dash_flag==1:
        dash_out()
        dash_flag=0
------------------------------------------------------------------------------------
 私の経験上、メモリキーヤーを使いたいときは、JCCサービスや、コンテスの時です。パソコンを立ち上げ、Thonnyでスクリプトを書き換えなければならないのは、一見面倒なようですが、運用目的に合わせて、確実に記入できますので、あらかじめ準備をしておけば、スムーズに運用できると思います。

 MicroPythonによるプログラミングは、プログラムの見通しが良く、簡単に自分なりにカスタマイズできると思います。やってみてください。

 このキーヤーをボードに組み、ケーシングすれば、実用になると思います。