Browse Source

mt

master
Your Name 4 years ago
parent
commit
abfa4814dc
4 changed files with 503 additions and 0 deletions
  1. +94
    -0
      60hz_Divider/code/arduino_parse_test/shiftin_try2/shiftin_try2.ino
  2. +127
    -0
      60hz_Divider/code/arduino_parse_test/shiftin_try3/shiftin_try3.ino
  3. +131
    -0
      60hz_Divider/code/arduino_parse_test/shiftin_try4/shiftin_try4.ino
  4. +151
    -0
      60hz_Divider/code/arduino_parse_test/shiftin_try5/shiftin_try5.ino

+ 94
- 0
60hz_Divider/code/arduino_parse_test/shiftin_try2/shiftin_try2.ino View File

@ -0,0 +1,94 @@
#define hzclk 7
#define hzbinary 6
#define sigLED 11
uint8_t hzclkval = 0;
uint8_t hzbinval[30];
uint8_t clkval = 0;
uint32_t milliscompare = 0;
uint8_t readyet = 0;
uint8_t x = 0;
void setup() {
// put your setup code here, to run once:
pinMode(hzclk, INPUT);
pinMode(hzbinary, INPUT);
pinMode(sigLED, OUTPUT);
Serial.begin(115200);
}
void loop() {
if(digitalRead(hzbinary) == LOW){
//this handles one clk cycle each
//need to read 20 cycles
clkval = 0;
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
}
delayMicroseconds(100); //must be lower than 1 millisecond, so mic
/*if hzbinary is low
*
* while clk high, do nothing
* clk++
* sample hzbinary
* while clk low do nothing
*/
/*
* //serial print is very slow, and breaks timing
* the below is not usable
* (DMA anyone? second processor anyone?)
Serial.println("hzbinval 1 - 20:");
for(x=0;x<21;x++){
Serial.println(hzbinval[x]);
}
Serial.print("\n\n\n\n");
*/
//sample on falling edge (middle of bit)
}
void checkCLKandBIN(void){
/*
* while clk high, do nothing
* clk++
* sample hzbinary
* while clk low do nothing
*/
//milliscompare = millis();
while((hzclkval = digitalRead(hzclk)) == HIGH){
if(readyet == 0){
hzbinval[clkval] = digitalRead(hzbinary);
clkval++;
readyet = 1;
}
delayMicroseconds(10);
}
while((hzclkval = digitalRead(hzclk)) == LOW){
delayMicroseconds(1);
readyet = 0;
}
digitalWrite(sigLED, HIGH);
delayMicroseconds(1);
digitalWrite(sigLED, LOW);
//would be nice to add a picture to this source code (waveform)
//or oscope picture
//why isn't this possible?
}

+ 127
- 0
60hz_Divider/code/arduino_parse_test/shiftin_try3/shiftin_try3.ino View File

