TDA6503A - con scheda PCI e linux riesco a far andare la radio, e con arduino no

TDA6503A - cosa sto sbagliando nel mandarli i bit? allego il PDF del componente, non è solo quel componente è un tunner completo
e anche il programma, su linux con un driver funziona la radio, come posso farla andare con arduino e solo la scheda in i2c?

#include <Wire.h>


void setup() {
trasmissione();    

}

void trasmissione()
{
 Wire.beginTransmission(0x61); 
  Wire.write(0xC0);
  Wire.write(0b11000000);
  Wire.write(0x08);       
  Wire.write(0x5C);   
  Wire.write(0b11000000);
  Wire.write(0b00000000);           
  Wire.endTransmission();
}

void loop() {
 

}

--- ti rammento che, da regolamento, è permesso sollecitare risposte (fare "up") solo dopo almeno 48 ore dall'ultimo post. - gpb01

TDA6503A_PhilipsSemiconductors(1).pdf (201 KB)

Nel setup() inserisci ... Wire.begin(); che è richiesto dagli esempi.
Cosa può essere sbagliato nel programma? Uniche cose che possono essere sbagliate è l'indirizzo dello slave, o i valori byte che trasmetti.
Ma questo devi saperlo tu, quale sia l'indirizzo e cosa trasmettere.

torn24:
Nel setup() inserisci ... Wire.begin(); che è richiesto dagli esempi.

... più che altro perché è obbligatorio per attivare il bus I2C :smiley:

Guglielmo

an fantastico, quindi senza inizializzazione non stavo trasmettendo bit, comunque io credo di sapere i bit da mandare, ma non ne sono sicuro

per quanto riguarda indirizzo, ho fatto uno scan, e mi risulta 0x61

se non sbaglio, ce la prima sequenza di bit, d’indirizzo, che ho il pin a vuoto

poi quella più complicata, dovrebbe corrispondere alla frequenza

comprende due fasi per via della grandezza

poi arriva lo step, e in fine la selezione fmst e il resto spenti, solo fmst lascio a 1

ottimo, ho ricollegato la pci, usato fmtols di ubuntu, abilitato il trace del kernel, guardato cosa fa il programma, lancia bit con indirizzo 0x44, ne lancia uno 0x08 e ascolta poi un altro 0xC0 e ascolta, poi va in blocco perché non essendoci il tuner, non funziona, ma perchè 0x44? per via del pin degli indirizzi? perchè arduino non riesce ad trovarla ma in realtà c’è? magari ci sono altri integrati? ma ho guardato e non hanno i2c, se interrogo la porta 0x44 da terminale mi da busy perché è bloccata dal kernel

la vostra risposta la immagino già, dovresti controllare con scheda e il resto degli i integrati bene per capire chi è il 0x44 e ricollegare il tuner alla scheda, ma la mia ultima domanda e la seguente, ma perché queste cose non riesco a trovarle nel pdf al posto di andare a ritroso e creare questa confusione?

stavo anche analizzando i driver non compilati di itv una cosa del genere, vediamo oggi se trovo tutti i comandi e provo vedere anche fmtols, il mio obiettivo e di far andare quella scheda senza altri accessori cioè con arduino, poi togliere il modulatore e vedere se ne riesco mettere uno am e fmn che non mi serve a niente il vbs della tv o wfm

Veramente nel datasheet è tutto ben descritto ... pagina 9 ... comunque ricorda che quello che vedi come indirizzo I2C, se non hai un protocol analyzer che fa la decodifica, cambia in funzione se è una read o una write dato che, questa indicazione, è proprio un bit dell'address ...

Guglielmo

convertendolo in hex diventa 0x61, quindi o il programma del driver va a setaccio in base la risposta partendo da 0x44 o magari con altri componenti è stato impostato su 0x44

avevo visto quella parte li, ma avevo capito un altra cosa diversa

la seconda e terza riga come faccio a trovare i bit da mandare?

qualcuno può dirmi come impostare le frequenze? sembra muoversi ora, ma non so come dargli le frequenze

Allora, come ho già scritto in un altro post ... mi spiace :confused: , ma ... REGOLAMENTO, punto 16.11 ... per domande su Arduino, sulla sua programmazione e su come interfacciarlo con altri oggetti, ecc. ecc. siamo qui; per domande su componenti elettronici specifici, come usarli, come farli funzionare, ecc. ... ti devi rivolgere ad un forum di elettronica generale e NON qui. Grazie :slight_smile:

