Jump to content
PLC Forum


Sign in to follow this  
marco88

seriale TM1637 display driver

Recommended Posts

marco88

Un saluto a tutti i membri del forum e buona Pasqua.

 

Mi ritrovo a dover programmare un piccolo driver in c per stm8s con il fine di scrivere un display 4-digit con integrato TM1637.

Forse è l'orario, ma trovo il datasheet (link) dell'integrato veramente poco chiaro.

Ad ogni modo, ho creato delle primitive per mandare lo start, un byte, e lo stop.

 

          displayDataSendStart();
            displayDataSendCommand((unsigned char)(0b10101010));
            displayDataSendEnd();
            displayDataSendStart();
            displayDataSendCommand((unsigned char)(0b01010101));
            displayDataSendCommand((unsigned char)(0b11001100));
            displayDataSendEnd();

la funzione displayDataSendCommand() che ho creato, trasmette il byte in argomento a partire dal bit meno significativo al più significativo.

Ho messo queste righe in un loop, per vedere con l'oscilloscopio cosa esce e mi sembrano funzionare correttamente. (primo byte sds0005.jpg ; secondo e terzo byte sds00006.jpg).

Il clock non è il massimo (la board non ha il quarzo) ma dovrebbe funzionare. Quando il fronte del clock è in salita i bit mi sembrano corrispondere. (sonda viola clk, sonda gialla dio)

Detto questo, se mi confermate l'output corretto delle due funzioni, mi chiedevo se qualcuno di voi sapesse darmi due dritte.

Ad esempio non ho capito se i bit bisogna mandarli dal LSB al MSB o viceversa.

Inoltre non ho per nulla chiara la sequenza di byte, start e stop da mandare per scrivere il singolo segmento, della singola griglia. Ne tanto meno per regolare la luminosità dei led.

 

Ho fatto diverse prove ma sono riuscito solo a scrivere cose senza senso.

Accetto volentieri consigli di ogni tipo.

 

Grazie a tutti.

 

SDS00005.jpg

SDS00006.jpg

Edited by marco88

Share this post


Link to post
Share on other sites

marco88

Ok, credo di aver capito come inserire le impostazioni relative alla tabella "Data command setting". Non vorrei aver chiesto delle cose troppe ovvie. Ad ogni modo, se trovo delle soluzioni prima di ricevere delle risposte le condividerò per eventuali lettori interessati.

Share this post


Link to post
Share on other sites
marco88

Ciao di nuovo,

scusate, forse non dovevo nemmeno aprire il topic. Ad ogni modo ho avuto l'illuminazione notturna ed ho risolto.

Il mio errore consisteva nell'interpretazione delle tabelle sul datasheet.

Ad esempio la seguente tabella:

image.png.0db1740d20262a54882f206416cf700d.png

 

Alcuni campi sono vuoti e non mi ero reso conto che era una semplice descrizione dei singoli bit. In pratica se volessi dire al controller di scrivere il display, tramite indirizzo fisso, in modalità normale devo avere:

b1-b0 = 00; b2 =1; b3 = 0; b5-b4 = indifferente; b7-b6 = 01;  che complessivamente diventa 0b01xx0100.

I comandi di questa tabella si chiamano "data command" e si distinguono tramite la configurazione dei b7-b6 = 01.

Si hanno anche:

"display control command"  b7-b6 = 10

"address command" b7-b6 = 11.

Per accendere i segmenti invece si invia un byte i cui bit posti ad 1 indicano quale segmento si deve accendere. Ad esempio se si trasmette 0b00001111 si accenderanno i segmenti a-b-c-d. (per la posizione dei segmenti basta leggere il datasheet a pagina 8 )

 

Ad esempio per scrivere 1234 ho inviato la seguente sequenza:

 

START

0b01000100 //scrittura-fixAddress-NormalMode

END

START

0b10000000 //off display

END

START

0b10001000 //on display

END

START

0b10001111 //luminosità massima

END

START

0xC0 //indirizzo dei primi 7 segmenti

0b00000110 // segmenti bc numero 1

END

START

0xC1 //indirizzo dei secondi 7 segmenti

0b01011011 // segmenti abdeg numero 2

END

START

0xC2 //indirizzo dei terzi 7 segmenti

0b1001111 // segmenti abcdg numero 3

END

START

0xC3 //indirizzo degli ultimi 7 segmenti

0b1100110 //segmenti bcef numero 4

END

 

Ciao a tutti

Share this post


Link to post
Share on other sites
Livio Orsini

Comunque, avendo anche dato la soluzione, potrebbe essere d'aiuto a qualcun altro.

Share this post


Link to post
Share on other sites
_angelo_

eh, datasheet di questi display sono spesso piuttosto complessi da decifrare, io in genere cerco un codice d'esempio per quel display specifico piuttosto che lavorare da datasheet. E' in genere la via piu rapida.

Edited by _angelo_

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

×
×
  • Create New...