WEBVTT

00:01.720 --> 00:08.920
Ora colleghiamo il display LCD al nostro microcontrollore, i chip dei driver del display Hitachi originali sono stati

00:08.920 --> 00:15.060
progettati decenni fa quando le linee di controllo a microprocessore erano ad un livello premium.

00:15.220 --> 00:19.280
Da qui il motivo per cui sono in grado di modalità forbit.

00:19.660 --> 00:27.850
E ora con l'avvento dei microcontrollori, dove l'attenzione si è concentrata sulla riduzione delle dimensioni e

00:27.850 --> 00:37.150
quindi sul numero di pin, questi display LCD sono perfettamente adatti per microcontrollori sul nostro microcontrollore avremo bisogno di

00:37.150 --> 00:45.930
quattro pin per linee dati e due pin per la linea arest e l'Elive legherà semplicemente la

00:45.930 --> 00:50.680
linea RW a terra poiché scriveremo solo sul display.

00:50.800 --> 00:59.420
Ora Port C ha 6 pin possiamo usare la porta A ha 5 avvisi non ce

01:02.730 --> 01:06.810
ne sono due Tuttavia c'è un altro

01:11.360 --> 01:18.820
avvertimento con il design specifico di questa scelta a causa delle capacità USP.

01:18.860 --> 01:22.600
Ci sono limitazioni su ciò che la penna potrebbe fare.

01:22.670 --> 01:32.470
Fondamentalmente hanno scambiato funzionalità minori per una capacità enorme di avere comunicazioni native USPO.

01:33.140 --> 01:41.930
Quando leggiamo sulla descrizione della porta un registro nel foglio dati Pick a pagina 131.

01:43.190 --> 01:45.200
Notate che cosa

01:48.350 --> 02:02.240
dice che port è una porta bidirezionale a cinque bit. L'eccezione è 0 o 1 e sono 3 che sono solo input e il bit tristate sarà sempre letto

02:02.480 --> 02:12.770
come uno ora per essere sincero mi manca questo che stavo costruendo su questo circuito successivo e mi ha fatto perplesso

02:12.770 --> 02:19.880
per il tempo più lungo perché stavo cercando di usare i nostri 0 sono un

02:19.880 --> 02:22.620
1 e un 3 come uscite.

02:22.880 --> 02:28.740
Quindi tienilo d'occhio in futuro perché ti rovinerà.

02:29.450 --> 02:36.630
Quindi possiamo usare rigorosamente la porta S. per tutto.

02:36.830 --> 02:43.390
Poiché questi pin possono essere tutti output e abbiamo abbastanza pin disponibili per il display LCD.

02:43.760 --> 02:48.660
Ma invece quello che ho fatto nel mio codice puoi scriverlo in modo diverso, ovviamente.

02:48.740 --> 02:54.860
Ho usato la porta 80 per le linee di controllo e la porta C per le linee dati.

02:54.860 --> 02:58.960
Lo schema si trova nei download in basso e diversi esempi di codice.

02:58.970 --> 03:00.340
Puoi usare.

03:00.560 --> 03:04.410
Ho una grandissima fiducia nelle tue capacità a questo punto.

03:04.430 --> 03:12.170
Quindi, se desideri modificare il modo in cui è guidato il display, puoi collegare tutte le linee alla porta C

03:12.170 --> 03:15.650
e puoi semplicemente modificare il codice di conseguenza.

03:16.210 --> 03:24.980
Ci sono alcune cose che dobbiamo rendere conto prima di costruire il nostro codice, il nostro codice è troppo veloce

03:24.980 --> 03:26.890
per il display LCD.

03:27.140 --> 03:33.550
Ora dobbiamo prendere in considerazione una parte abbastanza importante dell'elettronica digitale chiamata timing.

03:33.590 --> 03:40.850
Spesso dovremo prendere provvedimenti speciali con l'elettronica digitale soprattutto per cose come la conversione da analogico

