RoboClock: alarm clock with ringing glass

I built this clock some years ago (in the 2005). It was a present for my son that has difficulties to wake-up in the morning. I decided to create a new kind of ringer, using a glass, a small cc motor and two small rubber balls tied to the motor axis. As cointainer, I used 6 “jewel case” for CDs and a lot of glue 🙂 as you can see in the picture below.

roboclock

There are 12 leds for the hours and 12 for minutes, this means that they advance at every 5 minutes boundary. I think this is sufficient ; personally, I never say: “are twelve past ten”, but use an approximation like “are ten past ten” or “a quarter part ten”, depending from the minute (and… normally I say it in Italian, my native language). This clock uses always a defect approximation, but you can modify the C source to create your own version. The control buttons are for setting the current time, the alarm time and to stop the ringer. In the schematic there is a NiCd battery (4.8V) that recharges at very low current. This just in case the power fails ; an alarm clock MUST work even if there is no supply. Obviously, today the NiCd rechargeable batteries are obsolete, but you can modify the circuit (included in the downloadable file) to change the part used for charging. Also note that the microcontroller used for this project is the AT90S2313, that’s obsolete. You can simply interchange it with the modern and active ATtiny2313 ; remember to adjust the internal fuse pattern in order to achieve the external Xtal clock running (at 4.096 MHz).

The downloadable file ef093.zip contains:
– root_1_1.pdf , the electric schematic, page 1
– root_1_2.pdf , the electric schematic, page 2
– tn_roboclock.jpg , the picture of the roboclock realized by me
– a093mio.hex , the hex file ready to be programmed into the micro
– main.c , the ‘C’ source file for this device

General purpose infrared remote control receiver with RS232 output

This circuit, based on popular micro ATtiny2313 from Atmel, can receive signals transmitted by an infrared remote control using the NEC protocol (or similar) with 32 bits of data. The received infrared stream is converted to ASCII string and transmitted on the RS232 port with format 19200,N,8,1. Power supply is taken directly from the PC serial port, if you activate the DTR or/and RTS lines. To test the circuit you can use the standard Windows HyperTerminal program.

148pic

The circuit transmits on RS232 three types of informations :
1) the character @ at micro reset and then every 5 seconds of inactivity (no signal received by the infrared sensor)
2) a string of 8 hexadecimal ASCII characters preceded by < and followed by >
3) the character # if you continue to hold down a button on the remote control, with a period given by the repetition rate of the remote control (100/200 mS approx.)

A typical string may be something like this : @@@@<00FF00FF>## where the first 4 characters @ means that there was no activity on the infrared sensor for about 20 seconds, <00FF00FF> is the key code received from remote and ## indicates that the key was pressed for 200/400 milliseconds.

Want to take a look at C source for this program ? Click here

To burn the micro, I used the freeware version of SP12 for WinXP or Win2K.
The batch files to program the micro and the fuses that are included in zip file, are tailored for this software (you can find it easily with a google search).

If you have other tools for micro programming, the fuses configuration for the application described is : Ext = 0xFF High = 0xCB Low = 0xEC

The downloadable file ef148.zip contains :
– schematic.pdf – the electric schematic in PDF format
– top.pdf – the PCB layout in 1:1 scale
– topprint.pdf – the components mounting map
– irrx.hex – the HEX file to burn the micro
– wrFuses.bat – the batch file for micro’s fuses programming
– wrProg.bat – the batch file for micro’s memory programming
– 148pic.jpg – the picture of the working circuit

This circuit was designed and programmed by me on 2008 Nov 08 ; it was published on my old sites, then removed when I closed that sites and now is here (to stay)  😉

Scrolling text on Oscilloscope (ONLY ONE COMPONENT)
Scritte scorrevoli su oscilloscopio (UN SOLO COMPONENTE)


ef140avi di robotop

