C.K PRIVATE PICマイコン,

WEB・PIC

C.K PRIVATE PICマイコン

C.K PRIVATE /  2011年・PICマイコンのページです
PICマイコンの基礎やプログラムの紹介です

12.25     ●バブルソート

#include <stdio.h>

int main(void)
{
int data[10] = {34, 50, 12, 320, 68, 210, 98, 48, 2, 189};
int i, j, workdat;

for(i = 0; i < 9; i++) {
for(j = 9; j > i; j--) {
if(data[j] < data[j-1]) {
workdat = data[j];
data[j] = data[j-1];
data[j-1] = workdat;
}
}
}

for(i = 0; i < 10; i++) {
printf("%d ", data[i]);
}
printf("\n");
}


 

12.23     ●自己参照型

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct st_person {
char name[64]; // 名前
int age; // 年齢
char from[32]; // 出身地
struct st_person *next;
} Person;

void data_display(Person *p);

/*
ファイルから全てのレコードを読み込み
連続したチェーンつながりのデータ構成になっている。
読み込み終了後、削除したいデータを指定して、あたかも
データが削除されたかのようにチェーンをつなぎ
変えるプログラムです。。。。。
*/
void main( void )
{
FILE *fp;
char buff[256];
char name[64];
int n;
Person work;
Person *wrkpt;
Person *p, *bp;

work.next = NULL;

if((fp = fopen("個人情報.txt", "r")) == NULL) {
perror("< file name person.txt > ");
return;
}

/* ファイルからデータを各メンバに読み込み
連続したチェーンつながりでデータを設定する。 */
for(p = &work, n = 0; fgets(buff, 256, fp) != NULL; n++) {
if((wrkpt = (Person *)malloc(sizeof(Person))) == NULL) {
return;
}
sscanf(buff, "%s %d %s", wrkpt->name, &wrkpt->age, wrkpt->from);

// データを読み込んだのでチェーンをつなぐ
p->next = wrkpt;
p = wrkpt;
p->next = NULL; // 終了コード設定
}

fclose( fp );

data_display(work.next); // 一覧表示

while( 1 ) {
while( 1 ) {
printf("削除する名前:"); gets(name);
if(name[0] == '\0' || toupper(name[0]) == 'Q') break;

for(p = work.next; p->next != NULL; p = p->next) {
if(strcmp(p->name, name) == 0) {
bp->next = p->next; // 一つ前の構造体アドレスのnextに次のアドレスを再設定
if(p->next == NULL)
break;
}
bp = p; // 一つ前の構造体アドレスを保存する。
}
}
data_display(work.next); // 一覧表示

if(toupper(name[0]) == 'Q')
break;
}
}

/*
全データを画面に一覧表示
*/
void data_display(Person *p)
{
printf(" 氏名   年齢  出身地\n");
for( ; p->next != NULL; p = p->next)
printf("%-18s %3d才 %s\n", p->name, p->age, p->from);
}

 

12.17     PIC プリントフのうまい使い方と練習.

#include<stdio.h>

int main()
{
/*printf("+[%d]\n",128+45);
printf("-[%d]\n",128-45);
printf("×[%d]\n",128*45);
printf("÷[%d]\n",128/45);
printf("+%d\n",134*45+128*77);

printf("8たす4は%dです☆\n",8+4);
printf("8たす4は%dです。\n",12);

printf("10進数の12は8進数では%oです16進数では%xです、10進数では%dです\n",
12,12,12);
printf("+[%d]-[%d]×[%d]÷[%d]\n",128+45,128-45,128*45,128/45);
printf("+%d-%d*%d/%d\n",333+333,333-333,333*333,333/333);
printf("金子 力は1978年生まれなので%d才です\n",33);
printf("変数は変わる数☆%d\n",128+45);*/

//printf("(5+3)×4%d\n",(5+3)*4);

return 0;
}

それと最近プログラムだけでなく、回路の勉強も始めました、
FPGA、ニオスとクォーツです、結構はまりますね★
結構好きかもです★
参考書と評価ボードのセットで購入しました★

 

12.9     ポインタの練習

#include <stdio.h>

void q2_03(void)
{
int dat[5] = {00, 10, 20, 30, 40};
int *pt1, *pt2;
int i;

pt1 = &dat[2];
pt2 = &dat[2];
printf("*pt1 = %d\n", *pt1);
printf("*pt2 = %d\n", *pt2);

pt1++;
++*pt2;

printf("*pt1 = %d\n", *pt1);
printf("*pt2 = %d\n", *pt2);

for(i = 0; i < 5; i++) dat[i] = i * 10;
pt1 = &dat[2];
pt2 = &dat[3];
printf("*pt1 = %d\n", *pt1);
printf("*pt2 = %d\n", *pt2);

(*pt1)++;
++(*pt2);
printf("*pt1 = %d\n", *pt1);

printf("*pt9 = %d\n", *pt2);

printf("*pt11 = %d\n", (*pt2)++);

printf("*pt10 = %d\n", *pt2++);

printf("*pt10 = %d\n", *pt2);

printf("%\n%d\n", *(pt2 - pt1 + &dat[3]));

}


