Add Firmware/MS-Main.ino
This commit is contained in:
parent
2f612fb52c
commit
592fa1ea36
69
Firmware/MS-Main.ino
Normal file
69
Firmware/MS-Main.ino
Normal file
@ -0,0 +1,69 @@
|
||||
unsigned int vinSlopeCounter = 0;
|
||||
unsigned int posRefSlopeCounter = 0;
|
||||
unsigned int negRefSlopeCounter = 0;
|
||||
unsigned int vinBaseSlope = 2; // * 255
|
||||
byte nextSlopeAction = 0;
|
||||
double accumulator = 0;
|
||||
|
||||
// RES CLK = PORTD B7
|
||||
// RST SW = PORTD B5
|
||||
// SLOPEIN1 = PORTD B2
|
||||
// SLOPEUP1 = PORTD B1
|
||||
// SLOPEDN1 = PORTD B0
|
||||
#define BLANKEDREG 0b00000000
|
||||
#define ENABLEINT 0b00000001
|
||||
#define SLOPESAMPLE 0b10000000
|
||||
#define SLOPERST 0b00100000
|
||||
#define SLOPEDN1 0b00000001
|
||||
#define SLOPEUP1 0b00000010
|
||||
#define SLOPEIN1 0b00000100
|
||||
#define SLOPEHOLD1 0b00000011
|
||||
|
||||
void startConv() {
|
||||
PORTD = SLOPERST; //reset charge
|
||||
PORTD = BLANKEDREG; //release reset
|
||||
PORTD = SLOPESAMPLE; //sample residual charge
|
||||
PORTD = BLANKEDREG;
|
||||
|
||||
EICRA = ENABLEINT; //enable interrupt for zerocrossing, pin D2 (INT0)
|
||||
TCCR1A = BLANKEDREG;
|
||||
TCCR1B = BLANKEDREG;
|
||||
//DataReg = tmpControlPinBank; //read charge value
|
||||
}
|
||||
|
||||
void stopConv() {
|
||||
PORTD = BLANKEDREG; //release reset
|
||||
PORTD = SLOPESAMPLE; //sample residual charge
|
||||
PORTD = BLANKEDREG; //send clock to sample charge
|
||||
//DataReg = tmpControlPinBank; //read charge value
|
||||
EICRA = BLANKEDREG; //disable interrupt for zerocrossing, pin D2 (INT0)
|
||||
|
||||
}
|
||||
|
||||
ISR(TIMER1_COMPA_vect) { // if 16b timer1 match
|
||||
// Decide to slope up or down, takes n clocks
|
||||
if(PORTD & 0b1000000) // if comparator 1 (ADC could also be used)
|
||||
{ nextSlopeAction = SLOPEDN1; }// slope down
|
||||
else
|
||||
{ nextSlopeAction = SLOPEUP1; }// slope up
|
||||
PORTD = SLOPEHOLD1; // hold pattern
|
||||
EICRA = ENABLEINT; //interrupt for zerocrossing, pin D2
|
||||
PORTD = nextSlopeAction; // set slope down or up
|
||||
vinSlopeCounter = TCNT1H >> 8 + TCNT1L + 7;
|
||||
}
|
||||
|
||||
ISR(INT0_vect) {
|
||||
EICRA = BLANKEDREG; // no more interrupt for 0 cross
|
||||
PORTD = SLOPEHOLD1; // hold pattern
|
||||
PORTD = SLOPEIN1; // slope up/down to Vin for n clock
|
||||
// now it is sloping again, compensate the clocks the transition
|
||||
OCR1AH = OCR1AH + vinBaseSlope; // set next slope timer
|
||||
//timerreg = timerreg - x;
|
||||
}
|
||||
|
||||
void setup() {
|
||||
startConv();
|
||||
delay(10);
|
||||
stopConv();
|
||||
}
|
||||
void loop() {}
|
||||
Loading…
x
Reference in New Issue
Block a user