#define SYNC_BITS 50 //NUMBER OF BIT PERIODS TO MEASURE
//#define MAX_MSG_BITS 1500 //STOP READING HERE
#include <util/delay.h>
const byte interrupt_pin = 2;
boolean toggle1 = 0;
int state = 0;
//int measured_periods[SYNC_BITS];
int measured_pwm;
String data;
char a[1000];
void setup() {
// put your setup code here, to run once:
DDRB &= ~(1<<PINB1);//pin 9 input
PORTB |= (1<<PORTB1);//PORTB Input Pullup
//pinMode(9, OUTPUT);//oc1a
//DDRD &= ~(1<<PD2);//portd pin2 input
//PORTD |= (1<<PD2);
//pinMode(interrupt_pin,INPUT_PULLUP);
Serial.begin(9600);
//delayMicroseconds(1000);
//Serial.print("AVR Initialization");
delay(50);
//Serial.print(buffer_in);
//cli();
//Timer 1 interrupt at 125kHz
//TCCR1A = 0;
//TCCR1B = 0;
//TCNT1 = 0;
//turn on CTC mode
TCCR1A |= (1<<COM1A1)|(1<<COM1A0); //normal 00//toggle 01//low level 10//high level 11
//TCCR1B |= (1<<ICNC1)|(1<<ICES1);
TCCR1B |= (1<<WGM12);
//Set prescaler 8
//-------> no prescaler - CS10 - 1; 64 prescaler - CS11, CS10 - 1 <-----//
TCCR1B |= (1<<CS11)|(0<<CS10); //8 prescaler
OCR1A = 63; //[(16000000/(125000*8)] - 1//top value
OCR1B = 0;
//enable timer compare interrupt
//TIMSK1 |= (1<<ICIE1)|(1<<OCIE1A)|(1<<TOIE1);
TIMSK1 |= (1<<OCIE1A);
//sei();
//Serial.print("Finished_Setup");
//delay(50);
//allow interrupts
}
//digitalwrite is very slow??
/*ISR(TIMER1_COMPA_Vect){//timer1 interrupt 125kHz toggles pin 13
//generates a wave of frequency 125kHz/2 = 62.5kHz
//int state = 0;
if(toggle1){
//digitalWrite(9, HIGH);
PORTB |= (1<<PB1);
toggle1 = 0;
}
else{
PORTB &= ~(1<<PB1);
toggle1 = 1;
}
/*TCCR1B ^= 1<<ICES1;
static byte lastEdge;
byte thisEdge = OCR1A;
byte difference = lastEdge - thisEdge;
if(difference < x ) {
//something
}
else {
//something
}
//lastEdge = thisEdge;
delayMicroseconds(4);
PORTB |= (1<<PB7);
delayMicroseconds(4);
PORTB &= ~(1<<PB7);
}*/
/*
void start_sync_ISR(){
detachInterrupt(0);
start_sync = true;
}
void measure_middle_ISR(){
detachInterrupt(0);
start_middle = true;
}
*/
byte val;
short i;
//char buffer_in[800];
//uint8_t state = 0;
void loop() {
// put your main code here, to run repeatedly:
/*
PORTB |= (1<<PORTB5);
delay(8);
PORTB &= ~(1<<PORTB5);
delay(8);*/
int state = 0;
/*if(toggle1){
PORTB |= (1<<PINB1);
state = 0;
Serial.println(state);
}
else{
PORTB &= ~(1<<PINB1);
state = 0;
Serial.println(state);
}
*/
measured_pwm = pulseIn(PINB1, HIGH);
if(measured_pwm>1){//why?
read_middle();}
for(i=0;i>1000;i++){
Serial.println(a[i]);
}
Serial.println("TA TA");
while(1){}/*{
if(readState()==1){
PORTB^=(1<<PB5);
}
_delay_us(8);
}*/
//measured_ = pulseIn(2, HIGH);
/*for(i = 0; i<SYNC_BITS; i++){
a[i] = pulseIn(2, HIGH);
read_middle();
}
Serial.println(measured_periods[i]);*/
/*while(1){
if(i<800){
buffer_in[i] = digitalRead(13);
val = buffer_in[i];
}i++;
}
if(toggle1 == 0){
state = 1;
Serial.println(state);
}
else{
state = 0;
Serial.println(state);
}
while(1){
if(i<800){
delayMicroseconds(4);
buffer_in[i] = digitalRead(13);
val = buffer_in[i];
}i++;
}
//Serial.println(val);
Serial.println(measured_periods[i]);*/
}
short j;
void read_middle(){
for(j=0;j<1000;j++){
a[j] = digitalRead(9);
delayMicroseconds(8);
}
}
Could you check this code...please? ![]()
It should be printing the values in the buffer a*.. but it's not...*
instead..AVR Initilization(which is commented for now).....AVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAVAV.............. well that's what I am getting on the serial monitor...is this some witchcraft?