@ -0,0 +1,127 @@
#define hzclk 7
#define hzbinary 6
#define sigLED 11
uint8_t hzclkval = 0;
uint8_t hzbinval[30];
uint8_t clkval = 0;
uint32_t milliscompare = 0;
uint8_t readyet = 0;
uint8_t x = 0;
uint16_t mainsfreq = 0;
struct {
unsigned int mainstwo : 14;
} bitfieldA;
void setup() {
// put your setup code here, to run once:
pinMode(hzclk, INPUT);
pinMode(hzbinary, INPUT);
pinMode(sigLED, OUTPUT);
Serial.begin(115200);
}
void loop() {
if(digitalRead(hzbinary) == LOW){
//this handles one clk cycle each
//need to read 20 cycles
clkval = 0;
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
//Serial.println(clkval); //outputs 19 or 20
ConvertArraytoBin();
mainsfreq = 0;
bitfieldA.mainstwo = 0;
}
delayMicroseconds(100); //must be lower than 1 millisecond, so mic
/*if hzbinary is low
*
* while clk high, do nothing
* clk++
* sample hzbinary
* while clk low do nothing
*/
/*
* //serial print is very slow, and breaks timing
* the below is not usable
* (DMA anyone? second processor anyone?)
Serial.println("hzbinval 1 - 20:");
for(x=0;x<21;x++){
Serial.println(hzbinval[x]);
}
Serial.print("\n\n\n\n");
*/
//sample on falling edge (middle of bit)
}
void checkCLKandBIN(void){
/*
* while clk high, do nothing
* clk++
* sample hzbinary
* while clk low do nothing
*/
//milliscompare = millis();
while((hzclkval = digitalRead(hzclk)) == HIGH){
if(readyet == 0){
hzbinval[clkval] = digitalRead(hzbinary);
clkval++;
readyet = 1;
}
delayMicroseconds(10);
}
while((hzclkval = digitalRead(hzclk)) == LOW){
delayMicroseconds(1);
readyet = 0;
}
//digitalWrite(sigLED, HIGH);
//delayMicroseconds(1);
//digitalWrite(sigLED, LOW);
//would be nice to add a picture to this source code (waveform)
//or oscope picture
//why isn't this possible?
}
void ConvertArraytoBin (void){
for(x=3;x<21;x++){
if(hzbinval[x] == 1){
bitfieldA.mainstwo = bitfieldA.mainstwo | (0b0000000000000000000001 << (x - 3));
}
}
Serial.println(bitfieldA.mainstwo,BIN);
/*mainsfreq = mainsfreq >> 3;
mainsfreq = mainsfreq & 0b0111111111111;
Serial.println(mainsfreq,DEC);
//111011011101
//1011101101111
//111011011101
//11101101111*/
}

+ 131
- 0
60hz_Divider/code/arduino_parse_test/shiftin_try4/shiftin_try4.ino View File

@ -0,0 +1,131 @@
#define hzclk 7
#define hzbinary 6
#define sigLED 11
uint8_t hzclkval = 0;
uint8_t hzbinval[30];
uint8_t clkval = 0;
uint32_t milliscompare = 0;
uint8_t readyet = 0;
uint8_t x = 0;
uint16_t mainsfreq = 0;
struct {
unsigned int mainstwo : 14; //pesky binary wants a struct of
} bitfieldA; //only exact amt of bits
int temp = 0;
void setup() {
// put your setup code here, to run once:
pinMode(hzclk, INPUT);
pinMode(hzbinary, INPUT);
pinMode(sigLED, OUTPUT);
Serial.begin(115200);
}
void loop() {
if(digitalRead(hzbinary) == LOW){
//this handles one clk cycle each
//need to read 20 cycles
clkval = 0;
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
//Serial.println(clkval); //outputs 19 or 20
ConvertArraytoBin();
mainsfreq = 0;
bitfieldA.mainstwo = 0;
}
delayMicroseconds(100); //must be lower than 1 millisecond, so mic
/*if hzbinary is low
*
* while clk high, do nothing
* clk++
* sample hzbinary
* while clk low do nothing
*/
/*
* //serial print is very slow, and breaks timing
* the below is not usable
* (DMA anyone? second processor anyone?)
Serial.println("hzbinval 1 - 20:");
for(x=0;x<21;x++){
Serial.println(hzbinval[x]);
}
Serial.print("\n\n\n\n");
*/
//sample on falling edge (middle of bit)
}
void checkCLKandBIN(void){
/*
* while clk high, do nothing
* clk++
* sample hzbinary
* while clk low do nothing
*/
//milliscompare = millis();
while((hzclkval = digitalRead(hzclk)) == HIGH){
if(readyet == 0){
hzbinval[clkval] = digitalRead(hzbinary);
clkval++;
readyet = 1;
}
delayMicroseconds(10);
}
while((hzclkval = digitalRead(hzclk)) == LOW){
delayMicroseconds(1);
readyet = 0;
}
//digitalWrite(sigLED, HIGH);
//delayMicroseconds(1);
//digitalWrite(sigLED, LOW);
//would be nice to add a picture to this source code (waveform)
//or oscope picture
//why isn't this possible?
}
void ConvertArraytoBin (void){
for(x=4;x<21;x++){
if(hzbinval[x] == 1){
bitfieldA.mainstwo = bitfieldA.mainstwo | (0b0000000000000000000001 << (x - 3));
}
}
//Serial.println(bitfieldA.mainstwo,BIN);
temp = bitfieldA.mainstwo >> 1;
Serial.println(temp,DEC);
/*mainsfreq = mainsfreq >> 3;
mainsfreq = mainsfreq & 0b0111111111111;
Serial.println(mainsfreq,DEC);
//111011011101
//1011101101111
//111011011101
//11101101111*/
}

