スポンサーサイト


上記の広告は1ヶ月以上記事の更新がないブログに表示されます。
新しい記事を書くことで、こちらの広告の表示を消すことができます。  

Posted by ミリタリーブログ  at 

2022年06月03日

16F1503忘却の中で

16F1503を使用したライントレースのためのデータ

PWM出力とAD変換をしたプログラム

忘れたとき用に残す

/*
* File: analog.c
* Author: teacher
*
* Created on 2020/07/11, 14:32
*/

#include
#include
#include

#define _XTAL_FREQ 4000000

// PIC16F1503 Configuration Bit Settings

// 'C' source line config statements

#include

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection Bits (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset disabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)

// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LPBOR = OFF // Low-Power Brown Out Reset (Low-Power BOR is disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)

#define FOSC (4000000L)
#define FCYC (FOSC/4)

/* required for __delay_ms() macros */
#define _XTAL_FREQ FOSC


/* set PWM period to FCYC/(250 * 4) or 1000Hz when using 4MHz oscillator */
#define PWM_PERIOD 249
#define TMR2IF_MASK 0b00000010



/*
* Initialize PWM1
*/
void PWM1_Init(void)
{

T2CON = 0; /* stop TIMER2 */
PWM1CON = 0; /* stop PWM1 */

PWM1DCH = 0; /* set duty cycle to 0% */
PWM1DCL = 0;

PR2 = PWM_PERIOD - 1; /* set PWM period */

PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */

T2CON = T2CON | 0b00000101; /* turn on TIMER2 with a 4:1 prescaler*/

PWM1CON = PWM1CON | 0b10000000; /* enable PWM1 */

/* wait for first PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);

TRISC = 0b00100000; /* Make GPIO for PWM1 an output RC5*/
PWM1CON = PWM1CON | 0b01100000; /* enable PWM1 output */
}

void PWM2_Init(void)
{

T2CON = 0; /* stop TIMER2 */
PWM2CON = 0; /* stop PWM1 */

PWM2DCH = 0; /* set duty cycle to 0% */
PWM2DCL = 0;

PR2 = PWM_PERIOD - 1; /* set PWM period */

PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */

T2CON = T2CON | 0b00000101; /* turn on TIMER2 with a 4:1 prescaler*/

PWM2CON = PWM2CON | 0b10000000; /* enable PWM1 */

/* wait for first PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);

TRISC = 0b00001000; /* Make GPIO for PWM2 an outputRC3 */
PWM2CON = PWM2CON | 0b01100000; /* enable PWM1 output */
}
/*PWM3setiup*/
void PWM3_Init(void)
{

T2CON = 0; /* stop TIMER2 */
PWM3CON = 0; /* stop PWM1 */

PWM3DCH = 0; /* set duty cycle to 0% */
PWM3DCL = 0;

PR2 = PWM_PERIOD - 1; /* set PWM period */

PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */

T2CON = T2CON | 0b00000101; /* turn on TIMER2 with a 4:1 prescaler*/

PWM3CON = PWM3CON | 0b10000000; /* enable PWM1 */

/* wait for first PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);

TRISA = 0b00000100; /* Make GPIO for PWM3 an output RA2*/
PWM3CON = PWM3CON | 0b01100000; /* enable PWM1 output */
}
void PWM4_Init(void)
{

T2CON = 0; /* stop TIMER2 */
PWM4CON = 0; /* stop PWM1 */

PWM4DCH = 0; /* set duty cycle to 0% */
PWM4DCL = 0;

PR2 = PWM_PERIOD - 1; /* set PWM period */

PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */

T2CON = T2CON | 0b00000101; /* turn on TIMER2 with a 4:1 prescaler p153*/

PWM4CON = PWM4CON | 0b10000000; /* enable PWM1 */

/* wait for first PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);

TRISC = 0b00000010; /* Make GPIO for PWM4 an output RC1*/
PWM4CON = PWM4CON | 0b01100000; /* enable PWM1 output */
}
/*
* Set PWM1 duty cycle
*/
void PWM1_SetDutyCycle( unsigned int DutyCycle1 )
{
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */

/* wait for a PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);

/* update PWM duty cycle for the next period */
//PWM1DCH = DutyCycle >> 8;
// PWM1DCL = DutyCycle & 0x00FF;//pwm tyousei
PWM1DCH = DutyCycle1;
PWM1DCL = 0b00000000;
DutyCycle1=0x0000;
}
void PWM2_SetDutyCycle( unsigned int DutyCycle2 )
{
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */

/* wait for a PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);

/* update PWM duty cycle for the next period */
//PWM2DCH = DutyCycle >> 8;
//PWM2DCL = DutyCycle & 0x00FF;//pwm tyousei
PWM2DCH = DutyCycle2;
PWM2DCL = 0b00000000;
DutyCycle2=0x0000;
}

void PWM3_SetDutyCycle( unsigned int DutyCycle3 )
{
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */

/* wait for a PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);

/* update PWM duty cycle for the next period */
//PWM3DCH = DutyCycle >> 8;
//PWM3DCL = DutyCycle & 0x00FF;//pwm tyousei
PWM3DCH = DutyCycle3;
PWM3DCL =0x00;
DutyCycle3=0x0000;
}

void PWM4_SetDutyCycle( unsigned int DutyCycle4 )
{
PIR1 &= ~TMR2IF_MASK; /* clear TMR2IF */

/* wait for a PWM period to start */
while((PIR1 & TMR2IF_MASK) == 0);

/* update PWM duty cycle for the next period */
// PWM4DCH = DutyCycle >> 8;
// PWM4DCL = DutyCycle & 0x00FF;//pwm tyousei
PWM4DCH = DutyCycle4;
PWM4DCL = 0x00;
DutyCycle4=0x0000;
}

int adconv1();
int adconv2();
int adconv3();

unsigned int ADdata1;
unsigned int ADdata2;
unsigned int ADdata3;

unsigned int total;
unsigned int data;
/*
*
*/
int main(int argc, char** argv) {

// int ADVcc=0;
INTCON = 0b00000000;//P64
PIE1 = 0b00000000;//P65
PIE2 = 0b00000000;//P66
OSCCON = 0b01101000; //4mhz
OPTION_REG = 0b11111111;
PORTA = 0b00010000;
PORTC = 0b00000101;
TRISA = 0b00011000;//????
TRISC = 0b00000101;//PORTC????
LATA = 0b00000000;//Hi or Low
LATC = 0b00000000;//Hi or Low
ANSELA = 0b00010000;//analog to "1" digital to"0"
ANSELC = 0b00000101;//poot"C"
WPUA = 0b00000000;//pullup



while(1){
adconv1();
adconv2();
adconv3();
PWM1_Init();
PWM2_Init();
PWM3_Init();
PWM4_Init();
int p1=0xFF;
int p2=0x00;
int p3=0x0F;
int p4=0xB0;
int p5=0xA0;
int p6=0x0A;
// AN4 mannaka(AD1 AN6 hidari(AD2 AN3 migi(AD3 (sinnkouhoukonitaisite)
if( ADdata2>=0 && ADdata2<=300 && ADdata1>=300 && ADdata1<=1000 && ADdata3>=0 && ADdata3<=300){
PWM1_SetDutyCycle(p1);//kokowokaeru RC5
PWM2_SetDutyCycle(p2);//kokowokaeru RC3
PWM3_SetDutyCycle(p1);//kokowokaeru RA2
PWM4_SetDutyCycle(p2);//kokowokaeru RC1
_delay(10000);
}
else if( ADdata2>=300 && ADdata2<=1000 && ADdata1>=0 && ADdata1<=300 && ADdata3>=0 && ADdata3<=300){
PWM1_SetDutyCycle(p4);//kokowokaeru RC5
PWM2_SetDutyCycle(p2);//kokowokaeru RC3
PWM3_SetDutyCycle(p4);//kokowokaeru RA2
PWM4_SetDutyCycle(p2);//kokowokaeru RC1
_delay(10000);
}else if( ADdata2>=0 && ADdata2<=300 && ADdata1>=0 && ADdata1<=300 && ADdata3>=300 && ADdata3<=1000){
PWM1_SetDutyCycle(p1);//kokowokaeru RC5
PWM2_SetDutyCycle(p2);//kokowokaeru RC3
PWM3_SetDutyCycle(p1);//kokowokaeru RA2
PWM4_SetDutyCycle(p2);//kokowokaeru RC1
_delay(10000);

}/*else if( ADdata2>=0 && ADdata2<=400 && ADdata1>=400 && ADdata1<=1000 && ADdata3>=0 && ADdata3<=400){
PWM1_SetDutyCycle(p1);//kokowokaeru RC5
PWM2_SetDutyCycle(p2);//kokowokaeru RC3
PWM3_SetDutyCycle(p1);//kokowokaeru RA2
PWM4_SetDutyCycle(p2);//kokowokaeru RC1
_delay(10000);

}
* */else{
PWM1_SetDutyCycle(p2);//kokowokaeru RC5
PWM2_SetDutyCycle(p2);//kokowokaeru RC3
PWM3_SetDutyCycle(p2);//kokowokaeru RA2
PWM4_SetDutyCycle(p2);//kokowokaeru RC1
_delay(10000);
}
return (EXIT_SUCCESS);
}

}
int adconv1(){

ADCON0=0b00010011; //
ADCON1=0b10010000; //Fosc8 001 FOSC16 101

_delay(20);
ADCON0bits.GO =1;
while(ADCON0bits.GO_nDONE){}
unsigned int value1= ADRESH << 8| ADRESL;
ADdata1=value1;

}

int adconv2(){


ADCON0=0b00011011; //6-2bit 0011=3
ADCON1=0b10010000; //Fosc8 001 FOSC16 101

_delay(20);
ADCON0bits.GO =1;
while(ADCON0bits.GO_nDONE){}
unsigned int value2= ADRESH << 8| ADRESL;
ADdata2=value2;
}
int adconv3(){

ADCON0=0b00001111; //
ADCON1=0b10010000; //Fosc8 001 FOSC16 101

_delay(20);
ADCON0bits.GO =1;
while(ADCON0bits.GO_nDONE){}
unsigned int value3= ADRESH << 8| ADRESL;
ADdata3=value3;
}
  


Posted by ハロ  at 11:06Comments(0)電子関係

2021年02月20日

aps-3グリップ3D化計画8



おはようございます

先日出力したので、もっときれいに出力しようと精度は標準にして出力しました
ついでに、木グリの時に小指のあたりを削りたくても、穴が開いてしまってできなかったので
穴ができないようにデータを作り直しました

以下写真





とりあえず
aps-3グリップ3D化計画は終わりかな?

APS-3側のデータを作ってあるので、適当なグリップのデータ作っても
すぐ付けられるようになるから面白いかも

ただ、樹脂が100g単位で減ってくのでつらい
値段にすると200円ぐらいだけど。。。なんかいもだとつらい  


Posted by ハロ  at 09:56Comments(0)APS系3Dプリンタ

2021年02月15日

aps-3グリップ3D化計画7

おはようございます

先日スキャンしたデータをもとにフォームで作ってたんですけど
なんと、、パソコンが落ちまして
データがぁぁあああああああ

ということで、泣いてます

もうやめよ・・・


思ったんだけど、スキャンしたデータそのまま出せばいいじゃん!
はめる所だけまじめにそろえて引いて

試しに、出力してみました
試し出力なんで精度をがっつり落としてスピード優先で!




早速つけてみます
いっぱつでついたぁ
何回か出力して調整しようかと思ってましたが
しっかりとついてます




木製グリップの重量


今回作った重量



さて、今回 密度を5%にしたのですごいスッカスカです
思いっきり握るとギシギシするのでもうちょっと密度上げなきゃ
そうすると重量が増えるかも



ということで、あとはもう少し精度と密度を上げて出力してみようと思います

左手用も作っとくか?だれかほしいひといたら作ってみるか
  


Posted by ハロ  at 17:39Comments(0)APS系3Dプリンタ

2021年02月13日

aps-3グリップ3D化計画6

おはようございます

そういえば、LE2020出てたんですね

なんや、リアサイトの幅が変えられるって!
やっと公式が出してくれましたか、前々からバリアブルサイトだしてくださいよぉって言い続けたのが聞いてくれたのかな?

でも、LEかぁ 6万近くするのかぁ
難しいよぉ

パーツだけで出してくれないかな

あと欲を言うと、リアサイトが手前に来てしまうと、目が疲れるからなるべく通常のリアサイトとあまり距離が離れないでほしい
フロントサイトを下げられるようにしたのは、サイト間の距離が変わるからなのか
でも、リアサイトとフロントサイトを離した方が命中力が上がる気がするけど・・・


さて、今回も、APSのグリップを3dです

といっても、あれから進展はなく、パソコンのスペックが足りないのか重くて重くて
泣きそうです、なので、スキャンした生データを使うんじゃなくて、フォームっていう機能で改めて作り直す方向にします
まぁ、これから修正なんかしていくならフォームがいいでしょう


んで、思ったんですが、左手用のグリップって公式が木のグリップでだしてたり
昔フロンティアさんで(今も販売してるのか?)販売してたぐらいで記憶になかったんですが
3dプリンタなんて、こういうのに得意なんじゃないかなって

とりあえず、反転してみた




あとは、aps-3側の方をくぼませてしまえば、はまっちゃうだろうし
すぐ作れそう




高スペックPCほしいよぉ
3dCADがぬるぬる動くのほしいよぉ
3dマウスもほしいよぉ視点変更めんどいよぉ


お金がないよぉ


  


Posted by ハロ  at 11:44Comments(0)APS系3Dプリンタ

2021年02月11日

aps-3グリップ3D化計画5

おはようございます

自分の時間が少し持てるようになってきたので
やりたかったものを少しずつやってます


久しぶりにグリップを3Dにしますよって

今回は、外装がきちんととれればいかなと
一回でスキャンが難しい形状しているので
内側に関しては自分で3Dつくって引き算しようかと

だいぶスキャンのコツをつかんできたのかきれいにとれました



3dプリンタも以前より出力がきれいだし
期待大です

そもそもスキャンしてどうしろって話ですが
中身をすっかすかでつくれば木で作ったグリップより軽くなるのかな?
  


Posted by ハロ  at 08:18Comments(0)APS系3Dプリンタ

2021年02月05日

サイトの外し方

バリアブルサイトの付け方って?

まず、今ついているサイトを外さなきゃいけませんよね
外し方
そういえば、かいてなかったっけ?って



Eリングをマイナスドライバなどで、取ります
取り方的には、マイナスドライバを差し込んで回すようにすると外れます
大体 幅1.2㎜のマイナスドライバ―がいいです


外したら、プラスドライバーでフタを固定しているネジを外します
この時、後ろにあるナットが落下する恐れがあるので、グリップを外しておいた方がよいです



外すとこんな感じになっているので
ノブを左に回し続けて、取ります


ノブを取った後、バネを取ります(飛んでいかないように)


取り付けは逆をすればいいのですが
Eリングを取り付けるときは、ノブにすこしはめるようにしてペンチなどではめてあげてください


一部写真は過去の投稿から持ってきました
思うとバリアブルサイト2013年ぐらいからやってるのか・・・ながいな



  


Posted by ハロ  at 17:04Comments(0)APS系バリアブルサイト

2021年02月05日

新しい3Dプリンタ

おはようございます
更新が止まってましたが
やっと、仕事が落ち着いてきました

3年生グッバイ!!


さて、今まで使ってた3Dプリンタは16万円もする3Dプリンタだったんですが
もう何年も昔に販売開始したものなんですよ
たしか4年位前かそのくらい

最新の3dプリンタってどうなんもんなんやって探してたら
なんと、2万円台で買えるじゃないですか!

今回は、デルタ型と言われている3Dプリンタを購入してみました
なぜデルタ型にしたのかというと、テーブルを動かすタイプは予想以上に場所を取り
テーブルの重量があるためモータに負荷がかかり、騒音のもとになっている可能性を感じ
可動部分が軽量で、テーブルが動かないデルタ型に挑戦です

ただ、制御が難しいらしく、今まではなんだかなぁって感じだったらしいですが
昨年の11月ぐらいに発売開始した FLSUN社のQ5を使ってみます

ここを押すとアマゾンに飛びます

アマゾンで2万円台で買えてたんですが、2月から値上がりして3万円になりました
ただ、クーポンを使うと1万円引きになるので、実際は2万円台でかえるってことですね
なんだろうこの値上げは


そんなこったで、色々と設定を変えたり、メカトロニクス的な部分も調整をしまくって
めっちゃきれいに出力できるようになりました
なんといっても、Z軸の分解能が0.06㎜ともうわけわからん数値まで来てるところですね
今まで使ってたのは、0.1㎜がマックスだったので期待できます

試しにバリアブルサイトを出力してみました




出力した感じはとてもきれいに出力できていてこれは使える!って感じです
今まではDMM.comに頼んで作ってもらってたけど
自分でも作れそう

ただ、M3 のネジがうまく出力できていなくて
ここは、データをM4に変更したりしてみようかと


ここで、FLSUN Q5 のメリットデメリットを書いてみます
メリット
まず、静か!めっちゃ静か
今までは押し入れに入れて作動させても3つ離れた部屋まで作動音が響いていました
重量があるテーブルを動かしたりするときのモータ音と振動がすごかったです
今も、押し入れに入れて作動させていますが、扉を閉めた段階で冷却用のファンの音しかしません

