まごころせいじつ堂

浜町庄金 研究開発  マイコンで遊んでばっかりで

PIC

SBC8080SUBボードのクロックをPICで

 なにやら昔のI/O誌の記事タイトルみたいになってしまったが。

 SBC8080SUBボードはROM/RAM/i8251とそのシリアル通信用のクロックである153.6kHzを生成する74HC4060と19.6608MHzの水晶振動子で構成されている。今回このボードをもう一枚作ろうと思って部品を探したらHC4060と水晶振動子の手持ちがなかったのでSBC6800やSBC6809でACIAのシリアル通信クロックとして使われているPIC12F1822を使ってみた。

 これでもうわかると思いますが整理しておきます。


それぞれの技術資料を参照。PIC12F1822はSBC6800データパック中のosc1536.hexを書き込んでおく。

 HC4060の4,5,6,7,10,11,12,13ピンの箇所に8pinのICソケットを実装。
2020-11-27 16.52.50

 ハンダ面で配線。BAUD RATE選択のパッド1部分はカット。
PIC12F1822(osc1356)のpin1=+5V、pin8=GND、pin5=CLK出力。写真のように配線。
2020-11-27 16.53.10


 SBC-Bus Rev02(レトロな雰囲気)を組み立ててクロックをi8251側のピンで確認。よさげ。
じつはこの写真には大きな間違いがあってコネクタがずれたまま実装されているのです。動かなくて悩んだ。
2020-11-27 23.39.55

 ついでに作ったSBC8085との組み合わせで動作OK。
2020-11-30 17.13.54

 以前はSBC8080/SBC8085といったCPU側のハンダ面に40Pメスコネクタを、SBC8080SUBボードの部品面に40Pオスコネクタを付けてましたがこれ以上拡張のしようがないので改めて作り直したのでした。今回のSBC8080SUBボードはL字の40Pオスコネクタで、以前のCPUボードに挿して動作確認もOK。
 SBC8080+SBC8080SUBボード、SBC6800のPICを使わなかったのは作りやすさの難易度を下げるためだったのかなと想像します。最近だと入手しやすいROMライターのTL866IIPlusでhexファイルをPICに書き込ませることができるのでだいぶ楽です。




MachiKania Type M

 PIC32MXを採用したマイコンボード、MachiKania Type Mを組み立ててみた。

 オレンジピコ基板と部品一式を扱っている。キットにはDIP変換基板にはんだ付けされたブートローダ書き込み済のPIC32MXが同梱されているが、今回はTQFPのはんだ付けに挑戦したかったので秋月電子から PICマイコン PIC32MX370F512HT-I/PTを別途購入。あとはmicroSDカードが必要。

 まずはハンダブリッジを気にせずはんだ付けし、吸い取り線でブリッジを除去。
2018PIC32MX-1

 が、ちゃんとすべてはんだ付けされているか気になるのでヒートガンであぶってはんだを溶かし、しっかりと付くことを期待する。1800W、10cm高さで2分、5cm高さで1分あぶる。妥当かどうか自信はないがどうやらよさそう。
2018PIC32MX-2

 次は他の部品の取り付けだけれども、キット付属のセラミックコンデンサは基板のパターンよりも幅が広いので足をリフォームしないといけない。面倒なので0.1μF品は手持ちのものを使用した。
2018machikania-c

 他の注意点はLEDの電流制限抵抗R12の値が330Ω→1kΩになっているくらい。

 ブートローダはPicKit3で書き込み。その他必要なファイルをmicroSDカードに書き込んで完成。
2018MachiKaniatypeM

 基板上の半固定抵抗は音量調整。ありあまる端子を利用してArduinoシールド互換のコネクタが用意されている。電源を投入するといろんなサンプルやゲームをmicroSDカードから呼び出して遊ぶことができる。

 せっかくなので浮動小数点演算を生かしたプログラムを書いて遊んでみた。BASICで書くにはPS/2キーボードが必要。https://rosettacode.org/wiki/Mandelbrot_set#Processingよりウンウンうなりながら移植。


