sabato 12 giugno 2010

Programmazione PIC su Linux

Programmazione PIC su linux

Questa guida descrive i passi da compiere per iniziare a programmare in assembler i PIC (in ambiente gentoo linux, facendo riferimento al Pickit 2 Starter Kit della Microchip, e comprato dal sottoscritto sul sito RS Elettronica.

  • La confezione contiene due CD, scaricare il contenuto del cd "PICkit Starter kit" sull'hard disk.

  • Aprire i documenti Users Guides/Low Pin Count User Guide DS51556a.pdf e Datasheets/PIC16F685,687,689,690/PIC16F658,687,689,690_41262D.pdf : in questo modo si potranno seguire i tutorial avendo sottomano anche il datasheet del PIC fornito con la confezione.

  • Istallare i seguenti programmi, necessari per la compilazione ed il trasferimento del codice sul dispositivo. Faccio notare che al momento della stesura di questo articolo gpsim non gestisce il 16F690, quindi si deve fare a meno della simulazione grafica.

Links:

Curuxa : Insieme di link e tutorial per realizzare circuiti con pic, secondo la filosofia "open source".

pk2cmd

Programma che si occupa del trasferimento, esecuzione e verifica del codice sul PIC.

Istallazione:

# emerge pk2cmd

Ottenere la lista dei pic supportati da PICkit 2 :

# pk2cmd -?P

Scaricare su hd un programma residente sul pic:

# pk2cmd -PPIC16Fxx -GF/home/my_user/my_program.hex

Trasferire un .hex sul pic:

# pk2cmd -PPIC16Fxxx -M -F/home/my_user/my_program.hex

Verificare che il trasferimento del programma my_program.hex sul pic sia andato a buon fine:

# pk2cmd -PPIC16Fxxx -Y -Fmy_program.hex

Eseguire un programma sul pic (il parametro -A specifica i volt da applicare al pic, nell'esempio seguente si applicano 4V:

# pk2cmd -PPIC16Fxxx -A4 -T

Interrompere l'esecuzione del programma sul pic:

# pk2cmd -PPIC16Fxxx -R

Links:

Program PICs with a PICkit2 using the command line on Linux : Tutorial sull'utilizzo del programma pk2cmd

gputils

Compilatore asm e disassemblatore.

Istallazione

# emerge gputils

Convertire da .hex a .asm:

# gpdasm -p16fxx my_program.hex > my_program.asm

Compilare un programma .asm:

#gpasm -p16fxx my_program.asm

gpsim

Simulazione grafica del codice residente sul PIC.

Istallazione:

# echo "x11-libs/gtk+extra" >> /etc/portage/package.keywords
# emerge gpsim

Utilizzo:

$ gpsim -p16f690 -s helloWorld.cod

Links:

Intro to Programming PIC Microcontrollers in Linux : Guida introduttiva sull'utilizzo di gpsim.

cdrecord

cdrecord

Chiudere una sessione:

cdrecord dev=/dev/cdrw -fix

Creare un cd dati

  1. Creare un'immagine iso a partire da una dirctory di file:

    $ mkisofs -R -J -iso-level 2 -o output_filename.iso input_filename/directory 
    
    
  2. Scrivere l'iso su cd:

    $ cdrecord -eject -v -data -dao driveropts=burnfree dev=/dev/cdrw speed=4 output_filename.iso
    

Creare il cd di gentoo

$mount /dev/cdrom /mnt/cdrom/
mkisofs -o cd.iso /mnt/cdrom/
cdrecord dev=/dev/cdrw blank=fast speed=16
cdrecord -eject driveropts=burnfree dev=/dev/cdrw speed=24 -v cd.iso

bitlbee

## bitlbee

Istallazione

Eliminare la use-flag relativa a oscar, che riguarda ICQ:

# echo "net-im/bitlbee -oscar -yahoo" >> /etc/portage/package.use
# emerge bitlbee

Configurazione

Lanciare il server bitlbee:

# /etc/init.d/bitlbeed start

Connettersi al server ed entrare nel canale di controllo (con ALT-2):

$ irssi -c localhost

Impostare la password per bitlbee (e ricordare i propri settings):

register ${password}
/quit

$ irssi -c localhost
identify ${password}
account add jabber username@gmail.com mypasswd talk.google.com:5223:ssl
account add msn <msn address> <password>
account list
account on ${id}
/query ${nome}

Per chiudere la finestra di conversazione:

/wc

Eliminare un contatto:

remove ${nomeContatto}

Links

bitlbee

Introduzione a bitlbee

bc

bc

$ bc -li
  • -l carica le routine matematiche predefinite
  • -i forza la modalita' interattiva

Conversione di base

Ci sono molti modi per effettuare la conversione di base. Supponiamo di voler convertire da esadecimale a decimale:

  • Utilizzando bc:

    echo "obase=A; ibase=16; 7D001" | bc
    
  • Utilizzando printf, risparmiando qualche carattere per la digitazione ed eliminando la fastidiosa regola di bc che impone l'utilizzo di lettere maiuscole:

    printf "%d\n" 0x7d001
    
  • Utilizzando il semplicissimo comando bash:

    echo $((0x7d001))
    

rsync

rsync

Introduzione

A mio giudizio una buona strategia di backup consiste nella copia dei file contenuti nelle directory /etc e /home/${nomeUtente}, in modo che sia preservata la situazione attuale: chiameremo sorgente l'insieme dei file di cui bisogna fare il backup, chiameremo backup la destinazione della sorgente, destinazione che puo' essere un hard disk o un server di backup. L'idea e' la seguente:

  • i file che non esistono piu' alla sorgente devono essere cancellati in backup.

  • i file in backup che devono essere scritti sono quelli nuovi (ossia che sono creati in sorgente in data successiva a quella dell'ultimo backup eseguito) o quelli modificati (ossia che differiscono dai dati presenti in backup per data dell'ultima modifica, lunghezza di byte ecc..).

rsync non copia tutti i byte di tutti i file ogni volta che viene lanciato, ma usa un algoritmo per dererminare solo quello che serve, in modo da risparmiare tempo e banda: in questo modo si puo' fare il mirroring di grandi quantita' di dati e l'esecuzione di backup incrementali che non crescono in maniera indefinita. La prima volta che rsync esegue la copia dei file e' piu' lento del comando cp, ma nelle copie successive si puo' osservare che vengono trasferite solo le informazioni relative alle differenze in byte dei file confrontati.

Utilizzo

Per realizzare il backup che rispetti i punti precedenti si puo' usare rsync nel modo seguente:

$ rsync -avz --delete ${percorsoSorgente} ${percorsoDestinazione}
  • -a: abbreviazione di archivio, e' un insieme di parametri, per la precisione -rlptgoD. -r copia ricorsivamente nelle sottodirectory, -l copia anche i link simbolici, -p mantiene sui file di destinazione i permessi presenti sui file di sorgente al momento della copia, -t mantiene la data di ultima modifica, -g preserva l'attributo di gruppo dei file di sorgente, -o preserva il proprietario dei file di sorgente (opzione attiva solo se rsync e' eseguita come root), -D preserva i devices (solo se rsync e' eseguito da root).

  • -v : verbose, vengono mostrate a video le operazioni che rsync sta facendo.

  • -z : zip, comprime i file in trasmissione, in modo da occupare meno banda di trasferimento, buona cosa se si fa un backup attraverso una LAN.

  • --delete : cancella i file che sono presenti in backup ma che non lo sono piu' in sorgente al momento del lancio di rsync.

Esempi ==

$ rsync -avz --delete /home/${utente} utenteBackup@backupServer:/backup/

Copia la directory ${utente} (con le sue sottodirectory) sul server backupServer nella directory /backup/ accedendo in modalita' ssh come utente utenteBackup.

# rsync -av --delete /etc /mnt/hd

Copia la directory /etc (e le sue sottodirectory) sull'hard disk montato su /mnt/hd.

Strategie di backup

  • Tutte le fasi seguenti devono essere fatte entro lo stesso giorno, in modo che non vengano aggiunti o editati file durante queste fasi.

  • Da chiavetta a portatile (update)

I file in destinazione che hanno lo stesso nome e sono diversi, vengono sostituiti con quelli di origine (e gli vengono assegnati i permessi di root). Viene anche creata una copia di backup di detti file.

# rsync -rbv /mnt/usb/utente/${dir} /home/utente

Si arriva dunque ad una situazione in cui i file nuovi si riconoscono perche' hanno i permessi di root, quelli modificati finiscono per ~ (e vanno editati per poi essere cancellati).

# find /home/utente -iname "*~"
# diff /home/utente/${file} /home/utente/${file~}

Una volta risolto il conflitto, si puo' cancellare il file che termina per ~.

  • Da portatile ad hd-portatile (rilascio)

Copia speculare della directory /home/utente su hd-portatile:

# rsync -av --delete /home/utente /mnt/usb/
# rsync -av --delete /etc /mnt/usb/
# mount /boot
# rsync -av --delete /boot /mnt/usb/
# umount /boot
  • Da hd-portatile a pc domestico (update)

Come da chiavetta a portatile:

# rsync -rvtb /mnt/usb/utente/${dir} /home/utente/

Da pc domestico a hd-backup

Come da portatile ad hd-portatile:

# rsync -av --delete /home/utente /mnt/usb/
# rsync -av --delete  /etc /mnt/usb/
# mount /boot
# rsync -av --delete /boot /mnt/usb/
# umount /boot
  • Da pc domestico a hd-portatile (rilascio)

    # rsync -rvt --delete /home/utente/${dir} /mnt/usb/utente/

  • Da hd-portatile a portatile (rilascio)

Come da pc domestico a hd-backup

# rsync -av --delete /mnt/usb/utente/${dir} /home/utente/
  • Da portatile a chiavetta (rilascio)

Come da pc domestico a hd-backup, --no-o --no-g non preserva gli attributi di gruppo e di owner:

# rsync -av --delete --no-o --no-g utente /mnt/usb/

awk

awk

awk -F"," -v pat="$variabile" '$0~pat {print $2}' ${nomeFile}

Avidemux: Editor video

Avidemux

x264 settings

Encoding Mode:              Two Pass - Average Bitrate (1000kbps)

Pixel Aspect Ratio:         1:1

Multi-Threading:            Auto-Detect

Motion Estimation/ME Method: TESA

Motion Estimation/Subpixel Refinement:  9(RD refinement on all frames)

Argyll: Gestione del colore sotto linux

Argyll

Insieme di programmi per la gestione di colore sotto linux.

Messaggio di istallazione:

* 
*   Executables have been renamed!
*   Read /usr/share/doc/argyll-1.0.1/CHANGELOG.bz2!.
* 
* 
* If you have a Spyder2 you need to extract the firmware
* from the spyder2_setup.exe (ColorVision CD)
* and store it as /usr/bin/spyd2PLD.bin.
* 
* For further info on setting up instrument access read
* http://www.argyllcms.com/doc/Installing_Linux.html
* 

Controllare il sequente file per la sintassi dei comandi:

/usr/share/doc/argyllcms-1.0.3/CHANGELOG.bz2

Apache

Apache

Vengono descritti di seguito i passi da seguire per far girare le cgi sotto un server Apache. Con ${nomeDominio} si indica il dominio di secondo livello, ad esempio carlocaponi.it .

Creare utenti

# mkdir /home/${nomeDominio}
# chmod u=rwx,g=,o=x /home/${nomeDominio}/
# mkdir /home/${nomeDominio}/public_html
# chmod u=rwx,g=,o=x /home/${nomeDominio}/public_html

Configurazione domini

# cat >> /etc/apache2/httpd.conf << EOF
NameVirtualHost *

<VirtualHost *>
    ServerName www.${nomeDominio}
    DocumentRoot /home/${nomeDominio}/public_html
    CustomLog logs/www.${nomeDominio}-access_log common
    ErrorLog logs/www.${nomeDominio}-error_log
</VirtualHost>
EOF

Nel file precedente ho disabilitato la gestione gentoo dei virtual host:

# cat >> /etc/apache2/httpd.conf <<EOF
#Include /etc/apache2/vhosts.d/*.conf
EOF

,ma si puo' utilizzare la filosofia di gentoo, e inserire la sezione NameVirtualHost e VirtualHost nel file /etc/apache2/vhost.d/01_${nomeDominio}_vhost.conf, dopo aver commentato la linea contenente NameVirtualHost nel file /etc/apache2/vhost.d/00_default_vhost.conf.

Verifica configurazione domini

# cat >> /home/${nomeDominio}/public_html/index.html << EOF
<html>
    <body>
        Home page del dominio ${nomeDominio}.
    </body>

</html>
EOF
# chmod u=rw,g=,o=r /home/${nomeDominio}/public_html/index.html

Attivare l'esecuzione dei cgi

Occore decommentare le seguenti linee:

# cat >> /etc/apache2/httpd.conf << EOF
<Directory /home/*/public_html/cgi-bin>

    Options ExecCGI
    SetHandler cgi-script
</Directory>
EOF

Aggiungere le seguenti linee nella sezione VirtualHost:

# cat >> /etc/apache2/httpd.conf << EOF
ScriptAliasMatch ^/(.*)\.cgi$  /home/${nomeDominio}/public_html/$1.cgi
EOF

Controllare che il server esegua uno script di esempio:

# cat >> /home/${nomeDominio}/public_html/test.cgi << EOF
#!/bin/bash
echo "Content-Type: text/plain"
echo
echo "funziona!"
EOF
# chown apache:apache /home/${nomeDominio}/public_html/test.cgi
# chmod u=rwx,g=,o= /home/${nomeDominio}/public_html/test.cgi

Per il debug delle cgi, conviene tenere un terminale aperto e dare il comando:

# tail -f /var/log/apache2/*error_log

Permessi file

Per tutti i file statici:

# chown apache:apache ${fileStatico}
# chmod ugo-rwx ${fileStatico}
# chmod u+r ${fileStatico}

Per le directory e le cgi:

# chmod apache:apache ${cgiODirectory}
# chmod ugo-rwx ${cgiODirectory}
# chmod u+rx ${cgiODirectory}

Alsa

Alsa

Rendere permanenti i volumi di alsamixer

Non uso il demone alsasound, dal momento che ho delegato al kernel la gestione della scheda audio, senza usare moduli di alcun tipo. In questo modo, pero', non si puo' usare il comando alsactl store (o, in modo equivalente, impostare la variabile SAVE_ON_STOP="yes" nel file /etc/conf.d/alsasound) per rendere permanenti i cambiamenti di volume di alsamixer: semplicemente queste soluzioni non funzionano. Basta pero' aggiungere le seguenti righe a .bash_profile per ottenere lo stesso effetto:

$ cat >> ${HOME}/.bash_profile <<EOF
amixer sset 'PCM' 80% unmute &> /dev/null
amixer sset 'Master' 80% unmute &> /dev/null
EOF

arecord

Per registrare o applicare effetti in realtime usando l'ingresso microfono, occorre configurarlo come dispositivo di cattura. Otteniamo l'elenco di controlli disponibili per l'alsamixer:

$ amixer controls

Individuata la riga relativa a Capture Switch, prendere nota del suo numid e settare lo switch di capture a on:

$ amixer cset numid=11,iface=MIXER,name='Capture Switch' on,on

A questo punto e' possibile registrare, applicare effetti, ecc..In particolare, si puo' registrare con arecord. Per registrare 10 secondi di traccia audio in formato wav, ad esempio, impartire il comando seguente:

$ arecord -d 10 -f cd -t wav ${tracciaMicrofono.wav}

Se abbiamo a disposizione una base e vogliamo suonarci sopra registrando, ovviamente, solo la traccia relativa all'ingresso microfono:

$ mplayer -quiet ${base.wav} </dev/null & rec -r 48000  ${tracciaMicrofono}.wav

Links

Recording soundcard output using arecord

Markdown

Markdown

Introduzione

Ci sono molti modi di pubblicare contenuti sul web, l'approccio classico e' scrivere qualcosa in un form. Nel caso in cui si abbia bisogno di dare una formattazione al contenuto, pero', le cose si fanno complicate. In sostanza, si ha bisogno di uno strumento che permetta di trasformare il "semplice" testo in formato html, mantenendone la leggibilita' in modo che si possano fare modifiche senza sforzo. C'e' differenza tra scrivere un articolo e pubblicare un articolo: Markdown e' uno strumento che permette la conversione dal formato testo al formato html, pensato per chi scrive contenuti per il web. Markdown e' composto di due aspetti:

  • Una sintassi da rispettare quando si scrive il documento di testo.
  • Un programma, scritto in Perl (ma con molte implementazioni in altri linguaggi) che converte il documento scritto in formato testo in un documento in formato xhtml (o html).

La sintassi di formattazione di Markdown e' stata concepita in modo da essere il piu' leggibile possibile.

Istallazione

La versione perl puo' essere semplicemente istallata col comando

# emerge Text-Markdown

,oppure la si puo' scaricare dal sito ufficiale. Per le altre versioni in altri linguaggi:

Sintassi Vim

Scaricare il file mkd.vim al seguente indirizzo:

mkd.vim

,e metterlo nella directory ${HOME}/.vim/syntax (se non esiste, crearla).

Fare in modo che vim carichi automaticamente la sintassi scaricata:

cat >> ${HOME}/.vim/filetype.vim <<EOF
" markdown filetype file
if exists("did\_load\_filetypes")
    finish
endif

augroup markdown
    au! BufRead,BufNewFile *.mkd   setfiletype mkd
augroup END
EOF

Aggiungere le seguenti linee a .vimrc:

cat >> ${HOME}/.vimrc <<EOF
"markdown features
augroup mkd
    autocmd BufRead *.mkd  set ai formatoptions=tcroqn2 comments=n:>
augroup END
EOF

Utilizzo

Facilissimo, per trasformare il file ${inputFile.mkd} in formato markdown nel file ${outputFile.html} in formato html, basta usare il comando seguente:

$ cat ${inputFile.mkd} | markdown > ${outputFile.html}

Maria Grazia Buccella

Anni '60, Cinecitta', i caratteristi. Questa e' la cornice nella quale si inserisce una delle piu' incantevoli e affascinanti attrici del Nostro cinema. L'America ha avuto Marilyn, Audrey..bene, unitele assieme in un contesto di avanspettacolo ed otterrete lei, Maria Grazia Buccella, regina di candida sensualita' e simpatia.

La critica cinematografica non si e' mai occupata seriamente di lei, ma grazie a due grandi personaggi come Luciano Salce e Vittorio Cecchi Gori, al giorno d'oggi possiamo beneficiare del contributo che Maria Grazia ha dato alla cinematografia italiana. Inutile dire che blogger e giornalisti, una volta apertamente schierati contro di lei, dopo aver sentito Marco Giusti parlare di Capolavoro (in riferimento al film "Basta Guardarla"), hanno fatto revisionismo critico, ora la Buccella e' attrice di genere stracult, venerabile e osannabile.

Per capire il suo talento, niente di meglio dell'analisi di alcuni "passi" visivi.

Canzonissima

Raffaella Carra' esordisce con una battuta (frecciatina?) sui baffi, la risposta e' sagace e razionale, Charlot e Omar Sharif erano baffuti di tutto rispetto. Segue un simpatico dialogo da copione, dove Corrado recita l'ilare frase - Poca Maria, ma tanta Grazia. Applausi e risate scroscianti. Poi siamo al momento di poetica e sublime Arte: la canzone "Venere 2000", in arrangiamento swing-anni'30 (con abbigliamento in stile adeguato). L'eleganza e il candore della performance non possono far pensare ad "un'attrice di avanspettacolo", eppure il testo della canzone insinua un'atmosfera seducente. L'arte come contrasto, decontestualizzazione del bello, cose di cui Salce e' maestro:

Venere 2000

Enfatizziamo la decontestualizzazione: vista a Canzonissima, "Venere 2000" e' una simpatica canzone, che una soubrette come Raffaella Carra' o Mina potrebbero cantare ad una trasmissione-tipo degli anni '60. Sostituiamo la cornice, facciamola diventare un teatrino di avanspettacolo, nel quale Enrichetta da sfoggio della sua conturbante bellezza, davanti ad un pubblico che molto probabilmente non ha tempo di apprezzare l'armonia della canzone:

Il Ballo Del Popo'

E' il momento del pezzo storico. Ho letto critiche inneggianti al valore nullo della canzone, giudicata inconsistente e stupidina. Non e' cosi', chi ha scritto cose simili di musica non capisce una cheppa. Si tratta di un divertente brano in stile funk, e lei canta in modo divino, ricordando lo stile della celebre cantante jazz Tania Maria:

Piccola biografia, filmografia saliente

  • 1951, debutto nel film "La Nostra Pelle" di Raymond Bernard, accanto Paolo Stoppa.

  • 1959, finalista di Miss Universo.

  • 1963, recita nel film "Il Boom" di Vittorio De Sica, con Alberto Sordi.

  • 1965, "Il Gaucho" di Dino Risi, con Vittorio Gassman.

  • 1966, "Adulterio All'Italiana" di Pasquale Festa Campanile

  • 1966, "L'Armata Brancaleone" di Mario Monicelli.

  • 1967, "Ti Ho Sposato Per Allegria" di Luciano Salce, dove vince il Nastro D'Argento.

  • 1970, "Basta Guardarla" di Luciano Salce.

  • 1978, incisione della magnifica canzone "Il Ballo Del Popo'"

  • 1984, "Delitto In Formula Uno" di Bruno Corbucci.