Scritte a scorrimento su oscilloscopio con un SOLO componente, il micro PIC16F628A. I caratteri da visualizzare vengono memorizzati in EEPROM (codici ASCII da 0x20 a 0x5F cioè numeri, lettere maiuscole e caratteri speciali). La prima locazione di EEprom con il valore 0xFF è considerata la fine del testo scorrevole. L’ultima locazione di EEPROM (indirizzo 0x7F) contiene la velocità di scorrimento (n * 20 mS). La configuration word per questa applicazione (locazione 0x2007) vale 0x3F34. Una volta programmato il micro tramite il connettore ICSP, cortocircuitare i pin VDD e VPP con un ponticello (reset collegato a Vdd). L’oscilloscopio andrà settato per asse X a 2 mS/div e asse Y 1V/div. I caratteri visualizzati in un’unica schermata sono 10.

Il file disponibile per il download ef140.zip contiene il file oggetto .hex per programmare il micro ed il file sorgente main.c.

:: Scrolling text on oscilloscope, built with only one component: the Microchip PIC16F628A. The characters to be displayed are stored in EEPROM (ascii codes from 0x20 to 0x5f so numbers, capital letters and special characters). The first Eeprom location with 0xFF value is considered as end of text. The last Eeprom location (addr 0x7F) contains the scrolling speed in 20mS steps. The configuration word for this application (address 0x2007) is 0x3F34. After programming the micro via the ICSP connector, place a jumper between the pins VDD and VPP (reset input tied to Vdd). The oscilloscope will be set for 2mS/div on X axis and 1V/div on Y axis. One full screen contains 10 characters.

The downloadable file ef140.zip contains the object file (Hex) to program the micro and the main.c source file.

*** added 4 Sept 2009 *** Note:
When programming the micro, verify the configuration word (0x3F34) and remember that you MUST write some character to earom memory ; try with this data starting from earom address 0x00 : 0x49 0x54 0x20 0x57 0x4F 0x52 0x4B 0x53 0x20 0x41 0x54 0x20 0x45 0x4E 0x44 0xFF then write at address 0x7F: 0x0A (that’s decimal 10 * 20 mS scrolling speed). If the scrolling speed is too fast, increment the number in location 0x7F.
May be trigger level adjustment will be needed on the oscilloscope, in order to synchronize the scrolling text. The text field is preceded by a single sync pulse. Adjust the trigger level to make the text field stable. In many oscilloscopes, this will be done automatically, but some old one (like mine) will require a manual level adjust. Note that this circuit DOESN’T WORK with some digital oscilloscopes, due to the dot’s visualization method.

ef140sch The full schematic
ef140pic The prototype

Modificare le Env_Variables senza ri-flashare tutto

Ho ricevuto una domanda tramite la form per l’invio dei files:
“… Dopo modifiche software e hardware mi è venuto un dubbio che ho appena postato:
How can I update env_boot without flashing all the system?

As of is so difficult to find the correct number for our tablet we have to try many time…but is really necessary to flash completely your tablet or is possible to change only env_boot?
I don’t know…for example with an empty wmt_scriptcmd (?)

Thanks
Marco

Tu hai idea se sia possibile? …”
Rispondo a Marco: le “environment variables” possono essere modificate agendo con un apposito comando del programma U-Boot ; naturalmente per poter usare il programma, bisogna collegare un terminale seriale. Raccomando la lettura di questo articolo per “entrare in argomento”. Aggiungo che il file wmt_scriptcmd può effettuare le stesse operazioni, cioè è possibile crearne uno in cui si settano solo le env_variables e non si fa niente altro. Il programma U-Boot, infatti, come prima operazione va a vedere se c’è una MMC (la microSD) inserita nello slot, poi – se c’è – verifica se all’interno è contenuto il file wmt_scriptcmd ed eventualmente esegue le varie istruzioni programmate. E’ da notare che il file wmt_scriptcmd NON è un semplice file di testo, perché contiene all’inizio uno speciale “header” con un codice CRC per verificare che sia compilato correttamente e sia in grado di lavorare sul sistema su cui lo si sta lanciando. Partendo da un file di testo, si può utilizzare il programma mkimage.exe per ottenere il file idoneo ad essere eseguito sulla microSD.