2018machikaniamandel

 変数がA-Zしか使えないと思いこんでいたので読みづらいですが、作者の@KenKenMkIISRさんからUSEVARで6文字までの変数名が宣言できることを教えていただきました。


 というわけでTQFPはんだ付けの実績解除と80年代にBASICで遊んだ感覚を思い出しました。カラーが表示できるのは良いですね。


 ↓ Kindleunlimited対象

SBC6800のクロックアップ

 モトローラ6800伝説はすでにお持ちのことと思いますが、製作することで追体験ができるキットが販売されています。

SBC6800ルーズキット(スイッチサイエンス)
SBC6809ルーズキット(スイッチサイエンス)

 SRAMは32Kx8bit品を使っていますが問題ありません。
2018SBC6800

 この回路ではPIC12F1822によるクロックジェネレータがうまくMC6800用の二相クロックを生成していますが、せっかく2MHzまで動くBタイプ品を使っているのでソースをいじってサイクルアップに挑戦してみます。
 モトローラ6800伝説のp.100に掲載されているソース(CD-ROMでも提供)で以下の箇所を修正:

PR2 = 7; → PR2 = 5;
CCPR1L = 4; → CCPR1L = 3;

 これでビルドすると1.33MHzのクロックジェネレータになります。上限1.5MHz動作のAタイプでもOK。

2018MC6800clk

 すみませんが雰囲気で修正したのでこれ以上PWMで速いクロックが生成できるかはわかりません。たぶん無理。ただPIC12F1822は32MHz動作で古いマイコン用のクロック源として活用できそうなので色々調べている所です。


モトローラ6800伝説モトローラ6800伝説
鈴木哲哉

ラトルズ 2017-12-16
売り上げランキング : 42896

Amazonで詳しく見る
by G-Tools

PICKit3でPIC12F1822の書き込み

 PICの開発環境のメモです。

ホストはWindows10、書き込みツールはPICKit3、ターゲットはPIC12F1822。

(1)開発環境をダウンロードしてインストール。現時点で最新はv4.05。
MPLAB X IDE(Microchip)
MPLAB X IDEインストール後、8bit用のコンパイラ XC8をインストール。
MPLAB XC Compilers
(Microchip)

(2)PIC書き込みジグの製作

以下を参考にした。
PIC12F1822を使ってみる(OVERDRIVE)
MPLAB X IDEの使い方(東京海洋大学 田原研究室)
ICSP Programming Adapter

 8/14/20ピン対応のつもり。外部電源とPICKit3給電の切り替え付き。

2017PIC-JIG

 実体配線図です。
2017PUIC-JIGhaisen

(3)書き込み操作
 MPLAB X IDEを起動。プロジェクトファイルを読み込むかNew Projiectを開始する。

書き込み器の選択は[File]→[Project Properties (プロジェクト名)]をクリックするとウィンドウが出てくるので、そこで指定。PICKit3から給電するかどうかはCategoriesで表示されてるツリーからPICKit 3をクリックすると右側にOption Categoriesが表示されるので、そこから[Power]を選択して指定する。

メモ:PIC32MX関連

 メモばっかりですまん。最近買ったけど遊べてない。MicrochipDIRECTはすぐ届くよ。

Microchip、Arduino互換のchipKIT Fubarino Mini boardなどを発表 (マイナビニュース)

Microstick II
Fubarino Mini ChipKit
chipKIT™ DP32™

https://github.com/chipKIT32/chipKIT32-MAX/downloads



ArduPIC32: An Arduino PIC32MX JTAG Programmer!
PIC32MX220F032B クリスタル無し、内蔵FRCでUSB


メモ PIC/PIC32MX/ビデオ出力

ビデオ出力の原理。D/Aコンバータ
Wayne and Layne

Arduinoでの作例
Arduino Uno output to VGA monitor


