Vai al contenuto
PLC Forum


seriale TM1637 display driver


marco88

Messaggi consigliati

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

Modificato: da marco88
Link al commento
Condividi su altri siti


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.

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

  • 4 months later...
del_user_97632

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.

Modificato: da _angelo_
Link al commento
Condividi su altri siti

Ospite
Questa discussione è chiusa alle risposte.
×
×
  • Crea nuovo/a...