Modificare le env_variables da terminale seriale.
Una volta entrati in connessione con il programma U-Boot, per cambiare una env_variable basta dare il comando setenv ; per esempio, se vogliamo cambiare il tempo di bootdelay, basterà scrivere setenv bootdelay 3 (da notare che in tutti i comandi setenv NON deve essere scritto il segno “=”, anche se si sarebbe indotti a farlo perché il comando printenv lo mostra a fianco della variabile ; esempio: bootdelay = 3). Con questo comando diciamo al sistema che il ritardo al boot (quello che ci permette di fermare l’autostart) sarà di 3 secondi. Per salvare questa variabile in modo permanente, basterà dare il comando saveenv ; per verificare le modifiche e per avere la lista di tutte le variabili memorizzate sulla memoria SPI flash (sì, è lì che vengono memorizzate) si potrà dare il comando printenv.

Così come per la variabile bootdelay, qualsiasi altra variabile può essere modificata nello stesso modo ; resettando il tablet, il successivo boot avverrà con i nuovi valori delle variabili salvate. Attenzione: se si scrivono valori “a casaccio” oppure semplicemente errati, si corre il rischio di rendere il tablet “un mattone” (a brick) e perciò è imperativo conoscere ciò che si fa, prima di operare ! Esiste anche un modo per eliminare una delle env_variables : basta scrivere il comando setenv e il nome della variabile, senza assegnare alcun valore. La variabile sarà eliminata. Naturalmente, anche questo comando va usato con ESTREMA cura 🙂

