ho bruciato un rtc?

ciao, spero di non aver bruciato il mio rtc (orologio). sto usando un rtc ds1374 montato con tutto quello che gli occorre, stava andando tranquillo, e ogni tanto controllavo se sfasava. tutto ok. poi volevo provare uno sketch audio, che genera dei suoni, e che non interferisce con le librerie wire ne con i pin 4 e 5 analog. non stacco l'rtc e carico il progr. (non lo stacco perchè non gli volevo togliere l'alimentazione, per controllare poi l'orario) fatto questo ricarico lo sketch per leggere i dati dal rtc e non mi risponde piu, cioè risponde con i valori di default :( per essere piu preciso: nel setup gli imposto la data corretta, mi risponde una prima volta con i valori settati, e poi si resetta da solo a default. :(

lo devo buttare?

ci sono dei parametri da reimpostare a mano? magari si è settato qualcosa dentro il chip rtc, e va resettato. in genere si azzera tutto senza alimentazione, giusto? ancora mi fa cosi grazie

Ho difficoltá di capire il Tuo problema. Ci invii quale scheda DS1374 usi oppure un riferimento dove trovare la schedina. L'upload e la partenza del terminale nel IDE fanno resettare Arduino. È possibile che il reset influisca anche sulla schedina? Ciao Uwe

se nello sketch che hai caricato nell'rtc c'è il setup della data/ora, quando apri il serial monitor il programma viene rilanciato resettando tutto al valore iniziale. io ho fatto 2 sketch, uno con l'impostazione della data e dell'ora,e lo ho caricato,poi ho caricato lo stesso sketch ma senza il setup, in questo modo non si resetta quando apri il serial monitor (anche se si perde qualche secondo) ;)

ciao
grazie delle risp
allora la scheda è questa http://cgi.ebay.it/ws/eBayISAPI.dll?ViewItem&item=200420643831&ssPageName=STRK:MEWAX:IT

il fatto è che ho lavorato normalmente fino al caricamento dello sketch con i suoni.
info che ho notato quando funzionava: l’rtc non si resetta se resetto arduino (e ho caricato una versione di sketch che non setta valori nel setup)
la logica è stata questa per l’rtc:
ho usato la libreria apposta (quella di mattt)
lo alimento
lo imposto nel setup (setto )
e nel loop leggo e stampo nel serialMonitor
modifico lo sketch, togliendo dal setup il settaggio dei valori,
lo ricarico
e tutto ok, lui continua a contare

tutto questo non va più: legge la prima volta il valore settato, ma poi nulla torna a 0:0:0 1/1/2000

questo è il codice base, è l’esempio della lib

#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h> // written by  mattt on the Arduino forum and modified by D. Sjunnesson

void setup()
{
  Serial.begin(9600);
       // PEZZO CHE DISABILITO LA SECONDA VOLTA DEL CARICAMENTO
  RTC.stop();
  RTC.set(DS1307_SEC,1);        //set the seconds
  RTC.set(DS1307_MIN,53);     //set the minutes
  RTC.set(DS1307_HR,18);       //set the hours
  RTC.set(DS1307_DOW,4);       //set the day of the week
  RTC.set(DS1307_DATE,12);       //set the date
  RTC.set(DS1307_MTH,11);        //set the month
  RTC.set(DS1307_YR,10);         //set the year
  RTC.start();
 
}

void loop()
{

  Serial.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true
  Serial.print(":");
  Serial.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
  Serial.print(":");
  Serial.print(RTC.get(DS1307_SEC,false));//read seconds
  Serial.print("      ");                 // some space for a more happy life
  Serial.print(RTC.get(DS1307_DATE,false));//read date
  Serial.print("/");
  Serial.print(RTC.get(DS1307_MTH,false));//read month
  Serial.print("/");
  Serial.print(RTC.get(DS1307_YR,false)); //read year 
  Serial.println();
 
  delay(1000);  
  
}

ciao stefanosky

Il RTC che hai comprato é un DS1307 non un DS1374.

2 cose che mi vengono in mente:

  • Metti la batteria prevista sul modulo cosí escludi problemi con l'alimentazione.

  • hai messo altra elettronica per lo sketch audio? Quale?

ciao Uwe

ah si , scusate , ds1307. si ho provato con la batteria. ho aggiunto sul digital 11 un filtro passa basso lo vedi sulla destra della figura solo quello non il resto dell'elettronica, non serviva per quello sketch. come vedi dallo schema lo sketch va a settare delle cose particolari sul timer2 per generare dei segnali specifici in pwm e quindi pensavo che questo avesse interferito con l'rtc

Hai messo un induttanza e un condensatore in serie; questo puó essere un oscillatore che alza la tensione. Hai provato di togliere l' induttanza? Volevi mettere lo sketch? Ciao Uwe

