Tektronix Technical Forums are maintained by community involvement. Feel free to post questions or respond to questions by other members. Should you require a time-sensitive answer, please contact your local Tektronix support center here.

Error in code:SigType1_Sine_1K_90deg_ino

Questions in this forum area are community supported. Tektronix does not regularly monitor posts in this area.
Post Reply
dalpets
Posts: 4
Joined: July 10th, 2015, 8:05 am

Error in code:SigType1_Sine_1K_90deg_ino

Post by dalpets » July 11th, 2015, 5:16 am

In the Learn Digital Oscilloscope Operations using Arduino Board as DUT (Signal Generator) the above code passes an error, as follows. Could you please advise what coding corrections are necessary. Thank you.

Arduino: 1.6.4 (Windows XP), Board: "Arduino Uno"

C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10604 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\DOCUME~1\THERIN~1\LOCALS~1\Temp\build1851337128202900342.tmp\SigType1_Sine_1k_90deg_ino.cpp -o C:\DOCUME~1\THERIN~1\LOCALS~1\Temp\build1851337128202900342.tmp\SigType1_Sine_1k_90deg_ino.cpp.o

SigType1_Sine_1k_90deg_ino.ino:14:1: error: 'include' does not name a type
SigType1_Sine_1k_90deg_ino.ino:22:1: error: expected declaration before '}' token
'include' does not name a type

dalpets
Posts: 4
Joined: July 10th, 2015, 8:05 am

Re: Error in code:SigType1_Sine_1K_90deg_ino

Post by dalpets » July 11th, 2015, 5:40 am

The complete code is as follows;

Code: Select all

//____________________________________________________________________
// LEARNING DIGITAL OSCILLOSCOPE USING ARDUINO AS SIGNAL GENERATOR
// 
// Date: 2013-12-01            Written by: Mukesh Soni 
// Original code from Martin Nawrath (Germany): Single Sine Generator
// 2013-10-01: Modifie by Mukesh Soni to generate Dual Sine wave
//____________________________________________________________________
// OUTPUT DETAILS
//--------------------------------------------------------------------
// Pin # 3  : Variable Duty Cycle PWM - For Sine Wave - 1kHz
// Pin # 11 : Variable Duty Cycle PWM - For Sine Wave - 1kHz/90 deg
//____________________________________________________________________

include "avr/pgmspace.h"

  127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,181,184,187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225,227,229,231,233,234,236,238,239,240,
  242,243,244,245,247,248,249,249,250,251,252,252,253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,247,245,244,243,242,240,239,238,236,234,233,231,229,227,225,223,
  221,219,217,215,212,210,208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161,158,155,152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90,87,84,81,78,
  76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,25,27,29,31,
  33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,118,121,124

};
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))

int ledPin = 13;                 // LED pin 7
int testPin = 7;
int t2Pin = 6;
byte bb;

double MY_FREQ;
int MY_PHASE;
// const double refclk=31372.549;  // =16MHz / 510
const double refclk=31376.6;      // measured

// variables used inside interrupt service declared as voilatile
volatile byte icnt;              // var inside interrupt
volatile byte icntNew;              // var inside interrupt
volatile byte icnt1;             // var inside interrupt
volatile byte c4ms;              // counter incremented all 4ms
volatile unsigned long phaccu;   // pahse accumulator
volatile unsigned long tword_m;  // dds tuning word m

