SidBerry2 – enhanced Raspberry Pi 6581 SID player

I post here the great work of Davide aka Thoroide (thoroide@gmail.com). He took my Raspberry Pi SID player project and enhanced it creating SidBerry2. It features a new power stage, a better audio output stage and much more:

Here the original post:

Time ago, I recovered a 6581 SID chip from a dead C64, and then I wondered if you could connect it to an Arduino or RaspberryPi.

I have done several researches, finding various projects, most of them abandoned. Having a Raspberry card on which I was doing other work, I chose the SIDBerry project by Gianluca Ghettini
That seemed the easiest.

First of all I have slightly changed the hardware part. The original hardware was pretty basic, although perfectly functional.
To do this, I got a similar project schematic created for Arduino platform called RealShield https://github.com/atbrask/RealSIDShieldand I took some parts in order to design a more powerful version of SidBerry.

First I got a component to generate +12V from 5V (MC34063A) of which you can see the functional diagram taken from the datasheet. Starting from this schematic a proper component value were calculated in order to obtain an increase of the voltage. The original circuit generates the +12V only using MC34063A, but this require some precision resistors on feedback, so I preferred to generate an higher voltage (+ 18V / + 20V) and then using an linear regulator 78L12 to be sure that the 12V was accurate. This to avoid the premature dead of MOS6581 chips, that can burn easily if the voltages are not accurate.

image001

If you don’t like to make a Step-Up with spare components, you can easily buy an already done DC/DC like http://uk.rs-online.com/web/p/isolated-dc-dc-converters/6895015/

image003

The second modification is about the audio output stage, creating one very similar to the original C64. In RealSIDShield, the network is a bit more complex, but the stage is a simple transistor amplifier.

image005

For all remaining digital connections i use the SIDBerry original schematic.

Software

For software part I done a step by step guide to make a working SIDBerry code, starting with a clean jassie image and a RaspberryPi 3.

I started with a clean image, jessie, in particular mine was the 2016-09-23-raspbiam-jessie.zip downloaded directly from the official source.

I followed this guide for a complete update of the fresh installation. https://www.raspberrypi.org/blog/introducing-pixel/

Next configure a static IP for easily remote connect the RPI, editing the file dhcpcd.conf
sudo nano /etc/dhcpcd.conf and added at the end these following lines:


interface eth0
static ip_address=[your preferred fixed IP]/24
static routers=[your preferred gateway]
static domain_name_servers=[your preferred DNS1][your preferred DNS2]

Then I activate a VNC server to easily remote control the raspberryPi using a following commands:


sudo apt-get install -y realvnc-vnc-server
sudo vncinitconfig -service-daemon
sudo systemctl enable vncserver-x11-serviced.service

then configure from desktop (clicking on the tray VNC icon) the preferred authentication method for access on your PI via VNC.
These steps are optional, if you prefer can use an HDMI monitor with keyboard/mouse or SSH connection.

Next you need to install a WiringPi library, to make C++ program able to control I/O resources. Use the following commands:


sudo apt-get install git-core
sudo git clone git://git.drogon.net/wiringPi
cd wiringPi
sudo ./build

If you have problems with wiringPi see this link: http://wiringpi.com/download-and-install/

So next you need to get the SIDberry sources:

Return to home dir (cd ..)


sudo git clone https://github.com/gianlucag/SidBerry
cd SidBerry

Take ownership of all files


sudo chown pi:root *

Now edit with your preferred editor the file main.cpp to fix 2 little problems:


1) add #include <unistd.h> after the line #include <sys/time.h>
2) search for \mread and replace with \nread

Now compile the sources to obtain the working executable


sudo g++ -o SidBerry mos6502.cpp SidFile.cpp main.cpp -lwiringPi

Now you can test your work using this command


sudo ./SidBerry R-Type.sid 0

where 0 is the song index of the SID file.
Each SID file my contain various song or variations that you can play changing the index.

If you like to know something more about SID file format, follow this link:
http://cpansearch.perl.org/src/LALA/Audio-SID-3.11/SID_file_format.txt

qnjvo2

Fitted protoboard on PI

image010

image011

image014

You can see a video of operating hardware here:

Next?

I don’t know when, but I would try to generate a 1Mhz clock for the SID using a PI internal timer, also can be interesting make a python GUI for the SIDBerry.

