home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca

 
FORUM: Pic Micro
Tutto quanto riguarda questi microprocessori... progetti, suggerimenti, aiuti, discussioni...ecc


Kt0803l
     
Autore Messaggio opzioni
double_wrap




una ogni 100 livelli
una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
14.01.2022, alle ore 16:53
fabio1977:
[CUT] Anche in linguaggio c o mikrobasic va bene! [CUT] cosa devo inviare a questo benedetto integrato? Io non ho Arduino! [CUT]


Neppure io ho un KT0803L sottomano. Visto che scrivi

I2C1_INIT(100000)
I2C1_START()
I2C1_WRITE(%00111110) indirizzo del dispositivo
ecc

si puo' ipotizzare che tu stia includendo nel tuo codice una qualche libreria I2C per un qualche compilatore per un qualche micro. Che libreria, compilatore, programmatore e micro stai usando? Le connessioni SDA e SCL con le resistenze di pullup sono corrette?
(Fra l'altro l'istruzione I2C1_INIT(9600) e' un nonsenso)

Io ci ho provato a dirti come devi procedere:
1) cerca in rete chi lo ha gia' realizzato (KT0803L how to, ecc)
2) cerca una libreria per il tuo compilatore ed il tuo micro
2a) se la realizzazione che trovi in rete usa una libreria leggi la libreria ed estrai le righe che ti servono (una libreria e' solo un modo comodo per scrivere una o piu' funzioni)
3) in alternativa
3a) cerca di capire come si leggono i registri
3b) cerca di capire come si scrivono i registri (srivili e rileggili per controllare il risultato)
3c) cerca di capire come si traslano i megaherz voluti (unita, decine, centinaia e magari frazioni) in un integer binario
3d) cerca di capire come si <distribuscono> i bit nei 3 registri senza toccare gli altri bit (magari servono a qualcosa)

Arduino NON ti serve se hai gia' un altro compilatore e un altro micro, devi solo trasportare il codice che ti serve dalla libreria arduino (che ti ho linkato) al tuo compilatore (pero' un minimo di C devi conoscerlo)

Se invece vuoi il codice gia' scritto temo di non saperti aiutare (anche perche' non so che micro usi), io ti ho suggerito un <metodo di lavoro>

Buon lavoro!



"se peso cado, ma se cado non peso"
adamatj.altervista.org
double_wrap




una ogni 100 livelli
una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
14.01.2022, alle ore 17:21
update
giusto per non lasciarti appeso, ho estratto dalla libreria <FMTC.cpp> la funzione che scrive la frequenza di trasmissione nei tre registri

void fmtx_set_freq(float freq)
{
    u16 f;
    u8 reg0, reg1_8, reg9_11;

    reg0 = fmtx_read_reg(0x02);
    reg9_11 = fmtx_read_reg(0x01);

    freq *= 20;
    f = (u16)freq;
    f &= 0x0FFF;

    if(f&0x01){
        reg0 |= 0x80;
    }else{
        reg0 &= ~0x80;
    }

    reg1_8 = (u8)(f>>1);
    reg9_11 = (reg9_11&0xF8) | (u8)(f>>9);

    fmtx_write_reg(0x02, reg0);
    fmtx_write_reg(0x01, reg9_11);
    fmtx_write_reg(0x00, reg1_8);

}
 

La funzione riceve la frequenza in MHz.KHz in una variabile float, la moltiplica per 20 (come da datasheet), la trasforma in un integer e la <sparge> nei 3 registri interessati

Fai gli eventuali adattamenti fra il C di questo codice ed il C del tuo compilatore
Serve pero' saper scrivere nei registri [ fmtx_write_reg(ADR,DATO); ] dopo aver opportunamente inizializzato la periferica I2C con l'indirizzo del modulo. Qui devi usare la TUA libreria I2C1-XXX per il tuo compilatore.

Buon lavoro again!

ps. quasi quasi me lo compro anche io quel modulino.....



"se peso cado, ma se cado non peso"
adamatj.altervista.org
fabio1977





postato il:
15.01.2022, alle ore 15:15
Lunedì provo a seguire le vostre indicazioni! Uso il pic 16f876 e uso il linguaggio mikrobasic e uso la easypic6 come scheda di programmazione. Quarzo da 4Mhz. Gli ingressi del pic che uso sono SCL è su porta C3 pin14 e SDA su porta C4 pin15.
Le resistenze di pull up sono quelle della scheda easypic6.
double_wrap