Using Android tablet as SIRC remote control (#2)

This is my second program to use a tablet as a remote control. The first one (read here for additional infos) was based on a simple IR-Led plus resistor, placed on the “hidden” serial port present on the tablet’s dongle. Such solution was very cheap, but needed for some firmware modding and and for dongle opening, to solder wires on (sometimes) difficult points. So, I modified the software (and the hardware) to make it easier to install on every “original” Android tablet. The only mandatory request is that the tablet must have a “driver” for USB to RS232 interfaces. I tried with units based on popular PL2303 chip (from Prolific) or CP210x chips (from Silicon Labs) and both were detected (as ttyUSB5). The whole system is shown in the picture below :

Note that the “dongle” is open, but it’s only ‘cause all my devices are always “under testing” 🙂 . You don’t need to “look inside”, just plug the USB to RS232 interface in the USB socket and go. Note that the interface shown in the picture is based on PL2303 chip. Obviously, the USB to RS232 isn’t enough to send SIRC commands to your TV. You must build (or ask to a friend to build for you) this VERY SIMPLE interface :

As you can see, there is one DB9-F connector (for RS232), one resistor, one IR-Led and one diode. With such components, I can control my Sony Bravia TV from up to 1.5 meters distance (aiming the receiver spot). If you add some active components (transistors), that distance can be widely enlarged.

Well, now let’s look at the software. When you install the apk on your tablet and start the program, you will receive a screen like this :

The program was written for 800×480 screen tablets, landscape orientation. For my tests I used a LAVA 7″ (original firmware) tablet. This tablet recognized the USB to RS232 interface and assigned the /dev/ttyUSB5 name to it. My program, actually, uses this name as fixed setting. It will NOT work if the interface is recognized with another name (you will receive an error). Obviously, this can be modified, but I will do it in a next release.

In the “display” box, you can see “cmd: 21” ; this is the default command the device will send to your TV when you touch the button “Send”. This command is the TV-On or TV-Off. If you want modify the command, for example to send a Channel+, type on the numeric keys “16” then touch “Set” and your display will show “cmd:16”. Now, touching “Send” will send the command to your TV that will ( if powered-on ! ) skip on next channel. The “Can” key will erase a bad typed number. Note that this behaviour isn’t particular “user friendly”, just ‘cause I developed the program as a “tool” for my experiments. Not a problem to write some “fixed” keys, more user friendly  🙂

For a list of available commands, you can take a look at the following picture (the red rectangle at the right) :

Note that all the images in this article can be enlarged clicking on the miniatures.

Finally, the apk to be installed can be download directly from this link. It doesn’t exists on “the market”, ‘cause I don’t like that way to distribute software. I think it’s too monopolistic way and I don’t agree with such terms. So, the disclaimer is : TRY THIS PROGRAM AT YOUR OWN RISKit’s my original work, and is not certified or approved by others than me 🙂

ASUS tablet TF101 bootstrap

My son has a tablet… while I have all low-cost clone devices, he has an expensive Asus TF101 model. Obviously, it wasn’t purchased by me 🙂 but has been received as birthday’s gift. Well, this tablet is fast, powerful, elegant, really better than the ones I own. But now there is a problem. As usual, the tablet was connected to the Internet and received, automatically, a firmware upgrade. After that firmware upgrade, the tablet WON’T TURN ON anymore. If you turn it off (not suspend), you can’t turn on again, even pressing the button for two o three minutes. After a lot of @@##@@ to the upgrade authors, I went on the Internet, looking for a “forum” and for some info about this. The info was that ASUS knows the problem and in Taiwan there are technicians working on this.

The tablet (after a lot of tests) can be powered ON again if is connected via USB to a PC or to the charger. Well, isn’t completely dead… but I can’t connect to the charger while on the road and also I don’t want to take with me a PC just for starting the tablet ! So I realized this small tool that is my bootstrap device 🙂

As you can see, it’s simply a 3V battery (CR2025) connected to one USB plug. That’s all. With the tablet off, insert the usb cable into this device, then press the tablet’s power-on button… The tablet will start 🙂 Ok, remove quickly the “bootstrap” circuit to avoid any current flowing from the tablet into the battery (that is NOT rechargeable) and you have done. In the next picture, the device has been fully covered by insulating tape. Much more secure and professional 😉

Le gioie di Javascript #2

Passiamo a due nuovi concetti, molto importanti : uno per il linguaggio Javascript e precisamente l’ array, e uno per il tag div dell’html e precisamente la proprietà z-index. Prima di iniziare a parlarne, vediamo una piccola “demo” di come questi due concetti possano essere applicati. Cliccando su questo link si aprirà una pagina del browser con quattro “fantasmini” che si muovono sullo schermo…

Di seguito, il listato del programma Javascript (demo2.js) :

//<!-- javascript demo #2 - Emilio Ficara 2012
var i,id,timer; // definizione variabili per indice oggetti,identificatore oggetti,timer
var xpos,ypos,xstep,ystep,xsize,ysize; // definizione variabili posizione, spostamento, dimensioni

  xpos = new Array(); // crea un array di posizioni X per i vari oggetti
  ypos = new Array(); // crea array per posizioni Y
  xstep = new Array(); // crea array per passo spostamenti X
  ystep = new Array(); // crea array per passo spostamenti Y
  xsize = new Array(); // crea array dimensione X oggetti
  ysize = new Array(); // crea array dimensione Y oggetti

  xpos[0] = 0; xpos[1] = 160; xpos[2] = 320; xpos[3] = 480; // posizione X iniziale per 4 oggetti  
  ypos[0] = 0; ypos[1] = 120; ypos[2] = 240; ypos[3] = 360; // posizione Y iniziale
  xstep[0] = 3; xstep[1] = 3; xstep[2] = 3; xstep[3] = 2; // passo spostamenti X
  ystep[0] = 2; ystep[1] = 2; ystep[2] = 2; ystep[3] = 3; // passo spostamenti Y
  xsize[0] = 64; xsize[1] = 48; xsize[2] = 80; xsize[3] = 128; // dimensioni X
  ysize[0] = 64; ysize[1] = 48; ysize[2] = 80; ysize[3] = 128; // dimensioni Y

  NewStep(); // esegui la funzione per la prima volta (dopo verrà richiamata da timer)

function NewStep() // nuovo step spostamento oggetto mobile
{
  for(i = 0; i < 4; ++i) // fai andare la variabile i da 0 a 3 con incremento di 1
    {
    xpos[i] += xstep[i]; // nuova posizione X oggetto [i] di array
    ypos[i] += ystep[i]; // nuova posizione Y oggetto [i] di array
    if(xpos[i] > (document.body.clientWidth -xsize[i]) || xpos[i] < 0) // se oggetto [i] oltre il bordo destro o sinistro
      {
      xstep[i] = -xstep[i]; // inverti lo step di spostamento orizzontale per l'oggetto [i]
      xpos[i] = xpos[i] +xstep[i] +xstep[i]; // esegui lo spostamento due volte (era andato già oltre)
      }
    if(ypos[i] > (document.body.clientHeight -ysize[i]) || ypos[i] < 0) // se oggetto [i] oltre il bordo superiore o inferiore
      {
      ystep[i] = -ystep[i]; // inverti lo step di spostamento verticale per l'oggetto [i]
      ypos[i] = ypos[i] +ystep[i] +ystep[i]; // esegui lo spostamento due volte (era andato già oltre)
      }
    id = "L"+i; // assegna identificativo L0..L3 per l'oggetto che vogliamo muovere
    document.getElementById(id).style.top=ypos[i]+"px"; // assegna la nuova posizione verticale all'oggetto [i]
    document.getElementById(id).style.left=xpos[i]+"px"; // assegna la nuova posizione orizzontale all'oggetto [i]
    }
  timer = setTimeout("NewStep()",20); // attiva timer per eseguire di nuovo la funzione NewStep tra 20 mS
}
//->

e della pagina html usata come “contenitore” (demo2.htm) :

<html><head><title>Javascript demo #2 - Emilio P.G. Ficara 2012</title></head>
<body bgcolor="#FFFFFF">
<div id="L0" style="position:absolute; z-index:1">
 <img src="img/sprite0.png">
</div>
<div id="L1" style="position:absolute; z-index:2">
 <img src="img/sprite1.png">
</div>
<div id="L2" style="position:absolute; z-index:3">
 <img src="img/sprite2.png">
</div>
<div id="L3" style="position:absolute; z-index:4">
 <img src="img/sprite3.png">
</div>
<script src="demo2.js"></script>
</body></html>

Possiamo notare, nel listato demo2.htm, la presenza di 4 tag div, ognuno dei quali ha un proprio identificativo ( id=”L0″ .. id=”L3″ ) e la proprietà z-index di valore diverso; in questo “giochetto” i diversi valori di z-index determinano quale oggetto è “in primo piano”, quale in “secondo piano”, eccetera. Lo z-index può essere considerato come un foglio trasparente su cui appiccichiamo un adesivo che è il nostro oggetto. Facciamo un esempio : i quattro “fantasmini” che vediamo nel gioco hanno ognuno un numero disegnato sopra, da 1 a 4, che corrisponde al valore di z-index che è stato assegnato al tag div che li contiene. Ho usato questi numeri per rendere più chiare le cose. Se ci fate caso, quando i fantasmini si “incrociano”, qualcuno rimane visibile, mentre un altro viene “nascosto dietro”. Questa è la funzione z-index. L’oggetto che ha z-index = 4 (il fantasmino arancione) è sempre visibile, cioè, in caso di “incroci”, copre sia il fantasmino 1, sia il 2, sia il 3. A sua volta, il fantasmino 3 rimane visibile se incrocia il 2 o l’1. Insomma, è come se avessimo i nostri quattro fogli trasparenti sovrapposti, ognuno con il suo adesivo appiccicato sopra, e muovessimo i singoli fogli : se chiamiamo “z-index = 4” il foglio in cima agli altri, è chiaro che tutto quello che c’è sotto l’adesivo non sarà visibile, perché “nascosto dietro”. Lo stesso vale per tutti gli altri livelli, foglio per foglio. Con questo principio è possibile creare animazioni in cui è presente una “profondità” dei livelli, esattamente come se stessimo lavorando con diversi fogli trasparenti sovrapposti.

Per quanto riguarda Javascript, invece, abbiamo fatto uso di arrays . Se consideriamo una variabile come una “scatola” in cui mettere delle cose, allora un array è una cassettiera, con un certo numero di cassetti, così possiamo dire “prendi le camicie che ci sono nel terzo cassetto” e dare un’indicazione esatta di dove si trova ciò che ci serve. Nella demo #1 muovevamo, sul nostro quadrato di gioco, un solo oggetto: la palla, e così avevamo una sola variabile per ognuno dei parametri che ci interessavano : xpos per la posizione orizzontale, ypos per quella verticale eccetera. Ora, nella demo #2, muoviamo 4 oggetti diversi, perciò abbiamo bisogno, per ognuno di essi, delle stesse informazioni. Allora, invece di usare una singola variabile, abbiamo usato degli arrays. Così xpos non è più una singola variabile, ma una “cassettiera” in cui possiamo andare a prendere, basandoci su un indice (la posizione del cassetto) i dati necessari per un determinato oggetto. L’uso di questa tecnica ci permette di scrivere le istruzioni per muovere tutti e quattro gli oggetti in un singolo ciclo FOR ; il ciclo FOR è scritto in modo da far andare una variabile (usata come indice, ovvero il numero del “cassetto”) da 0 a 3 compresi, così da svolgere ogni volta, al suo interno, le operazioni relative agli oggetti [0], [1], [2] e [3]. Con la stessa tecnica è possibile aumentare a piacere il numero di oggetti trattati, semplicemente “allungando” gli arrays. Si noti che gli arrays possono avere più dimensioni, in quel caso, però, è meglio far riferimento a matrici. Ne parleremo in una fase successiva.

Le gioie di Javascript #1

Le gioie di javascript, scusate l’allitterazione…
Ho iniziato questo tutorial per JavaScript sulle pagine di un forum gestito da un amico ed ora che il mio blog comincia a predere forma e consistenza, ho deciso di proseguire direttamente qui. Spero di fare cosa utile.

Ho visto in giro alcune belle animazioni realizzate con programmi specializzati. Le animazioni sono un eccezionale strumento per attirare l’attenzione su un argomento di cui si sta trattando. Gli strumenti software che si utilizzano normalmente, siano quelli a pagamento, siano quelli gratuiti, hanno tantissime possibilità e permettono la realizzazione di “effetti speciali” davvero notevoli. Tutto OK.
Vorrei però focalizzare la vostra attenzione anche su un paio di formidabili strumenti gratuiti e multipiattaforma, in grado di girare su qualsiasi sistema operativo.
Questi strumenti sono :

a) il browser, in special modo Firefox che è presente su praticamente tutte le piattaforme software
b) il linguaggio di scripting Javascript