per fare un controllo dell’rtc non ho piu usato quell’elettronica in più.
un oscillatore? mmm, ho capito, infatti negli altri filtri non ho mai messo un’induttanza.
il codice per l’audio è molto complicato, nel senso che interviene sui bit e setta dei valori su timer2
usa l’analog 0 e 1, ma in questo non servono, questo genera dei suoni come xilofono da solo

se serve lo posto

/* Arduino Audio Loopback Test
 *
 * Arduino Realtime Audio Processing
 * 2 ADC 8-Bit Mode
[b] * ana[ch65533]og input 1 is used to sample the audio signal
 * analog input 0 is used to control an audio effect[/b]
 * PWM DAC with Timer2 as analog output
 
 
 
 * 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))


int ledPin = 13;                 // LED connected to digital pin 13
int testPin = 7;


boolean div32;
boolean div16;
// interrupt variables accessed globally
volatile boolean f_sample;
volatile byte badc0;
volatile byte badc1;
volatile byte ibb;



int ii;
int i2;

int icnt;
int cnt2;


int iw;
byte bb;

byte dd[512];  // Audio Memory Array 8-Bit

int valori[]={50,30,50,70,50, 70,120,200,80,10};
int iiia=0;
unsigned long int time;
unsigned long int letturaluce_time;
void setup()
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
  pinMode(testPin, OUTPUT);
  Serial.begin(57600);        // connect to the serial port
  Serial.println("Arduino Audio ");


  // set adc prescaler  to 64 for 19kHz sampling frequency
  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

  time=millis();
  letturaluce_time=millis();
}



void loop()
{
    time=millis();
    letturaluce_time=millis();
    if(time<letturaluce_time+10000){
      iiia++;
      Serial.println(iiia, DEC);
    //if(iii<11){iii++;}
    if(iiia==10){iiia=0;}
    
    }
    
  while (!f_sample) {        // wait for Sample Value from ADC
  }                          // Cycle 15625 KHz = 64uSec 

  PORTD = PORTD  | 128;      //  Test Output on pin 7
  f_sample=false;

  badc1=dd[icnt];            // get the buffervalue on indexposition
  iw = badc1-127;
  i2 = (15625-cnt2) / 64;
  iw = iw * i2;              // decay of wave
  iw = iw / 256;
  badc1 = iw+127;
  icnt=icnt + valori[iiia]; //badc0;         // Variable frequency with potentiometer
  icnt++;                    // increment index
  icnt = icnt & 511;         // limit index 0..511

  cnt2++;                    // let the led blink every second
  if (cnt2 >= 15625){
    load_waveform();          // reload wave after 1 second
    PORTB = PORTB ^ 32;
    cnt2=0;
    icnt=0;
  }
  

  
  OCR2A=badc1;                // output audio to PWM port (pin 11)
  PORTD = PORTD  ^ 128;  //  Test Output on pin 7

} // loop
//******************************************************************
void load_waveform(){
  float pi = 3.141592;
  float dx ;
  float fd ;
  float fcnt=0;
  dx=2 * pi / 512;                    // fill the 512 byte bufferarry
  for (iw = 0; iw <= 511; iw++){      // with  50 periods sinewawe
    fd= 100*sin(fcnt);                // fundamental tone

    fd = fd + ( 10*sin(4*fcnt+fcnt));  // plus some overtone

    fcnt=fcnt+dx;                     // in the range of 0 to 2xpi  and 1/512 increments
    bb=127+fd;                        // add dc offset to sinewawe 
    dd[iw]=bb;                        // write value into array
  }
}


//******************************************************************
// Timer2 Interrupt Service at 62.5 KHz
// here the audio and pot signal is sampled in a rate of:  16Mhz / 256 / 2 / 2 = 15625 Hz
// runtime : xxxx microseconds
ISR(TIMER2_OVF_vect) {

  PORTB = PORTB  | 1 ;

  div32=!div32;                            // divide timer2 frequency / 2 to 31.25kHz
  if (div32){ 
    div16=!div16;  // 
    if (div16) {                       // sample channel 0 and 1 alternately so each channel is sampled with 15.6kHz
      badc0=ADCH;                    // get ADC channel 0
      sbi(ADMUX,MUX0);               // set multiplexer to channel 1
    }
    else
    {
      badc1=ADCH;              // get ADC channel 1
      cbi(ADMUX,MUX0);               // set multiplexer to channel 0
      f_sample=true;
    }
    
    ibb++; 
    ibb--; 
    ibb++; 
    ibb--;    // short delay before start conversion
    sbi(ADCSRA,ADSC);              // start next conversion
  }
  PORTB = PORTB  ^ 1 ;
}

vabbè , ne compro un altro. però credo dovrò far controllare il calendario con un arduino e con un altro far partire i suoni. non vorrei continuare a bruciare rtc :) ciao