忍者ブログ
RoboCup Junior Japan Rescue Kanto OB

             2005~2013
[1]  [2]  [3]  [4]  [5
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

今日はコンピューターで使われる数字や数列についてのお話です。


一般に、今使われている数字は10進法という方式ですね。

これは、0123456789

この10個の数字単位で桁があがっていく仕組みです。9の次は10ですからね。

時計だったら60秒、60分で桁というか、単位が変わりますよね。だから時計は60進法です。

このように、数というのは、場合、用途によって、桁上がりのタイミング、即ち進法が変わることがあります。

実はコンピューターでも使われている進法がまた違うのです。


コンピューターでは、2進法という進法が使われています。

2進法では、数字は0と1しか使いません。

つまり、0の次が1、その次がもう桁があがって10になる訳です。

これは、人間からしたら非常にわかりにくい進法ですが、コンピューターからしたら、とてもありがたい進法なのです。

何故コンピューターでは2進法がいいのでしょう。


コンピューターはデジタル回路で動作していますから、制御信号は電圧のONとOFFの2つです。

また、2進法も、0と1の2つで構成されています。

もうお分かりですね。2進法は、デジタル回路の信号とデータの構成が同じなので、

2進法で書かれた数字(2進数)は、コンピューターの信号と等価とみることができます。

だから、信号を数字に置換してやるだけで簡単にコンピューターに命令を送ってやることができるのです。

その置換を実際にやっているのが、プログラムの書込機、

つまりPickitなどのライターや、マイコンそのものの機能になる訳です。


要するにこっちからやるべきことは、その命令となる数字を送ってやること、

これがレジスタの書き換えであり、プログラムそのものなのです。


そういう2進数、0と1だけで書かれたプログラムが機械語というものです。

でもこれは只の0と1の集まりなので、まず人間には理解できません。

そこでコンパイラができ、人間に理解ができるプログラミング言語というものでプログラムができるようになりました。


2進法の話のはずが、随分逸れましたね。

これが2進法の説明です。

因みに、レジスタに書き込む時は言語でも2進数で書かれることがありますが、やっぱり長ったらしくなります。

なので今のプログラムでは、この命令を2進数ではなく、16進数で記述する場合が多いです。

16進数では、数字の順番が

0123456789ABCDEF

となっていて、Fの次が10になります。


何故わざわざまた別の進数を使って記述するかと言いますと、

プログラムではこの2進数で記述される命令の一桁一桁をbitと呼ぶのですが、

そのbitによる命令を行う際にある特性の影響で命令自体を16進数で記述した方がいいんです。

そういう訳で、実用的には16進数で記述される方が多いです。


bitに関しては、また他の記事で紹介することにして、以上が2進数と16進数の紹介でした。

今日はA/D変換の動作が確認できました。

明日はLCDをつけてみようと思います。


(^・ω・)ノ RadiumProduction in RoboCup Junior
今回は前々から告知していた「レジスタ」というものについてお話しします。

レジスタとは、パソコンのプロセッサ、つまり中のCPUだとかDSPだとか、

そういった処理装置が持つ所謂小さなメモリのようなものです。


通常コンピューターは実際に処理を行なっている部分とデータを保存している部分はそれぞれ独立していて、

片方をCPUだとか言って、もう片方をメモリだとか言ったりしますよね。

コンピューターは通常、このようにデータの保存場所とデータで処理を行う場所が分かれているので、

いちいち何かする度にメモリとCPU間でデータの通信を行う必要があります。

でもそれだと、通信の時間分、処理速度が遅くなってしまいますので性能としては残念なコンピューターが出来上がる訳です。

だからといって、CPUとメモリを一緒にしてしまうと、それはそれで勝手が悪くなるし、何より汎用性が低下してしまいます。

だったら、データの中でも常に使われてデータ総量も少ないもの、

例えば一番簡素な「命令」のデータなどはCPUと一緒でいいんじゃないか?ということになりまして、


そこで考えだされたのがレジスタです。

レジスタというのは、CPUに内蔵されている高速メモリだと考えて頂ければわかりやすいと思います。

よく使われる命令などのデータに関してはCPUに直接保存することで、通信の量を抑え、処理を高速化しているのです。


まぁレジスタってのはそんなものです。逆に言うと、レジスタのデータ自体が一つの命令として意味を持っているので

レジスタ自体を直接書き換えてしまえば、一番早く、的確にCPUに命令を送ることが出来るという訳です。

この仕組みはマイコンであるPICも変わりませんから、今まで何度も「レジスタを書き換える」という話が出てきたのです。


レジスタのデータは基本的にbit単位で構成されていて、

8bitCPUなら8bit、16bitCPUなら16bitでひとつのレジスタは構成されています。

このレジスタのbitの中身、つまり0、1を変えてやることでレジスタの中身は書き換えられます。

基本的に一つのレジスタの中にはいくつかの命令が組み込まれていて、

レジスタ内の0,1を変えることでレジスタ内の命令の全てを同時に変更することもできたりします。


また、レジスタは書き込むだけではなくて、読み込むこともでき、

指定しているレジスタのbitが書き込みオンリー(W)なのか、読み込みオンリー(R)なのか

読み書きどっちも行えるのか(R/W)というのも重要な点です。

特に(R/W)のレジスタは、思いもよらない様な使い道を見つける場合も多々ありますので要チェックですね。



と、まぁこれでレジスタの説明は以上です。

と言っても文章だけなのでちょっとわかりにくいですよね。

PIC Cだとレジスタ一つ一つに名前がついていて、変数と同じような感覚で(R/W)が行えます。

先程の記事で記載したプログラムでも大量にレジスタの書き込みは行なっているので

こっちのプログラムからレジスタを探してみると、大体の感じはわかって頂けるのではないでしょうか。

このプログラムだと、直接レジスタを操作する命令はint mainの中にしかありませんが、

その中だと、見た感じ9割近くそれに該当するような・・・。


HITECでプログラムを書くと本当にレジスタだらけになってきてしまいますので、

PIC、特にHITECでプログラムを書く場合はこのレジスタの理解が大事であるということが解って頂ければと思います。


という訳で今回の記事はこのへんで。


(^・ω・)ノ RadiumProduction in RoboCup Junior

今日は大変壮大な事故をしました。

ちょっとPIC16F1939UARTをやってみようとしたのですが、

プログラムを書いても動かないのでデータシートを見てみたら・・・

UARTモジュールがなかった(笑)

EUSART、つまりUARTが同期式になったバージョンの通信には対応しているようですが、

非同期式のUARTには対応していないようです・・・。


という訳でUART通信をやるには自分で一からメンドクサイプログラムを書かないといけない・・・と。

単純な2線シリアルの非同期式の通信なので、やろうと思えば結構簡単にできるのですが、

そこまでしてやる気は全く起きない・・・というかやる必要性と有用性が全く皆無なので止めました。


という訳で今日はA/D変換のプログラムを書いて、書き終わって、今は後輩に投げた回路待ちです。

PIC自体はもう昔からやっていますから、コンパイラPICの仕様が変わっただけなので、

PICそのものの特性さえ理解出来れば、後はささっと終わってしまいますね。


という訳で明日アナログ入力ができているか確認して、LCDのプログラムでも作ってみようと思います。

まぁこれもライブラリ落とすだけの簡単なお仕事ですから、今回はライブラリごとは作りませんよ!すぐに終わるはずです。

そしてARMの方も順調で、遂にgccでのCのプログラムが書き込めるようになりました。

後はUSBの制御とか、そこら辺ができています。今年はマイコへの勢いが強いので、スムーズに行ってくれますね。


それで、今日は1936のプログラムを一つ上げてみようと思います。

まぁ簡単にLEDつけるだけのプログラムですけど・・・。

書き込みの方法とか、プログラム自体の説明はまた今度ということで、

とりあえず今は参考までにということでプログラムだけここに記載します。

 
#include <pic.h>
 
//#include<htc.h>
//#include "pic16f1939.h"
#define _XTAL_FREQ 32000000
 
 
__CONFIG( FOSC_INTOSC & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_OFF & CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF );
__CONFIG( WRT_OFF & PLLEN_ON & STVREN_ON & LVP_OFF );
 
 
 
 
void delay_ms(long x)
{
 long i;
 for(i=0;i<x;i++)
  { 
   __delay_ms(1);
  }
 
}
 
int main( void ){
 
PORTA = 0b00000000;
PORTB = 0b00000000;
PORTC = 0b00000000;
PORTD = 0b00000000;
ANSELA=0;
ANSELB=0;
ANSELD=0;
 
TRISA = 0b00000000;
TRISB = 0b00000000;
TRISC = 0b00011000;
TRISD = 0b00000000;
 
OSCCON=0b01110000;
 
 
while(1){
 RD2=1;
 delay_ms(500);
 RD2=0;
 delay_ms(500);
 } 
}


とりあえずこんな感じです。1秒周期でLEDが点滅するようなプログラムですね。


一先ず今日はこれを投げて終了です。もう少ししたらPickit3についての記事を書くと思いますので

その時に書き込みについてもお話できたらいいなぁ。

と言うことで今日の記事はこのへんで。


(^・ω・)ノ RadiumProduction in RoboCup Junior
今日は一年生がたくさん来てくれましたね。

見学、検討中の人を含めると10人以上来てくれたのではないでしょうか。


今日の部活もPIC16Fの続きでした。

今日はPWMです。

えっ、今更!?と思うかも知れませんが、僕はHI TECコンパイラの使用経験がないので

当然PWMHI TECではやったことがないのです。


という訳なので今日初めてHI TECPWMをやってみました。


といっても、PWM自体は他のコンパイラで腐る程やっているので大丈夫・・・と思っていたのですが

また爆弾に引っかかりました。


今回の爆弾はPWMのモードです。

普通のPICだとPWMというとCCPピンというピンを使うのですが、

16F1939ではその他にECCPというピンがあったのです。

どちらのピンもPWM等のパルス制御に用いられるモジュール用のピンなのですが、

ピンの名前が違うだけあって、微妙に仕様・・・というよりレジスタが異なります。

1939にはCCPは2つ、ECCPは3つ、それぞれピンが搭載されています。

なのにPICのピン名の表記が

ECCP1
ECCP2
ECCP3
CCP4
CCP5

と、何故かナンバリングが繋がっているのです。

これに騙されてPWMが動きませんでした(笑)

番号繋がっている上に名前が似てるから、CCPかと思ってCCPのレジスタ使ってたら、思いっきりECCP使ってました。

そりゃ動かないわけだ。ついでのにクロックの設定もミスってたので凄まじいことになっていました。

という訳で今日の16F19XX シリーズの落とし穴は、CCPモジュールとECCPモジュールのピンの名称です。

まぁPICですから落とし穴はつきものです。

さてと、次は何を発見することになるのでしょうか・・・。


それにしても今更ですが、標準で入力がアナログになっているっていうのも、ユーザーには常識ですが、初見からみたら完璧に落とし穴ですよね。


(^・ω・)ノ RadiumProduction in RoboCup Junior
最近はPICだと、16F19XXシリーズしか使っていないような気がします。
32MXはなかったことになりましたからね・・・

部員にもオススメしちゃいましたのでちょっと紹介しようかと思います。


まずはコンパイラですが、基本的にハイテックを使うのが一般的なようです。

僕もハイテックで書いてますので16Fに関してはそれで統一しちゃいましょう。

さて、新しい新しいとは言っていますが、実際になにが違うのか。

まずはその辺りの話をしていこうと思います。


基本的には、プログラム視点だと古い三桁台も四桁台も対して変わりません。

まぁ同じコンパイラ使っていますから当たり前ですね。

でも、ハードウェア視点で見ると、違いが躊躇に出てきます。

なのでプログラムでも、ハードが関係する部分においては、多少の違いが現れてきます。


まずは動作クロック

CPUで何Gの・・・とか言っているアレと同じです。

クロックというのはパルス波、つまり周期的な電気信号なので、信号を発生させる発振子という物が必要になります。

三桁台の場合、その発振子を外部につけてやる必要があるのですが、

四桁台の場合は発振子は内蔵されているので必要がありません。


また、クロックは勿論大きいほうが性能は高いです。

処理速度でモロに関わってくる部分ですからね。

これも、三桁台は最大20MHzですが、四桁台は最大32MHzとなっています。

また、三桁台だと、一つの処理を行うのに4クロック必要になりますが、四桁台だと1クロックで済みます。

つまりこの違いだけでも処理速度に四倍の差があることがわかります。


次はプログラムの書込みについて

三桁台の場合・・・

というより普通のPICはプログラムの書き込みにPGDというピンとPGCというピンを状態で使用していました。

仕組みは勿論四桁台もかわらないのですが、何故か四桁台だけそのピンの名称のみが変更されているのです。

PGDはICSPDATというピンに、
PGCはICSPCLKというピンに、

それぞれ変更されています。

これはこのPICの書き込みに使われている通信がICSPというので

わざわざわかりやすい名前に改名したようです。


そして次は通信の際のピンの設定について。

基本的に、通信を行う際にも通信に使うピンは入力か出力かのどちらかに設定しないといけません。

只、その設定をどちらにするかが同じ通信でも三桁台と四桁台で変わってきます。

これが結構で間違えると通信ができない訳なのですが、通信自体のプログラムは同じなのに

ピン設定だけ違うということになりますので、しっかりデータシートを読まないとわからないのです。

落とし穴ともいうべき仕様変更ですね。


まぁ大まかに今、僕が知っているのはこのくらいでしょうか。

結構知らないと根本的にプログラムが書けなくなるような事項がほとんどなので、

16Fの四桁台を使うことがあれば以上の点に注意して頂けると非常に楽にプログラムが書けるかと思います。


という訳で、今回の記事はこの辺で。

次回は・・・なににしましょうか・・・

(^・ω・)ノ RadiumProduction in RoboCup Junior
今回はPICの種類についてです。

今まで話題に出てきた16Fとか24Fの違いについて説明することになります。
 

まず、PICには8bitのものと16bitのものと32bitのものの三種類があります。

これはパソコンでいうところの32bitCPUか64bitCPUかの違いに相当します。

これは基本的にはレジスタ等のビット数の違いに反映されています。

また、基本的にビット数が大きい程高性能になっています。

 
次にファミリーについて説明します。

PICの型番はそのほとんどが最初二桁が数字でその次がアルファベット、そしてその後に数字が並んで

最後に場合によってはアルファベットがくることがあります。

この最初の二桁+アルファベットのことをファミリーと呼びます。

ファミリーはPICの種類をそのまま示すもので、これによって使用するコンパイラなんかも変わってきます。


このファミリーのなかで今一番メジャーなのはアルファベットの部分がFになっているPICです。

これはフラッシュメモリが搭載されているPICで、プログラムを何度でも書き換えることができるものです。

逆にCと書いてあるものは、一度プログラムを書き込んだらもう書き換えが出来ないので注意しましょう。

ものによっては紫外線で書いたプログラムを消して、また書き込めるようになるものもありますけど・・・


このフラッシュメモリが搭載されている種類だと、

10F
12F
16F
18F
24F
24H
DSP30F
DSP33F
32MX

 
まぁこの辺りが主な種類でしょうか。

10Fと12Fは極小規模のPICなのでうちの部では使っていません。

また、18Fも主にUSB用のPICとして作られている節があるので使っていません。

DSPとついているものはDSP機能が搭載されている種類で、割りと高性能ですが、

ちょっと秋月価格的にお高いのでこれもあまり使いませんね。

という訳なので、うちの部では16Fと24F、あとは24Hと32MX、大体この4つを利用しています。



因みに先程のbit構成で分けると、

18F以前のPICが8bit構成、24Fと24HとDSP30,33が16bit、32MXが32bit構成になっています。

図にするとこのような感じになります。
主なフラッシュメモリ搭載のPICの位置づけです。32MXだけ32bitなので孤立しています。

このようにPICには様々なファミリーが存在して、それぞれに特徴があって用途が変わってきます。

そしてそのファミリーの中でまた、色々な種類のPICがある訳です。

といっても同じファミリーのPIC同士なら内部構造はほとんど同じで、

違う点といったらピンの数とか、ピン配置といったことぐらいしかありません。


なのでコンパイラも同じものが使えますのでほとんどプログラムを流用することができます。

16F、18Fの場合は新しい4桁台のやつはちょっと他と違いますけど・・・


逆に違うファミリーだと、同じPICとはいえ、色々異なる点が多いので注意したほうがいいかと思います。


因みに僕がいま使っているのは16F1939なので左の緑の四角の中の青い丸、16FファミリーのPICです。

新しい4桁台のPICなのでちょっと古い16Fと命令の方法が違ったりするのでややこしいですね。

とりあえずPICの種類に関してはこんなところでしょうか。


結構数が多いのでどれを使えばいいか悩みどころだとは思いますが、迷ったときはまず16F を使えば間違いないと思います。


または24Fの一番ちっさいのを使うか。2つに1つってところですかね。

でも新規でPICをはじめるなら、安くて性能の良い16Fの4桁シリーズをお勧めします。

新しい分ちょっとデータが少ないですが、基本的なところは旧16Fと変わらない筈なのであまり困りはしないと思います。


という訳で今日の記事はこのへんで。PIC系列は今後も頻繁に更新されると思いますので宜しくお願いします。


(^・ω・)ノ RadiumProduction in RoboCup Junior
実は部活用に急いでデータベースを確立したいので

結構な速度で目次に投入する必要のありそうな記事を書きたしていたりします。


今日はその中でもPICのコンパイラについてお話ししましょう。

コンパイラについては以前にもあちらこちらで記述しているかと思うのですが、コンパイルは翻訳機なので

C言語を機械語に翻訳してくれます。でも、パソコンに対して使う命令とPICに対して使う命令って勿論違いますよね?

だとしたらそれに応じて翻訳機、つまりコンパイラも変える必要があるのです。


一般的なC言語だと、gccとかccとかborlandが定番ですけど、PICだとどうなるのでしょう。

実はPICの場合、ファミリーごとにコンパイラが分かれています。

つまり、16Fだとこのコンパイラ、24Fだとこのコンパイラ、という風になっているというわけですね。


とりあえず今はうちの部で基本的に使われているコンパイラについて紹介します。

まず最初に紹介するのはHI-TECH C、どっかの会社と同じ名前ですね。

これはMPLABインスト-ルの際についてくるコンパイラです。

PICのコンパイラとしては恐らく一番標準的なもので、大体今のPICなら殆どのPICはこれで対応できるはずです。
現在はPIC10、12、16、18ファミリーまでしか対応していないようです。また、16までと18でも分かれているようです。

只、基本的に定義されている関数がちょっと少なめなので初心者にはちょっととっかかりにくいかもしれません。

このコンパイラでは基本、「レジスタ」というものを直接操作することで命令を行なっていくようになっています。

NXCとかだと、このレジスタに直接触れる機会はなく、基本的に関数を通してレジスタの中身を操作しています。

つまり、元々NXCとかに定義されている関数のほとんど(モーターを回したり、センサーを読んだりするもの)は

このレジスタの操作を関数にまとめたものということになります。

まぁレジスタってなんなんだ!?という話はまた今度にして、とりあえずそういうものだという理解をしておいてください。

Lite版は此方からダウンロードできます。


そして説明するのがMPLAB C Compiler for PIC24 MCUs and dsPIC DSCs。

ちょっと前までC30っていう名前のコンパイラでした。

このコンパイラはMPLAB C というコンパイラの一種でPIC24F、24E、24H、DSPIC30F、33F、専用のコンパイラです。

上で挙げたPICの場合、HI-TECH Cでプログラムを作るよりも、此方で作るほうが楽なので使っています。
追記:今のHI-TECH Cコンパイラは上で挙げたPICは使えないようです。

此方はHI-TECH Cのようにレジスタをあまりいじらなくていいように

NXCみたいに関数が作られている仕様になっているんですけど・・・

このコンパイラの関数は色々と信用がおけないのでやっぱりレジスタをいじったほうがいいと思われます。

これはLite版はフリーコンパイラで、此方の方でダウンロードできます。


最後に紹介するのがMPLAB C Compiler for PIC32 MCUs。

これもMPLAB Cコンパイラの一種です。これはPIC32MX専用となっています。

現在、他に32MX対応のコンパイラが無いのでC言語で32MXをするならこれしかありません。

とりあえず今回紹介したコンパイラの中では一番使える関数が多いというのが特徴でしょうか。

でもわざわざ32MXを使うような人は基本的にPICには精通している人のはずなので、

わざわざ関数を使うようなこともないでしょう。恐らく殆どの人がレジスタで済ましているはずです。

このコンパイラもフリーなので、此方からダウンロードすることができます。


とりあえず今うちで使っているコンパイラは以上3つだと思います。

今回紹介したのは全てMicrochip社の純正のコンパイラですが、他にも色々とコンパイラは存在します。CCSとか・・・。

因みにCCSは事故コンパイラで有名なので余り推奨は致しません。ホントのホントに初心者用ですね。有料だし。
あまり色々させるとあの子はバグります。例えるなら・・・NXT-G的な。


まぁこんな感じでこのようなコンパイラを使ってPICではプログラムを書いていくことになります。

このブログでもこの先、PICによるプログラムを記述する場合があるとは思いますが、

勿論コンパイラによって微妙に命令などが違ってきますので(Microchipのはどれもあんまり変わらないけど・・・)

どのコンパイラのプログラムなのかは注意して頂いた方が宜しいかと思われます。


という訳で今回はコンパイラの話でした。それではまた。


(^・ω・)ノ RadiumProduction in RoboCup Junior
使っているPICは16F1939。新しいシリーズの16FのPICです。

とりあえずコイツを2台乗せで行ってみようと思います。

今こんな感じになっていますね。PIC以外殆ど何もありませんが、この基盤はこれで殆ど完成しました。
PICのメイン基板です。一応これで完成ですが何も無いです。

まぁメイン基盤にこれ以上載せるものも、載せる場所もありませんけど・・・。

このソケットにPICを2つのっけてI2Cで相互通信をする予定です。

本当はI2Cなんて使う予定はなかったのですが、何故かこんなことに。
SPIでさくさくーっとやる予定が、SPI用のピンとI2C用のピンがブッキングしてしまっていたので仕方なく・・・。

しかも使いたいセンサーのbpsがものによって違うので、いちいち変更しなくてはいけないという面倒くささも問題です。

思ったより事故な仕様になりそうな予感がバリバリですが、まぁいつもなんとかなっているので今回もなんとかなるでしょう。

後はこの基盤はコア用のコンデンサを付けるのと、端子を接続するだけで完成です。

そして最後にセンサー基盤を上につけて・・・回路は完成です!


それにしてもこの回路群。作ったはいいけど一体何に使おう・・・。


(^・ω・)ノ RadiumProduction in RoboCup Junior
この前、Microchip(PICの会社)のサイトが新しくなりました。

それでその時に気がついたのですが、


MPLAB'X なんていう見たこともないけど、どっかで見たことあるようなモノがリリースされていました。
MPLABXのロゴ。本家サイトより直接URLコピです。
ココ!http://www.microchip.com/pagehandler/en-us/family/mplabx/

要するにアレです。MPLABの次世代版ですね。勿論どんなものか気になりますけど・・・

まぁ初モノには当然事故がつきもの、いきなり使ってみるのは怖いですよね。

という訳で、電気通信部のPCにインストールしてみました。




・・・というのは嘘で入れたのは電気通信部の部長さんです。バックアップのついでに入れたんだってさ。

まぁ面白いものなのでみんなで電気通信部のPCの前で色々やってみました。


それでやってみての結論ですが、

・重い

・何故かよくわからない段階でいちいちソースをロードし始める

・ソースエラーをパッシブで表示してくれる

・プロジェクトの生成が楽

・何故かHitecコンパイラの_delay関数がPROじゃないと使えなくなってる。←X関係ない

MPLABよりは安定はしてるけどホントに書き込めているかは謎



まぁ今のところこんな感じで有耶無耶な結果に終わりました。まぁ僕は見てただけですから・・・。

と、言う訳でちょっとよくわからない仕様の面もありますが、

便利「そうな」機能便利とは限りませんよ!がいっぱいついた結果、ちょっと重くなったよね。って感じでしょうか。

僕はいつもPICは(も)09年時代のネットブックで書いているので、

僕が使うとなるとちょっとスペック的に残念かもしれません。MPLABですら怪しいですから・・・。


まぁもうちょっと電通の様子を見て、使えそうなら自宅のi7にでも入れてみようと思います。

この件に関してはまた何がありましたら、どんどん掲載していく予定です。

それでは今日のところはこのへんで。


(^・ω・)ノ RadiumProduction in RoboCup Junior

前にPIC16FI2Cの実験をしているという話を致したと思います。
 
 
昔24Fで何事も無くできたので、テストがてらに・・・なんて思っていたのですが、
 
何故か全然出来なかったんです。
 
その謎が今日、データシートを読み返してわかりました。
 
一口にPICと言っても、18F以前のものと24F以降のものでは内部構造が全然違っていて、
 
I2Cの部分でもそれは躊躇に現れています。
 
というのも、I2Cの通信に使われるSCKとSDAというピンがあるのですが、18F以前だとこれは
 
マスターモードの場合は両方出力に、スレーブモードの場合は両方入力にする必要がありました。
 
それに対して、24F以降のPICでは、どちらのモードでも入力にする必要があります。
 
 
それで今回、僕が使ったのは16F1939。16Fなので当然前者になる・・・と思っていたのですが、
 
データシートを見るとなんと後者だったのです。
 
どうやら最新式である16F18xxシリーズと16F19xxシリーズのPICは新しい方の規格を採用しているらしく、

両方とも入力にする必要があるようです。

設定を変更したら何事もなかったかのように通信を成功させてくれました。全く・・・

 
今回の件にしても・・・やっぱり最新式16F達は今までの16Fとは別物と考えるべきなのでしょうね。常識通じないよこの子達・・・
 
やっぱり謎だらけです最新式16F。
 
まぁ謎の数で言えば24Fに勝るPICはないのでしょうけど・・・

なんてったって一般に知られているものだけでも、
 
UARTなどの数多くの関数の類が揃いも揃ってバグってるし、IrDA勝手に使ってるし!
ADコンバーターに関しては関数自体がダミーだし、ヘッダだけ・・・
挙句RA3ピンだったかな。強制常時H出力でちゃってるし。これ一番意味不明!

なんて具合です。
 
今思えば32MXが一番まともだったような・・・気がします。イネーブル機能してなかったけど

 
そんなPICの一日でした。ロボットやってねぇ!

 
(^・ω・)ノ RadiumProduction in RoboCup Junior
今日は健康診断がありました。

そして今日はおもいっきり寝坊をしたので、今日の活動はそれで終わりました。

なんか、全然ロボット触っていませんね。殆ど何も変わってない・・・。

プログラムに至っては、昨日坂のプログラムを修正しただけで、後はブロック大会から何も変わっていません。


まぁ正直なところ帰る変えるところもあまりないというのが現状なんですけど・・・。


話は変わりますが、今週の日曜日に秋葉に行った際にこれを買って来ました。
PIC16F1939、新しく製造された16Fシリーズの中の一つですね。
PIC16F1939です。

40ピンで170円。まぁまぁ安いPICですよね。これを2つ買ってきました。

16Fといっても最大クロック周波数32MHz、アナログピンが14個、CCPピンが5個搭載されているので

十分ロボットに使う分には問題ない仕様だと思います。SPIとI2Cが一つしか無いのは残念だけど・・・


とりあえずI2CPIC同士の相互通信をやってみようと思います。

I2Cは以前にもやったことがあるので、普通に使えるものなのですが、

今回、プログラムコンパイラを初めて使うものに変更したので確認も込めてという形でやってみます。

まぁ明日中には終わるのではないでしょうか。

そんな感じで今日はこのへんで。

ではまた次回~。


(^・ω・)ノ RadiumProduction in RoboCup Junior
カレンダー
03 2024/04 05
S M T W T F S
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
最新CM
[05/09 ONE RoboCuper]
[05/07 HDD ほしいよー]
[04/21 ブラック3辛]
[12/26 bols-blue]
[06/08 ONE RoboCuper]
かうんた
カウンター カウンター
らじぷろ目次
らじぷろ検索機
プロフィール
HN:
Luz
性別:
男性

PR

忍者ブログ 2007-2021,Powered by Radium-Luz-Lα+-Rescatar in RadiumProduction [PR]


Related Posts Plugin for WordPress, Blogger...