I made a custom PCB RTC 7 Segment display clock based on a project I found online.
The schematic of my project can be found here: Digital Clock.pdf | DocDroid
I used an Atmega32u4 for my project and I was able to get the code to work on my test led which was tied to pin 20 of the MCU, but the code that I used from the instructables project isn't exactly working. it uploads properly and everything, but doesn't display the time.
Here is the result of uploading the code:
Here is the altered code:
#include <Wire.h>
#include "RTClib.h"
#define A 3
#define B 2
#define C 0
#define D 1
#define E LED_BUILTIN
#define F 4
#define G 12
#define DP 6
#define CA1 8
#define CA2 10
#define CA3 9
#define CA4 11
int d = 2, first_h=0, second_h=0, first_m=0, second_m=0, sec_old=0, h, m, s;
RTC_DS1307 rtc;
const int segs[7] = { A, B, C, D, E, F, G};
const byte numbers[11] = {0b1000000, 0b1111001, 0b0100100, 0b0110000, 0b0011001, 0b0010010,
0b0000010, 0b1111000, 0b0000000, 0b0010000};
void setup()
{
Serial.begin(57600);
#ifdef AVR
Wire.begin();
#else
Wire1.begin();
#endif
rtc.begin();
for(int i=2;i<=13;i++)
{
pinMode(i, OUTPUT);
}
for(int i=2;i<=13;i++)
{
digitalWrite(i, LOW);
}
}
void loop()
{
DateTime now = rtc.now();
h = now.hour();
m = now.minute();
s = now.second();
first_h = h / 10;
second_h = h % 10;
first_m = m / 10;
second_m = m % 10;
lightDigit1(numbers[first_h]);
delay(d);
lightDigit2(numbers[second_h]);
delay(d);
lightDigit3(numbers[first_m]);
delay(d);
lightDigit4(numbers[second_m]);
delay(d);
}
void lightDigit1(byte number) {
digitalWrite(DP, HIGH);
digitalWrite(CA1, HIGH);
digitalWrite(CA2, LOW);
digitalWrite(CA3, LOW);
digitalWrite(CA4, LOW);
lightSegments(number);
}
void lightDigit2(byte number) {
digitalWrite(CA1, LOW);
digitalWrite(CA2, HIGH);
digitalWrite(CA3, LOW);
digitalWrite(CA4, LOW);
if(s % 2 == 0)
digitalWrite(DP, LOW);
else
digitalWrite(DP, HIGH);
lightSegments(number);
}
void lightDigit3(byte number) {
digitalWrite(DP, HIGH);
digitalWrite(CA1, LOW);
digitalWrite(CA2, LOW);
digitalWrite(CA3, HIGH);
digitalWrite(CA4, LOW);
lightSegments(number);
}
void lightDigit4(byte number) {
digitalWrite(DP, HIGH);
digitalWrite(CA1, LOW);
digitalWrite(CA2, LOW);
digitalWrite(CA3, LOW);
digitalWrite(CA4, HIGH);
lightSegments(number);
}
void lightSegments(byte number) {
for (int i = 0; i < 7; i++) {
int bit = bitRead(number, i);
digitalWrite(segs[i], bit);
}
}