【紹介】PIC32MXマイコンでカラーコンポジット出力を試す&ビデオゲームもできる!

PIC32MX,HC08,MSP430用BASIC
CPUStick and StickOS

PICのクラスタ
PIC cluster

Arduino Online Compiler
Arduino Online Compiler


ArduinoライクなPIC32MX開発環境
Pinguino X4 IDE 簡単インストール

PIC32MXについて(概要)

AVR VGA Generation

PIC32MX USB

PIC32MXのCPUまわりのエラッタ

 複雑なLSIの仕様を満たさない動作はエラッタとしてメーカーから公開される。これには動作の不具合の説明と、それを回避するワークアラウンドが載っている。ワークアラウンドはたいてい機能制限や性能低下につながる。これらは改版によって対処され、生産されるLSIは改版後のものに順次切り換えられる。

最近遊んでるPIC32MXのエラッタを調べてみた。CPU周りだけ。

20120404現在

□PIC32MX1XX/2XX PIC32MX575/675/695/775/795 共通
・CPUが書き込み操作時に割り込みが発生すると、書き込み操作が中断されて、割り込み処理完了後に再開される。この時に書き込み操作が中断されず、二重書き込みになることがある。
対策:大抵の場合二重書き込みは悪い影響はないが、SPI,I2C,UART,PMPの通信ではデータを二重に送ることがある。これを回避するにはDMA転送を使うか、これらの周辺にデータを書くときには割り込みを禁止する。

□PIC32MX575/675/695/775/795
・プリフェッチ機能と命令キャッシュを有効にしている状態で、CPUがフラッシュメモリのデータをアクセスしている(命令フェッチではない)時に割り込みが発生するとデータバス例外が起きることがある。
対策:以下2つの方法がある。
1.CPUがフラッシュメモリのデータにアクセスする間は割り込みを使わないようなプログラムにする。
2.プリフェッチか命令キャッシュのどちらかを無効にする。
※2.は10%未満の性能インパクト

 現在秋月電子で入手できる28pinDIPのPIC32MX1XX/2XXは最大40MHz動作、PC32MX575/675/695/775/795は最大80MHz動作。どちらも割り込みが関係している。MIPS M4Kの問題だろうか?

microchip.com | errata

PIC32MX1XX/2XX Family Silicon Errata and Data Sheet Clarification A0 A1まで

10. Module: CPU

 During normal operation, if a CPU write operation is interrupted by an incoming interrupt, it should be aborted (not completed) and resumed after the interrupt is serviced. However, some of these write operations may not be aborted, resulting in a double write to peripherals by the CPU (the first write during the interrupt and the second write after the interrupt is serviced).

Work around

 Most peripherals are not affected by this issue, as a double write will not have a negative impact.
However, the following communication peripherals will double-send data if their respective transmit buffers are written twice: SPI, I2C, UART and PMP.

 To avoid double transmission of data, utilize DMA to transfer data to these peripherals or disable interrupts while writing to these peripherals.

PIC32MX575/675/695/775/795 Family Silicon Errata and Data Sheet Clarification A0 A1 A3まで

Work around

 To avoid a DBE, use one of the following two solutions:

1. Structure application code, such that interrupts are not used while the CPU is accessing data from Flash memory.
2. Disable either the Prefetch module or CPU cache functionality as follows (by default both are disabled  on a Power-on Reset (POR)):
a) To disable the Prefetch module, set the Predictive Prefetch Enable bits, PREFEN<1:0>, in  the Cache Control Register, CHECON<6:5>, to‘00’.
b) To disable CPU cache, set the Kseg0 bits, K0<2:0>, in the CP0 Configuration Register, Config<2:0>, to ‘010’.

Note: Disabling either the cache or Prefetch module will have minimum performance degradation, with a typical application realizing 10 percent or less performance impact.


44. Module: CPU ※PIC32MX1XX/2XX 10. Module: CPUと同じ