03:40.850 --> 03:46.570
a digitale o per pilotare i carichi esterni al processore ecc.

03:47.000 --> 03:50.270
Il display LCD non è diverso ora.

03:50.300 --> 03:56.150
Questo è tutto sepolto nella scheda tecnica del display LCD in modo da poterlo leggere.

03:56.300 --> 03:58.100
Ma ti risparmierò un po 'di tempo.

03:58.100 --> 04:01.290
Ci sono tre tempi critici che dobbiamo fare attenzione.

04:01.580 --> 04:05.480
Il primo è il più veloce che possiamo scrivere o leggere sui chip.

04:05.480 --> 04:13.670
Fondamentalmente, prima che la linea Enable diventi alta, i dati sulle linee dati devono essere presenti

04:13.670 --> 04:22.230
e stabili, ovvero qualsiasi errore nel segnale deve essere livellato per almeno 200 nanosecondi, ricordate che questo è

04:22.230 --> 04:23.850
un circuito digitale.

04:24.000 --> 04:28.500
È così veloce da poter leggere i bounces sugli switch.

04:28.500 --> 04:36.810
Quindi se c'è qualche rumore sul tuo segnale può effettivamente contare quel rumore una volta che la linea del cavo diventa alta.

04:36.930 --> 04:44.850
Deve rimanere alto per almeno 450 nanosecondi per caricare il registro.

04:44.850 --> 04:50.100
Poi, come hai visto quando hai costruito il circuito di controllo manuale, ha

04:50.100 --> 04:55.590
registrato i dati sullo schermo quando hai rilasciato il pulsante quando hai rilasciato il pulsante.

04:55.590 --> 04:58.290
La linea E è andata bassa.

04:58.440 --> 05:07.650
Deve rimanere basso per almeno 500 nanosecondi prima della prossima volta che la linea può salire.

05:08.310 --> 05:11.260
Questo significa solo inviare un morso di dati.

05:11.460 --> 05:19.140
Dobbiamo prendere il nostro tempo un minimo di quattrocentocinquanta e cinquecento nanosecondi o arrotondato

05:19.140 --> 05:20.910
di un microsecondo.

05:21.360 --> 05:22.670
Ora è molto veloce.

05:22.660 --> 05:30.270
Tuttavia sul microcontrollore che era più veloce da calcolare in base alla frequenza, invertiamo il tempo in cui uno

05:30.270 --> 05:34.350
diviso per un microsecondo equivale a un milione di hertz.

05:34.380 --> 05:39.660
Quindi, per consentire alla nostra scelta di essere in grado di comunicare con il nostro display LCD, abbiamo

05:39.660 --> 05:43.260
dovuto rallentarlo perché al momento funziona a 16 milioni di hertz.

05:43.890 --> 05:46.440
Quindi abbiamo un paio di opzioni qui.

05:46.590 --> 05:53.460
La prima opzione è mettere i ritardi nel nostro programma ogni volta che scriviamo qualcosa sul display.

05:53.760 --> 06:02.790
Possiamo inserire i dati sulle linee dati, quindi inviare un high sulla linea, quindi eseguire una subroutine che ritarda semplicemente

06:02.790 --> 06:10.240
il processore per un microsecondo, quindi torna indietro e invia un minimo su ogni riga.

06:10.290 --> 06:18.330
Ora eseguiamo nuovamente la subroutine per ritardare il processore di un altro microsecondo prima di caricare le linee dati

06:18.330 --> 06:20.910
o fare qualsiasi altra cosa.

06:21.180 --> 06:26.550
Può essere noioso ma questo funziona per mantenere le cose più semplici.

06:26.550 --> 06:33.300
Andremo con l'opzione numero due perché abbiamo il pieno controllo sul microcontrollore.

06:33.300 --> 06:36.120
Ricorderai che possiamo impostare la sua velocità di clock.

06:36.540 --> 06:40.490
Abbiamo già impostato la nostra velocità di clock con il registro di controllo OSC.

