Emillotron – parte 2

Update 20 Giu 2022 – All parts together and translated into English
https://hackaday.io/project/185954-use-yamaha-opl2-chip-with-esp8266-emillotron

Dopo i test della periferica i2c presentati nella parte 1, passiamo alla periferica di espansione I/O SPI. Si tratta di un semplice integrato 74HC595A. L’ho usato in passato per fare un orologio digitale a valvole nixie (se vi interessa, lo trovate qui: https://ficara.altervista.org/schemi.php#dg12h) ed è molto semplice da usare. Si tratta di uno shift register con ingresso seriale e uscita parallelo/seriale e se ne possono collegare, in cascata, quanti se ne vogliono. Ecco lo schema elettrico aggiornato:

Vediamo che sono stati aggiunti i segnali di controllo per il chip Yamaha (/IC, A0, /WR, /RD, /CS) che vanno a completare la serie dei collegamenti insieme a D0..D7. Abbiamo 3 bit liberi su QF, QG e QH e probabilmente saranno usati andando avanti (per esempio, per pilotare un multiplexer analogico). Ovviamente, per rendere le cose più complicate, disponevo solo di alcuni chip in smd e così ho dovuto usare un adattatore per montare l’integrato sulla scheda prototipo. Ecco cosa è venuto fuori:

Gli integrati mancanti sono l’oscillatore principale, il chip OPL-II, il DAC e un operazionale. Notate che il modulino i2c è stato anch’esso rimosso per effettuare le prove. Per divertimento, possiamo costruire anche un piccolo DAC resistivo, che ci sarà utile per fare il test dello shift register. Il circuito è davvero elementare e si basa su una rete resistiva in cui ogni ramo ha valore doppio del precedente:

Questo è un DAC a 4 bit, per cui potremo avere 16 livelli analogici, da 0 a 5V (tensione di alimentazione dell’integrato HC595). Il bit D3 ha una resistenza da 1K, D2 ha 2K (1K+1K), D1 ha 4K (1K5+1K5+1K -volevo fare 2.2K+1.8K ma non avevo la 1.8k-) e infine D0 ha 8K (6.8K+1.2K). Se volessimo aggiungere un quinto bit (dal lato meno significativo, traslando gli altri bits a sinistra) dovremmo usare una 16K.

Bene, scriviamo un semplice programmino di prova:

// Test SPI I/O expander (output mode)

#include <SPI.h> // this is for HC595

int LCK = 15; // GPIO15 - LCK (latch clock)
// note GPIO14 default SCLK \
// note GPIO13 default MOSI | ESP8266 in SPI mode
// note GPIO12 default MISO /

uint8_t wdata; // data write to shift register

void setup()
{
  delay(250); // power-on delay
  pinMode(LCK, OUTPUT); // set output mode for HC595 _/ LCK
  digitalWrite(SS, HIGH); // disable Slave Select
  SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV64, MSBFIRST, SPI_MODE0));
  SPI.begin(); // begin with HC595
}

void loop()
{
  digitalWrite(SS, LOW); // low on latch clock
  SPI.transfer(wdata++); // send data and increment
  digitalWrite(SS, HIGH); // high on latch clock (rising edge latches)
  delay(5); // cycle time
}

Una volta trasferito il programma sul modulo ESP8266 D1 mini, potremo andare a misurare le uscite dello shift register, con il solito led del circuitino mostrato nella parte 1, oppure potremo usare il DAC resistivo collegandolo alle uscite QA, QB,QC e QD (dove QA è il bit 0). Se abbiamo un oscilloscopio, vedremo questo:

Il nostro DAC elementare non è perfetto, ma non è male! Tenete presente che NON è quello che si collega al chip OPL-II ! Questo serve solo per fare un test delle linee di uscita di una logica HCmos. Qui finisce la parte 2. Ora abbiamo tutte le linee che servono per pilotare il chip OPL-II e sembrano funzionare. Il prossimo passo sarà quello di mettere tutto insieme e provare a scrivere e leggere i registri interni, nell’intento di generare i primi suoni. Naturalmente, per far ciò, dovremo completare anche un minimo di parte analogica. Lo schema della “base di lavoro” sarà presentato nella parte 3 dell’articolo. A presto…