追記:New pic32mx7 errata

CUI32Stem届いた

 SeeedStudioで扱っているPIC32MXマイコンボードCUI32Stemが届いた。$29.95で日本向けの送料は無料。注文から約10日。急ぎの便もある。

SeeedStudio CUI32Stem

 あれえ、今注文したらピンヘッダが付いてるじゃない。

CUI32Stemは、80MHz/512K Flash/128K RAMのPIC32MX795F512Hを搭載した名刺サイズのマイコンボード。で、BASICインタプリタを搭載している。開発キットは特に必要なく、端末となるパソコンがあればOK。
その他の特徴は:
8 DMA Channels
3 SPI
4 I2C
6 UART (serial ports)
Full Speed USB 2.0 Device or Host mode
16 A/D channels, 10-bit resolution

電源はUSBコネクタまたは電源端子から(スイッチ切り換え)。USBはホストモードもある(スイッチ切り換え、コネクタ未実装)。
電源LEDは赤。動作中を示すHertBeat用の緑LEDはpin RE0に接続されている。
タクトスイッチはRESETとpin RE7に接続されているPROGボタンがある。
システムクロックは8MHzのX'tal。RTCC用の水晶はついていない。

開発元:
OVERTONE Labs

Wiki:
seeed wiki CUI32Stem

使い方:
StickOS™ BASIC User's Guide, v1.90

2012CUI32stem


ではMacOSXに接続して遊んでみよう。mini-BのUSBケーブルでCUI32Stemを接続し、ターミナルを開く。
ls /dev/tty.* でシリアルポートを確認し、screenコマンドで接続する。
例:screen /dev/tty.usbmodem621
リターンキーを一回押すとプロンプトが出てくる。あとはBASIC。

ではprogボタンを押すと現在のtick値を表示するプログラムを作ってみる。

 
  10 dim prog as pin re7 for digital input
  20 while 1 do
  30   if prog==0 then
  40     print ticks
  50   endif 
  60 endwhile 
行番号とともに打ち込んだ後、run。基板上のprogボタンを押すと表示される。

次はFizzBuzz。サブルーチンには引数を渡せる。


  10 dim i
  20 for i = 1 to 100
  30   gosub fizzbuzz i
  40 next 
  50 end 
 100 sub fizzbuzz n
 110   if n%3==0 then
 120     if n%5==0 then
 130       print "FizzBuzz"
 140     else 
 150       print "Fizz"
 160     endif 
 170   elseif n%5==0 then
 180     print "Buzz"
 190   else 
 200     print n
 210   endif 
 220 endsub 
ちょっと試してみたが面白い。昔BASICで遊んだことのある人はすぐ慣れると思う。BASICの文法は変数の宣言が必要で、式はC言語に似てて、ちょっと厳格になった感じ。また変数はすべて配列扱いで通常は変数名[0]が参照される。

そうねえ、印象としてはむき出しのプチコン。
 

PIC32MX搭載のマイコンボード

PIC32MX搭載のマイコンを調べてみた。国内で買えるものはまだ少ない。

□Pinguino PIC32MX (80/256/32)
PIC32 Pinguino - PIC32MX440F256H dev board - $31.46

・PinguinoというArduino類似の開発環境が使える。

□CUI32Stem PIC32MX795F512H(80/512/128)
CUI32Stem $29.95

CUI32Stem Wiki
OVERTONE Labs
StickOS™ BASIC User's Guide, v1.90

・StickOSが使える。BASICが使える。

□CUI32 PIC32MX440F512H(80/512/32)
CUI32 PIC32MX Development Stick $39.95

・CUI32Stemの以前の版っぽい。

□UBW32 PIC32MX795 (80M/512K/128K)

□chipKIT Arduino互換のIDEを提供 国内でも販売

chipKIT

PIC32MX795 (80/512/128)
chipKIT Max32™ Prototyping Platform 
chipKIT Max32 Arduino-Compatible Prototyping Platform 5900円
 