Javascript è un linguaggio semplice e potente e basta un qualsiasi editor di testi per scrivere la propria applicazione. Dove si fa “girare” un programma scritto in Javascript ? Dentro una pagina web, usando un browser. Il bello è che il programma può essere sul vostro PC o su Internet, le cose non cambiano.
La sintassi di Javascript è simile a quella del linguaggio C e comunque la rete è strapiena di esempi interessanti. Io ne aggiungo uno mio personale, per insistere nel discorso sulle risorse gratuite e liberamente utilizzabili e soprattutto per tentare di modificare l’atteggiamento comune di prendere “roba precotta” e invitare tutti a diventare “chef”, informaticamente parlando. Cominciate con un “ovetto al tegamino” per diventare grandi programmatori 🙂

Cliccando su questo link potrete trovare un’animazione minima realizzata con Javascript. Il programma è semplicissimo e si avvale del versatile tag DIV del linguaggio HTML usato per creare la “pagina” che contiene il gioco. Con Javascript è possibile modificare la posizione di una “sezione” DIV sullo schermo ; siccome in questo esempio la sezione DIV interessata contiene l’immagine di una palla, possiamo far muovere e “rimbalzare” la palla modificando, ad intervalli regolari di tempo, le coordinate X (left) ed Y (top) del relativo tag DIV. Questo è giusto un primo passo…