06:40.650 --> 06:51.270
E se si passa a pagina 75 nei dati e la scheda tecnica selezionata è possibile visualizzare tutte le opzioni disponibili per le

06:51.270 --> 06:56.330
linee dell'orologio e come impostare l'OSC sul registro di conseguenza.

06:56.490 --> 06:59.730
Ora, ciò che faremo sarà impostare la velocità a 1

07:02.210 --> 07:08.600
megahertz. Ciò garantisce che la nostra linea di controllo Tempi soddisferà il tempo minimo per il display LCD e ci

07:08.600 --> 07:10.790
farà risparmiare un mucchio di programmazione.

07:10.790 --> 07:16.940
Questo è particolarmente vero quando si considera che non si otterranno mai uscite sulle linee dati

07:16.940 --> 07:20.770
in meno di due cicli di clock per istruzione.

07:20.990 --> 07:27.530
Quindi potresti probabilmente eseguirlo su megahertz e non avere problemi perché le istruzioni potrebbero essere eseguite solo

07:27.530 --> 07:32.020
ad un massimo di 1 milione di istruzioni al secondo.

07:33.610 --> 07:40.190
Quindi se vuoi far girare il processore a una velocità più alta puoi farlo.

07:40.210 --> 07:47.060
Ricorda che devi tenere conto delle velocità massime per il display.

07:47.410 --> 07:48.590
Quindi tutto pronto.

07:48.760 --> 07:51.110
Imposta la mia velocità di clock a 1 megahertz.

07:51.130 --> 07:57.990
Quindi quando guardo pagina 75, vedo che per ottenere un mega Hertz sull'orologio interno sul mio plettro.

07:58.000 --> 08:05.500
Ho impostato l'OSC su un bit di selezione della frequenza dell'oscillatore interno 2 1 0 1 1.

08:05.860 --> 08:10.060
Ora il bit 6 e 7 sono i moltiplicatori di clock.

08:10.060 --> 08:17.110
Quindi puoi davvero aumentare la velocità della tua scelta fino a 48 megahertz se vuoi, ma ovviamente vogliamo andare

08:17.110 --> 08:18.570
nella direzione opposta.

08:18.580 --> 08:22.210
Vogliamo rallentarlo non accelerarlo.

08:22.480 --> 08:30.780
Quindi disattiviamo i moltiplicatori inserendo zeri sui bit 6 e 7 bit zero e uno.

08:30.790 --> 08:36.640
Scegli il tipo di orologio che vogliamo utilizzare e vogliamo l'orologio interno dell'oscillatore.

08:36.640 --> 08:43.630
Quindi, abbiamo bisogno di un po 'per far sì che uno sia alto e lo zero dell'offerta non ha più importanza.

08:43.960 --> 08:49.390
Quindi da tutto ciò possiamo dedurre che dobbiamo

08:52.450 --> 08:59.540
impostare la chiamata a 0 0 1 0 1 1 1 0.

08:59.580 --> 09:08.040
Quindi il mio set di codice sarà lo stesso di prima tranne che cambierò questa linea proprio qui.

09:08.990 --> 09:18.620
E cambieremo il byte in 0 0 1 0 1 1 1 0 per impostare il nostro oscillatore su 1 megahertz.

09:18.620 --> 09:23.750
Il secondo problema di temporizzazione critico riguarda i comandi inviati al display LCD.

09:23.810 --> 09:30.640
Ricorda di impostare il display accendendolo o spostando il cursore.

09:30.740 --> 09:32.720
Ogni comando richiede tempo.

09:32.740 --> 09:40.040
Ora la maggior parte di essi richiede circa 40 microsecondi, ma alcuni come cancellare il display

09:40.880 --> 09:49.420
o spostare il cursore perché questi implicano diversi passaggi che possono richiedere da 40 microsecondi a quasi 2 millisecondi.

09:49.430 --> 09:55.040
Di nuovo non molto tempo ma nel mondo digitale è sicuramente un sacco di tempo.