PIC32MX320F128 (80/128/16) 
chipKIT Uno32™ Prototyping Platform 
chipKIT Uno32 Arduino-Compatible Prototyping Platform 3400円

[MIPS]秋月PIC32MXをブレッドボードでLチカ

 従来のPICは食わず嫌いだったのだけど、MIPSと聞いてつい。

 秋月電子で普通のDIPパッケージで32bitMIPSアーキのマイコンが出た。190円〜220円。このうちフラッシュ32KB/RAM8KBでUSB付きのPIC32MX220F032Bを使ってみた。
PIC32MX220データシート
開発環境はPICkit3+MPLABXを使用した。PICkit2はPIC32に対応していないらしい。MPLABXはWindows/Linux/MacOSXに対応している。必要なのはXCコンパイラとMPLABX IDEのふたつ。これらをインストールする。

MPLABX

 PIC32を使用するには、[File][New Project...]からSamples/Embeded/PIC32 templateを選択する。
 次に作成したプロジェクトを選択した状態で[Files][Project Propaties]を開く。Configuration画面を以下の様に設定する。
Device:PIC32MX220F032Bを選択
HardwareTool:PICkit3以下に出ているシリアルナンバー(SN:BURxxxxxxxxx)を選択
Compiler Toolchain: PIC32用のCコンパイラが表示されていることを確認。

※MacOSX用でPICkit3が認識されていなかったのではまった。再インストールしたら認識した。Windows用は問題なし。

 では準備ができたので実験してみる。たけおかさんのを参考に(というよりまんまブレッドボードにのっけただけ)組み立てた。

PIC32MX220 (200円のMIPS CPU)を使う:たけおか ぼちぼち日記

配線はこんな感じ。
PIC32_01

電源供給はUSBシリアル変換モジュールAE-UM232Rからもらうことにした。PICkit3からの給電はしない(MPLABXのデフォルトでは給電なし)。
サンプルプログラムもたけおかさんのをそのままmain.cにコピペして使用。スミマセン。

pic32_02

シリアル通信を確認するにはFT232のドライバをインストールする必要がある。
Virtual COM Port Driver

MacOSX上では適当な端末ソフトが見つからなかったので、Arduino IDEのシリアルモニタを使用した。

 で、チカチカ成功。色々いじって点滅速度を変えたりシリアルに出力する文字変えたりして遊んでみた。


初期化の所で気になったのは以下。
SYSTEMConfigPerformance( SYSCLK );

これは動作周波数を引数として与えると、キャッシュ(実際はフラッシュROMのリード専用バッファに近い)の有効化やディレイの調整をまとめてやってくれるらしいのだが、PIC32MX220シリーズでは上限40MHzなのに80000000が指定されていた。80MHz動作はPIC32MX440シリーズのはす?この箇所を40000000に変更して確認したが、Lチカの周期は変わらなかった。どうやらPIC32MX220シリーズで40MHz以上の指定をしても上限40MHzになるみたいだ。なおシリアルの速度は変化しなかった。

 作例あり&ブレッドボードなので一晩でできました。みんなもやってみよう!

※LEDを2個同時に点灯させると若干暗くなる。I/Oはピンあたり15mA(シンク/ソース共)。


☆部品表

・PIC32マイコン
□PIC32MX220F032B

・秋月電子 USBシリアル変換モジュール
□AE-UM232R

・抵抗 1/8W
□10ohm
□330ohm x2
□10Kohm

・セラミック・コンデンサ
□0.1uF x2

・電解コンデンサ
□10uF 10V

・LED
□赤/緑/黄など適当に x2
(白/青はVFが3.3Vより上かもしれないので避ける)

□ブレッドボード
□ブレッドボード用配線材

□miniB USBケーブル

 
記事検索
プロフィール

hardyboy

カテゴリ別アーカイブ
月別アーカイブ
QRコード
QRコード
  • ライブドアブログ