Per chi vuole studiare il “come è fatto dentro”, aggiungo il listato del programmino presentato (demo1.js) :

//<!-- javascript demo #1 - Emilio Ficara 2011
var id,timer; // definizione variabili per identificatore e timer
var xpos,ypos,xstep,ystep,xsize,ysize; // definizione variabili posizione, spostamento, dimensioni

  xpos = 0; // posizione x iniziale (0,0 angolo in alto a sinistra)
  ypos = 0; // posizione y iniziale
  xstep = 3; // spostamento ad ogni step sull'asse x
  ystep = 2; // spostamento ad ogni step sull'asse y
  xsize = 30; // dimensione orizzontale oggetto mobile (pallone)
  ysize = 30; // dimensione verticale oggetto mobile pallone
  gamex = 480; // dimensione orizzontale sfondo fisso (campo)
  gamey = 303; // dimensione verticale sfondo fisso (campo)
  NewStep(); // esegui la funzione per la prima volta (dopo verrà richiamata da timer)

function NewStep() // nuovo step spostamento oggetto mobile
{
    xpos += xstep; // nuova posizione x
    ypos += ystep; // nuova posizione y
    if(xpos > (gamex - xsize) || xpos < 0) // se oltre il bordo destro o sinistro
      {
      xstep = -xstep; // inverti lo step di spostamento orizzontale
      xpos = xpos +xstep +xstep; // esegui lo spostamento due volte (era andato già oltre)
      }
    if(ypos > (gamey - ysize) || ypos < 0) // se oltre il bordo superiore o inferiore
      {
      ystep = -ystep; // inverti lo step di spostamento verticale
      ypos = ypos +ystep +ystep; // esegui lo spostamento due volte (era andato già oltre)
      }
    id = "palla"; // assegna identificativo dell'oggetto che vogliamo muovere
    document.getElementById(id).style.top=ypos+"px"; // assegna la nuova posizione verticale all'oggetto
    document.getElementById(id).style.left=xpos+"px"; // assegna la nuova posizione orizzontale all'oggetto
    timer = setTimeout("NewStep()",10); // attiva timer per eseguire di nuovo la funzione NewStep tra 10 mS
}
//->

