Vorrei interfacciare Arduino uno affinche a mezzo della libreria Wire utilizzando il protocollo IIC imposti il divisore programmabile di detto PLL che in questo caso è un TSA5055 con un fattore di divisione di 19600 (DEC) corrispondente 4C90 in HEX, ho cercato di scrivere qualcosa ma al risultato pratico l'oscillatore del PLL rimane inerte, sicuramente vi è qualche sbaglio nell'interpretare la modalita' di inviare detta informazione a mezzo il codice, premetto che sono inesperto in programmazione ed aggiungo che detto PLL pilotatolo con un'altra scheda che utilizza un PIC16F84 ed il protocollo IIC funziona.
Grazie a tutti e scusate se la forma del post non è corretta.
Gia' testato in passato ma non funziona perche' ci sono alcuni errori di sintassi nel listato, e poi a me serviva solo impostare il fattore divisore programabile e basta, credo 3-4 righe di codice.
... quindi devi avere fondamentalmente chiare due cose :
<< Indirizzo_device_I2C>> : l'indirizzo I2C del tuo device (che vedo può essere anche programmato)
<< indirizzo_memoria_da_dove_iniziare_a_scrivere>> : il numero del byte da cui cominciare a scrivere nella memoria del chip. Normalmente si parte a contare da 0x00.
Se hai queste info ... non dovresti avere problemi a parlare con quel chip ed ha programmarlo.
Ciao Guglielmo e grazie per la tua preziosa collaborazione,
dunque il mio problema e che non so' interpretare la lista degli indirizzi del mio device :*
volevo innanzi tutto capire come iniziare ad impostarla riferendosi al precedente datasheet,
io avevo iniziato dapprima a scarabocchiare qualcosa del genere ma ovviamente errata e non funziona
#include <Wire.h>
void setup()
{
Wire.begin();
}
void loop()
{
Wire.beginTransmission(0xC2); // indirizzo del device
Wire.write(ox4C90); // fattore di divisione del divisore programmabile in decimale è 19600
Wire.endTransmission();
delay(500);
}
Dunque ... devi esaminare il datasheet a pagina 4 per i dati da fornire e a pagina 5 per come questi vanno trasmessi ...
Giustamente indirizzi il chip (sicuro dell'indirizzo ?) ...
Wire.beginTransmission(0xC2); // indirizzo del device
... poi, se guardi a pagina 5 il formato scrittura dei dati, dopo l'indirizzo devi spedire 4 bytes :
MSB del Programmable Divider
LSB del Programmable Divider
Charge pump and test bits
I/O port control bits
questo lo fai mandando BYTE a BYTE (... e non come hai fatto tu) con la Wire.write() :
Wire.write(0x4C); // MSB del Programmable Divider
Wire.write(0x90); // LSB del Programmable Divider
Wire.write(0x??); // qui devi calcolare il valore per il byte Charge pump and test bits
Wire.write(0x??); // qui devi calcolare il valore per il I/O port control bits
Guglielmo,
ti allego il listato che funziona su pic16f84 in IIC dove li' sono riportate delle preziose info che forse ti aiuteranno a farmici capire qualcosa, in questo listato che non è C ne C++ forse microBasic vengono utilizzati anche dei pulsanti ed un display LCD che a me non servono per il momento.
l'indirizzo del device è giusto è riportato anche nel detto allegato.
L'indirizzo può essere cambiato per cui ... che sia in un listato non significa nulla ...
Per il resto ... c'è solo da capire se è obbligatorio trasmettere tutti e 4 i bytes di programmazione o, se già dopo i primi due (che sono quelli che ti interessano), si può chiudere la trasmissione.
L'unica è che fai una prova e vedi come va ...
Guglielmo
P.S. : Eventualmente usa I2CScanner per verificare che veramente risponda a quell'indirizzo
Prova a guardare il datasheet che ti ho linkato io ... è molto più dettagliato e ti spiega come usare i 3 possibili indirizzi in più che può assumere quel chip.
Guarda in particolare pagina 6 ... dove, in funzione del valore su P3 (pin 10) puoi cambiare i bit MA0 e MA1 dell'indirizzo.