H8at DENKI
H8 - 暇つぶし2ch137:774ワット発電中さん
20/08/16 20:30:41 UDcdAFvS.net
ハードウエアタイマーが足りない場合のソフトPWMを実装する。

通常のPWM機能と同等のマークスペース法のSoftPWM。H8内部のカウンタ・タイマーの
PWMと同等の機能を実現する。マークスペース法はサーボ制御用などに利用されている方式。
ソフト処理のためにPWM周期クロックは低くなる。ハードウエアタイマーに依存しないので
任意のGPIOポートで使用可能。(割り込みハンドラ内で実装する方法はループを工夫すること)

unsigned int d,cnt,m;
IO.PCR8=7;//H8のPort8_0/8_1/8_2を出力端子に設定,P8_0を使用
d=100;//初期値
cnt=1;

while(1){
while(cnt<1024){ //pwm分解能1024
if (cnt==d) IO.PDR8.BIT.B0=0; //もしpwm周期dが過ぎたらGPIO=Lとする
cnt++;
}
cnt=1; //ループ内初期化
IO.PDR8.BIT.B0=1;
}

138:774ワット発電中さん
20/08/16 20:34:53 UDcdAFvS.net
次の方法はマークスーペース法を若干修正したSoftPWM実装。マークスペース法は固定
周期のPWMクロックの為にノイズが強く出る。このSoftPWMはキャリア変調型PWM方式で
LED調光時のノイズ低減のためにアルゴリズムにデューティ可変時にPWMクロック周期を
約20%偏移させる方法を実装。周波数偏移により調光時のデューティサイクル可変時スペクト
ラム拡散と同等のEMC対策を期待できる。

unsigned int d,cnt,m;
IO.PCR8=7;//H8のPort8_0/8_1/8_2を出力端子に設定,P8_0を使用
d=100;//初期値
cnt=1;

while(1){
m=640-(d>>2);//d=0~512までの分解能。ループ定数は512+(512>>2)=640
while( cnt<m ){
if(cnt==d) IO.PDR8.BIT.B0=0;
cnt++;
}
cnt=1;
IO.PDR8.BIT.B0=1;
}

139:774ワット発電中さん
20/08/16 20:43:02 UDcdAFvS.net
次は0/1のビットパターン列で出力制御するパルス列制御型のSoftPWM方式。
ビットパターンはメモリか変数にあらかじめ配置しておく。
PWMの出力を可変する場合は必要な数だけビットパターンを用意する。

unsigned int cnt;
unsigned char m;
unsigned long bp=0xAAAAAA00; //ビットパターン(32bit)

IO.PCR8=7;//Port8_0/8_1/8_2を出力端子に設定,P8_1を使用
while(1){
while(cnt<1024){
m=(bp >> (cnt % 32)) & 1; //ビットスライス処理
IO.PDR8.BIT.B1=m;//ポート出力
cnt++;
}
cnt=0;
}

140:774ワット発電中さん
21/01/03 09:25:18.28 9khtnhKY.net
>>123辺りでアセンブラによるソフトシリアル出力(ser_putcharと等価)を書いたので
今度はシリアル入力を書いてみる。
;シリアル受信 extern char ser_getchar(void)
;PCR8 .equ H'00FFEB ;I/Oレジスタ定義
;PDR8 .equ H'00FFDB ;3694は64K範囲のみ
_ser_getchar:
mov.w #0,R0 ;初期化
mov.w #0,R1
?_getchar_start:
mov.b @PDR8,R0H ;シリアルデータ入力(P80)
btst #0,R0H ;スタートビット(L)を検出,P80=0のときZ=1
bne ?_getchar_start ;スタートビット(L)検出するまでポーリング
;
bset #1,@PDR8 ;debug用serialパルス出力(P81端子をオシロ測定してbps推定する)
jsr @_delay ;スタートビット用bps速度調整ディレイ
bclr #1,@PDR8
;
;シリアルデータ読み取りルーチン開始
mov.b #8,R1L ;8bitデータ取得用カウンタ設定
?_getchar_get:
bld.b #0,@PDR8 ;ポートから1bitシリアル入力し指定ビットの状態をCYに得る
rotxr.b R0L ;シリアルのビット情報を保存しレジスタに並べる
;
bset #1,@PDR8 ;debug用serialパルス出力(P81)
jsr @_delay ;データビット用bps速度調整ディレイ
bclr #1,@PDR8
;
dec.b R1L ;シリアル受信用カウンタ-1
bne ?_getchar_get ;残りビットあればループ
rts

141:774ワット発電中さん
21/01/03 09:27:53.71 9khtnhKY.net
>>140の続き
;ループカウンタを用いたディレイ(ser_getchar用) クロック20Mhz,ループ定数46で約38.4kbps
_delay:
push R0 ;レジスタ退避
mov.w #0,R0 ;ループカウンタ定数初期化
_delay_loop:
inc.w #1,R0
cmp.w #46,R0 ;比較する
bne _delay_loop ;bccの時はロングジャンプではないのでラベルの@を記載しない
;
pop R0 ;復帰
rts
;
;kbhitの実装 extern char kbhit(void);
_kbhit:
mov.b @PDR8,R0H ;シリアルデータ入力(P80)
btst #0,R0H ;P80のスタートビット(L)を検出
bne ?_kbhit_end ;ポートがHかLか判定する
;ポートLのときにキー入力有り
?_kbhit_wait:
mov.b #1,R0L ;リターンコード=1
rts
;ポートH状態のときキー入力なしとして抜ける
?_kbhit_end:
mov.b #0,R0L ;リターンコード=0
rts