Guglielmo

non voglio fare il rompi scatole ma si stratta del programma di arduino, non so come vanno impostati i due divider byte, mi basta quello, per quanto riguarda la parte elettronica ho già tutto apposto, se ho ben capito quello e per la frequenza

poi mi sono già iscritto anche bene, e sto ancora aspettando la conferma dell’account da un amministratore

gabe_matteo:
non voglio fare il rompi scatole ma si stratta del programma di arduino, non so come vanno impostati i due divider byte, mi basta quello ...

... ovvero? ... cosa vuoi esattamente sapere più sulla libreria Wire che non riesci a fare?

Guglielmo

non riesco a capire il divider byte, se faccio un programma con arduino, posso farlo convertire ad arduino?

Se vedo bene hai un divisore programmabile a 15 bit a cui devi indicare per quanto dividere ... 15 bit sono due bytes (che li chiama DB0 e DB1) con il bit più significativo a zero (il MSB di DB1) ovvero un numero interno NON segnato che va da 0 a 32767 ... se non sei capace a ricavare i due bytes da un intero non segnato (unsigned int), usi le due funzioni che ti mette a disposizione il reference ... highByte() e lowByte() così hai i due bytes separati.

Guglielmo

ok, e quindi se io volessi impostarli 100mhz come andrebbe impostato?

tanto per capirci

Non ne ho la più pallida idea, per questo devi studiarti il datasheet e vedere come va usato il divisore e su che frequenze agisce ...
... così, a naso, NON mi sembra un oggetto facile da usare e richiede attorno un bel po' di circuiteria ... ::slight_smile:

Guglielmo

riesco a sintonizzare le bande. sento che diventa sensibile, ma non so come impostare quei due righe, su internet fanno frequenza20 alcuni mettono frequenza+10.720 ed poi il hex che esce lo dividono in byte alto e basso, ma sono di altri simili dispositivi
ed con DB0 e DB1 intendi DB1 DB2?
ma da me non funge, cercherò di venirne fuori, grazie comunque a te ed e anche all’altra persona che mi ha illuminato nel begin del wire

gabe_matteo:
... ed con DB0 e DB1 intendi DB1 DB2?

... si, scusa, forza dell'abitudine ... loro li chiamano DB1 e DB2 ... io sono abituato a contare sempre a partire da 0 :smiley:

Guglielmo

tranquillo, l’avevo immaginato, comunque credo di aver capito come funziona

sotto c’è un esempio per 100 mhz, con 0x06 divider byte 1 e il 2 con 0x40, trasformandolo in dec esce 1600, se il primo bit è 0 del primo divider, esce 0x640

1600 / 100 fa 16

quindi per determinare le frequenze si fa cosi, ora sembra andare qualcosa, non so se ho le traveggole io o ci sono delle interferenze di stazioni o disturbi del computer, mi manca solo impostare il secondo chip attraverso questo e un altro problema, il secondo chip e di modulazione

comunque sempre sotto poi dovrei leggerlo con slave read i registri

non riesco comunque ad sentir la radio☹️

Ma tu vuoi fare un ricevitore FM controllato da Arduino? ? ? ... perché, se è così, hai totalmente sbagliato chip!

Quello che stai usando tu, come dice il datasheet, è un "5 V mixers/oscillators and synthesizers for cable TV and VCR 2-band tuners", mentre per fare un ricevitore FM si deve usare o il Si4730 o il TEA5767 ... ::slight_smile:

Guglielmo

si l’avevo pensato anche io, è scritto, ma non c’è so quel componente, è un tunner completo, con linux la radio si sente

ti metto una foto del tunner, non sono riuscito a trovare documentazione in internet

in pratica da quel che ho capito, c’è il chip in questione, la sua circuiteria per farlo andare
e un altro chip che fa da modulazione e audio ecc, il chip in questione fa da tunner i2c l’altro fa vbi (tv analogica se non sbaglio) e anche la radio, con linux funziona, ed è l’unico che è comandato con i2c è quello, dopo ti mando il nome, e controllo anche quello con più attenzione, ma di solito dovrei documentarmi del tunner non a chip ma non trovo documentazione, la scheda pci ha poi altri due componenti che sono decoder perchè ha anche degli input video e fanno da bus per la pci e i2c del tunner, pensavo di controllare oggi il secondo chip e il driver scritto i C che sicuramente ci sara i comandi per la radio, ma se hai soluzioni migliori o modi di aiutarmi meglio