una ogni 100 livelli
una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
15.01.2022, alle ore 18:14
Tieni presente che la libreria che ho citato (e che NON ho mai usato, l'ho solo letta!) mette a disposizione parecchie funzioni.
Alcune sono richiamate nella funzione di inizializzazione del modulo.

void fmtx_init(float freq, country_type country) {
 i2c_init();
 fmtx_set_freq(freq);
 fmtx_set_rfgain(4);
 fmtx_set_pga(PGA_0DB);
 fmtx_set_phcnst(country);
 fmtx_set_xtal();
}

altre sono invece disponibili per l'uso
 
void fmtx_set_au_enhance(void)
void fmtx_set_alc(u8 sta)
void fmtx_pa_external()
void fmtx_set_sl(void)

A qualcosa serviranno pure se l'autore le ha previste.....



"se peso cado, ma se cado non peso"
adamatj.altervista.org
fabio1977





postato il:
18.01.2022, alle ore 14:25
Bo! A me non funziona nulla! Non legge nessun registro e non ci scrive nei registri! Io lascio perdere tanto vedo che è tutto inutile! Non conosco neanche il linguaggio che avete postato! Grazie lo stesso.
fabio1977





postato il:
19.01.2022, alle ore 14:49
Insomma nessuno riesce a dirmi come far funzionare questo dannato integrato con un linguaggio in mikrobasic...almeno due righe di programma per far cambiare la frequenza...
fabio1977





postato il:
20.01.2022, alle ore 18:54
Niente.....discussione morta qui....va be!
double_wrap




una ogni 100 livelli
una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
20.01.2022, alle ore 20:53
Abbi pazienza, ma i pic NON sono plug&play e serve lavorarci con (parecchio) impegno,
1) ti ho postato una funzione che imposta la frequenza sul suo modulo leggendo e scrivendo i tre registri interessati
2) il linguaggio non e' quello del mikrobasic ma non serve molto per vedere che le variabili di tipo <u16> ed <u8> al 99% sono del tipo <unsigned int> ed <byte>
3) idem per gli gli operatori &,|, ~ che sono universali cosi come l'operatore << e >>
4) visto che usi un modulo che lavora in I2C DEVI saper gia' usare le funzioni che inizializzano l'indirizzo e poi leggono e scrivono uno o piu' bites e che DEVONO essere presenti nelle librerie del tuo compilatore, altrimenti come ci lavori in I2C (puoi sempre scriverle tu ex novo, ma di solito sono gia' pronte):
5) le funzioni usate sono appunto <fmtx_read_reg> e <fmtx_read_reg> che nella libreria del tuo compilatore avranno pure un qualche nome anche se diverso
6) finchè non riesci a leggere e scrivere un singolo registro e' inutile che tenti di scrivere dei bit sparsi su 3 registri

Ho cercato di aiutarti ma anche devi metterci del tuo: piu' che morta questa sembra una discussione fra sordi...
Buon proseguimento!



"se peso cado, ma se cado non peso"
adamatj.altervista.org
fabio1977





postato il:
21.01.2022, alle ore 18:34
I2C1_INIT(100000)
I2C1_START()
I2C1_WRITE(0x7c)
I2C1_WRITE(0x00)
I2C1_WRITE(0x10)
I2C1_stop(0x7c)

Questo codice che dovrebbe servire a cambiare i parametri del registro 0 non fa un bel niente e non fa niente neanche se cambio un altro registro!
double_wrap




una ogni 100 livelli
una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
24.01.2022, alle ore 11:58
Prova a leggere e scrivere i registri di un RTC (va bene un modulo con un DS1307)

Nel tuo compilatore ci saranno di sicuro le librerie per gestirlo e che contengono le istruzioni per leggerne e scriverne i registri. L'indirizzo I2C del DS1307 e' 0x68 seguito da 1 per lettura e 0 per scrittura
pagina 12 del datasheet:
The slave address byte contains the 7-bit DS1307 address, which is 1101000, followed by the direction bit (R/W), which is 1 for a read.

https://datasheets.maximintegrated.com/en/ds/DS1307.pdf

Quando sarai riuscito ad impostare l'ora ed a leggerla, usa le istruzioni che funzionano per leggere e scrivere i registri del KT0803L (il cui indirizzo I2C e' 0x3E <0111110R/W>



"se peso cado, ma se cado non peso"
adamatj.altervista.org
segui questo thread con grixFC, per questa funzione devi aver installato il software grixFC

torna su
     

Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito




 







 
 
indietro | homepage | torna su copyright © 2004/2024 GRIX.IT - La community dell'elettronica Amatoriale