void setup()
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
  Serial.begin(115200);        // connect to the serial port
  Serial.println("DDS Test");

  pinMode(6, OUTPUT);      // sets the digital pin as output
  pinMode(7, OUTPUT);      // sets the digital pin as output

  pinMode(11, OUTPUT);     // pin 11: SINE WAVE 1 = PWM  output / frequency output
  pinMode(3, OUTPUT);     // pin 3: SINE WAVE 2 = PWM  output / frequency output
  
  Setup_timer2();

  // disable interrupts to avoid timing distortion
  cbi (TIMSK0,TOIE0);              // disable Timer0 !!! delay() is now not available
  sbi (TIMSK2,TOIE2);              // enable Timer2 Interrupt

  MY_FREQ=1000.0;                    // initial output frequency = 1000.o Hz
  tword_m=pow(2,32)*MY_FREQ/refclk;  // calulate DDS new tuning word 

}
void loop()
{
  MY_FREQ = 1000.000;        // SET Frequency
  MY_PHASE = 90;             // SET Phase (0-360 degree)
  
  icntNew = map( MY_PHASE, 0, 360, 0, 255); 
  while(1) {
     if (c4ms > 250) {                 // timer / wait fou a full second
      c4ms=0;
      cbi (TIMSK2,TOIE2);              // disble Timer2 Interrupt
      tword_m=pow(2,32)*MY_FREQ/refclk;  // calulate DDS new tuning word
      sbi (TIMSK2,TOIE2);              // enable Timer2 Interrupt 
    }

   sbi(PORTD,6); // Test / set PORTD,7 high to observe timing with a scope
   cbi(PORTD,6); // Test /reset PORTD,7 high to observe timing with a scope

   analogWrite(9,127);
   
  }
 }
//******************************************************************
// timer2 setup
// set prscaler to 1, PWM mode to phase correct PWM,  16000000/510 = 31372.55 Hz clock
void Setup_timer2() {

// Timer2 Clock Prescaler to : 1
  sbi (TCCR2B, CS20);
  cbi (TCCR2B, CS21);
  cbi (TCCR2B, CS22);

  // Timer2 PWM Mode set to Phase Correct PWM
  cbi (TCCR2A, COM2A0);  // clear Compare Match
  sbi (TCCR2A, COM2A1);
  
  // Timer2 PWM Mode set to Phase Correct PWM for wave 2
  cbi (TCCR2A, COM2B0);  // clear Compare Match
  sbi (TCCR2A, COM2B1);

  sbi (TCCR2A, WGM20);  // Mode 1  / Phase Correct PWM
  cbi (TCCR2A, WGM21);
  cbi (TCCR2B, WGM22);
}

//******************************************************************
// Timer2 Interrupt Service at 31372,550 KHz = 32uSec
// this is the timebase REFCLOCK for the DDS generator
// FOUT = (M (REFCLK)) / (2 exp 32)
// runtime : 8 microseconds ( inclusive push and pop)
ISR(TIMER2_OVF_vect) {

  sbi(PORTD,7);          // Test / set PORTD,7 high to observe timing with a oscope

  phaccu=phaccu+tword_m; // soft DDS, phase accu with 32 bits
  icnt=phaccu >> 24;     // use upper 8 bits for phase accu as frequency information
                         // read value fron ROM sine table and send to PWM DAC
  OCR2A=pgm_read_byte_near(sine256 + icnt);  
  OCR2B=pgm_read_byte_near(sine256 + byte(icnt + icntNew ));   

  if(icnt1++ == 125) {  // increment variable c4ms all 4 milliseconds
    c4ms++;
    icnt1=0;
   }   

 cbi(PORTD,7);            // reset PORTD,7
}



israelsteel
Posts: 1
Joined: March 8th, 2017, 7:38 am
Country: Israel

Re: Error in code:SigType1_Sine_1K_90deg_ino

Post by israelsteel » March 8th, 2017, 7:54 am

I have an error trying to upload this to the arduino...it is in reference to the line

PROGMEM prog_uchar

The error is "prog_uchar does not name a type

How can I correct this?

Carl M
Tektronix Applications
Tektronix Applications
Posts: 801
Joined: July 30th, 2008, 4:45 pm
Country: United States

Re: Error in code:SigType1_Sine_1K_90deg_ino

Post by Carl M » March 20th, 2017, 11:26 am

@daplets - the code you posted is in error. the code included with the download is correct. i suggest you download a new copy: http://www.tek.com/lab-course/learn-dig ... -generator

@israelsteel - this happens when you use Arduino IDE v1.6.12 or similar. i suggest you try Arduino IDE v1.0.6.
Tektronix Application Engineer

Post Reply

Return to “Other or Discontinued Oscilloscopes”

Who is online

Users browsing this forum: lb_sailor, silviustro and 6 guests