8pinoでは、シリアルモニターが使えません。シリアルモニターはデバッグするのにとても
大事な機能です。
せめて、大昔のマイコンボードの様に7SEGで内部データを16進表示させる事が出来れば
何とかなります。
手元にあった、7SEG表示器1個とHC4040バイナリカウンタで内部データを表示できる様
にしてみました。
8pino(Trinket) does not have a Serial port connection for debugging.
Serial port monitor is the function important to do debugging.
An 7SEG LED display attached to an old microcomputer board.
It indicated the inner data.
I have one 7SEG LED and HC4040 binary counter.
I made an 7SEG display using those.
HC4040はバイナリの12bitカウンタで、CLK入力の立ち下がりでカウント、RES入力の
立ち上がりでカウンタをリセットします。
これを使って7SEGLEDを点灯させるアイデアは大昔からあると思うので割愛します。例えば、
HC4040 is 12bit binary counter. It have CLK(clock) input and RESET input.
The idea that LED drive using it existed in that from the past. For example...
このプログラムは、アナログ入力1に取り付けた可変抵抗器の値(0〜3.3V、数値は0〜1023)
を16進にして、7SEGLEDに表示します。
但し一桁しか無いので、一桁ずつ、ゆっくりと表示させます。
例えば、可変抵抗器を最大にした時は1023=0x03FFとなりますので、
0 3 3 F - - - -
と表示されます。- - - - と言うのは、データの区切りを示しています。
This program is display an analog input ch1 encoding hex data.
It's indicated each one digit slowly.
For example in case of maximum voltage, it's indicate as follows,
0 3 3 F - - - -
"- - - -" is data delimiter.
これを使えば、"少しは" デバッグが楽になります。
When this is used, debugging becomes easy.
(Very little) // 8pino 7segment drive test /w MC14040BCP // Analogdata display // // [回路図 Circuit diagram] // [8Pino] [4040] [LA-301VL] // GPIO(1) ---> CLK // GPIO(0) ---> CLR // Q0 -470R-> SEG a // Q1 -470R-> SEG b // Q2 -470R-> SEG c // Q3 -470R-> SEG d // Q4 -470R-> SEG e // Q5 -470R-> SEG f // Q6 -470R-> SEG g // A/D(1) ---> Triimer register // // バイナリカウンタを使った7セグメントLEDの駆動実験 // 指定のパルスを出す事により、各セグメントをスタティック点灯させる。 // 例えば、"1" を点灯させるには、SEG b と SEG c を点灯させる為に、2+4=6回パルス発生する。 // パルスを送る前に、CLRをHにしてカウンタをクリアしておく事。 // A 7segment LED drive test with binaly counter. // Drive on each segment at static state with several pulse signal. // For example,When you'd like display a "1", you turn on SEG b and SEG c. // Before sending a data pulse, you send a pulse to CLR. // Define bacic binaly data #define seg_A 1 //0000 0001 #define seg_B 2 //0000 0010 #define seg_C 4 //0000 0100 #define seg_D 8 //0000 1000 #define seg_E 16 //0001 0000 #define seg_F 32 //0010 0000 #define seg_G 64 //0100 0000 // Define 7 segment charactor #define CHR_0 seg_A + seg_B + seg_C + seg_D + seg_E + seg_F + 0 #define CHR_1 seg_B + seg_C #define CHR_2 seg_A + seg_B + seg_D + seg_E + seg_G #define CHR_3 seg_A + seg_B + seg_C + seg_D + seg_G #define CHR_4 seg_B + seg_C + seg_F + seg_G #define CHR_5 seg_A + seg_C + seg_D + seg_F + seg_G #define CHR_6 seg_A + seg_C + seg_D + seg_E + seg_F + seg_G #define CHR_7 seg_A + seg_B + seg_C #define CHR_8 seg_A + seg_B + seg_C + seg_D + seg_E + seg_F + seg_G #define CHR_9 seg_A + seg_B + seg_C + seg_F + seg_G #define CHR_A seg_A + seg_B + seg_C + seg_E + seg_F + seg_G #define CHR_B seg_C + seg_D + seg_E + seg_F + seg_G #define CHR_C seg_A + seg_D + seg_E + seg_F #define CHR_D seg_B + seg_C + seg_D + seg_E + seg_G #define CHR_E seg_A + seg_D + seg_E + seg_F + seg_G #define CHR_F seg_A + seg_E + seg_F + seg_G #define CHR_BAR seg_G // Variable settings int led = 1; // On board LED (pin 1) int vol = 1; // Analog input 1(pin 2) unsigned int vol_num; // Analog value int cnt; // Counter int res = 0; // reset = #0 int value; // output value int max_value; // Character dimensions int CHR[] = {CHR_0,CHR_1,CHR_2,CHR_3,CHR_4,CHR_5,CHR_6,CHR_7,CHR_8,CHR_9,CHR_A,CHR_B,CHR_C,CHR_D,CHR_E,CHR_F,CHR_BAR}; int i; // GPIO direction void setup() { pinMode(led, OUTPUT); //4040 CLK pin(/w onboard LED) pinMode(res, OUTPUT); //4040 CLR pin //pinMode(vol, INPUT); // An analog input is default. } // 7segment drive // 引数:キャラクタ配列の順番(0=0,1=1,2=2,....F=15,...) // 戻り:なし // 動作: 1)CLRパルスを出す。 // 2)キャラクタ配列の数値を取り出し、その回数のCLKパルスを出す。 // 3)500ms表示する。 // Arg:Number of character dimension. // Ret:non // Function:1)Send CLR pulse. // 2)Read number of character dimension, and send pulse. // 3)Display character between 500ms. void disp_7seg( int disp_num){ int max; //Quantity of the pulse max = CHR[disp_num]; //Set Q'ty of the pulse digitalWrite(res,HIGH); //CLR on pulse delayMicroseconds(3); //CLR on pulse time. digitalWrite(res,LOW); //CLR off delayMicroseconds(3); //CLR off time. delay(200); //Time of the turn off the light. for (cnt=0;cnt < max;cnt++){ //Loop on max times. digitalWrite(led,HIGH); //Pulse on delayMicroseconds(3); //Pulse on time. digitalWrite(led,LOW); //Pulse off delayMicroseconds(3); //Pulse off time. } delay(300); //Time of the display charactor. } // Divide data to 4 figure // Arg:hex_data // Ret:4th digit number unsigned int dec2hex_4(unsigned int num){ unsigned int result; result = num/0x1000; return result; } // Arg:hex_data // Ret:3rd digit number unsigned int dec2hex_3(unsigned int num){ unsigned int result; result = (num-dec2hex_4(num)*0x1000)/0x100; return result; } // Arg:hex_data // Ret:2nd digit number unsigned int dec2hex_2(unsigned int num){ unsigned int result; result = (num-dec2hex_4(num)*0x1000-dec2hex_3(num)*0x100)/0x10; return result; } // Arg:hex_data // Ret:1st digit number unsigned int dec2hex_1(unsigned int num){ unsigned int result; result = num-dec2hex_4(num)*0x1000-dec2hex_3(num)*0x100-dec2hex_2(num)*0x10; return result; } // 7Segment Display 4 digit number. // Arg:hex_data // Ret:non void seg_Display(unsigned int num){ disp_7seg(dec2hex_4(num)); // Display 4th char. disp_7seg(dec2hex_3(num)); // Display 3rd char. disp_7seg(dec2hex_2(num)); // Display 2nd char. disp_7seg(dec2hex_1(num)); // Display 1st char. disp_7seg(16); // Display --- disp_7seg(16); // Display --- disp_7seg(16); // Display --- disp_7seg(16); // Display --- } void loop() { // The 4 character display demonstration. vol_num = analogRead(1); // Trrimer volume read. seg_Display(vol_num); // Display 4 degit delay(1000); // Wait } |
Evernote はあなたがすべてを記憶し、手間をかけずに整理できるようにお手伝いします。Evernote をダウンロードする |
0 件のコメント:
コメントを投稿
コメントをどうぞ