H8評価ボード

只今学校でPICではなく、H8のお勉強しておりますH8の方が汎用機に近いらしいです

今までPICになれていたので、H8はアドレスを意識しなくてはならないので、ちょっと大変ですが

もう慣れてきました★評価ボードは、やはり実験てかぁ初心者にはあっていいものですね★

勉強になります★

 

ポインタOKOKです★


オペアンプ

特に近年はアナログ信号をマイコンを含めたディジタル回路へ接続するインターフェース的な役割でオペアンプが活用されることが多くなっています。
また、このようなディジタル回路部で用いるオペアンプは単電源動作が望ましく、ますます、オペアンプの選定に迷うところです。

そこで、従来からある汎用オペアンプ(両電源)、単電源用オペアンプ、CMOS構造オペアンプ、さらにレール・ツー・レール(Rail-to-Rail)オペアンプの特徴を理解し、実際のオペアンプ選定に役立てていただければと思います

 

 

 

オペアンプの分類
オペアンプは、用途、性能、構造などで汎用、単電源、CMOS、高精度、高速、差動(計装)などのように細かく分類されます。それぞれ、回路、用途によって選定しますが、よく使われる以下の4つの分類について特徴等を解説します。
1.汎用(両電源)オペアンプ

・汎用とは特別な機能、高性能はないが、一般的な回路(用途)で用いられるオペアンプのこと。

・電源はプラスマイナスの「両電源」動作を基本とする。

・オペアンプの内部構造は、トランジスタなどの「バイポーラ」または「FET入力タイプ」

・普通に用いて、発振等が発生しなく、安定に動作するもの

2.単電源オペアンプ

・単電源動作が可能なバイポーラ構造

・レール・ツー・レール動作は含まない

3.CMOSオペアンプ

・レール・ツー・レールは保証していないが、定電圧動作、低消費電流などで特徴のあるCMOS構造のオペアンプ

4.レール・ツー・レール(Rail-to-Rail)

・入出力がRail-to-Railと表現されているもの





▼各分類解説の前に基本となる電源供給、波形等について解説します。

 

電源供給と波形
【1】両電源の場合

オペアンプは図1のように2つの電源端子があります。

基本的にはプラスの「+Vcc」とマイナスの「-Vee」が必要です。
両電源動作時の出力波形例を図2に示します。
出力波形はGND(0V)を中心にして+Vccと-Veeの間で振れ、扱う信号レベルが小さければ図2 b)のように+Vccと-Veeの値が異なってもいいです。

 

【2】単電源の場合
電源に+Vcc(または-Vee)のみを供給する方式を「単電源」と言います。
図3に電源の与え方を示します。
図3a)が基本的な単電源の与え方で、出力信号は+VccとGNDの間です。
図3b)はオペアンプの+Vcc端子にGND、-Vee端子にマイナスの電源を接続した例で、この場合でもオペアンプは正常に動作しますが、扱える信号はGND~-Veeの間です。
また、単電源用オペアンプは必ずしも単電源動作(供給)ではなく、図3 c)のように両電源動作で用いても構いません。

 

 

 

 

レール・ツー・レールとは
汎用の両電源および単電源オペアンプは、供給した電源電圧の範囲内すべてで信号を扱うことができません。
これに対し、オペアンプの電源電圧(+Vcc~-Vee)いっぱいまで動作するものを「レール・ツー・レール」オペアンプと言います。なお、レールとは電源電圧を指しています。
図4にオペアンプに+VccとGNDを供給した場合のレール・ツー・レールの信号波形を表します

 

 

ダイナミック・レンジとは振幅の範囲のことで、図5に各方式の違いを示します。
汎用(両電源)の場合は+Vcc、-Vee付近での振幅レベルは扱えなく、汎用単電源の場合は+Vcc付近は扱うことができません。


ACアダプタって

一般的にACアダプタは以下の様に3通りに分けられます。

▼非安定化ACアダプタ ・簡易的な方式
・入出力の変動に弱い
・用いる電源と機器の定格に注意

▼安定化ACアダプタ
・入出力の変動に強い(安定)
・リップルは少ない
・やや大型

▼スイッチング方式ACアダプタ
・小型、軽量
・効率が良い(熱を持たない)
・入出力の変動に強い(安定)
・スイッチングノイズが発生する

それぞれ特徴がありますので用いる機器に
適した電源を選択することが重要です