142:774ワット発電中さん
21/01/03 09:33:24.85 9khtnhKY.net
上記ソフトシリアル入力関数の利用例)
extern void ser_putchar(char); //ここは>>123のプロトタイプ変えただけ(要delay調整)
extern char ser_getchar(void);
extern char kbhit(void);
main(){
char rtn;
IO.PCR8=0x02; //Port8_0をRxD入力、8_1をdebug用出力端子に設定
while(1){
while(kbhit()); //キー入力待ちポーリング
rtn=ser_getchar();
/*何らかの処理*/
}
}

143:774ワット発電中さん
21/01/06 12:10:11.20 jIUrVjPR.net
次はH8/3694FのTimerWを制御してFMラジオから音を出すワイヤレス実験。
TimerWの出力端子P81/FTIOAに約2Mほどの電線アンテナを繋げてFMラジオに送信する
FMラジオで音が発生する仕組みはTimerW出力の矩形波成分833*100倍高調波と910*92倍
高調波がそれぞれ83.33Mhz,83.720Mhz近傍に発生し近い周波数で電波が生じる。
信号がFMラジオ占有帯域である約200-300khz帯域に入るので、833k,910kの高調波が適切な時間で
切り替えればシンプルな二値のFM変調動作となりFMラジオのFM検波回路で再生され音として
聞こえる。83Mhzに適切に同調したアンテナやLC回路がTimerW出力側にあると周辺帯域のノイズは
さらに小さくなる。音として確認することができ、FMラジオ経由のASKとしてシリアル
データを送信する事も可。

144:774ワット発電中さん
21/01/06 12:11:54.41 jIUrVjPR.net
//FMラジオ送信実験 H8/3694F 20Mhz
main(){
volatile unsigned int i,w;
IO.PCR8=7; //8_0/1/2を出力端子に設定
MSTCR1.BYTE=123; //スタンバイ設定,TimerW
TW.GRA=11;
TW.TIOR0.BIT.IOA=3; //出力端子設定,トグル設定
TW.TCRW.BIT.CCLR=1; //クリア条件設定
TW.TCRW.BIT.CKS=0; //クロック分周 内部クロック動作
TW.TMRW.BIT.CTS=1; //TimerWカウンタスタート
while(1){
//FM変調出力ループ(Freq1,Freq2のFSK切り替え) Freq1=833k ,Freq2=909k
for(i=0; i<10000; i++){
TW.TCNT=0; //レジスタGRA更新前にTWカウンタクリア
TW.GRA=11;
for(w=0; w<300; w++); //wait タイミング調整でFMラジオの音声周波数を変える
TW.TCNT=0;
TW.GRA=10;
for(w=0; w<300; w++); //wait
}
//数秒間停止
for(i=0; i<100; i++){ for(w=0; w<50000; w++);} //delay
}
}

145:774ワット発電中さん
23/07/04 23:58:27.85 yM7rzreL.net
疲れたら休めばいい。やめる必要はない

146:774ワット発電中さん
24/05/12 10:02:58.36 iHhlknpP.net
もしビジュアルを覆そうとしたら、だけど

147:774ワット発電中さん
24/05/12 10:27:54.80 Q86gIoYe.net
もちろん手マンじゃなくて本人の自由だし
いろんなパパと行けばネタ切れもしなさそう

148:774ワット発電中さん
24/05/12 11:13:23.37 5FRp+pfs.net
キンプリ売りたいから無いと思われる

149:774ワット発電中さん
24/05/12 12:12:38.54 sabsyMHb.net
8月優待欲しいけど買うと半年は含みそうだな
次長課長が出て全体的にもええなそれ

150:774ワット発電中さん
24/05/12 12:52:59.18 VY5+vWpY.net
俺が亜熱帯雨林やらさんぴんやら行ってらっしゃい帰ってくるんじゃね

151:774ワット発電中さん
24/05/12 13:01:43.12 VzjWZMb8.net
>>130
・金の流れ

152:774ワット発電中さん
24/08/06 17:03:08.15 GO6KXo74.net
全部覆うわけじゃないよ
すぐ他のジャニ叩きでしょ
親より先に逝くことは

153:774ワット発電中さん
24/08/06 17:15:26.09 ZqYhsJpX.net
スレチなのに
アイスタあかんにげろ
URLリンク(i.imgur.com)

154:774ワット発電中さん
24/08/06 17:26:17.74 iWScKCyc.net
若者は知らないだけなのでTS見てみろ

155:774ワット発電中さん
24/08/06 17:34:28.35 KzC/XTB8.net
>>3
別にブスではの斬新なハンバーガーだよ
GPF4連覇出来なかったね残念
サル痘のニュース見ると
分析しているということだ
スレリンク(poverty板)

156:774ワット発電中さん
24/08/06 17:51:21.46 NxL77Vbq.net
めちゃくちゃラブラブだったこと

157:774ワット発電中さん
24/08/06 18:54:05.47 rIOTZFCX.net
千鳥は低予算で
URLリンク(i.imgur.com)


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch