GWの前半を使って、Amisの基板を切削した。
今度は、elecrowとかに発注してみたいけど、複数作るものではないので、切削で十分。
部品をハンダ付けするだけなので、作業自体は相当短縮できる。
ただし、GNDベタパターンなので、サーマルランドにしたとしても、容量の大きいハンダゴテが必要になった。
ユニバーサル基板の試作とはまた違った趣があって、いいですな。
まだ、光センサーの接続が残っているけど、まずはこんな感じで。
あとは、適当なケースに入れて、外部入力を接続すれば、最初の目的は達成できそう。
http://continue-to-challenge.blogspot.jp/2016/02/amis.html
これの赤外線出力以外を実現。
まだまだやりたいことがたくさんあるけど、GW中に完成できるかな・・・。
2016年5月2日月曜日
2014年12月13日土曜日
iModela+eagleでプリント基板作成(動作確認)
ようやく、パターンのチェックが終わり想定外のショート・断線が無いことを確認した。
すぐにでも電源を入れてみたかったけど、
肝心のソフトウェアがまだ・・・。
この基板に載っているのはPIC16F818で、I2Cのスレーブにもなれる。
これをラズベリーパイから操作したいと思っている。
その前段階として、PIC自身がカウントアップするプログラムを書いて、
動作確認を行うことにした。
やはり、Linux(X86_64)環境では開発環境が遅すぎるので、
32bit環境で開発を行った。
<次回改善>
・数値→7セグパターン出力は汎用的に使えるようにしておく
今は配線の都合だけでレイアウトしてしまったので、
RA: 76543210
7seg:hecagfbd
みたいなことになっている。。。
パターンを作る人と出力のために変換する人が必要。
動作確認結果がこちら。
スモーク色のアクリル板を上に載っけておくと表示が見やすい
(というか、板が無いととても見づらい。。。)
カメラで撮るとチラツキが目立つね。
次はI2Cの確認だ−!
すぐにでも電源を入れてみたかったけど、
肝心のソフトウェアがまだ・・・。
この基板に載っているのはPIC16F818で、I2Cのスレーブにもなれる。
これをラズベリーパイから操作したいと思っている。
その前段階として、PIC自身がカウントアップするプログラムを書いて、
動作確認を行うことにした。
やはり、Linux(X86_64)環境では開発環境が遅すぎるので、
32bit環境で開発を行った。
/* * File: main.c * Author: adeno * * Created on 2014/12/13 */ #include#include #include #include "nana_seg_ptn.h" /* * */ // CONFIG #pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTRC oscillator; port I/O function on both RA6/OSC2/CLKO pin and RA7/OSC1/CLKI pin) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR) #pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled) #pragma config LVP = ON // Low-Voltage Programming Enable bit (RB3/PGM pin has PGM function, Low-Voltage Programming enabled) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Code protection off) #pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off) #pragma config CCPMX = RB2 // CCP1 Pin Selection bit (CCP1 function on RB2) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) #define _XTAL_FREQ 4000000 //delay用に必要(クロック4MHzを指定) #define TMR0_CNT 0 //TMR0カウント値設定 static void seg_sel(unsigned char n); unsigned char keta; //7segの桁 unsigned int num; unsigned char gcnt; /* * */ int main(int argc, char** argv) { OSCCON = 0b01100010; //PORTA 3-0は7segのd-a 不論理 //RA4は1桁目、RA6は2桁目 不論理 //PORTB 3-0は7segのh-e 不論理 //PORTA 0,1,2,3,4,6,7 //PORTB 0,2,6,7 桁 5 PORTA = 0b11011111; //PORTAの中身をきれいにする TRISA = 0b00000000; //PORTAは 1:入力 0:出力 PORTB = 0b11100101; //PORTBの中身をきれいにする TRISB = 0b00000000; //PORTBは 1:入力 0:出力 keta = 0; num = 0; gcnt = 0; //TMR0の割り込み初期設定 //1000ms=0.25us(4MHz)*4*プリスケーラ−256*256 OPTION_REG = 0b0111; //プリスケーラ値設定0b0111(=256回) TMR0 = TMR0_CNT; //TMR0カウント値設定 INTCONbits.TMR0IE =1; //タイマ割込み許可 INTCONbits.GIE = 1; //全体割込み許可 unsigned char ra_bak; while(1) { //表示を消す seg_sel(0); //PORTA = 0b01011111; __delay_ms(1); //表示 seg_sel(keta); //PORTA = 0b01001001; //PORTB = 0b00001111; //NOP(); //RA4 = 0; __delay_ms(3); //桁移動 keta++; if(keta > 5){keta = 1;} } return (EXIT_SUCCESS); } static void interrupt isr(void) { //割り込み関数 if(INTCONbits.TMR0IF == 1) { //割込み種がTimer0割込みの場合 INTCONbits.TMR0IF = 0; //Timer0割り込みフラグクリアー TMR0 = TMR0_CNT; //TMR0カウント値設定 gcnt++; if(gcnt > 5){//15){ num++; if(num > 9999){num = 0;} gcnt = 0; } } } // =============== セグメントセレクタ ============ static void seg_sel(unsigned char n){ //PORTA 0,1,2,3,4,6,7 //PORTB 0,2,6,7 桁 5 unsigned char ptn,ra_bak,rb_bak; ra_bak = PORTA & 0b00100000; rb_bak = PORTB & 0b00011010; switch(n){ default:{ } case 0: { //初期化 PORTA = 0b11011111; PORTB = 0b11100101; break; } case 1:{ //セグメント1 ptn = show_number(num % 10,0); if((ptn & 0b00100000) > 0 ){ PORTB = 0b01100101; //7 }else{ PORTB = 0b01000101; //5to7 } //PORTB = rb_bak | (0b00001111 & (ptn >> 4)); //PORTA = 0b01010000 | (0b00001111 & ptn); //ptn //NOP(); //PORTA = 0b01000000 | (0b00001111 & ptn); //RA4をL + ptn PORTA = ra_bak | (0b11011111 & ptn); //PORTA = 0b11000000; break; } case 2:{ //セグメント2 ptn = show_number((num / 10)%10,0); if((ptn & 0b00100000) > 0 ){ PORTB = 0b10100101; //6 }else{ PORTB = 0b10000101; //5to6 } //PORTB = rb_bak | (0b00001111 & (ptn >> 4)); //PORTA = 0b01010000 | (0b00001111 & ptn); //ptn //PORTB = 0b11000001; //5と2 //NOP(); //PORTA = 0b00010000 | (0b00001111 & ptn); //RA6をL + ptn //PORTA = 0b01000000; PORTA = ra_bak | (0b11011111 & ptn); break; } case 3:{ //セグメント3 ptn = show_number((num / 100)%10,0); if((ptn & 0b00100000) > 0 ){ PORTB = 0b11100001; //2 }else{ PORTB = 0b11000001; //5to2 } //PORTB = rb_bak | (0b00001111 & (ptn >> 4)); //PORTA = 0b01010000 | (0b00001111 & ptn); //ptn //PORTB = 0b11000001; //5と2 //NOP(); //PORTA = 0b00010000 | (0b00001111 & ptn); //RA6をL + ptn //PORTA = 0b01000000; PORTA = ra_bak | (0b11011111 & ptn); break; } case 4:{ //セグメント4 ptn = show_number((num / 1000)%10,0); if((ptn & 0b00100000) > 0 ){ PORTB = 0b11100100; //0 }else{ PORTB = 0b11000100; //5to0 } //PORTB = rb_bak | (0b00001111 & (ptn >> 4)); //PORTA = 0b01010000 | (0b00001111 & ptn); //ptn //PORTB = 0b11000001; //5と2 //NOP(); //PORTA = 0b00010000 | (0b00001111 & ptn); //RA6をL + ptn //PORTA = 0b01000000; PORTA = ra_bak | (0b11011111 & ptn); break; } } }
/*
* File: nana_seg_pth.c
* Author: adeno
*
* Created on 2014/11/13
*/
#include "nana_seg_ptn.h"
// =============== 表示パターン ====================
unsigned char show_number(unsigned char n,unsigned char dot){
static unsigned char ptn = 0b11111111;
/*
* 76543210
* hecagfbd
*/
switch(n){
case 0: { //abcdef
ptn = 0b10001000;
break;
}
case 1: { //bc
ptn = 0b11011101;
break;
}
case 2: { //abdeg
ptn = 0b10100100;
break;
}
case 3: { //abcdg
ptn = 0b11000100;
break;
}//hecagfbd
case 4: { //bcfg
ptn = 0b11010001;
break;
}
case 5: { //acdfg
ptn = 0b11000010;
break;
}
case 6: { //acdefg
ptn = 0b10000010;
break;
}
case 7: { //abc
ptn = 0b11001101;
break;
}
case 8: { //abcdefg
ptn = 0b10000000;
break;
}
case 9: { //abcdfg
ptn = 0b11000000;
break;
}
}
return ptn;
}
<次回改善>
・数値→7セグパターン出力は汎用的に使えるようにしておく
今は配線の都合だけでレイアウトしてしまったので、
RA: 76543210
7seg:hecagfbd
みたいなことになっている。。。
パターンを作る人と出力のために変換する人が必要。
動作確認結果がこちら。
スモーク色のアクリル板を上に載っけておくと表示が見やすい
(というか、板が無いととても見づらい。。。)
カメラで撮るとチラツキが目立つね。
次はI2Cの確認だ−!
2014年12月7日日曜日
iModela+eagleでプリント基板作成(部品実装完了)
朝、会社に行く前とか、帰ってきてからの少しの時間で、少しづつ部品の載せてきた。
今日ようやく完了した。
実装してきて思ったことは、
・銅箔面を素手で触るとすぐに変色してしまう→要手袋
・作業が中断する場合は、密封して極力外気に触れさせない→チャック付きの袋
右側切るの忘れてた・・・。
まだ通電確認していないけど、
裏側はこんな感じ
き、汚いOrz
次作るときは、
・GNDは熱が逃げやすいので、工夫が必要
・ジャンパーは直線がいい、極力少なくしたい
・チップ部品は意外と楽ちん (今回は1か所しか使っていないけど)
・GND以外の島は削っておきたい:加工時間が長くなってしまうけど、
はんだが移っちゃうし・・・。
コーティングスプレーしたからもう机上に置きっぱなしで大丈夫なはず・。
今日ようやく完了した。
実装してきて思ったことは、
・銅箔面を素手で触るとすぐに変色してしまう→要手袋
・作業が中断する場合は、密封して極力外気に触れさせない→チャック付きの袋
右側切るの忘れてた・・・。
まだ通電確認していないけど、
裏側はこんな感じ
き、汚いOrz
次作るときは、
・GNDは熱が逃げやすいので、工夫が必要
・ジャンパーは直線がいい、極力少なくしたい
・チップ部品は意外と楽ちん (今回は1か所しか使っていないけど)
・GND以外の島は削っておきたい:加工時間が長くなってしまうけど、
はんだが移っちゃうし・・・。
コーティングスプレーしたからもう机上に置きっぱなしで大丈夫なはず・。
2014年11月29日土曜日
iModela+eagleでプリント基板作成(2/2)
前回の続き
ガーバーデータの出力は、いろいろなところで紹介されているので、
キーワードだけ。
gerb274x.cam → パターンデータ
excellon.cam → ドリルデータ
らしい
生成したガーバーデータを「WINSTAR PCB for iModela」にて読み込む。
切削に使うエンドミルが一覧に無いので、「詳細設定」を選ぶ。
このあたりは、トライアンドエラーで行き着いた値なので、正しくは無いかもしれない。。。
でも大丈夫そうだから、まぁいいか。
「了解」を押すと「切削設定」が表示される
パターン:0.3mm
ドリル穴、カット:0.5mm
剥離面:0.5mm
芯ブレ補正値:0.04mm
「V」をクリック「Vカッター計算」というのが開く
このあたりの数値もトライアンドエラー、でも動くからこれでいいやOrz
もろもろ確認して、OKであれば切削を開始する。
また「Vカッター計算」
切削速度は10mm/s程度までなら大丈夫みたい。
うりゃー
ガーガーうるせーーー
パターンの切り出しに20分くらい
穴あけに15分くらい
ところどころ削りきれていないものがあるので、
カッターで微修正。
今日はここまで。
久しぶりにやったので、一日がかりだ。やれやれ。
でも達成感があるね。
ガーバーデータの出力は、いろいろなところで紹介されているので、
キーワードだけ。
gerb274x.cam → パターンデータ
excellon.cam → ドリルデータ
らしい
生成したガーバーデータを「WINSTAR PCB for iModela」にて読み込む。
切削に使うエンドミルが一覧に無いので、「詳細設定」を選ぶ。
このあたりは、トライアンドエラーで行き着いた値なので、正しくは無いかもしれない。。。
でも大丈夫そうだから、まぁいいか。
「了解」を押すと「切削設定」が表示される
パターン:0.3mm
ドリル穴、カット:0.5mm
剥離面:0.5mm
芯ブレ補正値:0.04mm
「V」をクリック「Vカッター計算」というのが開く
このあたりの数値もトライアンドエラー、でも動くからこれでいいやOrz
もろもろ確認して、OKであれば切削を開始する。
また「Vカッター計算」
切削速度は10mm/s程度までなら大丈夫みたい。
うりゃー
ガーガーうるせーーー
パターンの切り出しに20分くらい
穴あけに15分くらい
ところどころ削りきれていないものがあるので、
カッターで微修正。
今日はここまで。
久しぶりにやったので、一日がかりだ。やれやれ。
でも達成感があるね。
iModela+eagleでプリント基板作成(1/2)
ユニバーサル基板では大変だけど、基板を発注するほど大量には作らない時、
自分でプリント基板を作りたい衝動に駆られた。
感光基板をエッチング液でうんたらかんたらは、
綺麗に作れるのだけど、廃液の処理とか感光時間の 調整とか
ドリルで穴あけとか、ちょっと心が折れたので、
もう少し楽ができないかなと思った。
(もう1年以上前の話だけど。。)
その時に衝動買いしたのが、iModelaである。
http://icreate.rolanddg.com/iModela/DGJ/Japanese/index.html/
iModelaは非金属の加工ができる個人向けの切削加工マシーンなのだけど、
エンドミルをつければ、プリント基板を加工できるのだ。
http://www.pcbmilling.biz/
なかなか値が張るのだけど、いろいろできそうと心が踊り、
衝動買いしたのはもうかなり前。
しばらく厳重に保管しすぎてホコリがかぶっていたが、
これではいけないと思い、再び始めたのである。
前に作ったときは、FT232RLのSSOPのピッチまで作れたので、
今回のデザインルールもコレと同じでクリアランス0.35mmとした。
eagleでデザインルールを指定
チェックすると大量のNG項目がでて、作り直し。。。
その後、
太さを変えるのを忘れていた。
電源は16mil、信号線は12milとした。
直角曲がりは気持ち悪いので、変更した。
GNDのベタパターンを作成し、最終的にはこうなった。
まずはここまで。
自分でプリント基板を作りたい衝動に駆られた。
感光基板をエッチング液でうんたらかんたらは、
綺麗に作れるのだけど、廃液の処理とか感光時間の 調整とか
ドリルで穴あけとか、ちょっと心が折れたので、
もう少し楽ができないかなと思った。
(もう1年以上前の話だけど。。)
その時に衝動買いしたのが、iModelaである。
http://icreate.rolanddg.com/iModela/DGJ/Japanese/index.html/
iModelaは非金属の加工ができる個人向けの切削加工マシーンなのだけど、
エンドミルをつければ、プリント基板を加工できるのだ。
http://www.pcbmilling.biz/
なかなか値が張るのだけど、いろいろできそうと心が踊り、
衝動買いしたのはもうかなり前。
しばらく厳重に保管しすぎてホコリがかぶっていたが、
これではいけないと思い、再び始めたのである。
前に作ったときは、FT232RLのSSOPのピッチまで作れたので、
今回のデザインルールもコレと同じでクリアランス0.35mmとした。
eagleでデザインルールを指定
チェックすると大量のNG項目がでて、作り直し。。。
その後、
太さを変えるのを忘れていた。
電源は16mil、信号線は12milとした。
直角曲がりは気持ち悪いので、変更した。
GNDのベタパターンを作成し、最終的にはこうなった。
まずはここまで。
登録:
投稿 (Atom)