09:55.040 --> 10:00.640
Quindi ogni volta che si invia un comando LCD, è necessario posticipare la foto.

10:00.890 --> 10:05.880
Mantieni le cose semplici, pianifichiamo con un ritardo di due millisecondi.

10:05.930 --> 10:14.970
Ora ricorda che abbiamo già costruito questi sottomarini di utilità ritardata, eccetto che ora abbiamo cambiato la nostra velocità di clock da

10:14.970 --> 10:22.500
16 megahertz a 1 megahertz. Quindi i nostri ritardi saranno 16 volte più lunghi dell'ultima volta che

10:22.500 --> 10:23.460
li useremo.

10:23.490 --> 10:31.670
Non c'è bisogno di ricordare che il terzo intervallo critico sul display LCD è il tempo di

10:31.680 --> 10:32.250
inizializzazione.

10:32.250 --> 10:36.030
Ora succede solo una volta, ma dobbiamo renderne conto.

10:36.210 --> 10:41.730
Ancora una volta questa informazione è nella scheda tecnica ma è molto tempo.

10:41.730 --> 10:49.320
Quando accendi il display LCD per la prima volta, i chip del driver passano attraverso una serie di passaggi per mettere

10:49.320 --> 10:50.600
tutto a posto.

10:50.610 --> 10:54.300
Ora questo ci vuole per sempre nel tempo digitale.

10:54.630 --> 10:57.990
Un minimo di 15 millisecondi.

10:57.990 --> 11:05.080
È quasi un quinto di secondo che è come start stop lì.

11:05.100 --> 11:12.150
È stato circa un quinto di secondo, anche quando hai rallentato la tua immagine fino a un misero milione di

11:12.150 --> 11:13.230
volte al secondo.

11:13.230 --> 11:20.130
Ovviamente dovrai far riposare la tua foto per non fare nulla per un po 'ad aspettare

11:20.160 --> 11:28.730
che il display LCD finisca di avviarsi quindi con questo in mente diamo un'occhiata al nostro codice di esempio sul

11:28.840 --> 11:35.460
download del codice LCD che ho inserito in alcuni commenti qui riguardo la griglia.

11:35.480 --> 11:44.450
Quelle posizioni di memoria RAM generiche che stavamo usando per il nostro programma di utilità ritardano i loop in questo codice.

11:44.450 --> 11:49.670
Useremo per le 16 marce disponibili.

11:49.700 --> 11:55.810
Quindi ho appena fatto alcune note nei commenti su quale GPS è usato per cosa.

11:55.970 --> 12:02.320
Questo è in parte anche il motivo per cui non utilizzare inavvertitamente lo stesso registro per due diversi lavori.

12:02.480 --> 12:13.200
Quindi passiamo attraverso il setup di setup ed ecco il nostro OSKAY su cui impostare l'orologio a 1 megahertz.

12:13.220 --> 12:15.190
Ora ci mettiamo al lavoro.

12:15.200 --> 12:19.360
Impostiamo la porta a come uscite.

12:19.370 --> 12:24.890
E anche se i bit da 0 a tre o solo gli input non danneggiano

12:24.890 --> 12:33.110
nulla per provare a configurarli come output e ci salva alcune righe di codice perché non tutto ciò che faccio è cancellare il

12:33.110 --> 12:38.780
Tristate un registro invece di caricare il trasferimento del registro W finita per tristare un ecc.

12:39.230 --> 12:41.940
Abbiamo creato la banca per Lache.

12:41.990 --> 12:48.950
E non dimenticare che dimenticare di cambiare banca è uno degli errori più comuni che farai.

12:49.010 --> 12:53.320
Cancelliamo tutte le uscite sulla porta a.

12:53.390 --> 12:55.770
Abbiamo solo due linee di controllo cablate nella porta.

12:55.800 --> 12:59.650
La linea di selezione Registra e la riga Abilita.

12:59.930 --> 13:03.240
Ora li impostiamo entrambi a zero per dargli il via.

