12F675 | 16F819 | |
プログラムメモリ | 1K word | 2K word |
データメモリ | 64Byte | 256Byte |
TOピン | 6 | 16 |
AD-CON | 4ch | 5ch |
INT-OSC | 4MHz | 8MHz |
サーボモーターのドライブのページでは、PIC12F675を使用しましたが、制御数に限界を感じましたので、PIC16F819を使用して制御数を増やしてみました。PIC12F675はアナログポートは3つあるのですが、1ボリュームに対して1サーボという使い方に対しては、A3が出力として使用できないので2ポートまでしか使用できません。一方、PIC16F819では5ポートまで使用できそうです。ここでは3ポートで製作しました。
12F675と16F819は、外形が全く違いますが、主要な相違点は上表のとおりです。
当サイトの、12F675を使用した「サーボモーターのドライブ」のプログラムのメモリー使用量は、ROMが343wordで33%、RAMが21Byteで33%とどちらも1/3の使用量ですので、これだけをみると、16F819に替える必要性はありません。当ページのプログラムのメモリー使用量もほとんど同じです。1チャンネル増やしただけで、そのまま移植していますので当然と言えば当然です。使用できる入出力のポートの数を各々1つ増やしたかっただけです。内部発振の最大クロック周波数は2倍違いますが、実際は同じ4MHzで使っています。
電源の容量が不足すると動作が不安定になります。今回、当初5V2Aを使用したのですがトルク不足に悩まされました。3Aは欲しいところです。
//12F675でのプログラムから16F819に移植
#include <16F819.h>
#byte PIR1=0x0c
#fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOMCLR
#DEVICE ADC=8
#use delay(clock=4000000)
Long haba0;
Long haba1;
Long haba2;
int V0;
int V1;
int V2;
#int_timer0
void Interval(void)
{
output_Low(PIN_B0);
output_Low(PIN_B1);
output_Low(PIN_B3);
set_timer0(176);
haba0=(1800/255)*V0+600;
PIR1=0;
set_timer1(65536-haba0);
output_high(PIN_B0);
while((PIR1 & 0x01)==0){ };
output_Low(PIN_B0);
PIR1=0;
haba1=(1800/255)*V1+600;
PIR1=0;
set_timer1(65536-haba1);
output_high(PIN_B1);
while((PIR1 & 0x01)==0){ };
output_Low(PIN_B1);
PIR1=0;
haba2=(1800/255)*V2+600;
PIR1=0;
set_timer1(65536-haba2);
output_high(PIN_B3);
while((PIR1 & 0x01)==0){ };
output_Low(PIN_B3);
PIR1=0;
}
void main()
{
set_tris_a(0xFF);
set_tris_b(0x00);
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256);
set_timer0(178);
enable_interrupts(INT_TIMER0);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
setup_adc_ports(AN0_AN1_AN2_AN4_VSS_VREF);
setup_adc(ADC_CLOCK_DIV_8);
enable_interrupts(GLOBAL);
while(1)
{
set_adc_channel(0);
delay_us(50);
V0=read_adc();
set_adc_channel(1);
delay_us(50);
V1=read_adc();
set_adc_channel(2);
delay_us(50);
V2=read_adc();
}
}
トップページへ戻る
5mm厚のアクリル上に基板、スライドスイ
ッチ大型サーボを乗せ、このサーボにプ
ラスチックのアームをつけ、このアーム
の先端にSG90を2個取り付けています。
基板は必要最小限の部品しか載っていま
せん。
スライドスイッチを3個並べています。
回転摺動より操作が楽にできます。
根元には大き目のサーボを使用していま
す。銘板がないのでメーカーや仕様は分
かりませんが、トルクはSG90に比べ間違
いなくありそうなのでPICでの直接駆動は
やめ2SC945を介しています。
アームの先端にはSG90を2個つけています。
内部発振を用いていますので、外付け構成部品が少なく済んでいます。AD変換の基準電圧は、RA3とVss間の電圧を基準とします。出力はRB0・RB1・RB3で、RB3には高負荷のサーボをつなげるようにしています。ソフトの構成は、ほぼ同じで675と819の相違をヘッダーファイルで確認しながら作成していきます。