Di seguito, il istato del file demo1.htm che costituisce il “contenitore” che sarà visualizzato con un browser (preferibilmente FireFox) sia su Windows, che su Linux o su qualsiasi altro sistema operativo che supporti un browser in grado di eseguire JavaScript :

<html>
<head>
 <title>Javascript demo #1 - Emilio P.G. Ficara 2012</title>
</head>
<body>
<h1>scendiamo in campo...</h1>
<div id="campo" style="position:absolute; top:60px; left:40px;">
 <img src="img/campo.jpg">
 <div id="palla" style="position:absolute;">
  <img src="img/palla.png">
 </div>
</div>
<script src="demo1.js"></script>
</body></html>

Immagine di un disco

In questa pagina parliamo di immagini del disco…

Questo è un disco volante 🙂 e non ha niente a che vedere con quanto voglio descrivere.
Nonostante sia definito “disco”, quello di cui voglio parlare è un dispositivo di forma rettangolare.

I più smaliziati avranno notato la totale assenza di forme rotonde ; eppure… sono dischi.

Per “immagine del disco” si intende un file in cui è salvata una copia di TUTTO il contenuto di un disco, SETTORE per SETTORE, quindi non importa che tipo di file system sia installato, quante partizioni, quali. E’ una serie di blocchi di dati grezzi, messi insieme (per comodità) in un file che può essere utilizzato (con appositi programmi) per “clonare” su altri dispositivi un disco originale, rispettandone la struttura (partizioni con relativi file-systems) ed i dati contenuti. Uno strumento formidabile per trasferire via internet (o su supporti di memoria USB) un intero disco.

