Arduino Uno Menampilkan Angka 3 Digit

Arduino Uno mempunyai jumlah port sebanyak 12 port I/O dan 2 port untuk RX/TX. 7-Segment memiliki 7 pin IN, 1 pin DOT dan 2 pin COM. Jika menggunakan Arduino Uno secara langsung untuk menampilkan angka, maka dia hanya dapat menangani 1 digit angka. Bagaimana agar dapat menampilkan 3 digit angka dengan jumlah port segitu? Apakah itu dapat dilakukan? Bagaimana caranya? Bacalah tulisan ini lebih lanjut untuk mendapatkan jawabannya.

Anda dapat mengurangi penggunaan port dengan menggunakan IC BCD (Binary Coded Decimal) Decoder. IC jenis ini berfungsi untuk mengubah input berupa bilangan biner menjadi bilangan desimal yang dapat ditampilkan melalui 7-Segmen. 7-Segmen ada 2 jenis, yaitu Common Anode dan Common Cathode. Oleh karena hal tersebut, IC jenis ini juga dibagi menjadi 2 jenis, yaitu Common Anode dan Common Cathode.

  1. 7-Segment Common Anode, menggunakan IC 74LS247 atau 74LS47
  2. 7-Segment Common Cathode, menggunakan IC 74LS248 atau 74LS48

Apa perbedaan IC tipe 74LS24x dan 74LS4x? Perbedaannya terletak pada tampilan angka 6 dan 9. Tipe 74LS24x memiliki tampilan angka 6 dan 9 yang sempurna, dan tipe 74LS4x memiliki tampilan angka 6 dan 9 yang kurang sempurna. Itu menurut pendapat saya.

Setelah menggunakan IC BCD Decoder, maka port Arduino Uno anda akan muat untuk menampilkan 3 digit angka, pas sekali menggunakan 12 port. Bagaimana jika anda ingin menampilkan 3 digit angka dan menggunakan port yang lain lagi untuk kebutuhan lain? Apakah port TX/RX dapat dipakai? Saya sarankan untuk tidak menggunakan port TX/RX. Saya lebih menyarankan menambahkan IC Bit Shifter. Bit Shifter ada 2 jenis, yaitu Bit Shifter untuk Input dan Bit Shifter untuk Output. Sesuai namanya IC jenis ini akan melakukan pergeseran bit.

Jenis Bit Shifter yang kita butuhkan kali ini adalah Bit Shifter Output. Dengan menggunakan IC jenis ini, anda hanya menggunakan 3 port saja untuk menampilkan 3 digit angka. yaitu pin LATCH, CLOCK dan DATA. Output dari IC ini kemudian diteruskan ke IC BCD Decoder.

Bahan :
  1. U1 = IC HC595
  2. U2 = IC 74LS247
  3. R1, R2, R3 = 56R
  4. R4, R5 = 470R
  5. DUINO 1 = Arduino Uno R3
  6. 7-Segmen 0.36 inchi x3

Skema Rangkaian Decoder 3 Digit
Kode Program 3 Digit Counter Up :
#define LATCH_PIN 2
#define CLOCK_PIN 3
#define DATA_PIN 4

// Number and phase
byte bits[10][3] = {
  // 0        // 1       // 2
  {0b00100000, 0b01000000, 0b10000000}, // 0
  {0b00100010, 0b01000010, 0b10000010}, // 1
  {0b00100100, 0b01000100, 0b10000100}, // 2
  {0b00100110, 0b01000110, 0b10000110}, // 3
  {0b00101000, 0b01001000, 0b10001000}, // 4
  {0b00101010, 0b01001010, 0b10001010}, // 5
  {0b00101100, 0b01001100, 0b10001100}, // 6
  {0b00101110, 0b01001110, 0b10001110}, // 7
  {0b00110000, 0b01010000, 0b10010000}, // 8
  {0b00110010, 0b01010010, 0b10010010}, // 9
};

char *number = 0;

void loop() {
  unsigned int x = (unsigned int)number;
  x++;
  if (x > 999){
    x = 0;
  }
  char *y = (char *)x;
  if (strlen(y) == 1){
    number = strcpy("00", y);
  } else if (strlen(y) == 2){
    number = strcpy("0", y);
  } else {
    number = strcpy(number, y);
  }
  show3Digit(number);
}

void show3Digit(char *number){
  setBitShift((byte)number[0] - 48, 0);
  setBitShift((byte)number[1] - 48, 1);
  setBitShift((byte)number[2] - 48, 2);
}

void setBitShift(int number, int phase){
  digitalWrite(LATCH_PIN, LOW);
  shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, bits[number][phase]);
  digitalWrite(LATCH_PIN, HIGH);
}
Demikianlah penjelasan saya dalam tulisan ini, semoga dapat dimengerti dan membantu. Jika ada pertanyaan, silahkan kirimkan melalui form komentar. Terimakasih.

Ahmad Jawahir

    Tidak ada komentar:

    Posting Komentar