テーブルが動かないので細い造形物なども倒れす出力できる!
以前のプリンタでマスクを出力していましたが、途中倒れてしまうことが何度かありました
テーブルが前後に動くことによって剥がれてしまっていました
まぁ方向を変えれば剥がれなくなったのですが、今回のはテーブルがそもそも動かないので
安定して出力できているようです

あと、組み立てしやすい、箱から出して30分くらいで組み立て完成です
説明書もいらないくらい(説明書あったのか?)簡単です

画面がタッチパネル!直接的な操作ができて便利
デメリット
専用のスライサーが・・・あんま使えん
自分はCURAというスライサーを使っているのですが、細かい設定やプラグインなどを入れて出力しています
専用のスライサーがちょっとなぁって感じ
ほかの方も、専用のスライサーじゃないみたいなので、CURAの情報が多いので特段苦労していません

SDカード挿入口が後ろ・・・
これは、いちいち後ろに回らないといけないのでめんどいです
解決策は見つけてるので、後日記事にしてみます





特にデメリットも少なく、すごく使いやすいと思います


最初のプリンタは75万もしたのに、いつまにか2万円台まで来ちゃいましたね
樹脂も豊富で、700g 3万5千円だったのに、いまでは1Kg 2000円台 しかも樹脂の精度も上がっていて
どんどん進化してるって感じですね



  


Posted by ハロ  at 16:42Comments(0)APS系バリアブルサイト3Dプリンタ

2020年10月18日

忙しいでも時間を見てやっても怒られる

おはようございます

最近いろんなことがあって
大変です


まず、子供が生まれました

3年生の就活まじ忙しい



忙しい中、合間を縫ってトランペットを吹いていると
こんな忙しいのになにやってるのって

いやぁもう勤務時間外だしゆっくりさせてくれよ
勤務時間なのにたばこ吸ってる方はなんにも言われないのに
たばこはそんなに偉いのか


さて、本題ですね
一番最初に書いちゃったけど
元気な男の子が誕生しました
これからも、がんばっていきましょう


APS-3のグリップを3D化したくいろいろやってますが
もう少し精度の高いスキャナじゃないと厳しそうです・・・  


Posted by ハロ  at 07:40Comments(2)娯楽

2020年07月25日

aps-3グリップ3D化計画4

おはようございます

続きを一生懸命やった結果
あることがわかりました

今回使っているソフトは背景から位置関係を認識しているようで

対象物をターンテーブルで回転させてはだめだそうです
もしこの方法をやる場合は、アイフォンのフェイスIDってのを使うとうまくいくそうですが
私は、アンドロイド派なので持っていません


さて、困ったな・・・ということで、外でモデリングすることにしましたが
この数週間休みもなく、ずっと仕事

そしてこの4連休でやるぞ!と心に決めていましたが
ずっと雨・・・むぅ


タイミングを見てやってみました



右下あたりにグリップがあります
車庫にあった車などもスキャンされており すげぇ!ってなりました

あとは、何回かスキャンして部分的にでもうまくスキャンできたところを
貼り付け合ってきれいなデータにしていきたいと思います
  


Posted by ハロ  at 20:46Comments(0)APS系3Dプリンタ

2020年06月24日

aps-3グリップ3D化計画3

おはようございます

マスクを外せないので、汗がすごいことになってきました
換気をしなくてはならないので、エアコンが使えないってのがつらい・・・


さて、今回も写真から3Dにしようってことなんですが
あれから、何回やってもうまくいかないんです



いじゃけたのでターンテーブル作ってしまおう!ってことで
作ってみました
ステッピングモータさんとarduinoさん さすがです

一定の角度で回り続けるので、カメラを固定して撮影することができます
やっつけ感がつよいですが、とりあえずこれでいいでしょうw



うまくできるでしょうか?
次回に続く
  


Posted by ハロ  at 21:20Comments(0)APS系3Dプリンタ

プロフィール
ハロ
ハロ
スピードシューティング・APS・FPSをこよなく愛するハロです。
主にAPSを本腰で挑戦中
/"ハンドガン"/   
<フリー>
公式186-4×
練習会191-3×
練習200-3×
<オープン>
公式190-5×
練習会 186-5×
練習196-6×
/"ライフル"/
<フリー>
公式 121-2×
練習会160-3×
練習
<オープン>
公式 134-3×
/"取得バッチ"/
ハンドガン
グランドマスター
ライフル
シャープシューター
< 2022年10月 >
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 31          
QRコード
QRCODE
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 2人
過去記事
アクセスカウンタ
↑LO↑ ↑たぬきそふと↑ たぬきそふと PCゲーム『少女教育』を応援中!

放浪息子