Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Misurare la frequenza di un quarzo.

Elettronica lineare e digitale: didattica ed applicazioni

Moderatori: Foto Utentecarloc, Foto Utenteg.schgor, Foto UtenteBrunoValente, Foto UtenteIsidoroKZ

1
voti

[21] Re: Misurare la frequenza di un quarzo.

Messaggioda Foto Utentepinowski » 1 mag 2012, 19:23

AOX ha scritto:La sonda dell'oscilloscopio direttamente sul pin del quarzo con la sua capacità aggiunta rende impossibile la taratura.

Mi consola il fatto che qualcuno conferma quanto ho scritto sopra. :ok:
- Ci incontreremo là, dove non c'è tenebra -

http://iv3gfn.altervista.org
Avatar utente
Foto Utentepinowski
1.945 2 5 10
Master EY
Master EY
 
Messaggi: 519
Iscritto il: 26 ago 2008, 23:49
Località: Monfalcone

1
voti

[22] Re: Misurare la frequenza di un quarzo.

Messaggioda Foto UtenteAOX » 1 mag 2012, 21:55

A questo punto devo ricercare l'errore all'interno del software.

Questo è il codice che utilizzo, ripulito da vari controlli e dal relativo contesto. Vedi se ti può servire a qualche cosa, almeno per vedere i valori ed i registri che ho usato:

Codice: Seleziona tutto
  // Inizializzazione.
  I2C_init();
  I2C_buffer[0] = 0x00;
  I2C_buffer[1] = 0x00;
  I2C_buffer[2] = 0x00;
  I2C_transmit_block(PCF8563_SLAVE_ADD, (char *)I2C_buffer, 3);
  I2C_release();
  I2C_buffer[0] = 0x0D;
  I2C_buffer[1] = 0x80;
  I2C_buffer[2] = 0x00;
  I2C_buffer[3] = 0x00;
  I2C_transmit_block(PCF8563_SLAVE_ADD, (char *)I2C_buffer, 4);
  I2C_release();

  // Lettura data/ora.
  result |= I2C_transmit_char(PCF8563_SLAVE_ADD, 0x02);
  I2C_restart();
  result |= I2C_receive_block(PCF8563_SLAVE_ADD, (char *)I2C_buffer, 7);
  I2C_release();
  td_in.sec = (((I2C_buffer[0] & 0x70) >> 4) * 10) + (I2C_buffer[0] & 0x0F);
  td_in.min = (((I2C_buffer[1] & 0x70) >> 4) * 10) + (I2C_buffer[1] & 0x0F);
  td_in.hr  = (((I2C_buffer[2] & 0x30) >> 4) * 10) + (I2C_buffer[2] & 0x0F);
  td_in.dy  = (((I2C_buffer[3] & 0x30) >> 4) * 10) + (I2C_buffer[3] & 0x0F);
  td_in.dow =                                        (I2C_buffer[4] & 0x07);
  td_in.mn  = (((I2C_buffer[5] & 0x10) >> 4) * 10) + (I2C_buffer[5] & 0x0F);
  td_in.yr  = (((I2C_buffer[6] & 0xF0) >> 4) * 10) + (I2C_buffer[6] & 0x0F);

  // Scrittura data/ora.
  I2C_buffer[0] = 0x02;
  I2C_buffer[1] = ((td_out.sec / 10) << 4) | td_out.sec % 10;
  I2C_buffer[2] = ((td_out.min / 10) << 4) | td_out.min % 10;
  I2C_buffer[3] = ((td_out.hr  / 10) << 4) | td_out.hr  % 10;
  I2C_buffer[4] = ((td_out.dy  / 10) << 4) | td_out.dy  % 10;
  I2C_buffer[5] =                            td_out.dow;
  I2C_buffer[6] = ((td_out.mn  / 10) << 4) | td_out.mn  % 10;
  I2C_buffer[7] = ((td_out.yr  / 10) << 4) | td_out.yr  % 10;
  result |= I2C_transmit_block(PCF8563_SLAVE_ADD, (char *)I2C_buffer, 8);
  I2C_release();
Avatar utente
Foto UtenteAOX
3.555 2 6 11
Master EY
Master EY
 
Messaggi: 232
Iscritto il: 20 mar 2011, 12:29

Precedente

Torna a Elettronica generale

Chi c’è in linea

Visitano il forum: Nessuno e 116 ospiti