Also, but a little harder, try to change the 6502 player to allow to play a SID format that includes samples, in fact this player, actually was unable to play many famous SID+PCM song that include digitized instruments or voices. When you try to play this there are a SID format error. There are not a official documentation for this mode, and probably is not really standard.

Come continuare ad utilizzare una vecchia e costosa stampante non più compatibile con Windows 7/8/10

La stampante è uno di quei strumenti che cambi solo quando si rompe oppure… quando non è più compatibile con l’ultimo aggiornamento di Windows.

Ma spesso è frustrante dover cambiare una stampante solo perchè non più supportata dal nuovo sistema operativo, soprattutto se la stampante in questione possiede queste caratteristiche:

  1. funziona ed ha funzionato sempre benissimo
  2. è costata parecchio
  3. è di ottima qualità
  4. consuma poco inchiostro

Nel mio caso ho avuto a che fare con una stampante professionale da ufficio Develop 1650D. La stampante ha sempre funzionato egregiamente con WindowsXP, funzionava in alcuni casi ristretti su Windows7 ed un bel giorno ha smesso del tutto di funzionare dopo l’ultimo aggiornamento del suddetto sistema operativo.

529ef87ed1beb529d4026ee8ed4ab96c33430541

La stampante non ha porte Ethernet o Wifi. Ha una singola porta USB ed una porta parallela: ciò significa che deve essere collegata direttamente ad un computer.

Soluzione “semplice” è buttare la stampante da 2000 e rotti euro e comprarne una nuova: non ci piace.

 

Tentativo: utilizzo di un print server commerciale

Acquistare un printserver commerciale sembrerebbe la soluzione ottimale: il print server funge da ponte tra la stampante e la rete LAN dell’ufficio scavalcando del tutto il problema del sistema operativo.

71YFJAkgaTL._SL1280_

Purtroppo però tutti i print server in circolazione supportano solo alcuni modelli specifici di stampanti ed in genere solo quelle più recenti. Non era la soluzione ideale per questa stampante ma potrebbe esserlo per la vostra, quindi lo consiglio vivamente per evitare inutili grattacapi

 

Tentativo: Macchina XP dedicata e condivisione stampante

Una soluzione alternativa è collegare un PC WindowsXP direttamente alla stampante e condividerla in rete. Questa soluzione non ha funzionato in quanto, sebbene la stampante fosse perfettamente visibile in rete dagli altri PC Windows7, le stampe non partivano a causa dell’incompatibilità tra i driver XP  e i PC utilizzatori (Windows7).

 

Soluzione finale: print server ad-hoc

La soluzione è consistita nel disaccoppiare utenti Windows7 e stampante tramite l’utilizzo di una stampante virtuale PDF. Un PC WindowsXP dedicato gestisce la stampante reale via USB e al tempo stesso condivide in rete una stampante virtuale PDF. I PDF (le stampe degli utenti) vengono creati sul disco della macchina XP all’interno di una directory specifica che funge da coda di stampa. Un programma ad-hoc realizzato in .NET C# (printserver.exe) e residente nella macchina XP provvede a scodare i file PDF dalla directory e a stamparli sulla stampante reale.  Il programma è avviato automaticamente e non richiede alcun intervento manuale per funzionare.

Screen shot 2015-11-02 at 5.38.30 PM

Lato utente il meccanismo è del tutto trasparente: in rete è visibile solo la stampante virtuale. Ogni comando di stampa verso la stampante virtuale si traduce in una stampa vera e propria sulla Develop 1650D.

Screen shot 2015-11-02 at 5.38.15 PM

Il tutto realizzato su un comunissimo PC desktop privo di mouse, tastiera e schermo. L’unica cosa da ricordare è accendere il printserver la mattina prima di utilizzare la stampante!

printserver

 

Aspetti interessanti della soluzione

Allo stato attuale i PDF vengono scodati, stampati e quindi cancellati; Nessuno però vieta di copiare i PDF in una ulteriore cartella di backup in modo da mantenere uno storico digitale delle stampe.

E’ possibile estendere il meccanismo ad altre stampanti obsolete e collegarle tutte alla stessa macchina XP; l’unico limite è il numero di porte USB e parallele disponibili (di solito 4 o 6 USB e 1 o 2 parallele).

