| mNo edit summary | mNo edit summary | ||
| Line 16: | Line 16: | ||
| #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) | #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) | ||
| #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) | #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) | ||
| #define BAUDRATE 1000000  // | #define BAUDRATE 1000000  // 1000000 may not work - use 115200 instead. | ||
| int testPin = 7; | int testPin = 7; | ||
| Line 68: | Line 68: | ||
| void loop() | void loop() | ||
| { | { | ||
|    PORTD = PORTD  | 128;       //  Test Output on pin 7 |    PORTD = PORTD  | 128;       //  Test Output on pin 7 | ||
|    PORTD = PORTD  ^ 128;       //  Test Output on pin 7 |    PORTD = PORTD  ^ 128;       //  Test Output on pin 7 | ||
| }  | }   | ||
| //****************************************************************** | //****************************************************************** | ||
Latest revision as of 19:48, 12 January 2012
Flash your arduino board with following code to have analog values from analog pin A0 reported via serial connection. Extract the following zip archive to a folder Media:pd-arduinoOscilloscope.zip and open the contained pd patch arduinoOscilloscope.pd to receive the analog values and have a very basic oscilloscope on your computer.
/* Arduino fast ADC to Serial connection
 * 1 ADC 8-Bit Mode
 * analog input 0 is used to sample a signal. 
 * Martin Schied, Bauhausuniversität Weimar 2012
 
 * adapted from: Arduino Realtime Audio Processing Experiments
 * KHM 2008 / Lab3/  Martin Nawrath nawrath@khm.de
 * Kunsthochschule fuer Medien Koeln
 * Academy of Media Arts Cologne
 */
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#define BAUDRATE 1000000  // 1000000 may not work - use 115200 instead.
int testPin = 7;
boolean div32;
// vars altered by interrupt
volatile byte badc0;
volatile byte ibb;
void setup()
{
  pinMode(testPin, OUTPUT);
  Serial.begin(BAUDRATE);        // connect to the serial port
  Serial.println("Arduino fast 8 bit ADC");
  cbi(ADCSRA, ADPS2);
  sbi(ADCSRA, ADPS1);
  sbi(ADCSRA, ADPS0);
  sbi(ADMUX,ADLAR);  // 8-Bit ADC in ADCH Register
  sbi(ADMUX,REFS0);  // VCC Reference
  cbi(ADMUX,REFS1);
  cbi(ADMUX,MUX0);   // Set Input Multiplexer to Channel 0
  cbi(ADMUX,MUX1);
  cbi(ADMUX,MUX2);
  cbi(ADMUX,MUX3);
   //Timer2 PWM Mode set to fast PWM 
   cbi (TCCR2A, COM2A0);
   sbi (TCCR2A, COM2A1);
   sbi (TCCR2A, WGM20);
   sbi (TCCR2A, WGM21);
   cbi (TCCR2B, WGM22);
   //Timer2 Clock Prescaler to : 1 
   sbi (TCCR2B, CS20);
   cbi (TCCR2B, CS21);
   cbi (TCCR2B, CS22);
   //Timer2 PWM Port Enable
  sbi(DDRB,3);                    // set digital pin 11 to output
  //cli();                         // disable interrupts to avoid distortion
  cbi (TIMSK0,TOIE0);              // disable Timer0 !!! delay is off now
  sbi (TIMSK2,TOIE2);              // enable Timer2 Interrupt
    
} // setup
void loop()
{
  PORTD = PORTD  | 128;       //  Test Output on pin 7
  PORTD = PORTD  ^ 128;       //  Test Output on pin 7
} 
//******************************************************************
// Timer2 Interrupt Service at 62.5 KHz
ISR(TIMER2_OVF_vect) {
  PORTB = PORTB  | 1 ;
    UDR0=ADCH;                      // serial transmission.   
    ibb++;                          // short delay before start conversion
    ibb--; 
    ibb++; 
    ibb--;
    sbi(ADCSRA,ADSC);               // start next conversion
}