Parlando di programmi in grado di “trattare” questi files immagine, ce ne sono disponibili, spesso gratuitamente, su moltissimi siti internet e basta fare una ricerca con Google per avere l’imbarazzo della scelta. Io, dopo aver dato un’occhiata in giro, ho scelto Win32 Disk Imager perché è open-source (mi piace vedere cosa c’è dentro) e si è comportato benissimo nell’uso pratico. Il link al sito dove può essere prelevato è disponibile nella parte destra della pagina, sotto “links utili”.
ATTENZIONE !!! Questi programmi scrivono sul disco in maniera “cieca”, cioè se dite loro di scrivere il contenuto del vostro file immagine copia_di_disco.img sul disco C: , vi ritrovate SENZA PIU’ IL VOSTRO SISTEMA OPERATIVO, perché il disco C: , al termine delle operazioni, è diventato il “clone” di quello salvato a suo tempo sul file copia_di_disco.img . Triplo check, quindi, della lettera indicante il supporto di destinazione per la copia.
In genere queste operazioni sulle memorie flash si effettuano su chiavette USB o sui lettori interni di SD-Card del proprio Netbook / Notebook ; verificate BENE, quindi, quale lettera di unità sia stata assegnata dal sistema alla periferica. Qui sotto c’è la finestra del programma in esecuzione :

Potete vedere in alto a sinistra il nome del file, in alto a destra la lettera di unità e in basso i comandi. Write scrive il contenuto di un file .img sul disco (F: in questo caso) e Read legge dal disco e salva su un file (qualora voleste fare una copia di un vostro disco).

Un altro programma di cui avrete sicuramente bisogno (molti files .img sono zippati per risparmiare spazio) è 7Z (7.Zip), un’applicazione “open source” (come al solito) per compattare / scompattare files. E’ molto efficiente, apre praticamente qualsiasi tipo di archivio e si integra nella shell di Windows.
Se il prezioso tecnicismo “si integra nella shell” vi fa venire in mente solo una scena al distributore di benzina, allora mi correggo e dico: “il programma aggiunge se stesso al menù che viene fuori quando cliccate su un file con il tasto DESTRO del mouse”.
Il link per accedere al sito dove potrete scaricare il programma è, come al solito, nella colonna a destra della pagina, sotto “links utili”.

Update: a new program to rebuild the SPI flash memory contents

In my previous post here I proposed a program that was able to create the SPI flash memory contents for an Android tablet, starting from U-boot.bin and W-load.bin taken from FirmwareInstall folder of a working, original or modded, firmware rom. The previous program had a limit : the environment variables (and the boot script that is stored in the same space) were not used in the creation of the my-spi.bin output file, so when you re-program the SPI flash memory with the file produced by the old program, you must supply the needed instructions to upgrade the system via serial terminal.

Now, the new version adds the full environment variables and the necessary CRC32 code to the output file my-spi.bin, making the file much more useful and easy to use. Obviously, while in the first version you had to supply only two “input” files (u-boot.bin and w-load.bin), now you must supply a third: the env_uboot, that can be found on the FirmwareInstall/env/ folder or the usual, working, firmware distribution related to the tablet.

The instructions for use are exactly the same as for previous version, just add the env_uboot file in the program folder. As usual, the program was written in FreeBASIC and compiled under Win7. It doesn’t require installation, just unzip the downloaded file in a folder, and add the needed input files, then start the application…. that’s all. Hope this will be useful for someone 🙂

Download the zip file at this link.

The memory areas of the resultant my-spi.bin files are:

0x00000 to 0x5FFFF reserved for u-boot.bin
0x60000 to 0x6FFFF reserved for environment variables
0x70000 to 0x7FFFF reserved for w-load.bin

Remember to get the right w-load—.bin file from the FirmwareInstall folder.
Generally, in most of the tablets I’ve seen (but NOT in all), the right one has the string DDR3_700M_1066M_8bit_2_256MB in the filename. Obviously, when you copy this file in the application folder, you must rename it in w-load.bin, ‘cause the program looks exactly for that file name.