La stampante funzionerà anche con Windows 8, Windows 10 e anche sistemi Linux e Mac.

Clicca qui per andare alla pagina di download di printserver

Telecomando universale per apricancelli a 433.92 MHz

Di recente ho dovuto comprare un set di telecomandi  (parlo del telecomando universale, quelli ad autoapprendimento) per i cancelli di casa. La procedura di solito è semplice, si prende il telecomando originale, lo si affianca a quello universale e si clona il segnale. Purtroppo nel mio caso non ha funzionato, probabilmente per una incompatibilità a livello di frequenze (433.92MHz degli universali e 433 MHz del’originale o viceversa). Il modello del telecomando originale è Elvox ET2 ZX03.

Siccome i telecomandi originali Elvox sono alquanto costosi, una soluzione è stata quella di realizzare un circuito in grado di rendere comunque compatibili i cancelli con i telecomandi universali o qualsiasi altra marca di telecomandi. Questa soluzione richiede però la realizzazione di un circuito e non necessariamente potrebbe funzionare con altri tipi di telecomandi.

Ho trovato online invece un’altra soluzione interessate, per chi non avesse il tempo di realizzare il circuito da solo e che risolve in modo definitivo il problema legato alla duplicazione del telecomando, si chiama SHEDU

shedu

Si tratta di un prodotto che permette di usare lo smartphone in alternativa al telecomando.
Visto il costo equiparabile a quello di un paio di telecomandi e l’indubbia praticità, è una soluzione interessante sia per un uso personale che per le aziende.
Molto interessanti anche alcune funzioni aggiuntive come l’apertura per prossimità e la possibilità di condividere l’accesso ad altri utenti tramite l’app stessa in tutta sicurezza (utile ad esempio per concedere ai familiari la possibilità di aprire il cancello senza acquistare nuovi telecomandi).
Attualmente è in corso una promozione che permette di ottenere degli sconti sull’acquisto per chi si registra e condivide sui social tramite il link che vi viene inviato

SHEDU è sicuramente la soluzione più pratica e risolve definitivamente il problema; per quanto riguarda invece la realizzazione di un circuito ad-hoc, occorrerà prendere un modulo ricevitore da collegare elettricamente al telecomando Elvox originale: il circuito riceve il segnale dai telecomandi universali e comanda il telecomando originale. Il telecomando originale a sua volta emette il segnale per i cancelli che quindi si aprono/chiudono come di consueto.

Il circuito scelto è RKAU2, un ricevitore con attacco molex in auto-apprendimento a 2 canali; è dotato di due relè non polarizzati (quindi semplici contatti) ideali per essere collegati ai 2 pulsanti del telecomando originale.

ricevitore

Il circuito ricevitore deve essere alimentato a 12V e non include l’antenna. L’alimentatore è facilmente reperibile, qualsiasi 12V ad almeno 500mA va bene. Per l’antenna è sufficiente un filo elettrico lungo esattamente 17.3 cm (la lunghezza d’onda a 433Mhz è 69.3 cm, quindi 1/4 di lunghezza d’onda è all’incirca 17.3 cm).

Questi sono i contatti del circuito ricevitore:

ricevitore_schema

I pulsanti P1 e P2 servono per la programmazione.

Ho quindi collegato il circuito ricevitore al telecomando, collegando tra loro i contatti dei 2 relè (CN1 e CN2) ai due pulsanti del telecomando Elvox originale. Sia il circuito ricevitore che il telecomando vengono alimentati dallo stessa fonte a 12V. Questo lo schema elettrico finale:

remote

Il circuito finale, una volta realizzati i collegamenti, si presenta cosi’:

20141002_084354

Il cavetto nero è l’alimentazione, il filo in alto l’antenna. Il circuito a sinistra è il telecomando Elvox originale, quello a destra il circuito ricevente.

Tutto l’insieme è stato inserito in una cassetta plastica per esterni opportunamente alimentata. Programmando il circuito ricevente è possibile aprire/chiudere i cancelli utilizzando qualsiasi telecomando (ovviamente compatibile con il ricevitore), da quelli universali ai cloni più economici.

In questo modo è possibile comandare i cancelli sia con gli eventuali altri telecomandi originali (ne abbiamo sacrificato solo uno) che con i nuovi. In più non abbiamo dovuto modificare o sostituire i circuiti dei singoli motori dei cancelli.