13:04.580 --> 13:09.210
Ora a questo punto del programma abbiamo appena acceso.

13:09.230 --> 13:16.100
Quindi, mentre il plettro ha completato tutte queste attività, il display LCD continua a funzionare in

13:16.100 --> 13:20.060
questa vita che dura 15 millisecondi se si ricorda.

13:20.060 --> 13:28.820
Quindi abbiamo bisogno di aspettare almeno 15 millisecondi che chiamiamo la nostra subroutine di utilità ritardata

13:28.820 --> 13:32.880
che avete già familiarizzato con quaggiù.

13:32.990 --> 13:35.690
È la stessa subroutine che abbiamo usato prima.

13:35.690 --> 13:40.880
Ma tieni presente che ora utilizziamo 1 megahertz e non 16 megahertz.

13:40.880 --> 13:45.380
Quindi questo intero ritardo richiede circa zero punti per otto secondi.

13:45.380 --> 13:47.790
Ora puoi cambiare questi numeri se vuoi.

13:47.810 --> 13:55.160
Ero solo pigro, avevamo solo bisogno di ritardare un massimo di 50 millisecondi se si ritardasse di più.

13:55.160 --> 13:56.560
Va perfettamente bene

13:56.600 --> 14:02.890
Quindi ho appena copiato e incollato l'utilità originale per posarlo e lasciarlo così com'è.

14:03.140 --> 14:05.390
Supera il minimo ritardo di cui avevamo bisogno.

14:05.420 --> 14:11.750
Questo è stato tutto ciò che mi importava perché non avevo fretta di mettere questo monitor LCD

14:12.380 --> 14:21.300
in funzione o in qualche modo così ritardiamo il punto zero di otto secondi e poi torniamo indietro al punto da cui eravamo partiti.

14:21.610 --> 14:31.860
Ora configuriamo la porta C come uscite e quindi impostiamo il display per la modalità forbit e quindi per la modalità di visualizzazione della

14:31.860 --> 14:32.430
linea.

14:32.640 --> 14:39.000
Ora questo è stato fatto esattamente nello stesso modo in cui hai guidato manualmente il display.

14:39.000 --> 14:43.800
Questo potrebbe essere un po 'confuso all'inizio.

14:43.800 --> 14:48.640
Basta ricordare cosa abbiamo fatto con il cablaggio.

14:48.740 --> 14:54.390
Abbiamo bit da zero a tre su Portsea collegato alle nostre linee dati.

14:54.410 --> 14:58.890
Da D a D 7 sul display LCD.

14:59.280 --> 15:04.850
Quindi quando inviamo un byte nella porta C questi quattro bit non fanno nulla.

15:04.910 --> 15:06.360
Non vanno da nessuna parte.

15:06.410 --> 15:14.320
Non sono collegati a nulla ma dobbiamo mettere il nibble superiore lì per il bene del compilatore.

15:14.630 --> 15:24.320
Questi bit qui sono strettamente segnaposto per quando carichiamo la porta C per garantire che questi quattro bit, che sono quelli importanti,

15:24.830 --> 15:29.300
vengano inviati ai bit da 0 a 3 sulla porta.

15:29.420 --> 15:37.130
Altrimenti il compilatore potrebbe confondersi e sputare errori come tu sai hey ho bisogno di 8 bit mi hai

15:37.130 --> 15:39.220
dato solo quattro parole qui.

15:43.000 --> 15:50.430
Quindi, se ricordi di configurare lo schermo LCD per la modalità di forbit, abbiamo inviato 0 0 1 0 al display LCD.

15:50.440 --> 15:57.310
Questo è stato il nibble superiore di un comando di set di funzioni esattamente come quello che abbiamo fatto con i fili nell'ultima

15:57.310 --> 16:01.000
sezione, solo che questa volta lo stiamo inviando usando la foto.

16:01.240 --> 16:09.150
Quindi inviamo 0 0 1 0 sulla porta C e quel numero è ora seduto lì.

