Browse Source

okok'

master
Your Name 3 years ago
parent
commit
9c2ea07197
2 changed files with 412 additions and 0 deletions
  1. +206
    -0
      60hz_Divider/code/arduino_parse_test/shiftin_try5_wLED/shiftin_try5_wLED.ino
  2. +206
    -0
      60hz_Divider/code/arduino_parse_test/shiftin_try6_wLED/shiftin_try6_wLED.ino

+ 206
- 0
60hz_Divider/code/arduino_parse_test/shiftin_try5_wLED/shiftin_try5_wLED.ino View File

@ -0,0 +1,206 @@
#define hzclk 7
#define hzbinary 6
#define sigLED 11
#include "LedControl.h"
LedControl lc=LedControl(12,11,10,1);
/* we always wait a bit between updates of the display */
unsigned long delaytime=250;
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);
/*
The MAX72XX is in power-saving mode on startup,
we have to do a wakeup call
*/
lc.shutdown(0,false);
/* Set the brightness to a medium values */
lc.setIntensity(0,8);
/* and clear the display */
lc.clearDisplay(0);
}
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?
}
//https://playground.arduino.cc/Main/LedControl/#Seg7Control
void printNumber(int v) {
int ones;
int tens;
int hundreds;
int thousands;
boolean negative;
if(v < -9999 || v > 9999)
return;
if(v<0) {
negative=true;
v=v*-1;
}
ones=v%10;
v=v/10;
tens=v%10;
v=v/10;
hundreds=v%10;
v=v/10;
thousands=v;
/*if(negative) {
//print character '-' in the leftmost column
lc.setChar(0,4,'-',false);
}
else {
//print a blank in the sign column
lc.setChar(0,4,' ',false);
}*/
//Now print the number digit by digit
lc.setDigit(0,3,(byte)thousands,false);
lc.setDigit(0,2,(byte)hundreds,false);
lc.setDigit(0,1,(byte)tens,false);
lc.setDigit(0,0,(byte)ones,false);
}
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");
lc.clearDisplay(0);
printNumber(temp);
delay(delaytime);
/*mainsfreq = mainsfreq >> 3;
mainsfreq = mainsfreq & 0b0111111111111;
Serial.println(mainsfreq,DEC);
//111011011101
//1011101101111
//111011011101
//11101101111*/
}

+ 206
- 0
60hz_Divider/code/arduino_parse_test/shiftin_try6_wLED/shiftin_try6_wLED.ino View File

@ -0,0 +1,206 @@
#define hzclk 7
#define hzbinary 6
#define sigLED 11
#include "LedControl.h"
LedControl lc=LedControl(12,11,10,1);
/* we always wait a bit between updates of the display */
unsigned long delaytime=250;
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);
/*
The MAX72XX is in power-saving mode on startup,
we have to do a wakeup call
*/
lc.shutdown(0,false);
/* Set the brightness to a medium values */
lc.setIntensity(0,8);
/* and clear the display */
lc.clearDisplay(0);
}
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?
}
//https://playground.arduino.cc/Main/LedControl/#Seg7Control
void printNumber(int v) {
int ones;
int tens;
int hundreds;
int thousands;
boolean negative;
if(v < -9999 || v > 9999)
return;
if(v<0) {
negative=true;
v=v*-1;
}
ones=v%10;
v=v/10;
tens=v%10;
v=v/10;
hundreds=v%10;
v=v/10;
thousands=v;
/*if(negative) {
//print character '-' in the leftmost column
lc.setChar(0,4,'-',false);
}
else {
//print a blank in the sign column
lc.setChar(0,4,' ',false);
}*/
//Now print the number digit by digit
lc.setDigit(0,3,(byte)thousands,false);
lc.setDigit(0,2,(byte)hundreds,false);
lc.setDigit(0,1,(byte)tens,false);
lc.setDigit(0,0,(byte)ones,false);
}
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");
lc.clearDisplay(0);
printNumber(temp);
delay(delaytime);
/*mainsfreq = mainsfreq >> 3;
mainsfreq = mainsfreq & 0b0111111111111;
Serial.println(mainsfreq,DEC);
//111011011101
//1011101101111
//111011011101
//11101101111*/
}

Loading…
Cancel
Save