// //////////////////////////////////////////////
//Ean Dodge
//Embedded systems programming
//Project 3
//Based on Dr. Kim's program
// //////////////////////////////////////////////
//////////////////////////////////////////////////
// Woki Library
// Don't change this part
#include "SevSeg.h"
SevSeg sevseg; //Instantiate a seven-segment controller object
// Woki Library //
//////////////////////////////////////////////////
// Register Pointer Declaration
unsigned char *TCCR1A_ESP; //0x80
unsigned char *TCCR1B_ESP; //0x81
unsigned char *TCNT1H_ESP; //0x85
unsigned char *TCNT1L_ESP; //0x84
unsigned char *OCR1AH_ESP; //0x89
unsigned char *OCR1AL_ESP; //0x88
unsigned char *TIMSK1_ESP; //0x6F
int count_value_g = 0;
void setup() {
//////////////////////////////////////////////////
// Woki Library
// Don't change this part
byte numDigits = 4;
byte digitPins[] = {2, 3, 4, 5};
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
byte hardwareConfig = COMMON_ANODE; // See README.md for options
bool updateWithDelays = false; // Default 'false' is Recommended
bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
bool disableDecPoint = false; // Use 'true' if your decimal point doesn't exist or isn't
//connected
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(90);
// Pin 13 - PB5; Pin 12 - PB4; Pin 11 - PB3; Pin 10 - PB2; Pin 9 - PB1; Pin 8 - PB0
// Pin 7 - PD7; Pin 6 - PD6; Pin 5 - PD5; Pin 4 - PD4; Pin 3 - PD3; Pin 2 - PD2
// Woki Library //
//////////////////////////////////////////////////
// Assigned Register Address
TCCR1A_ESP = (unsigned char *) 0x80;
TCCR1B_ESP = (unsigned char *) 0x81;
TCNT1H_ESP = (unsigned char *) 0x85;
TCNT1L_ESP = (unsigned char *) 0x84;
OCR1AH_ESP = (unsigned char *) 0x89;
OCR1AL_ESP = (unsigned char *) 0x88;
TIMSK1_ESP = (unsigned char *) 0x6F;
// Define Register's function Bits
*TCCR1A_ESP = 0x00;
//UNCOMMENT FOR P1 P2
*TCCR1B_ESP = 0x0C; // CTC mode - BIT 3; 256 prescaler BIT2
//UNCOMMENT FOR P3
//*TCCR1B_ESP = 0x0D; // CTC mode - BIT 3; 1024 prescaler BIT2 and BIT0
*TCNT1H_ESP = 0x00;
*TCNT1L_ESP = 0x00;
//UNCOMMENT FOR P1
//*OCR1AH_ESP = 0xF2; //for 1 second changes
//*OCR1AL_ESP = 0x24; //for 1 second changes
//UNCOMMENT FOR P2
//*OCR1AH_ESP = 0x18; //for 100 milisecond changes
//*OCR1AL_ESP = 0x69; //for 100 milisecond changes
//UNCOMMENT FOR P3
//*OCR1AH_ESP = 0xF4; //for .25 second changes
//*OCR1AL_ESP = 0x23; //for .25 second chnages
*TIMSK1_ESP = 0x02; // enable timer compare interrupt - BIT1
}
void loop() {
sevseg.setNumber(count_value_g, 1);
sevseg.refreshDisplay(); // Must run repeatedly
}
ISR(TIMER1_COMPA_vect)
{
count_value_g ++;
if (count_value_g == 10000) { // Reset to 0 after counting for 1000 seconds.
count_value_g=0;
}
}
/// END ///