]> kolegite.com Git - vmks.git/commitdiff
Added a third 7-segment example - with driver
authorvl_garistov <vl_garistov@gmail.com>
Wed, 10 Feb 2021 00:29:49 +0000 (02:29 +0200)
committervl_garistov <vl_garistov@gmail.com>
Wed, 10 Feb 2021 00:29:49 +0000 (02:29 +0200)
Datasheets/CD4511BC.pdf [new file with mode: 0644]
Examples/7-segm_driver/7-segm_driver.ino [new file with mode: 0644]
Examples/7-segm_driver/7-segm_driver.png [new file with mode: 0644]
Examples/7-segm_raw/7-segm_raw.ino
Examples/7-segm_shield/7-segm_shield.ino

diff --git a/Datasheets/CD4511BC.pdf b/Datasheets/CD4511BC.pdf
new file mode 100644 (file)
index 0000000..5dda8a5
Binary files /dev/null and b/Datasheets/CD4511BC.pdf differ
diff --git a/Examples/7-segm_driver/7-segm_driver.ino b/Examples/7-segm_driver/7-segm_driver.ino
new file mode 100644 (file)
index 0000000..bbff548
--- /dev/null
@@ -0,0 +1,67 @@
+#define DATA1_PIN              2
+#define DATA2_PIN              5
+#define DATA3_PIN              4
+#define DATA4_PIN              3
+#define LATCH1_PIN             9
+#define LATCH2_PIN             8
+#define LATCH3_PIN             7
+#define LATCH4_PIN             6
+#define BLANKING_PIN   10
+
+#define BRIGHTNESS             200             // Maximum 255
+
+int print_digit(uint8_t position, uint8_t digit);
+void pulse_pin(uint8_t pin);
+
+const uint8_t data_pins[4] = {DATA1_PIN, DATA2_PIN, DATA3_PIN, DATA4_PIN};
+const uint8_t latch_pins[4] = {LATCH1_PIN, LATCH2_PIN, LATCH3_PIN, LATCH4_PIN};
+
+void setup()
+{
+       for (uint8_t i = 0; i < 4; i++)
+       {
+               pinMode(data_pins[i], OUTPUT);
+               digitalWrite(data_pins[i], LOW);
+               pinMode(latch_pins[i], OUTPUT);
+               digitalWrite(latch_pins[i], HIGH);
+       }
+       pinMode(BLANKING_PIN, OUTPUT);
+       analogWrite(BLANKING_PIN, BRIGHTNESS);
+}
+
+void loop()
+{
+       print_digit(0, 7);
+       print_digit(1, 7);
+       print_digit(2, 3);
+       print_digit(3, 4);
+       delay(1000);
+}
+
+int print_digit(uint8_t position, uint8_t digit)
+{
+       if (position > 3 || digit > 15)
+       {
+               return -1;
+       }
+       
+       // Encode the digit on the four data signals to the drivers
+       for (uint8_t i = 0; i < 4; i++)
+       {
+               digitalWrite(data_pins[i], digit & (1 << i));
+       }
+       // Latch the data
+       pulse_pin(latch_pins[position]);
+
+       return 0;
+}
+
+void pulse_pin(uint8_t pin)
+{
+       // The delay from calling digitalWrite() is enough to satisfy the
+       // setup and hold times of CD5411 but we delay some more for good measure.
+       delayMicroseconds(5);
+       digitalWrite(pin, LOW);
+       delayMicroseconds(5);
+       digitalWrite(pin, HIGH);
+} 
diff --git a/Examples/7-segm_driver/7-segm_driver.png b/Examples/7-segm_driver/7-segm_driver.png
new file mode 100644 (file)
index 0000000..e543614
Binary files /dev/null and b/Examples/7-segm_driver/7-segm_driver.png differ
index 28913f8f6e6ac5ad333ea204c7bf70911ea06dbd..a0d00575c3f27a04c0af5cf1d36a015243aa2fba 100644 (file)
@@ -14,10 +14,10 @@ const uint8_t pins[8] = {A_PIN, B_PIN, C_PIN, D_PIN, E_PIN, F_PIN, G_PIN, DP_PIN
 const uint8_t segment_map[16] =
 {
        // A B C D E F G DP
-    0b00000011,        // 0
-    0b10011111,        // 1
-    0b00100101,        // 2
-    0b00001101,        // 3
+       0b00000011,     // 0
+       0b10011111,     // 1
+       0b00100101,     // 2
+       0b00001101,     // 3
        0b10011001,     // 4
        0b01001001,     // 5
        0b01000001,     // 6
@@ -34,44 +34,33 @@ const uint8_t segment_map[16] =
 
 void setup()
 {
-       pinMode(A_PIN, OUTPUT);
-       pinMode(B_PIN, OUTPUT);
-       pinMode(C_PIN, OUTPUT);
-       pinMode(D_PIN, OUTPUT);
-       pinMode(E_PIN, OUTPUT);
-    pinMode(F_PIN, OUTPUT);
-    pinMode(G_PIN, OUTPUT);
-    pinMode(DP_PIN, OUTPUT);
-    digitalWrite(A_PIN, HIGH);
-    digitalWrite(B_PIN, HIGH);
-    digitalWrite(C_PIN, HIGH);
-    digitalWrite(D_PIN, HIGH);
-    digitalWrite(E_PIN, HIGH);
-    digitalWrite(F_PIN, HIGH);
-    digitalWrite(G_PIN, HIGH);
-    digitalWrite(DP_PIN, HIGH);
+       for (uint8_t i = 0; i < 8; i++)
+       {
+               pinMode(pins[i], OUTPUT);
+               digitalWrite(pins[i], HIGH);
+       }
 }
 
 void loop()
 {
        for (uint8_t cnt = 0; cnt < 16; cnt++)
-    {
-       print_digit(cnt);
-       delay(1000);
-    }
+       {
+               print_digit(cnt);
+               delay(1000);
+       }
 }
 
 int print_digit(uint8_t digit)
 {
-    if (digit > 15)
-    {
+       if (digit > 15)
+       {
                return -1;
        }
 
-       for (uint8_t i = 0; i < 8; i++)
-    {
+       for (uint8_t i = 0; i < 8; i++)
+       {
                digitalWrite(pins[i], segment_map[digit] & (128 >> i));
        }
-  
+
        return 0;
 }
index e9b8b022aef125a83283ba1aad245096eb647614..fbd78c6ea77131f03a86065ac97d1cea80682c2c 100644 (file)
@@ -27,7 +27,7 @@ void loop()
   print_digit(3, 9);
 }
 
-/* Write a decimal number between 0 and 9 to one of the 4 digits of the display */
+// Write a decimal number between 0 and 9 to one of the 4 digits of the display
 int print_digit(uint8_t segment, uint8_t value)
 {
   if (value > 15 || segment > 3)