+ 151
- 0
60hz_Divider/code/arduino_parse_test/shiftin_try5/shiftin_try5.ino View File

@ -0,0 +1,151 @@
#define hzclk 7
#define hzbinary 6
#define sigLED 11
uint8_t hzclkval = 0;
uint8_t hzbinval[30];
uint8_t clkval = 0;
uint32_t milliscompare = 0;
uint8_t readyet = 0;
uint8_t x = 0;
uint16_t mainsfreq = 0;
struct {
unsigned int mainstwo : 14; //pesky binary wants a struct of
} bitfieldA; //only exact amt of bits
int temp = 0;
void setup() {
// put your setup code here, to run once:
pinMode(hzclk, INPUT);
pinMode(hzbinary, INPUT);
pinMode(sigLED, OUTPUT);
Serial.begin(115200);
}
void loop() {
if(digitalRead(hzbinary) == LOW){
//this handles one clk cycle each
//need to read 20 cycles
clkval = 0;
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
checkCLKandBIN();
//Serial.println(clkval); //outputs 19 or 20
ConvertArraytoBin();
mainsfreq = 0;
bitfieldA.mainstwo = 0;
}
delayMicroseconds(100); //must be lower than 1 millisecond, so mic
/*if hzbinary is low
*
* while clk high, do nothing
* clk++
* sample hzbinary
* while clk low do nothing
*/
/*
* //serial print is very slow, and breaks timing
* the below is not usable
* (DMA anyone? second processor anyone?)
Serial.println("hzbinval 1 - 20:");
for(x=0;x<21;x++){
Serial.println(hzbinval[x]);
}
Serial.print("\n\n\n\n");
*/
//sample on falling edge (middle of bit)
}
void checkCLKandBIN(void){
/*
* while clk high, do nothing
* clk++
* sample hzbinary
* while clk low do nothing
*/
//milliscompare = millis();
while((hzclkval = digitalRead(hzclk)) == HIGH){
if(readyet == 0){
hzbinval[clkval] = digitalRead(hzbinary);
clkval++;
readyet = 1;
}
delayMicroseconds(10);
}
while((hzclkval = digitalRead(hzclk)) == LOW){
delayMicroseconds(1);
readyet = 0;
}
//digitalWrite(sigLED, HIGH);
//delayMicroseconds(1);
//digitalWrite(sigLED, LOW);
//would be nice to add a picture to this source code (waveform)
//or oscope picture
//why isn't this possible?
}
void ConvertArraytoBin (void){
for(x=4;x<21;x++){
if(hzbinval[x] == 1){
bitfieldA.mainstwo = bitfieldA.mainstwo | (0b0000000000000000000001 << (x - 3));
}
}
//Serial.println(bitfieldA.mainstwo,BIN);
temp = bitfieldA.mainstwo >> 1;
//almost, but no cigar. has timing issues.
//ugly hack time
temp = temp & 0b1011111111111;
//results in a clock that is right most of the time.
//but wrong every 20 or so counts
//todo: fix timing of duino by removing digital read for
//direct port reads
if(temp == 5047){
temp = 5998; //something, something, premature optimization...
}
if(temp == 5048){
temp = 6000; //LUTs
}
Serial.println(temp,BIN);
Serial.println(temp,DEC);
Serial.print("\n");
/*mainsfreq = mainsfreq >> 3;
mainsfreq = mainsfreq & 0b0111111111111;
Serial.println(mainsfreq,DEC);
//111011011101
//1011101101111
//111011011101
//11101101111*/
}

Loading…
Cancel
Save