16:09.460 --> 16:13.870
Quindi cos'altro dobbiamo fare per rendere effettiva la funzione.

16:14.350 --> 16:24.480
Dobbiamo avere la linea zero zero che dice al LCD che si tratta di un comando e quindi controlliamo la linea.

16:25.090 --> 16:29.920
Bene, abbiamo già la linea S a 0 che sta uscendo dal Porto A che abbiamo già cancellato.

16:29.920 --> 16:30.540
Destra.

16:30.970 --> 16:34.700
Quindi ora dobbiamo solo dare un impulso alla linea.

16:34.960 --> 16:43.120
Ho fatto questo con una subroutine breve un impulso freddo che è quaggiù.

16:45.420 --> 16:51.860
L'impulso la subroutine cambia banca per L. UN. per LaChaise molto importante.

16:52.050 --> 16:57.220
Fissiamo cinque in alto sulla porta otto che è la linea E.

16:57.300 --> 17:02.330
Quindi lancio due istruzioni chiamate Nessuna operazione.

17:02.460 --> 17:04.920
Questa è letteralmente un'istruzione che non fa nulla.

17:04.920 --> 17:07.640
Quindi, perché metterlo lì dentro.

17:07.710 --> 17:14.280
È perché ogni singola di queste linee richiede tempo perché il contatore del programma deve

17:14.550 --> 17:17.180
contare almeno un impulso di clock.

17:17.220 --> 17:21.230
Ho inserito queste op in rigorosamente per ritardare il processore.

17:21.360 --> 17:27.930
Solo pochi cicli di clock solo per assicurarsi che la linea Enable sia alta abbastanza a lungo da permettere

17:27.930 --> 17:29.730
la registrazione dei dati.

17:29.790 --> 17:36.990
Quindi cancelliamo un bit 5 su lache a port un registro che imposta la linea troppo bassa.

17:37.140 --> 17:44.400
Aspettiamo ancora un paio di cicli di clock solo per essere assolutamente sicuri che la linea rimanga bassa abbastanza a lungo da consentire ai chip

17:44.850 --> 17:47.930
del driver LCD di essere pronti per i dati successivi.

17:47.940 --> 17:51.640
Ora torniamo da dove eravamo rimasti.

17:51.660 --> 17:55.530
Ora abbiamo inviato il comando per la modalità forbit e pulsato la linea.

17:55.540 --> 18:02.340
Quindi ora il display è in modalità forbit ogni singolo bit di dati che inviamo ora deve andare in nibbles al livello

18:02.340 --> 18:04.810
superiore prima in basso e in secondo.

18:04.950 --> 18:13.120
Quindi siamo ancora in modalità di comando e ora invieremo i due livelli precedenti nel nostro circuito di azionamento manuale.

18:13.230 --> 18:18.560
Quindi partiamo in modalità forbit e impostiamo il display su due linee.

18:19.050 --> 18:30.060
Ora ricorda che non c'è niente collegato a questi bit, quindi prima mandiamo un impulso 0 0 1 0

18:30.060 --> 18:38.140
alla linea, quindi inviamo 1 1 0 0 e poi riattiviamo la linea.

18:39.350 --> 18:46.040
Quindi vogliamo attivare il set e accendere il display e impostare il cursore su sottolineatura

18:46.070 --> 18:54.650
e lampeggiare nuovamente, proprio come facevamo prima che il comando fosse byte binario 0 0 0 0 1 1 1 1.

18:54.660 --> 18:56.250
Quindi lo inviamo in due doppi.

18:56.250 --> 18:59.030
Ecco il primo nobile.

18:59.230 --> 19:07.800
Quindi diamo un impulso alla linea poi al secondo nibble e ripetiamo di nuovo la linea.

19:07.840 --> 19:13.930
Ora abbiamo il display acceso su un cursore lampeggiante e sottolineato e ora siamo pronti per scrivere informazioni

19:13.930 --> 19:14.790
sul display.
