Sei sulla pagina 1di 378

Che cosa è un Microcontrollore?

Guida per Studenti

VERSIONE 3.0
Pagina 2 · Che cosa è un Microcontrollore?

GARANZIA
La Parallax garantisce i suoi prodotti esenti da difetti dei materiali e di fabbricazione per un periodo di 90 giorni dal
ricevimento del prodotto. Se scoprite un difetto, Parallax, a suo giudizio, riparerà o sostituirà la merce o rimborserà il
prezzo di acquisto. Prima di restituire il prodotto a Parallax, richiedete un numero di Return Merchandise
Authorization (RMA). Trascrivete il numero RMA all’esterno della scatola utilizzata per restituire la merce a
Parallax. Per favore includete le seguenti informazioni insieme alla merce restituita: il vostro nome, numero
telefonico, indirizzo della spedizione e una descrizione del problema. La Parallax restituirà il vostro prodotto riparato
o la sua sostituzione utilizzando lo stesso metodo di spedizione che avrete utilizzato per inviare il prodotto a Parallax.

GARANZIA SODDISFATTI O RIMBORSATI DI 14 GIORNI


Se, entro 14 giorni dal ricevimento del vostro prodotto, trovate che esso non soddisfa le vostre necessità, potete
restituirlo per essere totalmente rimborsati. La Parallax rimborserà il prezzo di acquisto del prodotto, costi di
spedizione/gestione esclusi. Questa garanzia è nulla se il prodotto è stato modificato o danneggiato. Si veda il
precedente paragrafo Garanzia per le istruzioni su come restituire un prodotto a Parallax.

COPYRIGHTS E MARCHI DI FABBRICA


Questo documento ha il copyright 2003-2009 della Parallax Inc. Scaricando dal sito o utilizzando una copia stampata
di questo documento o software acconsentite al suo utilizzo esclusivo con prodotti Parallax. Qualsiasi altro uso non è
consentito e può rappresentare una violazione dei copyright Parallax, punibile legalmente in base al copyright
Federale o alle leggi sulla proprietà intellettuale. Qualsiasi duplicazione della documentazione per usi commerciali è
espressamente vietata da Parallax Inc. La duplicazione per uso didattico è consentita, alle condizioni seguenti: il testo,
oppure qualsiasi sua parte, può essere duplicato solo per utilizzo con prodotti Parallax, e l’utente può esigere dallo
studente soltanto i costi di riproduzione. Consultare Parallax per l’approvazione prima di duplicare qualsiasi nostra
documentazione in parte o completamente, per qualsiasi altro uso.

BASIC Stamp, Board of Education, Boe-Bot, Stamps in Class, e SumoBot sono marchi registrati della Parallax, Inc.
HomeWork Board, PING))) Parallax, il logo Parallax, Propeller e Spin sono marchi di fabbrica della Parallax, Inc. Se
decidete di utilizzare una qualsiasi di queste parole nel vostro materiale elettronico o stampato, dovrete dire che
"(marchio di fabbrica) è marchio di fabbrica (registrato) della Parallax Inc.” fin dalla prima comparsa del marchio di
fabbrica. Altri marchi e nomi di prodotti sono marchi di fabbrica o marchi di fabbrica registrati dei loro proprietari.

ISBN 9781928982524
3.0.0-09.12.09-HKTP
SCARICO DI RESPONSABILITA’
La Parallax Inc. non è responsabile di danni speciali, occasionali o consequenziali che risultino da qualsiasi rottura di
garanzia, o sotto qualsiasi tutela legale, compresi perdite di profitto, fermo tecnico, avviamento, danno o sostituzione
di apparecchiature o proprietà, o qualsiasi costo di recupero, ri-programmazione, o riproduzione di qualsiasi dato
memorizzato in, o utilizzato con, prodotti Parallax. La Parallax Inc. inoltre non è responsabile di danni a persone,
compresi i danni di vita e salute, che risultino dall’uso di qualsiasi nostro prodotto. Vi assumete la responsabilità
completa della vostra applicazione BASIC Stamp, indipendentemente dal fatto che possa minacciare la vostra vita.

ERRATA
Anche se si fa un grosso sforzo per assicurare la correttezza dei nostri testi, possono ancora essere riscontrati errori.
Qualche volta, viene immessa sul nostro sito web, www.parallax.com, una pagina di errata-corrige con un elenco di
errori e correzioni noti per un dato testo. Se trovate un errore , vi preghiamo di comunicarcelo inviando una e-mail
all’indirizzo editor@parallax.com.
Indice del contenuto
Prefazione....................................................................................................................7
Informazioni Sulla Versione 3.0 ......................................................................................7
A chi e’ destinato il testo .................................................................................................8
Forum di Supporto ..........................................................................................................8
Risorse per gli insegnanti ...............................................................................................9
Traduzioni in altre lingue...............................................................................................10
Notizie sull’Autore .........................................................................................................10
Contributi Speciali .........................................................................................................10
Capitolo 1 : Per iniziare............................................................................................13
Quanti Microcontrollori avete utilizzati oggi? ................................................................13
BASIC Stamp 2 – il vostro nuovo Modulo Microcontrollore ..........................................13
Invenzioni affascinanti coi Microcontrollori BASIC Stamp ............................................14
Hardware e Software ....................................................................................................17
Attività #1 : ottenere il Software ....................................................................................17
Attività #2 : Usare il file di aiuto per impostare l’Hardware ...........................................23
Sommario .....................................................................................................................25
Capitolo 2 : Luci accese – Luci spente ..................................................................29
Luci Indicatrici (o luci spia)............................................................................................29
Fare in modo che un diodo a emissione (LED) emetta luce.........................................29
Attività #1 : Costruzione e prova del circuito a LED..................................................30
Attività #2 : Controllo acceso/spento con il BASIC Stamp ............................................39
Attività #3 : Conteggio e Ripetizione .............................................................................46
Attività #4 : Costruire e provare un secondo circuito LED ............................................50
Attività #5 : Uso della direzione della Corrente per Controllare un LED bicolore .........54
Sommario .....................................................................................................................60
Capitolo 3 : Ingresso Digitale – Pulsanti................................................................65
Li trovate su Calcolatrici, giochi PALMARI ed altre applicazioni...................................65
Ricevere o inviare segnali alti e bassi...........................................................................65
Attività #1 : Prova di un pulsante con un circuito a LED ...............................................65
Attività #2 : Lettura di un pulsante con il BASIC Stamp ................................................69
Attività #3 : Controllo a pulsante di un circuito a LED ...................................................74
Attività #4 : Due pulsanti che controllano due circuiti a LED ........................................77
Attività #5 : Prova di un temporizzatore di reazione .....................................................83
Sommario .....................................................................................................................92
Capitolo 4 : Controllo del Movimento.....................................................................99
Movimento Microcontrollato ..........................................................................................99
Segnali acceso/spento (On/Off) e movimento di un Motore .........................................99
Introduzione al Servo ....................................................................................................99
Pagina 4 · Che cosa è un Microcontrollore?

Attività #1 : Connessione e prova di un servo ............................................................102


Attività #2 : Programma per la prova del controllo di un servo ...................................109
Attività #3 : Controllo del tempo di mantenimento di un servo ...................................120
Attività #4 : Controllo di posizione con il vostro computer ..........................................127
Attività #5 : Conversione da posizione a movimento ..................................................136
Attività #6 : Servo controllato da un pulsante .............................................................139
Sommario ...................................................................................................................144
Capitolo 5 : Misure di rotazione............................................................................ 151
Dischi di Regolazione e apparecchi di rilevamento ...................................................151
La resistenza Variabile sotto il disco – un Potenziometro ..........................................151
Attività #1 : Costruzione e prova del circuito di un potenziometro..............................153
Attività #2 : Misura di una resistenza tramite misura del tempo .................................155
Attività #3 : Lettura di un quadrante circolare con il BASIC Stamp ............................162
Attività #4 : Controllo di un servo con un potenziometro ............................................169
Sommario ...................................................................................................................177
Capitolo 6 : Display digitale .................................................................................. 183
Il Display Digitale Quotidiano......................................................................................183
Che cosa e’ un Display a 7 Segmenti?......................................................................183
Attività #1 : Costruzione e prova del Display a LED a 7 Segmenti .............................185
Attività #2 : Controllo del display LED a 7 Segmenti ..................................................189
Attività #3 : Visualizzazione di cifre.............................................................................192
Attività #4 : Visualizzazione della posizione di un disco .............................................200
Sommario ...................................................................................................................206
Capitolo 7 : Misure di luce..................................................................................... 209
Dispositivi che contengono sensori di luce .................................................................209
Introduzione al fototransistor ......................................................................................212
Attività #1 : Costruzione e prova del misuratore di luce .............................................213
Attività #2 : Registrazione di eventi luminosi ..............................................................217
Attività #3 : Registrare graficamente misure di luce (Opzionale)................................226
Attività #4 : Un semplice misuratore di luce................................................................229
Attività #5 : Uscita On/Off di un fototransistor.............................................................240
Attività #6 : Per divertirsi—Misura della luce esterna con un LED .............................250
Sommario ...................................................................................................................254
Capitolo 8 : Frequenza e Suono ........................................................................... 261
La vostra giornata e i bip Elettronici............................................................................261
Microcontrollori, altoparlanti, e segnali On/Off............................................................261
Attività #1 : Costruzione e prova dell’altoparlante ......................................................262
Attività #2 : Suoni di azione ........................................................................................264
Attività #3 : Note musicali e semplici canzoni .............................................................269
Attività #4 : Musica con il Microcontrollore..................................................................275
Attività #5 : Suonerie con il RTTTL .............................................................................288
Sommario ...................................................................................................................301
Capitolo 9 : Mattoni (elementi di costruzione) elettronici ..................................305
Quei piccoli Chip neri ..................................................................................................305
ESpandete i vostri progetti con circuiti integrati periferici ..........................................306
Attività #1 : Controllo del flusso di Corrente con un Transistor..................................307
Attività #2 : Introduzione del Potenziometro Digitale ................................................310
Sommario ...................................................................................................................320
Capitolo 10 : Costruire prototipi delle proprie Invenzioni..................................325
Applicare le proprie conoscenze ad altre parti e componenti .....................................325
Realizzare il prototipo di un microsistema antifurto ....................................................326
Attività #1 : dall‘Idea alla prova del concetto...............................................................326
Attività #2 : Costruzione e prova singola di ciascun Circuito ......................................330
Attività #3 : Organizzazione di compiti di codifica in piccole parti ..............................332
Attività #4 : Documentazione del proprio codice!........................................................336
Attività #5 : Dotate la vostra applicazione di nuove fantastiche funzionalità...............338
Attività #6 : Come superare le difficoltà di progetto ....................................................339
Attività #7 : Cosa imparare dopo? ............................................................................347
Sommario ...................................................................................................................351
Opzioni Kit Completo ..................................................................................................354
Attività bonus: Legge di ohm, Voltaggio, e Corrente ..............................................356
Indice .......................................................................................................................365
Pagina 6 · Che cosa è un Microcontrollore?
Prefazione · Pagina 7

Prefazione
Questo testo risponde alla domanda “Che cosa è un microcontrollore?” mostrando agli
studenti come progettare le loro personali invenzioni intelligenti col modulo
microcontrollore BASIC Stamp® della Parallax Inc. Le attività in questo testo includono
molti esperimenti divertenti e interessanti progettati per catturare la loro immaginazione
con il movimento, la luce, il suono e le reazioni tattili per esplorare nuovi concetti.
Queste attività presentano allo studente molti principi base della programmazione di
computer, dell’elettricità e dell’elettronica, della matematica e della fisica. Molte di
queste attività agevolano la presentazione di pratiche di progetto utilizzate da ingegneri e
tecnici nel creare macchine ed apparecchiature moderne, utilizzando nel contempo parti
comuni ed economiche.

Che cos’è un microcontrollore? è il testo di ingresso nel programma Stamps in Class. Per
esaminare la serie completa, che include i titoli Robotica con il Boe-Bot, Sensori
intelligenti e loro Applicazioni, Controllo di Processi e altri, visitate il sito
www.parallax.com/Education.

INFORMAZIONI SULLA VERSIONE 3.0


Questa è la prima revisione di questo libro fatta, dal 2004 a oggi. I cambiamenti di
maggior rilievo includono:

 Sostituzione delle fotoresistenze al solfuro di cadmio con un sensore di luce


conforme-RoHS di un tipo che sarà molto comune nel progetto di prodotti del
prossimo futuro. Ciò ha richiesto la riscrittura dei Capitoli 7 e 10, e varie
modifiche in altri capitoli.
 Miglioramento delle attività e delle figure del controllo servo nel Capitolo 4.
 Trasporto della porzione “Installazione e prova” del Capitolo 1 e delle appendici
Hardware e Ricerca Guasti nel file di aiuto. Ciò ha consentito di poter supportare
le connessioni hardware seriale ed USB, e altre connessioni di programmazione
dato che i nostri prodotti continuano ad espandersi. Ciò consente anche la
manutenzione dinamica del materiale di Hardware e Ricerca Guasti.
 Rimozione dei riferimenti al CD Parallax, che è stato tolto dai nostri kit,
riducendo i rifiuti e assicurando ai clienti il download del software BASIC
Stamp Editor e dei driver USB più recenti disponibili per i loro sistemi operativi.
Pagina 8 · Che cosa è un Microcontrollore?

In aggiunta, sono stai corretti piccoli elementi errati notati nella versione precedente
(2.2). Il materiale punta ancora alle stesse méte, e sono stati trattati gli stessi concetti e
comandi di programmazione con l’aggiunta di pochi altri concetti nuovi. Infine, i numeri
di pagina sono stati modificati in modo che la pagina del PDF e la pagina fisica hanno
adesso gli stessi numeri, per comodità di uso.

A CHI E’ DESTINATO IL TESTO


Questo testo è progettato come primo approccio alla letteratura tecnologica, e come facile
curva di apprendimento della programmazione e del progetto di dispositivi, incorporati
nel testo. Esso è organizzato in modo che possa essere usato dalla più ampia varietà
possibile di studenti e anche da autodidatti. Gli studenti della scuola media superiore
possono provarne gli esempi in modo guidato seguendo le semplici istruzioni passopasso
contrassegnate da un segno di spunta, con la supervisione di un istruttore. D’altra parte, le
capacità di comprensione e soluzione dei problemi per gli studenti laureandi in ingegneria
saranno messe alla prova con domande, esercizi finali e progetti (con soluzioni) nel
sommario di ciascun capitolo. Gli autodidatti potranno imparare con il loro ritmo ed
ottenere assistenza attraverso il forum Stamps in Class citato qui sotto.

FORUM DI SUPPORTO
La Parallax gestisce per i propri clienti forum con moderatore, riguardanti vari argomenti:
 Chip Propeller: per tutte le discussioni relative alla linea di prodotto
Microcontrollore a più nuclei Propeller (elica) e ai suoi strumenti di sviluppo.
 BASIC Stamp: Ideee di progetto, supporto, e argomenti connessi per tutti i
modelli BASIC Stamp Parallax.
 Microcontrollori SX: Assistenza tecnica per tutti i prodotti con il chip SX,
inclusi il Complatore SX/B, e lo Strumento SX-Key.
 Sensori: Discussione riguardante il grande gruppo dei sensori Parallax, e
l’interfacciamento dei sensori con i microcontrollori Parallax.
 Stamps in Class: Studenti, insegnanti e clienti discutono qui i materiali didattici
Parallax e i progetti scolastici.
 Robotica: Per tutti i robot Parallax e i robot personalizzati costruiti con
processori e sensori Parallax.
 Cassetta di sabbia (The Sandbox): Argomenti riguardanti l’uso dei prodotti
Parallax ma non specifici degli altri forum.
 Progetti completati: Inviate qui i vostri progetti completati, realizzati con
prodotti Parallax.
Prefazione · Pagina 9

 Sviluppo del gioco Sistema HYDRA e Propeller: Discussione e assistenza


tecnica per il Kit di sviluppo del gioco HYDRA e della relativa programmazione
del microcontrollore Propeller.

RISORSE PER GLI INSEGNANTI


Una vasta gamma di risorse per questo testo sono progettate per supporto agli insegnanti.

“Mini Progetti Stamps in Class”


Per aggiungere un supplemento ai nostri testi, forniamo un banco di progetti per la classe.
Progettato per coinvolgere gli studenti, ciascun “Mini Progetto” contiene tutto il codice
sorgente, le spiegazioni di “Come opera”, gli schemi, e i diagrammi di cablaggio o
fotografie del dispositivo che lo studente potrebbe voler utilizzare. Molti progetti
esibiscono un video introduttivo, per promuovere lo studio autonomo negli studenti più
interessati ad elettronica e programmazione. Seguire semplicemente il link “Mini Projects
Stamps in Class” nel sito www.parallax.com/Education.

Corsi per insegnanti


Questi corsi disponibili, intensivi, di 1 o 2 giorni per gli istruttori sono tenuti da ingegneri
Parallax o da insegnanti esperti che utilizzino materiali didattici Parallax nelle loro classi.
Visitare il sito www.parallax.com/Education → Educators Courses per dettagli.

Forum dell’insegnante Parallax


In questo forum libero, privato, gli insegnanti possono rivolgere domande e condividere
le loro esperienze con utilizzo di prodotti Parallax nelle loro classi. Sono postati qui
anche materiali didattici supplementari. Per inserirsi, chiedere istruzioni per email a
education@parallax.com; sarà richiesta una prova dello stato di insegnante.

Materiali didattici supplementari


Testi didattici Parallax selezionati hanno un insieme non pubblicato di domande e
soluzioni che vengono postati nei nostri Forum Parallax per Insegnanti; invitiamo gli
insegnanti a copiare e modificare questo materiale a propria volontà per la preparazione
sollecita di compiti a casa, quiz, e prove. Si possono anche postare qui presentazioni
PowerPoint e materiali di prova preparati da altri insegnanti.
Pagina 10 · Che cosa è un Microcontrollore?

Permessi di Copyright per uso didattico


Non è richiesta alcuna licenza per lo scarico (download), la duplicazione e l’installazione
di software Parallax per uso didattico con prodotti Parallax su quante scuole o computer
occorra. I nostri testi Stamps in Class e il manuale BASIC Stamp sono tutti disponibili
come PDF scaricabili gratuitamente, e possono essere altresì copiati con l’intesa che si
impieghino per uso didattico esclusivamente con prodotti Parallax; lo studente deve solo
pagare il costo della copia. I file PDF non sono bloccati, consentendo la scelta di testi e
immagini per preparare sommari, trasparenze, o presentazioni PowerPoint.

TRADUZIONI IN ALTRE LINGUE


Molti dei nostril testi Stamps in Class sono stati tradotti in altre lingue; questi testi si
possono scaricare gratuitamente e sono soggetti agli stessi permessi di Copyright per uso
didattico delle nostre versioni originali. Per vederne l’elenco completo, cliccate sul link
Tutorials & Translations al sito www.parallax.com/Education. Queste traduzioni sono
state preparate in coordinamento con il programma di Traduttore Volontario Parallax. Se
siete interessati a partecipare al nostro programma di Traduttore Volontario, inviate una
email all’indirizzo translations@parallax.com.

NOTIZIE SULL’AUTORE
Andy Lindsay è entrato alla Parallax Inc. nel 1999, e da allora è stato autore di otto libri e
di numerosi articoli e documenti di prodotto per la società. Le ultimi tre versioni di Che
cos’è un microcontrollore? (What’s a Microcontroller?) sono state progettate ed
aggiornate sulla base di osservazioni e reazioni didattiche che Andy ha raccolto nei suoi
viaggi attraverso il paese e all’estero gestendo Corsi per Insegnanti e manifestazioni
Parallax. Andy ha studiato Ingegneria Elettrotecnica ed Elettronica all’università statale
della California, a Sacramento, ed è autore contributore di molti articoli che riguardano i
microcontrollori nei curricola dei laureandi (tesine). Quando non scrive materiale
didattico, Andy si occupa di ingegnerizzazione di prodotto e applicazioni per la Parallax.

CONTRIBUTI SPECIALI
Il Gruppo di lavoro che la Parallax ha messo insieme per scrivere la presente edizione del
testo comprende: l’eccellente direzione di dipartimento di Aristides Alvarez, il progetto
delle lezioni e la scrittura tecnica a cura di Andy Lindsay; la grafica di copertina di Jen
Jacobs; le illustrazuioni grafiche di Rich Allred e Andy Lindsay; la revisione tecnica di
Jessica Uelmen; la ricerca di peculiarità tecniche, l’editing, e l’organizzazione del testo di
Stephanie Lindsay. Ringraziamenti speciali vanno a Ken Gracey, fondatore del
programma Stamps in Class, e a Tracy Allen e Phil Pilgrim per la consultazione nella
Prefazione · Pagina 11

scelta del sensore di luce utilizzato in questa versione per sostituire la fotoresistenza al
solfuro di cadmio.

Molte persone hanno contribuito allo sviluppo di Che cos’è un Microcontrollore? e


hannpo dato assistenza nelle edizioni precedenti, e ad essi siamo ancora grati. Parallax
desidera ringraziare di nuovo Robert Ang per la sua attenta revisione e i suoi inserimenti
dettagliati, e l’anziano ingegnere veterano e stimato cliente Sid Weaver per la sua
perspicace revisione. Grazie anche agli autori Stamps in Class Tracy Allen (Applied
Sensors, Sensori applicati) e Martin Hebel (Process Control, Controllo di Processo) per
la loro revisione e le loro raccomandazioni. Andy Lindsay desidera ringraziare suo padre
Marshall e suo cognato Kubilay per i loro consigli e suggerimenti musicali esperti.
Per iniziare · Pagina 13

Capitolo 1: Per iniziare


QUANTI MICROCONTROLLORI AVETE UTILIZZATI OGGI?
Un microcontrollore è una specie di computer in miniatura che potete trovare in tutti i tipi
di oggetti. Alcuni esempi di oggetti comuni, di tutti i giorni, che contengono
microcontrollori sono illustrati in Figura 1-1. Se l’oggetto possiede dei tasti ed un
display, è probabile che abbia anche un cervello a microcontrollore.

Figura 1-1
Esempi di oggetti comuni
che contengono un
Microcontrollore.

Provate a fare un elenco e a contare quanti dispositivi con microcontrollore usate in una
giornata tipo. Ecco alcuni esempi: se al mattino la vostra radio-sveglia si spenge, e se
premete più volte il tasto “snooze”, la prima cosa che fate nella vostra giornata è
interagire con un microcontrollore. Riscaldare dei cibi nel forno a microonde oppure fare
una telefonata con il cellulare, implica usare microcontrollori. E questo è solamente
l’inizio. Ecco alcuni altri esempi: accendere un televisore con il telecomando, giocare con
un videogioco, e usare una calcolatrice. Tutti questi dispositivi contengono dei
microcontrollori che interagiscono con voi.

BASIC STAMP 2 – IL VOSTRO NUOVO MODULO MICROCONTROLLORE


Il modulo BASIC Stamp 2 della Parallax Inc. mostrato in Figura 1-2 ha incorporato al
suo interno un microcontrollore; è il circuito integrato più grosso, di colore nero. Il resto
dei componenti nel modulo BASIC Stamp si trovano anche negli oggetti comuni che
usate tutti i giorni. Tutto l'insieme è chiamato sistema computerizzato entrocontenuto.
Questo nome è comunemente accorciato in “sistema incorporato”. Frequentemente, tali
moduli sono comunemente chiamati solo “microcontrollori.”

Le attività in questo testo vi guideranno nella costruzione di circuiti simili a quelli


presenti negli apparecchi di uso comune e nei gingilli ad alta tecnologia. Scriverete
inoltre programmi al computer che il modulo BASIC Stamp eseguirà. Questi programmi
Pagina 14 · Che cosa è un microcontrollore?

sorveglieranno e faranno controllare dal BASIC Stamp i circuiti cosicché essi svolgano
funzioni utili.

Figura 1-2
Modulo
Microcontrollore
BASIC Stamp 2

®
In questo testo, “BASIC Stamp” si riferisce al modulo microcontrollore BASIC Stamp
2. Progettato e prodotto dalla Parallax Incorporated, il nome di questo modulo di solito si
abbrevia in BS2, ed è il primo della serie di moduli mostrati in Figura 1-3. Ciascun modulo è
leggermente diverso, ed è caratterizzato da velocità più alta, memoria pià grande, funzioni
aggiuntive, o alcune combinazioni di queste caratteristiche extra. Per saperne di più,
seguite il link “Compare BASIC Stamp Modules” al sito www.parallax.com/basicstamp.

Figura 1-3
Modelli BASIC
Stamp 2, da
sinistra a destra:
BS2, BS2e,
BS2sx, BS2p24,
BS2p40, BS2pe,
BS2px

INVENZIONI AFFASCINANTI COI MICROCONTROLLORI BASIC STAMP


Le applicazioni comuni non sono le sole cose con microcontrollori. Robot, macchinari,
progetti aerospaziali ed altri dispositivi ad alta tecnologia sono anch’essi fabbricati con
microcontrollori. Diamo uno sguardo ad alcuni esempi creati con i BASIC Stamp.

I Robot sono stati progettati per fare qualsiasi cosa, dall’aiutare gli studenti ad apprendere
di più circa i microcontrollori, a rasare i prati, alla soluzione di problemi meccanici
complessi. La Figura 1-4 mostra due robot esempio. Su ciascuno di essi, gli studenti
usano il BASIC Stamp per leggere sensori, controllare motori, e comunicare con altri
computer. Il robot sulla sinistra è chiamato Boe-Bot. Il progetto pubblicato nel libro
Robotica con il Boe-Bot può essere approfondito usando il Boe-Bot dopo aver eseguito
Per iniziare · Pagina 15

le attività di questo testo. Il robot sulla destra, chiamato VCD (veicolo con controllo a
distanza: in inglese ROV, Remotely Operated Vehicle), è stato costruito e collaudato in
un Istituto per Insegnanti Estivo MATE (Marine Advanced Technology Education). Gli
operatori vedono un televisore che visualizza quello che il ROV vede tramite una video-
camera e lo controllano con una combinazione di controlli manuali e un notebook. Il suo
BASIC Stamp misura profondità e temperatura, controlla il motore di spinta verticale, e
scambia informazioni con il notebook. Il MATE coordina gare regionali e internazionali
di ROV, per studenti che vanno dal livello di scuola media superiore all’università.

Figura 1-4
Robot didattici

Robot Boe-Bot (a
sinistra); ROV all’Istituto
Estivo per Insegnanti
MATE (a destra,
www.marinetech.org)

Altri robot risolvono problemi complessi, come il robot per il volo autonomo illustrato
nella Figura 1-5, a sinistra. Questo robot è stato costruito e collaudato dagli studenti di
ingegneria meccanica dell’università di California, a Irvine. Hanno usato un BASIC
Stamp per comunicare con un satellite del sistema GPS, cosicché il robot possa conoscere
la sua posizione ed altitudine. Il BASIC Stamp legge inoltre i sensori di livellamento e
controlla le impostazioni dei motori perché il robot possa volare correttamente. Il robot
millepiedi meccanico, sulla destra, è stato sviluppato da un professore all’università
tecnica Nanyang di Singapore. Ha più di 50 BASIC Stamp, e ciascuno comunica con gli
altri tramite una rete complessa che aiuta a controllare ed orchestrare il movimento di
ciascun set di zampe. Robot come questi non solo ci aiutano a capire meglio i progetti
della natura, ma potrebbero eventualmente essere usati per esplorare località remote o
perfino altri pianeti.
Pagina 16 · Che cosa è un microcontrollore?

Figura 1-5
Robot di ricerca che
contengono
Microcontrollori

Robot volante autonomo


a Università di California,
Irvine (a sinistra) e
Progetto Millepiedi alla
Universià di Nanyang (a
destra)
Con l’aiuto dei microcontrollori, i robot si assumeranno anche i lavori quotidiani, come
per esempio tagliare l’erba. Il BASIC Stamp all’interno del tagliaerba robotizzato della
figura 1-6 fa sì che il tagliaerba rimanga entro i confini del prato, legge anche i sensori
che rilevano ostacoli e controlla i motori che lo fanno muovere.

Figura 1-6
Tagliaerba robotizzato
con Modulo
Microcontrollore
BASIC Stamp 2

I microcontrollori sono usati anche nei progetti scientifici, ad alta tecnologia, ed


aerospaziali. La stazione meteorologica, mostrata a sinistra nella Figura 1-7, è usata per
raccogliere dati ambientali sulla degradazione della barriera corallina. Il BASIC Stamp al
suo interno raccoglie dati da molti sensori e li memorizza per farli recuperare
successivamente dagli scienziati. Il sottomarino al centro è un veicolo per l’esplorazione
sottomarina, e le sue eliche, telecamere e luci, sono tutte controllate da microcontrollori
BASIC Stamp. Il razzo mostrato sulla destra fa parte di una gara per lanciare nello spazio
un razzo privato. Nessuno ha vinto la gara, ma questo razzo ha almeno partecipato. Il
BASIC Stamp controllava esattamente ogni aspetto della sequenza di lancio.
Per iniziare · Pagina 17

Figura 1-7
Esempi di microcontrollori per
uso ambientale ed Aerospaziale

Raccolta dati ambientali dalla


EME Systems (a sinistra),
ricerca sottomarina dallo Harbor
Branch Institute (al centro), e
lancio di prova della JP
Aerospace (a destra)

Dalle comuni applicazioni domestiche su su fino alle applicazioni scientifiche ed


aerospaziali, saranno qui introdotte le basi dei microcontrollori che vi occorre conoscere
per iniziare progetti come questi. Lavorando sulle attività di questo libro, sperimenterete
ed apprenderete l’uso di una molteplicità di blocchi basilari presenti in tutti questi oggetti
ad alta tecnologia. Costruirete circuiti per display, sensori, e controlli di motori.
Apprenderete come collegare questi circuiti al BASIC Stamp, ed a scrivere programmi
che faranno controllare display, raccogliere dati da sensori, e controllare il movimento.
Di conseguenza, imparerete molti concetti e tecniche di elettronica e programmazione.
Prima di fine corso, potreste aver inventato un dispositivo di vostra progettazione.

HARDWARE E SOFTWARE
Ambientarsi con il BASIC Stamp è come l’utilizzo iniziale di un PC o un portatile. La
prima cosa che molte persone devono fare con un PC o un portatile nuovo, è di toglierlo
dalla scatola, collegarlo, installare e provare i programmi e forse, perfino scrivere di
propria mano del software usando un linguaggio di programmazione. Se è la prima volta
che utilizzate il BASIC Stamp, dovrete fare le stesse attività. Se siete in una classe, potete
trovare il BASIC Stamp già assemblato. In questo caso, il vostro insegnante può fornirvi
altre istruzioni. Altrimenti, questo capitolo vi guiderà in tutte le fasi di assemblaggio e
accensione del vostro nuovo microcontrollore BASIC Stamp.

ATTIVITÀ #1: OTTENERE IL SOFTWARE


Il software che userete in quasi tutte le attività e i progetti di questo testo, è l’Editor del
BASIC Stamp (versione 2.5 o superiore). Userete questo software per scrivere
programmi che il BASIC Stamp eseguirà. Potrete usare questo software anche per
visualizzare messaggi inviati dal BASIC Stamp. utili per capire che cosa sta accadendo.
Pagina 18 · Che cosa è un microcontrollore?

Requisiti del sistema (Computer)


Per eseguire il software BASIC Stamp Editor vi occorrerà un Personal Computer. Il
vostro computer dovrà avere le seguenti caratteristiche:

 Microsoft Windows 2000 o sistema operativo più recente


 Una porta seriale o USB disponibile
 Accesso ad Internet e un programma browser per Internet

Scaricare il software da Internet


È importante, se possibile, utilizzare sempre l’ultima versione del software Editor BASIC
Stamp. Il primo passo è andare sul sito web della Parallax e scaricare il software.

 Utilizzando un browser web, andate a www.parallax.com/basicstampsoftware


(Figura 1-8).

Figura 1-8
La pagina del software
BASIC Stamp Editor al
sito www.parallax.com/
basicstampsoftware

Questo è il sito per


scaricare l’ultima
versione del software.
Per iniziare · Pagina 19

 Cliccare sul pulsante Click Here to Download per scaricare l’ultima versione del
software BASIC Stamp Editor per Windows (Figura 1-9).

Figura 1-9
Il pulsante Download
sulla pagina del Software
Editor BASIC Stamp.

Cliccare sul pulsante per


iniziare lo scarico.

 Si aprirà una finestra di Scarico File, e vi verrà chiesto se volete eseguire o


salvare questo file (Figura 1-10). Cliccare sul pulsante Save.

Figura 1-10
Finestra di scarico File

Cliccare Save, quindi


salvare il file sul proprio
computer.

 Usare il campo Save in per scegliere un luogo sul vostro computer ove salvare il
file di installazione, quindi ciccare il pulsante Save (Figura 1-11).
Pagina 20 · Che cosa è un microcontrollore?

Figura 1-11
Finestra Save As

Scegliere un posto sul


vostro computer ove
salvare l’installatore di
software,poi cliccare su
Save.

 Quando vedrete “Download Complete,” cliccate sul pulsante Run (Figura 1-12.)
 Seguite le richieste che appariranno. Potrete vedere messaggi dal vostro sistema
operativo che vi chiedono di voler continuare con l’installazione. Accettate
sempre di voler continuare.

Figura 1-12
Messaggio
Download Complete

Cliccare Run.

Se viene richiesto,
confermate sempre di
voler continuare.

 Si aprirà la finestra dell’installatore di BASIC Stamp Editor (Figura 1-13).


Cliccate Next e seguite le richieste, accettando tutti i default.
Per iniziare · Pagina 21

Figura 1-13
Finestra
dell’installatore del
BASIC Stamp Editor

Cliccate Next.

 IMPORTANTE: quando appare il messaggio “Install USB Driver” (Figura


1-14), lasciate il segno di spunta al suo posto per il box Automatically
install/update driver (raccomandato) , e poi cliccate Next.

Figura 1-14
Messaggio
Install USB Driver

Lasciare il box
spuntato,e cliccate
Next.
Pagina 22 · Che cosa è un microcontrollore?

 Quando apparirà il messaggio “Ready to Install the Program” (Figura 1-15),


cliccare sul pulsante Install. Può apparire una barra di progresso, e il processo di
installazione può prendere alcuni minuti.

Figura 1-15
Pronto ad installare il
programma

Per continuare
cliccate Install.

A questo punto, può apparire una finestra aggiuntiva dietro la finestra corrente mentre
vengono aggiornati i driver USB. Questa finestra eventualmente si chiuderà da sola
quando l’installazione del driver è completa. Se non vedete questa finestra, non c’è alcun
problema.

Sui driver USB. I driver USB che vengono installati di default con la finestra dell’installatore
dell’Editor BASIC Stamp sono necessari per usare qualsiasi hardware Parallax connesso
alla porta USB del vostro computer. VCP sta per Virtual COM Port (porta COM virtuale), e
consentirà alla porta USB del vostro computer di apparire ed essere considerata dal
hardware Parallax come una porta seriale standard RS232.
Driver USB per Sistemi Operativi diversi I driver USB VCP inclusi nella finestra del
software Editor BASIC Stamp sono unicamente per alcuni sistemi operativi Windows. Per
maggiori informazioni, visitate il sito www.parallax.com/usbdrivers.

 Quando la finestra vi comunica che l’installazione è stata completata con


successo, cliccate Finish (Figura 1-16).
Per iniziare · Pagina 23

Figura 1-16
Installazione del
Editor BASIC
Stamp completata

Cliccare Finish.

ATTIVITÀ #2: USARE IL FILE DI AIUTO PER IMPOSTARE L’HARDWARE


In questo capitolo eseguirete il file di aiuto dell’Editor BASIC Stamp. All’interno del file
di aiuto, imparerete a conoscere le diverse schede di programmazione del BASIC Stamp
disponibili per il programma Stamps in Class, e determinerete quale state utilizzando.
Quindi, seguirete i passi nel file di Aiuto per connettere il vostro hardware al vostro
computer e provare il vostro sistema di programmazione BASIC Stamp.

Prima esecuzione dell’Editor BASIC Stamp


 Se vedete l’icona dell’Editor BASIC Stamp sul desktop del vostro computer,
cliccatela due volte (Figura 1-17).
 Oppure, cliccate sul menù Start del vostro computer, quindi scegliete Tutti i
programmi  Parallax Inc  BASIC Stamp Editor 2.5  BASIC Stamp Editor 2.5.

Figura 1-17
Icona del Editor BASIC
Stamp sul Desktop

Cliccare due volte per


lanciare il programma.
Pagina 24 · Che cosa è un microcontrollore?

 Sulla barra strumenti del Editor BASIC Stamp, cliccare Help sulla barra dei
menu (Figura 1-18) e poi selezionare BASIC Stamp Help… dal menù a tendina.

Figura 1-18
Aprire il Menu Help

Cliccare Help,poi
scegliere BASIC
Stamp Help dal
menu a tendina
.
Figura 1-19: Aiuto (Help) del Editor BASIC Stamp
Per iniziare · Pagina 25

 Cliccare sul link Getting Started with Stamps in Class nella parte in basso a destra
della pagina di Benvenuto (Welcome), come mostrato nell’angolo in basso a
destra della Figura 1-19.

Seguire le istruzioni nel file di aiuto


Da qui, seguirete le istruzioni nel file di Aiuto per completare questi compiti:

 Identificate quale scheda di sviluppo BASIC Stamp state usando


 Connettete la scheda di sviluppo al vostro computer
 Provate la vostra connessione di programmazione
 Provate a cercare i guasti della connessione di programmazione, se necessario
 Scrivete il vostro primo programma PBASIC per il vostro BASIC Stamp
 Quando avete finito, togliete alimentazione al vostro hardware

Quando avete completato le attività nel vostro file di Aiuto, tornate a questo libro e
continuate con il Sommario qui sotto prima di passare al Capitolo 2.

Che fare se non si sa cosa fare?


Se riscontrate problemi mentre seguite le istruzioni di questo libro o del file di Aiuto, avete
molte opzioni per ottenere supporto tecnico gratuito:
 Forum: iscrivetevi ad un forum e postate un messaggio al nostro forum gratuito
Stamps in Class con moderatore al sito forums.parallax.com.
 Email: inviate una email a support@parallax.com.
 Telefono: Negli Stati Uniti Continentali, chiamate il numero gratuito 888-99-
STAMP (888-997-8267). In tutti gli altri Stati chiamare (916) 624-8333.
 Maggiori risorse: Visitate www.parallax.com/support.

SOMMARIO
Questo capitolo vi ha guidato attraverso i seguenti argomenti:
 Una introduzione ad alcuni dispositivi che contengono microcontrollori
 Una introduzione al modulo BASIC Stamp
 Panoramica di alcune interessanti invenzioni fatte con i moduli BASIC Stamp
 Dove trovare il software gratuito Editor BASIC Stamp che userete in quasi tutti
gli esperimenti in questo testo
 Come installare il software Editor BASIC Stamp
Pagina 26 · Che cosa è un microcontrollore?

 Come utilizzare il file di Aiuto dell’Editor BASIC Stamp e il Manuale BASIC


Stamp
 Introduzione al modulo BASIC Stamp, alla scheda Board of Education, e alla
scheda HomeWork Board
 Come impostare il vostro hardware BASIC Stamp
 Come provare i vostri software ed hardware
 Come scrivere ed eseguire un programma PBASIC
 Usare i comandi DEBUG ed END
 Usare il carattere di controllo CR e il formattatore DEC
 Una breve introduzione al codice ASCII
 Come togliere tensione alla vostra scheda Board of Education o HomeWork
Board quando avete finito

Domande
1. Che cosa è un microcontrollore?
2. Un modulo BASIC Stamp è un microcontrollore, o ne contiene uno?
3. Quali tracce cerchereste per verificare se un meccanismo come una radio sveglia
o un telefono cellulare contiene un microcontrollore o no?
4. Cosa significa un apostrofo all’inizio di una riga di codice in un programma
PBASIC?
5. Quali istruzioni PBASIC avete appreso in questo capitolo?
6. Diciamo che volete interrompere il vostro progetto BASIC Stamp per andare a
fare uno spuntino, oppure volete forse fare una pausa più lunga e tornare ad
occuparvi del progetto tra due giorni. Cosa dovrete sempre fare prima della
vostra interruzione?

Esercizi
1. Spiegate cosa fa l’asterisco in questa istruzione:
DEBUG DEC 7 * 11

2. Indovinate cosa visualizzerà il terminale di Debug se eseguite questa istruzione:


DEBUG DEC 7 + 11

3. C’è un problema con queste due istruzioni. Quando eseguite il codice, i numeri
che esse visualizzano sono attaccati insieme, cosicché ci appare un unico grande
Per iniziare · Pagina 27

numero invece di due numeri piccoli. Modificate queste due istruzioni in modo
che le risposte appaiano su righe distinte nel terminale di Debug.
DEBUG DEC 7 * 11
DEBUG DEC 7 + 11

Progetti
1. Usare DEBUG per visualizzare la soluzione del problema: 1 + 2 + 3 + 4.
2. Salvate FirstProgramYourTurn.bs2 (PrimoProgrammaVostroTurno.bs2) sotto
altro nome. Se dovete porre l’istruzione DEBUG mostrata sotto sulla riga che
precede l’istruzione END nel programma, quali altre righe dovrete cancellare e
avere lo stesso funzionamento? Modificate la copia del programma per provare
la vostra ipotesi (la vostra previsione di cosa accadrà).
DEBUG "Quant’è 7 X 11?", CR, "Risposta: ", DEC 7 * 11

Soluzioni
Q1. Un microcontrollore è una specie di computer in miniatura che si trova in
prodotti elettronici.
Q2. Il modulo BASIC Stamp contiene un chip microcontrollore.
Q3. Se l’apparato ha pulsanti ed un display digitale, queste sono buone tracce perché
al suo interno contenga un microcontrollore.
Q4. Un commento.
Q5. DEBUG ed END
Q6. Scollegare la alimentazione elettrica dal progetto BASIC Stamp.
E1. Moltiplica i due operandi 7 ed 11, e dà come risultato il prodotto 77. L’asterisco
è l’operatore di moltiplicazione.
E2. Il terminale di Debug visualizza: 18
E3. Per risolvere il problema, aggiungere un ritorno carrello usando i carattere di
controllo CR e una virgola.
DEBUG DEC 7 * 11
DEBUG CR, DEC 7 + 11

P1. Ecco un programma che visualizza la soluzione del problema: 1+2+3+4.


Pagina 28 · Che cosa è un microcontrollore?

' Che cos’è un Microcontrollore - Cap01Pr01_Aggiungi1234.bs2


'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "Quant’è 1+2+3+4?"


DEBUG CR, "Risposta: "
DEBUG DEC 1+2+3+4

END

P2. Le ultime tre righe DEBUG possono essere cancellate. Occorre un CR aggiuntivo
dopo il messaggio "Ciao".

' Che cos’è un Microcontrollore - Cap01Pr02_PrimoProgrVostroTurno.bs2


' BASIC Stamp invia un messaggio al terminale di Debug.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Ciao, sono io, il tuo BASIC Stamp!", CR

DEBUG "Quant’è 7 X 11?", CR, "Risposta: ", DEC 7 * 11

END

L’uscita dal terminale di Debug è:


Ciao, sono io, il tuo BASIC Stamp!
Quant’è 7 X 11?
Risposta: 77

Questa uscita è la stessa di quella prodotta dal codice precedente. Questo è un


esempio di come utilizzare le virgole per far uscire una serie di informazioni,
tramite una sola istruzione DEBUG contenente più elementi al suo interno
.
Ingresso digitale - Pulsanti · Pagina 29

Capitolo 2: Luci accese – Luci spente


LUCI INDICATRICI (O LUCI SPIA)
Le luci indicatrici (o spie luminose, o indicatori luminosi) sono talmente comuni che la
maggior parte delle persone tende a non dar loro molta importanza. La Figura 2-1 mostra
tre luci indicatrici su una stampante laser. A seconda di quale luce sia accesa, la persona
che sta utilizzando la stampante sa se sta funzionando in modo corretto o richiede
attenzione. Ecco pochi esempi di dispositivi con spie luminose: impianti stereo da
automobile, televisori, riproduttori DVD, unità disco, stampanti, e pannelli di controllo di
sistemi di allarme.

Figura 2-1
Luci indicatrici

Le luci indicatrici
sono d’uso comune
in molti dispositivi
d’impiego quotidiano.

Accensione e spegnimento di indicatori luminosi è semplicemente un problema di


connessione o disconnessione da una sorgente di energia. In alcuni casi, la spia luminosa
è connessa direttamente alla batteria o all’alimentatore elettrico, come ad esempio la spia
indicatrice di alimentazione sulla Board of Education. Altre spie luminose sono accese o
spente da un microcontrollore contenuto entro il dispositivo. Queste sono, di solito, spie
luminose dello stato che informano quale dispositivo sta funzionando.

FARE IN MODO CHE UN DIODO A EMISSIONE (LED) EMETTA LUCE


La maggior parte delle luci indicatrici che vedete sui dispositivi sono dette diodi a
emissione di luce. Spesso, nei libri e negli schemi circuitali, ci si riferisce ai diodi a
emissione di luce con le lettere LED. Il nome si legge con le tre lettere: “L-E-D.” Potete
Pagina 30 · Che cosa è un microcontrollore?

costruire un circuito a LED e dargli energia, e il LED emette luce. Potete scollegare
l’energia da un circuito a LED, e il LED smette di emettere luce.
Un circuito a LED può essere connesso al BASIC Stamp, e il BASIC Stamp può essere
programmato per collegare e scollegare l’energia al circuito LED. Ciò è molto più facile
che cambiare manualmente il cablaggio del circuito o connettere e disconnettere la
batteria. Il BASIC Stamp può essere anche programmato per fare quanto segue:

 Accendere e spegnere un circuito LED con velocità diverse


 Accendere e spegnere un circuito LED un certo numero di volte
 Controllare più di un circuito LED
 Controllare il colore di un circuito a LED bicolore (a due colori)

ATTIVITÀ #1: COSTRUZIONE E PROVA DEL CIRCUITO A LED


È importante provare singolarmente i componenti prima di assemblarli in un sistema più
grande. L’attività ha lo scopo di costruire e provare due diversi circuiti a LED. Il primo
circuito è quello che fa in modo che il LED emetta luce. Il secondo circuito è quello che
non gli fa emettere luce. Nell’attività successiva a questa, costruirete il circuito a LED in
un sistema più grande connettendolo al BASIC Stamp. Scriverete poi un programma che
fa in modo che il BASIC Stamp faccia emettere luce al LED, quindi non gli faccia
emettere luce. Provando prima ciascun circuito LED per accertarvi che funzioni, avrete
maggior confidenza col suo funzionamento quando lo collegate ad un BASIC Stamp.

Introduzione della Resistenza


Una resistenza (o resistore) è un componente che “resiste” al flusso di elettricità. Questo
flusso di elettricità è chiamato corrente. Ciascuna resistenza ha un valore che dice con
quanta forza essa resiste al flusso di corrente. Il valore della resistenza è detto ohm, e il
simbolo per l’ohm è la lettera greca omega: Ω. Più avanti in questo libro vedrete il
simbolo kΩ, che significa kilo-ohm, o un migliaio di ohm. La resistenza con cui
lavorerete in questa attività è la resistenza da 470 Ω mostrata in Figura 2-2. La
resistenza ha due fili (detti conduttori o fili, leads in inglese, pronuncia “lìds”), ciascuno
che esce da una delle due estremità. Tra i due conduttori c’è un involucro ceramico, ed è
questa la parte che resiste al flusso di corrente. In tutti gli schemi circuitali che hanno
resistenze si usa il simbolo linea seghettata (a sinistra) per dire alla persona che costruisce
il circuito che deve usare una resistenza da 470 Ω. Questo è un simbolo schematico. Il
disegno a destra è un disegno di parte usato in alcuni testi Stamps in Class a livello
principianti per aiutarvi a identificare la resistenza nel vostro kit, e dove porla quando
costruite il circuito.
Ingresso digitale - Pulsanti · Pagina 31

Gold
Silver Figura 2-2
or
Blank Disegno di parte di una Resistenza da
470  470 Ω
Yellow
Giallo Brown
Marrone
Violet
Viola
Simbolo schematico (a sinistra) e
Disegno di Parte (a destra)

Le resistenze come quelle che stiamo usando in questa attività hanno strisce colorate che
ci dicono quali sono i loro valori di resistenza. Per ogni valore di resistenza c’è una
diversa combinazione (o codice) di colori. Ad esempio, il codice di colori per la
resistenza da 470 Ω è giallo-viola-marrone (yellow-violet-brown).

C’è anche una quarta striscia che indica la tolleranza sul valore della resistenza. La
tolleranza è misurata in percentuale, e ci dice quanto la vera resistenza della parte
potrebbe essere fuori dalla resistenza indicata. La quarta striscia potrebbe essere oro
(gold) (5%), argento (silver) (10%) o nessuna striscia (20%). Per le attività in questo
libro la tolleranza delle resistenze non è importante, ma lo è il loro valore.

Ciascuna striscia colorata che dà il valore della resistenza corrisponde a una cifra, e
questi colori/cifre sono elencati nella Tabella 2-1. La Figura 2-3 mostra come usare
ciascuna striscia di colore con la tabella per determinare il valore di una resistenza.

Tabella 2-1
Valori del codice dei Tolerance
Valore di
colori per le resistenze Code
Tolleranza

Cifra Colore (inglese)


0 Nero (Black)
First
Prima Digit
cifra | Number
Seconda of Zeros
cifra
1 Marrone (Brown) Numero di zeri Figura 2-3
Second Digit Codice dei
2 Rosso (Red)
3 Arancio (Orange) Colori per le
Resistenze
4 Giallo (Yellow)
5 Verde (Green)
Tolerance Code = Valore di tolleranza
6 Blu (Blue)
7 Viola (Violet) Oro (gold) 5%
8 Grigio (Gray) Argento (silver) 10%
Nessuna striscia 20%
9 Bianco (White)
Pagina 32 · Che cosa è un microcontrollore?

Ecco un esempio che mostra come usare la Tabella 2-1 e la Figura 2-3 per descrivere un
valore di resistenza che prova che giallo-viola-marrome è davvero 470 Ω:

 La prima striscia è gialla, il ché significa che la cifra più a sinistra è un 4.


 La seconda striscia è viola, il ché significa che la successiva cifra è un 7.
 La terza striscia è marrone. Poiché marrone è 1, ciò significa aggiungere uno
zero a destra delle prime due cifre.

Giallo-Viola-Marrone = 4-7-0 = 470 Ω.

Introduzione del LED


Un diodo è una valvola con corrente in un solo senso, e un diodo emettitore di luce
(LED) emette luce quando la corrente lo attraversa. A differenza dei codici di colore su
una resistenza, il colore del LED di solito ci dice di quale colore si illuminerà quando la
corrente lo attraverserà. I contrassegni importanti di un LED sono contenuti nella sua
forma. Poiché è una valvola elettronica ad un solo senso, accertatevi di connetterlo al
vostro circuito nel modo corretto oppure non lavorerà nel modo che volevate.

La Figura 2-4 mostra il simbolo schematico e il disegno di parte di un LED. Un LED ha


due terminali. Uno è detto anodo, e l’altro catodo. In questa attività, dovrete costruire un
circuito che incorpori il LED, assicurandovi con attenzione che i conduttori collegati
all’anodo e al catodo siano connessi al circuito in modo corretto. Sul disegno di parte, il
conduttore dell’anodo è contrassegnato col segno più (+). Sul simbolo schematico,
l’anodo è la parte larga del triangolo. Nel disegno di parte, il condutttore del catodo è il
piedino non contrassegnato, e sul simbolo schematico, il catodo è la linea che esce dalla
punta del triangolo.
Ingresso digitale - Pulsanti · Pagina 33

Figura 2-4
Disegno di Parte e simbolo
schematico di un LED

Disegno di Parte (sopra) e simbolo


schematico (sotto).
+
Il disegno di parte del LED nelle
ultime immagini avrà un segno + in
prossimità della gamba dell’anodo.

LED
Quando iniziate ad assemblare il vostro circuito, assicuratevi di controllare il simbolo
schematico e il disegno di parte. Per il disegno di parte, notate che i conduttori del LED
hanno lunghezze diverse. Il più lungo è connesso all’anodo del LED, e il più corto è
connesso al suo catodo. Inoltre, se osservate da vicino l’involucro plastico del LED, esso
è rotondo, ma ha una piccolo sporgenza piatta vicino al conduttore più corto, per dire che
è il catodo. Questo risulta comodo quando i fili vengono tagliati alla stessa lunghezza.

Parti del circuito di prova del LED


(1) LED – Verde
(1) Resistenza – 470 Ω (giallo-viola-marrone)

Identificazione delle parti: In aggiunta ai disegni di parte nella Figura 2-2 e nella Figura
2-4, potete utilizzare le foto nell’ultima pagina del libro per identificare le parti del kit
necessarie per questa attività e per tutte le altre.

Assemblaggio del circuito di prova del LED


Costruirete un circuito inserendo i fili del LED e della resistenza in piccoli fori detti
zoccoli sull’area per i prototipi mostrata in Figura 2-5. Quest‘area per i prototipi ha
zoccoli neri lungo la parte superiore e il lato sinistro. Quelli lungo la parte superiore
hanno etichette sopra di essi: Vdd (+5 V), Vin (la tensione non regolata proveniente
direttamente dalla batteria o dall’alimentatore), e Vss (0 V, chiamata anche terra o
massa). Questi zoccoli sono detti terminali a tensione, e saranno usati per alimentare i
vostri circuiti con elettricità. Gli zoccoli neri sul lato sinistro hanno etichette come P0,
Pagina 34 · Che cosa è un microcontrollore?

P1, fino a P15. Potrete usare questi zoccoli per connettere il vostro circuito a piedini di
ingresso/uscita del modulo BASIC Stamp.
Vdd Vin Vss
X3

P15
P14
P13 Figura 2-5
P12 Area per i prototipi
P11
P10
P9 Terminali a tensione (zoccoli neri
P8
P7 lungo la parte superiore), piedini I/O
P6 di accesso (zoccoli neri lungo il lato),
P5 e schedina senza saldature o
P4
P3 breadboard (zoccoli bianchi)
P2
P1
P0
X2

I piedini di Ingresso/uscita sono chiamati di solito piedini (pin) I/O, e dopo aver connesso il
vostro circuito ad uno o più di questi piedini I/O, potete programmare il vostro BASIC Stamp
per controllare il circuito (ingresso o input) oppure inviare segnali acceso o spento al circuito
(uscita o output). Potrete provare questo nella prossima attività.

La tavoletta bianca con molti fori è detta breadboard senza saldature. Userete la
breadboard per connettere componenti tra loro e costruire circuiti. La breadboard ha 17
righe di zoccoli. In ciascuna riga ci sono due gruppi da cinque zoccoli, separati da un
solco nel mezzo. Tutti gli zoccoli di un gruppo sono collegati assieme. Quindi, se infilate
due fili nello stesso gruppo di 5 zoccoli, essi saranno in contatto elettrico. Due fili nella
stessa riga ma su lati opposti rispetto al solco centrale non saranno collegati. Molti
dispositivi sono progettati per essere connessi sopra questo solco, come il pulsante che
useremo nel Capitolo 3.

Unteriori notizie sul breadboarding: Per imparare la storia delle breaboard, come sono
costruite le breadboard moderne, e come usarle, vedere le risorse video al sito
www.parallax.com/go/WAM.

La Figura 2-6 mostra lo schema di un circuito, e una figura di come apparirà quel circuito
se costruito nell’area prototipi. Ciascun gruppo di 5 zoccoli può collegare fino a 5 fili, o
conduttori, l’uno all’altro. Per questo circuito, la resistenza e il LED sono connessi
perché ciascuno ha un filo connesso allo stesso gruppo di 5 zoccoli. Notare che un filo
della resistenza è connesso a Vdd (+5 V) cosicché il circuito può assorbire potenza
Ingresso digitale - Pulsanti · Pagina 35

elettrica. L’altro filo è connesso al filo dell’anodo del LED. Il filo del catodo del LED è
connesso a Vss (0 V, terra) e completa il circuito.

Siete ora pronti a montare il circuito mostrato in Figura 2-6 (sotto) connettendo i fili del
LED e della resistenza entro gli zoccoli dell’area prototipi. Seguite questi passi:

 Scollegate energia dalla vostra Board of Education o dalla HomeWork Board.


 Usate la Figura 2-4 per decidere quale filo è connesso al catodo del LED.
Cercate il filo più corto e la sporgenza piatta sulla parte plastica del LED.
 Connettete il catodo del LED ad uno degli zoccoli neri etichettati Vss nell’area
prototipi.
 Collegate l’anodo del LED (l’altro filo, più lungo) allo zoccolo indicato sulla
porzione breadboard dell’area prototipi.
 Collegate uno dei fili della resistenza allo stesso gruppo di 5 zoccoli dell’anodo
del LED. Così questi due fili saranno interconnessi.
 Collegate l’altro filo della resistenza ad uno degli zoccoli contrassegnati Vdd.
La direzione è importante per il LED, non per la resistenza. Se collegate il LED al
rovescio, il LED non emetterà alcuna luce quando date energia. La resistenza resiste
soltanto al flusso di corrente. Non c’è verso avanti o indietro per una resistenza.

 Ricollegate energia alla vostra Board of Education o alla HomeWork Board.


 Controllate che il vostro LED verde emetta luce. Dovrebbe risplendere di verde.

Figura 2-6
Vdd Vin Vss
Vdd X3
LED acceso, cablato direttamente a
+ tensione
P15
P14
P13 Schema del circuito (a sinistra) e
470  P12 diagramma di cablaggio (a destra).
P11
P10
P9 Notare che uno dei fili della
P8
LED P7 resistenza e iI filo dell’anodo del
P6 LED verde sono connessi allo
P5
P4 stesso gruppo di 5 zoccoli. I due
P3 componenti risultano quindi
Vss P2
connessi elettricamente.
P1
P0
X2
Pagina 36 · Che cosa è un microcontrollore?

Se il vostro LED verde non emette luce quando collegate la scheda a tensione:

 Alcuni LED sono più brillanti se visti dall’alto. Tentate di osservare direttamente
dal di sopra la cupola dell’involucro plastico del LED.
 Se la stanza è illuminata, provate a spegnere alcune luci, oppure fate ombra sul
LED con le vostre mani.

Se nn vedete ancora alcuna luce verde, provate questi passi:

 Controllate due volte il circuito per accertarvi che il catodo e l’anodo del LED
siano connessi in modo corretto. Se non lo sono, rimuovete semplicemente il
LED, dategli mezzo giro e reinseritelo negli zoccoli. Il LED non si danneggia se
lo inserite al rovescio, semplicemente non emetterà luce. Quando lo avrete
connesso nel verso corretto, emetterà luce.
 Controllate due volte il circuito per accertarvi di avelo costruito esattamente
come mostra la Figura 2-6.
 Se state utilizzando un kit “What’s a Microcontroller” (Che cos’è un
microcontrollore) utilizzato da altre persone prima di voi, il LED può essere
stato danneggiato, quindi provatene un altro.
 Se siete in una classe di laboratorio, fate il controllo con il vostro istruttore.

Ancora bloccati? Provate queste risorse gratuite disponibili online:


Visitate i forum moderati Stamps In Class: Se non avete un istruttore o un amico che vi
può aiutare, potete sempre servirvi del forum Stamps in Class al sito
http://forums.parallax.com. Se non ottenete risposta alla vostra domanda sul sito, potete
contattare il supporto tecnico Parallax (Parallax Technical Support) seguendo il link di
supporto al sito www.parallax.com.

Come opera il circuito di prova del LED


I terminali Vdd e Vss forniscono pressione elettrica nello stesso modo in cui lo fa una
batteria. Gli zoccoli Vdd sono come il polo positivo di una batteria, e gli zoccoli Vss
sono come il polo negativo della batteria. La Figura 2-7 mostra come l’applicare la
pressione elettrica ad un circuito con una batteria provoca il flusso di elettroni attraverso
di esso. Questo flusso di elettroni è detto corrente elettrica, o più spesso soltanto
corrente. La corrente elettrica è limitata dalla resistenza. Questa corrente produce
l’emissione di luce del diodo.
Ingresso digitale - Pulsanti · Pagina 37

-
- -
+ - Figura 2-7
N
- - LED Acceso: Flusso di elettroni nel
N N
+++ + + - circuito
+++ = N - -
+++
--- - I segni meno nei cerchietti mostrano
- - -N - - gli elettroni che fluiscono dal polo
-N - N negativo della batteria al suo polo
_ - -
- positivo.
- - - - -

Le reazioni chimiche entro la batteria forniscono la corrente al circuito. Il polo negativo


della batteria contiene un composto che ha molecole con un elettrone in più (mostrate in
Figura 2-7 da segni meno). Il polo positivo della batteria ha un composto chimico con
molecole alle quali manca un elettrone (mostrate da segni più). Quando un elettrone lascia
una molecola nel polo negativo e viaggia attraverso il filo, è detto elettrone libero (mostrato
anche dai segni meno). La molecola che perde questo elettrone in più non ha più una
carica negativa extra; ed è ora detta neutra (mostrata da una N). Quando un elettrone
raggiunge il polo positivo, si unisce ad una molecola cui mancava un elettrone, e ora la
molecola è anch’essa neutra.

La Figura 2-8 mostra il flusso di elettricità che attraversa il LED utilizzando la notazione
dello schema circuitale. La pressione elettrica attraverso il circuito è chiamata voltaggio
(o tensione). Per mostrare il voltaggio applicato ad un circuito sono usati i segni + e – .
La freccia mostra la corrente che fluisce attraverso il circuito. Questa freccia è quasi
sempre mostrata puntare nella direzione opposta al flusso reale degli elettroni.
Beniamino Franklin è stato accusato di non essere stato attento agli elettroni quando ha
deciso di rappresentare il flusso di corrente come carica che passa dal terminale positivo
di un circuito a quello negativo. Al momento in cui i fisici scoprirono la vera natura della
corrente, la convenzione era già stata ben stabilita.
Pagina 38 · Che cosa è un microcontrollore?

Voltaggio
Voltaggio Vdd
Voltage +
Figura 2-8
Resistance
Resistenza Schema circuitale LED-Acceso che
mostra il flusso di corrente e il
Corrente
Current voltaggio convenzionali
LED
I segni + e – mostrano il voltaggio
applicato al circuito, e la freccia
Voltaggio mostra il flusso di corrente che
Voltage
Voltaggio - Vss
attraversa il circuito.

Un disegno schematico (simile alla Figura 2-8) è una imagine che spiega come uno o più
circuiti sono connessi tra loro. i disegni schematici (o schemi di circuito) sono usati dagli
studenti, dagli hobbisti di elettronica, dagli elettricisti, dagli ingegneri, e di solito da chiunque
lavori con circuiti.
: Aggiunte su elettricità contiene alcuni termini di glossario e una attività dalla quale potete
acquisire maggior familiarità con le misure di tensione (o voltaggio), corrente e resistenza.

Il vostro turno – Modifica del circuito di prova del LED


Nella prossima attività, programmerete il BASIC Stamp per accendere il LED, poi
spegnerlo, poi accenderlo di nuovo. Il BASIC Stamp farà questo commutando il circuito
del LED posto tra due connessioni differenti, Vdd e Vss. Il vostro lavoro con il circuito
sarà finito quando la resistenza è stata connessa a Vdd, e il LED emette luce. Fate i
cambiamenti mostrati in Figura 2-9 per verificare che il LED si spegnerà (non emette
luce) quando il filo della resistenza viene scollegato da Vdd e connesso a Vss.

 Scollegate energia dalla vostra Board of Education o HomeWork Board.


 Disinnestate il filo della resistenza innestato nello zoccolo Vdd, e connettetelo ad
uno zoccolo etichettato Vss come mostrato in Figura 2-9.
 Ricollegate energia alla vostra Board of Education o HomeWork Board.
 Controllate che il vostro LED verde non stia emettendo luce. Non deve splendere
di luce verde.
Ingresso digitale - Pulsanti · Pagina 39

Perché il LED non si illumina? Poiché entrambe le estremità del circuito sono connesse
allo stesso voltaggio (Vss), non c’è alcuna pressione elettrica attraverso il circuito. Quindi,
nessuna corrente fluisce nel circuito, e il LED rimane spento.

Vdd Vin Vss


X3
+
P15
P14 Figura 2-9
P13
P12 Circuito con LED spento
P11
P10
P9
Schema (a sinistra) e
P8 diagramma di cablaggio
470  P7
LED (a destra).
P6
P5
P4
P3
Vss Vss P2
P1
P0
X2

ATTIVITÀ #2: CONTROLLO ACCESO/SPENTO CON IL BASIC STAMP


Nell’attività #1, sono stati costruiti e provati due diversi circuiti. Un circuito faceva
emettere luce al LED, l’altro no. La Figura 2-10 mostra come il BASIC Stamp può fare
la stessa cosa se connettete un circuito LED ad uno dei suoi piedini (pin) di I/O. In questa
attività, connetterete il circuito del LED al BASIC Stamp e programmerete che accenda e
spenga il LED. Esperimenterete anche programmi che fanno sì che il BASIC Stamp
faccia questo a velocità diverse.
Pagina 40 · Che cosa è un microcontrollore?

Figura 2-10
SOUT 1 24 VIN SOUT 1 24 VIN
Commutazione
SIN 2
BS2
23 VSS SIN 2
BS2
23 VSS del BASIC
ATN
VSS
3

4
22

21
RES
VDD (+5V)
ATN
VSS
3

4
22

21
RES
VDD (+5V)
Stamp
P0 5 Vdd 20 P15 P0 5 Vdd 20 P15
P1 6 19 P14 P1 6 19 P14 Il BASIC Stamp
P2 7 Vss 18 P13 P2 7 Vss 18 P13
P3 8 17 P12 P3 8 17 P12 può essere
P4 9 16 P11 P4 9 16 P11 programmato
P5 P10 P5 P10
per connettere
10 15 10 15

P6 11 14 P9 P6 11 14 P9
P7 12 13 P8 P7 12 13 P8 internamente
BS2-IC BS2-IC l’ingresso del
circuito LED a
Vdd o Vss.

Ci sono due grosse differenze tra cambiare la connessione manualmente e far fare questo
al BASIC Stamp. La prima: il BASIC Stamp non deve togliere tensione alla scheda di
sviluppo quando cambia l’alimentazione del circuito LED da Vdd a Vss. La seconda:
mentre un uomo può effettuare questo cambiamento molte volte al minuto, il BASIC
Stamp può far questo migliaia di volte al secondo!

Parti del circuito di prova del LED


Le stesse dell’attività #1.

Connettere il circuito del LED al BASIC Stamp


Il circuito del LED mostrato in Figura 2-11 è cablato in modo quasi identico al circuito
dell’esercizio precedente. La differenza è che il filo della resistenza che è stato
commutato manualmente tra Vdd e Vss, è ora connesso ad un pin I/O del BASIC Stamp.

 Scollegate energia dalla vostra Board of Education o dalla HomeWork Board.


 Modificate il circuito col quale stavate lavorando nell’attività #1 in modo che
corrisponda alla Figura 2-11.
Ingresso digitale - Pulsanti · Pagina 41

Vdd Vin Vss


P14 Figura 2-11
X3
470  + Circuito del LED
P15
LED P14
controllato da BASIC
P13 Stamp
P12
P11
Vss P10 L’ingresso del circuito
P9 del LED è ora
P8
P7 connesso ad un pin
P6 I/O di un BASIC
P5
P4
Stamp invece che a
P3 Vdd o Vss.
P2
P1
P0
X2

Le resistenze sono essenziali. Ricordare sempre di usare una resistenza. Senza di essa,
nel circuito fluirebbe troppa corrente, ed essa potrebbe danneggiare più parti del vostro
circuito, o del BASIC Stamp, o della Board of Education o HomeWork Board.

Accendere e spegnere il LED con un programma


Il programma esempio fa lampeggiare il LED – acceso e spento – una volta per secondo.
Esso inoltre introduce molte nuove tecniche di programmazione. Dopo averlo eseguito,
farete esperimenti con diverse parti del programma per comprendere meglio come lavora.

Programma esempio: LedAccesoSpento.bs2


 Digitare il codice di LedAccesoSpento.bs2 nell’Editor del BASIC Stamp.
 Ricollegare energia alla vostra Board of Education o HomeWork Board.
 Eseguire il programma.
 Verificare che il LED lampeggi acceso e spento una volta per secondo.
 Scollegare energia quando avete finito di usare il programma.
Pagina 42 · Che cosa è un microcontrollore?

'Che cos’è un microcontrollore - LedAccesoSpento.bs2


'Accende e spegne un LED. Ripete 1 volta per secondo indefinitamente.

'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "Il LED connesso a P14 sta lampeggiando!"

DO

HIGH 14
PAUSE 500
LOW 14
PAUSE 500

LOOP

Come lavora LedAccesoSpento.bs2


Il comando (o istruzione) DEBUG "Il LED connesso a P14 sta lampeggiando!" fa
apparire questa frase nel terminale di Debug. Il comando HIGH 14 fa in modo che il
BASIC Stamp colleghi internamente il pin I/O P14 a Vdd. Questo accende il LED.

Il comando PAUSE 500 fa in modo che il BASIC Stamp non faccia niente per ½ secondo
mentre il LED rimane acceso. Il numero 500 dice al comando PAUSE di attendere per
500/1000 di un secondo. Il numero che segue PAUSE è chiamato argomento. Gli
argomenti danno ai comandi PBASIC l’informazione che occorre per eseguire il
comando. Se cercate PAUSE nel Manuale BASIC Stamp, scoprirete che questo numero è
detto argomento Duration (Durata). Il nome Duration per questo argomento è stato scelto
per dire che il comando PAUSE fa una pausa di una certa “durata” di tempo, in
millisecondi.

Che cos’è un millisecondo? Un millisecondo è 1/1000 di un secondo. Si abbrevia con ms.


Occorrono 1000 ms per uguagliare un secondo.

Il comando LOW 14 fa in modo che il BASIC Stamp colleghi internamente il pin I/O P14
a Vss. Questo spegne il LED. Poiché LOW 14 è seguito da un altro comando PAUSE
500, il LED rimane spento per mezzo secondo.

La ragione per cui il codice si ripete di nuovo indefinitamente è il fatto che è annidato tra
le parole chiave PBASIC DO e LOOP. La Figura 2-12 mostra come lavora un ciclo
DO…LOOP. Ponendo il segmento di codice che accende e spegne il LED con le pause, tra i
Ingresso digitale - Pulsanti · Pagina 43

comandi DO e LOOP, si dice al BASIC Stamp di eseguire questi quattro comandi di nuovo,
indefinitamente. Il risultato è che il LED lampeggia acceso e spento, di nuovo
indefinitamente. Il LED si mantiene lampeggiante finché scollegate l’energia, o premete
e tenete premuto il pulsante Reset, o finché la batteria si scarica. Il codice che ripete
indefinitamente un insieme di comandi si chiama ciclo infinito (infinite loop).

DO
HIGH 14 Figura 2-12
PAUSE 250 DO…LOOP
LOW 14 Il codice tra le parole chiave DO e
PAUSE 250 LOOP viene eseguito ripetutamente
senza fine.
LOOP

Un test diagnostico per il vostro computer


Sebbene non sia frequente, ci sono alcuni computer, come alcuni laptop e stazioni di
aggancio, che arrestano un programma PBASIC dopo la prima volta che il programma
esegue un ciclo DO...LOOP. Questi computer hanno porte seriali di progetto non
standard. Ponendo un comando DEBUG nel programma LedAccesoSpento.bs2, il terminale
di Debug resta aperto ed evita che si verifichi quesrto comportamento. Rieseguirete
questo programma senza il comando DEBUG per vedere se il vostro computer ha il
problema di porta seriale non standard. Non è probabile, ma è importante che lo sappiate.

 Aprite LedAccesoSpento.bs2.
 Cancellate completamente il comando DEBUG.
 Eseguite il programma modificato mentre osservate il vostro LED.

Se il LED lampeggia continuamente acceso e spento, come faceva quando eseguivate il


programma originario con il comando DEBUG, il vostro computer non ha questo problema.

Se il LED lampeggia acceso e spento una sola volta e quindi smette di lampeggiare, avete
un computer con una porta seriale di progetto non standard. Se scollegate il cavo seriale
dalla vostra scheda e premete il pulsante Reset, il BASIC Stamp eseguirà il programma
correttamente senza congelarsi. In programmi scritti da voi, vi occorrerà sempre
aggiungere un singolo comando DEBUG, come ad esempio questo:
Pagina 44 · Che cosa è un microcontrollore?

DEBUG "Programma in esecuzione!"


…proprio dopo le direttive al compilatore. Questo comando aprirà il terminale di Debug
e manterrà aperta la porta COM. Ciò eviterà il congelamento dei vostri programmi dopo
la prima esecuzione di un ciclo DO...LOOP, oppure dopo un qualsiasi altro comando di
ciclo, che imparerete negli ultimi capitoli. Vedrete questi comandi in alcuni dei
programmi esempio che altrimenti non avrebbero alcun bisogno di una istruzione DEBUG.
Quindi, dovreste riuscire ad eseguire tutti i programmi rimanenti di questo libro perfino
se il vostro computer fallisse il test diagnostico, ma in quel caso accertatevi di aggiungere
un breve comando DEBUG quando iniziate a scrivere programmi progettati e scritti da voi.

Il vostro turno – Temporizzazione e ripetizioni


Modificando l’argomento Duration del comando PAUSE potete modificare la quantità di
tempo in cui il LED resta acceso e spento. Per esempio, cambiando entrambi gli
argomenti Duration in 250, provochereste il lampeggiamento acceso – spento del LED
due volte per secondo. Il ciclo DO…LOOP nel vostro programma apparirebbe ora così:
DO

HIGH 14
PAUSE 250
LOW 14
PAUSE 250

LOOP

 Aprite LedAccesoSpento.bs2 e salvatene una copia come


LedAccesoSpentoVostroTurno.bs2.
 Cambiate gli argomenti Duration di entrambi i comandi PAUSE da 500 a 250, e
rieseguite il programma.

Se volete far lampeggiare il LED acceso e spento una volta ogni tre secondi, col tempo di
spento due volte più lungo del tempo di acceso, potrete modificare il comando PAUSE
dopo il comando HIGH 14 in modo che impieghi un secondo utilizzando PAUSE 1000. Il
comando PAUSE dopo il comando LOW 14 dovrà essere PAUSE 2000.
DO

HIGH 14
PAUSE 1000
LOW 14
PAUSE 2000
Ingresso digitale - Pulsanti · Pagina 45

LOOP

 Modificate e rieseguite il programma usando il frammento di codice qui sopra.

Un esperimento divertente è vedere quanto brevi potrete fare le pause e vedere ancora che
il LED stia lampeggiando. Quando il LED sta lampeggiando molto rapidamente, ma
appare come se fosse sempre acceso, si ha ciò che si chiama persistenza della visione.

Ecco come provare per vedere qual’è la vostra soglia di persistenza della visione:

 Provate a modificare entrambi gli argomenti Duration dei vostri comandi PAUSE
in modo che siano 100.
 Rieseguite il vostro programma e controllate il lampeggiamento.
 Riducete entrambi gli argomenti Duration a 5 e provate di nuovo.
 Tentate di ridurre gli argomenti Duration fin quando il LED appare sempre
acceso senza lampeggiamento. Sarà meno luminoso del normale, ma dovrebbe
apparire non lampeggiante.

Un’ultima cosa da provare è creare un LED con un solo lampeggiamento. Quando il


programma è eseguito, il LED lampeggia una sola volta. Questo è un modo per osservare
la funzionalità del ciclo DO…LOOP. Potete rimuovere temporaneamente dal programma il
ciclo DO…LOOP ponendo un apostrofo a sinistra di entrambe le parole chiave DO e LOOP
come mostrato qui sotto.

' DO

HIGH 14
PAUSE 1000
LOW 14
PAUSE 2000

' LOOP

 Modificate e rieseguite il programma usando il frammento di codice qui sopra.


 Spiegate cosa è accaduto, perché il LED aveva lampeggiato una sola volta?
Pagina 46 · Che cosa è un microcontrollore?

Commentare una riga di codice: Porre un apostrofo a sinistra di un comando cambia il


comando stesso in un commento. Il commento è uno strumento molto utile poiché, per
vedere cosa accade quando togliete l’istruzione dal programma, non dovrete cancellarla
davvero. È molto più facile aggiungere e rimuovere un apostrofo che cancellare e ridigitare
le istruzioni.

ATTIVITÀ #3: CONTEGGIO E RIPETIZIONE


Nell’attività precedente, il circuito del LED lampeggiava acceso - spento indefinitamente,
oppure lampeggiava una sola volta e poi si fermava. Come fare se volete che lampeggi
acceso – spento dieci volte? I computer (incluso il BASIC Stamp) sono grandi nel
mantenere i totali dinamici di quante volte accade un certo evento. I computer possono
essere programmati anche per prendere decisioni basate su molte condizioni. In questa
attività, programmerete il BASIC Stamp perché smetta di far lampeggiare il LED acceso
– spento dopo dieci ripetizioni.

Parti del conteggio e circuito di prova


Usate il circuito di esempio mostrato in Figura 2-11 a pagina 41.

Quante volte?
Esistono molti modi per far lampeggiare il LED acceso – spento dieci volte. Il modo più
semplice è quello di usare un ciclo FOR...NEXT. FOR...NEXT è simile al ciclo
DO...LOOP. Sebbene entrambi i cicli possano essere usati per ripetere comandi un
numero fisso di volte, il ciclo FOR...NEXT è di uso più facile. È chiamato spesso ciclo
contato o finito.

Il ciclo FOR...NEXT dipende da una variabile che tiene traccia di quante volte il LED ha
lampeggiato acceso – spento. Una variabile è una parola di vostra scelta, utilizzata per
memorizzare un valore. Il programma esempio che segue sceglie la parola contatore
per “contare” quante volte il LED è stao acceso - spento.
Ingresso digitale - Pulsanti · Pagina 47

Scegliere parole come nomi di variabile è cosa soggetta a molte regole:


1. Il nome non può essere una parola che sia già stata utilizzata dal PBASIC. Queste
parole sono chiamate parole riservate, e alcuni esempi con cui dovreste esservi già
familiarizzati sono DEBUG, PAUSE, HIGH, LOW, DO, e LOOP. Potete consultare
l’elenco completo delle Parole Riservate nel Manuale BASIC Stamp.
2. Il nome non può contenere uno spazio.
3. Anche se il nome può contenere lettere, numeri, o sottolineature, deve cominciare
obbligatoriamente con una lettera.
4. Il nome deve essere lungo meno di 33 caratteri.

Programma esempio: LedAccesoSpentoDieciVolte.bs2


Il programma LedAccesoSpentoDieciVolte.bs2 mostra come si usa un ciclo FOR...NEXT
per far lampeggiare un LED acceso – spento dieci volte.

 Dovreste costruire (o ricostruire) il vostro circuito di prova dalla attività #2 e


prepararvi ad usarlo.
 Digitate il codice di LedAccesoSpentoDieciVolte.bs2 nell’editor del BASIC
Stamp.
 Collegate corrente elettrica alla vostra Board of Education o HomeWork Board.
 Eseguite il programma.
 Verificate che il LED lampeggia acceso – spento dieci volte.
 Eseguite il programma una seconda volta, e verificate che il valore di
contatore mostrato nel terminale di Debug conteggia con precisione quante
volte il LED ha lampeggiato. Suggerimento: invece di cliccare Run una seconda
volta, potete premere e rilasciare il pulsante Reset sulla vostra Board of
Education o HomeWork Board.

' Che cosa è un microcontrollore - LedAccesoSpentoDieciVolte.bs2


' Accende e spegne un LED. Ripete 10 volte.

' {$STAMP BS2}


' {$PBASIC 2.5}

contatore VAR Byte

FOR contatore = 1 TO 10

DEBUG ? contatore

HIGH 14
PAUSE 500
LOW 14
Pagina 48 · Che cosa è un microcontrollore?

PAUSE 500

NEXT

DEBUG "Tutto fatto!"

END

Come funziona LedAccesoSpentoDieciVolte.bs2


Questa istruzione PBASIC:
contatore VAR Byte

…dice all’editor del BASIC Stamp che il programma userà la parola contatore come
variabile che può memorizzare una informazione del valore di un byte.
Che cos’è un Byte? Un byte è una memoria sufficiente a memorizzare un numero
compreso tra 0 e 255. Il BASIC Stamp ha quattro tipi diversi di variabili, e ciascuna può
memorizzare una gamma diversa di numeri:

Tavola 2-2: Tipi di variabili e valori che possono


memorizzare
Tipo di variabile Gamma di valori
Bit Da 0 a 1
Nib Da 0 a 15
Byte Da 0 a 255
Word Da 0 a 65535

Una istruzione DEBUG può includere formattatori che determinano quanta informazione
si deve visualizzare nel terminale di Debug. Ponendo il formattatore punto interrogativo
“?” prima di una variabile in una istruzione (comando) DEBUG si dice al terminale di
Debug di visualizzare nome della variabile e valore. Questo è il motivo per cui il
comando:
DEBUG ? contatore

…visualizza nel terminale di Debug tanto il nome che il valore della variabile
contatore.

Il ciclo FOR...NEXT e tutti i comandi interni ad esso (compresi tra la parola FOR e la
parola NEXT) sono mostrati qui sotto. L’istruzione FOR contatore = 1 to 10 dice al
Ingresso digitale - Pulsanti · Pagina 49

BASIC Stamp che deve impostare la variabile contatore ad 1, quindi mantenere in


esecuzione i comandi fin quando raggiunge l’istruzione NEXT. Quando il BASIC Stamp
giunge alla istruzione NEXT, salta indietro alla istruzione FOR. L’istruzione FOR aggiunge
uno al valore di contatore. Quindi, controlla se contatore è ancora maggiore di dieci.
Se non lo è, ripete la procedura. Quando il valore di contatore raggiunge finalmente
undici, il programma salta i comandi tra l’istruzione FOR e la NEXT e si muove sul
comando che viene dopo l’istruzione NEXT.
FOR contatore = 1 to 10

DEBUG ? contatore

HIGH 14
PAUSE 500
LOW 14
PAUSE 500

NEXT

Il commando che segue l’istruzione NEXT è:


DEBUG "Tutto fatto!"

Questo commando è stato incluso solo per mostrare cosa fa il programma dopo le dieci
volte che ha eseguito il ciclo FOR...NEXT. Si muove sul comando seguente l’istruzione
NEXT.

Il vostro turno – Altri modi per contare


 Nel programma LedAccesoSpentoDieciVolte.bs2, sostituite l’istruzione:

FOR contatore = 1 to 10 con questa: FOR contatore = 1 to 20

 Rieseguite il programma. Che cosa fa di diverso ed era ciò che aspettavate?

 Provate una seconda modifica all’istruzione FOR. Questa volta, cambiatela in:
FOR contatore = 20 to 120 STEP 10

Quante volte il LED ha lampeggiato? Quali valori sono stati visualizzati nel terminale di
Debug?
Pagina 50 · Che cosa è un microcontrollore?

ATTIVITÀ #4: COSTRUIRE E PROVARE UN SECONDO CIRCUITO LED


Gli indicatori a LED possono essere usati per dire all’utente di una macchina molte cose.
Molti dispositivi necessitano di due, tre, o più LED per dire all’utente se la macchina è
pronta o meno, se c’è un guasto, se un compito è stato eseguito, e così via.

In questa attività, ripeterete la prova del circuito LED fatta nell’Attività #1 per un
secondo circuito LED. Poi modificherete di conseguenza il programma esempio della
Attività #2 per assicurarvi che il circuito LED sia connesso al BASIC Stamp in modo
corretto. Poi modificherete il programma esempio dell‘Attività #2 per far funzionare i
LED in tandem.

Parti extra richieste


In aggiunta alle parti che avete usato nelle Attività 1 e 2, vi occorreranno queste parti:

(1) LED – giallo


(1) Resistenza – 470 Ω (giallo – viola – marrone)

Costruzione e prova del secondo circuito LED


Nell’Attività #1, avete provato manualmente il primo circuito LED per assicurarvi che
lavorasse, prima di connetterlo al BASIC Stamp. Prima di connettere il secondo circuito
LED al BASIC Stamp, è importante provare anche questo.

 Scollegate energia dalla vostra Board of Education o HomeWork Board.


 Costruite il secondo circuito LED come mostrato in Figura 2-13.
 Ricollegate energia alla vostra Board of Education o HomeWork Board.
 Il circuito LED che avete appena aggiunto si accendeva? Se si, allora continuate.
Se no, l’attività #1 ha alcuni suggerimenti di ricerca guasti che dovrete ripetere
per questo circuito.
Ingresso digitale - Pulsanti · Pagina 51

Vdd Vin Vss


X3 +
+
Vdd P15
P14
P13 Figura 2-13
P12
P11 Circuito di prova
470  P10
manuale per il
P9
P8 secondo LED
P14 P7
P6
470  P5
P4
LED P3
LED P2
P1
P0
Vss Vss X2

 Scollegate energia dalla vostra Board of Education o HomeWork Board.


 Modificate il secondo circuito LED che avete appena provato collegando il filo
della resistenza del circuito LED (input) a P15 come mostra la Figura 2-14.

Vdd Vin Vss


+ Figura 2-14
X3
+ Collegare il
P15
P14
secondo LED
P15 P13 al BASIC
470  P12 Stamp
P11
P14 P10
470  P9 Schema (a
P8
P7 sinistra) e
LED LED
P6 diagramma di
P5
P4
cablaggio (a
Vss Vss P3 destra).
P2
P1
P0
X2

Uso di un programma per provare il secondo circuito LED


Nell’attività #2, avete usato un programma esempio e le istruzioni HIGH e LOW per
controllare il circuito a LED collegato a P14. Queste istruzioni dovranno essere
Pagina 52 · Che cosa è un microcontrollore?

modificate per controllare il circuito a LED collegato a P15. Invece di usare HIGH 14 e
LOW 14, userete HIGH 15 e LOW 15.

Programma esempio: ProvaSecondoLed.bs2


 Digitate ProvaSecondoLed.bs2 nell’editor del BASIC Stamp.
 Collegate energia alla vostra Board of Education o HomeWork Board.
 Eseguite ProvaSecondoLED.bs2.
 Accertatevi che il circuito LED collegato a P15 stia lampeggiando. Se il LED
collegato a P15 lampeggia, andate all’esempio successivo (Controllare entrambi
i LED). Se il circuito a LED collegato a P15 non lampeggia, controllate se il
circuito ha errori di cablaggio o se il programma ha errori di digitazione e
riprovate .

' Che cosa è un microcontrollore - ProvaSecondoLed.bs2


' Accende e spegne il LED collegato a P15.
' Ripete 1 volta per secondo indefinitamente.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Il programma è in esecuzione!"

DO

HIGH 15
PAUSE 500
LOW 15
PAUSE 500

LOOP

Controllo di entrambi i LEDs


Si, potrete far lampeggiare entrambi i LED contemporaneamente. Un modo per farlo è
usare due comandi HIGH prima del primo comando PAUSE. Un comando HIGH imposta
P14 al valore alto, e il successivo comando HIGH imposta P15 al valore alto. Potranno
anche occorrervi due comandi LOW per spegnere entrambi i LED. È vero che entrambi i
LED non si accenderanno e non si spegneranno esattamente allo stesso tempo poiché uno
è acceso o spento dopo l’altro. Comunque, non c’è più di un millisecondo di differenza
tra le due variazioni, e l’occhio umano non lo rileverà.
Ingresso digitale - Pulsanti · Pagina 53

Programma esempio: LampeggiaEntrambiILed.bs2


 Digitare il codice di LampeggiaEntrambiILed.bs2 nell’editor del BASIC Stamp.
 Eseguire il programma.
 Verificare che entrambi i LED appaiono lampeggiare allo stesso tempo.

' Che cosa è un microcontrollore - LampeggiaEntrambiILed.bs2


' Accende e spegne i LED collegati a P14 e P15.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Il programma è in esecuzione!"

DO

HIGH 14
HIGH 15
PAUSE 500
LOW 14
LOW 15
PAUSE 500

LOOP

Il vostro turno – LED alternati


Potete alternare il funzionamento dei LEDs alternando i comandi HIGH e LOW che
controllano uno dei due pin I/O. Questo significa che mentre un LED è acceso, l’altro
sarà spento.

 Modificate LampeggiaEntrambiILed.bs2 in modo che i comandi tra le parole


chiave DO e LOOP appaiano così:

HIGH 14
LOW 15
PAUSE 500
LOW 14
HIGH 15
PAUSE 500

 Eseguire la versione modificata di LampeggiaEntrambiILed.bs2 e verificate che i


LED lampeggino alternativamente.
Pagina 54 · Che cosa è un microcontrollore?

ATTIVITÀ #5: USO DELLA DIREZIONE DELLA CORRENTE PER


CONTROLLARE UN LED BICOLORE
Il dispositivo mostrato in Figura 2-15 è un monitor di sicurezza per tasti elettronici.
Quando viene utilizzato un tasto elettronico con il codice corretto, il LED cambia colore,
e si apre una porta. Questo tipo di LED si chiama LED bicolore. Questa attività
risponde a due domande:

1. Come fa il LED a cambiare colore?


2. Come potete usarne uno con il BASIC Stamp?

Figura 2-15
LED Bicolore in un
dispositivo di sicurezza

Quando la porta è
bloccata,questo LED
bicolore ha luce rossa.
Quando la porta è
sbloccata da un tasto
elettronico con il codice
corretto, il LED diventa
verde.

Introduzione al LED Bicolore


Il simbolo schematico e il disegno di parte per il LED bicolore sono mostrati nella Figura
2-16.
Ingresso digitale - Pulsanti · Pagina 55

Figura 2-16
LED
bicolore Area LED Bicolore
piatta
verde rosso Simbolo schematico (a
sinistra) e disegno di parte
pin (a destra).
lungo

Il LED bicolore è in realtà proprio costituito da due LED in un unico contenitore. La


Figura 2-17 mostra come potete applicare tensione in una direzione e il LED fa luce
verde. Scollegando il LED e reinserendolo in posizione inversa, il LED si illumina di
rosso. Come per gli altri LED, se collegate entrambi i terminali del circuito a Vss, il LED
non emetterà luce.

Figura 2-17
LED Bicolore e
tensione applicata

Verde (sinistra),
rosso (centro) e
LED LED nessuna luce
verde rosso LED (destra)
spento

Parti del circuito del LED bicolore


(1) LED – bicolore
(1) Resistenza – 470 Ω (giallo-viola-marrone)
(1) Cavallotto di filo
Pagina 56 · Che cosa è un microcontrollore?

Costruzione e prova del circuito del LED bicolore


La Figura 2-18 mostra la prova manuale per il LED bicolore.

 Scollegate energia dalla vostra Board of Education o HomeWork Board.


 Costruite il circuito mostrato nel lato sinistro della Figura 2-18.
 Ricollegate energia e verificate che il LED bicolore emetta luce verde.
 Scollegate ancora energia.
 Modificate il vostro circuito come appare nel lato destro di Figura 2-18.
 Ricollegate energia.
 Verificate che il LED bicolore emetta ora luce rossa.
 Scollegate energia.

Che succede se i colori del mio LED bicolore sono rovesciati? I LED bicolore sono
fabbricati come quello in Figura 2-16 ma anche con i colori rovesciati. Se il vostro LED
bicolore si illumina rosso quando è collegato nel circuito che dovrebbe farlo illuminare verde
e viceversa, i colori del vostro LED sono rovesciati. Se è così, collegate sempre il pin 1 nel
luogo dove i diagrammi mostrano il pin 2, e il pin 2 dove i diagrammi mostrano il pin 1.

Vdd
1 Vin 2 Vss Vdd
2 Vin 1 Vss
X3 X3
P15 P15
P14 P14 Figura 2-18
P13 P13 Prova manuale del LED
P12 P12
P11 P11 bicolore
P10 P10
P9 P9
P8 P8 LED bicolore verde
P7 P7 (sinistra) e rosso
P6 P6
P5 P5
(destra).
P4 P4
P3 P3
P2 P2
P1 P1
P0 P0
X2 X2

Controllare un LED bicolore con il BASIC Stamp richiede due pin I/O. Dopo aver
verificato manualmente che il LED bicolore lavora nella prova manuale, potete
connettere il circuito al BASIC Stamp come mostrato in Figura 2-19.
Ingresso digitale - Pulsanti · Pagina 57

 Collegate il circuito del LED bicolore al BASIC Stamp come mostra la Figura
2-19.

Figura 2-19
LED bicolore collegato al
BASIC Stamp

Schema (sinistra) e
diagramma di cablaggio
(destra).

Controllo di un LED bicolore con il BASIC Stamp


La Figura 2-20 mostra come potete usare P15 e P14 per controllare il flusso di corrente
nel circuito del LED bicolore. Lo schema superiore mostra come la corrente fluisce nel
LED verde quando P15 è impostato a Vdd con il comando HIGH e P14 è impostato a Vss
con il comando LOW. Questo avviene perché il LED verde lascerà che la corrente lo
attraversi quando la tensione elettrica è applicata al LED come mostrato, ma il LED rosso
agisce come una valvola chiusa e non fa passare la corrente. Il LED bicolore si illumina
di verde.

Lo schema inferiore mostra cosa accade quando P15 è impostato a Vss e P14 è impostato
a Vdd. La tensione elettrica è ora rovesciata. Il LED verde si chiude e non consente il
passaggio della corrente attraverso di esso. Nel frattempo, il LED rosso si accende, e la
corrente passa attraverso il circuito in direzione opposta.
Pagina 58 · Che cosa è un microcontrollore?

HIGH = Vdd P15


1
Current
Corrente
Corrente

2
LOW = Vss P14
 Figura 2-20
Prova del LED bicolore
con il BASIC Stamp

LOW = Vss P15 Corrente attraverso il


1 LED verde (superiore) e
il LED rosso (inferiore).
Cor-
Current
rente

2
HIGH = Vdd P14


La Figura 2-20 mostra anche la chiave per programmare il BASIC Stamp in modo che
faccia illuminare il LED bicolore di due colori diversi. Lo schema superiore mostra
come far diventare verde il LED bicolore usando HIGH 15 e LOW 14. Lo schema
inferiore mostra come far diventare rosso il LED bicolore usando LOW 15 e HIGH 14.
Per spegnere il LED, inviate segnali bassi ad entrambi i pin P14 e P15 usando LOW 15 e
LOW 14. In altri termini, usate LOW su entrambi i pin.

Il LED bicolore si spegnerà anche se inviate segnali alti ad entrambi i pin P14 e P15.
Perché? Perché la tensione elettrica (voltaggio) è la stessa a P14 e P15 indipendentemente
dal fatto che voi impostiate entrambi i pin I/O alti o bassi.

Programma esempio: ProvaLEDBiColore.bs2


 Ricollegate energia.
 Digitate ed eseguite il codice ProvaLedBiColore.bs2 nell’editor del BASIC
Stamp.
 Verificate che il LED cicli tra gli stati rosso, verde, e spento.
Ingresso digitale - Pulsanti · Pagina 59

' Che cosa è un microcontrollore - ProvaLedBiColore.bs2


' Accende in ciclo un LED bicolore rosso, poi verde, poi spento.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000
DEBUG "Il programma è in esecuzione!", CR

DO

DEBUG "Verde..."
HIGH 15
LOW 14
PAUSE 1500

DEBUG "Rosso..."
LOW 15
HIGH 14
PAUSE 1500

DEBUG "Spento..", CR
LOW 15
LOW 14
PAUSE 1500

LOOP

Il vostro turno– Visualizzare le luci


Nell’attività #3, per controllare quante volte lampeggiava un LED era stata usata una
variabile chiamata contatore. Cosa accade se usate il valore di contatore per
controllare l’argomento Duration del comando PAUSE mentre il colore del LED bicolore
sta cambiando ripetitivamente?

 Rinominate e salvate ProvaLEDBicolore.bs2 come


ProvaLEDBicoloreVostroTurno.bs2.
 Aggiungete una dichiarazione di variabile contatore prima dell’istruzione DO:

contatore VAR BYTE

 Sostituite il codice di prova nel ciclo DO...LOOP con questo ciclo FOR...NEXT.
FOR contatore = 1 to 50

HIGH 15
Pagina 60 · Che cosa è un microcontrollore?

LOW 14
PAUSE contatore

LOW 15
HIGH 14
PAUSE contatore

NEXT

Quando avrete finito il vostro codice dovrebbe apparire così:


contatore VAR BYTE

DO

FOR contatore = 1 to 50

HIGH 15
LOW 14
PAUSE contatore

LOW 15
HIGH 14
PAUSE contatore

NEXT

LOOP

All’inizio di ciascun passo nel ciclo FOR...NEXT, il valore dentro PAUSE (argomento
Duration) è soltanto di un millisecondo. Ogni volta che viene eseguito il ciclo
FOR...NEXT, il comando fa una pausa più lunga di un millisecondo per volta, fin quando
raggiunge 50 millisecondi. Il ciclo DO...LOOP fa eseguire il ciclo FOR...NEXT di nuovo
all’infinito.

 Eseguite il programma modificato ed osservate il suo effetto.

SOMMARIO
Il BASIC Stamp può essere programato per commutare un circuito con la luce indicatrice
di un diodo emettitore di luce (LED) accesa o spenta. Gli indicatori LED sono utili in
vari luoghi compresi molti monitor di computer, drive a disco, e altri dispositivi. Il LED
è stato descritto prima assieme ad una tecnica per identificare i suoi terminali anodo e
Ingresso digitale - Pulsanti · Pagina 61

catodo. Un circuito a LED deve avere una resistenza per limitare la corrente che lo
attraversa. Le resistenze sono state presentate con uno degli schemi di codifica più
comuni per indicarne il loro valore (noto come codice dei colori, ndt).

Il BASIC Stamp commuta un circuito a LED acceso e spento collegando internamente un


suo pin I/O sia a Vdd, sia a Vss. Per far collegare internamente al BASIC Stamp uno dei
suoi pin I/O a Vdd si può usare un comando HIGH, e per far collegare un pin I/O a Vss
si può usare un comando LOW. Il comando PAUSE è usato per fare in modo che il BASIC
non esegua comandi per una certa quantità di tempo. Questo sistema è stato usato per far
stare i LED accesi o spenti per determinate quantità di tempo. La quantità di tempo è
determinata dal numero usato nell’argomento Duration del comando PAUSE.

Per creare un ciclo infinito possono essere usate le parole chiave DO...LOOP. I comandi
compresi tra le parole chiave DO e LOOP saranno eseguiti ripetutamente, all’infinito.
Anche se questo è detto ciclo infinito, il programma può ancora essere riavviato
scollegando e ricollegando energia, o premendo e rilasciando il pulsante Reset. Può
inoltre essere caricato entro il BASIC Stamp un nuovo programma, e ciò cancellerà il
programma con il ciclo infinito. Cicli di conteggio (con un determinato numero di
esecuzioni) possono essere fatti con FOR...NEXT, una variabile per tener conto di quante
ripetizioni il ciclo ha fatto, e numeri che specificano dove iniziare e terminare il
conteggio.

La direzione della corrente e la polarità del voltaggio sono stati introdotti usando un
LED bicolore. Se si applica un voltaggio ai capi di un circuito a LED, la corrente lo
attraverserà in una direzione, e il LED si illuminerà di un colore particolare. Se si
rovescia la polarità del voltaggio, la corrente viaggerà attraverso il circuito nella
direzione opposta ed esso si illumina di un colore diverso.

Domande
1. Qual’è il nome di questa lettera greca: , e a quale misura si riferisce ?
2. Quale resistenza permetterà di avere nel circuito una corrente maggiore, una
resistenza da 470  o una resistenza da 1000 ?
3. Come collegate due fili tra loro usando una breadboard? Potete usare una
breadboard per collegare tra loro quattro fili?
4. Cosa dovete fare sempre prima di modificare un circuito che avete costruito su
una breadboard?
5. Quanto a lungo dura un comando PAUSE 10000?
Pagina 62 · Che cosa è un microcontrollore?

6. Come potete fare in modo che il BASIC Stamp non faccia nulla per un intero
minuto?
7. Quali sono i diversi tipi delle variabili?
8. Può un byte mantenere il valore 500?
9. Che cosa farà il comando HIGH 7?

Esercizi
1. Disegnate lo schema di un circuito a LED come quello sul quale avete lavorato
nell’attività #2, ma collegate il circuito a P13 invece di P14. Spiegate come
mofichereste LedAccesoSpento.bs2 a pagina 42 perché faccia lampeggiare il
vostro circuito a LED quattro volte al secondo.
2. Spiegate come modifichereste LedAccesoSpentoDieciVolte.bs2 perché faccia
lampeggiare il circuito a LED 5000 volte prima di fermarsi. Suggerimento:
dovrete modificare due sole righe di codice.

Progetto
1. Fate un conteggio da 10 secondi usando un LED giallo ed un LED bicolore.
Fate in modo che il LED bicolore inizi accendendosi di rosso per 3 secondi.
Dopo 3 secondi, cambiate il colore del LED bicolore a verde. Quando il LED
bicolore cambia in verde, fate lampeggiare il LED giallo acceso e spento una
volta al secondo per dieci secondi. Quando il LED giallo ha finito di
lampeggiare, il LED bicolore deve ritornare di color rosso e restare in tal modo.

Soluzioni
Q1. Omega si riferisce a ohm che misura quanto fortemente qualcosa resiste al
passaggio della corrente.
Q2. La resistenza da 470 Ω: valori più alti resistono di più dei valori più bassi,
perciò valori bassi permettono il fluire di una maggior corrente.
Q3. Per collegare 2 fili, inserite i 2 fili nello stesso gruppo di 5 zoccoli. Potete
collegare 4 fili inserendo tutti e 4 i fili nello stesso gruppo di 5 zoccoli.
Q4. Scollegate l’energia.
Q5. 10 secondi.
Q6. PAUSE 60000
Q7. Bit, Nib, Byte, e Word
Q8. No. Il valore più grande che un byte può contenere è 255. Il valore 500 è fuori
intervallo per un byte.
Q9. HIGH 7 farà sì che il BASIC Stamp colleghi internamente il pin I/O P7 a Vdd.
Ingresso digitale - Pulsanti · Pagina 63

E1. La PAUSE Duration dev’essere ridotta a 500 ms / 4 = 125 ms. Per usare il pin I/O
P13, HIGH 14 e LOW 14 devono essere sostituiti con HIGH 13 e LOW 13.
P13 DO
470  HIGH 13
LED PAUSE 125
LOW 13
PAUSE 125
Vss LOOP

E2. La variabile contatore dev’essere cambiata a dimensione Word, e l’istruzione


FOR dev’essere modificata per far contare da 1 a 5000.

contatore VAR Word


FOR contatore = 1 to 5000
DEBUG ? contatore, CR
HIGH 14
PAUSE 500
LOW 14
PAUSE 500
NEXT

P1. Lo schema del LED bicolore, a sinistra, è invariato dalla Figura 2-19 a pagina
57. Lo schema del LED giallo si basa sulla Figura 2-11 a pagina 41. Per questo
progetto P14 è stato cambiato in P13, ed è stato usato un LED giallo invece di
quello verde. NOTATE: Quando il BASIC Stamp non esegue comandi, va in
una modalità a bassa energia che fa lampeggiare il LED bicolore brevemente
ogni 2,3 secondi. La stessa cosa avviene dopo che il programma ha eseguito un
comando END. C’è un altro comando chiamato STOP che potete aggiungere alla
fine del programma per fare sì che trattenga qualsiasi segnale alto/basso senza
entrare nel modo a bassa energia, e ciò a sua volta evita il lampeggiamento.
P13
470 
Yellow
LED
LED
giallo

Vss

' Che cosa è un microcontrollore - Cap02Pr01_Conteggio.bs2


Pagina 64 · Che cosa è un microcontrollore?

' Conteggio di 10 secondi con LED Rosso, Giallo, Verde


' Rosso/Verde: LED bicolore in P15, P14. Giallo: P13

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Programma in esecuzione!"

contatore VAR Byte

' Rosso per tre secondi ' LED bicolore Rosso


LOW 15
HIGH 14
PAUSE 3000

' Verde per 10 secondi...


HIGH 15 ' LED bicolore Verde
LOW 14

' ...mentre il LED verde sta lampeggiando


FOR contatore = 1 TO 10
HIGH 13 ' LED giallo acceso
PAUSE 500
LOW 13 ' LED giallo spento
PAUSE 500
NEXT

' Rosso resta acceso ' LED Bi Colore Rosso


LOW 15
HIGH 14
Ingresso digitale - Pulsanti · Pagina 65

Capitolo 3: Ingresso Digitale – Pulsanti


LI TROVATE SU CALCOLATRICI, GIOCHI PALMARI ED ALTRE
APPLICAZIONI
Quati dispositivi a pulsanti utiizzate su base giornaliera? Ecco alcuni esempi che
potrebbero comparire sul vostro elenco: computer, mouse, calcolatrice, forno a
microonde, telecomando di TV, giochi palmari e telefoni cellulari. In ciascuno di questi
dispositivi, c’è un microcontrollore che esplora i pulsanti e aspetta per vedere se il
circuito cambia. Quando c’è una variazione di circuito, il microcontrollore rileva il
cambiamento e fa un’azione. Alla fine di questo capitolo, sarete diventati esperti nel
progetto di circuiti con pulsanti e nel programmare il BASIC Stamp perché li esplori e
compia azioni quando si verifica un cambiamento del loro stato.

RICEVERE O INVIARE SEGNALI ALTI E BASSI


Nel Capitolo 2, avete programmato il BASIC Stamp per inviare segnali alti e bassi, ed
avete utiizzato circuiti a LED per visualizzare questi segnali. Inviare segnali alti e bassi
sigifca che avete utilizzato un pin I/O del BASIC Stamp come sua uscita. In questo
capitolo, userete un pin I/O del BASIC Stamp come suo ingresso. Come ingresso, un pin
I/O ascolta se ci sono (aspetta l’arrivo di) segnali alti/bassi invece di inviarli. Invierete
questi segnali al BASIC Stamp usando un circuito con pulsante, e programmerete il
BASIC Stamp perché riconosca se il pulsante è premuto o no.

Altri sigificati di inviare, alto/basso, e ricevere: L’inviare segnali alto/basso può essere
descritto in diversi modi. Potrete intendere “inviare” nei significati di trasmettere, controllare,
o commutare. Invece di segnali alti/bassi, potreste trovare un riferimento a segnali binari,
TTL, CMOS, o Booleani. Un sinonimo di ricevere è sentire .

ATTIVITÀ #1: PROVA DI UN PULSANTE CON UN CIRCUITO A LED


Se potete usare un pulsante per inviare un segnale alto o basso al BASIC Stamp, potrete
anche controllare un LED con un pulsante? La risposta è si, e in questa attività lo
userete per provare un pulsante.

Introduzione del pulsante


La Figura 3-1 mostra il simbolo schematico e i disegni di parte di un pulsante, in
posizione di normalmente aperto. Due dei pin del pulsante sono collegati a ciascun
Pagina 66 · Che cosa è un microcontrollore?

terminale. Ciò significa che collegare un filo o un terminale di parte al pin 1 del pulsante
è la stessa cosa che collegarlo al pin 4. La stessa regola vale per i pin 2 e 3. la ragione
per cui il pulsante non ha soltanto due pin è che gli occorre essere stabile. Se il pulsante
avesse soltanto due pin, questi pin potrebbero essere eventualente piegati o rotti per tutte
le pressioni che il pulsante riceve qundo le persone lo premono.

Figura 3-1
1, 4 Pulsante normalmente aperto
1 4
2, 3 2 3 Simbolo di schema (a sinistra) e
disegno di parte (a destra)

Il lato sinistro della Figura 3-2 mostra come appare un pulsante normalmente aperto
quando non è premuto. Quando il pulsante non è premuto, c’è una separazione tra i
terminali 1,4 e 2,3. Questa separazione fa in modo che il terminale 1,4 non possa
condurre corrente al terminale 2,3. Queta situazione è detta circuito aperto. Il termine
“normalmente aperto” sigifica che lo stato normale del pulsante (non premuto) forma un
circuito aperto. Quado il pulsante viene premuto, la separazione tra i terminali 1,4 e 2,3 è
scavalcata da una parte metallica conduttrice. Questa situazione è detta circuito chiuso, e
nel pulsante può fluire corrente.

Figura 3-2
1, 4 1, 4 Pusante normalmente aperto
2, 3 2, 3
Non premuto (a siistra) e premuto (a
destra)

Parti di prova per il pulsante


(1) LED – scegliete un colore
(1) Resistenza – 470 Ω (giallo-viola-marrone)
(1) Pulsante – normalmente aperto
(1) Cavallotto di filo

Costruzione del circuito di prova del pulsante


La Figura 3-3 mostra un circuito che potete costruire per provare manualmente il
pulsante.
Ingresso digitale - Pulsanti · Pagina 67

Scollegate sempre energia dalla vostra Board of Education o dalla BASIC Stamp
HomeWork Board prima di fare cambiamenti al vostro circuito di prova. Da qui in avanti, le
istruzioni non diranno più “Scollegate energia …” tra le varie modifiche del circuito. Sarà
vostra cura ricordarvi di farlo.
Ricollegate sempre energia alla vostra Board of Education o alla BASIC Stamp
HomeWork Board prima di scaricare un programmma sul BASIC Stamp.

 Costruite il circuito mostrato in Figura 3-3.


Vdd

Vdd Vin Vss +


X3
1, 4
P15
2, 3 P14
P13
P12 Figura 3-3
P11
P10 Circuito di prova del
470  P9 pulsante
P8
P7
P6
P5
LED P4
P3
P2
P1
P0
Vss X2

Prova del pulsante


Quando il pulsante non viene premuto, il LED sarà spento. Se il cablaggio è corretto,
quando il pulsante viene premuto, il LED dovrebbe accendersi (emettendo luce).

Segni di attenzione: Se il LED “Pwr” sulla Board of Education lampeggia, diventa meno
luminoso, o si spegne completamente quando ricollegate energia, può voler dire che c’è un
corto circuito da Vdd a Vss o da Vin a Vss. Se accade questo, scollegate energia
immediatamente e trovate e correggete l’errore nel vostro circuito.
Il LED incorporato nella HomeWork Board è diverso. Può essere contrassegnato
indifferentemente “Power” o “Running” e lampeggia soltanto mentre un programma è in
esecuzione. Se un programma termina, tanto se esegue una istruzione END quanto se
finisce di eseguire comandi, il LED si spegnerà.
Pagina 68 · Che cosa è un microcontrollore?

 Verificate che il LED del vostro circuito sia spento.


 Premete e tenete premuto il pulsante, e verificate che il LED emetta luce mentre
tenete premuto il pulsante.

Come lavora il circuito del pulsante


Il lato sinistro della Figura 3-4 mostra che cosa accade quando il pulsante non è premuto.
Il circuito del LED non è collegato a Vdd. È un circuito aperto che non può condurre
corrente. Premendo il pulsante, come mostrato nel lato destro della figura, chiudete il
collegamento tra i terminali con metallo conduttivo. Ciò crea un sentiero per far fluire gli
elettroni attraverso il circuito e quindi, come risultato, il LED emette luce.

Vdd Vdd

Figura 3-4
1, 4 1, 4 Pulsante non premuto e
premuto
2, 3 2, 3
Pulsante non premuto:
No circuito aperto e luce
470  Current 470  spenta (a sinistra)
Current

Pulsante premuto:
LED LED circuito chiuso e luce
accesa (a destra)

Vss Vss

Il vostro turno – Spegnere un LED con un pulsante


La Figura 3-5 mostra un circuito che produce un diverso comportamento del LED.
Quando il pulsante non è premuto, il LED resta acceso; quando il pulsante è premuto, il
LED si spegne. Poiché questo pulsante, quando è premuto, connette un conduttore tra i
terminali 1,4 e 2,3, ciò significa che l’elettricità sceglie la strada di minima resistenza
attraverso il pulsante invece di passare attraverso il LED. A differenza del potenziale di
corto circuito discusso nel riquadro Segni di Attenzione, il corto circuito che il pulsante
premuto crea tra i terminali del LED non danneggia alcun circuito e serve ad uno scopo
utile.

 Costruite il circuito mostrato in Figura 3-5.


Ingresso digitale - Pulsanti · Pagina 69

 Ripetete con questo nuovo circuito la prova che avete eseguito nel primo circuito
con pulsante che avete costruito.
Vdd Vdd Vin Vss
X3

P15
1, 4 P14
P13
P12
P11 +
LED P10
Figura 3-5
P9 LED che viene posto in
2, 3 P8
P7 corto circuito dal pulsante
P6
P5
470  P4
P3
P2
P1
P0
Vss X2

Potete realmente fare ciò con un LED? Fino a questo momento, il catodo del LED è stato
sempre collegato a Vss. Ora, il LED è in un posto diverso nel circuito, con il suo anodo
collegato a Vdd. Le persone chiedono spesso se questo rompe qualche regola di circuito, e
la risposta è no. La tensione elettrica fornita da Vdd e Vss è 5 volt. Il LED rosso userà
sempre circa 1.7 volt, e la resistenza userà i rimanenti 3.3 volt, indipendentemente dal loro
ordine.

ATTIVITÀ #2: LETTURA DI UN PULSANTE CON IL BASIC STAMP


In questa attività, collegherete un circuito con pulsante al BASIC Stamp e visualizzerete
se o meno il pulsante sia premuto. Farete questo scrivendo un programma PBASIC che
controlla lo stato del pulsante e lo visualizza nel terminale di Debug.

Parti del circuito con pulsante


(1) Pulsante – normalmente aperto
(1) Resistenza – 220 Ω (rosso-rosso-marrone)
(1) Resistenza – 10 kΩ (marrone-nero-arancio)
(2) Cavallotti di filo
Pagina 70 · Che cosa è un microcontrollore?

Costruire un circuito con pulsante per il BASIC Stamp


La Figura 3-6 mostra un circuito con pulsante collegato al pin I/O P3 del BASIC Stamp.

 Costruite il circuito mostrato in Figura 3-6.

Figura 3-6
Vdd Vin Vss
Circuito con
X3
pulsante collegato
al Pin I/O P3
P15
Vdd P14
P13 Nel diagramma di
P12 cablaggio,la
P11
P10 resistenza da
P9 220 Ω è sul lato
P8
P7 sinistro e collega il
P3 P6 pulsante a P3
P5
220  P4
mentre la
10 k P3 resistenza da 10
P2 kΩ e sulla destra,
P1
P0 e collega il circuito
Vss X2 del pulsante a
Vss.

La Figura 3-7 mostra che cosa vede il BASIC Stamp quando il pulsante viene premuto, e
quando non viene premuto. Quando il pulsante viene premuto, il BASIC Stamp sente che
Vdd è collegato a P3. Entro il BASIC Stamp, ciò produce il fatto di porre il numero 1 in
una parte della sua memoria che conserva informazioni sui suoi pin I/O. Quando il
pulsante non è premuto, il BASIC Stamp non può sentire Vdd, ma può sentire Vss
attraverso le resistenze da 10 kΩ e da 220 Ω. Ciò gli fa memorizzare il numero 0 in
quella stessa posizione di memoria che ha memorizzato un 1 quando il pulsante era stato
premuto.
Ingresso digitale - Pulsanti · Pagina 71

Vdd SOUT 1 24 VIN


SIN 2 23 VSS
ATN 3
BS2 22 RES
VSS 4 21 VDD (+5V)
P0 5 20 P15
P1 6 19 P14
P2 7 1 18 P13
P3 8 17 P12
P4 9 0 16 P11
220  P5 10 15 P10
Figura 3-7
10 k P6 11 14 P9
P7 12 13 P8
BASIC Stamp legge un
BS2-IC pulsante
Vss
Quando il pulsante è
Vdd premuto, il BASIC Stamp
SOUT VIN
legge un 1 (sopra). Quando
1 24

SIN 2 23 VSS
ATN 3
BS2 22 RES il pulsante non è premuto, il
VSS
P0
4

5
21

20
VDD (+5V)
P15
BASIC Stamp legge uno 0
P1 6 19 P14 (sotto).
P2 7 1 18 P13
P3 8 17 P12
P4 9 0 16 P11
220  P5 10 15 P10
10 k P6 11 14 P9
P7 12 13 P8

BS2-IC

Vss

Il Binario e i circuiti: Il sistema di numerazione in base-2 usa soltanto le cifre 1 e 0 per fare
i numeri, e questi valori binari possono essere trasmessi da un dispositivo ad un altro. Il
BASIC Stamp interpreta Vdd (5 V) come cifra binaria 1 e Vss (0 V) come cifra binaria 0.
Analogamente, quando il BASIC Stamp imposta un pin I/O a Vdd usando il comando HIGH,
invia un 1 binario. Quando imposta un pin I/O a Vss usando il comando LOW, invia uno 0
binario. Questo è un modo molto comune di comunicare numeri binari, usato da molti chip
di computer e da altri dispositivi.

Programmare il BASIC Stamp per sorvegliare il pulsante


Il BASIC Stamp memorizza l’uno o lo zero che sente sul pin I/O P3 in una posizione di
memoria chiamata IN3. Ecco un programma esempio che mostra come lavora questo
fatto:

Programma esempio: LeggiStatoPulsante.bs2


Il programma che segue fa controllare al BASIC Stamp il pulsante ogni ¼ di secondo e
invia il valore di IN3 al terminale di Debug.
Pagina 72 · Che cosa è un microcontrollore?

La Figura 3-8 mostra il terminale di Debug mentre il programma è in esecuzione.


Quando il pulsante è premuto, il terminale di Debug visualizza il numero 1, e quando il
pulsante non è premuto, il terminale di Debug visualizza il numero 0.

Figura 3-8
Terminale di Debug che visualizza gli
stati di un pulsante

Il terminale di Debug visualizza 1


quando il pulsante è premuto e 0
quando non è premuto.

 Digitate il programma LeggiStatoPulsante.bs2 nell’Editor del BASIC Stamp.


 Eseguite il programma.
 Verificate che il terminale di Debug visualizzi il valore 0 quando il pulsante non
è premuto.
 Verificate che il terminale di Debug visualizzi il valore 1 quando il pulsante è
premuto e tenuto premuto.

' Che cosa è un microcontrollore - LeggiStatoPulsante.bs2


' Controlla e invia lo stato di un pulsante al terminale di Debug ogni 1/4 di
' secondo.

' {$STAMP BS2}


' {$PBASIC 2.5}

DO

DEBUG ? IN3
PAUSE 250

LOOP

Come lavora LeggiStatoPulsante.bs2


Il ciclo DO...LOOP nel programma si ripete ogni ¼ di secondo per la presenza del
comando PAUSE 250. Ogni volta che viene eseguito tramite il DO...LOOP, il comando
Ingresso digitale - Pulsanti · Pagina 73

DEBUG ? IN3 invia il valore di IN3 al terminale di Debug. Il valore di IN3 è lo stato che
il pin I/O P3 sente al momento in cui viene eseguito il comando DEBUG.

Il vostro turno– Un pulsante con una resistenza di rinforzo


Il circuito con cui avete appena finito di lavorare ha una resistenza collegata a Vss.
Questa resistenza è chiamata resistenza di pull-down (indebolimento) perché essa abbassa
il voltaggio in P3 giù fino a Vss (0 volt) quando il pulsante non viene premuto. La Figura
3-9 mostra un circuito con pulsante che utilizza una resistenza di pull-up (rinforzo).
Questa resistenza tira su il voltaggio fino a Vdd (5 volt) quando il pulsante non viene
premuto. Le regole sono adesso rovesciate. Quando il pulsante non è premuto, IN3
memorizza il numero 1, e quando il pulsante è premuto, IN3 memorizza il numero 0.

La resistenza da 220  è usata nei circuiti esempio con pulsante per proteggere il pin I/O
del BASIC Stamp. Sebbene sia una buona pratica nel fare prototipi, in molti prodotti questa
resistenza è sostituita con un filo (per il fatto che i fili costano molto meno delle resistenze).

 Modificate il vostro circuito come mostrato in Figura 3-9.


 Rieseguite LeggiStatoPulsante.bs2.
 Usando il terminale di Debug, verificate che IN3 è 1 quando il pulsante non
viene premuto e 0 quando il pulsante è premuto.
Vdd Vin Vss
X3
Vdd
P15
P14
P13
10 k P12
P11
P10 Figura 3-9
P3 P9
P8 Circuito con pulsante
220  P7
P6
modificato
P5
P4
P3
P2
Vss P1
P0
X2
Pagina 74 · Che cosa è un microcontrollore?

Attivo-basso e Attivo-alto: Il circuito del pulsante in Figura 3-9 è chiamato attivo-basso


perché invia al BASIC Stamp un segnale basso (Vss) quando il pulsante è attivo (premuto).
Il circuito del pulsante in Figura 3-6 è chiamato attivo-alto perché invia un segnale alto (Vdd)
quando il pulsante è attivo (premuto).

ATTIVITÀ #3: CONTROLLO A PULSANTE DI UN CIRCUITO A LED


La Figura 3-10 mostra una veduta a scala ingrandita di un pulsante e un LED usati per
regolare le impostazioni di un monitor per computer. Questo è soltanto uno dei tanti
dispositivi con un pulsante che potete premere per regolare il dispositivo e un LED che
mostra lo stato del dispositivo.

Figura 3-10
Pusante e LED su
un Monitor per
computer

Il BASIC Stamp può essere programmato per prendere decisioni in base a ciò che sente.
Per esempio, può essere programmato per decidere di far lampeggiare il LED
acceso/spento dieci volte al secondo quando il pulsant è premuto.

Parti del circuito pulsante e LED


(1) Pulsante – normalente aperto
(1) Resistenza – 10 kΩ (marrone-nero-arancio)
(1) LED – di colore qualsiasi
(1) Resistenza – 220 Ω (rosso-rosso-marrone)
(1) Resistenza – 470 Ω (giallo-viola-marrone)
(2) Cavallotti di filo
Ingresso digitale - Pulsanti · Pagina 75

Costruzione dei circuiti con pulsante e LED


La Figura 3-11 mostra il circuito a pulsante usato nell’attività che avete appena terminata
assieme al circuito a LED della Figura 2-11.

 Costruite il circuito mostrato in Figura 3-11.

P14
470 
LED Vdd Vin Vss
X3
+
Vss P15
P14
P13
Vdd P12 Figura 3-11
P11
P10 Circuito con
P9 pulsante e LED
P8
P7
P3 P6
P5
220  P4
10 k P3
P2
P1
P0
Vss X2

Programmazione del controllo a pulsante


Il BASIC Stamp può essere programmato per prendere decisioni tramite una istruzioe
IF...THEN...ELSE. Il programma esempio che state per eseguire farà lampeggiare il
LED acceso/spento quando il pulsante viene premuto. In ciascuna esecuzione del ciclo
DO...LOOP, l’istruzione IF...THEN...ELSE controlla lo stato del pulsante e decide se il
LED debba lampeggiare o no.

Programma esempio: LedControllatoAPulsante.bs2


 Digitate LedControllatoAPulsante.bs2 nell’editor del BASIC Stamp ed
eseguitelo.
 Verificate che il LED lampeggi acceso/spento quado il pulsante è premuto e
mantenuto giù.
 Verificate che il LED non lampeggi quando il pulsante non è premuto.
Pagina 76 · Che cosa è un microcontrollore?

' Che cosa è un microcontrollore - LedControllatoAPulsante.bs2


' Controlla lo stato del pulsante 10 volte al secondo e fa lampeggiare il LED
‘ quando il pulsante è premuto.

' {$STAMP BS2}


' {$PBASIC 2.5}

DO

DEBUG ? IN3

IF (IN3 = 1) THEN
HIGH 14
PAUSE 50
LOW 14
PAUSE 50

ELSE
PAUSE 100

ENDIF

LOOP

Come lavora LedControllatoAPulsante.bs2


Questo programma è un versione modificata di LeggiStatoPulsante.bs2 dell’attività
precedente. Le istruzioni DO...LOOP e DEBUG ? IN3 sono le stesse. La PAUSE 250 è
stata sostituita con una istruzione IF...THEN...ELSE. Quando la condizione dopo
l’istruzione IF è vera (IN3 = 1), vengono eseguite le istruzioni che seguono l’istruzione
THEN. Esse saranno eseguite fin quando si raggiunge l’istruzione ELSE, e in questo punto
il programma salta alla istruzione ENDIF e prosegue. Quando la condizione dopo
l’istruzione IF non è vera (IN3 = 0), sono eseguite le istruzioni dopo la frase ELSE
finché non si rggiunge l’istruzione ENDIF.

Potete fare un elenco dettagliato delle cose che un programma dovrebbe fare, sia per
agevolare la vostra pianificazione del programma, sia per descrivere cosa fa Questo tipo
di elenco è chiamato pseudo codice, e l’esempio riportato qui sotto usa lo pseudo codice
per descrivere come lavora LedControllatoAPulsante.bs2.
Ingresso digitale - Pulsanti · Pagina 77

 Esegui i comandi da qui fino all’istruzione Loop all’infinito


o Visualizza nel terminale di Debug il valore di IN3
o Se il valore di IN3 è 1, allora (If IN3=1 Then)
 Accendi il LED (LED on)
 Attendi per 1/20 di secondo
 Spegni il LED (LED off)
 Attendi per 1/20 di secondo
o Altrimenti, se il valore di IN3 è 0, (if IN3 = 0)
 non fare nulla, ma attendi la stessa durata di tempo che
sarebbe trscorsa per far lampeggiare brevemente il LED (1/10
di secondo).
 Loop

Il vostro turno – Più veloce/Più lento


 Memorizzate il programma esempio sotto altro nome.
 Modificate il programma in modo che il LED lampeggi due volte pù
velocemente quando premete e rilasciate il pulsante.
 Modificate il programma in modo che il LED lampeggi due volte più lentamente
quando premete e rilasciate il pulsante.

ATTIVITÀ #4: DUE PULSANTI CHE CONTROLLANO DUE CIRCUITI A


LED
Aggiungete un secondo pulsante al progetto e guardate come lavora. Per rendere le cose
un pò più interessanti, aggiungete un secondo circuito a LED ed usate il secondo pulsante
per controllarlo.

Parti del pulsante e del circuito a LED


(2) Pulsanti – normalmente aperti
(2) Resistenze – 10 kΩ (marrone-nero-arancio)
(2) Resistenze – 470 Ω (giallo-viola-marrone)
(2) Resistenze – 220 Ω (rosso-rosso-marrone)
(2) LED – qualsiasi colore
(3) Cavallotti di filo
Pagina 78 · Che cosa è un microcontrollore?

Aggiungere un pulsante e un circuito a LED


La Figura 3-12 mostra un secondo circuito con LED e pulsante aggiuntivo al circuito chc
avete provato nell’attività precedente.

 Costruite il circuito mostrato in Figura 3-12. Se vi occorre aiuto nel costruire il


circuito mostrato nello schema, usate il diagramma di cablaggio di Figura 3-13
come guida.
 Modificate LeggiStatoPulsante.bs2 in modo che legga IN4 invece di IN3, ed
usatelo per provare il vostro secondo circuito a pulsante.

P15
470 
P14
470 

LED LED

Vss Vss
Figura 3-12
Vdd Vdd Schema per due
Pulsanti e LED
P4
220 

P3
220 
10 k 10 k

Vss Vss
Ingresso digitale - Pulsanti · Pagina 79

I punti indicano collegamenti: Ci sono tre posti dove le linee si intersecano in Figura
3-12, ma soltanto due di queste intersezioni hanno un punto. Quando due linee si
intersecano con un punto, vuol dire che sono elettricamente collegate. Per esempio, la
resistenza da 10 kΩ in basso a destra di Figura 3-12 ha uno dei suoi terminali connesso ad
uno dei terminali del pulsante del circuito P3 e ad uno dei terminali della resistenza da 220
Ω. Quando una linea ne incrocia un’altra, ma non c’è alcun punto, significa che i due fili
NON SONO elettricamente connessi. Ad esempio, la linea che collega il pulsante P4 alla
resistenza da 10 kΩ non si collega al circuito del pulsante P3 poiché in quell’intersezione
non c’è alcun punto.

Vdd Vin Vss


X3 ++
P15
P14
P13
P12 Figura 3-13
P11
P10 Diagramma di cablaggio dei due
P9 pulsanti e due LED
P8
P7
P6
P5
P4
P3
P2
P1
P0
X2

Programmare il controllo dei pulsanti


Nell’attività precedente, avete sperimentato come prendere una decisione usando
un’istruzione IF...THEN...ELSE. Anche qui c’è di nuovo una cosa simile per una
istruzione IF...ELSEIF...ELSE. Essa opera molto bene per decidere quale dei LED far
lampeggiare. Il successivo programma esempio mostra come lavora.

Programma esempio: ControlloAPulsanteDiDueLed.bs2


 Digitate ed eseguite ControlloDiDueLed.bs2 nell’Editor del BASIC Stamp.
 Verificate che il LED nel circuito connesso a P14 lampeggi mentre si tiene
premuto il pulsante nel circuito connesso a P3.
 Accertatevi anche che il LED nel circuito connesso a P15 lampeggi mentre si
tiene premuto il pulsante nel circuito connesso a P4
Pagina 80 · Che cosa è un microcontrollore?

' Che cosa è un microcontrollore - ControlloAPulsantiDiDueLed.bs2


' LED in P14 lampeggia se è premuto pulsante P3, e LED in P15 lampeggia se
' è premuto pulsante P4.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000

DO

DEBUG HOME
DEBUG ? IN4
DEBUG ? IN3

IF (IN3 = 1) THEN
HIGH 14
PAUSE 50
ELSEIF (IN4 = 1) THEN
HIGH 15
PAUSE 50
ELSE
PAUSE 50
ENDIF

LOW 14
LOW 15

PAUSE 50

LOOP

Come opera ControlloAPulsantiDiDueLed.bs2


Se le visualizzazioni di IN3 e IN4 scorressero in basso sul terminale di Debug come
accadeva nell’esempio precedente, sarebbe difficile leggerle. Un modo per evitare questo
è mantenere il cursore sempre nella posizione in alto a sinistra nel terminale di Debug
tramite il carattere di controllo HOME:
DEBUG HOME

Inviando il cursore nella posizione detta “home” (solita) in ciascuna passata del ciclo
DO...LOOP, le istruzioni:

DEBUG ? IN4
DEBUG ? IN3
Ingresso digitale - Pulsanti · Pagina 81

...viualizzano ogni volta i valori di IN4 e IN3 nella stessa zona del terminale di Debug. In
questo programma la parola DO inizia il ciclo:
DO

Queste istruzioni entro l’istruzione IF sono le stesse di quelle del programma esempio
dell’attività precedente:
IF (IN3 = 1) THEN
HIGH 14
PAUSE 50

Ecco dove la parola chiave ELSEIF interviene. Se IN3 non è 1, ma IN4 è 1, significa che
vogliamo accendere il LED connesso a P15 invece di quello connesso a P14.
ELSEIF (IN4 = 1) THEN
HIGH 15
PAUSE 50

Se nessuna delle due condizioni è vera, vogliamo ancora fermarci per 50 ms senza
cambiare lo stato di qualsiasi dei circuiti LED.
ELSE
PAUSE 50

Quando avrete finito con tutte le decisioni, non dimenticate di inserire ENDIF.
ENDIF

E’ adesso il momento di spegnere i LED e fermarci di nuovo. Potreste provare a decidere


quale LED avete acceso e spegnerlo ancora. Le istruzioni PBASIC vengono eseguite
molto rapidamente, così perché non spegnere entrambi i LED e dimenticarci di prendere
altre decisioni?
LOW 14
LOW 15

PAUSE 50

L’istruzione LOOP riporta il programma indietro alla istruzione DO, e il processo di


controllare i pulsanti e cambiare lo stato dei LED si ripete all’infinito.
Pagina 82 · Che cosa è un microcontrollore?

LOOP

Il vostro turno – Cosa succede se premiamo entrambi i pulsanti?


Il programma esempio ha una pecca. Provate a premere contemporaneamente entrambi i
pulsanti, e vedrete la pecca. Vi aspettereste che entrambi i LED lampeggino acceso –
spento, ma essi non lo fanno perché in una frase IF...ELSEIF...ELSE viene eseguito
soltanto un blocco di codice prima che la frase salti a ENDIF. Ecco come potete
correggere il problema:

 Memorizzate ControlloAPulsantiDiDueLed.bs2 sotto un altro nome.


 Sostituite questa frase IF e il suo blocco di codice:

IF (IN3 = 1) THEN
HIGH 14
PAUSE 50

...con questa frase IF...ELSEIF:

IF (IN3 = 1) AND (IN4 = 1) THEN


HIGH 14
HIGH 15
PAUSE 50

ELSEIF (IN3 = 1) THEN


HIGH 14
PAUSE 50

Un blocco di codice è un gruppo di comandi (istruzioni). La frase IF riportata sopra ha un


blocco di codice con tre comandi (HIGH, HIGH, e PAUSE). La frase ELSEIF ha un blocco di
codice con due comandi (HIGH, PAUSE).

 Eseguite il vostro programma modificato e osservate se esso gestisce entrambi i


pulsanti e i circuiti LED come vi aspettereste.

La parola chiave AND può essere utilizzata entro una frase IF...THEN per controllare se
più di una condizione è vera. Tutte le condizioni legate da AND debbono risultare vere
perché sia vera la frase IF.
La parola chiave OR può essere utilizzata anch’essa per controllare se sia vera almeno una
delle condizioni.
Ingresso digitale - Pulsanti · Pagina 83

Potete anche modificare il programma in modo che il LED che sta lampeggiando rimanga
acceso per durate di tempo differenti. Per esempio, potrete ridurre la Duration della
PAUSE a 10 per entrambi i pulsanti, aumentare la PAUSE per il LED su P14 a 100, ed
aumentare la PAUSE per il LED su P15 a 200.

 Modificate i comandi PAUSE nella frase IF e nelle due frasi ELSEIF come è stato
detto.
 Eseguite il programma modificato.
 Osservate la differenza di comportamento di ciascuna luce.

ATTIVITÀ #5: PROVA DI UN TEMPORIZZATORE DI REAZIONE


Siete l’ingegnere dei sistemi incorporati in una società di videogiochi. Il dipartimento
commerciale raccomanda di aggiungere al prossimo controllore di gioco palmare un
circuito che permetta di provare il tempo di reazione del giocatore. Il vostro prossimo
compito è di sviluppare una verifica concettuale per la prova del temporizzatore di
reazione.

La soluzione che costruirete e proverete in questa attività è un esempio di come risolvere


questo problema, ma non è definitivamente l’unica soluzione. Prima di continuare,
prendetevi un momento per pensare al modo in cui progetterete questo temporizzatore di
reazione.

Parti del gioco temporizzatore di reazioni


(1) LED – bicolore
(1) Resistenza – 470 Ω (giallo-viola-marrone)
(1) Pulsante – normalmente aperto
(1) Resistenza – 10 kΩ (marrone-nero-arancio)
(1) Resistenza – 220 Ω (rosso-rosso-marrone)
(2) Cavallotti di filo

Costruzione del circuito temporizzatore di reazione


La Figura 3-14 mostra lo schema e i diagrammi di cablaggio per un circuito che può
essere utilizzato con il BASIC Stamp per fare un gioco temporizzatore di reazione.

 Costruite il circuito mostrato in Figura 3-14 a pagina 84.


Pagina 84 · Che cosa è un microcontrollore?

 Eseguite ProvaLEDBiColore.bs2 da pagina 59 per provare il circuito del LED


bicolore ed essere certi che il vostro cablaggio sia corretto.
 Se ora ricostruite il circuito a pulsante per questa attività, eseguite il programma
LeggiStatoPulsante.bs2 dalla Attività #1 in questo capitolo per accertarvi che il
vostro pulsante stia lavorando correttamente.

P15
1

1 2
Vdd Vin Vss
X3
2
P14 P15
 P14 Figura 3-14
P13
P12 Circuito per il
Vdd P11
Gioco del
P10
P9 temporizzatore
P8 di reazione
P7
P6
P3 P5
P4
220  P3
10 k P2
P1
P0
X2
Vss

Programmazione del temporizzatore di reazione


Il programma esempio che segue lascerà il LED bicolore spento fino a quando il
giocatore preme e tiene premuto il pulsante. Quando il pulsante è mantenuto premuto in
giù, il LED si accenderà di colore rosso per un breve periodo di tempo. Quando diventa
di colore verde, il giocatore dovrà lasciare il pulsante quanto più in fretta riesce a fare. Il
programma misurerà allora il tempo che il giocatore impiega a lasciare il pulsante come
reazione alla luce che diventa verde.

Il programma esempio dimostra come lavorino l’esplorazione e il conteggio. L’


esplorazione (Polling) è il processo del controllare qualcosa, ripetendo il controllo
infinite volte molto rapidamente per vedere se è cambiata. Il conteggio (Counting) è il
processo di aggiungere un numero ad una variabile ogni volta che capita (o non capita)
un certo evento. In questo programma, il BASIC Stamp esplorerà dal momento in cui il
LED bicolore diventa verde fin quando viene rilasciato il pulsante. Il BASIC Stamp
aspetterà 1/1000 di secondo se si usa il comando PAUSE 1. Ciascuna volta che il BASIC
Ingresso digitale - Pulsanti · Pagina 85

Stamp esplora e il pulsante non è stato ancora rilasciato, esso aggiungerà 1 alla variabile
di conteggio chiamata ContaTempo. Quando il pulsante viene rilasciato, il programma
smette di esplorare ed invia un messaggio al terminale di Debug, che visualizza il valore
della variabile ContaTempo.

Programma Esempio: TempoReazione.bs2


 Digitate ed eseguite TempoReazione.bs2.
 Seguite le domande sul terminale di Debug (vedi Figura 3-15).

Premi e tieni giù il pulsante


per accendere la luce rossa.

Quando la luce diventa verde, Figura 3-15


lascia subito il pulsante! Istruzioni del gioco Temporizzatore
di reazione nel terminale di Debug
Il vostro tempo è stato 96 ms.

Per giocare ancora, tieni giù


di nuovo il pulsante.

' Che cos’è un microcontrollore - TempoReazione.bs2


' Prova il tempo di reazione con un pulsante ed un LED bicolore.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000 ' Aspetta 1 sec prima del 1° messaggio.

ContaTempo VAR Word ' Dichiara la variabile conta tempo.

DEBUG "Premi e tieni giù il pulsante", CR, ' Visualizza istruz. di reazione.
"per accendere la luce rossa.", CR, CR,
"Quando la luce diventa verde, ", CR,
Pagina 86 · Che cosa è un microcontrollore?

"lascia subito il pulsante!", CR, CR

DO ' Inizia ciclo principale.

DO ' Il ciclo annidato si ripete...


LOOP UNTIL IN3 = 1 ' fin quando si preme il pulsante.

HIGH 14 ' Il LED bicolore diventa rosso.


LOW 15

PAUSE 1000 ' Ritardo di 1 secondo.

LOW 14 ' Il LED bicolore diventa verde.


HIGH 15

ContaTempo = 0 ' Azzera ContaTempo.

DO ' Ciclo annidato, conta il tempo...

PAUSE 1
ContaTempo = ContaTempo + 1

LOOP UNTIL IN3 = 0 ' fin quando è rilasciato il pulsante.

LOW 15 ' LED bicolore spento.

DEBUG "Il vostro tempo è stato ", DEC ContaTempo, ' Visualizza mis. tempo.
" ms.", CR, CR,
"Per giocare ancora, tieni giù ", CR, ‘ Istruzioni per giocare ancora.
"di nuovo il pulsante.", CR, CR

LOOP ' Indietro a “Inizia ciclo principale".

Come lavora TempoReazione.bs2


Poiché il programma dovrà tener conto del numero di volte in cui il pulsante viene
esplorato, è stata dichiarata una variabile chiamata ContaTempo.
ContaTempo VAR Word ' Dichiara variabile per cont. tempo.

Le variabili sono inizializzate a zero: Quando in PBASIC viene dichiarata una variabile, il
suo valore è automaticamente posto a zero fin quando un comando non la imposta ad un
nuovo valore.

Il comando DEBUG contiene istruzioni per chi esegue il gioco.


DEBUG "Premi e tieni giù il pulsante", CR,
Ingresso digitale - Pulsanti · Pagina 87

"per accendere la luce rossa.", CR, CR,


"Quando la luce diventa verde, ", CR,
"lascia subito il pulsante!", CR, CR

Le istruzioni DO...LOOP possono essere annidate. In altre parole, potete mettere una
DO...LOOP all’interno di un’altra.

DO ' Inizia ciclo principale.

DO ' Ripete ciclo annidato...


LOOP UNTIL IN3 = 1 ' fin quando si preme il pulsante.
' Qui era il resto del programma.

LOOP ' Indietro a "Inizia ciclo principale ".

La DO...LOOP più interna merita uno sguardo più attento. Una istruzione DO...LOOP
può usare una condizione per decidere se interrompere o meno il ciclo ed uscirne
muovendosi su ulteriori comandi che seguono il ciclo. Questa DO...LOOP ripeterà se
stessa fin quando il pulsante rimane non premuto (IN3 = 0). La DO...LOOP sarà
eseguita ripetutamente all’infinito, fin quando IN3 = 1. Poi, il programma passa al
comando successivo all’istruzione LOOP UNTIL. Questo è un esempio di esplorazione .
Il ciclo DO...LOOP UNTIL esplora fino a quando viene premuto il pulsante.
DO ' Il ciclo annidato si ripete...
LOOP UNTIL IN3 = 1 ' fin quando viene premuto il pulsante.

I comandi che seguono immediatamente l’istruzione LOOP UNTIL accendono il LED


bicolore rosso, ritardano per un secondo, quindi lo accendono in verde.
HIGH 14 ' LED bicolore rosso.
LOW 15

PAUSE 1000 ' Ritardo di 1 secondo.

LOW 14 ' LED bicolore verde.


HIGH 15

Non appena il LED bicolore passa a verde, è ora di iniziare il conteggio per tener conto di
quanto tempo passa fino a quando il giocatore rilascia il pulsante. La variabile
ContaTempo è impostata a zero, quindi inizia a ripetersi un altro ciclo DO...LOOP con
una condizione UNTIL. Questo ciclo si ripete fin quando il giocatore rilascia il pulsante
Pagina 88 · Che cosa è un microcontrollore?

(IN3 = 0). In ciascuna ripetizione del ciclo, il BASIC Stamp ritarda per 1 ms tramite
l’istruzione PAUSE 1, e inoltre aggiunge 1 al valore della variabile ContaTempo.
ContaTempo = 0 ' Imposta ContaTempo a zero.

DO ' Il ciclo annidato conta il tempo...

PAUSE 1
ContaTempo = ContaTempo + 1

LOOP UNTIL IN3 = 0 'fin quando il pulsante è rilasciato.

Dopo che il pulsante è stato rilasciato, il LED bicolore viene spento.


LOW 15

I risultati sono visualizzati nel terminale di Debug.


DEBUG "Il tuo tempo è stato ", DEC ContaTempo,
" ms.", CR, CR,
"Per giocare ancora, spingi il ", CR,
"pulsante giù di nuovo.", CR, CR

L’ultima istruzione nel programma è LOOP, che rimanda il programma indietro alla
primissima istruzione DO.

Il vostro turno – Rivedere il Progetto (Argomenti avanzati)


Il dipartimento commerciale ha dato il vostro prototipo ad alcuni sperimentatori di gioco.
Quando gli esperimenti di gioco sono stati fatti, il dipartimento commerciale torna da voi
con un elenco dettagliato di tre problemi che debbono essere risolti prima che il vostro
prototipo possa essere trasformato in controllore di gioco.

 Memorizzate TempoReazione.bs2 con un nuovo nome (ad esempio,


TempoReazioneVostroTurno.bs2).

La “lista dettagliata” di problemi e le loro soluzioni sono discusse qui sotto.

Punto 1: Quando un giocatore tiene il pulsante premuto per 30 secondi, il suo


punteggio reale è di circa 14,000 ms, una misura di 14 secondi. Questo errore va
corretto!
Ingresso digitale - Pulsanti · Pagina 89

Succede che l’eseguire il ciclo stesso assieme all’aggiunta di uno alla variabile
ContaTempo prende circa 1 ms senza il comando PAUSE 1. Questo fatto è chiamato
sovraccarico di codice (code overhead), ed è la quantità di tempo che il BASIC Stamp
impiega per eseguire i comandi. Una veloce correzione che migliorerà l’accuratezza è
semplicemente il trasformare in commento il comando PAUSE 1 aggiungendo un
apostrofo alla sua sinistra.
' PAUSE 1

 Provare a trasformare PAUSE 1 in commento e osservate quanto il programma


migliori in accuratezza.

Invece di commentare il ritardo, un altro modo di correggere il programma è moltiplicare


il vostro risultato per due. Ad esempio, proprio prima del comando DEBUG che visualizza
il numero di ms, potete inserire un comando che moltiplica il risultato per due:
ContaTempo = ContaTempo * 2 ' <- Aggiungete questa
DEBUG "Il tuo tempo è stato ", DEC ContaTempo, " ms.", CR, CR

 Togliete il commento al comando PAUSE cancellando l’apostrofo, e provate al


suo posto la soluzione moltiplica-per-due.
Pagina 90 · Che cosa è un microcontrollore?

Per la precisione, potete usare l’operatore */ che moltiplica per un valore frazionario
(decimale) . L’operatore */ non è difficile da usare; ecco come:
1) Ponete il valore o la variabile che volete moltiplicare per un valore frazionario
prima dell’operatore */.
2) Prendete il valore frazionario che volete usare e moltiplicatelo per 256.
3) Arrotondatelo per togliere tutto quanto è a destra del punto decimale.
4) Ponete il valore trovato dopo (a destra del) l’operatore */.
Esempio: Diciamo che volete moltiplicare la variabile ContaTempo per 3,69.
1) Iniziate a porre ContaTempo dopo (a sinistra del) l’operatore */:
ContaTempo = ContaTempo */
2) Moltiplicate il vostro valore frazionario per 256: 3,69 x 256 = 944,64.
3) Arrotondate: 944,64 ≈ 945.
4) Ponete quel valore a destra dell’operatore */:
ContaTempo = ContaTempo */ 945 ' moltiplicate per 3,69

Moltiplicare per 2 riporterà in scala 14.000 a 28.000, che non è esattamente 30.000.
30.000 ÷ 14.000 ≈ 2,14. Per moltiplicare per 2,14 con l’operatore */ , per aumentare la
precisione, ci occorre immaginare quanti 256simi ci sono in 2,4. Quindi 2,14 × 256 =
547,84 ≈ 548. Potete usare questo valore e l’operatore */ per sostituire ContaTempo =
ContaTempo * 2.

 Sostituite ContaTempo = ContaTempo * 2 con ContaTempo = ContaTempo


*/ 548 e provate di nuovo il vostro programma.

La vostra prova dei 30-secondi con il programma originale, non modificato, può darvi un
valore leggermente diverso da 14.000. Se è così, potete usare lo stesso procedimento con
i risultati della vostra prova per calcolare un valore che, dato all’operatore */, renda i
vostri risultati anche più precisi.

 Provate a farlo!

Punto 2: I giocatori immaginano presto che il ritardo da rosso a verde è 1 secondo.


Dopo aver eseguito il gioco parecchie volte, essi migliorano nel predire quando
andar via, se il loro punteggio (tempo) non riflette più il loro vero tempo di reazione.
Ingresso digitale - Pulsanti · Pagina 91

Il BASIC Stamp ha un comando RANDOM . Ecco come modificare il vostro codice per
ottenere un numero random:

 All’inizio del vostro codice, aggiungete una dichiarazione di una nuova variabile
chiamata valore, e impostatela a 23. Il valore 23 è chiamato il seme poiché
causa l’avvio di una sequenza di numeri pseudo random.
ContaTempo VAR Word
valore VAR Byte ' <- Aggiungete questa
valore = 23 ' <- Aggiungete questa

 Proprio prima del comando PAUSE 1000 interno al ciclo DO...LOOP, usate il
comando RANDOM per dare a valore un nuovo valore “random” dalla sequenza
pseudo random che è stata iniziata con 23.
RANDOM valore ' <- Aggiungete questa
DEBUG "Ritardo ", ? 1000 + valore, CR ' <- Aggiung. questa

 Modificate il comando PAUSE 1000 in modo che il valore “random” sia


aggiunto al suo argomento Durata.
PAUSE 1000 + valore ' <- Modificate questa

LOW 14
HIGH 15

 Poiché il valore più grande che un byte può memorizzare è 255, il comando
PAUSE varia soltanto di ¼ di secondo. Potete moltiplicare la variabile valore
per 4 per fare in modo che il ritardo della luce rossa varii da 1 ad appena sopra 2
secondi.
DEBUG "Ritardo ", ? 1000 + (valore*4), CR ' <- Modificate
PAUSE 1000 + (valore * 4) ' <- Modificate ancora questa
Pagina 92 · Che cosa è un microcontrollore?

Che cos’è un algoritmo? Un algoritmo è una sequenza di operazioni matematiche.


Che cos’è pseudo random? Pseudo random significa che sembra random, ma non lo è
realmente. Ciascuna volta che iniziate di nuovo il programma, otterrete la stessa sequenza
di valori.
Che cos’è un seme? Un seme è un valore usato per iniziare la sequenza pseudo random.
Se usate un valore diverso del seme (cambiate valore da 23 a qualche altro numero),
avrete una diversa sequenza pseudo random.

Punto 3: Un giocatore che abbandona il pulsante prima che la luce diventi verde
ottiene un punteggio irrazionalmente buono (1 ms). Il vostro microcontrollore deve
immaginare se un giocatore sta imbrogliando.

Lo pseudo-codice è stato introdotto verso la fine della Attività #3 in questo capitolo.


Ecco un po’ di pseudo-codice che vi aiuta ad applicare una istruzione
IF...THEN...ELSE per risolvere il problema. Supponendo che abbiate fatto gli altri
cambiamenti descritti nei punti 1 e 2, ContaTempo sarà ora 2 invece di 1 se il giocatore
rilascia il pulsante prima che la luce diventi verde. I cambiamenti descritti qui sotto
lavoreranno sia nel caso che ContaTempo sia 1, sia che sia 2.

 Se il valore di ContaTempo è minore o uguale a 2 (ContaTempo <= 2 )


o Visualizza un messaggio che dica al giocatore se debba aspettare
fino a dopo che la luce si accenda in verde per lasciare il pulsante.
 Altrimenti, (se il valore di ContaTempo è maggiore di 1)
o Visualizza il valore del tempo in ContaTempo (proprio come in
TempoReazione.bs2) in ms.
 Fine If
 Visualizza un messaggio “Per giocare di nuovo...”.

 Modificate il vostro programma implementando questo pseudo-codice in


PBASIC per correggere il problema del giocatore che imbroglia.

SOMMARIO
Questo capitolo ha introdotto il pulsante e alcuni comuni circuiti a pulsante. Questo
capitolo ha anche introdotto come costruire e provare un circuito a pulsante e come usare
il BASIC Stamp per leggere lo stato di uno o più pulsanti. Il BASIC Stamp era stato
programmato per assumere decisioni basate sullo stato (sugli stati) del pulsante (dei
pulsanti) e questa informazione è stata utilizzata per controllare LED (uno o più).
Ingresso digitale - Pulsanti · Pagina 93

Utilizzando questi concetti è stato costruito un gioco sul tempo di reazione. In aggiunta
al controllo di LED, il BASIC Stamp era stato programmato per esplorare un pulsante e
prendere misure di tempo.

Sono stati introdotti alcuni concetti di programmazione, inclusi conteggio, pseudo-codice


per pianificare il flusso del programma, il sovraccarico di codice in applicazioni sensibili
al tempo, e i valori del seme per eventi pseudo random.

E’ stato introdotto il modo in cui leggere circuiti a pulsante singolo tramite le speciali
variabili I/O incorporate nel BASIC Stamp (IN3, IN4, ecc.). Sono stati introdotti anche il
prendere decisioni basate su questi valori usando frasi IF...THEN...ELSE, frasi
IF...ELSEIF...ELSE, e blocchi di codice. Per valutare più di una condizione, sono
stati introdotti gli operatori AND ed OR. E’ stata introdotta l’aggiunta di una condizione ad
un ciclo DO...LOOP usando la parola-chiave UNTIL assieme ai blocchi DO...LOOP
annidati. È stato introdotto il comando RANDOM per aggiungere un elemento di
imprevedibilità ad una applicazione, il gioco del Temporizzatore di Reazione.

Domande
1. Qual’è la differenza tra inviare e ricevere segnali HIGH e LOW usando il BASIC
Stamp?
2. Cosa significa “normalmente aperto” riguardo ad un pulsante?
3. Che cosa accade tra i terminali di un pulsante normalmente aperto quando lo
premete?
4. Qual’è il valore di IN3 quando un pulsante si connette a Vdd? Qual è il valore di
IN3 quando un pulsante si connette a Vss?
5. Casa fa il comando DEBUG ? IN3?
6. Che tipo di blocchi di codice può essere utilizzato per assumere decisioni basate
sul valore di uno o più pulsanti?
7. Che cosa fa il carattere di controllo HOME nella istruzione DEBUG HOME?

Esercizi
1. Spiegare come modificare LeggiStatoPulsante.bs2 a pagina 72 perché legga il
pulsante ogni secondo invece che ogni ¼ di secondo.
2. Spiegare come modificare LeggiStatoPulsante.bs2 in modo che legga il circuito
di un pulsante normalmente aperto con una resistenza di pull-up (rinforzo)
connessa al pin di I/O P6.
Pagina 94 · Che cosa è un microcontrollore?

Progetto
1. Modificare TempoReazione.bs2 in modo che sia un gioco per due giocatori.
Aggiungere un secondo pulsante collegato a P4 per il secondo giocatore.

Soluzioni
D1. Inviare usa il pin I/O del BASIC Stamp come un’uscita, mentre ricevere usa il
pin I/O del BASIC Stamp come un ingresso.
D2. Normalmente aperto significa che lo stato normale del pulsante (non premuto)
forma un circuito aperto.
D3. Quando è premuto, l’intervallo tra i terminali è ponticellato da un materiale
metallico conduttore. La corrente può quindi fluire attraverso il pulsante.
D4. IN3 = 1 quando il pulsante lo collega a Vdd. IN3 = 0 quando il pulsante lo
collega a Vss.
D5.DEBUG ? IN3 visualizza il testo “IN3 = ” seguito dal valore memorizzato entro
IN3 (è uno 0 oppure un 1 a seconda dello stato del pin di I/O P3), seguito da un
ritorno carrello.
D6. IF...THEN...ELSE ed IF...ELSEIF...ELSE.
D7. Il carattere di controllo HOME manda il cursore nella posizione in alto a sinistra
del terminale di Debug.
E1. Il ciclo DO...LOOP nel programma si ripete ogni ¼ di secondo per effetto del
comando PAUSE 250. Per ripeterlo ogni secondo, modificate l’istruzione PAUSE
250 (250 ms = 0.25 s = ¼ s), in PAUSE 1000 (1000ms = 1 s).

DO
DEBUG ? IN3
PAUSE 1000
LOOP

E2. Sostituite IN3 con IN6, per leggere il pin I/O P6. Il programma visualizza
soltanto lo stato del pulsante, e non fa uso del valore per prendere decisioni; non
importa se la resistenza è di pull-up (rinforzo) o di pull-down (indebolimento). Il
comando DEBUG visualizzerà lo stato del pulsante in entrambi i modi.
DO
DEBUG ? IN6
PAUSE 250
LOOP
Ingresso digitale - Pulsanti · Pagina 95

P1. Prima di tutto, è stato aggiunto un pulsante per il secondo giocatore, collegato al
pin I/O P4 del BASIC Stamp. Lo schema circuitale si basa sulla Figura 3-14 a
pagina 84.
Vdd Vdd
P15
1

P4 P3
220  220 
10 k 10 k
2
P14
470
Vss Vss

Frammenti del programma soluzione sono riportati qui sotto, ma tenete a mente
che le soluzioni possono essere codificate in molti modi diversi. Però, la
maggior parte delle soluzioni includeranno le modifiche seguenti:

Usare due variabili per tener traccia dei tempi dei due giocatori:
ContaTempoA VAR Word ' Punteggio (tempo) giocatore A
ContaTempoB VAR Word ' Punteggio (tempo) giocatore B

Cambiate le istruzioni per tener conto di due pulsanti:


DEBUG "Premi e tieni giù i pulsanti ", CR,
DEBUG "pulsanti giù di nuovo.", CR, CR

Aspettare che entrambi i pulsanti siano premuti prima di accendere il LED rosso,
usando l’operatore AND:

LOOP UNTIL (IN3 = 1) AND (IN4 = 1)

Aspettare fin quando entrambi i pulsanti siano rilasciati per terminare la


temporizzazione, usando ancora l’operatore AND:
LOOP UNTIL (IN3 = 0) AND (IN4 = 0)

Aggiungere logica per decidere di quale giocatore incrementare il tempo:


IF (IN3 = 1) THEN
ContaTempoA = ContaTempoA + 1
ENDIF
IF (IN4 = 1) THEN
Pagina 96 · Che cosa è un microcontrollore?

ContaTempoB = ContaTempoB + 1
ENDIF

Modificare la visualizzazione del tempo per mostrare i tempi di entrambi i


giocatori:
DEBUG "Tempo giocatore A: ", DEC ContaTempoA, " ms. ", CR
DEBUG "Tempo giocatore B: ", DEC ContaTempoB, " ms. ", CR, CR

Aggiungere logica per mostrare quale giocatore ha avuto il tempo di reazione più
breve:
IF (ContaTempoA < ContaTempoB) THEN
DEBUG "Vince il giocatore A!", CR
ELSEIF (ContaTempoB < ContaTempoA) THEN
DEBUG "Vince il giocatore B!", CR
ELSE
DEBUG "Hanno pareggiato!", CR
ENDIF

Qui sotto è mostrata la soluzione completa.

' Che cos’è un microcontrollore - Cap03Pr01_TempoReazione2Giocatori.bs2


' Prova il tempo di reazione con un pulsante e un LED bicolore.
' Aggiunge un secondo giocatore con un secondo pulsante. Entrambi i gio
' catori giocano una volta usando lo stesso LED. Vince il più veloce.
' Pin P3: Pulsante giocatore A, attivo alto
' Pin P4: Pulsante giocatore B, attivo alto

' {$STAMP BS2}


' {$PBASIC 2.5}

ContaTempoA VAR Word ' Punteggio (tempo) giocatore A


ContaTempoB VAR Word ' Punteggio (tempo) giocatore B
PAUSE 1000 ' 1 s prima 1.mo messaggio

DEBUG "Premi e tieni giù i pulsanti ", CR, ' Visualizza le istru-
"per accendere la luce rossa.", CR, CR, ' zioni di reazione.
"Quando la luce diventa verde, ", CR,
"lascia quanto più presto puoi.", CR, CR
DO ' Inizia ciclo principale.

DO ' Cicla fin quando premono entrambi


' Niente
LOOP UNTIL (IN3 = 1) AND (IN4 = 1)

HIGH 14 ' LED bicolore rosso.


Ingresso digitale - Pulsanti · Pagina 97

LOW 15

PAUSE 1000 ' Ritardo 1 secondo.

LOW 14 ' LED bicolore verde.


HIGH 15

ContaTempoA = 0 ' Pone ContaTempo a zero


ContaTempoB = 0 ' per entrambi

DO

PAUSE 1
IF (IN3 = 1) THEN ' Se pulsante ancora giù,
ContaTempoA = ContaTempoA + 1 ' incrementa contatore
ENDIF
IF (IN4 = 1) THEN
ContaTempoB = ContaTempoB + 1
ENDIF

LOOP UNTIL (IN3 = 0) AND (IN4 = 0) ' Cicla finché entrambi i


' pulsanti sono rilasciati.

LOW 15 ' LED bicolore spento.

DEBUG "Tempo giocatore A: ", DEC ContaTempoA, " ms. ", CR


DEBUG "Tempo giocatore B: ", DEC ContaTempoB, " ms. ", CR, CR
IF (ContaTempoA < ContaTempoB) THEN
DEBUG "Vince il giocaotre A!", CR
ELSEIF (ContaTempoB < ContaTempoA) THEN
DEBUG "Vince il giocatore B!", CR
ELSE ' tempi di A & B uguali
DEBUG "Hanno pareggiato!", CR
ENDIF
DEBUG CR

DEBUG "Per giocare di nuovo, premere ", CR ' Istruz. nuovo gioco.
DEBUG "ancora i pulsanti.", CR, CR

LOOP ' Torna a inizio ciclo principale.


Controllo del Movimento · Pagina 99

Capitolo 4: Controllo del Movimento


MOVIMENTO MICROCONTROLLATO
I microcontrollori si accertano che le cose si muovono nel posto giusto tutto intorno a voi
ogni giorno. Se avete una stampante a getto di inchiostro, la teastina di stampa che va
avanti e indietro attraverso la pagina mentre sta stampando è mossa da un motore passo-
passo controllato da un microcontrollore. Le porte automatiche del negozio di alimentari
attraverso cui passate sono controllate da microcontrollori, e il dispositivo di espulsione
automatica del vostro riproduttore DVD è controllato anch’esso da un microcontrollore.

SEGNALI ACCESO/SPENTO (ON/OFF) E MOVIMENTO DI UN MOTORE


Quasi tutti i motori microcontrollati ricevono sequenze di segnali alto e basso simili a
quelli che avete mandato ai LED. La differenza è che il microcontrollore deve inviare
questi segnali a tassi per solito molto più veloci degli esempi di LED lampeggianti del
capitolo 3. Se doveste usare un circuito a LED per monitorare i segnali di controllo,
alcuni farebbero lampeggiare il LED acceso/spento così rapidamente che l’occhio umano
non potrebbe rilevarne la commutazione. Il LED apparirebbe soltanto debolmente
risplendente. Alcuni apparirebbero come lampeggianti rapidamente e altri sarebbero
percepibili più facilmente.

Alcuni motori richiedono una abbondante circuiteria per aiutare il microcontrollore a farli
funzionare. Altri motori richiedono l’aggiunta di parti meccaniche per farli lavorare
all’interno di macchine. Di tutti i tipi diversi di motori da cui iniziare a parlare, il servo
motore hobby con cui farete esperimenti in questo capitolo è probabilmente il più
semplice. Come vedrete presto, è facile controllarlo con il BASIC Stamp, poiché
richiede poca o nessuna circuiteria aggiuntiva, ed ha una uscita meccanica che è facile
collegare ad oggetti per farli muovere.

INTRODUZIONE AL SERVO
Un servo hobby è un dispositivo che controlla la posizione, e potrete trovarlo in quasi
tutti i modelli di automobili, barche o aeroplani radio-controllati (RC). Nelle automobili
RC, il servo gestisce lo sterzo per controllare con quanta precisione l’automobile fa una
curva. In una barca RC, esso mantiene il timone in posizione per le virate. Gli aeroplani
RC hanno per solito diversi servo che posizionano i diversi flap che controllano il
movimento dell’aeroplano. Nei veicoli RC con motori a carburante, un altro servo
muove la leva dell’acceleratore per controllare la velocità di rotazione (i “giri”) del
Pagina 100 · Che cosa è un microcontrollore?

motore. Un esemppio di aeroplano RC e del suo controllore radio sono mostrati nella
Figura 4-1. L’hobbista “fa volare” l’aeroplano tramite joystick manuali sul controllore
radio, che provocano l’azione dei servo sull’aeroplano per controllare la posizione dei
piani elevatori (alettoni, flap e piani di coda) e del timone di direzione dell’aeroplano RC.

Figura 4-1
Areomodello e
Controllore Radio

Pertanto, come fa il joystick del radio-comando, mantenuto in certe posizioni, a causare il


mantenimento di un flap sull’aeroplano RC in una certa posizione? Il controllore radio
converte la posizione dei joystick in impulsi di attività radio che durano determinati
periodi di tempo. Il tempo per cui dura ciascun impulso indica la posizione di uno dei
joystick. Sull’aereo RC, un ricevitore radio converte questi impulsi di attività radio in
impulsi digitali (segnali alto/basso) e li invia ai servo dell’aereo. Ciascun servo ha al suo
interno la circuiteria che converte questi impulsi digitali in una posizione, che il servo
mantiene. La quantità di tempo per cui dura ciascun impulso è ciò che dice al servo quale
posizione deve mantenere. Questi impulsi di controllo durano soltanto pochi millesimi di
secondo, e si ripetono all’incirca da 40 a 50 volte al secondo per fare in modo che il servo
mantenga la posizione che tiene.

La Figura 4-2 mostra un disegno di un Servo Standard Parallax. Lo spinotto (1) è


utilizzato per connettere il servo ad una sorgente di energia (Vdd e Vss) e ad una sorgente
di segnale (un pin I/O del BASIC Stamp). Il cavo (2) ha tre fili, e conduce le linee di
Vdd, Vss e del segnale dallo spinotto entro il servo. Il quadrilatero (3) è la parte del
servo che somiglia ad una stella a quattro punte. Quando il servo sta in movimento, il
quadrilatero è la parte mobile che il servo mantiene in posizioni diverse. La vite Phillips
(4) mantiene il quadrilatero fissato all’alberino di uscita del servo. L’involucro (5)
contiene i cirsuiti sensori di posizione e di controllo del servo, un motore DC, e gli
Controllo del Movimento · Pagina 101

ingranaggi. Queste parti lavorano assieme per prendere i segnali alto/basso dal BASIC
Stamp e tradurli in posizioni mantenute dal quadrilatero del servo.

Figura 4-2
3 Il Servo Standard
1 Parallax

(1) Spinotto
(2) Cavo
4 (3) Quadrilatero
(4) Vite che fissa il
quadrilatero al’alberino di
uscita del servo
(5) Involucro

In questo capitolo, programmerete il BASIC Stamp perché invii segnali ad un servo che
controllino la posizione del suo quadrilatero. Facendo inviare al BASIC Stamp segnali
che dicano al servo di mantenere diverse posizioni, i vostri programmi possono anche
orchestrare il movimento del servo. I vostri programmi possono perfino controllare
pulsanti e utilizzare le informazioni sul fatto che i pulsanti sono premuti o meno per
regolare la posizione che un servo mantiene (controllo della posizione di un servo a
pulsante). Il BASIC Stamp può essere anche programmato per ricevere messaggi che voi
digitate nel terminale di Debug, ed usare quei messaggi per controllare la posizione del
servo (controllo della posizione del servo da terminale).
Pagina 102 · Che cosa è un microcontrollore?

ATTIVITÀ #1: CONNESSIONE E PROVA DI UN SERVO


In questa attività, seguirete istruzioni per connettere un servo all’alimentazione della
vostra particolare scheda e al BASIC Stamp.

Parti del Servo e del circuito a LED


(1) Servo Standard Parallax
(1) Resistenza – 470 Ω (giallo-viola-marrone)
(1) LED – di qualsiasi colore

Il circuito a LED sarà utilizzato per tener d’occhio il segnale di controllo che il BASIC
Stamp invia al servo. Tenete a mente che il circuito a LED non è richiesto per aiutare il
servo a funzionare. È lì proprio per aiutarvi a “vedere” i segnali di controllo.

PRECAUZIONE: per le attività di questo testo usare soltanto un Servo Standard


Parallax ! Altri servo possono esser stati progettati con specifiche differenti, che potrebbero
non essere compatibili con queste attività.

Costruzione dei circuiti del Servo e del LED


Nel Capitolo 1, avete identificato la vostra scheda e relativa revisione tramite l’aiuto
dell’Editor del BASIC Stamp. Qui vi occorrerà sapere quale scheda, e relativa revisione,
avete in modo che possiate trovare le istruzioni di costruzione del circuito del servo per la
vostra scheda.

 Se non sapete in anticipo quale scheda e sua revisione avete, aprite l’aiuto
dell’Editor del BASIC Stamp e cliccate sul link Getting Started with Stamps in
Class sulla home page. Poi seguite le istruzioni per determinare quale scheda
avete.
 Se avete una Board of Education USB (qualsiasi Rev) o Seriale (Rev C o
successiva), andate al paragrafo Circuito Servo per la Board of Education qui
sotto.
 Se avte una HomeWork Board BASIC Stamp (Rev C o successiva), andate al
paragrafo Circuito Servo per la HomeWork Board BASIC Stamp a pagina 106.
 Se la vostra scheda non è elencata qui sopra, andate al sito
www.parallax.com/Go/WAM → Servo Circuit Connections per trovare le
istruzioni circuitali per la vostra scheda. Quando avete letto le itruzioni del
circuito del servo per la vostra scheda, andate all’ Attività #2: Programma per la
prova del controllo di un servo a pagina 109.
Controllo del Movimento · Pagina 103

Circuito Servo per la Board of Education


Queste istruzioni sono per tutte le Revisioni della Board of Education USB e anche per la
Rev C o successive della Board of Education Seriale.

 Togliete energia come mostrato in Figura 4-3.

Figura 4-3
Reset
Scollegate Energia

Ponete a 0 l’interruttore a 3-posizioni


0 1 2

La Figura 4-4 mostra i connettori per i servo sulla Board of Education. Questo è il posto
ove va connesso lo spinotto dei vostri servo. Questa scheda è provvista di un ponticello
(jumper) che potrete usare per collegare l’alimentazione dei servo sia a Vin, sia a Vdd. Il
ponticello è il pezzo rettangolare nero rimovibile indicato dalla freccia tra i due
connettori per i servo.

 Verificate che il ponticello sia posto in Vdd come mostrato nella Figura 4-4. Se
invece è posto su Vin, sollevate ed estraete il ponticello rettangolare fuori dai pin
su cui è inserito attualmente, e reinseritelo sui due pin più vicini all’etichetta
Vdd.

15 14 Vdd 13 12
Figura 4-4
Red
Rosso Ponticello tra i connettori dei Servo
Black
Nero impostato su Vdd
X4 X5
Vin
Pagina 104 · Che cosa è un microcontrollore?

Il ponticello vi permette di scegliere l’alimentazione (Vin or Vdd) per i Servo Standard


Parallax.
 Se state utilizzando una batteria da 9 V, impostatelo a Vdd. NON USATE i
“sostituti” di batterie da 9 V montati a parete (prese di alimentazione equivalenti).
 Se state utilizzando un pacco portapile da 6 V con 4 batterie AA, potrete usare
entrambe le posizioni del ponticello.
 Se state utilizzando un alimentatore DC connesso alla rete elettrica (a parete),
usate soltanto Vdd. Prima di collegare un alimentatore DC connesso a parete alla
Board of Education, assicuratevi di controllare le specifiche per gli alimentatori DC
accettabili, elencate nell’aiuto dell’Editor del BASIC Stamp.

La Figura 4-5 mostra lo schema circuitale che costruirete sulla vostra Board of Education.

 Costruite il circuito mostrato in Figura 4-5 e Figura 4-6.


 Accertatevi di non aver inserito il servo in verso opposto a quello giusto
(connettore a testa in giù). I fili bianco, rosso e nero dovranno allinearsi come
mostrato in Figura 4-6.
P14
470 
LED
Figura 4-5
Schema di Servo e
Indicatore a LED
Vss
per la Board of
Vdd Education

Bianco
Per la Rev C o
P14 White successive della
Red Board of Education
Rosso Servo
Seriale, o per
Black
Nero qualsiasi Board of
Education USB

Vss
Controllo del Movimento · Pagina 105

15 14 Vdd 13 12
White
Bianco
RossoRed Red
Rosso
NeroBlack Black
Nero
X4 X5
Vdd Vin Vss
X3
+ Figura 4-6
P15
P14 Servo e
P13 Indicatore
P12 LED sulla
P11
P10 Board of
P9 Education
P8
P7
P6
P5
standard servo
P4
P3 www.parallax.com
P2
P1
P0
X2

Fino ad ora, avete utilizzato l’interruttore a 3-posizioni in posizione 1. Adesso, lo


muoverete alla posizione 2 per dare energia ai connettori dei servo.

 Alimentate i connettori dei servo regolando l’interruttore a 3-posizioni come


mostrato in Figura 4-7. Il vostro servo inizierà appena a muoversi quando date
energia.

Figura 4-7
Reset
Energia della Board of Education
connessa alla scheda e ai connettori
Servo
0 1 2

Se vedete istruzioni di questo capitolo col titolo “Dare energia alla vostra scheda”
muovete l’interruttore a 3-posizioni alla posizione-2. Analogamente, se vedete istruzioni
Pagina 106 · Che cosa è un microcontrollore?

di questo capitolo col titolo “Scollegate energia dalla vostra scheda” muovete
l’interruttore a 3 posizioni alla posizione 0.

 Scollegate energia dalla vostra scheda.


 Andate all’Attività #2 a pagina 109.

Circuito Servo per la HomeWork Board BASIC Stamp


Se state collegando il vostro servo ad una scheda HomeWork Board (Rev C o successiva)
BASIC Stamp, vi occorreranno queste parti aggiuntive al vostro kit:

(1) capocorda maschio/maschio a 3-pin (mostrato in Figura 4-8).


(4) cavallotti di filo

Figura 4-8
Parte Extra per circuito Servo della
HomeWork Board BASIC Stamp

Capocorda maschio/maschio a 3-pin

La Figura 4-9 mostra lo schema dei circuiti del servo e dell’indicatore LED sulla scheda
HomeWork Board BASIC Stamp. Le istruzioni che seguono questa figura vi
mostreranno come costruire con sicurezza questo circuito.

 Scollegate la vostra batteria a 9 V dalla vostra HomeWork Board.


 Costruite il circuito dell’indicatore LED e del connettore del servo mostrati dallo
schema in Figura 4-9 e dallo schema di cablaggio in Figura 4-10.
Controllo del Movimento · Pagina 107

P14
470 
LED

Vss
Vdd Figura 4-9
Schema per Servo e
Bianco
Indicatore LED sulla
P14 White HomeWork Board
Red
Rosso
Servo
Black
Nero

Vss

Figura 4-10
Circuiti dell’Indicatore
LED e del connettore del
Servo sulla HomeWork
Board

 Collegate il servo al connettore del servo come mostrato in Figura 4-11.


 Assicuratevi che i colori sul cavo del servo si allineino correttamente con i colori
disegnati nella figura.
Pagina 108 · Che cosa è un microcontrollore?

 Controllate due volte il vostro cablaggio.

ATTENZIONE
Usate soltanto una batteria da 9 V quando il vostro Servo Standard Parallax viene
collegato ad una HomeWork Board BASIC Stamp. Non usate qualsiasi altro tipo di
alimentatore DC o “sostituto di batteria” che si colleghi ad una presa di corrente AC.
Per otttenere migliori risultati, assicuratevi che la vostra batteria sia nuova. Se state
utilizzando una batteria ricaricabile, assicuratevi che sia stata caricata di recente. Dovrebbe
anche avere una capacità di 100 mAh (milliamp per ora) o superiore.

 Ricollegate la vostra batteria da 9 V alla vostra HomeWork Board. Mentre fate


la connessione il servo può girare leggermente.

Bianco
Rosso
Figura 4-11
Nero Servo collegato ad
una HomeWork
Board
Controllo del Movimento · Pagina 109

ATTIVITÀ #2: PROGRAMMA PER LA PROVA DEL CONTROLLO DI UN


SERVO
Un grado è una misura di angolo denotata dal simbolo °. Esempi di misure di angolo in
gradi sono mostrati in Figura 4-12, e comprendono 30°, 45°, 90°, 135° e 180°. Ciascun
grado in una misura di angolo rappresenta 1/360mo di un cerchio, quindi la misura di 90°
è ¼ di un cerchio dato che 90 ÷ 360 = ¼. Analogamente, 180° è ½ di un cerchio dato che
180 ÷ 360 = ½, e potete calcolare frazioni simili per le altre misure in gradi mostrate in
figura.

Figura 4-12
Esempi di
misure di
angolo in gradi

Il Servo Standard Parallax può fare in modo che il suo quadrilatero mantenga posizioni
qualsiasi entro una gamma di 180°, quindi le misure in gradi possono essere utili per
descrivere le posizioni mantenute dal servo. La Figura 4-13 mostra esempi di un servo
con un anello di filo che è stato passato attraverso due dei fori del suo quadrilatero e
quindi annodato a treccia. La direzione che la treccia punta indica l’angolo del
quadrilatero del servo, e la figura mostra gli esempi di 0°, 45°, 90°, 135°, e 180°.

Figura 4-13: Esempi della posizione del quadrilatero del Servo

L’intervallo di movimento del quadrilatero del vostro servo e i limiti meccanici saranno
probabilmente diversi da quanto mostrato qui. Dopo il primo programma esempio, ci sono
istruzioni su come regolare il quadrilatero per andare d’accordo con questa figura.

Il montaggio di fabbrica del quadrilatero sul servo è casuale, per cui le posizioni del
quadrilatero del vostro servo saranno probabilmente diverse da quelle della Figura 4-13.
Infatti, a confronto con la Figura 4-13, il quadrilatero del vostro servo può essere montato
in qualsiasi posto in un intervallo di +/- 45°. Il servo in Figura 4-14 mostra un esempio di
un servo il cui quadrilatero era montato 20° in senso orario da quello in Figura 4-13.
Pagina 110 · Che cosa è un microcontrollore?

Dopo che avete trovato il centro dell’intervallo di movimento del quadrilatero del servo,
potete usarlo come riferimento dei 90° oppure regolare meccanicamente il quadrilatero
del servo in modo che corrisponda alla Figura 4-13, seguendo le istruzioni date più avanti
in questa attività.
Figura 4-14: Esempi di posizione del quadrilatero del Servo prima della regolazione
meccanica

Questo è un esempio di quadrilatero montato sull’alberino di uscita del servo a 20° circa in
senso antiorario rispetto a come è stato impostato il quadrilatero nella Figura 4-13.

Potete trovare il centro dell’intervallo di movimento del servo ruotando gentilmente il


quadrilatero per trovare i suoi limiti meccanici in senso orario e antiorario. La posizione
a metà strada tra questi due limiti è il centro ovvero la posizione a 90°. La posizione
centrale del servo potrebbe cadere in qualsiasi posto nella regione mostrata in Figura
4-15.
Controllo del Movimento · Pagina 111

Il centro dell’intervallo di movimento del quadrilatero


del vostro servo dovrebbe cadere in qualche posto
entro questa regione

Figura 4-15
Intervallo delle
posizioni possibili del
centro

In questi passaggi successivi, girate lentamente il quadrilatero del servo e non


forzatelo! Il servo ha limiti meccanici preimpostati al suo interno per evitare che il
quadrilatero possa ruotare fuori dal suo intervallo di movimento di 180°. Girate
delicatamente il quadrilatero, e riuscirete a sentire quando raggiunge uno dei suoi limiti
meccanici. Non provate a forzarlo oltre questi limiti poiché gli ingranaggi interni al servo si
possono strappare.

 Verificate che l’energia della vostra scheda sia ancora scollegata.


 Ruotate delicatamente il quadrilatero del servo per trovare i limiti meccanici in
senso orario ed antiorario del servo. Il quadrilatero dei servo ruoterà con
pochissima forza di rotazione fin quando raggiungete questi limiti. NON
PROVATE A RUOTARE IL QUADRILATERO OLTRE QUESTI LIMITI;
ruotatelo soltanto abbastanza per trovarli.
 Ruotate il quadrilatero del servo in modo che sia a metà strada tra i due limiti.
Questa è all’incirca la posizione “centrale” del servo.
Pagina 112 · Che cosa è un microcontrollore?

 Con il quadrilatero del servo nella sua posizione centrale, avvolgete un cavallotto
di filo attraverso il quadrilatero e arrotolatelo stretto in modo che punti verso
l’alto entro la regione mostrata in Figura 4-15.

Tenete a mente che la direzione in cui il filo arrotolato sta puntando nella figura è solo un
esempio; la vostra estremità arrotolata punta in un posto qualsiasi nella regione.
Dovunque essa punti quando è nel centro del suo intervallo di movimento dovrebbe
essere molto vicino alla posizione a 90° del servo. Ancora, questa posizione può variare
da un servo all’altro per il modo in cui il quadrilatero viene attaccato al servo.

Programmazione delle Posizioni del Servo


Il grafico in Figura 4-16 è chiamato diagramma di temporizzazione, e mostra esempi di
segnali alto/basso che il BASIC Stamp deve inviare ad un servo per fargli mantenere la
sua posizione di 90°.

Figura 4-16
Diagramma di
temporizzazione di
un segnale del
Servo

Impulsi di 1.5 ms
fanno mantenere al
servo una posizione
“centrale” di 90°.

Il diagramma di temporizzazione mostra segnali alti di durata 1.5 ms, separati da segnali
bassi di durata 20 ms. I ... alla destra del segnale sono un modo per indicare che i
segnali alti da 1.5 ms e i segnali bassi da 20 ms debbono essere ripetuti all’infinito perché
il servo mantenga la posizione. Il simbolo “~” nella scrittura “~20 ms” indica che il
tempo basso può essere approssimato, e può realmente variare di pochi millisecondi
sopra o sotto 20 ms con poco o nessun effetto su dove il servo posiziona il suo
quadrilatero. La ragione di ciò è che la durata di tempo del segnale alto è quello che dice
al servo quale posizione tenere, quindi questa durata deve essere precisa.

C’è un comando speciale detto PULSOUT che dà al vostro programma un controllo preciso
sulla durata di questi brevissimi segnali alti, comunemente detti impulsi. Ecco la sintassi
del comando PULSOUT:
Controllo del Movimento · Pagina 113

PULSOUT Pin, Durata

Con il comando PULSOUT, potete scrivere codice PBASIC per far impostare al BASIC
Stamp la posizione del servo a 90° usando il diagramma di temporizzazione della Figura
4-16 come guida. L’argomento Pin del comando PULSOUT dev’essere un numero che
dice al BASIC Stamp quale pin I/O deve trasmettere l’impulso. L’argomento Durata del
comando PULSOUT è il numero di incrementi temporali in 2-milionesimi-di-secondo che
l’impulso dovrà durare. 2 milionesimi di un secondo è uguale a 2 microsecondi, che si
abbrevia con 2 μs.

Un milionesimo di secondo è detto un microsecondo. La lettera greca  è usata al posto


della parola micro e la lettera s è usata al posto di secondo. Questa scrittura è più comoda
per scrivere e prendere appunti, poiché, invece di scrivere 2 microsecondi, potete scrivere 2
s.
Ricordate: un millesimo di secondo è detto un millisecondo, e si abbrvia ms.
Infatti: 1 ms = 1000 s. In altre parole, potete far entrare mille milionesimi di un secondo in
un millesimo di secondo.

Adesso che sappiamo come usare il comando PULSOUT, CentraServo.bs2 invia


ripetutamente impulsi di controllo per far mantenere al servo la sua posizione di 90°. Il
comando PULSOUT 14, 750 invierà un impulso da 1.5 ms al servo. Ciò avviene perché
l’argomento Durata del comando PULSOUT specifica il numero di unità da 2 μs per cui
deve durare l’impulso. Poiché l’argomento Durata è 750, il comando PULSOUT farà
durare l’impulso per 750 × 2 μs = 1500 μs, che è uguale a 1,5 ms, dato che ci sono 1000
μs in 1 ms. Dopo aver spedito l’impulso alto, il comando PULSOUT lascia che il pin I/O
invii un segnale basso. Quindi, un comando PAUSE 20 dopo il PULSOUT fa inviare al
BASIC Stamp un segnale basso per 20 ms. Con entrambi questi comandi entro un ciclo
DO...LOOP, il segnale alto da 1.5 ms seguito dal segnale basso da 20 ms si ripeterà di
nuovo all’infinito per far mantenere al servo la sua posizione.

Programma esempio: CentraServo.bs2


' Che cos’è un microcontrollore - CentraServo.bs2
' Mantiene il servo nella sua posizione centrale di 90 gradi.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Programma in esecuzione!", CR


Pagina 114 · Che cosa è un microcontrollore?

DO
PULSOUT 14, 750
PAUSE 20
LOOP

Prova della posizione “centrale” a 90° di un servo


La posizione a 90° di un servo è chiamata la sua posizione centrale poiché il punto a 90°
è nel “centro” dell’intervallo di movimento di 180° di un servo. Gli impulsi da 1,5 ms
fanno mantenere al servo il suo quadrilatero in questa posizione centrale, che dovrebbe
essere vicina al punto medio che avete determinato trovando i limiti meccanici del servo.
Per i 90°, potete anche usare qualsiasi posizione centrale il servo mantiene, come vostro
riferimento, oppure rimuovere con un cacciavite e riposizionare il quadrilatero in modo
che i 90° facciano puntare dritto in avanti il cavallotto di filo arrotolato. Le istruzioni per
far questo verranno date nel paragrafo intitolato: Opzionale – Regolazione del
quadrilatero di un servo ai 90° centr. Se usate la posizione centrale come riferimento
senza regolarla, qualsiasi altra posizione che il servo mantiene sarà relativa (riferita) a
quella posizione a 90°. Ad esempio, la posizione a 45° sarebbe 1/8 di un giro in senso
orario a partire da essa, e la posizione a 135° sarebbe 1/8 di un giro in senso antiorario.
Esempi di questo sono stati mostrati nella Figura 4-14 a pagina 110.

Troviamo la posizione centrale effettiva del vostro servo:

 Girate delicatamente il quadrilatero del servo fino ad uno dei suoi limiti
meccanici.
 Ricollegate energia alla vostra scheda. Se avete una Board of Education,
assicuratevi di far scorrere l’interruttore a 3-posizioni completamente a destra
(sulla posizione-2).
 Eseguite CentraServo.bs2.

Non appena il programma è caricato ed eseguito, il quadrilatero del servo dovrebbe


ruotare nella sua posizione centrale e rimanere là. Il servo “mantiene” questa posizione,
poiché i servo standard sono progettati per resistere alle forze esterne che premono contro
di loro. E’ questo il motivo per cui il servo mantiene la sterzata di una automobile RC, il
timone di una barca, o i piani di controllo di un aeroplano in posizione.

 Annotate la posizione centrale del vostro servo.


 Applicate una leggera pressione di rotazione al quadrilatero come avete fatto
mentre ruotavate il servo per trovarne i limiti meccanici. Il servo dovrebbe
resistere e mantenere il suo quadrilatero nella posizione centrale.
Controllo del Movimento · Pagina 115

Se scollegate energia, potete ruotare il servo lontano dalla sua posizione centrale.
Quando ricollegate energia, il programma ripartirà, e il servo muoverà immediatamente il
quadrilatero indietro alla sua posizione centrale e lo manterrà in quella posizione.

 Provate!

Opzionale – Regolazione del quadrilatero di un servo ai 90° centrali


Potete opzionalmente regolare il quadrilatero del vostro servo in modo che faccia puntare
il cavallotto di filo arrotolato dritto in alto quando state eseguendo il programma
CentraServo.bs2, come fa nel lato destro della Figura 4-17. Se fate questa regolazione
meccanica, ciò agevolerà il tracciamento degli angoli del servo poiché ciascun angolo
somiglierà a quelli riportati in Figura 4-13 a pagina 109.

Per questa regolazione opzionale avrete bisogno di un cacciavite Phillips #2.

Alberino
di uscita Figura 4-17
Vite
Cantraggio
Phillips
meccanico del
servo

Potete rimuovere e
riposizionare il
quadrilatero del
servo sull’alberino di
uscita con un
piccolo cacciavite.

Quadrilatero

 Scollegate energia dalla vostra scheda.


 Rimuovete la vite che serra il quadrilatero del servo al suo alberino di uscita, poi
estraete, tirandolo delicatamente, il quadrilatero dal suo supporto per liberarlo.
Le vostre parti dovrebbero apparire come nel lato sinistro della Figura 4-17.
Pagina 116 · Che cosa è un microcontrollore?

 Ricollegate energia alla vostra scheda. Il programma dovrebbe far mantenere al


servo il suo alberino di uscita in posizione centrale.
 Fate scorrere il quadrilatero di nuovo sull’alberino di uscita del servo in modo
che il pezzo di filo arrotolato punti dritto in alto come fa nel lato destro della
Figura 4-17.

Offset dell’allineamento: Potrebbe non essere possibile ottenere un allineamento perfetto


per il modo in cui il quadrilatero si caletta sull’alberino di uscita, ma dovrebbe essere
abbastanza prossimo alla perfezione. Potrete allora regolare il loop di filo per compensare
questo piccolo offset e fare in modo che lo spezzone di filo punti proprio in alto.

 Scollegate energia dalla vostra scheda.


 Stringete nuovamente la vite Phillips.
 Ricollegate energia in modo che il programma faccia mantenere al servo ancora
una volta la sua posizione centrale. Lo spezzone di filo arrotolato dovrebbe ora
puntare dritto verso l’alto (o quasi dritto) indicando così la posizione a 90°.

Il vostro turno – Programmi per far puntare il servo in diverse direzioni


La Figura 4-18 mostra pochi comandi PULSOUT che dicono al servo di mantenere alcune
posizioni principali, come 0°, 45°, 90°, 135°, e 180°. Questi comandi PULSOUT sono
approssimati, e potrete dover regolare leggermente i valori per ottenere posizioni angolari
più precise. Potete modificare l’argomento Durata del comando PULSOUT per mantenere
qualsiasi posizione di quest’intervallo. Per esempio, se volete che il servo mantenga la
posizione 30°, l’argomento Durata del vostro comando PULSOUT dovrebbe essere 417, che
è 2/3 dell’intervallo di argomenti Durata tra 250 (0°) e 500 (45°).

Le durate di impulso in Figura 4-18 porteranno il quadrilatero del servo vicino agli
angoli indicati, ma questi non sono necessariamente esatti. Potete fare esperimenti
con diversi valori di Durata del comando PULSOUT per un posizionamento più
preciso.

 Memorizzate una copia di CentraServo.bs2 col nome ProvaPosizioneServo.bs2


 Cambiate l’argomento Durata del comando PULSOUT nel programma da 750 a
500, ed eseguite il programma modificato per verificare che fa mantenere al
servo la sua posizione a 45°.
 Ripetete questa prova degli argomenti Durata del PULSOUT con 1000 (135°), e
417 (30°).
Controllo del Movimento · Pagina 117

 Provate a predire quale Durata vi occorre nel comando PULSOUT per una
posizione non elencata in Figura 4-18, e fate la prova per assicurarvi che il servo
faccia girare il quadrilatero e mantenga la posizione che desiderate ottenere.
Esempi di posizioni possono essere 60°, 120°, ecc.

Mantenete gli argomenti Durata del PULSOUT del vostro programma nell’intervallo tra
350 e 1150. L’intervallo tra 250 e 1250 è “teorico” ma in pratica il servo potrebbe tentare di
spingersi oltre i suoi limiti meccanici. Ciò può ridurre la vita utile del servo. Se volete
massimizzare l’intervaqllo di movimento del vostro servo, provate accuratamente valori che
siano gradatamente sempre più vicini ai limiti meccanici. Man mano che utilizzate valori di
PULSOUT Durata che fanno posizionare al servo il suo quadrilatero proprio entro i suoi limiti
meccanici, l’usura e il logorio saranno normali piuttosto che eccessivi.

Figura 4-18: Posizioni quadrilatero del Servo, comandi PULSOUT, e durate di impulso in ms
Pagina 118 · Che cosa è un microcontrollore?

Fate i conti
Per ciascun comando PULSOUT in Figura 4-18, c’è un numero corrispondente di
millisecondi di durata di ciascun impulso. Ad esempio, l’impulso inviato da PULSOUT
14, 417 dura 0.834 ms, e l’impulso inviato da PULSOUT 14, 500 dura 1.0 ms. Se avete
un BASIC Stamp 2 e volete convertire il tempo da millisecondi a Durata per il vostro
comando PULSOUT, usate questa equazione:

Durata  number
=numero
D uration m s  500
di msofx 500

Ad esempio, se non conoscete già che l’argomento Durata del PULSOUT per 1.5 ms è 750,
ecco come potete calcolarlo:
Duration  1 .5  500
Durata
 750

La ragione per cui dobbiamo moltiplicare il numero di millisecondi in un impulso per


500, per ottenere un argomento Durata in un PULSOUT, è che Durata è espresso in termini
di unità di 2 μs per un BS2. Quante unità da 2 μs ci sono in 1 ms? Per trovarlo, dividete
semplicemente 1 millesimo per 2 milionesimi.
1 2
11,000  1,000 ,000 2500
——————— ÷ ——————————— = 500
1.000 1.000.000

Se il vostro comando è PULSOUT 14, 500, l’impulso durerà per 500 × 2 μs = 1000 μs =
1.0 ms. (Ricordate, 1000 μs = 1 ms.)

Potete anche prevedere la Durata di un comando PULSOUT sconosciuto con questa


equazione:

DurationDurata
number
numero di ms = ————————
of ms ms ms
500 500

Per esempio, se vedete il comando PULSOUT 14, 850, quanto dura realmente l’impulso
inviato?
Controllo del Movimento · Pagina 119

di msof ms  850 ms
numero number
500
 1 .7 ms

Scrivere il codice per i diagrammi di temporizzazione


La Figura 4-19 mostra un diagramma di temporizzazione del segnale che il BASIC
Stamp può inviare ad un servo in modo che il suo quadrilatero mantenga una posizione di
135°. Dal momento che il diagramma di temporizzazione produce impulsi ripetuti
separati da segnali bassi di 20 ms, il ciclo DO...LOOP del programma CentraServo.bs2
fornisce un buon punto di partenza, e tutto quello che occorre regolare è la durata degli
impulsi alti. Per calcolare l’argomento Durata di un comando PULSOUT per gli impulsi di
2 ms nel diagramma di temporizzazione, potete usare l’equazione Durata del precedente
paragrafo Fate i conti:
Durata = numero di ms x 500
Duration  number of ms  500
 2.0  500
 1000

Quando si sostituisce 1000 all’argomento Durata del comando PULSOUT, il ciclo di


controlloo del servo dovrebbe somigliare a questo:
DO
PULSOUT 14, 1000
PAUSE 20
LOOP

 Provate questo ciclo DO...LOOP in una copia di CentraServo.bs2 e verificate che


posiziona il quadrilatero del servo a circa 135°.
 Ripetete questo esercizio per il diagramma di temporizzazione in Figura 4-20.
Pagina 120 · Che cosa è un microcontrollore?

Figura 4-19
Diagramma di
temporizzazione per
la posizione135°

Impulsi da 2 ms
separati da 20 ms

Figura 4-20
Diagramma di
temporizzazione
per la posizione 45°

Impulsi da 1 ms
separati da 20 ms

ATTIVITÀ #3: CONTROLLO DEL TEMPO DI MANTENIMENTO DI UN


SERVO
L’animazione elettronica usa l’elettronica per animare propulsori ed effetti speciali, e in
questo settore i servo sono uno strumento molto comune. La Figura 4-21 mostra un
esempio di progetto di mano robotica animata elettronicamente, con servo che
controllano ciascun dito. Il programma PBASIC che controlla i gesti della mano deve
fare in modo che i servo mantengano le loro posizioni determinate quantità di tempo per
ciascun gesto. Nell’attività precedente, i nostri programmi fanno in modo che il servo
mantenga alcune posizioni indefinitamente. Questa attività introduce il modo per
scrivere codice che fa mantenere al servo alcune posizioni per determinate quantità di
tempo.
Controllo del Movimento · Pagina 121

Figura 4-21
Mano con animazione elettronica

Ci sono cinque servo nella parte in


basso a destra della figura che
spingono parti di raggi di ruota di
bicicletta avvitati con filettatura entro
le dita e il pollice per farle flettere.
Questo fornisce al BASIC Stamp il
controllo su ciascun dito.

Cicli FOR...NEXT per controllare il tempo per cui un servo mantiene una
posizione
Se scrivete del codice per far lampeggiare un LED una volta al secondo, potete annidare
il codice in un ciclo FOR...NEXT che si ripete tre volte per far lampeggiare la luce per tre
secondi. Se il vostro LED lampeggia cinque volte per secondo, dovete aver fatto sì che il
ciclo FOR...NEXT si ripeta per quindici volte, per ottenere che il LED lampeggi per tre
secondi. Visto che i comandi PULSOUT e PAUSE che controllano il vostro servo sono
responsabili dell’invio di segnali alto/basso, questi comandi fanno anche lampeggiare il
LED. I segnali che abbiamo inviato al servo nell’attività precedente facevano accendere
debolmente il LED, forse con qualche lampeggio apparente, poiché i segnali on/off sono
così veloci, e le durate dei segnali alti così brevi. Rallentiamo i segnali portandoli a
1/10mo della velocità per un lampeggio a luce visibile dell’indicatore LED.

Programma esempio: RallentaSegnaliServoPerLed.bs2


Confrontato con il segnale centra servo, questo programma esempio aumenta di un
fattore dieci le durate di PULSOUT e PAUSE, cosicché li possiamo vedere come luce
lampeggiante dell’indicatore LED. Il ciclo FOR...NEXT del programma si ripete quasi 5
volte al secondo, cosicché 15 ripetizioni producono il risultato di far lampeggiare la luce
per tre secondi.
Pagina 122 · Che cosa è un microcontrollore?

 Scollegate energia al vostro servo:


o Se avete una scheda Board of Education, ponete l’interruttore a 3
posizioni in posizione 1 per scollegare energia al servo. La posizione 1
fornirà ancora energia al resto del sistema.
o Se avete una scheda BASIC Stamp Homework Board, staccate
temporaneamente l’estremità del filo connesso a Vdd e lasciatelo
volante. Questo toglierà energia al vostro servo.
 Digitate ed eseguite RallentaSegnaliServoPerLed.bs2.
 Verificate che il LED lampeggi rapidamente per circa tre secondi.
 Cambiate il valore finale (EndValue) del ciclo FOR...NEXT da 15 a 30 e
rieseguite il programma. Poiché il ciclo si era ripetuto due volte per ogni
ripetizione, la luce dovrebbe lampeggiare per due volte di più – sei secondi.
 Ricollegate energia al vostro servo:
o Se avete una scheda Board of Education, ponete l’interruttore a 3-
posizioni di nuovo in posizione-2 per ricollegare energia al servo.
o Se avete una scheda BASIC Stamp Homework Board, reinserite il
terminale del filo che avete scollegato nello zoccolo Vdd.

' Che cos’è un microcontrollore – RallentaSegnaliServoPerLed.bs2


' Rallenta i segnali del servo a 1/10 della velocità che hanno in modo
' che possiamo vedere l’indicatore LED lampeggiare acceso/spento.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Programma in esecuzione!", CR

contatore VAR Word

FOR contatore = 1 to 15
PULSOUT 14, 7500
PAUSE 200
NEXT

Programma esempio: TrePosizioniServo.bs2


Se cambiate PULSOUT 14, 7500 in PULSOUT 14, 750 e PAUSE 200 in PAUSE 20,
avrete un ciclo FOR...NEXT che invia brevemente il segnale per la posizione centrale al
servo. Poiché i segnali ora durano 1/10mo della loro durata nel programma
RallentaSegnaliServoPerLed.bs2, l’intero ciclo FOR...NEXT prenderà 1/10mo del tempo
per essere eseguito. Se l’obiettivo è far mantenere al servo una particolare posizione per
Controllo del Movimento · Pagina 123

tre secondi, rilasciate semplicemente dieci volte gli impulsi di prima aumentando
l’argomento ValoreFinale del ciclo FOR...NEXT da 15 a 150.
FOR contatore = 1 to 150 ' Centrale per circa 3 sec.
PULSOUT 14, 750
PAUSE 20
LOOP

Il programma esempio TrePosizioniServo.bs2 fa mantenere al servo le tre posizioni


diverse mostrate in Figura 4-22, ciascuna per circa 3 secondi.

Figura 4-22
TrePosizioniServo.bs2

Il programma fa
mantenere al servo
ciascuna posizione
per circa tre secondi.

 Digitate ed eseguite TrePosizioniServo.bs2.


 Verificate che il servo mantiene ciascuna posizione nella sequenza di Figura
4-22 per circa tre secondi.
L’ultima posizione che il servo manterrà per 3 secondi è 135° e poi il programma si
arresta. Il quadrilatero del servo rimarrà nella stessa posizione anche quando il BASIC
Stamp ha finito di inviare impulsi di controllo. La differenza è che durante i tre secondi
nei quali il BASIC Stamp mantiene la posizine di 135°, il servo resiste a qualsiasi forza
che tenta di allontanare il quadrilatero da quella posizione. Dopo che sono passati i 3
secondi, il quadrilatero del servo può essere ruotato a mano.

Un modo in cui potete dire se il servo sta ricevendo segnali di controllo è osservando
l’indicatore LED collegato a P14. Se l’indicatore LED si illumina, significa che il servo
sta ricevendo segnali di controllo e sta mantenendo la sua posizione. Quando il segnale si
ferma vedrete che l’indicatore LED non è più illuminato.

 Rieseguite il programma (o premete e rilasciate solo il pulsante di Reset della


vostra scheda).
 Non appena il servo si porta in posizione 135°, date un’occhiata all’ìindicatore di
segnale a LED mentre applicate una leggera forza di torsione al quadrilatero.
Pagina 124 · Che cosa è un microcontrollore?

Dovreste riuscire a sentire il servo che resiste, mentre il LED si illumina debolmente
indicando che il servo sta ricevendo ancora un segnale di controllo. Non appena il LED
si spegne indicando che il segnale di controllo si è fermato, il servo smetterà di mantenere
la sua posizione, e riuscirete a ruotare il quadrilatero.

 Quando il segnale dei 135° si arresta, verificate che il LED indica che il segnale
si è arrestato e che il servo vi permette di ruotare il quadrilatero allontanandolo
dalla posizione a 135°.

' Che cos’è un microcontrollore – TrePosizioniServo.bs2


' Il servo mantiene le posizioni di 45, 90, e 135 gradi ciascuna
' per circa 3 secondi.

' {$STAMP BS2}


' {$PBASIC 2.5}

contatore VAR Word

PAUSE 1000

DEBUG "Posizione = 45 gradi...", CR

FOR contatore = 1 TO 150 ' 45 gradi per circa 3 sec.


PULSOUT 14, 500
PAUSE 20
NEXT

DEBUG "Posizione = 90 gradi...", CR

FOR contatore = 1 TO 150 ' 90 gradi per circa 3 sec.


PULSOUT 14, 750
PAUSE 20
NEXT

DEBUG "Posizione = 135 gradi...", CR

FOR contatore = 1 TO 150 ' 135 gradi per circa 3 sec.


PULSOUT 14, 1000
PAUSE 20
NEXT

DEBUG "Tutto fatto.", CR, CR

END
Controllo del Movimento · Pagina 125

Il vostro turno – Regolare posizione vs. regolare tempo di mantenimento


TrePosizioniServo.bs2 fa l’ipotesi che eseguire 50 impulsi del servo in un ciclo
FOR...NEXT impieghi circa 1 secondo. Potete usare questa caratteristica anche per
regolare l’argomento ValoreFinale del ciclo FOR...NEXT. Ad esempio, se volete che il
servo mantenga soltanto la sua posizione all’incirca per due secondi, cambiate
l’argomento ValoreFinale da 150 a 100. Per cinque secondi, cambiatelo da 150 a 250, e
così via…

 Memorizzate una copia di TrePosizioniServo.bs2.


 Modificate l’argomento ValoreFinale di ciascun ciclo FOR...NEXT e sperimentate
con valori diversi per avere diversi tempi di mantenimento.
 Opzionale: Personalizzate il mantenimento delle posizioni variando l’argomento
Durata di ciascun comando PULSOUT.

Tempo di ripetizione del ciclo FOR...NEXT – In realtà è 1/44mo di secondo, non


1/50mo
1/50mo di secondo è una approssimazione grezza della ripetizione del ciclo. 1/44mo di
secondo è un’approssimazione molto più precisa. Considerate quanto tempo in più
ciascun elemento del ciclo FOR...NEXT impiega per la sua esecuzione. Il comando
PULSOUT 14, 750 è al centro dell’intervallo delle possibili durate di impulso, cosicché
può essere il punto di riferimento per la durata media dell’impulso. Questo comando
invia un impulso che dura 750 × 2 μs = 1500 μs = 1,5 ms. Il comando PAUSE 20 fa
ritardare il programma di 20 ms. Un ciclo FOR...NEXT con una coppia di comandi
PULSOUT e PAUSE impiega circa 1,3 ms per elaborare tutti i numeri e i comandi. Sebbene
ciò significhi che il segnale basso tra gli impulsi dura in realtà 21,3 ms invece di 20 ms,
questo fatto non influenza la prestazione del servo. I tempi per i quali il segnale è basso
possono durare pochi ms di meno, sono invece le durate degli impulsi alti che devono
essere precise, e il comando PULSOUT è molto preciso.

Quindi, il tempo totale che impiega il ciclo FOR...NEXT per ripetersi è 1,5 ms + 20 ms +
1,3 ms = 22,8 ms, che significa 22,8 millesimi di un secondo. Quindi, quanti 22,8-
millesimi-di-secondo entrano in 1 secondo? Dividiamo 1 per 0,0228 e troviamo:

secondo ÷ 0.0228
11 second 0,00228seconds/re petition ≈ 43,86
secondi/ripetizione 43.86ripetizioni
repetition s
≈ 44 ripetizioni
 44 repetition s
Pagina 126 · Che cosa è un microcontrollore?

È per questa ragione che il ciclo si ripete ad una velocità di circa 44 ripetizioni al
secondo. Il numero di ripetizioni in 1 secondo è chiamato hertz, abbreviato in Hz.
Possiamo, quindi, dire che il segnale del servo si ripete o cicla a circa 44 Hz.

Cicli ed hertz (Hz): Quando un segnale si ripete un certo numero di volte, ciascuna
ripetizione è chiamata un ciclo. Il numero di cicli in un secondo è misurato in hertz. Hertz si
abbrevia con Hz.

Un maggiore o minor valore di Durata nel comando PULSOUT fa in modo che il ciclo
FOR...NEXT impieghi un po’ più o un po’ meno tempo a ripetersi. Una Durata del
comando PULSOUT di 750 è proprio a metà dell’intervallo delle durate degli impulsi di
controllo del servo mostrati prima in Figura 4-18 a pagina 117. Quindi, potete usare 44
Hz come punto di riferimento del numero di impulsi al servo in un secondo per il vostro
codice. Se vi occorre essere più precisi, ripetete esattamente la matematica per il
comando PULSOUT che state usando. Per esempio, se il ciclo ha un comando PULSOUT
con una Durata di 1000 invece di 750, prende 2 ms per l’impulso invece di 1,5 ms. Il
ciclo ha ancora una pausa di 20 ms e 1,3 ms di tempo di elaborazione. Quindi questo
fatto aggiunge 2 + 20 + 1,3 ms = 23,3 ms. Dividete 1 secondo per questo valore per
trovare la velocità del ciclo FOR...NEXT, e otterrete 1 ÷ 0,0233 ≈ 42,9 ≈ 43 Hz.

Sommario del ciclo FOR...NEXT di controllo del servo


La Figura 4-23 mostra il ruolo che ciascun numero ha in un ciclo FOR...NEXT per il
controllo del servo. Il valore ValoreFinale del ciclo FOR...NEXT determina il numero di
44mi di secondo che il servo impiega a mantenere una posizione. L’argomento Durata del
comando PULSOUT dice al servo quale posizione deve mantenere. Il valore 750 invia un
impulso di 1,5 ms, che impone al servo di mantenere una posizione di 90°, secondo la
Figura 4-18 a pagina 117. L’argomento Pin del comando PULSOUT sceglie il pin I/O per
inviare segnali di controllo al servo. Quindi, 14 fa sì che il comando PULSOUT invii il suo
breve segnale alto (impulso) al servo collegato al pin I/O P14. Quando l’impulso
termina, lascia che il pin I/O invii un segnale basso. Poi, il comando PAUSE 20 assicura
che il segnale basso duri per circa 20 ms prima dell’impulso successivo.
Controllo del Movimento · Pagina 127

Numero di 44.mi
Number diof a
of 44ths
Pin I/O secondo per mantenere
second to hold the
Servo
del I/O pin
servo la posizione
position

FOR contatore = 1 TO 132 Figura 4-23


PULSOUT 14, 750
PAUSE 20 Ciclo For…Next di
NEXT Position to hold controllo del servo
Posizione da mantenere

Required 20 ms
20 ms richiesti tra
between each pulse
ciascuna coppia di
impulsi

In media, un ciclo FOR...NEXT che invia un solo comando PULSOUT ad un servo, seguito
da un comando PAUSE 20, si ripete circa 44 volte al secondo. Poiché questo ciclo si
ripete 132 volte, fa in modo che il servo mantenga la posizione 135° per circa 3 secondi.
Ciò avviene perché:

132132
ripetizioni  44 repetition s/second
÷ 44 sripetizioni/secondo
repetition  3 seconds
= 3 secondi

Se la vostra applicazione o progetto deve far si che il BASIC Stamp invii un segnale al
servo per un certo numero di secondi, moltiplicate il numero di secondi per 44, e usate il
risultato come argomento ValoreFinale del vostro ciclo FOR...NEXT. Per esempio, se il
vostro segnale deve durare cinque secondi:

5 secondi x 44 ripetizioni/secondo
5 seconds = 220 ripetizioni
44 repetitions/second 220 repetition s

ATTIVITÀ #4: CONTROLLO DI POSIZIONE CON IL VOSTRO COMPUTER


L’automazione industriale spesso implica una comunicazione di microcontrollori con
computer più grandi. I microcontrollori leggono i sensori e trasmettono quei dati al
computer principale. Il computer principale interpreta e analizza i dati del sensore, e
quindi legge le informazioni di posizione restituendole al microcontrollore. Il
microcontrollore potrebbe allora aggiornare la velocità della cinghia di un convogliatore,
Pagina 128 · Che cosa è un microcontrollore?

o la posizione di una ordinatrice, o alcuni altri compiti meccanici con controllo


motorizzato.

Potete usare il terminale di Debug per inviare messaggi dal vostro computer al BASIC
Stamp come mostrato in Figura 4-24. Il BASIC Stamp dave essere programmato per
ascoltare i messaggi che inviate tramite il terminale di Debug, e deve anche memorizzare
i dati che inviate in una o più variabili.

Tempo esecuzione servo: Figura 4-24


- 44 impulsi in 1 secondo Invio di messaggi al
Posizione servo: BASIC Stamp
350 <= Durata PULSOUT <= 1150
Cliccate il campo vuoto
Digitate il tempo di esecuzione
come numero di impulsi: 132 sopra la finestrella di
Digitate la posizione come visualizzazione del
Durata PULSOUT: 1000 messaggio e digitate il
Il servo è in esecuzione… vostro messaggio. Una
FATTO copia del messaggio che
avete introdotto appare nella
Digitate il tempo di esecuzione finestrella inferiore. Questa
come numero di impulsi: 264
copia è detta echo.

In questa attività, programmerete il BASIC Stamp per ricevere due valori dal terminale di
Debug, e poi usare questi valori per controllare il servo:

1. Il numero di impulsi da inviare al servo


2. Il valore Durata usato dal comando PULSOUT

Programmerete anche il BASIC Stamp perché usi questi valori per controllare il servo.

Parti e circuito
Gli stessi della attività #2.
Controllo del Movimento · Pagina 129

Programmazione del BASIC Stamp per ricevere messaggi da Debug


La programmazione del BASIC Stamp per inviare messaggi al terminale di Debug si
effettua tramite il comando DEBUG. La programmazione del BASIC Stamp per ricevere
messaggi dal terminale di Debug si fa tramite il comando DEBUGIN. Quando usate il
DEBUGIN, dovretre dichiarare anche una o più variabili per far memorizzare al BASIC
Stamp le informazioni che riceve.

Ecco un esempio di variabile che potete dichiarare perché il BASIC Stamp memorizzi un
valore:
impulsi VAR Word

Più avanti nel programma, potete usare questa variabile per memorizzare un numero
ricevuto dal comando DEBUGIN:
DEBUGIN DEC impulsi

Quando il BASIC Stamp riceve un valore numerico dal terminale di Debug, lo


memorizzerà nella variabile impulsi. Il formattatore DEC dice al comando DEBUGIN che
i caratteri che state inviando saranno cifre che formano un numero decimale. Non appena
premete il tasto Enter, il BASIC Stamp memorizzerà le cifre che ha ricevuto nella
variabile impulsi come numero decimale, quindi andrà avanti.

Sebbene non sia incluso nel programma esempio, potete aggiungere una riga per
verificare che il messaggio è stato elaborato dal BASIC Stamp.
DEBUG CR, "Avete inviato il valore: ", DEC impulsi

Programma esempio: ControlloServoConDebug.bs2


La Figura 4-25 mostra dove sono la finestrella di Trasmissione e quella di Ricezione nel
terminale di Debug. La finestrella di Ricezione è quella che abbiamo usato fin qui per
visualizzare messaggi che il terminale di Debug “riceve” dal BASIC Stamp. La
finestrella di Trasmissione vi consente di digitare caratteri e numeri e “trasmetterli” al
BASIC Stamp.
Pagina 130 · Che cosa è un microcontrollore?

Figura 4-25
Finestrelle del terminale di Debug

← Finestrella di Trasmissione

Digitate il tempo di esecuzione


come numero di impulsi: 264 ← Finestrella di Ricezione

In Figura 4-25, il numero 264 è digitato nella finestrella di Trasmissione del terminale di
Debug. Sotto, nella finestrella di Ricezione, è mostrata una copia del valore 264 dopo il
messaggio “Digitate il tempo di esecuzione …”. Questa copia è detta eco, e visualizza
nella finestrella di ricezione soltanto se la casella di spunta Echo Off del terminale di
Debug è lasciata non marcata.

Eco è quando inviate un messaggio tramite la finestrella di Trasmissione del terminale di


Debug, e una copia di quel messaggio appare nella finestrella di Ricezione del terminale di
Debug. Nell’angolo inferiore destro del terminale di Debug c’è una casella di spunta Echo
Off, e potete cliccarvi sopra per alterarne il suo contrassegno. Per questa attività, vogliamo
visualizzare gli echi nella finestrella di ricezione, quindi la casella di spunta Echo Off deve
essere lasciata non marcata.

 Digitare ControlloServoConDebug.bs2 nell’Editor del BASIC Stamp ed


eseguitelo.
 Se la finestrella di trasmissione è troppo piccola, ridimensionatela usando il
mouse: cliccate trattenete e trascinate il separatore verso il basso. Il separatore è
mostrato proprio sopra il messaggio di testo “Digitate il tempo di esecuzione” in
Figura 4-25.
 Assicuratevi che la casella di spunta Echo Off nell’angolo in basso a destra sia
non marcata.
 Cliccate la parte superiore della finestrella di Trasmissione per porvi il vostro
cursore e digitare i messaggi.
Controllo del Movimento · Pagina 131

 Quando il terminale di Debug vi chiederà di “Digitare il tempo di esecuzione


come numero di impulsi:”, digitate il numero 132, poi premete il tasto Enter sulla
tastiera del vostro computer. Per la tastiera italiana Enter è Invio.
 Quando il terminale di Debug vi chiederà di “Digitare la posizione come durata
PULSOUT:”, digitate il numero 1000, quindi premete Enter.

La Durata di PULSOUT deve essere un numero tra 350 e 1150. Se inserite numeri fuori
da quell’intervallo, il programma li cambierà con il numero più vicino entro quell’intervallo, o
350 o 1150. Se il programma non avesse questa caratteristica di sicurezza, potrebbero
venir inseriti numeri che tenterebbero di far ruotare il servo ad una posizione oltre i suoi
limiti meccanici. Sebbene questo non danneggerebbe il servo, potrebbe accorciare la vita
del dispositivo.

Il BASIC Stamp visualizzerà il messaggio “Servo in esecuzione …” mentre sta inviando


impulsi al servo. Quando ha completato l’invio di impulsi al servo, visualizzerà il
messaggio “FATTO” per un secondo. Quindi, vi chiederà di digitare di nuovo il numero
di impulsi. Divertitevi con questo programma, ma accertatevi di seguire la direttiva nel
riquadro Avvertenze sul fatto che il valore del vostro PULSOUT sia tra 350 e 1150.

 Sperimentate digitando valori diversi tra 350 e 1150 per la Durata di PULSOUT e
valori tra 1 e 65534 per il numero di impulsi.
Ci vogliono circa 44 impulsi per far mantenere al servo una posizione per 1 secondo.
Quindi, per far mantenere al servo una posizione per circa 5 minuti, potete digitare 13200
alla domanda “numero di impulsi”. Cioè 44 impulsi/secondo × 60 secondi/minuto × 5 minuti
= 13.200 impulsi.
Perché usare valori da 1 a 64434? Se volete realmente saperlo, leggete completamente il
capitolo su FOR...NEXT nel Manuale BASIC Stamp per imparare cosa sia l’errore di
rollover a 16-bit, o errore di intervallo di variabile Può causare un problema durante la
costruzione dei vostri programmi!

' Che cos’è un microcontrollore - ControlloServoConDebug.bs2


' Invia messaggi al BASIC Stamp per controllare un servo usando
' il terminale di Debug.

' {$STAMP BS2}


' {$PBASIC 2.5}

contatore VAR Word


impulsi VAR Word
durata VAR Word

PAUSE 1000
DEBUG CLS, "Tempo esecuzione Servo:", CR,
Pagina 132 · Che cosa è un microcontrollore?

" ~44 impulsi in 1 secondo", CR,


" Posizione Servo:", CR,
" 350 <= Durata PULSOUT <= 1150", CR, CR

DO

DEBUG "Digitate il tempo di esecuzione ", CR,


"come numero di impulsi: "
DEBUGIN DEC impulsi

DEBUG "Digitate la posizione come ", CR,


"Durata PULSOUT: "
DEBUGIN DEC durata

durata = durata MIN 350 MAX 1150

DEBUG "Servo in esecuzione...", CR

FOR contatore = 1 TO impulsi


PULSOUT 14, durata
PAUSE 20
NEXT

DEBUG "FATTO", CR, CR


PAUSE 1000

LOOP

Come lavora ControlloServoConDebug.bs2 Works


In questo programma sono state dichiarate tre variabili:
contatore Var WORD
impulsi Var WORD
durata Var WORD

La variabile contatore è dichiarata per usarla in un ciclo FOR...NEXT. (Vedi pagina


46 per i dettagli.) Le variabili impulsi e durata sono usate in due modi diversi. Sono
usate sia per ricevere che per conservare valori inviati dal terminale di Debug. La
variabile impulsi è usata anche per impostare il numero di ripetizioni nel ciclo
FOR...NEXT che invia impulsi al servo, e la variabile durata è usata per impostare la
durata di ciascun impulso nel comando PULSOUT.

Un comando DEBUG fornisce un promemoria per ricordare che ci sono circa 44 impulsi in
1 secondo nel ciclo FOR...NEXT, e che l’argomento Durata del PULSOUT che controlla la
posizione del servo può essere un valore tra 350 e 1150.
Controllo del Movimento · Pagina 133

DEBUG CLS, "Tempo esecuzione servo:", CR,


" ~44 impulsi in 1 secondo", CR,
" Positione Servo:", CR,
" 350 <= Durata PULSOUT <= 1150", CR, CR

Il resto del programma è annidato entro un DO...LOOP senza argomento WHILE o UNTIL
Condizione, per cui i comandi sono eseguiti ripetutamente all’infinito.

DO
' Resto del programma non mostrato.
LOOP

Il comando DEBUG è usato per inviare a voi (che siete gli “utenti” del software) un
messaggio per farvi inserire il numero di impulsi. Poi, il comando DEBUGIN aspetta
l’inserimento delle cifre del numero e la pressione del tasto Enter sulla vostra tastiera. Le
cifre che inserite sono convertite in un valore memorizzato nella variabile impulsi.
Questo processo è ripetuto con una seconda coppia di comandi DEBUG e DEBUGIN che
caricano un altro valore da inserire anche nella variabile durata.
DEBUG "Digitate tempo di esecuzione ", CR,
"come numero di impulsi: "
DEBUGIN DEC impulsi

DEBUG "Digitate la posizione come ", CR,


"Durata PULSOUT: "
DEBUGIN DEC durata

Dopo aver inserito il secondo valore, è utile visualizzare un messaggio mentre il servo è
in esecuzione perché non tentiate di inserire un secondo valore durante quel tempo:
DEBUG "Servo in esecuzione...", CR

Mentre il servo è in esecuzione, potete provare a muovere gentilmente il quadrilatero del


servo allontanandolo dalla posizione che sta mantenendo. Il servo resiste alla leggera
pressione applicata al suo quadrilatero.

FOR Contatore = ValoreIniz TO Valore Finale {STEP ValorePasso}...NEXT


Questa è la sintassi del ciclo FOR...NEXT dal Manuale BASIC Stamp. Essa mostra che vi
occorrono un Contatore, un ValoreIniz e un ValoreFinale per controllare quante volte il
ciclo ripete se stesso. C’è anche un opzionale ValorePasso se volete aggiungere un
numero diverso da 1 al valore di Contatore ciascuna volta che il ciclo è ripetuto.
Pagina 134 · Che cosa è un microcontrollore?

Come negli esempi precedenti, la variabile contatore è stata usata per tener conto delle
ripetizioni del ciclo FOR...NEXT. A parte la variabile contatore, questo ciclo
FOR...NEXT introduce alcune nuove tecniche che utilizzano le variabili per definire come
si comporta il programma (e il servo). Fino a questo esempio, i cicli FOR...NEXT hanno
usato, come argomento ValoreFinale (EndValue) del ciclo, costanti come 10 o 132. In
questo ciclo FOR...NEXT, per controllare l’argomento EndValue del ciclo FOR...NEXT è
usato il valore della variabile impulsi. Quindi impostate il valore di impulsi
introducendo un numero nel terminale di Debug, e questo controlla il numero delle
ripetizioni fatte dal ciclo FOR...NEXT, che a sua volta controlla il tempo per il quale il
servo mantiene una determinata posizione.
FOR contatore = 1 to impulsi
PULSOUT 14, durata
PAUSE 20
NEXT

Inoltre, negli esempi precedenti, come argomento Durata del comando PULSOUT erano
stati usati valori costanti come 500, 750, e 1000. In questo ciclo, una variabile chiamata
durata, che impostate introducendo i valori nella finestrella di Trasmissione del
terminale di Debug, definisce ora la durata di impulso del comando PULSOUT, che a sua
volta controlla la posizione mantenuta dal servo.

Prendete del tempo per comprendere il ciclo FOR…NEXT nel programma


ControlloServoConDebug.bs2.
E’ uno dei primi esempi delle meravigliose cose che potrete fare con le variabili negli
argomenti e nei cicli dei comandi PBASIC, ed inoltre evidenzia quanto possa essere utile un
modulo microcontrollore programmabile come il BASIC Stamp.

Il vostro turno – Impostare i limiti nel software


Immaginate che questo sistema computerizzato di controllo del servo sia stato sviluppato
per il controllo a distanza. Forse un agente della sicurezza lo utilizzerà per aprire una
porta di imbarco che sta controllando su una telecamera remota. Forse uno studente di un
college lo userà per controllare le porte di un labirinto nel quale un topo naviga in cerca
di cibo. Forse un artigliere militare lo userà per puntare il cannone su un determinato
bersaglio. Se state progettando un prodotto per farlo usare a qualcun altro, l’ultima cosa
che vorrete è dare all’utente (agente della sicurezza, studente di college, artigliere
militare) la capacità di inserire un numero sbagliato che potrebbe danneggiare
l’apparecchiatura.
Controllo del Movimento · Pagina 135

Mentre eseguite ControlloServoConDebug.bs2, è possible che facciate un errore


digitando il valore di Durata nel terminale di Debug. Diciamo che avete digitato per caso
100 invece di 1000 e avete premuto Enter. Il valore 100 potrebbe far in modo che il servo
tenti di girare ad una posizione che è oltre i suoi limiti meccanici. Sebbene ciò non
produce un danno istantaneo al servo, è certamente non buono per il servo o per la sua
vita utile. Quindi il programma ha una riga che previene qualsiasi danno prodotto da
questo errore:
durata = durata MIN 350 MAX 1150

Questo comando correggerà il valore 100 introdotto per caso cambiando il valore della
variabile durata a 350. Analogamente, se avete digitato per caso 10000, il programma
ridurrebbe la variabile durata a 1150. Potreste fare quaolcosa di equivalente con un paio
di istruzioni IF...THEN:
IF durata < 350 THEN durata = 350
IF durata > 1150 THEN durata = 1150

Ci sono alcune machine dove perfino la correzione automatica al valore più vicino
potrebbe avere risultati non desiderabili. Ad esempio, se siete su un computer che sta
controllando una macchina che taglia alcuni tipi di materiale molto costoso, potreste non
volere necessariamente che la macchina assuma proprio 350 quando avete tentato di
digitare 1000, ma per caso avete digitato 100. Se essa taglia il materiale proprio alla
posizione impostata al valore 350, ciò potrebbe rivelarsi un errore molto costoso. Quindi,
un altro approccio che il programma può assumere è di dire semplicemente che il vostro
valore è fuori dall’intervallo, e di riprovare a digitarlo. Ecco un esempio di come potete
modificare il codice per far questo:

 Memorizzate il programma esempio ControllaServoConDebug.bs2 sotto il


nuovo nome ControllaServoConDebugVostroTurno.bs2.
 Sostituite queste due istruzioni:

DEBUG "Digita posizione come ", CR,


" Durata PULSOUT: "
DEBUGIN DEC durata

…con questo blocco di codice:


DO
DEBUG "Digita posizione come ", CR,
Pagina 136 · Che cosa è un microcontrollore?

" Durata PULSOUT: "


DEBUGIN DEC durata
IF durata < 350 THEN
DEBUG "Valore di durata dev’essere almeno 350", CR
PAUSE 1000
ENDIF
IF durata > 1150 THEN
DEBUG "Valore di durata non può superare 1150", CR
PAUSE 1000
ENDIF
LOOP UNTIL durata >= 350 AND durata <= 1150

 Memorizzate il programma.
 Eseguitelo e verificate che si ripete fin quando non digitate un valore
nell’intervallo corretto da 350 a 1150.

ATTIVITÀ #5: CONVERSIONE DA POSIZIONE A MOVIMENTO


In questra attività, programmerete il servo perché cambi posizione a diverse velocità.
Cambiando la posizione a velocità diverse, farete in modo che il quadrilatero del vostro
servo ruoti a diverse velocità. Potete usare questa tecnica per fare in modo che il servo
controlli il movimento invece che la posizione.

Programmazione di velocità di cambio della posizione


Potrete usare un ciclo FOR...NEXT per far variare al servo il movimento entro un
intervallo, come questo:
FOR contatore = 500 TO 1000
PULSOUT 14, contatore
PAUSE 20
NEXT

Il ciclo FOR...NEXT fa in modo che il quadrilatero del servo parta a circa 45° e poi ruoti
lentamente in senso antiorario fino a raggiungere 135°. Poiché contatore è l’indice del
ciclo FOR...NEXT, questo aumenta di uno per ogni ripetizione. Il valore di contatore è
usato anche nell’argomento Durata del comando PULSOUT, il ché vuol dire che la durata
di ciascun impulso diventa un po’ più grande ad ogni ripetizione del ciclo. Poiché il
valore della variabile contatore cambia, lo stesso avviene per la posizione del
quadrilatero del servo.
Controllo del Movimento · Pagina 137

I cicli FOR...NEXT hanno un argomento opzionale STEP ValorePasso. L’argomento


ValorePasso può essere utilizzato per far ruotare il servo più rapidamente. Per esempio,
potete usare l’argomento ValorePasso per aggiungere 8 a contatore ad ogni ripetizione
del ciclo (invece di 1) modificando l’istruzione FOR in questo modo:
FOR contatore = 500 TO 1000 STEP 8

Potete anche far ruotare il servo nella direzione opposta contando all’indietro invece di
contare in avanti. In PBASIC, i cicli FOR...NEXT conteranno all’indietro (in senso
decrescente) se l’argomento ValoreInizio è maggiore dell’argomento ValoreFine. Ecco un
esempio di come far contare un ciclo FOR...NEXT da 1000 fino a 500:
FOR contatore = 1000 TO 500

Potete combinare il conteggio all’indietro con un argomento ValorePasso per far ruotare
il servo più rapidamente in senso antiorario in questo modo:
FOR contatore = 1000 TO 500 STEP 20

Il trucco per far ruotare il servo a diverse velocità è utilizzare questi cicli FOR...NEXT per
contare in avanti e indietro con differenti misure del passo. Il programma esempio che
segue usa queste tecniche per far ruotare il quadrilatero del servo all’indietro e in avanti
con diverse velocità.

Programma Esempio: VelocitàServo.bs2


 Digitate ed eseguite VelocitàServo.bs2.
 Mentre il programma è in esecuzione, osservate come cambia il valore di
contatore nel terminale di Debug.
 Inoltre, osservate come il servo si comporta differentemente nei due diversi cicli
FOR...NEXT. Sia la direzione che la velocità del quadrilatero del servo
cambiano.
Pagina 138 · Che cosa è un microcontrollore?

' Che cos’è un microcontrollore - VelocitàServo.bs2


' Ruota il servo lentamente in senso antiorario, poi rapidamente in senso
' orario.

' {$STAMP BS2}


' {$PBASIC 2.5}

contatore VAR Word

PAUSE 1000

DO
DEBUG "Larghezza impulso aumentata di 8", CR

FOR contatore = 500 TO 1000 STEP 8


PULSOUT 14, contatore
PAUSE 7
DEBUG DEC5 contatore, CR, CRSRUP
NEXT

DEBUG CR, "Larghezza impulso diminuita di 20", CR

FOR contatore = 1000 TO 500 STEP 20


PULSOUT 14, contatore
PAUSE 7
DEBUG DEC5 contatore, CR, CRSRUP
NEXT

DEBUG CR, "Ripeti", CR


LOOP

Come lavora VelocitàServo.bs2


Il primo ciclo FOR...NEXT conta in avanti da 500 a 1000 in passi di 8. Poiché la
variabile contatore è usata come argomento Durata del comando PULSOUT, la posizione
del quadrilatero del servo ruota in senso antiorario in passi che sono otto volte maggiori
del passo più piccolo possibile.
FOR contatore = 500 TO 1000 STEP 8
PULSOUT 14, contatore
PAUSE 7
DEBUG DEC5 contatore, CR, CRSRUP
NEXT
Controllo del Movimento · Pagina 139

Perché PAUSE 7 invece di PAUSE 20? Il comando DEBUG DEC5 contatore, CR,
CRSRUP impiega circa 8 ms per essere eseguito. Ciò significa che PAUSE 12 manterrà il
ritardo di 20 ms tra gli impulsi. Alcune prove ed esperimenti hanno mostrato che PAUSE 7
aveva dato al servo il movimento più dolce. Poiché il basso tempo di 20 ms tra gli impulse
del servo non occorreva fosse più preciso, va bene per la messa a punto e la regolazione.

Un maggior numero di formattatori DEBUG e caratteri di controllo sono stati inseriti nel
comando DEBUG che visualizza il valore della variabile contatore. Questo valore è
stampato usando il formato decimale a 5 cifre (DEC5). Dopo aver stampato il valore, c’è un
ritorno carrello (CR). Dopo di questo, il carattere di controllo CRSRUP (“cursor up”, cursore in
alto) manda il cursore indietro alla riga precedente. Ciò fa in modo che il nuovo valore di
contatore sia stampato sopra il valore vecchio ad ogni ripetizione del ciclo.

Il secondo ciclo FOR...NEXT conta all’indietro da 1000 fino a 500 in passi di 20. In
questo esempio, la variabile contatore è utilizzata anche come argomento del comando
PULSOUT, quindi il quadrilatero del servo ruota in senso orario.

FOR contatore = 1000 TO 500 STEP 20


PULSOUT 14, contatore
PAUSE 7
DEBUG DEC5 contatore, CR, CRSRUP
NEXT

Il vostro turno – Regolazione delle velocità


 Provate valori diversi di STEP per far ruotare il servo a diverse velocità.
 Dopo ciascuna modifica rieseguite il programma.
 Osservate l’effetto di ciascun nuovo valore di ValorePasso su quanto
velocemente ruoti il quadrilatero del servo.
 Sperimentate con valori diversi di Durata nel comando PAUSE (tra 3 e 12) per
trovare il valore che dà al servo il movimento più dolce per ciascun nuovo valore
di ValorePasso.

ATTIVITÀ #6: SERVO CONTROLLATO DA UN PULSANTE


In questo capitolo, avete scritto programmi che fanno eseguire al servo un insieme di
movimenti pre-registrati, ed avete controllato il servo tramite il terminale di Debug.
Potete anche programmare il BASIC Stamp perché controlli il servo basandosi su ingressi
provenienti da un pulsante. In questa attività:

 Costruirete un circuito per controllare il servo con un pulsante.


Pagina 140 · Che cosa è un microcontrollore?

 Programmerete il BASIC Stamp perché controlli il servo basandosi sugli ingressi


di un pulsante.

Quando avete finito, sarete capaci di ottenere dal BASIC Stamp che ruoti il servo in una
direzione premendo e tenendo premuto uno dei pulsanti, e che ruoti il servo nell’altra
direzione premendo e tenendo premuto l’altro pulsante. Quando invece non si preme
alcun pulsante, il servo manterrà qualsiasi posizione abbia raggiunto per ultima.

Parti extra per il controllo del servo con pulsanti


Sono ancora utilizzate le stesse parti che abbiamo impiegato nelle precedenti attività di
questo capitolo. In aggiunta, per i circuiti a pulsante vi occorreranno le seguenti parti:

(2) Pulsanti – normalmente aperti


(2) Resistenze – 10 kΩ (marrone – nero – arancio)
(2) Resistenze – 220 Ω (rosso – rosso – marrone)
(3) Cavallotti di filo

Aggiunta del circuito di controllo a pulsante


La Figura 4-26 mostra i circuiti a pulsante che userete per controllare il servo.

 Aggiungete questo circuito al circuito servo+LED che avete utilizzato fino a


questo punto. Quando lo avrete fatto il vostro circuito dovrebbe assomigliare:

o alla Figura 4-27 se state utilizzando una scheda Board of Education


USB (qualsiasi rev) o Seriale (Rev C o più recente).
o alla Figura 4-28 se state utilizzando una scheda BASIC Stamp
HomeWork Board (Rev C o più recente).

 Se la vostra scheda non è elencata qui sopra, fate riferimento a Servo Circuit
Connections scaricato dal sito www.parallax.com/Go/WAM per trovare le
istruzioni di circuito per la vostra scheda.
Controllo del Movimento · Pagina 141

Vdd Vdd

P4 Figura 4-26
220  Circuito a
P3 Pulsanti per il
controllo del
220 
10 k 10 k
servo

Vss Vss

15 14 Vdd 13 12
White
Red Red Figura 4-27
Black Black

X4 X5
Circuito servo
Vdd Vss
della Board of
Vin
X3
Education con
+ l’aggiunta dei
P15
P14
circuiti a pulsante
P13
P12 Per la Board of
P11
P10 Education Seriale
P9 Rev C o più
P8
P7 recente, o USB di
P6 qualsiasi
P5
P4
standard servo revisione
P3 www.parallax.com
P2
P1
P0
X2
Pagina 142 · Che cosa è un microcontrollore?

Figura 4-28
Circuito servo
della HomeWork
Board con
l’aggiunta dei
circuiti a pulsante

Per la
HomeWork
Board Rev C o
più recente

 Provate il pulsante connesso a P3 usando la versione originale di


LeggiStatoPulsante.bs2. Il capitolo che contiene questo programma e le
istruzioni su come usarlo inizia a pagina 71.
 Modificate il programma in modo che legga P4.
 Eseguite il programma modificato per provare il pulsante connesso a P4.

Programmare il controllo a pulsante del servo


Si possono usare i blocchi di codice IF...THEN per controllare lo stato dei pulsanti
oppure per aggiungere o sottrarre valori da una variabile chiamata durata. Questa
variabile è usata come argomento Durata del comando PULSOUT. Se viene premuto uno
dei pulsanti, il valore di durata aumenta. Se viene premuto l’altro pulsante, il valore di
durata diminuisce. Per decidere se la variabile durata è troppo grande (maggiore di
1000) o troppo piccola (inferiore a 500) si utilizza una istruzione IF...THEN annidata.

Programma esempio: ControlloServoAPulsanti.bs2


Questo programma esempio fa ruotare il quadrilatero del servo in senso antiorario quando
viene premuto il pulsante connesso a P4. Il quadrilatero del servo sarà mantenuto in
rotazione fino a quando il pulsante è tenuto premuto e il valore di durata è inferiore a
Controllo del Movimento · Pagina 143

1000. Quando invece si preme il pulsante connesso a P3, il quadrilatero del servo ruota
in senso orario. Il servo è inoltre limitato nel suo movimento in senso orario perché la
variabile durata non può scendere al di sotto di 500. Mentre il programma è in
esecuzione il terminale di Debug visualizza il valore di durata.

 Digitate il programma ControlloServoAPulsanti.bs2 nell’Editor del BASIC


Stamp ed eseguitelo.
 Verificate che il servo ruoti in senso antiorario quando premete e tenete premuto
il pulsante connesso a P4.
 Verificate che appena viene raggiunto o superato il limite di durata > 1000, il
servo interrompe qualsiasi ulteriore rotazione in direzione antioraria.
 Verificate che il servo ruoti in senso orario quando premete e tenete premuto il
pulsante connesso a P3.
 Verificate che appena viene raggiunto o superato il limite di durata < 500, il
servo interrompe qualsiasi ulteriore rotazione in direzione oraria.

' Che cos’è un microcontrollore - ControlloServoAPulsanti.bs2


' Premere e tenere premuto il pulsante P4 per ruotare il servo in senso
' orario, o premere e tenere premuto il pulsante connesso a P3 per ruotare
' il servo in senso orario.

' {$STAMP BS2}


' {$PBASIC 2.5}

durata VAR Word


durata = 750
PAUSE 1000

DO
IF IN3 = 1 THEN
IF durata > 500 THEN
durata = durata - 25
ENDIF
ENDIF

IF IN4 = 1 THEN
IF durata < 1000 THEN
durata = durata + 25
ENDIF
ENDIF

PULSOUT 14, durata


PAUSE 10

DEBUG HOME, DEC4 durata, " = durata"


LOOP
Pagina 144 · Che cosa è un microcontrollore?

Il vostro turno – Limiti meccanici e limiti di software


I blocchi meccanici del servo evitano che il servo ruoti oltre angoli di circa 0° e 180°, il
che corrisponde ad argomenti di PULSOUT Durata vicini a 250 e 1250.
ControllaServoAPulsanti.bs2 ha inoltre dei limiti software, imposti dalle istruzioni
IF...THEN che vi impediscono di usare un pulsante per ruotare il servo oltre un
determinato punto. A differenza dei limiti meccanici, i limiti software si possono
regolare molto facilmente. Ad esempio, potete consentire al vostro servo con controllo a
pulsanti un intervallo di movimenti molto più largo sostituendo semplicemente qualsiasi
occorrenza di 500 con 350, e qualsiasi occorrenza di 1000 con 1150. Oppure, potrete
dare al vostro servo un intervallo di movimenti molto più stretto sostituendo le
occorrenze di 500 con 650 e le occorrenze di 1000 con 850. Non è necessario che i limiti
software siano simmetrici. Ad esempio, potreste cambiare i limiti software
dall’intervallo 500–1000 all’intervallo 350–750.

 Sperimentate con diversi limiti software del servo, inclusi gli intervalli da 350 a
1150, da 650 a 850, e da 350 a 750.
 Provate ciascun intervallo di limiti software per essere certi che essi si
comportano come ci si aspetta.

Potete anche cambiare la velocità di rotazione del servo mentre tenete premuto un
pulsante. Ad esempio, se cambiate i due valori 25 nel programma portandoli a 50, il
servo risponderà due volte più velocemente. Alternativamente, potrete cambiarli a 30 per
far rispondere il servo solo poco più velocemente, o a 20 per farlo rispondere poco più
lentamente, o a 10 per farlo rispondere molto più lentamente.

 Provate!

SOMMARIO
Questo capitolo ha introdotto il movimento microcontrollato utilizzando un Servo
Standard Parallax. Un servo è un dispositivo che si muove a una determinata posizione e
la mantiene basandosi su segnali elettronici che riceve. Questi segnali hanno la forma di
impulsi che durano un tempo qualsiasi tra 0,5 e 2,5 ms, e debbono essere inviati
all’incirca ogni 20 ms perché il servo mantenga la sua posizione.

Un programmatore può usare il comando PULSOUT per fare in modo che il BASIC Stamp
invii questi segnali. Poiché, per far mantenere al servo la sua posizione, gli impulsi
debbono essere rilasciati ogni 20 ms, i comandi PULSOUT e PAUSE sono posti di solito in
Controllo del Movimento · Pagina 145

un certo tipo di ciclo. Per determinare sia il numero di ripetizioni del ciclo, sia
l’argomento Durata del comando PULSOUT, si possono usare variabili o costanti.

In questo capitolo, sono stati presentati molti modi diversi per porre valori entro le
variabili. La variabile può ricevere il valore dal vostro terminale di Debug tramite il
comando DEBUGIN. Il valore della variabile può passare per una sequenza di valori se è
usato come argomento Contatore di un ciclo FOR...NEXT. Questa tecnica può essere
impiegata per far compiere al servo movimenti oscillanti. Si possono usare istruzioni
IF...THEN per controllare pulsanti e aggiungere o sottrarre un valore a/da la variabile
usata come argomento Durata del comando PULSOUT quando viene premuto un
determinato pulsante. Questo permette sia il controllo della posizione sia movimenti
oscillanti a seconda di come viene costruito il programma e come vengono fatti
funzionare i pulsanti.

Domande
1. Quali sono le cinque parti esterne di un servo? Per cosa sono usate?
2. Per far lavorare un servo è richiesto un circuito a LED?
3. Quale comando controlla il tempo in cui è basso il segnale inviato ad un servo?
Quale comando controlla il tempo in cui il segnale è alto?
4. Quali elementi di programma potete usare per controllare la quantità di tempo
per cui un servo mantiene una particolare posizione?
5. Come potete utilizzare il terminale di Debug per inviare messaggi al BASIC
Stamp? Quale comando di programmazione si usa per far ricevere al BASIC
Stamp messaggi dal terminale di Debug?
6. Quale tipo di blocco di codice potete scrivere per limitare l’intervallo di
movimento di un servo?

Esercizi
1. Scrivere un blocco di codice che faccia variare il valore del PULSOUT che
controlla un servo da una Durata di 700 a 800, poi di nuovo a 700, in incrementi
di (a) 1, (b) 4.
2. Aggiungere alla vostra risposta all’esercizio 1b un ciclo annidato FOR...NEXT
in modo che invii dieci impulsi prima di incrementare l’argomento Durata del
comando PULSOUT di 4.
Pagina 146 · Che cosa è un microcontrollore?

Progetto
1. Modificate ControlloServoConDebug.bs2 in modo che controlli un iterruttore di
blocco. Se l’interruttore di blocco (pulsante P3) è premuto, il terminale di Debug
non deve accettare alcun comando, e deve visualizzare: “Premere il pulsante di
Avvio per avviare l’apparecchiatura.” Quando viene premuto l’interruttore di
avvio (pulsante P4), il programma deve funzionare normalmente. Se si collega e
ricollega energia, il programma si deve comportare come se fosse stato premuto
l’interruttore di blocco.

Soluzioni
D1. 1) Spinotto – connette il servo alle sorgenti di energia e segnale; 2) Cavo –
conduce energia e segnali dallo spinotto entro il servo; 3) Quadrilatero – la parte
mobile del servo; 4) Vite – collega il quadrilatero del servo all’alberino di uscita;
5) Involucro – contiene il motore DC, gli ingranaggi, e i circuiti di controllo.
D2. No, il LED ci aiuta soltanto a vedere cosa sta succedendo con i segnali di
controllo.
D3. Il tempo per cui il segnale è basso è controllato dal comando PAUSE. Il tempo
per cui è alto è controllato dal comando PULSOUT.
D4. Un ciclo FOR...NEXT.
D5. Digitate i messaggi entro la finestrella di trasmissione del terminale di Debug.
Usate il comando DEBUGIN e una variabile per far ricevere i caratteri al BASIC
Stamp.
D6. Sia un’istruzione annidata IF...THEN, sia un comando che usi gli operatori MAX
e MIN per mantenere la variabile in un certo intervallo.
Controllo del Movimento · Pagina 147

E1.
a) Incrementi di 1 b) Aggiungere STEP 4 ad entrambi i cicli
FOR...NEXT.
FOR contatore = 700 TO 800
PULSOUT 14, contatore FOR contatore = 700 TO 800 STEP 4
PAUSE 20 PULSOUT 14, contatore
NEXT PAUSE 20
FOR contatore = 800 TO 700 NEXT
PULSOUT 14, contatore FOR contatore = 800 TO 700 STEP 4
PAUSE 20 PULSOUT 14, contatore
NEXT PAUSE 20
NEXT

E2. Supponete di aver dichiarato una variabile impulsi:


FOR contatore = 700 TO 800 STEP 4
FOR impulsi = 1 TO 10
PULSOUT 14, contatore
PAUSE 20
NEXT
NEXT
FOR contatore = 800 TO 700 STEP 4
FOR impulsi = 1 TO 10
PULSOUT 14, contatore
PAUSE 20
NEXT
NEXT

P1. Ci sono molte soluzioni possibili, qui ne diamo due.

' Che cos’è un microcontrollore - Cap04Pr01Sol1__IntBlocco.bs2


' Invia messaggi al BASIC Stamp per controllare un servo usando il
' terminale di Debug mentre non è premuto l’interruttore di blocco.

' Contributo di: Professor Clark J. Radcliffe, Department


' of Mechanical Engineering, Michigan State University

' {$STAMP BS2}


' {$PBASIC 2.5}

contatore VAR Word


impulsi VAR Word
durata VAR Word
Pagina 148 · Che cosa è un microcontrollore?

DO

PAUSE 2000
IF (IN3 = 1) AND (IN4 = 0) THEN
DEBUG "Premi l’interruttore di avvio per avviare il macchinario. ",
CR ,CRSRUP
ELSEIF (IN3 = 0) AND (IN4 = 1) THEN
DEBUG CLS, "Digita il numero di impulsi:", CR
DEBUGIN DEC impulsi

DEBUG "Digita la durata di PULSOUT:", CR


DEBUGIN DEC durata

DEBUG "Servo in esecuzione...", CR

FOR contatore = 1 TO impulsi


PULSOUT 14, durata
PAUSE 20
NEXT

DEBUG "FATTO"
PAUSE 2000

ENDIF

LOOP

Qui sotto è riportata una versione che può perfino rilevare se si preme il pulsante
mentre sta inviando un segnale al servo. Questo è importante per
l’apparecchiatura cui occorra un ARRESTO IMMEDIATO quando si preme
l’interruttore di blocco. Questa versione utilizza la tecnica di attesa che è stata
introdotta nel gioco dei Tempi di Reazione in cap. 3, Attività #53 in tre posti
diversi nel programma. Potrete verificare che il programma smette di inviare un
segnale di controllo al servo rilevando la luce indicatrice di segnale del LED
connesso a P14.

' Che cos’è un microcontrollore - Cap04Pr01Sol2__IntBlocco.bs2


' Invia messaggi al BASIC Stamp per controllare un servo usando
' il terminale di Debug fin quando l’interruttore di blocco non è
' premuto.

' {$STAMP BS2}


' {$PBASIC 2.5}

contatore VAR Word


impulsi VAR Word
durata VAR Word

PAUSE 1000
Controllo del Movimento · Pagina 149

DEBUG "Premere l’interruttore di avvio (P4) per avviare


l’apparecchiatura.", CR

DO:LOOP UNTIL IN4 = 1


DEBUG "Premere l’interruttore di blocco (P3) per arrewstare
l’apparecchiatura.", CR

DEBUG CR, CR, "Tempo di esecuzione Servo:", CR,


" ~44 impulsi in 1 secondo", CR,
"Posizione Servo:", CR,
" 350 <= Durata PULSOUT <= 1150", CR, CR

DO

IF IN3 = 1 THEN
DEBUG "Premere Avvio (P4) per avviare l’apparecchiatura.", CR
DO:LOOP UNTIL IN4 = 1
DEBUG "Press Blocco (P3) per arrestare l’apparecchiatura.", CR
ENDIF
DEBUG "Digitare tempo di esecuzione ", CR,
"come numero di impulsi: "
DEBUGIN DEC impulsi

DEBUG "Digitare posizione ", CR,


"come durata PULSOUT: "
DEBUGIN DEC durata

duration = durata MIN 350 MAX 1150

DEBUG "Servo in esecuzione...", CR

FOR contatore = 1 TO impulsi


PULSOUT 14, durata
PAUSE 20
IF IN3 = 1 THEN
DEBUG "Premere Avvio (P4) per avviare l’apparecchiatura.", CR
DO:LOOP UNTIL IN4 = 1
DEBUG "Premere Blocco (P3) per arrestare l’apparecchiatura.", CR
ENDIF
NEXT

DEBUG "FATTO", CR, CR


PAUSE 1000

LOOP
Misure di rotazione · Pagina 151

Capitolo 5: Misure di rotazione


DISCHI DI REGOLAZIONE E APPARECCHI DI RILEVAMENTO
Molte famiglie hanno manopole a disco (o a quadrante) per controllare l’illuminazione di
una stanza. Ruotate il disco in una direzione, e la luce diventa più intensa; ruotatelo
nell’altra direzione, e la luce si abbassa. I modelli di trenini elettrici usano dischi per
controllare velocità dei motori e direzione. Molte macchine hanno dischi o manopole
rotanti usate per affinare la posizione di lame da taglio e superfici di guida.

Si possono trovare dischi anche nelle apparecchiature audio, dove vengono impiegati per
regolare l’intensità sonora di musica e voci. La Figura 5-1 mostra un semplice esempio
di quadrante-disco con manopola che può essere ruotata per regolare il volume di un
altoparlante. Ruotando la manopola, un circuito interno all’altoparlante cambia, e il
volume della musica che l’altoparlante sta riproducendo cambia. Circuiti analoghi si
trovano all’interno di joystick, e perfino all’interno del servo usato nel Capitolo 4:
Controllo del Movimento.

Figura 5-1
Regolazione di volume in
un altoparlante

LA RESISTENZA VARIABILE SOTTO IL DISCO – UN POTENZIOMETRO


Il dispositivo all’interno di molti dischi-quadranti dei sistemi sonori, di joystick e di servo
è detto potenziometro, che spesso si abbrevia con “pot.” La Figura 5-2 mostra le
immagini di alcuni potenziometri di uso comune. Notate che hanno tutti tre piedini (pin).
Pagina 152 · Che cosa è un microcontrollore?

Figura 5-2
Alcuni esempi di
potenziometri

La Figura 5-3 mostra il simbolo schematico e il disegno di parte del potenziometro che
userete in questo capitolo. I terminali A e B sono connessi a un elemento resistivo da 10
kΩ. Il terminale W è chiamato terminale mobile, ed è collegato ad un filo che tocca
l’elemento resistivo in qualche zona tra le sue estremità.

Figura 5-3
Simbolo schematico e disegno di
parte del potenziometro

La Figura 5-4 mostra come lavora il terminale mobile (spazzola, dal tipo di movimento)
di un potenziometro. Quando regolate la manopola posta in cima al potenziometro, il
terminale mobile contatta l’elemento resistivo in posti diversi. Quando girate la manopola
in senso orario, la spazzola si avvicina al terminale A, e quando girate la manopola in
senso antiorario, la spazzola si avvicina al terminale B.

Figura 5-4
Regolazione della spazzola
(terminale mobile) del potenziometro
Misure di rotazione · Pagina 153

ATTIVITÀ #1: COSTRUZIONE E PROVA DEL CIRCUITO DI UN


POTENZIOMETRO
Ponendo resistenze di valori diversi in serie ad un LED, nel circuito fluirà corrente di
differenti valori. Resistenze più grandi nel circuito LED faranno passare nel circuito
piccole quantità di corrente, e il LED farà luce bassa. Resistenze più picole nel circuito
LED faranno passare maggior corrente nel circuito, e il LED farà più luce. Connettendo i
terminali W ed A del potenziometro, in serie con un circuito LED, potrete usare il
potenziometro per regolare la resistenza del circuito. Questa a sua volta regolerà la
luminosità del LED. In questa attività, userete il potenziometro come resistenza variabile
che userete per cambiare la luminosità del LED.

Parti del circuito a disco


(1) Potenziometro – 10 kΩ
(1) Resistenza – 220 Ω (rosso-rosso-marrone)
(1) LED – rosso
(1) Cavallotto di filo

Costruzione del circuito di prova del potenziometro


La Figura 5-5 mostra un circuito che può servire per regolare la luminosità di un LED
con un potenziometro.

 Costruite il circuito mostrato in Figura 5-5.

Suggerimento: Se avete problemi nel tenere il potenziometro in posizione sugli zoccoli


della breadboard, controllate le estremità di filo. Se ciascuna ha una piccola piegatura, usate
una pinza con becchi ad ago per stringere i fili e provate poi ad infilare di nuovo il
potenziometro nella breadboard. Quando le gambette del pot sono dritte, possono
mantenere un miglior contatto con gli zoccoli della breadboard.
Pagina 154 · Che cosa è un microcontrollore?

Figura 5-5
Circuito-prova
Potenzometro-
LED

Prova del circuito a potenziometro


 Ruotate il potenziometro in senso orario fin quando raggiunge il suo limite
meccanico mostrato in Figura 5-6 (a).

Premere leggermente il pot contro la breadboard mentre ruotate la sua manopola.


Per queste attività, il potenziometro deve essere calettato in modo stabile negli zoccoli della
breadboard. Se non state attenti quando ruotate la manopola, il pot può scollegarsi dagli
zoccoli della breadboard, e questo può produrre misure errate. Quindi, mentre ruotate la
manopola del potenziometro, applicate una piccola pressione verso il basso per mantenerlo
in sede nella breadboard.
Maneggiate con attenzione: Se il vostro potenziometro non continua a ruotare, non
provate a forzarlo. Ruotatelo solo fin quando raggiunge il suo limite meccanico; altrimenti
potrebbe rompersi.

 Ruotate gradualmente il potenziometro in senso antiorario fino alla posizione


mostrata in Figura 5-6 (b), (c), (d), (e), ed (f) notando quanto la luce del LED sia
brillante in ciascuna posizione.
Misure di rotazione · Pagina 155

Figura 5-6
Manopola del
(a) (c) (e) potenziometro

Da (a) fino ad (f) è mostrata


(b) (d) (f) la spazzola mobile del
potenziometro (wiper) in
posizioni diverse.

Come lavora il circuito del potenziometro


La resistenza totale del vostro circuito di prova è 220 Ω più la resistenza tra i terminali A
e W del potenziometro. La resistenza tra i terminali A e W aumenta quando la manopola
è regolata ulteriormente in senso orario, e questo fatto riduce di conseguenza la corrente
che attraversa il LED, rendendolo meno luminoso.

ATTIVITÀ #2: MISURA DI UNA RESISTENZA TRAMITE MISURA DEL


TEMPO
Questa attività introduce una nuova parte (componente) chiamata condensatore (o
capacità). Un condensatore si comporta come una batteria ricaricabile che mantiene la
sua carica soltanto per brevi periodi di tempo. Questa attività introduce anche il tempo
RC, che è una abbreviazione di tempo-resistenza-capacità. Il tempo RC è una misura del
tempo che un condensatore impiega a perdere una certa quantità della carica che ha
immagazzinato quando eroga corrente ad una resistenza. Misurando il tempo che un
condensatore impiega a scaricarsi con diversi valori della resistenza e della capacità,
prenderete maggior familiarità con il tempo RC. In questa attività, programmerete il
BASIC Stamp perché carichi un condensatore e quindi misurerete il tempo che il
condensatore impiega a scaricarsi attraverso una resistenza.

Introduzione del condensatore


La Figura 5-7 mostra il simbolo di schema e il disegno di parte per il tipo di condensatore
usato in questa attivitrà. Il valore di capacità è misurato in microfarad (µF), e la loro
misura è di solito stampata sui condensatori.

L’involucro cilindrico di questo particolare condensatore è detto bossolo. Questo tipo di


condensatore, chiamato condensatore elettrolitico, deve essere gestito con attenzione.

 Leggere il riquadro PRECAUZIONE sulla pagina che segue.


Pagina 156 · Che cosa è un microcontrollore?

PRECAUZIONE: Questo condensatore ha un terminale positivo (+) e uno negativo (-).


Il terminale negativo è il filo che fuoriesce dal bossolo metallico più vicino alla striscia con un
segno negativo (–). Accertatevi sempre di collegare questi terminali come indicato nei
diagrammi circuitali. Connettere uno di questi condensatori in modo errato può
danneggiarlo. In alcuni circuiti, connettere questo tipo di condensatore in modo errato e poi
dare energia può farlo rompere o persino esplodere.
PRECAUZIONE: Non dare ad un condensatore elettrolitico una tensione maggiore di
quella che può sopportare. La tensione massima sopportabile è stampata su un lato del
bossolo.
PRECAUZIONe: Si raccomanda l’uso di visiere od occhiali di sicurezza.

3300 µ
Figura 5-7
Simbolo schematico e disegno di
3300 µF
parte di un condensatore da 3300 µF
F

Prestate molta attenzione ai fili e a


+ - come questi si collegano ai terminali
Positivo e Negativo.

Parti del circuito resistenza e tempo


(1) Condensatore – 3300 µF
(1) Condensatore – 1000 µF
(1) Resistenza – 220 Ω (rosso-rosso-marrone)
(1) Resistenza – 470 Ω (giallo-viola-marrone)
(1) Resistenza – 1 kΩ (marrone-nero-rosso)
(1) Resistenza – 2 kΩ (rosso-nero-rosso)
(1) Resistenza – 10 kΩ (marrone-nero-arancio)

Costruzione e prova del circuito tempo Resistenza-Capacità (RC)


La Figura 5-8 mostra lo schema del circuito e la Figura 5-9 mostra lo schema di
cablaggio per questa attività. Prenderete misure di tempo utilizzando diversi valori di
resistenza al posto della resistenza marcata Ri.
Misure di rotazione · Pagina 157

 Leggete attentamente il riquadro SICUREZZA.

SICUREZZA
Quando collegate il condensatore da 3300 o quello da 1000 F osservate sempre la
polarità. Ricordate, il terminale negativo è il filo che fuoriesce dal contenitore metallico ed è
più vicino alla striscia con stampato un segno negativo (–). Usate la Figura 5-7 per
identificare i terminali (+) e (-).
Il vostro condensatore da 3300 F lavorerà bene in questo esperimento soltanto se vi siete
accertati che i terminali positivo (+) e negativo (-) sono connessi ESATTAMENTE come
mostrato in Figura 5-8 e in Figura 5-9.
Non invertite mai le polarità di alimentazione sul condensatore da 3300 F o su qualsiasi
altro condensatore polarizzato. La tensione sul terminale (+) del condensatore dev’essere
sempre più alta di quella al suo terminale (-). Vss è la tensione più bassa (0 V) sulle schede
Board of Education e BASIC Stamp HomeWork. Collegando il terminale negativo del
condensatore a Vss, siete certi che la polarità attraverso i terminali del condensatore sarà
sempre corretta.
Non applicate mai una tensione al condensatore che superi la tensione massima
indicata sul contenitore.
Indossate visiere protettive oppure occhiali di sicurezza durante questa attività.
Scollegate sempre energia prima di costruire o modificare i circuiti.
Tenete mani e viso lontani da questo condensatore quando l’energia è connessa.

 Con l’energia scollegata, costruite il circuito come indicato iniziando con una
resistenza da 470 Ω nella posizione contrassegnata con Ri.

P7 Figura 5-8
220  Schema per la prova
R1 = 470  della caduta di tensione
3300 µF Ri R2 = 1 k nel tempo-RC
R3 = 2 k
R4 = 10 k Le quattro diverse
resistenze saranno
utilizzate una alla volta al
posto della Ri nello
Vss schema.

Quattro diverse resistenze saranno utilizzate come la Ri mostrata nello schema. La prima
volta, lo schema sarà costruito e provato con Ri = 470 Ω, e poi, le altre volte, con Ri = 1
kΩ, ecc.
Pagina 158 · Che cosa è un microcontrollore?

R4 R3 R2 R1 Figura 5-9
Vdd Vin Vss
- µF Diagramma di cablaggio
00 per vedere la caduta di
X3
33 tensione nel tempo-RC

+
P15
P14
Accertatevi che il filo
+
P13
P12 negativo del
P11
P10 condensatore sia
P9 connesso sulla vostra
P8
P7
scheda nello stesso
P6 modo mostrato in questa
P5 figura, con il filo negativo
P4
P3 connesso a Vss.
P2
P1
P0
X2

 Assicuratevi che il filo negativo del condensatore sia connesso alla vostra scheda
proprio nel modo mostrato in questa figura, col filo negativo connesso a Vss.

Esplorando il circuito del tempo-RC con il BASIC Stamp


Sebbene per registrare quanto tempo impieghi la carica del condensatore a scendere ad un
certo livello si possa usare un contasecondi a pulsante (cronometro), il BASIC Stamp può
essere anche programmato per sorvegliare il circuito e darvi una misura di tempo più
consistente.

Programma esempio: RcTimerEsplorato.bs2


 Digitate ed eseguite RcTimerEsplorato.bs2.
 Oservate come il BASIC Stamp carica il condensatore e poi misura il suo tempo
di scarica.
 Registrate il tempo misurato (il tempo di scarica del condensatore) nella riga per
470 Ω della Tabella 5-1.
 Scollegate energia dalla vostra Board of Education o HomeWork Board BASIC
Stamp.
 Rimuovete la resistenza da 470 Ω etichettata Ri in Figura 5-8 e in Figura 5-9 a
pagina 158, e sostituitela con la resistenza da 1 kΩ.
Misure di rotazione · Pagina 159

 Ricollegate energia sulla vostra scheda.


 Registrate la vostra successiva misura di tempo (per la resistenza da 1 kΩ).
 Ripetete questi passi per ciascun valore di resistenza che è in Tabella 5-1.

Tabella 5-1: Resistenza e tempo-RC per C = 3300 F


Resistenza () Tempo misurato (s)
470
1k
2k
10 k

' Che cos’è un microcontrollore - RcTimerEsplorato.bs2


' Programma temporizzatore di reazione modificato per registrare
' una caduta di tensione per tempo-RC.

' {$STAMP BS2}


' {$PBASIC 2.5}

Contatempo VAR Word


contatore VAR Nib
PAUSE 1000

DEBUG CLS

HIGH 7
DEBUG " Condensatore in carica...", CR

FOR contatore = 5 TO 0
PAUSE 1000
DEBUG DEC2 contatore, CR, CRSRUP
NEXT

DEBUG CR, CR, "Ora sto misurando il tempo di scarica!", CR, CR


INPUT 7

DO
PAUSE 100
Contatempo = Contatempo + 1

DEBUG ? IN7
DEBUG DEC5 Contatempo, CR, CRSRUP, CRSRUP

LOOP UNTIL IN7 = 0


Pagina 160 · Che cosa è un microcontrollore?

DEBUG CR, CR, CR, "Il tempo-RC di scarica è stato",


DEC Contatempo, CR,
"decimi di secondo.", CR, CR
END

Come lavora RcTimerEsplorato.bs2


Sono dichiarate due variabili. La variabile Contatempo è usata per tener traccia di
quanto tempo impiega il condensatore a scaricarsi attraverso Ri. La variabile contatore
è usata per contare all’indietro mentre il condensatore si carica.
Contatempo VAR Word
contatore VAR Nib

Il comando DEBUG CLS cancella il terminale di Debug in modo che non sia ingombrato
da misure successive. HIGH 7 imposta P7 alto e inizia la carica del condensatore, quindi
viene visualizzato il messaggio “Condensatore in carica…”. Dopo di questo, un ciclo
FOR...NEXT conta all’indietro mentre il condensatore si carica. Man mano che il
condensatore si carica, la tensione ai capi dei suoi terminali aumenta verso un valore
qualsiasi tra 3,4 e 4,9 V (a seconda del valore di Ri).
DEBUG CLS

HIGH 7
DEBUG "Condensatore in carica...", CR

FOR contatore = 5 TO 0
PAUSE 1000
DEBUG DEC2 contatore, CR, CRSRUP
NEXT

Un messaggio annuncia quando la caduta inizia ad essere esplorata.


DEBUG CR, CR, "Ora sto misurando il tempo di caduta!", CR, CR

Per consentire che il condensatore si scarichi attraverso la resistenza Ri, il pin I/O è
cambiato da HIGH a INPUT. Come input, il pin I/O non ha alcun effetto sul circuito, ma
può sentire segnali alti o bassi. Non appena il pin I/O rilascia il circuito, il condensatore
si scarica e invia corrente attraverso la resistenza. Mentre il condensatore si scarica, la
tensione ai capi dei suoi terminali diventa sempre più piccola (cade).
INPUT 7
Misure di rotazione · Pagina 161

Nel capitolo sui pulsanti, avete usato il BASIC Stamp per rilevare un segnale alto o basso
usando le variabili IN3 e IN4. In quel contesto, un segnale alto era considerato Vdd, e un
segnale basso era considerato Vss. Per il BASIC Stamp, in realtà un segnale alto è una
qualsiasi tensione sopra circa 1,4 V. Naturalmente, potrebbe essere fino a 5 V.
Analogamente, un segnale basso è qualsiasi cosa tra 1,4 V e 0 V. Questo ciclo
DO...LOOP controlla P7 ogni 100 ms fin quando il valore di IN7 cambia da 1 a 0, il ché
indica che la tensione del condensatore cade a 1,4 V.
DO

PAUSE 100
Contatempo = Contatempo + 1

DEBUG ? IN7
DEBUG DEC5 Contatempo, CR, CRSRUP, CRSRUP

LOOP UNTIL IN7 = 0

Quindi è visualizzato il risultato e il programma termina.


DEBUG CR, CR, CR, "Il tempo-RC di caduta è stato ",

DEC Contatempo, CR,


"decimi di secondo.", CR, CR
END

Il vostro turno – Un circuito più veloce


Se per mantenere la carica si usa un condensatore che ha all’incirca un terzo (1/3) della
capacità, la misura del tempo per ciascun valore di resistenza usato nel circuito sarà
ridotta a 1/3. Più avanti, nella successiva attività, userete un condensatore che ha
1/33,000 della capacità! Il BASIC Stamp prenderà ancora le misure di tempo per voi,
usando un comando chiamato RCTIME.

 Togliete energia alla vostra scheda Board of Education o HomeWork Board.


 Sostituite il condensatore da 3300 µF con un condensatore da 1000 µF.
 Accertatevi che la polarità del vostro condensatore sia corretta. Il terminale
negativo dovrebbe essere connesso a Vss.
 Ricollegate energia.
 Ripetete i passi nel capitolo del programma esempio: RcTimerEsplorato.bs2, e
registrate le vostre misure di tempo nella Tabella 5-2.
Pagina 162 · Che cosa è un microcontrollore?

 Confrontate le vostre misure di tempo con quelle che avete prese


precedentemente in Tabella 5-1. Quanto sono vicine ad 1/3 dei valori delle
misure prese con il condensatore da 3300 µF ?
Tabella 5-2: Resistenza e tempo-RC per C = 1000 F
Resistenza () Tempo misurato (s)
470
1k
2k
10 k

ATTIVITÀ #3: LETTURA DI UN QUADRANTE CIRCOLARE CON IL BASIC


STAMP
Nell’Attività #1, come resistenza variabile è stato usato un potenziometro. La resistenza
del circuito variava a seconda della posizione della manopola di regolazione del
potenziometro. Nell’attività #2, è stato usato un cicuito a tempo RC per misurare diverse
resistenze. In questa attività, costruirete un circuito a tempo RC per leggere il
potenziometro, ed usare il BASIC Stamp per prendere le misure dei tempi. Il
condensatore che userai sarà molto piccolo, e le misure di tempo saranno nella gamma
dei microsecondi. Anche se le misure prenderanno durate di tempo molto piccole, il
BASIC Stamp vi darà indicazioni eccellenti della resistenza tra i terminali A e W del
potenziometro che – a loro volta – indicano la posizione della manopola.

Parti occorrenti per leggere il tempo RC con il BASIC Stamp


(1) Potenziometro – 10 kΩ
(1) Resistenza – 220 Ω (rosso-rosso-marrone)
(2) Cavallotti di filo
(1) Condensatore – 0,1 µF
(1) Condensatore – 0,01 µF
(2) Cavallotti di filo

Questi condensatori non hanno terminali + e –. Essi non sono polarizzati. Così, potete
collegarle con sicurezza questi condensatori ad un circuito senza dovervi preoccupare dei
terminali positivo e negativo.
Misure di rotazione · Pagina 163

Figura 5-10
104
103 Condensatori ceramici
0.1 µF 0.01 µF
Condensatore da 0.1 µF
(sinistra)
Condensatore da 0.01
µF (destra)

Costruzione di un circuito a tempo RC per il BASIC Stamp


La Figura 5-11 mostra lo schema e il diagramma di cablaggio per il circuito a tempo RC
veloce. Questo è il circuito che userete per controllare la posizione della manopola del
potenziometro con l’aiuto del BASIC Stamp e di un programma PBASIC.

 Costruite il circuito mostrato in Figura 5-11.

Figura 5-11
Schema e diagramma
di cablaggio per il
circuito a TEMPO RC
con potenziometro del
BASIC Stamp
Pagina 164 · Che cosa è un microcontrollore?

Programmazione delle misure ti tempo RC


Il programma esempio nell’attività #2 ha misurato il tempo di discesa RC controllando se
IN7 = 0 ogni 100 ms, e ha mantenuto traccia del numero di controlli che ha dovuto fare.
Quando IN7 è cambiato da 1 a 0, il cambiamento ha indicato che la tensione ai capi del
condensatore è scesa a 1,4 V. Il risultato al momento in cui il programma aveva fatto
l’esplorazione era stato che la variabile Contatempo ha memorizzato il numero di decimi
di secondo che ci sono voluti perché il voltaggio del condensatore cadesse ad 1,4 V.

Il successivo programma esempio usa un comando PBASIC chiamato RCTIME che fa


misurare al BASIC Stamp il tempo di scarica RC in termini di unità di 2 μs. Quindi,
invece di decimi di secondo, il risultato che RCTIME 7, 1, tempo memorizza nella
variabile tempo è il numero di unità di due milionesimi di secondo che ci vogliono
perché il voltaggio del condensatore scenda sotto 1,4 V. Poiché il comando RCTIME ha
unità di misura così precise, potete ridurre la dimensione del condensatore da 3300 μF a
0,1 o perfino a 0,01 μF, ed avrete ancora misure di tempo che indicano il valore della
resistenza. Poiché la resistenza tra i terminali A e W del potenziometro cambia mentre
ruotate la manopola, la misura di RCTIME vi fornirà una misura di tempo, che corrisponde
alla posizione della manopola del potenziometro.

Programma esempio: LeggiPotConRcTime.bs2


 Digitate ed eseguite LeggiPotConRcTime.bs2
 Provate a ruotare la manopola del potenziometro mentre controllate il valore
della variabile tempo usando il terminale di Debug.

Ricordatevi di esercitare una piccola pressione verso il basso per mantenere il


potenziometro fermo nella breadboard mentre ruotate la sua manopola. Se il vostro servo
inizia ad andare inaspettatamente indietro e avanti invece di mantenere la sua posizione, la
colpa può essere di un pot non ben fermato.

' Che cos’è un microcontrollore - LeggiPotConRcTime.bs2


' Legge il potenziometro in un circuito a tempo RC usando il comando RCTIME.

' {$STAMP BS2}


' {$PBASIC 2.5}

tempo VAR Word

PAUSE 1000

DO
Misure di rotazione · Pagina 165

HIGH 7
PAUSE 100
RCTIME 7, 1, tempo
DEBUG HOME, "tempo = ", DEC5 tempo

LOOP

Il vostro turno – Cambiare il tempo cambiando il condensatore


 Sostituite il condensatore da 0,1 µF con un condensatore da 0,01 µF.
 Provate le stesse posizioni del potenziometro che avete impostato nell’attività
principale e confrontate il valore visualizzato dal terminale di Debug con i valori
ottenuti per il condensatore da 0,1 µF. Le misure di RCTIME sono circa un
decimo del valore per una data posizione del potenziometro?
 Tornate indietro al condensatore da 0,1 µF.
 Con il condensatore da 0,1 µF di nuovo nel circuito e il condensatore da 0,01 µF
rimosso, ruotate la manopola del pot ai suoi limiti in entrambe le direzioni e
prendete nota del valore più alto e di quello più basso per la successiva attività.
Valore più alto:_________ valore più basso:_________

Come lavora LeggiPotConRcTime.bs2


La Figura 5-12 mostra come i comandi HIGH, PAUSE ed RCTIME del
LeggiPotConRcTime.bs2 interagiscono con il circuito in Figura 5-11.
Pagina 166 · Che cosa è un microcontrollore?

Figura 5-12: Voltaggio in P7 tramite HIGH, PAUSE, ed RCTIME


Invisibile al circuito RC

tempo

75 x 2 µs nella
variabile tempo

A sinistra, il comando HIGH 7 produce il collegamento, interno al BASIC Stamp, del suo
pin I/O P7 alla alimentazione di 5 V (Vdd). La corrente dell’alimentatore fluisce
attraverso la resistenza del potenziometro e inoltre carica il condensatore. Quanto più il
condensatore si avvicina alla sua carica finale (quasi 5 V), tanta minor corrente fluirà
entro di esso. Il comando PAUSE 100 ha il compito primario di far visualizzare al
terminale di Debug gli aggiornamenti a circa 10 volte al secondo; il comando PAUSE 1 di
solito basta a caricare il condensatore. A destra, il comando RCTIME 7, 1, tempo
cambia la direzione del pin I/O da uscita a ingresso ed avvia il conteggio del tempo in
incrementi di 2 μs. Come ingresso il pin I/O non fornisce più l’alimentazione di 5 V al
circuito. Infatti, come ingresso, è completamente invisibile al circuito RC. Così, il
condensatore comincia a perdere la sua carica attraverso il potenziometro. Man mano che
il condensatore perde carica, il suo voltaggio scende. Il comando RCTIME mantiene il
conteggio del tempo fin quando P7 intercetta un segnale basso, il ché significa che il
voltaggio attraverso il condensatore è sceso fino ad 1,4 V, punto al quale esso memorizza
la sua misura nella variabile tempo.
Misure di rotazione · Pagina 167

La Figura 5-12 mostra anche un grafico del voltaggio attraverso il condensatore durante i
comandi HIGH, PAUSE, ed RCTIME. In risposta al comando HIGH 7, che connette il
circuito ai 5 V, il condensatore si carica rapidamente. Poi, rimane livellato al suo
voltaggio finale durante quasi l’intero comando PAUSE 100. Quando il programma
raggiunge ed esegue il comando RCTIME 7, 1, tempo, cambia la direzione del pin I/O a
ingresso, in modo che il condensatore inizia a scaricarsi attraverso il potenziometro.
Mentre il condensatore si scarica, il voltaggio in P7 scende. Quando il voltaggio scende
ad 1,4 V (al segno 150 μs in questo esempio), il comando RCTIME smette di contare
tempo e memorizza il risultato della misura nella variabile tempo. Dal momento che il
comando RCTIME conta il tempo in unità di 2 μs, il risultato che sarà memorizzato per
150 μs nella variabile tempo è 75.

Soglia logica Pin I/O: 1,4 V è una soglia logica per il pin I/O del BASIC Stamp 2. Quando il
pin I/O è impostato a ingresso, memorizza un 1 nel suo registro di ingresso se il voltaggio
applicato è sopra 1,4 V o uno 0 se il voltaggio di ingresso è uguale o inferiore ad 1,4 V. Il
primo esempio con pulsante nella precedente attività #6 del capitolo 4 applicava sia 5 V che
0 V a P3. Poiché 5 V è sopra 1,4 V, IN3 ha memorizzato un 1, e poiché 0 V è sotto 1,4 V,
IN3 ha memorizzato uno 0.
Argomento Stato di RCTIME: In LeggiPotConRcTime.bs2, il voltaggio attraverso il
condensatore scende da quasi 5 V, e quando raggiunge 1,4 V, il valore nel registro IN7
cambia da 1 a 0. A quel punto, il comando RCTIME memorizza la sua misura nel-
l’argomento Durata, che è la variabile tempo nel programma esempio. L’argomento State
del comando RCTIME è 1 in RCTIME 7, 1, tempo, e dice al comando RCTIME che il
registro IN7 memorizzerà un 1 quando ha inizio la misura. Il comando RCTIME misura
quanto tempo si impiega perché il registro IN7 cambi allo stato opposto, cosa che accade
quando il voltaggio scende sotto la soglia logica di 1.4 V del pin I/O.
Per maggiori informazioni: Guardafe il comando RCTIME sia nel Manuale BASIC Stamp
sia nell’aiuto dell’Editor del BASIC Stamp.

La Figura 5-13 mostra come cambia il tempo di discesa con la resistenza del
potenziometro per il circuito di Figura 5-11. Ciascuna posizione dellla manopola del
potenziometro lo imposta ad una certa resistenza. Giratelo ulteriormente in una direzione
e la resistenza aumenta, e nell’altra direzione la resistenza dminuisce. Quando la
resistenza è maggiore, la discesa prende un tempo più lungo, e il comando RCTIME
memorizza un valore più grande nella variabile tempo. Quando la resistenza è minore, la
discesa impiega un tempo minore, e il comando RCTIME memorizza un valore più piccolo
nella variabile tempo. Il comando DEBUG in LeggiPotConRcTime.bs2 visualizza la
misura di questo tempo nel terminale di Debug, e dal momento che il tempo di discesa
cambia con la resistenza del potenziometro, che a sua volta cambia con la posizione della
Pagina 168 · Che cosa è un microcontrollore?

manopola del potenziometro, il numero nel terminale di Debug indica la posizione della
manopola.

Meno Più resistenza. Tem- Figura 5-13


resistenza. po discesa più lungo Come la resistenza del
Tempo d. più potenziometro agisce sul
corto tempo di discesa

Perché il condensatore si carica ad un voltaggio più basso quando il potenziometro


ha resistenza minore?
Date un’occhiata allo schema nell’angolo superiore sinistro della Figura 5-12 a pagina 166.
Senza la resistenza da 220 Ω, il pin I/O riuscirebbe a caricare il condensatore a 5 V, ma la
resistenza da 220 Ω è necessaria per evitare un possibile danno al pin I/O da un afflusso di
corrente quando il condensatore inizia a caricarsi. Essa evita anche al potenziometro di
assorbire troppa corrente se è portato a 0 Ω mentre il pin I/O invia il suo segnale alto di 5 V.
Con i 5 V applicati sulla resistenza da 220 Ω in serie al potenziometro, il voltaggio ai suoi
capi dovrebbe essere una frazione di 5 V. Quando due resistenze che conducono corrente
sono poste in serie, e da questo risulta un voltaggio intermedio, il circuito è chiamato
divisore (o partitore) di tensione. Quindi la resistenza da 220 Ω e il potenziometro formano
un circuito divisore di tensione, e per ciascun valore di resistenza del potenziometro (Rpot),
per calcolare il voltaggio (tensione) ai capi del potenziometro (Vpot), potete usare questa
equazione:
Vpot = 5 V × Rpot ÷ (Rpot + 220 Ω)
Il valore di Vpot pone il limite superiore al voltaggio sul condensatore. In altri termini,
qualsiasi valore abbia il voltaggio ai capi del potenziometro se il condensatore non fosse
collegato, questo sarebbe il voltaggio al quale il condensatore si caricherebbe, e non di più.
Per la maggior parte degli intervalli della manopola del potenziometro, i valori di resistenza
sono nella gamma dei kΩ, e quando calcolate Vpot per valori di Rpot in kΩ, i risultati sono
molto vicini ai 5 V. La resistenza da 220 Ω non evita che Vpot si carichi sopra 1,4 V fin
quando il valore del potenziometro è al di sotto di 85,6 Ω, che è meno del 1% della gamma
di movimento del potenziometro. Questo 1% avrebbe avuto il risultato delle misure
comunque più basse, quindi non è difficile dire che una misura di 1 in questa gamma sia
qualcosa fuori dall’ordinario. Perfino con l’aggiunta di resistenze da 220 Ω incorporate nelle
connessioni dei pin I/O sulla scheda BASIC Stamp HomeWork, è influenzato soltanto il
minimo 1,7% della gamma del potenziometro, quindi è ancora virtualmente trascurabile.
Pertanto la resistenza da 220 Ω protegge il pin I/O, con impatto minimo sulla capacità di
misurare la discesa RC per dirvi dove avrete posizionato la manopola del potenziometro.
Misure di rotazione · Pagina 169

ATTIVITÀ #4: CONTROLLO DI UN SERVO CON UN POTENZIOMETRO


Joystick a pollice simili a quello di Figura 5-14 si trovano comunemente nei controllori di
video giochi. Ciascuna manopola ha – di solito – due potenziometri che permettono
all’elettronica interna al controllore del gioco di riportare la posizione del joystick sulla
console del video gioco. Un potenziometro ruota con il movimento orizzontale
(sinistra/destra) del joystick, e l’altro ruota con il movimento verticale (Avanti/indietro)
del joystick.

Potenziometro
Horizontal Figura 5-14
orizzontale
potentiometer
Potenziometri interni al
modulo Parallax Thumb
Joystick (Joystick a
pollice)
Potenziometro
Vertical
verticale
potentiometer

Un’altra applicazione del joystick a pollice che usa i potenziometri è il controllore radio
RC e l’aero-modello in Figura 4-1 a pagina 100. Il controllore ha due joystick, e
ciascuno ha due potenziometri. La posizione di ciascun potenziometro è responsabile del
controllo di un diverso servo sull’aereo RadioComandato.

In questa attività, userete un potenziometro simile a quelli che si trovano nei joystick a
pollice per controllare la posizione di un servo. Quando ruotate la manopola del
potenziometro, il quadrilatero del servo rispecchierà questo movimento. Questa attività
utilizza due circuiti, il circuito potenziometrico della figura 5-5 a pagina 100 in questo
capitolo, e il circuito del servo dalla attività #6, pagina 100, Capitolo 4. Il programma
PBASIC descritto in questo capitolo misura ripetutamente la posizione del potenziometro
con un comando RCTIME, ed usa poi la misura e un po’ di matematica per controllare la
posizione del servo con un comando PULSOUT.
Pagina 170 · Che cosa è un microcontrollore?

Il BASIC Stamp può misurare la posizione del joystick. Dato che in ciascuno dei joystick
a pollice ci sono due potenziometri, ciascuno di essi può sostituire il potenziometro isolato
nei circuiti in Figura 5-11 a pagina 163. Un comando RCTIME può quindi misurare la
posizione del potenziometro verticale, ed un altro comando può misurare la posizione del
potenziometro orizzontale.

Parti del Servo controllato da potenziometro


(1) Potenziometro – 10 kΩ
(1) Resistenza – 220 Ω (rosso-rosso-marrone)
(1) Resistenza – 470 Ω (giallo-viola-marrone)
(1) Condensatore – 0,1 µF
(1) Servo Standard Parallax
(1) LED – qualsiasi colore
(2) Cavallotti di filo

Agli utenti di scheda HomeWork Board occorreranno anche:

(1) Capicorda maschio-maschio a 3-pin


(4) Cavallotti di filo

Costruzione dei circuiti del Quadrante e del Servo


Questa attività userà due circuiti che avete già costruito singolarmente: il circuito del
potenziometro dall’attività che avete appena completato e il circuito del servo dal
capitolo precedente.

 Lasciate nella vostra area prototipi il vostro circuito del potenziometro a tempo
RC dalla attività #3. Se occorre ricostruirlo, usate la Figura 5-11 a pagina 163.
Assicuratevi di usare il condensatore da 0,1 µF, non il condensatore da 0,01 µF.
 Aggiungete al progetto il vostro circuito servo dall’attività #1 del cap. 4.
Ricordate che il vostro circuito servo sarà diverso a seconda della scheda che
uitilizzate. Qui sotto ci sono i capitoli dove vi serve di saltare:
o Pagina 103: Circuito Servo per la Board of Education
o Pagina 106: Circuito Servo per la HomeWork Board BASIC Stamp
Misure di rotazione · Pagina 171

Programmazione del controllo del Servo con un potenziometro


Vi occorreranno il valore minimo e massimo della variabile tempo che avete registrato
dal vostro circuito a tempo RC mentre usavate il condensatore da 0,1 µF.

 Se non avete ancora completato il capitolo “Il vostro turno” dell’attività


precedente, tornate indietro e completatela adesso.

Per questo esempio che segue, ecco i valori di tempo che sono stati misurati da un tecnico
Parallax; i vostri valori saranno probabilmente leggermente diversi:

 Tutto in senso orario: 1


 Tutto in senso antiorario: 691

Adesso, come potranno essere regolati questi valori di ingresso in modo che si adattino
all’intervallo 500–1000 per controllare il servo con un comando PULSOUT? La risposta è
utilizzando moltiplicazione e addizione. Prima di tutto, moltiplicate i valori di ingresso
per qualcosa per rendere la differenza tra il valore in senso orario (minimo) e quello in
senso antiorario (massimo) uguale a 500 invece di circa 700. Quindi, sommate un valore
costante al risultato in modo che il suo intervallo sia tra 500 e 1000 invece che tra 1 e
500. In elettronica, queste operazioni si chiamano scalatura o riduzione in scala
(scaling) e offset.

Ecco come si opera matematicamente per la moltiplicazione (riduzione in scala):

500
tempo ( massimo)  691  691 0,724  500
691
500
tempo (minimo )  1  0.,724
691

Dopo che i valori sono stati scalati, ecco il passo dell’addizione (offset).

tempo (massimo )  500  500  1000



tempo (minimo )  .0 ,724 +500  500
Pagina 172 · Che cosa è un microcontrollore?

L’operatore */ , che era stato introdotto a pagina 90, è incorporato nel PBASIC per la
riduzione in scala di valori frazionari, come 0,724. Qui sono riportati di nuovo i passi per
usare */ applicato a 0,724:

1. Porre il valore o la variabile che volete moltiplicare per un valore frazionario


prima dell’operatore */.
tempo = tempo */

2. Prendete il valore frazionario che volete usare e moltiplicatelo per 256.

  256 . 185 344


nuovo valore frazionario. =0,724

3. Arrotondatelo per eliminare le cifre a destra della virgola.

nuovo valore frazionario  185

4. Porre quel valore dopo l’operatore */.


tempo = tempo */ 185

Questo effettua la scalatura, ora tutto quello che ci occorre fare è aggiungere l’offset di
500. Ciò può essere fatto con un secondo comando che aggiunge 500 a tempo:
tempo = tempo */ 185
tempo = tempo + 500

Adesso, tempo è pronto ad essere reinserito nell’argomento Durata del comando


PULSOUT.

tempo = tempo */ 185 ' Scalatura per 0,724.


tempo = tempo + 500 ' Offset per 500.
PULSOUT 14, tempo ' Invia impulso al servo.

Programma esempio: ControlloServoConPot.bs2


 Digitate ed eseguite questo programma, quindi ruotate la manopola del
potenziometro e assicuratevi che i movimenti del servo facciano eco ai
movimenti del potenziometro.
Misure di rotazione · Pagina 173

' Che cos’è un microcontrollore - ControlloServoConPot.bs2


' Legge il potenziometro nel circuito tempo RC usando il comando RCTIME.
' Scala il tempo di 0,724 e aggiunge un offset di 500 per il servo.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000
DEBUG "Il programma è in esecuzione!"

tempo VAR Word

DO

HIGH 7
PAUSE 10
RCTIME 7, 1, tempo
tempo = tempo */ 185 ' Scala per 0,724 (X 256 per */).
tempo = tempo + 500 ' Offset di 500.
PULSOUT 14, tempo ' Manda impulso al servo.

LOOP

Il vostro turno – Scalatura della relazione tra Servo e Quadrante


Il vostro potenziometro e il condensatore vi daranno probabilmente valori di tempo che
sono un po’ diversi da quelli citati in questa attività. Questi sono i valori che avete
raccolto nel capitolo “Il vostro turno” dell’attività precedente.

 Ripetete i calcoli discussi nel capitolo Programmazione del controllo del Servo
con un potenziometro a pagina 171 usando i vostri valori massimo e minimo.
 Sostituite i vostri valori di scalatura ed offset in ControlloServoConPot.bs2.
 Cambiate in commento la DEBUG "Il programma è in esecuzione!"
aggiungendo un apostrofo all’inizio di quella riga.
 Aggiungete questa linea di codice tra i comandi PULSOUT e LOOP in modo da
poter vedere il vostro risultato:

DEBUG HOME, DEC5 tempo 'Visualizza valore regolato di tempo.

 Eseguite il programma modificato e controllate il vostro lavoro. Poiché i valori


sono arrotondati per difetto, i limiti possono non coincidere esattamente con 500
e 1000, ma dovrebbero esservi molto vicini.
Pagina 174 · Che cosa è un microcontrollore?

Dichiarazione di costanti e direttive di Pin


In programmi più grossi, potrete usare i valori del fattore di scala (che era 185) e
dell’offset (che era 500) molte volte nel corso del programma. Numeri come 185 e 500
nel vostro programma sono chiamati costanti perché, a differenza delle variabili, i loro
valori non possono essere cambiati mentre il programma viene eseguito. In altri termini,
il valore rimane “costante.” Potete creare nomi per queste costanti con direttive CON:
FattoreScala CON 185
Offset CON 500
ritardo CON 10

Queste direttive CON sono quasi sempre dichiarate vicino all’inizio del programma in
modo che sia facile trovarle.

Non appena i valori delle vostre costanti hanno ricevuto un nome tramite le direttive CON,
nel vostro programma potrete usare FattoreScala al posto di 185 e Offset al posto di
500. Per esempio:
tempo = tempo */ FattoreScala ' Scala per 0,724.
tempo = tempo + offset ' Offset di 500.

Con i valori che abbiamo assegnato ai nomi di costanti con le direttive CON, i comandi
sono in realtà:
tempo = tempo */ 185 ' Scala per 0,724.
tempo = tempo + 500 ' Offset di 500.

Un vantaggio importante nell’uso di costanti è quello di poter cambiare una direttiva CON,
e questa aggiorna ogni istanza di quel nome di costante in tutto il vostro programma. Per
esempio, se scrivete un grosso programma che usa la costante FattoreScala in 11 posti
differenti, un cambio a FattoreScala CON…, e tutte le istanze di FattoreScala nel
voatro programma useranno quel valore aggiornato nel successivo scarico del
programma. Quindi, se cambiate FattoreScala CON 500 in FattoreScala CON 510,
ogni comando contenente FattoreScala userà 510 invece di 500.

Potete anche dare nomi ai pin I/O usando direttive PIN. Per esempio, potete dichiarare
una direttiva PIN per il pin I/O P7 come la seguente:
PinRc PIN 7
Misure di rotazione · Pagina 175

Ci sono due posti nel programma esempio precedente dove il numero 7 è usato per fare
riferimento al pin I/O P7. Il primo può ora essere scritto come:
HIGH PinRc

Il secondo può essere scritto come:


RCTIME PinRc, 1, tempo

Se in un secondo tempo cambiate il vostro circuito per usare pin I/O differenti, tutto ciò
che dovete fare è cambiare il valore nella vostra direttiva PIN, e sia il comando HIGH che
il comando RCTIME saranno aggiornati automaticamente. Analogamente, se dovete
ricalibrare il vostro fattore di scala o l’offset, potete anche qui cambiare semplicemente le
direttive CON all’inizio del programma.

La direttiva PIN ha una caratteristica aggiuntiva: Il compilatore PBASIC può rilevare se il


nome del pin è usato in input o in output, ed essa sostituisce o il numero di pin I/O per
l’output, o la variabile bit del corrispondente registro di input per l’input. Per esempio, potete
dichiarare due direttive pin, come PinLed PIN 14 e PinButton PIN 3. Allora, il vostro
codice potrà contenere una frase come IF PinButton = 1 THEN HIGH PinLed. Il
compilatore PBASIC converte questa frase in IF IN3 = 1 THEN HIGH 14. La frase IF
PinButton = 1… ha fatto un confronto, e il compilatore PBASIC sa che voi state usando
PinButton come input. Quindi esso usa il bit IN3 del registro di input invece del numero
3. Analogamente, il compilatore PBASIC sa che HIGH PinLed usa il nome pin PinLed
come il valore costante 14 per una operazione di uscita, così gli sostituisce HIGH 14.

Programma esempio: ControlloServoConPotEUsoDirettive.bs2


Questo programma lavora proprio come ControlloServoConPot.bs2 ma fa uso delle
costanti e dei pin I/O con nome.

 Digitate ed eseguite ControlloServoConPotEUsoDirettive.bs2.


 Osservate come il servo risponde al potenziometro e verificate che si comporti
nello stesso modo che in ControlloServoConPot.bs2.

' Che cos’è un microcontrollore - ControlloServoConPotEUsoDirettive.bs2


' Legge il potenziometro in circuito tempo-RC usando il comando RCTIME.
' Applica fattore scala e offset, quindi invia valore al servo.

' {$STAMP BS2}


' {$PBASIC 2.5}

PinRC PIN 7 ' Definizioni Pin I/O


Pagina 176 · Che cosa è un microcontrollore?

PinServo PIN 14

FattoreScala CON 185 ' Dichiarazioni di Costanti


offset CON 500
ritardo CON 10

tempo VAR Word ' Dichiarazioni di Variabile

PAUSE 1000 ' Inizializzazione

DO
' Routine principale (Main)
HIGH PinRC ' Misura decadimento RC
PAUSE ritardo
RCTIME PinRC, 1, tempo
tempo = tempo */ FattoreScala ' Scalatura x FattoreScala.
tempo = tempo + offset ' Offset x offset.
PULSOUT PinServo, tempo ' Invia impulso a servo.
DEBUG HOME, DEC5 tempo ' Visualizza valore tempo corretto.

LOOP

Il vostro turno – Aggiornamento di una direttiva PIN


Come è stato ricordato prima, se collegate il circuito RC ad un pin I/O diverso, potete
semplicemente cambiare il valore della direttiva PIN PinRC, e questo cambiamento si
riflette automaticamente nei comandi HIGH PinRC e RCTIME PinRC, 1, tempo.

 Memorizzate il programma esempio con un nuovo nome.


 Cambiate FattoreScala e offset nei valori propri del vostro circuito RC che
avete determinato nel capitolo precedente “Il vostro turno”.
 Eseguite il programma modificato e verificate che lavori correttamente.
 Modificate il vostro circuito muovendo la connessione del circuito tempo-RC dal
pin I/O P7 al pin I/O P8.
 Modificate la dichiarazione PinRC in modo che sia:
PinRC PIN 8

 Rieseguite il programma e verificate che i comandi HIGH ed RCTIME funzionino


ancora correttamente sul pin I/O differente con il solo cambiamento fatto alla
direttiva PinRC PIN.
Misure di rotazione · Pagina 177

SOMMARIO
Questo capitolo ha introdotto il potenziometro, un componente usato spesso sotto varie
manopole e dischi a quadrante. Il potenziometro ha un elemento resistivo connesso di
solito ai suoi due terminali esterni e un terminale mobile che fa contatto con un punto
variabile dell’elemento resistivo. Il potenziometro può essere utilizzato come resistenza
variabile se in un circuito si utilizzano il terminale mobile ed uno dei due terminali
esterni.

In questo capitolo è stato introdotto anche il condensatore. Un condensatore può essere


usato per immagazzinare e rilasciare carica elettrica. La quantità di carica che un
condensatore può immagazzinare è relativa al suo valore, che si misura in farad, (F). Il
simbolo µ è la notazione ingegneristica per micro, e significa un milionesimo. I
condensatori utilizzati nelle attività di questo capitolo vanno da 0,01 a 3300 µF.

Una resistenza e un condensatore si possono collegare assieme in un circuito che prende


una certa quantità di tempo per caricarsi e scaricarsi. Questo circuito è detto
comunemente circuito a tempo RC. Le lettere R e C in un circuito a tempo RC stanno
per resistenza e condensatore. Quando un valore (C nelle attività di questo capitolo) è
mantenuto costante, il cambiamento di tempo che il circuito impiega a scaricarsi è legato
al valore di R. Quando il valore di R cambia, il valore del tempo che il circuito impiega a
caricarsi e scaricarsi cambia anch’esso. Il tempo complessivo che il circuito a tempo RC
impiega a scaricarsi può essere scalato impiegando un condensatore di dimensione
diversa.

E’ stato usato un sondaggio per controllare il tempo di scarica di un condensatore in un


circuito RC con un valore di C molto grande. Per mostrare come cambia il tempo di
scarica quando cambia il valore della resistenza nel circuito, sono state usate molte
resistenze di diverso valore. È stato poi usato il comando RCTIME per controllare un
potenziometro (una resistenza variabile) in un circuito a tempo RC con condensatori di
capacità più piccole. Nonostante questi condensatori facciano sì che i tempi di scarica
varino da circa 2 a 1500 µs (milionesimi di secondo), il BASIC Stamp non ha problemi a
registrare queste misure con il comando RCTIME. Il pin I/O deve essere impostato ad
HIGH, e quindi si deve permettere al condensatore nel circuito a tempo RC di caricarsi
usando un comando PAUSE prima di poter usare il comando RCTIME.

Si può utilizzare la programmazione PBASIC per misurare un sensore resistivo come un


potenziometro e scalare il suo valore in modo che sia utile ad un altro dispositivo, come
ad esempio un servo. Ciò comporta l’esecuzione di operazioni matematiche sul tempo di
Pagina 178 · Che cosa è un microcontrollore?

scarica RC misurato, che il comando RCTIME memorizza in una variabile. Il valore di


questa variabile può essere corretto aggiungendogli un valore costante, cosa conveniente
per il controllo di un servo. Nel capitolo Progetti, potrete usare altrettanto moltiplicazione
e divisione.
All’inizio di un programma, per sostituire un nome a un valore costante (un numero) si
può usare la direttiva CON. Dopo che una costante ha ricevuto un nome, in tutto il
programma si potrà usare quel nome al posto del numero. Questo fatto può risultare
comodo, specialmente se vi occorre usare lo stesso numero in 2, 3, o persino 100 posti
diversi nel programma. Potete cambiare il numero nella direttiva CON, e tutte le 2, 3, o
persino le 100 istanze differenti di quel numero sono aggiornate automaticamente la
successiva volta che eseguirete il programma. La direttiva PIN vi consente di nominare i
pin I/O. Il nome di un pin I/O è sensibile al contesto, quindi il compilatore PBASIC
sostituisce il numero del corrispondente pin I/O quando trova un nome di pin in comandi
come HIGH, LOW, ed RCTIME. Se il nome di pin è usato in una frase condizionale, gli
sostituisce il registro di input corrispondente, come IN2, IN3, ecc.

Domande
1. Quando ruotate una manopola o un disco in un sistema audio, quale tipo di
componente state molto probabilmente regolando?
2. In un tipico potenziometro, la resistenza tra i due terminali esterni è regolabile?
3. In che cosa un condensatore è simile ad una batteria ricaricabile? In che cosa è
diverso?
4. Che cosa potete fare in un circuito a tempo RC per acquisire una indicazione del
valore di una resistenza variabile?
5. Che cosa accade al tempo di scarica RC quando il valore di R (la resistenza)
diventa più grande o più piccolo?
6. Che cosa fa la direttiva CON? Spiegatelo in termini di nome e numero.

Esercizio
1. Diciamo che avete un condensatore da 0,5 µF in un circuito temporizzatore RC,
e volete che la misura (del tempo RC) diventi 10 volte più lunga. Calcolate il
valore del nuovo condensatore.

Progetti
1. Aggiungete un circuito con un LED bicolore a quello di fig. 5.11. Modificate il
programma esempio in modo che il LED bicolore sia rosso quando il servo sta
Misure di rotazione · Pagina 179

ruotando in senso antiorario, verde quando il servo sta ruotando in senso orario,
ed è spento (off ) quando il servo mantiene la sua posizione.
2. Usate IF...THEN per modificare il primo programma esempio della Attività #4
in modo che il servo ruoti soltanto tra i valori di PULSOUT 650 e 850.

Soluzioni
D1. Un potenziometro.
D2. No, è fissa. La resistenza è variabile tra qualsiasi dei terminali esterni e il
terminale mobile (intermedio).
D3. Un condensatore è simile ad una batteria ricaricabile nel fatto che può essere
caricato per mantenere un determinato voltaggio. Ls differenza è che mantiene
una carica soltanto per un tempo molto breve.
D4. Potete misurare il tempo che il condensatore impiega per scaricarsi (o caricarsi).
Questo tempo è collegato ai valori della resistenza e della capacità. Se la capacità
è nota e la resistenza è variabile, allora il tempo di scarica dà una indicazione
della resistenza.
D5. Quando la resistenza R aumenta, il tempo di scarica RC aumenta in proporzione
diretta all’aumento di R. Quando R diventa più piccola, il tempo di scarica RC
diminuisce in proporzione diretta alla diminuzione di R.
D6. La direttiva CON sostituisce un nome ad un numero.
E1. Nuova cap = (10 x vslore vecchia cap) = (10 x 0,5µF) = 5 µF
P1. Attività #4 con aggiunta di un LED bicolore.
P13
1
Schema del potenziometro dalla Figura
5-11 a pagina 163, servo dalla attività 4,
pagina 169, e LED bicolore da Figura 2-19
2 a pagina 57 con P15 e P14 cambiati in P13
P12 e P12 come indicato.
470

' Che cos’è un microcontrollore – Cap05Pr01_ControlloServoConPot.bs2


' Legge potenziometro in circuito a tempo RC usando un comando RCTIME.
' La var tempo varia tra 126 e 713, ed occorre un offset di 330.
' Il LED bicolore in P12, P13 dice la direzione di rotazione servo:
' verde per CW (oraria), rosso per CCW (antioraria), spento (off)
' quando il servo sta mantenendo la sua posizione.
' {$STAMP BS2}
' {$PBASIC 2.5}

PAUSE 1000
DEBUG "Il programma è in esecuzione!"
Pagina 180 · Che cosa è un microcontrollore?

tempo VAR Word ' lettura tempo da pot


TempoPrec VAR Word ' lettura precedente

DO

TempoPrec = tempo ' Memorizza lettura tempo preced.


HIGH 7 ' Legge pot usando RCTIME
PAUSE 10
RCTIME 7, 1, tempo
tempo = tempo + 350 ' Scala pot, incontra range servo
IF (tempo > TempoPrec + 2) THEN ' se cresce, pot ruota CCW
HIGH 13 ' LED bicolore rosso
LOW 12
ELSEIF (tempo < TempoPrec - 2) THEN ' valore calato, pot ruota CW
LOW 13 ' LED bicolore verde
HIGH 12
ELSE ' Servo mantiene posizione
LOW 13 ' LED spento (off)
LOW 12
ENDIF

PULSOUT 14, tempo

LOOP

P2. Il punto chiave è aggiungere il blocco IF...THEN; un esempio è mostrato qui


sotto. CLREOL è un utile carattere di controllo DEBUG che significa “cancella fino
a fine riga.”

' Che cos’è un microcontrollore - Cap5Pr02_ControlloServoConPot.bs2


' Legge potenziometro in circuito a tempo RC usando un comando RCTIME.
' Modificato con IF…THEN in modo che servo ruota solo tra 650 e 850.
' La variabile tempo varia tra 1 e 691, quind serve un offset di
' almeno 649.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000

DEBUG "Il programma è in esecuzione!"

Tempo VAR Word

DO

HIGH 7 ' Legge pot con RCTIME


PAUSE 10
Misure di rotazione · Pagina 181

RCTIME 7, 1, tempo
tempo = tempo + 649 ' Scala tempo a range servo

IF (tempo < 650) THEN ' Limita range da 650 a 850


tempo = 650
ENDIF
IF (tempo > 850) THEN
tempo = 850
ENDIF

PULSOUT 14, tempo


DEBUG HOME, "tempo = ", DEC4 tempo, CLREOL

LOOP
Misure di Luce · Pagina 183

Capitolo 6: Display digitale


IL DISPLAY DIGITALE QUOTIDIANO
La Figura 6-1 mostra un display posto sullo sportello anteriore di un forno. Quando il
forno non è in uso, il display visualizza l’ora. Quando il forno è in uso, visualizza il
temporizzatore del forno, le predisposizioni di cottura, e lampeggia spento – acceso
contemporaneamente, al suono di un allarme, per farvi sapere che il cibo è cotto. Un
microcontrollore all’interno dello sportello del forno controlla i pulsanti e aggiorna il
display. Controlla inoltre i sensori all’interno del forno e commuta i dispositivi che
accendono e spengono (on ed off) gli elementi riscaldatori.

Figura 6-1
Display a 7 segmenti
orologio digitale sullo
sportello di un forno

Ciascuna delle tre cifre in Figura 6-1 è chiamata display a 7 segmenti. In questo capitolo,
programmerete il BASIC Stamp per visualizzare numeri e lettere su un display a 7
segmenti.

CHE COSA E’ UN DISPLAY A 7 SEGMENTI?


Un display a 7 segmenti è un blocco rettangolare di 7 porzioni di riga della stessa
lunghezza che possono essere accese, scegliendo i LED, per visualizzare cifre e alcune
lettere. La Figura 6-2 mostra un disegno di parte del display LED a 7 segmenti che
userete nelle attività di questo capitolo. Il display ha anche un punto usabile come punto
decimale. Ciascuno dei segmenti (da A fino a G) e il punto contengono un LED separato,
che si può controllare singolarmente. La maggior parte dei pin ha un numero con una
etichetta che corrisponde ad uno dei segmenti LED. Il pin 5 è etichettato DP, che
significa punto decimale. I pin 3 e 8 sono etichettati “catodo comune” e saranno spiegati
quando verrà introdotto lo schema elettrico di questo componente.
Pagina 184 · Che cosa è un microcontrollore?

Catodo
Comune
10 9 8 7 6
G F A B

A
F B
G Figura 6-2
Disegno di parte e mappa dei pin del
E C
Display LED a 7 segmenti
D

E D C DP

1 2 3 4 5
Catodo
Comune

Mappa dei pin: La Figura 6-2 è un esempio di mappa dei pin. Una mappa dei pin contiene
informazioni utili che vi aiutano a collegare un componente a diversi circuiti. Le mappe dei
pin di solito mostrano per ciascun pin un numero, un nome, e un riferimento.
Guardate la Figura 6-2. Ciascun pin è numerato, e il nome di ciascun pin è la lettera del
segmento vicina al pin. Il riferimento per questo componente è il punto decimale. Orientate
il componente in modo che il punto decimale sia in basso a destra. Potrete allora vedere
dalla mappa dei pin che il Pin 1 è in basso a sinistra, e il numero del pin aumenta
muovendosi intorno all’involucro in senso antiorario.

La Figura 6-3 mostra lo schema dei LED all’interno del display LED a 7 segmenti.
L’anodo di ciascun LED è connesso ad un singolo pin. Tutti i catodi sono collegati
assieme da fili interni alla parte. Poiché tutti i catodi condividono il collegamento, il
display LED a 7 segmenti può essere detto display a catodo comune. Collegando il pin 3
o il pin 8 della parte a Vss, collegherete tutti i catodi dei LED a Vss.
Misure di Luce · Pagina 185

1 4 6 7 9 10 5

E C B A F G DP

Figura 6-3
Schema del Display
LED’s
LED a 7 segmenti

3 8

ATTIVITÀ #1: COSTRUZIONE E PROVA DEL DISPLAY A LED A 7


SEGMENTI
In questa attività, costruirete a mano i circuiti per provare ciascun segmento nel display.

Parti per la prova dei LED del display a 7 segmenti


(1) display LED a 7 segmenti
(5) Resistenze – 1 kΩ (marrone-nero-rosso)
(1) Cavallotto di filo

Circuiti di prova del display a LED a 7 segmenti


 Con l’energia (alimentazione) scollegata dalla vostra Board of Education o
HomeWork Board, costruite il circuito mostrato in Figura 6-4 e Figura 6-5.
 Ricollegate energia e verificate che il segmento A emetta luce.

Cosa vuol dire nello schema la x con il simbolo nc sopra di essa? Il simbolo nc significa
non collegato o nessuna connessione. Indica che un particolare pin sul display LED a 7
segmenti non è connesso a niente. La x all’estremità del pin significa anch’essa non
connesso. Gli schemi a volte usano soltanto la x o soltanto il nc.
Pagina 186 · Che cosa è un microcontrollore?

Vdd

1 k

nc nc nc nc nc nc nc
X

X
1 4 6 7 9 10 5 Figura 6-4
E C B A F G DP Schema del circuito di
prova per il segmento
“A” del Display a LED

LED’s

3 X 8

nc
Vss
P0
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
P13
P14
P15
X2

X3
Vdd Figura 6-5
Diagramma di cablaggio
Vin

del circuito di prova per


il segmento “A” del
display a LED
Vss

 Scollegate l’energia, e modificate il circuito collegando la resistenza all’ingresso


del LED B come mostrato in Figura 6-6 e Figura 6-7.
Misure di Luce · Pagina 187

Vdd

1 k

nc
X nc nc nc nc nc nc

X
1 4 6 7 9 10 5 Figura 6-6
E C B A F G DP Schema del circuito di
prova per il segmento
”B” del Display a LED

LED’s

3 8

X
nc
Vss
P0
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
P13
P14
P15
X2

X3
Vdd
Figura 6-7
Diagramma di cablaggio
Vin
del circuito di prova per
il segmento “B” del
display a LED
Vss

 Ricollegate energia e verificate che il segmento B emetta luce.


 Usando la mappa dei pin dalla Figura 6-2 come guida, ripetete questi passi per i
segmenti da C fino a G.
Pagina 188 · Che cosa è un microcontrollore?

Il vostro turno – Il Numero 3 e la Lettera H


La Figura 6-8 e la Figura 6-9 mostrano la cifra “3” cablata entro il display LED a 7
segmenti.
Vdd Vdd Vdd Vdd Vdd

1 kall)

nc nc nc
X

X
1 4 6 7 9 10 5
Figura 6-8
E C B A F G DP Cablaggio della
Cifra “3”

LED’s

3 8
X

nc
Vss
P0
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
P13
P14
P15
X2

X3
Vdd

Figura 6-9
Vin

Diagramma di
cablaggio per la
Figura 6-8
Vss

 Costruite e provate il circuito mostrato in Figura 6-8 e Figura 6-9, e verificate


che esso visualizzi il numero tre.
 Disegnate uno schema che visualizzi il numero 2 sul LED a 7 segmenti.
Misure di Luce · Pagina 189

 Costruite e provate il circuito per assicurarvi che lavori. Mettetelo a punto se


necessario.
 Determinate il circuito che occorre per la lettera “H” e poi costruitelo e
provatelo.

ATTIVITÀ #2: CONTROLLO DEL DISPLAY LED A 7 SEGMENTI


In questa attività, collegherete il display LED a 7 segmenti al BASIC Stamp, e poi
eseguirete un semplice programma per provarlo e assicurarvi che ciascun LED sia
connesso in modo corretto.

Parti occorrenti per il Display LED a 7 segmenti


(1) Display LED a 7 segmenti
(8) Resistenze – 1 kΩ (marrone-nero-rosso)
(5) Cavallotti di filo

Collegamento del Display LED a 7 segmenti al BASIC Stamp


La Figura 6-11 mostra lo schema e la Figura 6-12 mostra il diagramma di cablaggio per
questo esempio di un display LED a 7 segmenti controllato dal BASIC Stamp.

 Costruite il circuito mostrato nella Figura 6-11 e nella Figura 6-12.

Schema elettrico e mappa dei pin: Se state provando a costruire il circuito dallo schema in
Figura 6-11 senza far riferimento alla Figura 6-12, accertatevi di consultare la mappa dei pin
del display LED a 7 segmenti, mostrata di nuovo qui in Figura 6-10 per convenienza.
Pagina 190 · Che cosa è un microcontrollore?

Common
Cathode

10 9 8 7 6
G F A B

A
F B
Figura 6-10
G Disegno di parte e mappa dei pin del
E C Display LED a 7 segmenti
D

E D C DP

1 2 3 4 5
Common
Cathode

1 k
(All)
P15
P14
P13
P12
P11 Figura 6-11
P10 Schema del
Display LED
P9 a 7 segmenti
P8 controllato
E C DP G F A B dal BASIC
Stamp
LED’s

common

Vss
Misure di Luce · Pagina 191

State attenti con le resistenze collegate a P13 e P14. Guardate attentamente le


resistenze connesse a P13 e P14 in Figura 6-12. C’è un intervallo tra queste due
resistenze. L’intervallo è mostrato perché il pin 8 sul display LED a 7 segmenti è lasciato
non connesso. Una resistenza connette il pin I/O P13 al pin 9 del display LED a 7
segmenti. Un’altra resistenza collega P14 al pin 7 del display LED a 7 segmenti.

DP
EDC GFAB

P0
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
P13
P14
P15
Figura 6-12

X2

X3
Diagramma di cablaggio
per la Figura 6-11

Vdd
Usate le lettere di
segmento sopra questo

Vin
diagramma come
riferimento
.

Vss
Dispositivo parallelo: Il display LED a 7 segmenti è detto dispositivo parallelo perché il
BASIC Stamp deve usare un gruppo di linee I/O per inviare dati (informazioni alte e basse)
al dispositivo. Nel caso di questo display LED a 7 segmenti, prende 8 pin I/O per istruire il
dispositivo su cosa visualizzare.
Bus parallelo : I fili che trasmettono I segnali HIGH/LOW dal BASIC Stamp al display LED
a 7 segmenti sono detti (costituiscono) un bus parallelo. Notate che questi fili sono
disegnati come linee parallele in Figura 6-11. Il termine che cita “parallelo” ha senso per la
geometria dello schema.

Programmazione della prova del Display LED a 7 segmenti


I comandi HIGH e LOW accetteranno una variabile come argomento Pin. Per provare
ciascun segmento, uno alla volta, ponete semplicemente i comandi HIGH e LOW in un ciclo
FOR...NEXT, ed usate l’indice del ciclo per impostare il pin I/O alto, poi di nuovo basso.

 Digitate ed eseguite ProvaSegmentoConAltoBasso.bs2.


Pagina 192 · Che cosa è un microcontrollore?

 Verificate che ciascun segmento nel display LED a 7 segementi si illumini


brevemente, accendendosi e poi spegnendosi di nuovo.
 Registrate un elenco di quale segmento controlli ciascun pin I/O.

Programma esempio: ProvaSegmentoConAltoBasso.bs2


' Che cos’è un microcontrollore - ProvaSegmentoConAltoBasso.bs2
' Prova singolarmente ciascun segmento in un display LED a 7 segmenti.

'{$STAMP BS2}
'{$PBASIC 2.5}

ContatorePin VAR Nib

PAUSE 1000
DEBUG "Pin I/O", CR,
"-------", CR

FOR ContatorePin = 8 TO 15

DEBUG DEC2 ContatorePin, CR


HIGH ContatorePin
PAUSE 1000
LOW ContatorePin

NEXT

Il vostro turno – Un disegno diverso


Rimuovere il commando LOW ContatorePin avrà un effetto interessante:

 Commentate (trasformate in commento) il comando LOW ContatorePin


aggiungendo un apostrofo alla sua sinistra.
 Eseguite il programma modificato ed osservatene l’effetto.

ATTIVITÀ #3: VISUALIZZAZIONE DI CIFRE


Se includete il punto decimale ci sono otto differenti pin I/O del BASIC Stamp che
inviano segnali alto/basso al display LED a 7 segmenti. Cioè a dire, per visualizzare
soltanto un numero ci vogliono otto diversi comandi HIGH o LOW. Se volete contare da
zero a nove, ciò comporterebbe una discreta quantità di linee di codice di
programmazione Fortunatamente, ci sono variabili speciali che potrete usare per
predisporre i valori alto e basso per i gruppi di pin I/O.
Misure di Luce · Pagina 193

In questa attività, userete numeri binari a 8 cifre invece dei comandi HIGH e LOW per
controllare i segnali alto/basso inviati dai pin I/O del BASIC Stamp. Impostando variabili
speciali chiamate DIRH ed OUTH uguali ai numeri binari, potrete controllare i segnali
alto/basso inviati da tutti i pin I/O connessi al circuito del display LED a 7 segmenti con
un unico comando PBASIC.

8 bit: Un numero binario che ha otto cifre si dice che ha otto bit. Ciascun bit è un deposito
dove potrete memorizzare sia un 1 sia uno 0.
Un byte è una variabile che contiene 8 bit. Ci sono 256 combinazioni differenti di zeri ed uni
che potete usare per contare da 0 a 255 con 8 bit. Questa è la ragione per cui una variabile
byte può memorizzare un numero tra 0 e 255.

Parti e circuito per visualizzare cifre


Le stesse dell’attività precedente

Programmazione di modelli On/Off usando numeri binari


In questa attività, sperimenterete le variabili DIRH ed OUTH. DIRH è una variabile che
controlla la direzione (input o output) dei pin I/O da P8 fino a P15. OUTH controlla i
segnali alto o basso che ciascuno di questi pin I/O invia. Come potrete vedere presto,
OUTH è particolarmente utile poiché potrete usarlo per impostare i segnali alto/basso per
otto differenti pin I/O in una sola volta con un unico comando Ecco un programma
esempio che mostra come si possano usare queste due variabili per contare da 0 a 9 sul
display LED a 7 segmenti senza utilizzare i comandi HIGH e LOW:

Programma esempio: VisualizzaCifre.bs2


Questo programma esempio farà ciclare (farà eseguire ripetitivamente) il display LED a 7
segmenti con le cifre dallo 0 al 9.

 Digitate ed eseguite VisualizzaCifre.bs2.


 Verificate che siano visualizzate le cifre dallo 0 fino al 9.

' Che cos’è un microcontrollore - VisualizzaCifre.bs2


' Visualizza le cifre da 0 a 9 su un display LED a 7-segmenti.

'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "Il programma è in esecuzione!"


Pagina 194 · Che cosa è un microcontrollore?

OUTH = %00000000 ' OUTH è inizializzato a basso.


DIRH = %11111111 ' Imposta P8-P15 tutti a output basso.
' Cifra:
' BAFG.CDE
OUTH = %11100111 ' 0
PAUSE 1000
OUTH = %10000100 ' 1
PAUSE 1000
OUTH = %11010011 ' 2
PAUSE 1000
OUTH = %11010110 ' 3
PAUSE 1000
OUTH = %10110100 ' 4
PAUSE 1000
OUTH = %01110110 ' 5
PAUSE 1000
OUTH = %01110111 ' 6
PAUSE 1000
OUTH = %11000100 ' 7
PAUSE 1000
OUTH = %11110111 ' 8
PAUSE 1000
OUTH = %11110110 ' 9
PAUSE 1000

DIRH = %00000000 ' pin I/O ad input,


' segmenti spenti (off).
END

Come lavora VisualizzaCifre.bs2


La Figura 6-13 mostra come potete usare le variabili DIRH ed OUTH per controllare la
direzione e lo stato (alto/basso) dei pin I/O da P8 fino a P15.
Misure di Luce · Pagina 195

Vss
Vin
Figura 6-13
Usiare DIRH ed OUTH

Vdd
per impostare ttutti i pin
I/O a Output-basso

X3

X2
P15
P14
P13
P12

P10
P11

P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
OUTH = %00000000
DIRH = %11111111
Il primo comando:
OUTH = %00000000

...rende tutti i pin I/O (da P8 fino a P15) pronti ad inviare segnali bassi. Se tutti inviano
segnali bassi, essi commuteranno tutti i LED nel display LED a 7 segmenti in off
(spento). Se volevate che tutti i pin I/O inviino un segnale alto, potete usare invece OUTH
= %11111111.

Che cosa fa %? Il formattatore binario % è usato per dire all’Editor del BASIC Stamp che il
numero è un numero binario. Per esempio, il numero binario %00001100 è la stessa cosa
del numero decimale 12. Come vedrete in questa attività, i numeri binari possono rendere
molti compiti di programmazione molto più facili.

I segnali bassi non saranno realmente inviati dai pin I/O fin quando non usiate la variabile
DIRH per cambiare tutti i pin I/O da input ad output. Il comando:

DIRH = %11111111

...imposta i pin I/O da P8 fino a P15 ad output. Non appena questo comando viene
eseguito, i pin da P8 fino a P15 iniziano tutti ad inviare segnali bassi. Questo avviene
perché il comando OUTH = %00000000 era stato eseguito proprio prima di quel comando
DIRH. Non appena il comando DIRH imposta tutti i pin I/O ad output, essi iniziano ad
Pagina 196 · Che cosa è un microcontrollore?

inviare i loro segnali bassi. Per cambiare tutti i pin I/O da capo ad input, potete anche
usare DIRH = %00000000.

Prima che i pin I/O diventino outputs: Fin quando i pin I/O vengono cambiati da input ad
output, essi ascoltano soltanto se arrivano segnali ed aggiornano la variabile INH. Questa è
la variabile che contiene IN8, IN9, e così via fino a IN15. Queste variabili possono essere
utilizzate allo stesso modo di come erano state usate IN3 ed IN4 per leggere i pulsanti in
Ingresso Digitale – Pulsanti (capitolo 3).
Tutti i pin I/O del BASIC Stamp iniziano a funzionare come inputs. Questa proprietà è
detta di default. Dovete dire voi ad un pin I/O del BASIC Stamp di diventare un output prima
che inizi ad inviare un segnale alto o basso. Entrambi i comandi HIGH e LOW cambiano
automaticamente la direzione di un pin I/O del BASIC Stamp ad output. Anche il porre un 1
nella variabile DIRH rende uno dei pin I/O un output.
Impostate sempre i valori in un dato registro di OUT prima di renderli outputs con i
valori nel corrispondente registro DIR. Ciò previene brevemente l’invio di segnali
indesiderati. Ad esempio, se DIR5 = 1 è seguito da OUT5 = 1 all’inizio di un programma,
questo invierà brevemente un segnale basso indesiderato prima di commutarlo ad alto
poiché OUT5 memorizza 0 quando il programma parte. (Tutte le variabili e i registri PBASIC
sono inizializzati a 0.) Se OUT5 = 1 è seguito invece da DIR5 = 1, il pin I/O invierà un
segnale alto non appena diviene un output.
Poiché i valori memorizzati da tutte le variabili sono di default 0 quando il
programma parte, il comando OUTH = %00000000 è in realtà ridondante.

La Figura 6-14 mostra come usare la variabile OUTH per inviare selettivamente segnali alti
e bassi ai pin da P8 fino a P15. Per inviare un segnale alto si usa un 1 binario, e per
inviare un segnale basso si usa uno 0 binario. Questo esempio visualizza il numero tre
sul display LED a 7 segmenti:

' BAFG.CDE
OUTH = %11010110
Misure di Luce · Pagina 197

Vss
Vin
Figura 6-14
Usio di OUTH per

Vdd
controllare i segnali
Alto/Basso di P8 – P15

X3

X2
P15
P14
P13
P12

P10
P11

P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
‘ BAFG.CDE
OUTH = %11010110
Il display è acceso in modo che il tre sul display è a testa in giù poiché questo mostra più
chiaramente come i valori in OUTH si allineano con i pin I/O. Il comando
OUTH = %11010110 usa degli zeri binari per impostare i pin I/O P8, P11, e P13 bassi, e
usa degli uni binari per impostare P9, P10, P12, P14 e P15 alti. La riga proprio prima del
comando è un commento che mostra le etichette del segmento allineate con il valore
binario che accende/spegne il segmento on/off.
Entro i comandi HIGH e LOW:
HIGH 15 ...è in realtà identico a: OUT15 = 1
DIR15 = 1
Analogamente, il commando :
LOW 15 ...è lo stesso che: OUT15 = 0
DIR15 = 1
Se volete cambiare P15 di nuovo ad un input, usate DIR15 = 0. Potete poi usare IN15
per rilevare segnali alto/basso (invece di inviarli).

Il vostro turno – Visualizzare le lettere da A fino ad F


 Immaginate quali sequenze di bit (combinazioni di zeri ed uni) vi occorrano per
visualizzare le lettere A, b, C, d, E, ed F.
 Modificate VisualizzaCifre.bs2 in modo che visualizzi A, b, C, d, E, F.
Pagina 198 · Che cosa è un microcontrollore?

Decimale ed esadecimale Le cifre base nel sistema di numerazione decimale (a base 10)
sono:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Nel sistema di numerazione esadecimale (a base 16) le cifre base sono:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, b, C, d, E, F.
La base 16 è usata estensivamente sia nella programmazione di computer che dei
microcontrollori. Una volta che immaginate come visualizzare i caratteri da A ad F, potete
ulteriormente modificare il vostro programma per contare in esadecimale da 0 ad F.

Mantenere un elenco delle configurazioni (modelli) On/Off


Il commando LOOKUP vi fa scrivere il codice per le configurazioni di un disoplay LED a 7
segmenti molto più facilmente. Il comando LOOKUP vi permette di “cercare” elementi in
un elenco. Ecco un esempio di codice che utilizza il comando LOOKUP:
LOOKUP indice, [7, 85, 19, 167, 28], valore

In questo commando sono usate due variabili, indice e valore. Se indice è 0, valore
memorizza 7. Se indice è 1, valore memorizza 85. Nel successivo programma
esempio, indice è impostato a 2, in modo che il commando LOOKUP pone 19 entro
valore, e questo visualizza il terminale di Debug.

Programma esempio: RicercaSemplice.bs2


 Digitate ed eseguite Ricerca Semplice.bs2
 Eseguite il programma così com’è, con la variabile indice impostata uguale a 2.
 Provate a impostare la variabile indice uguale a numeri tra 0 e 4.
 Rieseguite il programma dopo ciascun cambiamento della variabile indice e
notate quale valore dell’elenco si posiziona nella variabile valore.
 Opzionale: Modificate il programma ponendo il commando LOOKUP in un ciclo
FOR...NEXT che conti da 0 a 4.

' Che cos’è un microcontrollore - RicercaSemplice.bs2


' Trova un valore usando un indice e una tabella di ricerca.

' {$STAMP BS2}


' {$PBASIC 2.5}

valore VAR Byte


indice VAR Nib
Misure di Luce · Pagina 199

indice = 2
PAUSE 1000

DEBUG ? indice

LOOKUP indice, [7, 85, 19, 167, 28], valore

DEBUG ? valore, CR

DEBUG "Cambiate la variabile indice in un ", CR,


"numero differente (tra 0 e 4).", CR, CR,

"Eseguite il programma modificato e ", CR,


"controllate per vedere quale numero ", CR,
"il commando LOOKUP pone nella", CR,
"variable valore."

END

Programma esempio: VisualizzaCifreConRicerca.bs2


Questo programma esempio mostra come il commando LOOKUP può dimostrarsi
realmente alla mano per memorizzare le sequenze di bit usate nella variabile OUTH. Di
nuovo, la variabile indice è usata per scegliere quale valore binario è posto entro la
variabile OUTH. Questo programma esempio conta di nuovo da 0 a 9. La differenza tra
questo programma e VisualizzaCifre.bs2 è che questo programma è molto più versatile.
È molto più veloce e più facile da regolare per sequenze differenti di numeri usando le
tabelle di ricerca.

 Digitate ed eseguite VisualizzaCifreConRicerca.bs2.


 Verificate che fa la stessa cosa del programma precedente (con molto minor
lavoro).
 Date un’occhiata al terminale di Debug mentre il programma viene eseguito.
Esso mostra come il valore di indice è usato dal comando LOOKUP per caricare
il valore binario corretto dall’elenco contenuto entro OUTH.
Pagina 200 · Che cosa è un microcontrollore?

' Che cos’è un microcontrollore - VisualizzaCifreConRicerca.bs2


' Usa una tabella di ricerca per memorizzare e visualizzare cifre con un
' display LED a 7 segmenti.

'{$STAMP BS2}
'{$PBASIC 2.5}

indice VAR Nib

OUTH = %00000000
DIRH = %11111111
PAUSE 1000

DEBUG "indice OUTH ", CR,


"------ --------", CR

FOR indice = 0 TO 9
LOOKUP indice, [ %11100111, %10000100, %11010011,
%11010110, %10110100, %01110110,
%01110111, %11000100, %11110111, %11110110 ], OUTH

DEBUG " ", DEC2 indice, " ", BIN8 OUTH, CR


PAUSE 1000
NEXT

DIRH = %00000000
END

Il vostro turno – Visualizzazione di nuovo da 0 ad F


 Modificate VisualizzaCifreConRicerca.bs2 perché conti da 0 fino ad F in
esadecimale. Non dimenticate di aggiornare l’argomento EndValue del ciclo
FOR...NEXT.

ATTIVITÀ #4: VISUALIZZAZIONE DELLA POSIZIONE DI UN DISCO


Nel capitolo 5, attività 4, avete usato il potenziometro per controllare la posizione di un
servo. In questa attività, visualizzerete la posizione del potenziometro col display LED a
7 segmenti.

Parti del quadrante e del display


(1) Display LED a 7 segmenti
(8) Resistenze – 1 kΩ (marrone-nero-rosso)
(1) Potenziometro – 10 kΩ
(1) Resistenza – 220 Ω (rosso-rosso-marrone)
(1) Condensatore – 0.1 µF
Misure di Luce · Pagina 201

(7) Cavallotti di filo

Costruzione del quadrante e dei circuiti per il Display


La Figura 6-15 mostra uno schema del circuito col potentiometro che dovete aggiungere
al progetto. La Figura 6-16 mostra il diagramma di cablaggio del circuito dalla Figura
6-15 combinato col circuito dalla Figura 6-11 a pagina 190.

 Aggiungere il circuito col potenziometro al circuito del display LED a 7


segmenti come mostrato in Figura 6-16.

Figura 6-15
Schema del circuito col
potenziometro aggiunto
al progetto

Figura 6-16
Diagramma di cablaggio
per la Figura 6-15
Pagina 202 · Che cosa è un microcontrollore?

Programmazione del quadrante e del display


C’è un comando molto utile chiamato LOOKDOWN e, come potete immaginare, è il
contrario del comando LOOKUP. Mentre il comando LOOKUP vi fornisce un numero sulla
base di un indice, il comando LOOKDOWN vi dà un indice in base ad un numero.

Programma esempio: RicercaInversaSemplice.bs2


Questo programma esempio dimostra come lavora il comando LOOKDOWN.

 Digitate ed eseguite RicercaInversaSsmplice.bs2.


 Eseguite il programma così com’è, con la variabile valore impostata uguale a
167, ed usate il terminale di Debug per osservare il valore di indice.
 Provate ad impostare la variabile valore uguale a ciascuno degli altri numeri
elencati dal comando LOOKDOWN: 7, 85, 19, 28.
 Ri-eseguite il programma dopo ciascun cambiamento della variabile valore e
notate quale valore dall’elenco viene posto nella variabile indice.

Domande trucco: che cosa accade se il vostro valore è maggiore di 167? Questo piccolo
“fuori programma” nel comando LOOKDOWN può causare problemi poiché il comando
LOOKDOWN non fa alcun cambiamento all’indice.

' Che cos’è un microcontrollore - RicercaInversaSemplice.bs2


' Trova un indice usando un valore e una tabella di ricerca.

' {$STAMP BS2}


' {$PBASIC 2.5}

valore VAR Byte


indice VAR Nib

valore = 167
PAUSE 1000
DEBUG ? valore

LOOKDOWN valore, [7, 85, 19, 167, 28], indice

DEBUG ? indice, CR

DEBUG "Cambiate la variabile valore in un ", CR,


"numero differente di questo elenco:", CR,
"7, 85, 19, 167, or 28.", CR, CR,

"Eseguite il programma modificato e ", CR,


"controllate per vedere quale numero il", CR,
Misure di Luce · Pagina 203

"commando LOOKDOWN pone nella ", CR,


" variabile indice."

END

Fin quando non dite al programma di fare un tipo diverso di confronto, il comando
LOOKDOWN verifica se un valore è uguale ad uno degli elementi dell’elenco. Potete anche
controllare se un valore è maggiore, minore, o uguale, ecc. Ad esempio, per cercare se
un valore introdotto nella variabile valore è inferiore o uguale, usate l’operatore <=
proprio prima della prima parentesi che inizia l’elenco. In altre parole, l’operatore
restituisce l’indice del primo valore nell’elenco che rende vera la frase nell’istruzione.

 Modificate RicercaInversSemplice.bs2 sostituendo questo valore e la frase


LOOKDOWN al posto di quelli esistenti:

valore = 35
LOOKDOWN valore, <= [ 7, 19, 28, 85, 167 ], indice

 Modificate il comando DEBUG in modo che sia:


DEBUG "Cambiate la variabile valore in un ", CR,
"numero differente in questo intervallo:", CR,
"da 0 a 170.", CR, CR,

"Eseguite il programma modificato e ", CR,


"controllate quale numero il comando ", CR,
"LOOKDOWN pone nella variabile ", CR,
"indice."

 Sperimentate con valori differenti e vedete se la variabile indice visualizza


quello che vi aspettate.

Programma esempio: VisualizzaQuadrante.bs2


Questo programma esempio fa da specchio alla posizione della manopola del
potenziometro illuminando i segmenti intorno all’esterno di un display LED a 7 segmenti
come mostrato in Figura 6-17.
Pagina 204 · Che cosa è un microcontrollore?

Figura 6-17
Visualizzazione della posizione del
Potenziometro col Display LED a 7
segmenti

 Digitate ed eseguite VisualizzaQuadrante.bs2.


 Ruotate la manopola del potenziometro e accertatevi che lavori. Ricordatevi di
premerla verso il basso per mantenere il pot allocato sulla breadboard.
 Quando eseguite il programma esempio, può non essere preciso come mostrato
in Figura 6-17. Regolate i valori nella tabella del LOOKDOWN in modo che il
display digitale rappresenti più accuratamente la posizione del potenziometro.

' Che cos’è un microcontrollore - VisualizzaQuadrante.bs2


' Visualizza la posizione del POT tramite il display LED a 7 segmenti.

'{$STAMP BS2}
'{$PBASIC 2.5}

PAUSE 1000
DEBUG "Programma in esecuzione!"

indice VAR Nib


tempo VAR Word

OUTH = %00000000
DIRH = %11111111

DO

HIGH 5
PAUSE 100
RCTIME 5, 1, tempo

LOOKDOWN tempo, <= [40, 150, 275, 400, 550, 800], indice

LOOKUP indice, [ %11100101, %11100001, %01100001,


%00100001, %00000001, %00000000 ], OUTH

LOOP
Misure di Luce · Pagina 205

Come lavora VisualizzaQuadrante


Questo programma esempio prende una misura RCTIME del potenziometro e la
memorizza in una variabile di nome tempo.
HIGH 5
PAUSE 100
RCTIME 5, 1, tempo

La variabile tempo è usata quindi in una tabella LOOKDOWN. La tabella LOOKDOWN decide
di quale numero del suo elenco il valore di tempo è inferiore, e quindi carica il numero
introdotto (da 0 a 5 in questo caso) entro la variabile indice.
LOOKDOWN tempo, <= [40, 150, 275, 400, 550, 800], indice

Successivamente, la variabile indice è usata in una tabella LOOKUP per scegliere il valore
binario da caricare entro la variabile OUTH.
LOOKUP indice, [ %11100101, %11100001, %01100001,
%00100001, %00000001, %00000000 ], OUTH

Il vostro turno – Aggiungere un segmento


VisualizzaQuadrante.bs2 fa accendere soltanto cinque dei sei segmenti quando ruotate il
quadrante. La sequenza per accendere i LED in Visualizza Quadrante.bs2 è E, F, A, B,
C, ma non D.

 Memorizzate VisualizzaQuadrante.bs2 con il nome


VisualizzaQuadranteVostroTurno.bs2.
 Modificate VisualizzaQuadranteVostroTurno.bs2 in modo che faccia accendere
in sequenza tutti e sei LED più esterni quando il potenziometro viene ruotato.
La sequenza dovrebbe essere E, F, A, B, C, e D.

Suggerimento: Lasciate il vostro circuito LED a 7 segmenti sulla vostra scheda.


Useremo di nuovo il LED a 7 segmenti assieme ad altri circuiti nel Capitolo 7, Attività #4.
Pagina 206 · Che cosa è un microcontrollore?

SOMMARIO
Questo capitolo ha introdotto il display LED a 7 segmenti, e il modo in cui leggere una
mappa di pin. Questo capitolo ha introdotto anche alcune tecniche per dipositivi e
circuiti che hanno input paralleli. Sono state introdotte le variabili DIRH ed OUTH come
mezzo per controllare i valori dei pin I/O da P8 fino a P15 del BASIC Stamp. Sono stati
introdotti i comandi LOOKUP e LOOKDOWN come mezzo per riferirsi all’elenco di valori
usati per visualizzare lettere e numeri.

Domande
1. In un display LED a 7 segmenti, qual’è l’ingrediente attivo che rende il diaplay
leggibile quando un microcontrollore manda un segnale alto o basso?
2. Cosa significa catodo comune? Cosa pensate che significhi anodo comune?
3. Come è chiamato il gruppo di fili che conduce i segnali verso e da un dispositivo
parallelo?
4. Quali sono i nomi dei comandi che sono stati usati in questo capitolo per gestire
elenchi di valori?

Esercizi
1. Scrivete un comando OUTH per impostare P8, P10, P12 alti e P9, P11, P13 bassi.
Assumendo che tutti i vostri pin I/O iniziino come input, scrivete il comando
DIRH che fa in modo che i pin I/O da P8 a P13 mandino segnali alti/bassi mentre
lasciate P14 e P15 configurati come input.
2. Scrivete i valori di OUTH richiesti per fare le lettere: a, C, d, F, H, I, n, P, S.

Progetto
1. Fate sillabare la frase “FISH CHIPS And dIP” indefinitamente con il vostro
display LED a 7 segmenti. Fate in modo che ciascuna lettera duri 400 ms.

Soluzioni
D1. L’ingrediente attivo è un LED.
D2. Catodo comune significa che tutti i catodi sono connessi assieme, cioè, essi
condividono un punto di connessione comune. Anodo comune dovrebbe significare
che tutti gli anodi sono connessi assieme.
D3. Un bus parallelo.
D4. LOOKUP e LOOKDOWN gestiscono elenchi di valori.
Misure di Luce · Pagina 207

E1. Il primo passo per configurare OUTH è impostare un "1" in ciascuna posizione di
bit specificata come HIGH. Così i bit 8, 10, e 12 vanno impostati ad "1". Poi
ponete uno "0" per ciascun LOW, così ottengono uno "0" i bit 9, 11, e 13, come
mostrato. Per configurare DIRH, i pin specificati, 8, 10, 12, 9, 11, e 13 devono
essere posti come output impostando quei bit a "1". 15 e 14 sono configurati
come input ponendo zeri nei bit 15 e 14. Il secondo passo è tradurre questo in
una istruzione PBASIC.

Bit 15 14 13 12 11 10 9 8 Bit 15 14 13 12 11 10 9 8
OUTH 0 0 0 1 0 1 0 1 DIRH 0 0 1 1 1 1 1 1

OUTH = %00010101 DIRH = %00111111

E2. La chiave per risolvere questo problema è disegnare ciascuna lettera e notare
quali segmenti devono essere accesi. Porre un 1 in ciascun segmento che deve
essere acceso. Tradurre questo nel valore binario OUTH. L’elenco di segmenti
BAFG.CDE per i bit in OUTH viene dalla Figura 6-14 a pagina 197.

Lettera Segmenti LED B A F G.C D E Valore OUTH = Common


Cathode

a e, f, a, b, c, g 11110101 %11110101 10 9 8 7 6
C a, f, e, d 01100011 %01100011 G F A B
d b, c, d, e, g 10010111 %10010111
A
F a, f, e, g 01110001 %01110001 F B
H f, e, b, c, g 10110101 %10110101 G

I f, e 00100001 %00100001 E C
D
n e, g, c 00010101 %00010101
P tutti tranne c e d 11110001 %11110001 E D C D

S a, f, g, c, d 01110110 %01110110 1 2 3 4 5
Dalla Figura 6-2 a pagina 184. Common
Cathode

P1. Usate lo schema della Figura 6-11 a pagina 190. Per risolvere questo problema,
modificate VisualizzaCifreConRicerca.bs2, usando i modelli di lettera elaborati
nell’esercizio 2. Nella soluzione, le lettere sono state impostate come costanti
per rendere il programma più intuitivo. Usare i valori binari è altrettanto buono,
ma maggiormente soggetto ad errori.
Pagina 208 · Che cosa è un microcontrollore?

' Che cos’è un microcontrollore - Cap6Pr01_FishAndChips.bs2


' Usa una tabella di ricerca per memorizzare e visualizzare cifre con
' un display a 7 segmenti. Sillaba il messaggio: FISH CHIPS And dIP

'{$STAMP BS2}
'{$PBASIC 2.5}

' Sequenze per creare lettere sul Display a 7 Segmenti


A CON %11110101
C CON %01100011
d CON %10010111
F CON %01110001
H CON %10110101
I CON %00100001
n CON %00010101
P CON %11110001
S CON %01110110
spazio CON %00000000

indice VAR Byte ' 19 car. nel messaggio

OUTH = %00000000 ' All’inizio tutto spento (off)


DIRH = %11111111 ' Tutti i LED devono essere output

PAUSE 1000 ' 1 sec. prima del 1° messaggio

DO

DEBUG "indice OUTH ", CR,


"------ --------", CR

FOR indice = 0 TO 18 ' 19 car. nel messaggio

LOOKUP indice, [ F, I, S, H, spazio, C, H, I, P, S, spazio,


A, n, d, spazio, d, I, P, spazio ], OUTH

DEBUG " ", DEC2 indice, " ", BIN8 OUTH, CR

PAUSE 400 ' 400 ms tra le lettere

NEXT

LOOP
Misure di Luce · Pagina 209

Capitolo 7: Misure di luce


DISPOSITIVI CHE CONTENGONO SENSORI DI LUCE
I primi capitoli hanno introdotto i pulsanti come sensori di contatto/pressione e i
potenziometri come sensori di rotazione/posizione. Entrambi questi sensori sono comuni
nei prodotti elettronici—pensate soltanto a quanti dispositivi con pulsanti e dischi
(quadranti) utilizzate quotidianamente. Un altro sensore comune che si trova in molti
prodotti è il sensore di luce. Ecco alcuni esempi di dispositivi che necessitano di sensori
di luce per funzionare in modo corretto:

 Fari di automobile che si accendono automaticamente quando fa buio


 Lampioni stradali che si accendono automaticamente quando diventa sera
 Luci esterne di sicurezza che si accendono quando qualcuno attraversa il vostro
cortile (ma soltanto di notte)
 Visori di computer portatili che diventano più luminosi in aree ben illuminate e
meno luminosi in aree con poca luce
 Fotocamere con impostazione automatica dell’esposizione
 Sensori interni a TV, lettori di DVD ed altri componenti di sistemi di
intrattenimento che rilevano la radiazione infrarossa di un telecomando distante

I primi tre esempi nell’elenco sono illuminati automaticamente, e dipendono da sensori di


luce ambiente per distinguere il giorno dalla notte. L’elettronica di questi dispositivi
deve sapere soltanto se c’è luce o buio, in modo che essi possano trattare i loro sensori di
luce come output binari analoghi a pulsanti. I visori di computer portatili e gli
esposimetri automatici di fotocamere si regolano sulle condizioni di illuminazione della
zona acquisendo dai loro sensori di luce informazioni su quanta luce o buio ci sia. Essi
devono trattare i loro sensori di luce come output analogici che forniscono un numero
indicatore di quanta luce o buio c’è, in modo molto simile agli esempi col potenziometro
dove i numeri indicavano la posizione della manopola.

I sensori di luce all’interno di TV e di altri componenti di sistemi di intrattenimento


rilevano radiazione infrarossa (IR), che è luce non visibile all’occhio umano ma che può
essere rilevata da molti dispositivi elettronici. Per esempio, se guardate l’estremità dei
telecomandi che puntate su un TV o altri dispositive di intrattenimento, troverete un LED
IR trasparente. Quando premete un pulsante del telecomando, esso invia segnali
codificati al componente del sistema di intrattenimento facendo lampeggiare on/off il
LED IR. Poiché non possiamo vedere la luce infrarossa, non ci sembra che il LED del
Pagina 210 · Che cosa è un microcontrollore?

telecomando faccia nulla quando premete un pulsante. Però, se provate ad agire sul
telecomando mentre guardate al LED attraverso l’obiettivo di una fotocamera digitale, il
LED apparirà quasi bianco. La luce bianca contiene tutti i colori dello spettro. I sensori
rosso, verde e blu dentro il chip di una fotocamera riportano tutti di aver rilevato luce, in
risposta alla luce bianca. Così accade allo stesso modo che i sensori rosso/verde/blu
rilevino tutti la luce infrarossa dal LED IR del telecomando. Quindi la fotocamera
interpreta anch’essa la luce di un LED infrarosso come luce bianca.

Ancora sui LED a infrarosso e i rivelatori:


Il testo Robotica con il Boe-Bot (Robotics with the Boe-Bot) contiene esempi dove un robot
Boe-Bot controllato dal BASIC Stamp usa il LED IR che si trova nei telecomandi TV e il
ricevitore IR che si trova negli apparecchi TV per rilevare oggetti di fronte a lui. Il Boe-Bot
usa il LED IR come un piccolo lampeggiatore e il ricevitore IR che si trova entro un TV per
rilevare le riflessioni dei lampeggiamenti IR provenienti da oggetti che lo fronteggiano. Il
testo IR Remote for the Boe-Bot spiega come i telecomandi dei TV codificano i messaggi
che inviano ai TV e contiene esempi di come programmare il microcontrollore del BASIC
Stamp per decodificare messaggi dal telecomando in modo da inviare messaggi al vostro
robot Boe-Bot, e perfino guidarlo in giro, tutto con un telecomando TV.

Il tipo di luce che un determinato dispositivo sente dipende da che cosa è stato progettato
per fare. Ad esempio, i sensori di luce per i dispositivi che si regolano sulle condizioni di
luce ambiente debbono sentire luce visibile. I sensori di pixel rosso, verde e blu
contenuti nelle fotocamere digitali sentono ciascuno i livelli di colori specifici di una
immagine digitale. Il sensore IR entro un TV cerca luce infrarossa che stia lampeggiando
on/off con frequenza vicina ai 40 kHz. Questi sono soltanto pochi esempi, e ciascuna
applicazione richiede un tipo diverso di sensore di luce.

La Figura 7-1 mostra alcuni esempi dei molti sensori di luce disponibili per vari requisiti
di sensibilità alla luce. Da sinistra a destra, sono mostrati un fototransistor, una
fotoresistenza al solfuro di cadmio, un sensore di luce lineare, un fotodiodo con massimo
sul blu, un convertitore luce – frequenza, un fototransistor ad infrarosso, e un ricevitore
remoto ad infrarosso da TV.
Misure di Luce · Pagina 211

Figura 7-1 Esempi di sensori di luce

Dettagli sulla cella al solfuro di cadmio (CdS) o Fotoresistenza


La cella al solfuro di cadmio (CdS) o fotoresistenza era uno dei più comuni sensori di luce
ambiente nell’illuminazione automatizzata. Con l’avvento della direttiva Restrizioni
dell’Unione Europea sull’utilizzo di alcune sostanze ritenute pericolose (RoHS), le
fotoresistenze al solfuro di cadmio non possono essere più incorporate entro molti dispositivi
importati o fabbricati in Europa. Ciò ha aumentato l’uso di un certo numero di prodotti
sostitutivi delle fotoresistenze, inclusi il fototransistor e il sensore lineare di luce. Come
risultato di questi cambiamenti, questa edizione ora promuove il fototransistor come
rilevatore di livelli luminosi al posto della fotoresistenza al solfuro di cadmio.

La documentazione di ciascun sensore descrive il tipo di luce che rileva, in termini di


lunghezza d’onda. La Lunghezza d’onda è la misura della distanza tra forme ripetute o
cicli. Ad esempio, immaginate un’onda che viaggia attraverso l’oceano, muovendosi in
su e in giù. La lunghezza d’onda di quell’onda sarebbe la distanza tra ciascuno dei picchi
(o creste spumose) del ciclo dell’onda. La lunghezza d’onda della luce può essere
misurata in un modo simile, noi stiamo misurando – invece (delle creste spumose) – la
distanza tra due picchi delle oscillazioni elettromagnetiche della luce. Ciascun colore
della luce ha la sua propria lunghezza d’onda ed è considerato essere luce visibile, il che
significa che può essere rilevata dall’occhio umano. La Figura 7-2 mostra le lunghezze
d’onda per la luce visibile come anche quelle per alcuni tipi di luce che l’occhio umano
non può rilevare, incluse l’ultravioletto e l’infrarosso. Queste lunghezze d’onda sono
misurate in nanometri, che si abbrevia nm. Un nanometro è un miliardesimo di un metro.
Pagina 212 · Che cosa è un microcontrollore?

Figura 7-2 Lunghezze d’onda e colori corrispondenti

Lunghezza d’onda 10…380 450 495 570 590 620 750…100,000


(nm)
Colore Violetto Verde Arancio Infrarosso
Ultravioletto Blu Giallo Rosso

NOTA: Se state vedendo questa figura in un libro stampato in scala di grigio, potete scaricarne
una versione PDF a colori dal sito www.parallax.com/go/WAM.

INTRODUZIONE AL FOTOTRANSISTOR
Un transistor è simile ad una valvola che consente ad una certa quantità di corrente di
attraversare due dei suoi terminali. Il terzo terminale di un transistor controlla proprio
quanta corrente passa attraverso gli altri due. A seconda del tipo di transistor, il flusso di
corrente può essere controllato da voltaggio, corrente o, nel caso del fototransistor, dalla
luce. La Figura 7-3 mostra lo schema elettrico e il disegno di parte del fototransistor
contenuto nel kit What’s a Microcontroller (Che cos’è un microcontrollore). Maggiore è
la luce che colpisce il terminale base (B) del fototransistor, maggiore sarà la corrente che
esso condurrà nel suo terminale collettore (C), corrente che fluisce fuori dal suo terminale
emettitore (E). Inversamente, una minor luce che brilla sul terminale di base produrrà
una minor corrente condotta.
B

C
Figura 7-3
B
Simbolo schematico e disegno di
parte del fototransistor
E

E
C

La sensibilità di picco di questo fototransistor è 850 nm, lunghezza che – secondo la


Figura 7-2 - è nella gamma dell’infrarosso. Questo fototransistor risponde anche alla luce
Misure di Luce · Pagina 213

visibile, però è un pò meno sensibile, specialmente per le lunghezze d’onda sotto 450 nm,
Che in Figura 7-2 sono a sinistra del blu. La luce di lampade alogene e ad incandescenza,
e in special modo la luce del sole, sono sorgenti di infrarosso, molto più intense delle
lampade fluorescenti. Il transistor a infrarosso risponde bene a tutte queste sorgenti di
luce, ma è molto più sensibile alla luce solare, poi alle lampade alogene e ad
incandescenza, e un po’ meno sensibile alle lampade fluorescenti.

Il disegno di circuiti che usano il transistor può essere modificato per lavorare meglio in
certi tipi di condizioni di illuminazione, e i circuiti con fototransistor in questo capitolo
sono progettati per l’uso indoor (in interni). C’è una applicazione di sensibilità alla luce
esterna, ma essa farà uso di un dispositivo differente, che potrebbe a prima vista sembrare
improbabile come candidato sensore di luce: un diodo emettitore di luce.

ATTIVITÀ #1: COSTRUZIONE E PROVA DEL MISURATORE DI LUCE


Il capitolo 5 ha introdotto le misure di decadimento RC con il comando RCTIME per
misurare il tempo che un condensatore impiega a perdere la sua carica attraverso la
resistenza variabile interna ad un potenziometro. Con una resistenza più grande (verso il
flusso di corrente elettrica), il potenziometro rallentava la velocità alla quale il
condensatore perdeva la sua carica, e con una resistenza più piccola questa velocità
aumentava. La misura del tempo di decadimento dava un’indicazione della resistenza del
potenziometro, che a sua volta rendeva possibile al BASIC Stamp conoscere la posizione
del disco del potenziometro.

Quando, in un circuito di decadimento RC, viene posto un fototransistor, che conduce più
o meno corrente quando è colpito da maggiore o minor luce, questo si comporta in modo
molto simile al potenziometro. Quando una maggior quantità di luce colpisce il
fototransistor, esso conduce più corrente, e il condensatore perde la sua carica più
rapidamente. Con una minor quantità di luce, il fototransistor conduce meno corrente, e
il condensatore perde la sua carica meno rapidamente. Così la stessa misura RCTIME,
che ci dava una indicazione della posizione del disco con un potenziometro nel Capitolo
5, può essere ora usata per misurare i livelli di luce con un fototransistor.

In questa attività, costruirete e proverete un circuito di decadimento RC che misura il


tempo che impiega la carica di un condensatore a decadere attraverso un fototransistor.
La misura del decadimento RC vi darà un’idea dei livelli di luce sentiti dalla superficie
raccogli-luce del fototransistor. Come con la prova del potenziometro, i valori di tempo
misurati dal comando RCTIME saranno visualizzati nel terminale di Debug.
Pagina 214 · Che cosa è un microcontrollore?

Parti per la prova del rivelatore di luce


(1) Fototransistor
(1) Resistenza – 220 Ω (rosso-rosso-marrone)
(2) Condensatori – 0.01 µF (etichettati 103)
(1) Condensatore – 0.1 µF (etichettato 104)
(1) Cavallotto di filo

Costruzione del circuito a tempo RC con un fototransistor


La Figura 7-4 mostra uno schema e un diagramma di cablaggio del circuito a tempo RC
che userete in questo capitolo. Questo circuito è diverso dal circuito del potenziometro
nell’attività #3 del capitolo 5 per due motivi. Prima di tutto, il pin I/O usato per misurare
il tempo di decadimento è differente (P2). Seconda cosa, il potenziometro è stato
sostituito da un fototransistor.

Suggerimento: Lasciate connesso il vostro LED a 7 segmenti, e aggiungete alla


vostra scheda il circuito con il fototransistor. Useremo il LED a 7 segmenti con il
fototransistor nell‘attività #4 di questo Capitolo.

 Costruite il circuito mostrato in Figura 7-4.


 Assicuratevi che i terminali collettore ed emettitore (C ed E) del fototransistor
siano connessi come mostrato nel diagramma di cablaggio.

Figura 7-4
Schema e diagramma di
cablaggio del circuito a
tempo RC per il
fototransistor

Iniziare con il
condensatore da 0.01
µF, etichettato 103.
Misure di Luce · Pagina 215

Vdd Vin Vss


X3

P15
P14
P13
P12
P11
P10 Terminale
P9 (C) col pin
P8
P7 più lungo
P6
P5
P4 Terminale (E)
P3
P2
a bordo piatto
P1
P0
X2

Prova di programmazione del fototransistor


Il primo programma esempio (ProvaFototransistor.bs2) è in realtà solo una versione con
poche revisioni di LeggiPotConRcTime.bs2 dalla Attività # 3, capitolo 5. Il circuito del
potenziometro da pagina 167 (attività #3, cap.5) era connesso al pin I/O P7. Il circuito in
questa attività è connesso a P2. A causa di questa differenza, per farlo lavorare devono
essere aggiornati due comandi del programma esempio. Il comando HIGH 7 del
programma esempio precedente diventa qui HIGH 2 poiché il circuito del fototransistor è
connesso a P2 e non a P7. Per la stessa ragione, il comando RCTIME 7, 1, tempo è
stato modificato in RCTIME 2, 1, tempo.

Programma esempio: ProvaFototransistor.bs2


La superficie del fototransistor che raccoglie la luce è in cima alla cupola del suo
contenitore di plastica chiaro, ed è il terminale base (B) mostrato in Figura 7-3.
Attraverso quella cupola dovrebbe essere visibile un piccolo quadratino nero. Quel
quadratino nero è proprio il fototransistor, un piccolo pezzo di silicio. Il resto del
dispositivo è il suo contenitore, che include l’involucro di plastica, il telaio di filo, e i fili
di collegamento.

Invece di ruotare la manopola del potenziometro come facevamo nell’attività 3 del


capitolo 5, questo circuito viene provato esponendo la superficie fotosensibile del
fototransistor a livelli di luce differenti. Quando il programma esempio è in esecuzione,
il terminale di Debug dovrebbe visualizzare piccoli valori in condizioni di luce forte, w
grandi valori in condizioni di luce debole.
Pagina 216 · Che cosa è un microcontrollore?

Evitate la luce solare diretta! Il circuito e il programma che state usando è progettato per
rilevare variazioni di luce in interni e non lavora alla luce solare diretta. Lasciate le luci
interne all’ambiente accese, ma chiudete le imposte se il sole invade l’ambiente in
prossimità delle finestre.

 Digitate ed eseguite ProvaFototransistor.bs2.


 Prendete nota della variabile tempo sul terminale di Debug in condizioni di luce
normali.
 Gettate ombra sopra il circuito con la vostra mano e controllate di nuovo la
variabile tempo. Dovrebbe essere un numero grande.
 Coprite il circuito con la vostra mano per fare più ombra; il terminale di Debug
dovrebbe visualizzare un valore significativamente maggiore per tempo.

' Che cos’è un microcontrollore - ProvaFototransistor.bs2


' Legge un fototransistor in un circuito a tempo RC usando un comando RCTIME.

' {$STAMP BS2}


' {$PBASIC 2.5}

tempo VAR Word


PAUSE 1000

DO
HIGH 2
PAUSE 100
RCTIME 2, 1, tempo
DEBUG HOME, "tempo = ", DEC5 tempo
LOOP

Il vostro turno – Uso di un condensatore diverso per condizioni di luce


differenti
Le misure di tempo con un condensatore da 0,1 μF prenderanno dieci volte il tempo preso
da quelle con un condensatore da 0,01 μF, il ché significa che il valore della variabile
tempo visualizzato dal terminale di Debug dovrebbe essere dieci volte più grande.
Sostituire il condensatore da 0,01 μF con un condnsatore da 0,1 μF può essere utile in
stanze molto illuminate dove di solito vedreste misure piccole con il condensatore da 0,01
μF. Per esempio, dicianmo che le condizioni di illuminazione siano molto brillanti, e le
misure variano soltanto da 1 a 13 con il condensatore da 0,01 μF. Se lo sostituite con un
condensatore da 0,1 μF, la vostre misure varieranno invece tra 1 e 130, e la vostra
applicazione sarà molto più sensibile alle variazioni di luce nella stanza.
Misure di Luce · Pagina 217

 Modificate il circuito sostituendo il condensatore da 0,01 μF con un


condensatore da 0,1 μF (etichettato 104).
 Ri-eseguite ProvaFototransistor.bs2 e verificate che le misure di tempo RC sono
all’incirca dieci volte i loro valori precedenti.

L’intervallo di tempo più lungo che il comando RCTIME può misurare è 65535 unità di 2
µs ciascuna, che corrisponde ad un tempo di decadimento di: 65535 × 2 μs = 131 ms =
0,131 s. Se il tempo di decadimento supera 0,131 secondi, il comando RCTIME restituisce
0 per indicare che il massimo tempo di misura è stato superato.

 Potete fare sopra il fototransistor un buio sufficiente a superare la misura


massima di 65535 e fare in modo che il comando RCTIME restituisca 0?

La prossima attività farà uso del minore tra i due condensatori.

 Prima di passare all’attività successiva, riportate il circuito a quello originale


mostrato in Figura 7-4, rimuovendo il condensatore da 0,1 μF e sostituendolo
con il condensatore da 0,01 μF.

ATTIVITÀ #2: REGISTRAZIONE DI EVENTI LUMINOSI


Una delle caratteristiche più utili della memoria di programma del modulo BASIC Stamp
è che potete scollegare energia alla scheda senza perdere il vostro programma. Non
appena l’energia viene riconnessa, il programma inizierà ad essere eseguito di nuovo
dall’inizio. Poiché il codice della vostra applicazione tipicamente non riempie la
memoria del modulo BASIC Stamp, qualsiasi porzione non usata per il programma potrà
essere usata per memorizzare dati. Questa memoria è adatta in special modo a
memorizzare dati che non volete che il BASIC Stamp dimentichi. Mentre i valori
memorizzati dalle variabili vengono cancellati quando si disconnette l’energia, il BASIC
Stamp ricorderà ancora tutti i valori memorizzati nella sua memoria di programma
quando si ricollega energia.

Che cos’è il datalogging? Datalogging (o raccolta dati) è ciò che fa un microcontrollore


quando registra e memorizza misure periodiche di un sensore per una certa quantità di
tempo. I dispositivi di datalogging, o “datalogger”, sono utili in special modo nella ricerca
scientifica. Per esempio, invece di inviare una persona in un determinato luogo distante, per
prendere misure di tempo atmosferico, si può attrezzare una stazione di datalogging
atmosferica. Essa registra misure periodiche, e gli scienziati visitano la stazione quanto
spesso vogliono per raccogliere i dati o, in alcuni casi, la stazione scarica le misure su un
computer tramite telefono cellulare, radio, o satellite.
Pagina 218 · Che cosa è un microcontrollore?

Il chip sul BASIC Stamp che memorizza programma e dati è mostrato in Figura 7-5.
Questo chip è detto EEPROM, che significa Memoria a sola lettura cancellabile e
programmabile elettricamente (Electrically Erasable Programmable Read-Only
Memory). E’ del tutto impronunciabile, e pronunciare ciascuna delle iniziali di EEPROM
è ancora molto lavoro. Quindi, quando le persone parlano di EEPROM, usualmente
pronunciano: “E-E-Prom”.

Una EEPROM
da 2 KB Figura 7-5
memorizza il Chip EEPROM sul modulo
vostro codice
sorgente
BASIC Stamp
PBASIC.
Questa EEPROM memorizza il
vostro codice di programma e
tutti gli altri dati che il vostro
programma pone là,
mantenendoli perfino quando
l’energia è disconnessa.

La Figura 7-6 mostra la finestra della mappa di memoria (Memory Map) dell’Editor del
BASIC Stamp. Potete vedere questa finestra cliccando il menu Run dell’Editor del
BASIC Stamp e scegliendo Memory Map.

La Memory Map (Mappa di memoria) usa colori diversi per mostrare come vengono
usate sia la RAM del modulo BASIC Stamp (variabili in random access memory), sia la
EEPROM (memoria di programma). Il quadratino a cornice rossa nella barra di
scorrimento all’estrema sinistra indica quale porzione della EEPROM è visibile nella
mappa della EEPROM. Potete cliccare e trascinare questo quadratino su e giù per vedere
varie porzioni della memoria EEPROM. Trascinando quel quadratino rosso in giù fino
alla fine, potete vedere come la maggior parte dello spazio di memoria EEPROM è usata
da ProvaFototransistor.bs2 a pagina 222. I byte che contengono simboli di programma
sono evidenziati in blu, e soltanto 35 byte dei 2048 byte componenti la EEPROM sono
utilizzati per il programma. I restanti 2013 byte sono liberi per memorizzare dati.
Misure di Luce · Pagina 219

Figura 7-6
Mappa di
memoria

Per vedere
questa finestra,
cliccate Run, e
scegliete Memory
Map.

La mappa della EEPROM mostra gli indirizzi come valori esadecimali, che sono stati
discussi brevemente nel riquadro Decimale ed esadecimale a pagina 198. I valori lungo
il lato sinistro mostrano l’indirizzo di partenza di ciascuna riga di byte. I numeri lungo il
lato superiore mostrano il numero del byte entro quella riga, da 0 ad F in esadecimale,
che è da 0 a 15 in decimale. Per esempio, in Figura 7-6, il valore eaadecimale C1 è
memorizzato all’indirizzo 7E0. CC è memorizzato all’indirizzo 7E1, 6D è memorizzato
all’indirizzo 7E2, e così via, fino ad E8, che è memorizzato all’indirizzo 7EF. Se scorrete
in su e giù con la barra di scorrimento, vedrete che gli indirizzi più grandi di memoria
sono all’estremità inferiore della mappa della EEPROM, e gli indirizzi più piccoli sono in
cima, con la riga all’estremità superiore che inizia in 000.

I programmi PBASIC sono sempre memorizzati agli indirizzi di EEPROM maggiori,


mostrati all’estremità inferiore della mappa della EEPROM. Così, se il vostro programma
sta per memorizzare dati nella EEPROM, dovrebbe iniziare con l’indirizzo più basso,
iniziare con l’indirizzo 0. Ciò aiuta a garantire che i vostri dati memorizzati non
sovrascriveranno il programma PBASIC, cosa che si tradurrebbe usualmente in un
collasso del programma. Nel caso della mappa della EEPROM mostrata in Figura 7-6, il
programma PBASIC risiede negli indirizzi da 7FF fino a 7DD, iniziando dall’indirizzo
più grande e continuando verso l’indirizzo più piccolo. Quindi la vostra applicazione può
memorizzare dati dall’indirizzo 000 fino all’indirizzo 7DC, procedendo dall’indirizzo più
piccolo al pià grande. In decimale, dall’indirizzo 0 fino all’indirizzo 2012.

Se state pensando di memorizzare dati nella EEPROM, è importante riuscire a convertirli


da esadecimale a decimale per poter calcolare qual è il più grande indirizzo scrivibile.
Qui sotto c’è la matematica per convertire il numero 7DC da esadecimale a decimale.
Pagina 220 · Che cosa è un microcontrollore?

L’esadecimale è un sistema di numerazione con base 16, il ché significa che, per
rappresentare i suoi valori, usa 16 cifre diverse. Le cifre 0-9 rappresentano i primi dieci
valori, e le lettere A-F rappresentano i valori 10-15. Quando si effettua una conversione
da esadecimale a decimale, ciascuna cifra da destra rappresenta una potenza di sedici più
grande (della cifra precedente). La cifra all’estrema destra è il numero di uni, cioè il
numero di 160 (unità). La cifra successiva da destra è il numero dei 16, cioè il numero di
161. La terza cifra è il numero dei 256, cioè il numero di 162.

Esadecimale 7DC = (7 × 162) + (D × 161) + (C × 160)


= (7 × 162) + (13 × 161) + (12 × 160)
= (7 × 256) + (13 × 16) + (12 × 1)
= 1792 + 208 + 12
= 2012 (valore decimale, cioè in base 10)

Questo approccio di conversione lavora alla stessa maniera in altre basi di numerazione,
inclusi i valori decimali in base 10. Ad esempio:

2102 = (2 × 103) + (1 × 102) + (0 × 101) + (2 × 100)


= (2 × 1000) + (1 × 100) + (0 × 10) + (2 × 1)

2048 byte = 2 KB.


Sebbene tanto il suffisso maiuscolo “K” e il suffisso minuscolo “k”’siano chiamati “chilo,” essi
hanno significati leggermente differenti. In elettronica e informatica, il K maiuscolo è usato
10
per indicare un kilobyte binario, che è 1 × 2 = 1024. Quando vogliamo riferirci
esattamente a 1000 byte, dobbiamo usare il k minuscolo, che sta per kilo (chilo, in italiano)
3
e nel sistema metrico è 1 x 10 = 1000.
Inoltre, il suffisso maiuscolo “B”’ sta per byte, mentre il suffisso minuscolo “b” sta per bit.
Questo può comportare una grande differenza perché 2 Kb significa 2048 bit, che sono
2048 numeri differenti, ma ciascun numero è limitato ad un valore di 0 o di 1. In contrasto, 2
KB, sono 2048 byte, ciascuno dei quali può memorizzare un valore nell’intervallo da 0 a
255.

Usare la EEPROM per memorizzare dati può essere molto utile per applicazioni remote.
Un esempio di applicazione remota potrebbe essere un rilevatore di temperature posto in
un camion frigorifero che trasporta cibi congelati. Il rilevatore potrebbe registrare la
temperatura durante l’intero viaggio per vedere se essa è rimasta sempre abbastanza
fredda da assicurare che nessuno degli alimenti trasportati si sia scongelato. Un secondo
esempio è una stazione di rilevamento del tempo atmosferico. Una delle parti di dati che
la stazione potrebbe memorizzare per reperimenti successivi, è costituita dalle condizioni
Misure di Luce · Pagina 221

di luce. Ciò può dare un’indicazione della copertura di nuvole a determinate ore del
giorno, e alcuni studi usano questo dato per controllare gli effetti dell’inquinamento
atmosferico e le tracce di condensazione su aeroplano (con trails, in inglese), sui livelli di
luce che raggiungono la superficie terrestre.

Avendo in mente le registrazioni dei livelli di luce, questa attività introduce una tecnica
per memorizzare nella EEPROM i livelli di luce misurati e reperirli di nuovo in un
secondo tempo. In quest‘attività, eseguirete un programma esempio PBASIC che
memorizza una serie di misure di luce nella EEPROM del modulo BASIC Stamp. Dopo
aver terminato questo programma, eseguirete un secondo programma che ritrova i valori
posti nella EEPROM dal primo e li visualizza nel terminale di Debug.

Programmazione di memorizzazione a lungo termine


Per memorizzare valori nella EEPROM si usa il comando WRITE, e per reperire quei
valori si usa il comando READ.

La sintassi del comando WRITE è la seguente:


WRITE Locazione, {WORD} Valore

Ad esempio, se volete scrivere il valore 195 all’indirizzo 7 nella EEPROM, userete il


comando:
WRITE 7, 195

I valori word possono essere dovunque da 0 a 65565 mentre i valori byte possono
contenere soltanto numeri da 0 a 255. Un valore word prende lo spazio di due byte. Se
volete scrivere un valore a dimensione word nella EEPROM, dovete usare il modificatore
opzionale Word. State attenti, nondimeno. Poiché una word prende due byte, dovete
saltare uno degli indirizzi a dimensione byte nella EEPROM prima di poter scrivere
un’altra word. Diciamo che vi occorre salvare due valori word nella EEPROM: 659 e
50012. Se volete memorizzare il primo valore all’indirizzo 8, dovrete scrivere il secondo
valore all’indirizzo 10.
WRITE 8, Word 659
WRITE 10, Word 50012
Pagina 222 · Che cosa è un microcontrollore?

E’ possible sovrascrivere il vostro programma? Si, e se lo fate, è probabile che il


programma inizi a comportarsi in modo strano o smetta completamente di girare. Poiché i
simboli di un programma PBASIC risiedono agli indirizzi più alti della EEPROM, è meglio
usare i valori di Location più piccoli per memorizzare numeri con il comando WRITE.
Come posso sapere se il Location che sto usando è troppo grande? Potete usare la
mappa di memoria per immaginare quale sia il valore più grande non usato dal vostro
programma PBASIC. La spiegazione che segue la Figura 7-6 a pagina 219 descrive come
calcolare quanti indirizzi di memoria siano disponibili. Come scorciatoia per convertire un
esadecimale in decimale, potete usare il formattatore DEC del comando DEBUG e il
formattatore esadecimale $ come fatto qui sotto:
DEBUG DEC $7DC
Il vostro programma visualizzerà il valore decimale dell’esadecimale 7DC poiché il
formattatore esadecimale $ dice al comando DEBUG che 7DC è un numero esadecimale.
Poi, il formattatore DEC fa visualizzare al comando DEBUG quel valore in formato decimale.

Programma esempio: MemorizzaMisureDiLuceInEeprom.bs2


Questo programma esempio mostra come usare il comando WRITE prendendo misure di
luce ogni 5 secondi, per 2 minuti e ½, e memorizzandole in EEPROM. Come il
programma esempio dell’attività precedente, esso visualizza le misure nel terminale di
Debug, ma memorizza anche ciascuna misura in EEPROM, per reperimento successivo
da parte di un diverso programma che usa il comando READ.

 Digitate ed eseguite MemorizzaMisureDiLuceInEeprom.bs2.


 Registrate le misure visualizzate dal terminale di Debug così da poter verificare
le misure lette indietro dalla EEPROM.
 Aumentate gradualmente l’ombra sul fototransistor durante il periodo di prova di
2 ½ minuti per ottenere dati significativi.

Specialmente se avete una scheda USB, riconnetterla al computer può reimpostare il


BASIC Stamp e riavviare il programma, nel qual caso, esso ripartirà prendendo un nuovo
insieme di misure.

 Dopo che MemorizzaMisureDiLuceInEeprom.bs2 ha completato la sua


esecuzione, disconnettere energia dalla vostra scheda immediatamente e
lasciatela disconnessa finché siete pronti ad eseguire il programma esempio
successivo: LeggiMisureDiLuceDaEeprom.bs2.
Misure di Luce · Pagina 223

Potete cambiare le pause nel ciclo FOR…NEXT. Questo programma esempio ha pause di 5
secondi, che evidenziano le misure periodiche prese dai dispoositivi di datalogging. Esse
potrebbero sembrare brevi o lunghe, potete, quindi, ridurre il PAUSE 5000 a PAUSE 500
per far eseguire il programma dieci volte più velocemente per ogni prova.

' Che cos’è un microcontrollore - MemorizzaMisureDiLuceInEeprom.bs2


' Scrive misure di luce nella EEPROM.

' {$STAMP BS2}


' {$PBASIC 2.5}

tempo VAR Word


IndirizzoEeprom VAR Byte

PAUSE 1000
DEBUG "Inizio delle misure...", CR, CR,
"Misura Valore", CR,
"----------- ------", CR
FOR IndirizzoEeprom = 0 TO 58 STEP 2
HIGH 2
PAUSE 5000
RCTIME 2, 1, tempo
DEBUG DEC2 IndirizzoEeprom,
" ", DEC tempo, CR
WRITE IndirizzoEeprom, Word tempo
NEXT

DEBUG "Finito. Adesso, eseguire:", CR,


"LeggiMisureDiLuceDaEeprom.bs2"
END

Come lavora MemorizzaMisureDiLuceInEeprom.bs2


Il ciclo FOR...NEXT che misura i valori a tempo RC e li memorizza nella EEPROM deve
contare in passi di 2 poiché nella EEPROM sono scritti i valori word.
FOR IndirizzoEeprom = 0 to 58 STEP 2

Il comando RCTIME carica la misura di tempo di decadimento nella variabile tempo


dimensionata a word.
RCTIME 2, 1, tempo

Il valore che la variabile tempo memorizza è copiato all’indirizzo di EEPROM dato dal
valore corrente della variabile IndirizzoEeprom ogni volta che il ciclo è eseguito.
Ricordate che l’indirizzo per un comando WRITE è sempre in termini di byte. Quindi, la
Pagina 224 · Che cosa è un microcontrollore?

variabile IndirizzoEeprom è incrementata di due ciascuna volta che si esegue il ciclo


perché una variabile Word occupa due byte.
WRITE IndirizzoEeprom, Word tempo
NEXT

Programmazione del reperimento dati


Per reperire dalla EEPROM i valori che avete appena registrato, potete usare il comando
READ. La sintassi del comando READ è la seguente:

READ Location, {WORD} Variable

Mentre il comando WRITE può copiare un valore sia da una costante, sia da una variabile,
nella EEPROM, il comando READ deve copiare il valore memorizzato ad un dato
indirizzo in EEPROM, in una variabile; come suggerisce il suo nome, l’argomento
Variable deve essere una variabile.

Tenete a mente che le variabili sono memorizzate nella RAM del modulo BASIC Stamp. A
differenza della EEPROM, i valori in RAM vengono cancellati ogni volta che l’energia viene
disconnessa ed anche ogni volta che si preme il pulsante Reset sulla scheda.
Il BASIC Stamp 2 ha 26 byte di RAM, mostrati sul lato destro della mappa di memoria in
Figura 7-6 a pagina 219. Se dichiarate una variabile word, state usando fino a due byte.
Una dichiarazione di variabile byte usa un byte, un nibble usa mezzo byte, e un bit usa 1/8
di un byte.

Diciamo che ValoreAEeprom e ValoreBEeprom sono variabili Word, e piccoloEE è una


variabile Byte. Queste variabili dovranno essere definite all’inizio di un programma con
dichiarazioni di variabile VAR. Ecco alcuni comandi per reperire i valori già memorizzati
prima a certi indirizzi di EEPROM, con comandi WRITE, forse anche in un programma
differente.
READ 7, piccoloEE
READ 8, Word ValoreAEeprom
READ 10, Word ValoreBEeprom

Il primo comando reperisce un valore byte dall’indirizzo 7 della EEPROM e lo copia


nella variabile chiamata piccoloEE. Il successivo comando copia la word che occupa i
byte di indirizzi 8 e 9 della EEPROM e li memorizza nella variabile word
ValoreAEeprom. L’ultimo dei tre comandi copia la word che occupa i byte di indirizzi
10 ed 11 della EEPROM e li memorizza nella variabile ValoreBEeprom.
Misure di Luce · Pagina 225

Programma esempio: LeggiMisureDiLuceDaEeprom.bs2


Questo programma esempio mostra come usare il comando READ per reperire le misure di
luce memorizzate in EEPROM dal programma MemorizzaMisureDiLuceInEeprom.bs2.

 Riconnettere energia alla vostra scheda.


 Digitate LeggiMisureDiLuceDaEeprom.bs2 nell’Editor del BASIC Stamp.
 Se avete disconnesso energia dalla scheda, quando la riconnettete, cliccate
immediatamente il pulsante Run dell’Editor del BASIC Stamp per scaricare il
programma entro il BASIC Stamp.

Non aspettate più di 6 secondi tra il riconnettere energia e il caricare


LeggiMisureDiLuceDaEeprom.bs2 entro il BASIC Stamp o il programma che è ancora nella
memoria di programma (MemorizzaMisureDiLuceInEeprom.bs2) partirà registrando sopra le
misure precedenti. Inoltre, se riducete la Duration del comando PAUSE da 5000 a 500,
avrete soltanto 1,5 secondi!

 Confrontate la tabella nel terminale di Debug visualizzata da questo programma


con quella visualizzata da MemorizzaMisureDiLuceInEeprom.bs2, e verificate
che i valori siano gli stessi.

' Che cos’è un microcontrollore - LeggiMisureDiLuceDaEeprom.bs2


' Legge misure di luce dalla EEPROM.

' {$STAMP BS2}


' {$PBASIC 2.5}

Tempo VAR Word


IndirizzoEeprom VAR Byte

PAUSE 1000

DEBUG "Reperimento misure", CR, CR,


"Misura Valore", CR,
"---------- ------", CR

FOR IndirizzoEeprom = 0 TO 58 STEP 2

READ IndirizzoEeprom, Word tempo


DEBUG DEC2 IndirizzoEeprom, " ", DEC tempo, CR

NEXT

END
Pagina 226 · Che cosa è un microcontrollore?

Come lavora LeggiMisureDiLuceDaEeprom.bs2


Come con il comando WRITE, il comando READ si affida a indirizzi di byte. Poiché
vogliamo leggere valori da word della EEPROM, la variabile IndirizzoEeprom deve
sommare 2 al suo contenuto ad ogni ripetizione del ciclo FOR...NEXT.
FOR IndirizzoEeprom = 0 to 58 STEP 2

Il comando READ ottiene il valore a dimensione word presente in IndirizzoEeprom, e il


valore viene copiato nella variabile tempo.
READ IndirizzoEeprom, Word tempo

I valori delle variabili tempo ed IndirizzoEeprom sono visualizzati in colonne adiacenti


in forma di tabella nel terminale di Debug.
DEBUG DEC2 IndirizzoEeprom, " ", DEC tempo, CR
NEXT

Il vostro turno – Più misure


 Modificate MemorizzaMisureDiLuceInEeprom.bs2 in modo che prenda e
registri il doppio di misure nella stessa quantità di tempo.
 Modificate LeggiMisureDiLuceDaEeprom.bs2 in modo che visualizzi tutte le
misure da MemorizzaMisureDiLuceInEeprom.bs2 appena modificato.

ATTIVITÀ #3: REGISTRARE GRAFICAMENTE MISURE DI LUCE


(OPZIONALE)
L’elenco di misure come quelle della tabella prodotta dai programmi precedenti può
risultare noioso da analizzare. Immaginate di leggere centinaia di questi numeri cercando
quando sorge il sole. O forse state cercando un evento particolare, come quando il
sensore di luce viene coperto per breve tempo. Potreste perfino star cercando una
combinazione di misure che dicano quanto frequentemente il sensore di luce è stato
coperto. Questa informazione può essere utile se il sensore di luce è posto in una zona
attraversata da persone o animali, o un oggetto che passa sopra un sensore posto sopra
una cinghia di raccolta dev’essere registrato e analizzato. Indipendentemente
dall’applicazione, se dovete lavorare tutti con un lungo elenco di numeri, trovare quegli
eventi e configurazioni può essere compito molto difficile e che porta via molto tempo.

Se invece fate un grafico dell’elenco delle misure, vi farà trovare eventi e configurazioni
in modo molto più facile. La persona, l’animale o l’oggetto che passa sopra il sensore di
Misure di Luce · Pagina 227

luce sarà mostrata come un punto in alto o un picco nelle misure. La Figura 7-7 mostra un
esempio di grafico che indica la velocità alla quale gli oggetti su una cinghia di raccolta
stanno passando sopra il sensore. I picchi del grafico avvengono quando le misure
diventano grandi. Nel caso di una cinghia di raccolta, essi indicherebbero che un oggetto
che passa sopra il sensore produce un’ombra. Queso grafico rende facile vedere a colpo
d’occhio che un oggetto passa sopra il sensore grosso modo ogni 7 secondi, ma che
l’oggetto che stiamo aspettando a 28 secondi era o non era là.

Figura 7-7 Grafico delle misure di luce di un fototransistor

Tempo di decadimento
Decay Time Vs.inTime
funzione del tempo
per
forilPhototransistor
circuito RC diRC
unCircuit
fototransistor
9000

8000

7000
Tempo di dec. (2 us)
6000

5000

4000

3000

2000

1000

0
0 10 20 30 40 50 60
"Tempo di decadimento" Tempo (s)

Il grafico in Figura 7-7 è stato generato copiando valori nel terminale di Debug ed
incollandoli su un file di testo che è stato poi importato in un foglio dello spreadsheet
Microsoft Excel. Alcune utilità grafiche possono prenderee il posto del terminale di
Debug e riportare in grafico direttamente i valori invece di visualizzarli come elenchi di
numeri. La Figura 7-8 mostra un esempio di una di queste, chiamata StampPlot LITE.
Pagina 228 · Che cosa è un microcontrollore?

Figura 7-8 StampPlot LITE

In questa attività opzionale, potete andare al sito www.parallax.com/go/WAM e quindi


seguire il link del Data Plotting (tracciamento grafico di dati) per trovare un certo
numero di attività che mostrano come tracciare grafici di valori usando vari pacchetti
software di spreadsheet ed utilità grafiche.
Misure di Luce · Pagina 229

ATTIVITÀ #4: UN SEMPLICE MISURATORE DI LUCE


Le informazioni del sensore di luce possono essere comunicate in molti modi. Il
misuratore di luce con il quale lavorerete in questa attività cambia la velocità alla quale il
display lampeggia in funzione dell’intensità luminosa che rileva.

Parti del misuratore di luce


(1) Fototransistor
(1) Resistenza – 220 Ω (rosso-sosso-marrone)
(2) Condensatori – 0.01 μF (etichettati 103)
(1) Condensatore – 0.1 μF (etichettato 104)
(1) display LED a 7 segmenti
(8) Resistenze – 1 kΩ (marrone-nero-rosso)
(6) Connettori di filo

Costruzione del circuito del misuratore di luce


La Figura 7-9 mostra lo schema del circuito misto display LED a 7 segmenti –
fototransistor usato per il misuratore di luce, e la Figura 7-10 mostra un diagramma di
cablaggio dei circuiti. Il circuito del fototransistor è lo stesso delle ultime due attività, e il
circuito del display LED a 7 segmenti è lo stesso della Figura 6-11 a pagina 190.

 Costruite il circuito mostrato in Figura 7-9 e Figura 7-10.


 Provate il display LED a 7 segmenti per assicurarvi che sia stato connesso in
modo corretto, usando il programma ProvaSegmentoConAltoBasso.bs2 dalla
Attività#2, Capitolo 6, che inizia a pagina 189.
Pagina 230 · Che cosa è un microcontrollore?

LED Figura 7-9


Schema del
circuito del
misuratore di luce
comune

Figura 7-10
Diagramma di
cablaggio per la
Figura 7-9
Misure di Luce · Pagina 231

Uso di subroutine
La maggior parte dei programmi che avete scritto fin qui opera entro un ciclo
DO...LOOP. Dal momento che l’attività principale di un intero programma si svolge
internamente ad un DO...LOOP, questo è chiamato di solito programma (o routine)
principale. Man mano che aggiungete al vostro programma più circuiti e più funzioni
utili, può risultare abbastanza difficile tenere traccia di tutto il codice nel programma
principale. I vostri programmi saranno molto più semplici e facili da gestire se li
organizzate, invece, in segmenti di codice più piccoli che svolgono determinati compiti.
Il PBASIC ha alcuni comandi che potete usare per fare in modo che il programma esca
fuori dal segmento principale, faccia un lavoro, e poi torni indietro allo stesso punto del
segmento principale da cui era partito. Ciò vi consentirà di mantenere ciascun segmento
di codice che svolge un compito particolare, in un certo altro posto rispetto al segmento
principale. Ciascuna volta in cui vi serve che il programma svolga uno di questi compiti,
potete scrivere un comando interno al segmento principale che dica al programma di
saltare a quel compito, eseguirlo, e tornare indietro quando il compito è stato svolto. I
compiti sono chiamati subroutine e questo processo appena descritto è detto chiamare
una subroutine.

La Figura 7-11 mostra un esempio di subroutine e del suo uso. Il comando GOSUB
Subroutine_Name fa saltare il programma all’etichetta Subroutine_Name:. Quando il
programma raggiunge l’etichetta, esegue i comandi fino al comando RETURN. Quindi, il
programma torna indietro al comando che seguiva il comando GOSUB. Nel caso
dell’esempio in Figura 7-11, il comando successivo è: DEBUG "Next command".

DO
GOSUB Subroutine_Name
DEBUG "Next command"
LOOP
Figura 7-11
Come lavora una
Subroutine_Name: Subroutine
DEBUG "This is a subroutine..."
PAUSE 3000
RETURN
Pagina 232 · Che cosa è un microcontrollore?

Che cosa è una etichetta? Una etichetta è un nome usato come segnaposto nel vostro
programma. GOSUB è uno dei comandi usabili per saltare a un‘etichetta. Altri comandi sono
GOTO, ON GOTO, e ON GOSUB. Una etichetta deve terminare con “due punti”, e per amore di
stile, separate le parole che la compongono con il carattere underscore (sottolineatura) in
modo che siano facili da riconoscere. Quando scegliete un nome come etichetta,
assicuratevi di non usare una parola riservata o un nome che è già stato usato per una
variabile o costante. Le altre regole per un nome di etichetta sono le stesse di quelle
adoperate per i nomi delle variabili, elencate nel box informativo a pagina 47.

Programma esempio: SubroutineSemplici.bs2


Questo programma esempio mostra come lavorino le subroutine, inviando messaggi al
terminale di Debug.

 Esaminate SubroutineSemplici.bs2 e provate ad indovinare l’ordine in cui


verranno eseguiti i comandi DEBUG.
 Digitate ed eseguite il programma.
 Confrontate il comportamento effettivo del programma con le vostre previsioni.

' Che cos’è un microcontrollore - SubroutineSemplici.bs2


' Mostra come lavorano le subroutine.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000

DO

DEBUG CLS, "Inizio programma principale.", CR


PAUSE 2000
GOSUB Prima_Subroutine
DEBUG "Ritorno al programma principale.", CR
PAUSE 2000
GOSUB Seconda_Subroutine
DEBUG "Ripeto il programma principale...", CR
PAUSE 2000

LOOP

Prima_Subroutine:

DEBUG " Esecuzione prima "


DEBUG "subroutine.", CR
PAUSE 3000

RETURN
Misure di Luce · Pagina 233

Seconda_Subroutine:

DEBUG " Esecuzione seconda "


DEBUG "subroutine.", CR
PAUSE 3000

RETURN

Come lavora SubroutineSemplici.bs2


La Figura 7-12 mostra come lavora nel programma principale (ciclo DO...LOOP) la
chiamata di Prima_Subroutine. Il comando GOSUB Prima_Subroutine manda il
programma all’etichetta Prima_Subroutine:. Poi, vengono eseguiti i tre comandi
interni alla subroutine. Quando il programma incontra il comando RETURN, salta indietro
al comando che viene proprio dopo il comando GOSUB Prima_Subroutine, che è DEBUG
"Ritorno al programma principale.", CR.

Che cos’è una chiamata di subroutine? Quando usate il comando GOSUB per far saltare
il programma ad una subroutine, questo compito è detto chiamata di una subroutine.

PAUSE 2000
GOSUB Prima_Subroutine
DEBUG "Ritorno al programma principale.", CR

Prima_Subroutine: Figura 7-12


Chiamata di
DEBUG " Esecuzione di prima " Prima
DEBUG "subroutine.", CR Subroutine

PAUSE 3000
RETURN

La Figura 7-13 mostra un secondo esempio dello stesso processo con la chiamata della
seconda subroutine (GOSUB Seconda_Subroutine).
Pagina 234 · Che cosa è un microcontrollore?

PAUSE 2000
GOSUB Seconda_Subroutine
DEBUG "Ripeto il programma principale...", CR

Seconda_Subroutine: Figura 7-13


Chiamata
DEBUG " Esecuzione seconda " Seconda
DEBUG "subroutine", CR Subroutine

PAUSE 3000
RETURN

Il vostro turno – Aggiunta e annidamento di subroutine


Potete aggiungere altre subroutine dopo le due che sono nel programma, e chiamarle
dall’interno del programma principale.

 Aggiungete la subroutine mostrata in Figura 7-11 a pagina 231 al programma


SubroutineSemplici.bs2.
 Fate qualsiasi modifica sia necessaria ai comandi DEBUG in modo che il loro
display vada d’accordo con tutte e tre le subroutine.

Potete anche chiamare una subroutine dall’interno di un’altra. Questo evento è detto
annidamento di subroutines.

 Provate a muovere il comando GOSUB che chiama Subroutine_Name entro una


delle altre subroutine, e guardate come lavora.

Quando annidate subroutine la regola è non più di quattro chiamate annidate. Guardate il
Manuale del BASIC Stamp o l’aiuto dell’Editor del BASIC Stamp per avere maggiori
informazioni. Attenzione a GOSUB e RETURN.

Misuratore di luce che usa subroutine


Il programma successivo, MisuratoreDiLuce.bs2, usa subroutine per controllare il display
del LED a 7 segmenti a seconda del livello di luce rilevato dal fototransistor. I segmenti
del display ciclano on e off in una configurazione circolare che va più veloce quando la
Misure di Luce · Pagina 235

luce sul fototransistor diventa più forte. Quando la luce diventa più debole, il ciclo in
configurazione circolare rallenta. Il programma esempio MisuratoreDiLuce.bs2 usa una
subroutine chiamata Aggiorna_Display per controllare l’ordine in cui avanzano i
segmenti del misuratore di luce.

Il programma che mette in moto il misuratore di luce tratterà di tre diverse operazioni:

1. Leggere il fototransistor.
2. Calcolare quanto si debba aspettare prima di aggiornare il display LED a 7
segmenti.
3. Aggiornare il display LED a 7 segmenti.

Ciascuna operazione è contenuta entro la sua propria subroutine, e la routine principale


DO...LOOP chiamerà ciascuna subroutine in sequenza, indefinitamente.

Programma esempio: MisuratoreDiLuce.bs2

Condizioni di illuminazione controllate fanno una bella differenza! Per avere risultati
ottimi, condurre questa prova in un ambiente illuminato da lampade fluorescenti con poca
luce solare, o comunque non alla luce solare diretta (chiudere le tapparelle). Per
informazioni su come calibrare questo misuratore in altre condizioni di illuminazione, vedere
il paragrafo “Il vostro turno”.

 Digitate ed eseguite MisuratoreDiLuce.bs2.


 Verificate che la velocità di ciclo della configurazione circolare visualizzata dal
LED a 7 segmenti sia controllata dalle condizioni di illuminazione percepite dal
fototransistor. Fate questo gettando su di esso un’ombra con la vostra mano o
con un pezzo di carta e verificate che la velocità della configurazione circolare
del display rallenti.

' Che cos’è un microcontrollore - MisuratoreDiLuce.bs2


' Indica il livello di luce usando un display a 7 segmenti.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000

DEBUG "Programma in esecuzione!"

indice VAR Nib ' Dichiarazione di variabili.


tempo VAR Word
Pagina 236 · Che cosa è un microcontrollore?

OUTH = %00000000 ' Inizializza display a 7 segmenti.


DIRH = %11111111

DO ' Routine principale.

GOSUB Ottieni_Tempo_Rc
GOSUB Ritarda
GOSUB Aggiorna_Display

LOOP
' Subroutine

Ottieni_Tempo_Rc: ' subroutine tempo RC

HIGH 2
PAUSE 3
RCTIME 2, 1, tempo

RETURN

Ritarda: ' subroutine ritarda.

PAUSE tempo / 3

RETURN

Aggiorna_Display: ' subroutine che aggiorna il Display.

IF indice = 6 THEN indice = 0


' BAFG.CDE
LOOKUP indice, [ %01000000,
%10000000,
%00000100,
%00000010,
%00000001,
%00100000 ], OUTH
indice = indice + 1

RETURN

Come lavora MisuratoreDiLuce.bs2


Le prime due righe del programma dichiarano le variabili. Non importa se queste
variabili siano usate nelle subroutine o nel programma principale, è sempre meglio
dichiarare le variabili (e le costanti) all’inizio del programma.

Visto che questa è una pratica così comune, la sezione di codice ha un nome,
“Dichiarazioni di variabili.” Questo nome è mostrato nel commento a destra della prima
dichiarazione di variabile.
Misure di Luce · Pagina 237

indice VAR Nib ' Dichiarazioni di variabili.


tempo VAR Word
Molti programmi hanno anche cose che debbono essere fatte una volta sola all’inizio del
programma. Impostare bassi tutti i pin I/O del 7 segmenti e poi farli diventare output, è
un esempio. Questa sezione di programma PBASIC ha anch’essa un nome,
“Inizializzazione.”
OUTH = %00000000 ' Inizializza display a 7 segmenti.
DIRH = %11111111

Il segmento di codice successivo è detto routine principale. La routine principale chiama


per prima la subroutine Ottieni_tempo_Rc. Poi, chiama la subroutine Ritarda, e
dopo di questa, chiama la subroutine Aggiorna_Display. Tenete a mente che il
programma va sulle tre subroutine quanto più velocemente può, all’infinito.
DO ' Routine principale.
GOSUB Ottieni_tempo_Rc
GOSUB Ritarda
GOSUB Aggiorna_Display
LOOP

Tutte le subroutine sono poste di solito dopo la routine principale. Il nome della prima
subroutine è Ottieni_tempo_Rc, ed essa prende le misure di tempo (di decadimento)
RC sul circuito del fototransistor. La subroutine ha un comando PAUSE che carica il
condensatore. La Duration di questo comando è piccola perché occorre che la pausa
consenta soltanto di assicurarsi che il condensatore si sia caricato. Notate che il comando
RCTIME imposta il valore della variabile tempo. Questa variabile sarà usata dalla seconda
subroutine.
' Subroutine
Ottieni_tempo_Rc: ' subroutine tempo RC
HIGH 2
PAUSE 3
RCTIME 2, 1, tempo
RETURN

Il nome della seconda subroutine è Ritarda, e tutto ciò che contiene è un comando
PAUSE tempo / 3. Il comando PAUSE consente che il tempo di decadimento misurato
(cioè quanto sia alta la luce) controlli il ritardo tra l’accensione di ciascun segmento
lumiinoso nel display a rivoluzione circolare del LED a 7 segmenti. Il valore a destra
dell’operatore / di divisione può essere reso maggiore per avere una rotazione più veloce
Pagina 238 · Che cosa è un microcontrollore?

in condizioni di luce bassa o più lento per rallentare il display in condizioni di luce più
alta. Potete anche usare * per moltiplicare la variabile tempo per un valore invece che
dividerla, per fare in modo che il display vada parecchio più piano, e per un controllo più
preciso sulla velocità, non dimenticate l’operatore */. Maggiori informazioni su questo
operatore sono nella sezione “Il vostro turno”.
Ritarda:
PAUSE tempo / 3
RETURN

La terza subroutine è detta Aggiorna_Display. Il comando LOOKUP in questa


subroutine contiene una tabella con configurazioni di sei bit, usate per creare le
configurazioni circolari intorno al perimetro esterno del display LED a 7 segmenti.
Aggiungendo 1 alla variabile indice ciascuna volta che la subroutine viene richiamata,
si fa immettere nella variabile OUTH la configurazione successiva nella sequenza. Ci sono
solo sei entrate nella tabella del LOOKUP per i valori di indice da 0 fino a 5. Che cosa
accade quando il valore di indice passa a 6? Il comando LOOKUP non sa tornare
automaticamente indietro alla prima entrata, ma voi potete usare una frase IF...THEN
per correggere questo problema. Il comando IF indice = 6 THEN indice = 0
reimposta il valore di indice a 0 ogni volta che esso va a 6. Esso fa anche ripetere
indefinitamente la sequenza di configurazioni di bit posta in OUTH . Ciò, a sua volta, fa in
modo che il display LED a 7 segmenti ripeta la sua configurazione circolare
indefinitamente.
Aggiorna_Display:

IF indice = 6 THEN indice = 0


' BAFG.CDE
LOOKUP indice, [ %01000000,
%10000000,
%00000100,
%00000010,
%00000001,
%00100000 ], OUTH
indice = indice + 1
RETURN

Il vostro turno – Regolazione dell’hardware e del software del misuratore


Ci sono due modi per cambiare la sensibilità del misuratore. Primo: il “software,” che è
il programma PBASIC, si può modificare per regolare la velocità. Come già ricordato
Misure di Luce · Pagina 239

prima, dividendo la variabile tempo – nel comando PAUSE tempo / 3 della subroutine
Ritarda - per numeri superiori a 3, si accelererà il display, e numeri più piccoli lo
rallenteranno. Per rallentarlo davvero, tempo può anche essere moltiplicato per valori
con l’operatore di moltiplicazione *, e per una regolazione più precisa, c’è l’operatore */.

Quando connettete dei condensatori in parallelo, i loro valori si sommano. Quindi, se


inserite un secondo condensatore da 0,01 μF proprio appresso al primo, come mostrato in
Figura 7-14 e Figura 7-15 (connessione in parallelo), la capacità totale sarà 0,02 μF. Con
una capacità doppia, la misura del decadimento per lo stesso livello di luce durerà il
doppio.

 Connettete il secondo condensatore da 0,01 μF proprio accanto al primo nella


porzione sensore di luce del circuito del misuratore di luce in Figura 7-14 e
Figura 7-15.
 Eseguite MisuratoreDiLuce.bs2 ed osservate il risultato.

Poiché le misure di tempo saranno più grandi del doppio, la configurazione circolare del
LED a 7 segmenti dovrebbe ruotare due volte più velocemente.

Figura 7-14
Due condensatori da
0,01 μF in parallelo =
0,02 μF
Pagina 240 · Che cosa è un microcontrollore?

Figura 7-15
Circuiti del Misuratore
di luce con due
condensatori da 0,01
μF in parallelo

Invece di metà della velocità con un condensatore da 0,01 μF, che ve ne pare di un
decimo della velocità? Potete far questo sostituendo i due condensatori da 0,01 μF con
un condensatore da 0,1 μF. Questo funzionerà bene in ambienti molto illuminati, ma sarà
probabilmente un po’ più lento con illuminazione normale. Ricordate che quando usate
un condensatore dieci volte più grande, la misura del tempo RC prenderà un tempo dieci
volte maggiore.

 Sostituite i condensatori da 0,01 µF con un condensatore da 0,1 µF.


 Eseguite il programma e guardate se l’effetto previsto si verifica.
 Prima di continuare, reimpostate il circuito in modo che ci sia un condensatore
da 0,01 in parallelo col fototransistor iniziando di nuovo, come mostrato dalla
Figura 7-9 e dalla Figura 7-10, a pagina 230.
 Provate il circuito ripristinato per verificare che lavori prima di continuare.

Cosa è meglio, modificare il software o regolare l’hardware? Potete sempre provare ad


usare il meglio di entrambi i mondi. Prendete un condensatore che vi dà le misure più
accurate nella maggior gamma di livelli di illuminazione. Una volta che il vostro hardware è
il migliore che potete avere, usate il software per regolare automaticamente il misuratore di
luce in modo che operi bene per l’utente sotto la maggior gamma di condizioni. Ciò prende
un considerevole ammontare di prove e raffinamenti, ma tutto questo è parte del processo di
sviluppo di un prodotto.

ATTIVITÀ #5: USCITA ON/OFF DI UN FOTOTRANSISTOR


Prima che i microcontrollori fossero d’uso comune nei prodotti, nei circuiti venivano
usate le fotoresistenze che variavano il loro voltaggio di uscita. Quando il voltaggio
Misure di Luce · Pagina 241

scendeva sotto un valore di soglia, che indicava le ore notturne, altri circuiti del
dispositivo accendevano le luci. Quando il voltaggio superava la soglia, indicando con
ciò la luce del giorno, gli altri circuiti nel dispositivo spegnevano le luci. Questo
comportamento da interruttore binario di luci può essere emulato con lo stesso BASIC
Stamp e il circuito di decadimento RC, modificando semplicemente il programma
PBASIC. In alternativa, il circuito può essere modificato in modo che invii un 1 o uno 0
ad un pin I/O a seconda del valore di voltaggio fornito al pin, in modo simile a quello in
cui si comporta un pulsante. In questa attività, proverete entrambi questi approcci.

Regolazione del programma per gli stati On/Off


FototransistorAnalogicoABinario.bs2 prende l’intervallo di misure del fototransistor e lo
confronta col punto a metà strada tra la misura più grande e quella più piccola. Se la
misura è al disopra del punto a metà strada, visualizza “Accendi le luci”; altrimenti,
visualizza “Spegni le luci.” Il programma usa direttive costanti per definire le misure più
grande e più piccola che il programma dovrebbe aspettarsi dal circuito del fototransistor.
valMax CON 4000
valMin CON 100

Il programma usa anche gli operatori MIN e MAX per garantire che i valori stiano entro
questi limiti, prima di utilizzarli per prendere qualsiasi decisione. Se tempo è maggiore
di valMax (4000 nel programma esempio), la frase imposta tempo a valMax = 4000.
Analogamente se tempo è minore di valMin (100 nel programma esempio), la frase
imposta tempo a valMin = 100.
tempo = tempo MAX valMax MIN valMin

Una frase IF...THEN...ELSE converte l’intervallo dei valori analogici digitati in una
uscita binaria che prende la forma di messaggi accendi-luci o spegni-luci.
IF tempo > (valMax - valMin) / 2 THEN
DEBUG CR, "Accendi le luci "
ELSE
DEBUG CR, "Spegni le luci "
ENDIF

Prima che questo programma lavori correttamente, dovete calibrare le vostre condizioni
di illuminazione come segue:
Pagina 242 · Che cosa è un microcontrollore?

 Controllate il circuito del fototransistor per assicurarvi che abbia soltanto un


condensatore da 0,01 μF (etichettato 103).
 Digitate FototransistorAnalogicoABinario.bs2 nell’Editor del BASIC Stamp.
Assicuratevi di aggiungere uno spazio extra dopo la “i” di “luci” nel messaggio
"Accendi le luci ". Altrimenti, dal messaggio "Spegni le luci ", che ha un
carattere in meno, otterrete una “i” fantasma, prodotta dal primo messaggio.
 Caricate il programma nel BASIC Stamp.
 Osservate il terminale di Debug quando applicate le condizioni di più buio e più
luce che volete provare, e prendete nota dei valori massimo e minimo di tempo
risultanti.
 Digitate questi valori nelle direttive valMax e valMin del programma.

Ora, il vostro programma è pronto per essere eseguito e provato.

 Caricate il programma modificato nel BASIC Stamp.


 Provatelo per verificare che le condizioni di luce bassa producano il messaggio
“Accendi le luci ” e le condizioni di luce forte producano il messaggio “Spegni
le luci”.

' Che cos’è un microcontrollore - FototransistorAnalogicoABinario.bs2


' Cambia le misure analogiche del fototransistor in un risultato binario.

' {$STAMP BS2}


' {$PBASIC 2.5}

valMax CON 4000


valMin CON 100

tempo VAR Word

PAUSE 1000

DO

HIGH 2
PAUSE 100
RCTIME 2, 1, tempo

tempo = tempo MAX valMax MIN valMin

DEBUG HOME, "tempo = ", DEC5 tempo


IF tempo > (valMax - valMin) / 2 THEN
DEBUG CR, "Accendi le luci "
ELSE
DEBUG CR, "Spegni le luci "
ENDIF
Misure di Luce · Pagina 243

LOOP

Il vostro turno – Soglie differenti per luce e buio


Se provate ad incorporare FototransistorAnalogicoABinario.bs2 entro un sistema di
illluminazione automatico, esso ha un difetto potenziale. Diciamo che fuori è abbastanza
buio per far passare la misura di tempo al di sopra di (valMax – valMin) / 2, in modo
che la luce venga accesa. Ma se il sensore rileva quella luce, causerà il passaggio della
misura al di sotto di(valMax – valMin) / 2, in modo che la luce si spegnerà di nuovo.
Questo ciclo accendi/spegni della luce potrbbe ripetersi rapidamente per tutta la notte!

La Figura 7-16 mostra in un grafico come potrebbe lavorare questa cosa. Non appena il
livello di luce scende, il valore della variabile tempo aumenta, e quando esso oltrepassa
la soglia, le luci si accenderanno automaticamente. Quindi, dal momento che il
fototransistor sente la luce che si è appena accesa, la misura della variabile tempo cade di
nuovo sotto la soglia, quindi la luce si spegne. Allora, il valore della variabile tempo
aumenta di nuovo, e supererà la soglia, per cui le luci si accenderanno, e la variabile
tempo cade di nuovo sotto la soglia, e così via …

valMax
"Accendi le luci "

Figura 7-16
(valMax - valMin) / 2
Oscillazioni
sopra/sotto una
"Spegni le luci"
soglia
valMin

Un rimedio a questo problema è aggiungere una seconda soglia, come illustrato nella
Figura 7-17. La soglia “Accendi le luci” accende le luci soltanto dopo che si è fatto buio
completo, e la soglia “Spegni le luci” spegne le luci soltanto dopo che si è fatto
completamente giorno. Con questo sistema, la luce si accende dopo che tempo passa
entro l’intervallo “Accendi le luci”. L’accensione delle luci fa più chiaro di quanto era,
quindi tempo cade leggermente, ma dal momento che non cade di nuovo chiaro al di
sotto della soglia “Spegni le luci”, non cambia nulla, e la luce resta accesa come in realtà
dovrebbe. Per descrivere questo tipo di sistema si usa il termine isteresi, con due diverse
Pagina 244 · Che cosa è un microcontrollore?

soglie di ingresso che influenzano le sue uscite, assieme ad una zona di non-transizione
tra le due.

valMax
"Accendi le luci "
(valMax - valMin) / 4 * 3
Figura 7-17
Nessuna transizione
Uso di soglie diverse
(valMax - valMin) / 4
Alta e Bassa per
"Spegni le luci"
prevenire oscillazioni
valMin

Potete implementare questo sistema a due soglie nel vostro codice PBASIC modificando
la frase IF...THEN...ELSEIF di FotransistorAnalogicoABinario.bs2. Eccovi un
esempio:
IF tempo > (valMax - valMin) / 4 * 3 THEN
DEBUG CR, "Accendi le luci "
ELSEIF tempo < (valMax - valMin ) / 4 THEN
DEBUG CR, "Spegni le luci "
ENDIF

Il primo blocco di codice IF...THEN visualizza "Accendi le luci " quando la variabile
tempo memorizza un valore che è a più di ¾ di strada dal valore più alto di tempo (luce
minima). Il blocco di codice ELSEIF visualizza "Spegni le luci " soltanto quando la
variabile tempo memorizza un valore che è a meno di ¼ di strada sopra il valore di tempo
più piccolo (luce massima).

 Salvate FototransistorAnalogicoABinario.bs2 come FotransistorIsteresi.bs2.


 Prima di modificare FotransistorIsteresi.bs2, provatelo per accertarvi che la
soglia esistente lavori. Ripetete i passi di calibrazione di valMin e valMax
(visti prima del codice esempio di FototransistorAnalogicoABinario.bs2), se la
luce è cambiata.
 Sostituite la frase IF...ELSE...ENDIF di FotransistorIsteresi.bs2 con la
IF...ELSEIF...ENDIF appena discussa.
 Caricate FotransistorIsteresi.bs2 nel BASIC Stamp.
 Provatelo e verificate che la soglia “Accendi le luci” sia la più buia, e la soglia
“Spegni le luci” sia la più luminosa.
Misure di Luce · Pagina 245

Se aggiungete un circuito con LED e modificate il codice in modo che accenda e spenga
il LED, potrebbero accadere alcune cose interessanti. Potreste ancora vedere il
comportamento on/off (accendi/spegni) quando diventa buio, anche con l’isteresi
programmata, specialmente se ponete il LED proprio vicino al fototransistor,. Quanto
lontano dal fototransistor dovrà essere il LED per ottenere che le due soglie prevengano il
comportamento on/off? Supponendo che valMin e valMax siano gli stessi in entrambi i
programmi, quanto dovrà essere lontano il LED per far operare il programma
FototransistorAnalogicoABinario.bs2 non modificato in modo corretto?

TTL Vs. Trigger di Schmitt


Il vostro pin I/O del BASIC Stamp invia e riceve segnali usando la transistor-transistor logic
(TTL). Come output, il pin I/O invia un segnale alto di 5 V o un segnale basso di 0 V. Il lato
sinistro della Figura 7-18 mostra il pin I/O che si comporta come input. Il registro IN del pin
I/O (IN0, IN1, IN2, ecc.) memorizza un 1 se il voltaggio applicato è sopra 1,4 V, o uno 0 se
è sotto 1,4 V. Nella figura questi sono indicati come 1 Logico e 0 Logico.
Un trigger di Schmitt è un circuito rappresentato dal simbolo al centro della Figura 7-18. Il
lato destro della Figura 7-18 mostra come si comporterebbe un pin I/O impostato come input
se avesse incorporato un circuito trigger di Schmitt. Come il codice PBASIC con due soglie,
il trigger di Schmitt ha una isteresi. Il valore di input memorizzato dal registro INx del pin
I/O non cambia da 0 ad 1 fino a quando il voltaggio di input supera 4,25 V. Analogamente,
non cambia da 1 a 0 fino a quando il voltaggio di input scende sotto 0,75 V. Il BASIC Stamp
2px ha un comando PBASIC che consente di configurare i suoi pin di input come trigger di
Schmitt.
Figura 7-18 Soglie e simbolo di TTL Vs. Trigger di Schmitt

Soglie Simbolo del Soglia


TTL Trigger di Schmitt Trigger di Schmitt

5V 5V
1 Logico
≈4.25 V
1 Logico
Nessun Cambiamento
≈1.4 V
0 Logico
≈0.75 V
0 Logico
0V 0V

Regolazione del circuito per gli stati On/Off


Come è stato ricordato nel Capitolo 5, Attività #2, la soglia di voltaggio per i pin I/O del
BASIC Stamp è 1.4 V. Quando un pin I/O è impostato come input, i voltaggi sopra 1,4
Pagina 246 · Che cosa è un microcontrollore?

V applicati al pin I/O producono un 1 binario e i voltaggi sotto 1,4 V producono uno 0
binario. Il nodo Vo nel circuito mostrato in Figura 7-19 varia in voltaggio con la luce.
Questo circuito può essere connesso a un pin I/O del BASIC Stamp e, con poca luce, il
voltaggio scenderà sotto la soglia di 1,4 V del BASIC Stamp, e il registro di input del pin
I/O memorizzerà uno 0. In condizioni di luce forte, Vo sale al di sopra di 1,4 V, e il
registro di input del pin I/O memorizzerà un 1.

Figura 7-19
Uscita in voltaggio del
+ circuito misuratore di luce
V =R
– I

La ragione per cui il voltaggio in Vo cambia con i livelli di luce è la legge di Ohm, che
stabilisce che il voltaggio ai capi di una resistenza (V in Figura 7-19) è uguale alla
corrente che attraversa la resistenza (I) , moltiplicata per il valore della resistenza (R).

V=I×R

Ricordate che un fototransistor lascia passare più corrente quando è esposto a luce forte, e
meno corrente quando è esposto a luce debole. Diamo un’occhiata più da vicino al
circuito esempio in Figura 7-19 e calcoliamo quanta corrente deve passare nella
resistenza per creare una caduta di 1,4 V ai suoi capi. Prima di tutto, sappiamo che il
valore della resistenza è 10 kΩ, cioè 10,000 Ω. Sappiamo anche che vogliamo un
voltaggio uguale a 1,4 V, così dobbiamo modificare la legge di Ohm per risolvere in
funzione di I. Per farlo, dividiamo entrambi i lati dell’equazione V = I × R per R, e
otteniamo I = V ÷ R. Poi, sostituiamo i valori noti (V = 1,4 V e R = 10 kΩ), e risolviamo
in funzione di I.

I = V÷R
= 1,4 V ÷ 10 kΩ
= 1,4 V ÷ 10.000 Ω
Misure di Luce · Pagina 247

= 0,00014 V/Ω
= 0,00014 A
= 0,14 mA

Ora, che succede se il transistor lascia passare il doppio di quella corrente poiché la luce è
forte, e quale dovrebbe essere il voltaggio ai capi della resistenza? Per il doppio della
corrente, I = 0,28 mA, e la resistenza è ancora 10 kΩ, quindi ora torniamo a risolvere per
V dall’equazione originale V = I × R con I = 0,28 mA ed R = 10 kΩ:

V = I×R
= 0,28 mA × 10 kΩ
= 0,00028 A × 10.000 Ω
= 2,8 AΩ
= 2,8 V

Con 2,8 V applicati ad un pin I/O, il suo registro di input memorizzerà un 1 poiché 2,8 V
è sopra al voltaggio di soglia 1,4 V del pin I/O.

Il vostro turno – Più calcoli


Che succede se il fototransistor fa passare nel circuito metà della corrente relativa alla
tensione di soglia (0,07 mA), e quale dovrebbe essere il voltaggio ai capi della resistenza?
Inoltre, cosa memorizzerebbe il registro di input del pin I/O?

Prova del sensore binario di luce


Provare il circuito del sensore di luce binario è molto simile a provare il circuito del
pulsante dall’attività #1, capitolo 3. Quando il circuito è connesso a un pin I/O, il
voltaggio sarà al di sopra o al di sotto della soglia di 1,4 V del pin I/O del BASIC Stamp,
questo produrrà un 1 o uno 0, che saranno visualizzati allora con il terminale di Debug.

Parti del sensore di luce Analogico-a-Binario


(1) Fototransistor
(1) Resistenza – 220 Ω (rosso-rosso-marrone)
(1) Resistenza – 10 kΩ (marrone-nero-arancio)
(1) Resistenza – 2 kΩ (rosso-nero-rosso)
(1) Resistenza – 4,7 kΩ (giallo-viola-rosso)
(1) Resistenza – 100 kΩ (masrrone-nero-giallo)
(2) Connettori di filo
Pagina 248 · Che cosa è un microcontrollore?

Circuito del sensore di luce Analogico-a-Binario


Se il circuito è quello mostrato in Figura 7-20, si comporta come un pulsante controllato
dall’oscurità. Il buio produce in2 = 0, la luce forte produce in2 = 1. Tenete a mente
che un pin I/O impostato ad input non influenza il circuito che controlla, perché non
origina o cede alcuna corrente. Ciò rende tanto il pin I/O che la resistenza da 220 Ω
essenzialmente invisibili al circuito. Così, il voltaggio risultante dai calcoli del nostro
circuito fatti nella sezione precedente sarà lo stesso con o senza la resistenza da 220 Ω e il
pin I/O connessi.

 Costruite il circuito mostrato in Figura 7-20.

Figura 7-20: Schema elettrico e Diagramma di cablaggio per il circuito del sensore di luce
analogico-a-binario connesso ad un pin I/O

Codice di prova sensore di luce Analogico-a-Binario


ProvaBinariaFototransistor.bs2 è una versione modificata di LeggiStatoPulsante.bs2
dall’attività #1 del capitolo 3. A parte la modifica dei commenti, l’unico cambiamento al
programma reale è la riga DEBUG ? IN2, che era DEBUG ? IN3 nel programma esempio
col pulsante, perché il pulsante era connesso a P3 invece di P2.

 Rivedete l’attività #1 del capitolo 3 (pagina 69).


 Usate ProvaFototransistorBinario.bs2 qui sotto per verificare che una luce forte
sul fototransistor produce un 1 mentre il buio produce uno 0. Potreste aver
bisogno di una bella luce molto forte. Se la vostra illuminazione interna risulta
ancora in uno 0, provate con la luce del sole o con quella di un flash molto
Misure di Luce · Pagina 249

ravvicinato. Un rimedio alternativo per la bassa illuminazione è sostituire la


resistenza da 10 kΩ con una resistenza da 100 kΩ.

' Che cos’è un Microcontrollore - ProvaFototransistorBinario.bs2


' Controlla lo stato dell’uscita binaria del circuito di un fototransistor
' ogni 1/4 di secondo.

' {$STAMP BS2}


' {$PBASIC 2.5}

DO
DEBUG ? IN2
PAUSE 250
LOOP

Prova di resistenze in serie


Date un’occhiata ai calcoli V = I × R fatti precedentemente in questa attività. Se la
resistenza in serie è 1/5 del suo valore, il voltaggio ai suoi capi sarà 1/5 del suo valore,
nelle stesse condizioni di luce. Analogamente, una resistenza che sia 10 volte più grande
produrrà un voltaggio dieci volte maggiore.

Cosa accade per questo al nostro circuito? Una resistenza da 100 kΩ al posto di una da
10 kΩ significa che il fototransistor dovrà condurre soltanto 1/10 della corrente perché il
pin I/O del BASIC Stamp salga oltre la soglia di 1,4 V, che a sua volta vuol dire che ci
vuole meno luce per portare un 1 binario nel registro di input del pin I/O. Questo circuito
potrebbe lavorare come sensore in un ambiente che si suppone sia al buio, visto che sarà
sensibile a piccole quantità di luce. Invece, 1/5 del valore della resistenza significa che il
fototransistor deve condurre una corrente 5 volte maggiore, perché il voltaggio ai suoi
capi superi la soglia di 1,4 V, per questo motivo ci vuole più luce per innescare un 1
binario nel registro di input del pin I/O. Quindi, questo circuito sarebbe migliore per
rilevare luce più forte.

 Sperimentate con resistenze di 2 kΩ, 4,7 kΩ, 10 kΩ, e 100 kΩ e confrontate le


variazioni di sensibilità alla luce con ciascuna resistenza.
Pagina 250 · Che cosa è un microcontrollore?

Il vostro turno – Indicatore di livello di luce bassa


 Scegliete una resistenza con la miglior risposta 1/0 ai livelli di luce bassa della
vostra zona di lavoro.
 Aggiungete al vostro circuito a soglia con fototransistor il LED descritto
nell’attività #3 del Capitolo 3.
 Mettete qualcosa tra il LED e il fototransistor in modo che il fototransistor non
possa “vedere” il LED. Questo eliminerà una potenziale interferenza tra i due
dispositivi.
 Modificate il programma in modo che faccia lampeggiare luce (del LED) quando
si getta ombra sul fototransistor.

ATTIVITÀ #6: PER DIVERTIRSI—MISURA DELLA LUCE ESTERNA CON


UN LED
Come ricordato prima, il circuito introdotto nell’attività #4 è progettato per misure di luce
interna (indoor). Che cosa succede se la vostra applicazione deve prendere misure di luce
all’esterno (outdoor)? Una opzione sarebbe trovare un fototransistor che generi meno
corrente con la stessa quantità di luce. Un’altra opzione sarebbe usare uno degli altri
sensori di luce nel kit “What’s a Microcontroller”. Essi sono camuffati da LED, e si
comportano particolarmente bene per misure di luce intensa.

Quando attravero il LED passa una corrente elettrica, esso emette luce, così cosa pensate
che accada quando la luce brilla su di un LED? Si davvero, può provocare una corrente
elettrica che passa in un circuito. La Figura 7-21 mostra un circuito a LED per rilevare
livelli di luce esterna, o in altre aree a luce molto intensa. Mentre il fototransistor
consente alla corrente di passare purché sia applicata una pressione elettrica (voltaggio),
il LED è più simile ad un sottile pannello solare e crea il suo proprio voltaggio per fornire
la corrente. Per quanto riguarda il circuito a decadimento RC, il risultato con un LED è
all’incirca lo stesso. Il LED conduce più corrente e – con maggior luce – prosciuga il
condensatore della sua carica più rapidamente, e conduce meno corrente e prosciuga il
condensatore meno rapidamente con minor luce.
Misure di Luce · Pagina 251

Figura 7-21
Giallo Schema per il LED nel
Circuito a tempo RC
sensore di luce

Perché il LED è connesso in senso inverso? Nell’attività #1 del capitolo 5, l’anodo del
LED era connesso alla resistenza da 220 Ω, e il catodo era connesso a massa. Quel
circuito faceva emettere luce al LED come risultato del passaggio di una corrente elettrica
nel LED quando si applicava al circuito una tensione (voltaggio). Quando la luce brilla sul
LED, essa crea un piccolo voltaggio che genera una piccola corrente nella direzione
opposta. Così, il LED deve essere inserito in senso inverso in modo che la corrente che
conduce consente al condensatore di scaricarsi attraverso di esso nelle misure di
decadimento RC.

Parti del LED sensore di luce


(1) LED – giallo
(1) LED – verde
(1) LED – rosso
(1) Resistenza – 220 Ω (rosso-rosso-marrone)
(1) Connettore di filo

Circuito del LED sensore di luce


Una delle maggiori differenze tra il LED e il fototransistor è che il LED conduce una
corrente molto minore con la stessa quantità di luce, quindi al LED occorre una luce
molto intensa per condurre corrente sufficiente a scaricare il condensatore abbastanza
rapidamente nella misura RCTIME. Ricordate che la misura massima di tempo che
RCTIME può misurare è 65535 × 2 μs ≈ 131 ms. Così per una buona misura di
decadimento RC con il BASIC Stamp, occorre un condensatore molto più piccolo.
Infatti, il circuito lavora meglio senza alcun condensatore esterno . Il LED ha una
piccolo capacità al suo interno, chiamata capacità di giunzione, e i fermagli metallici che
tengono i fili quando li inserite nella breadboard hanno anch’essi la loro capacità. A
ragione, un condensatore è composto da due piastre metalliche (armature) separate da un
isolante detto dielettrico. Così due fermagli metallici interni alla breadboard, separati da
plastica ed aria, formano un condensatore. La combinazione della capacità di giunzione
Pagina 252 · Che cosa è un microcontrollore?

del LED e della capacità delle mollette (fermagli metallici) della breadboard rende il
LED tale da poterlo usare senza alcun condensatore esterno, come mostrato in Figura
7-22.

 Costruite il circuito mostrato in Figura 7-22 e Figura 7-23, usando il LED giallo.
Accertatevi di osservare la polarità mostrata nelle figure!

LED
giallo Figura 7-22
Schema elettrico del
circuito LED RCTIME

Bordo piatto e pin


catodo piùand
Flat spot corto
shorter cathode pin Figura 7-23
Diagramma di cablaggio
del circuito LED RCTIME

Pin anodo più lungo


Longer anode pin

Prova del LED sensore di luce con il codice PBASIC


Il circuito LED sensore di luce può essere provato in una stanza fortemente illuminata o
all’esterno durante il giorno. In una stanza debolmente illuminata è probabile che i tempi
di misura superino 65535, nel qual caso RCTIME memorizzerà zero nella variabile
risultato. Per la maggior parte delle situazioni, il codice è lo stesso codice dell’attività
#1, ProvaFototransistor.bs2.
Misure di Luce · Pagina 253

Se siete in una stanza con illuminazione intensa provate a far questo:

 Eseguite ProvaFototransistor.bs2 dalla Attività #1.


 Puntate il LED sulla sorgente di luce forte affacciando la vostra scheda ad essa.
 Ruotate gradualmente la scheda allontanandola dalla sorgente di luce intensa
nella stanza; i valori visualizzati dal terminale di Debug dovrebbero aumentare
appena la luce diventa più debole.
Se avete una lampada flash intensa, provate a far questo:

 Eseguite ProvaFototransistor.bs2 dalla Attività #1.


 Eliminate la maggior parte delle sorgenti di luce intensa come la luce solare che
invade le finestre.
 Accendete la lampada flash e puntatela sulla parte superiore (tetto) del LED ad
una distanza di circa 4 pollici (circa 10 cm). Se possibile, spegnete alcune delle
lampade fluorescenti così che gli alti livelli di luce ambiente diventino bassi.
 Osservate le misure che il terminale di Debug visualizza man mano che
aumentate gradualmente la distanza della lampada flash dal tetto del LED . Ciò
vi consentirà di determinare la distanza della lampada flash dal LED.
Se siete in una stanza che ha solo luci fluorescenti e nessuna sorgente di luce forte:

 Eseguite ProvaFototransistor.bs2 dalla Attività #1.


 Eliminate la maggior parte delle sorgenti di luce come la luce del sole che invade
le finestre. Se possibile, spegnete alcune delle luci fluorescenti in modo che i
livelli di luce siano bassi.
 Puntate il LED sul monitor del vostro computer in modo che quasi tocchi il
monitor, e guardate se le misure rendano possible distinguere i vari colori sul
display.
Prove all’esterno (outdoor):

 Eseguite MemorizzaMisureDiLuceInEeprom.bs2 dalla Attività #2.


 Scollegate il cavo di programmazione e portate all’esterno la vostra scheda.
 Orientate la scheda in modo che il LED punti direttamente sul sole.
 Premete e rilasciate il pulsante Reset della vostra scheda per riavviare il
programma di raccolta dati (datalogging).
 Ruotate gradualmente la vostra scheda togliendola dal sole per più di 2 ½ minuti.
 Portate di nuovo dentro la vostra scheda e ricollegatela al PC.
Pagina 254 · Che cosa è un microcontrollore?

 Eseguite LeggiMisureDiLuceDaEeprom.bs2, ed esaminate le misure di luce.


Poiché avete ruotato gradualmente il LED togliendolo dal sole, le misure
successive dovrebbero essere maggiori.

Il vostro turno – Può il vostro BASIC Stamp dire Rosso da Verde?


In Figura 7-2, il verde è a metà dello spettro, e il rosso è a destra. Se scaricate la versione
PDF a colori di questo libro dal sito www.parallax.com, oppure se avete già l’immagine
dello spettro a colori, ponete il LED verde e poi il LED rosso contro lo schermo e
registrate misure di luce sullo spettro dei colori. Poi, confrontando le misure più basse
con ciascun LED, potete rilevare se il LED è posto contro il verde o il rosso dello
schermo.

 Iniziate con un LED verde nei circuiti rilevatori di luce di Figura 7-22 e Figura
7-23.
 Scaricate la versione PDF di “What’s a Microcontroller?” dal sito
www.parallax.com/go/WAM, se la vostra figura 7-2 è in bianco e nero.
 Visualizzate lo spettro dei colori mostrato in Figura 7-2 (page 218) sul vostro
monitor, e zoomate sulla immagine.
 Col programma ProvaFototransistor.bs2 che visualizza le misure nel terminale di
Debug, tenete la scheda in modo che la cupola del LED verde stia puntando
direttamente sullo spettro dei colori entro il monitor. Per ottenere i migliori
risultati, la cupola del LED dovrebbe essere proprio a contatto col monitor, e i
livelli di luce nella stanza dovrebbero essere molto bassi.
 Fate scivolare il LED verde lentamente lungo la barra dello spettro visualizzata
sul monitor, e notate quale colore fornisce la misura più bassa.
 Ripetete con il LED rosso. Il LED rosso ha riportato la sua misura più bassa
sopra il rosso e il LED verde ha riportato la sua misura più bassa sopra il verde?

La più bassa misura del LED rosso dovrebbe verificarsi sopra il colore rosso sul display,
e la più bassa misura per il LED verde dovrebbe verificarsi sopra il verde.

SOMMARIO
Questo capitolo ha introdotto i sensori di luce e ha descritto il loro uso in una varietà di
prodotti. Sensori di luce differenti rilevano differenti specie di luce, e i loro fogli-
specifiche ci comunicano le loro sensibilità in termini di lunghezza d’onda della luce.
Questo capitolo ha evidenziato il fototransistor, un dispositivo che controlla la corrente
attraverso i suoi terminali collettore ed emettitore tramite la quantità di luce che investe il
suo terminale base. Poiché la luce può controllare la quantità di corrente che un
Misure di Luce · Pagina 255

fototransistor conduce, la tecnica per misurare la posizione della manopola di un


potenziometro nell’attività #1 (circuito RC) lavora anche per misurare la luce che brilla
su di un fototransistor. Il tempo che occorre ad un condensatore per perdere la sua carica
attraverso il fototransistor produce una misura RCTIME che ci dà un numero
corrispondente alla brillantezza della luce che incide sul fototransistor.

È stato anche introdotto il Datalogging (raccolta dati), memorizzando misure di luce nella
porzione non utilizzata della memoria di programma EEPROM del modulo BASIC
Stamp. Per memorizzare i valori nella – e reperire i valori dalla – EEPROM del modulo
BASIC Stamp, sono stati usati i comandi WRITE e READ. Il volume di numeri interessato
nel datalogging può essere difficile da analizzare, ma riportando i dati in grafico diventa
molto più facile vedere configurazioni, tendenze ed eventi. I dati raccolti possono essere
trasferiti a fogli di calcolo convenzionali e tracciati in grafico, e certe utilità grafiche
possono anche sostituire il terminale di Debug, e diagrammare i valori inviati dal BASIC
Stamp invece di visualizzarli come testo. È stata anche sviluppata una applicazione
esempio di misuratore di luce, che dimostra come si possano usare misure di luce per
controllare un altro processo, in questo caso, la velocità delle configurazioni circolari
visualizzate da un LED a 7 segmenti. Questa applicazione ha usato anche le subroutine
per eseguire tre lavori diversi nell’applicazione del misuratore di luce.

Il BASIC Stamp può essere programmato anche per convertire una misura di tempo di
decadimento RC in un valore binario con frasi IF…THEN. In aggiunta, il programma può
prendere un intervallo di misure di decadimento RC ed applicarvi un’isteresi con una
soglia “accendi le luci ” nell’intervallo buio delle misure e una soglia “spegni le luci”
nell’intervallo più luminoso. Ciò può aiutare a prevenire le oscillazioni acceso/spento
che potrebbero altrimenti verificarsi quando il sensore riporta buio e il dispositivo
accende una luce nella zona. Senza isteresi, il dispositivo potrebbe sentire la luce,
spegnerla di nuovo, e ripetere questo ciclo all’infinito.

Un approccio hardware per sentire gli stati acceso/spento della luce è quello di applicare
energia al fototransistor in serie ad una resistenza. In accordo con la legge di Ohm, la
quantità di corrente che il fototransistor conduce influenza il voltaggio ai capi della
resistenza. Questo voltaggio variabile può essere applicato a un pin I/O, e ne risulterà un
1 binario se il voltaggio è sopra la soglia di 1,4 V del pin I/O, o uno 0 binario se è al di
sotto della soglia.

Il LED (light emitting diode – diodo emettitore di luce) che emette luce quando la
corrente lo attraversa, può anche comportarsi come un sottile pannello solare se la luce lo
colpisce, generando un piccolo voltaggio che a sua volta può far passare corrente elettrica
Pagina 256 · Che cosa è un microcontrollore?

in circuiti. Le correnti che il LED genera sono abbastanza piccole perché una
combinazione della capacità di giunzione propria del LED e della capacità inerente alle
mollette (ganci metallici) interne alla breadboard fornisce una capacità sufficiente per un
circuito a decadimento RC con nessuna capacità esterna. Mentre il fototransistor nel kit
“What’s a Microcontroller” funziona meglio in interni, il LED è ottimo per misure di
intensa luce esterna.

Domande
1. Potete fare alcuni esempi di applicazioni di illuminazione automatica che
dipendono da sensori di luce ambiente?.
2. Potete fare alcuni esempi di prodotti che reagiscono ai cambiamenti di
luminosità nella luce ambiente?
3. In quale intervallo di lunghezze d’onda deve cadere lo spettro della luce visibile?
4. Quali sono i nomi dei terminali di un fototransistor, e quale di questi controlla la
quantità di corrente che il dispositivo consente che lo attraversi?
5. Che cosa significa l’acronimo EEPROM ?
6. Quanti byte può memorizzare la EEPROM del modulo BASIC Stamp? Quanti
bit può memorizzare?
7. Quale comando usate per memorizzare un valore in EEPROM? Quale comando
usate per reperire un valore dalla EEPROM? Quale richiede una variabile?
8. Che cosa è una etichetta?
9. Che cosa è una subroutine?
10. Quale comando si usa per richiamare una subroutine? Quale comando si usa per
terminare una subroutine?

Esercizi
1. Disegnate lo schema elettrico del circuito a tempo RC di un fototransistor
connesso a P5.
2. Modificate ProvaFototransistor.bs2 in modo che lavori su un circuito connesso a
P5 invece che a P2.
3. Spiegate come modifichereste MisuratoreDiLuce.bs2 perché la configurazione
circolare visualizzata dal display LED a 7 segmenti vada nella direzione opposta.

Progetti
1. Fate un piccolo prototipo di un sistema che chiuda automaticamente le tapparelle
(gli scuri) quando la luce è troppo intensa e le apra di nuovo quando la luce
diventa meno intensa. Usate come attuatore meccanico il servo . Suggerimento:
per il codice, potete aggiungere due comandi di controllo del servo al
Misure di Luce · Pagina 257

programma FototransistorAnalogicoABinario.bs2, e cambiate il comando PAUSE


100 in PAUSE 1. Assicuratevi di seguire le istruzioni nel testo per la
calibrazione delle condizioni di luce nella zona prima di provarlo.
2. Per avere crediti extra, evidenziate la vostra soluzione al Progetto 1
incorporandovi le modifiche dell’isteresi discusse nella attività #5.

Soluzioni
D1. Luci abbaglianti di un’automobile, lampioni stradali, e luci esterne di sicurezza
che si accendono automaticamente quando fa buio.
D2. Visualizzatori di computer portatili e fotocamere con esposizione automatica.
D3. Da 380 nm a 750 nm secondo la Figura 7-2 a pagina 212.
D4. Collettore, base, ed emettitore. La base controlla quanta corrente passa entro il
collettore ed esce fuori dall’emettitore.
D5. Electrically Erasable Programmable Read-Only Memory (Memoria a sola
lettura programmabile cancellabile elettricamente).
D6. 2048 byte. 2048 x 8 = 16,384 bit.
D7. Per memorizzare un valore – WRITE ; Per reperire un valore – READ; Il comando
READ richiede una variable.
D8. Una etichetta è un nome che può essere usato come segnaposto in un programma
PBASIC.
D9. Una subroutine è un piccolo segmento di codice che fa un determinato lavoro.
D10. Per richiamare: GOSUB; per terminare: RETURN
E1. Schema basato sulla Figura 7-4 a pagina 214, con P2 cambiato in P5.

E2. I cambiamenti richiesti sono molto simili a quelli spiegati a pagina 215.
DO
HIGH 5
PAUSE 100
Pagina 258 · Che cosa è un microcontrollore?

RCTIME 5, 1, tempo
DEBUG HOME, "tempo = ", DEC5 tempo
LOOP

E3. Per andare nella direzione opposta, la configurazione deve essere visualizzata in
ordine inverso. Ciò può essere fatto cambiando circolarmente le configurazioni
interne alla frase LOOKUP, o rovesciando l’ordine in cui vengono ricercate. Ecco
due soluzioni fatte con subroutine Aggiorna_Display alternative.

Soluzione 1 Soluzione 2

Aggiorna_Display: Indice = 5 '<<Aggiungere dopo variabile


IF indice = 6 THEN indice = 0 ' Indice
' BAFG.CDE
LOOKUP indice, [ %01000000, Aggiorna_Display:
%10000000, ' BAFG.CDE
%00000100, LOOKUP indice, [ %01000000,
%00000010, %10000000,
%00000001, %00000100,
%00100000 ], %00000010,
OUTH %00000001,
indice = indice + 1 %00100000 ], OUTH
RETURN IF (indice = 0) THEN
indice = 5
ELSE
indice = indice - 1
ENDIF
RETURN
P1. Fototransistor dalla Figura 7-4 a pagina 214, schema servo per la vostra board
dalla Attività #1, capitolo 4.

' Che cos’è un Microcontrollore - Cap07Pr01_Controllo_Scuri.bs2


' Controllo della posizione del servo con la luce.

' {$STAMP BS2}


' {$PBASIC 2.5}

valMax CON 4000


valMin CON 100
tempo VAR Word

PAUSE 1000

DO

HIGH 2
PAUSE 1 ' PAUSE 100 -> PAUSE 1
RCTIME 2, 1, tempo
Misure di Luce · Pagina 259

DEBUG HOME, "tempo = ", DEC5 tempo

tempo = tempo MAX valMax MIN valMin

IF tempo > (valMax - valMin) / 2 THEN


DEBUG CR, "Apri gli scuri " ' Modificata
PULSOUT 14, 500 ' Aggiunta
ELSE
DEBUG CR, "Chiudi gli scuri " ' Modificata
PULSOUT 14, 1000 ' Aggiunta
ENDIF

LOOP

P2. Credito extra: aggiunta della funzionalità di Isteresi:

' Che cos’è un Microcontrollore - Cap07Pr02_Controllo_Extra_Scuri.bs2


' Controlla posizione servo con la luce inclusa isteresi.

' {$STAMP BS2}


' {$PBASIC 2.5}

valMax CON 4000


valMin CON 100

tempo VAR Word

PAUSE 1000

DO

HIGH 2
PAUSE 1 ' PAUSE 100 -> PAUSE 1
RCTIME 2, 1, tempo
DEBUG HOME, "tempo = ", DEC5 tempo

tempo = tempo MAX valMax MIN valMin

IF tempo > (valMax - valMin) / 4 * 3 THEN


DEBUG CR, "Apri gli scuri " ' Modificata
PULSOUT 14, 500 ' Aggiunta
ELSEIF tempo < (valMax - valMin ) / 4 THEN
DEBUG CR, "Chiudi gli scuri " ' Modificata
PULSOUT 14, 1000 ' Aggiunta
ENDIF

LOOP
Frequenza e Suono · Pagina 261

Capitolo 8: Frequenza e Suono


LA VOSTRA GIORNATA E I BIP ELETTRONICI
Ecco alcuni esempi di bip che potreste ascoltare in una giornata normale: i bip del forno
a microonde quando ha finito di cuocere il vostro cibo. Il telefono cellulare suona con
bip di tono diverso che somigliano a canzoni per richiamare la vostra attenzione quando
sta arrivando una chiamata. La macchina ATM (il Bancomat) emette bip per ricordarvi
di non dimenticare la vostra scheda. Il registratore di cassa di un negozio emette bip per
far sapere al commesso che il codice a barre dell’elemento alimentare passato sotto lo
scanner è stato letto. Molte calcolatrici emettono bip quando si premono i tasti sbagliati.
Potete cominciare la vostra giornata con il bip di una sveglia.

MICROCONTROLLORI, ALTOPARLANTI, E SEGNALI ON/OFF


Quasi tutti i bip elettronici che sentite nella vostra routine giornaliera sono prodotti da
microcontrollori connessi ad altoparlanti. Il microcontrollore crea questi bip inviando
segnali alto/basso rapidi a vari tipi di altoparlanti. La velocità di questi segnali alto/basso
è chiamata frequenza, e determina il tono o altezza del bip. Ogni volta che un alto/basso
si ripete, avviene ciò che si chiama ciclo. Spesso, il numero di cicli per secondo viene
detto hertz, e si abbrevia con Hz. Ad esempio, una delle più comuni frequenze di bip che
aiutano le macchine ad attirare la vostra attenzione è 2 kHz. Ciò significa che i segnali
alto/basso si ripetono 2000 volte per secondo.

Introduzione dell’altoparlante piezoelettrico


In questa attività, sperimenterete l’invio di una varietà di segnali ad un comune, piccolo e
poco costoso altoparlante detto altoparlante piezoelettrico. Un altoparlante piezoelettrico
è detto altoparlante piezo o cicalino piezo, e piezo si pronuncia “pi-e-zO.” Il suo simbolo
schematico e il disegno di parte sono mostrati in Figura 8-1.

Figura 8-1
Disegno di parte e simbolo
schematico dell’altoparlante
piezoelettrico
Pagina 262 · Che cosa è un microcontrollore?

ATTIVITÀ #1: COSTRUZIONE E PROVA DELL’ALTOPARLANTE


In questa attività, costruirete e proverete il circuito dell’altoparlante piezoelettrico.

Parti del circuito dell’altoparlante


(1) Altoparlante piezoelettrico
(2) Connettori di filo

Costruzione del circuito dell’altoparlante piezoelettrico


Il terminale negativo dell’altoparlante piezoelettrico dev’essere connesso a Vss, e il
termnale positivo dev’essere connesso ad un pin I/O. Il BASIC Stamp sarà stato poi
programmato per inviare segnali alto/basso al terminale positivo dell’altoparlante
piezoelettrico.

 Se l’altoparlante piezo ha una etichetta, rimuovetela (non occorre lavarla).


 Costruite il circuito mostrato in Figura 8-2.
Vdd Vin Vss
X3
P15
P14
P13
P12 Figura 8-2
P11
P9 P10 + Schema circuitale e
P9 diagramma di cablaggio
P8
P7 del circuito
P6 dell’altoparlante
P5 piezoelettrico
P4
Vss P3
P2
P1
P0
X2

Come lavora il circutio dell’altoparlante piezoelettrico


Quando una corda di chitarra vibra, produce cambiamenti di pressione nell’aria. Questi
cambi di pressione dell’aria sono rilevate come toni. Più veloci i cambi di pressione, più
alto il tono, e più lenti i cambi di pressione, più basso il tono. L’elemento entro
l’involucro di plastica dell’altoparlante piezo è detto elemento piezoelettrico. Quando si
applicano segnali alto/basso al terminale positivo dell’altoparlante, l’elemento piezo-
elettrico vibra, e produce i cambiamenti di pressione dell’aria proprio come fa la corda di
una chitarra. Come con la corda della chitarra, il vostro orecchio rileva i cambi di
Frequenza e Suono · Pagina 263

pressione dell’aria (onde sonore) prodotti dall’altoparlante piezoelettrico, e questo suona


tipicamente come fa un bip o un tono.

Programmazione del Controllo dell’altoparlante


Il comando FREQOUT è un modo conveniente per inviare segnali alto/basso ad un
altoparlante e farlo così suonare. Il manuale del BASIC Stamp vi mostra la sintassi del
comando:
FREQOUT Pin, Duration, Freq1 {, Freq2}

Come per la maggior parte dei altri comandi usati in questo libro, Pin è un valore che vi
fa scegliere quale pin I/O del BASIC Stamp usare. L’argomento Duration dice al
comando FREQOUT quanto a lungo deve suonare il tono, in millisecondi. L’argomento
Freq1 è usato per impostare la frequenza del tono, in hertz. C’è un argomento opzionale
Freq2 che può essere usato per suonare contemporaneamente due note diverse.

Ecco come inviare un tono al pin I/O P9 che duri per 1,5 secondi ed abbia una frequenza
di 2 kHz:
FREQOUT 9, 1500, 2000

Programma esempio: ProvaPiezoConFreqout.bs2


Questo programma esempio invia il tono di 2 kHz all’altoparlante, sul pin I/O P9, per 1,5
secondi. Potete usare il terminale di Debug per vedere quando l’altoparlante deve
fischiare e quando deve fermarsi.

 Digitate ed eseguite ProvaPiezoConFreqout.bs2.


 Verificate che l’altoparlante produce un tono udibile chiaramente durante il
tempo in cui il terminale di Debug visualizza il messaggio “Invio tono …”

' Che cos’è un Microcontrollore - ProvaPiezoConFreqout.bs2


' Invia un tono all’altoparlante piezo usando il comando FREQOUT.
'{$STAMP BS2}
'{$PBASIC 2.5}

PAUSE 1000

DEBUG "Invio tono...", CR

FREQOUT 9, 1500, 2000

DEBUG "Tono inviato."


Pagina 264 · Che cosa è un microcontrollore?

Il vostro turno – Regolazione di frequenza e durata


 Memorizzate ProvaPiezoConFreqout.bs2 sotto altro nome.
 Provate alcuni valori diversi degli argomenti Duration e Freq1.
 Dopo ciascuna modifica, eseguite il programma e prendete nota dell’effetto.
 Quando l’argomento Freq1 diventa più grande, l’altezza del tono va su o giù?
Provate valori di 1500, 2000, 2500 e 3000 per rispondere a questa domanda.

ATTIVITÀ #2: SUONI DI AZIONE


Molti giocattoli contengono microcontrollori utilizzati per produrre “suoni di azione.” I
suoni di azione tendono a coinvolgere chi ascolta cambiando rapidamente la frequenza
del suono eseguito dall’altoparlante. Potete ottenere anche alcuni effetti interessanti
suonando contemporaneamente due toni diversi, tramite l’argomento opzionale Freq2 del
comando FREQOUT. Questa attività presenta entrambe queste tecniche.

Programmazione dei suoni di azione


I suoni di azione e di applicazione hanno tre diverse componenti:

1. Pausa
2. Durata
3. Frequenza

La pausa è il tempo tra i toni, e per crearla potete usare il comando PAUSE. La durata è
la quantità di tempo che un tono dura, e potete impostarla con l’argomento Duration del
comando FREQOUT. La frequenza determina l’altezza del tono. Più alta è la frequenza,
maggiore l’altezza (toni alti), più bassa è la frequenza, minore l’altezza (toni bassi).
Questa è determinata, naturalmente, dall’argomento Freq1 del comando FREQOUT.

Progrmma esempio: ToniAzione.bs2


ToniAzione.bs2 dimostra alcune combinazioni diverse di pausa, durata, e frequenza. La
prima sequenza di toni suona in modo simile ad una sveglia elettronica. La seconda
suona in modo simile a qualcosa che potrebbe esser detto da un robot di un comune film
di fantascienza. La terza è più simile al tipo di effetti sonori che potreste ascoltare in un
vecchio video gioco.

 Digitate ed eseguite ToniAzione.bs2.


Frequenza e Suono · Pagina 265

' Che cos’è un Microcontrollore - ToniAzione.bs2


' Dimostra come si possano usare diverse combinazioni di pausa, durata,
' frequenza per produrre effetti sonori.

'{$STAMP BS2}
'{$PBASIC 2.5}

durata VAR Word


frequenza VAR Word

PAUSE 1000

DEBUG "Allarme...", CR
PAUSE 100
FREQOUT 9, 500, 1500
PAUSE 500
FREQOUT 9, 500, 1500
PAUSE 500
FREQOUT 9, 500, 1500
PAUSE 500
FREQOUT 9, 500, 1500
PAUSE 500

DEBUG "Il robot risponde...", CR


PAUSE 100
FREQOUT 9, 100, 2800
FREQOUT 9, 200, 2400
FREQOUT 9, 140, 4200
FREQOUT 9, 30, 2000
PAUSE 500

DEBUG "Iperspazio...", CR
PAUSE 100
FOR durata = 15 TO 1 STEP 1
FOR frequenza = 2000 TO 2500 STEP 20
FREQOUT 9, durata, frequenza
NEXT
NEXT

DEBUG "Fatto", CR

END

Come lavora ToniAzione.bs2


La routine “Allarme” suona come una sveglia. Questa routine suona toni ad una
frequenza fissa di 1,5 kHz per una durata di 0,5 s con ritardi fissi tra i toni, di 0,5 s. La
routine “Il robot risponde” usa varie frequenze per brevi durate.
Pagina 266 · Che cosa è un microcontrollore?

La routine “Iperspazio” non usa ritardi, ma varia sia la durata che la frequenza. Usando
cicli FOR...NEXT per cambiare rapidamente le variabili frequenza e durata, potete
ottenere effetti sonori interessanti. Quando si esegue un ciclo FOR...NEXT entro un altro,
questa struttura è detta ciclo annidato. Ecco come lavora il ciclo annidato FOR...NEXT
riportato qui sotto. La variabile durata inizia dal valore 15, poi il ciclo FOR
frequenza... va avanti e invia le frequenze 2000, poi 2020, poi 2040, e così via, fino a
2500, all’altoparlante piezo. Quando termina il ciclo FOR frequenza..., il ciclo FOR
durata... ha ripetuto soltanto uno dei suoi 15 passi. A questo punto sottrae 1 dal valore
di durata e ripete daccapo l’intero ciclo FOR frequenza... .
FOR durata = 15 TO 1
FOR frequenza = 2000 TO 2500 STEP 15
FREQOUT 9, durata, frequenza
NEXT
NEXT

Programma esempio: CicliAnnidati.bs2


Per comprendere meglio come lavorino i cicli annidati FOR...NEXT, il programma
CicliAnnidati.bs2 usa il comando DEBUG per mostrare il valore di una versione molto
meno complicata di cicli annidati usata nel programma ToniAzione.bs2.

 Digitate ed eseguite CicliAnnidati.bs2.


 Esaminate l’uscita del terminale di Debug e verificate come cambiano le
variabili durata e frequenza ad ogni esecuzione del ciclo.

' Che cos’è un Microcontrollore - CicliAnnidati.bs2


' Dimostra come lavorino i cicli annidati in ToniAzione.bs2.

'{$STAMP BS2}
'{$PBASIC 2.5}

durata VAR Word


frequenza VAR Word

PAUSE 1000

DEBUG "Durata Frequenza", CR,


"-------- ---------", CR

FOR durata = 4000 TO 1000 STEP 1000


FOR frequenza = 1000 TO 3000 STEP 500
DEBUG " " , DEC5 durata,
" ", DEC5 frequenza, CR
FREQOUT 9, durata, frequenza
Frequenza e Suono · Pagina 267

NEXT
DEBUG CR
NEXT

END

Il vostro turno – Maggiori effetti sonori


Esiste un numero realmente infinito di modi per modificare ToniAzione.bs2 e ottenere
diverse combinazioni di suoni. Ecco qui una delle modifiche alla routine “Iperspazio”:
DEBUG "Salto nell’iperspazio...", CR
FOR durata = 15 TO 1 STEP 3
FOR frequenza = 2000 TO 2500 STEP 15
FREQOUT 9, durata, frequenza
NEXT
NEXT
FOR durata = 1 TO 36 STEP 3
FOR frequenza = 2500 TO 2000 STEP 15
FREQOUT 9, durata, frequenza
NEXT
NEXT

 Memorizzate il programma esempio con nome ToniAzioneVostroTurno.bs2.


 Divertitevi con questa e altre modifiche di vostra creazione.

Due frequenze contemporanee


Potete suonare con due frequenze contemporanee. Ricordate la sintassi del comando
FREQOUT dalla attività #1:

FREQOUT Pin, Duration, Freq1 {, Freq2}

Potete utilizzare l’argomento opzionale Freq2 per suonare due frequenze con un singolo
comando FREQOUT. Per esempio, potete suonare a 2 kHz e a 3 kHz col comando:
FREQOUT 9, 1000, 2000, 3000

Ciascun tono delle tastiere telefoniche è anche un esempio di due frequenze combinate
assieme. Nelle telecomunicazioni, questo evento è chiamato DTMF (Dual Tone Multi
Frequency, MultiFrequenza BiTonale). Esiste anche un comando PBASIC detto DTMFOUT
progettato proprio per l’invio di toni telefonici. Cercate questo comando nel Manuale BASIC
Stamp o nell’Aiuto per trovarne degli esempi.
Pagina 268 · Che cosa è un microcontrollore?

Programma esempio: CoppiaDiToni.bs2


Questo programma esempio mostra la differenza di tono ottenuta se unìte assieme le
frequenze di 2 e 3 kHz. Mostra anche un interessante fenomeno che si verifica quando
sommate due onde sonore molto vicine tra loro in frequenza. Quando suonate
contemporaneamente 2000 Hz e 2001 Hz, il tono fluttua (si dissolve) in alto e basso una
volta ogni secondo (alla frequenza di 1 Hz). Se suonate 2000 Hz con 2002 Hz, si
dissolverà in alto e basso due volte al secondo (2 Hz), e così via.

Battimento è il fenomeno che si ha quando due toni molto vicini in frequenza vengono
eseguiti contemporaneamente, causando così la dissolvenza in alto e basso del tono che
udite. La frequenza di quella dissolvenza in su e giù è la differenza tra le due frequenze. Se
la differenza è 1 Hz, il tono si dissolve in su e giù ad 1 Hz. Se la differenza è 2 Hz, il tono si
dissolve in su e giù a 2 Hz.
Le variazioni nella pressione dell’aria fatte dall’altoparlante piezoelettrico sono dette onde
sonore. Quando il tono è amplificato al suo massimo, le variazioni di pressione dell’aria
causate dalle due frequenze si aggiungono l’una all’altra (si parla di sovrapposizione).
Quando il tono è al suo minimo, le variazioni nella pressione dell’aria si cancellano
reciprocamente (si chiama interferenza).

 Digitate ed eseguite CoppiaDiToni.bs2.


 Tenete d’occhio il terminale di Debug mentre vengono prodotti i toni, e notate i
diversi effetti prodotti dal miscelare toni differenti.

' Che cos’è un Microcontrollore - CoppiaDiToni.bs2


' Dimostra alcune delle cose che accadono quando miscelate due toni.

'{$STAMP BS2}
'{$PBASIC 2.5}

PAUSE 1000

DEBUG "Frequenza = 2000", CR


FREQOUT 9, 4000, 2000

DEBUG "Frequenza = 3000", CR


FREQOUT 9, 4000, 3000

DEBUG "Frequenza = 2000 + 3000", CR


FREQOUT 9, 4000, 2000, 3000

DEBUG "Frequenza = 2000 + 2001", CR


FREQOUT 9, 4000, 2000, 2001

DEBUG "Frequenza = 2000 + 2002", CR


FREQOUT 9, 4000, 2000, 2002
Frequenza e Suono · Pagina 269

DEBUG "Frequenza = 2000 + 2003", CR


FREQOUT 9, 4000, 2000, 2003

DEBUG "Frequenza = 2000 + 2005", CR


FREQOUT 9, 4000, 2000, 2005

DEBUG "Frequenza = 2000 + 2010", CR


FREQOUT 9, 4000, 2000, 2010

DEBUG "Fatto", CR
END

Il vostro turno – Condensazione del codice


CoppiaDiToni.bs2 è stato scritto per mostrare alcune cose interessanti che possono
succedere quando suonate contemporaneamente due frequenze diverse con l’argomento
opzionale Freq2 del comando FREQOUT. Però, questo programma è molto inefficiente.

 Modificate CoppiaDiToni.bs2 in modo da far variare gli argomenti Freq2


nell’intervallo da 2001 a 2005, tramite una variabile word e un ciclo.

ATTIVITÀ #3: NOTE MUSICALI E SEMPLICI CANZONI


La Figura 8-3 mostra i 25 tasti più a destra della tastiera di un pianoforte. Mostra anche
le frequenze alle quali ciascuna corda all’interno del piano vibra quando si preme il tasto
relativo a quella corda.
Pagina 270 · Che cosa è un microcontrollore?

Figura 8-3: Tasti più a destra di un Piano e loro frequenze

I tasti e le note loro corrispondenti sono etichettati da C6 a C8. Questi tasti sono
suddivisi in gruppi di 12, composti da 7 tasti bianchi e 5 tasti neri. La sequenza delle note
si ripete ogni 12 tasti. Le note che hanno la stessa lettera sono correlate nella frequenza,
che raddoppia ogni ottava più alta. Ad esempio, C7 è due volte la frequenza di C6, e C8
è il doppio della frequenza di C7. Analogamente, se andate giù di un’ottava, la frequenza
dimezzerà il suo valore; per esempio, A6 è metà della frequenza di A7.

Se avete mai ascoltato un cantante che pratichi le sue note cantando il Solfeggio, “Do Re
Mi Fa Sol La Si Do,” il cantante sta provando ad accordare le note che ottenete premendo
i tasti bianchi sulla tastiera di un pianoforte. Quei tasti bianchi sono chiamati tasti
naturali, e il nome “ottava” si riferisce al raddoppio della frequenza ogni otto tasti
naturali . Un tasto nero su un piano può essere chiamato sia diesis (sharp) che bemolle
(flat). Per esempio, il tasto nero tra i tasti C e D è chiamato sia C-diesis (C-sharp) (C#)
che D-bemolle (D-flat) (Db). Il fatto che un tasto sia chiamato diesis o bemolle dipende
dal particolare brano suonato, e le regole di questi è preferibile siano lasciate alle classi
musicali.
Frequenza e Suono · Pagina 271

Ricerca della “scala musicale” su Internet: Usando le parole "scala musicale" troverete
moltissime informazioni affascinanti sulla storia, la fisica e la psicologia dell’argomento. La
scala di 12 note per ottava è la scala principale della musica occidentale. Altre culture
usano scale che contengono da 2 a 35 note per ottava.
Metodo di accordo: La tastiera in Figura 8-3 usa un metodo di accordo chiamato
temperato in modo uguale. Le frequenze sono determinate usando una nota di riferimento,
(n/12)
poi moltiplicandola per 2 per valori di n = 1, 2, 3, ecc. Per esempio, potete prendere la
(1/12)
frequenza per A6, e moltiplicarla per 2 per ottenere la frequenza di A6#. Multiplicarla
(2/12)
per 2 per ottenere la frequenza di B6, e così via. Ecco un esempio di calcolo della
frequenza di B6 usando A6 come frequenza di riferimento:
La frequenza di A6 è 1760
(2/12)
2 = 1,224
1760 X 1,224 = 1975,5
1975,5 è la frequenza di B6

Programmazione delle note musicali


Il comando FREQOUT è utile anche per le note musicali. Programmare il BASIC Stamp
per suonare musica con un altoparlante piezo comporta una varietà di regole usate nel
suonare musica tramite qualsiasi altro strumento musicale. Queste regole si applicano
agli stessi elementi usati per produrre effetti sonori: frequenza, durata, e pausa. Il
programma esempio che segue suona alcune delle frequenza di note musicali
sull’altoparlante piezo, ciascuna con la durata di mezzo secondo.

Programma esempio: DoReMiFaSolLaSiDo.bs2


 Digitate ed eseguite DoReMiFaSolLaSiDo.bs2

' Che cos’è un Microcontrollore - DoReMiFaSolLaSiDo.bs2


' Invia una ottava di note, di mezzo secondo ciascuna, tramite
' un altoparlante piezoelettrico.

'{$STAMP BS2}
'{$PBASIC 2.5}
PAUSE 1000

'Solfeggio Tono Nota

DEBUG "Do...", CR: FREQOUT 9,500,1047 ' C6

DEBUG "Re...", CR: FREQOUT 9,500,1175 ' D6

DEBUG "Mi...", CR: FREQOUT 9,500,1319 ' E6


Pagina 272 · Che cosa è un microcontrollore?

DEBUG "Fa...", CR: FREQOUT 9,500,1396 ' F6

DEBUG "Sol..", CR: FREQOUT 9,500,1568 ' G6

DEBUG "La...", CR: FREQOUT 9,500,1760 ' A6

DEBUG "Si...", CR: FREQOUT 9,500,1976 ' B6

DEBUG "Do...", CR: FREQOUT 9,500,2093 ' C7

END

Il vostro turno – Note Diesis/Bemolle


 Usate le frequenze mostrate in Figura 8-3 per aggiungere le cinque note
diesis/bemolle (semitoni) a DoReMiFaSolLaSiDo.bs2
 Modificate il vostro programma in modo che suoni la successiva ottava
superiore. Suggerimento: risparmiate alcune digitazioni usando l’operazione * 2
dopo ciascun argomento Freq1. Per esempio, FREQOUT 9, 500, 1175 * 2
moltiplicherà D6 per 2 per darvi D7, la nota D nella 7ma ottava.

Memorizzazione e reperimento di sequenze di note musicali


Un buon modo di memorizzare note musicali è di scriverle nella EEPROM del modulo
BASIC Stamp . Per far questo, però, dovrete usare molti comandi WRITE; un modo
migliore è usare la direttiva DATA. Ecco la sintassi della direttiva DATA:
{Symbol} DATA {Word} DataItem {, {Word} DataItem, … }

Ecco un esempio di come utilizzare la direttiva DATA per memorizzare i caratteri che
corrispondono alle note musicali.
Note DATA "C","C","G","G","A","A","G"

Per accedere a questi caratteri potete usare il comando READ. La lettera “C” è posta
all’indirizzo Note + 0, e una seconda lettera “C” è posta all’indirizzo Note + 1. Poi, c’è
una lettera “G” a Note + 2, e così via. Per esempio, se volete caricare l’ultima lettera
“G” in una variabile byte detta LetteraNota, usate il comando:
READ Note + 6, LetteraNota

Usando la direttiva DATA, potete memorizzare anche elenchi di valori numerici di


frequenza e durata, che il BASIC Stamp usa per le note musicali che occorra
Frequenza e Suono · Pagina 273

memorizzare in variabili word, perché esse sono di solito maggiori di 255. Ecco come
far questo con una direttiva DATA.
Frequenze DATA Word 2093, Word 2093, Word 3136, Word 3136,
Word 3520, Word 3520, Word 3136

Dato che ciascuno di questi valori occupa due byte, accederli con il comando READ è
diverso dall’accedere caratteri. Il primo valore 2093 è all’indirizzo Frequenze + 0, ma il
secondo 2093 è posto a Frequenze + 2. Il primo 3136 è posto a Frequenze + 4, e il
secondo 3136 è posto a Frequenze + 6.

I valori nella direttiva DATA Frequenze corrispondono alle note musicali contenute
nella direttiva DATA Note.

Ecco un ciclo FOR...NEXT che pone i valori di Note DATA in una variabile chiamata
LetteraNota, poi pone i valori di Frequenze DATA in una variabile chiamata
FreqNota.

FOR indice = 0 to 6

READ Note + indice, LetteraNota


READ Frequenze + (indice * 2), Word FreqNota
DEBUG LetteraNota, " ", DEC FreqNota, CR

NEXT

Che cosa fa (indice * 2)?


Ciascun valore memorizzato nella direttiva Frequenze DATA occupa una word (due byte),
mentre ciascun carattere nella direttiva Note DATA occupa soltanto un byte. Il valore di
indice aumenta di uno ad ogni ripetizine del ciclo FOR...NEXT. Ciò va bene per accedere
al carattere nota usando il comando READ Note + indice, LetteraNota. Il problema
è che per ciascun byte in Note, la variabile indice deve puntare due volte più in basso
nell’elenco di Frequenze. Il comando READ Frequenze + (indice * 2), Word
FreqNota, si fa carico di questo.

Il programma esempio che segue memorizza note e durate usando DATA, e usa il comando
FREQOUT per suonare ciascuna frequenza di nota, per una determinata durata. Il risultato
sono le prime note della canzone per bambini “Twinkle Twinkle Little Star.” (“Brilla,
brilla, stellina”)
Pagina 274 · Che cosa è un microcontrollore?

La canzone “Alphabet Song” usata dai bambini per memorizzare i loro “ABC” usa le
stesse note di “Twinkle Twinkle Little Star.”

Programma esempio: TwinkleTwinkle.bs2


Questo programma esempio dimostra come usare la direttiva DATA per memorizzare
elenchi e come usare il comando READ per accedere ai valori negli elenchi.

 Digitate ed eseguite TwinkleTwinkle.bs2


 Verificate che le note suonino la canzone “Twinkle Twinkle Little Star.”
 Usate il terminale di Debug per verificare che lavori come ci si aspetta

' Che cos’è un Microcontrollore - TwinkleTwinkle.bs2


' Sona le prime sette note da Twinkle Twinkle Little Star.

'{$STAMP BS2}
'{$PBASIC 2.5}

Note DATA "C","C","G","G","A","A","G"

Frequenze DATA Word 2093, Word 2093, Word 3136, Word 3136,
Word 3520, Word 3520, Word 3136

Durate DATA Word 500, Word 500, Word 500, Word 500,
Word 500, Word 500, Word 1000

indice VAR Nib


LetteraNota VAR Byte
FreqNota VAR Word
DurataNota VAR Word

PAUSE 1000

DEBUG "Nota Durata Frequenza", CR,


"---- -------- ---------", CR

FOR indice = 0 TO 6

READ Note + indice, LetteraNota


DEBUG " ", LetteraNota

READ Durate + (indice * 2), Word DurataNota


DEBUG " ", DEC4 DurataNota

READ Frequenze + (indice * 2), Word FreqNota


DEBUG " ", DEC4 FreqNota, CR

FREQOUT 9, DurataNota, FreqNota


Frequenza e Suono · Pagina 275

NEXT

END

Il vostro turno – Aggiunta e riproduzione di più note


Questo programma ha riprodotto le prime sette note da Twinkle Twinkle Little Star. Le
parole erano “Twin-kle twin-kle lit-tle star.” La successiva frase della canzone dice
“How I won-der what you are” e le sue note sono F, F, E, E, D, D, C. Come nella prima
frase, l’ultima nota è tenuta due volte più a lungo delle altre note. Per aggiungere questa
frase alla canzone in TwinkleTwinkle.bs2, occorrerà espandere appropriatamente
ciascuna direttiva DATA. Non dimenticate di cambiare il ciclo FOR...NEXT in modo che
vada da 0 a 13 invece che da 0 a 6.

 Modificate TwinkleTwinkle.bs2 in modo che riproduca le prime due frasi della


canzone invece della sola prima frase.

ATTIVITÀ #4: MUSICA CON IL MICROCONTROLLORE


Le durate delle note non sono registrate sugli spartiti musicali in termini di millisecondi.
Esse sono. invece, descritte come nota intera, metà nota, un quarto, un ottavo, un
sedicesimo, e un trentaduesimo di nota . Come suggerisce il nome, metà nota dura la
metà di una nota intera. Un quarto di nota dura un quarto della durata di una nota intera,
e così via. Quanto dura una nota intera? Dipende dal brano musicale che viene eseguito.
Un brano potrebbe essere riprodotto per un tempo che fa durare una nota intera per
quattro secondi, un altro brano potrebbe avere una nota intera che dura due secondi, e un
altro ancora potrebbe avere qualche altra durata.

Riposi (o Pause) sono i tempi tra le note quando non sono eseguiti suoni. Le durate delle
pause sono misurate anch’esse come intera, metà, un quarto, un ottavo, un sedicesimo e
un trentaduesimo.

Ancora sulla musica con il microcontrollore: Dopo aver completato questa attività,
sarete pronti ad imparare il modo di scrivere codice musicale in PBASIC direttamente dagli
spartiti. Consultate il testo di aiuto Playing Sheet Music with the Piezospeaker e il suo
sillabario video di accompagnamento all’indirizzo web www.parallax.com/go/WAM.
Pagina 276 · Che cosa è un microcontrollore?

Un sistema migliore per memorizzare e reperire musica


Potete scrivere programmi che memorizzano il doppio della musica nel vostro BASIC
Stamp usando byte invece di word nelle vostre direttive DATA. Potete anche modificare il
programma per rendere più facile la lettura delle note musicali usando alcune delle
convenzioni musicali più comuni per le note e le loro durate. Questa attività comincia a
introdurre come memorizzare informazioni musicali in un modo che fa riferimento ai
concetti di note, durate, e pause. E’ introdotto anche il tempo, che sarà riveduto
nell’attività successiva.

Ecco una delle direttive DATA che memorizza note musicali e durate per il programma
esempio successivo. Quando viene riprodotta, dovrebbe somigliare alla canzone “Frà
Martino campanaro (Frere Jacques).” Nella direttiva Note DATA sono memorizzati
soltanto i caratteri della nota poiché per far corrispondere le lettere alle frequenze
corrispondenti saranno usati i comandi LOOKUP e LOOKDOWN.
Note DATA "C","D","E","C","C","D","E","C","E","F",
"G","E","F","G","Q"

Durate DATA 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
2, 4, 4, 2

NotaIntera CON 2000

Il primo numero nella direttiva Durate DATA dice al programma quanto debba durare la
prima nota della direttiva Note Data. La seconda durata è per la seconda nota, e così
via. Le durate non sono più espresse in termini di millisecondi. Invece, esse sono numeri
molto più piccoli, memorizzabili in byte, in modo che non ci sia alcun prefisso Word nella
direttiva DATA. A paragone del memorizzare i valori in termini di millisecondi, questi
numeri sono collegati più da vicino allo spartito musicale.

Ecco un elenco dei significati di ciascuna durata.

 1 – nota intera
 2 – metà nota
 4 – un quarto di nota
 8 – un ottavo di nota
 16 – un sedicesimo di nota
 32 – un trentaduesimo di nota
Frequenza e Suono · Pagina 277

Dopo aver letto dalla direttiva Durate DATA ciascun valore, questo è diviso per il valore
di NotaIntera, per ottenere la Durata usata nel comando FREQOUT. La quantità di
tempo per cui dura ciascuna nota dipende dal tempo della canzone. Un tempo più veloce
significa che ciascuna nota dura un tempo minore, mentre un tempo più lento significa
che ciascuna nota dura più a lungo. Poiché tutte le durate di nota sono frazioni di una
nota intera, potete usare la durata di una nota intera per impostare il tempo.

Cosa significa la "Q" in Note DATA? "Q" sta per “quit” (esci), e un ciclo DO
UNTIL...LOOP controlla che ci sia la "Q" in ciascuna ripetizione del ciclo, e viene ripetuto
fin quando non viene trovata.
Come si può eseguire una pausa? Potete inserire una pausa tra le note tramite
a
l’inserimento di una "P". Il capitolo “Il vostro turno” inizia con le prime note della 5 Sinfonia
di Beethoven, e fra di esse c’è una pausa.
Come posso suonare note diesis/bemolle? NoteEDurate.bs2 ha valori nelle sue tabelle di
ricerca per note diesis/bemolle. Quando utilizzate la versione della nota in lettera minuscola,
sarà suonata la nota bemolle. Per esempio, se volete suonare un B-bemolle, usate “b”
invece di “B”. Ricordate che questa nota ha la stessa frequenza di A-diesis.

Programma esempio: NoteEDurate.bs2


 Digitate ed eseguite NoteEDurate.bs2.
 Come suona?

' Che cos’è un Microcontrollore - NoteEDurate.bs2


' Suona le prime note di Fra Martino (Frere Jacques).

'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "Programma in esecuzione!"

Note DATA "C","D","E","C","C","D","E","C","E","F",


"G","E","F","G","Q"

Durate DATA 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
2, 4, 4, 2

NotaIntera CON 2000

indice VAR Byte


offset VAR Nib

LetteraNota VAR Byte


FreqNota VAR Word
DurataNota VAR Word
Pagina 278 · Che cosa è un microcontrollore?

DO UNTIL LetteraNota = "Q"

READ Note + indice, LetteraNota

LOOKDOWN LetteraNota, [ "A", "b", "B", "C", "d",


"D", "e", "E", "F", "g",
"G", "a", "P", "Q" ], offset

LOOKUP offset, [ 1760, 1865, 1976, 2093, 2217,


2349, 2489, 2637, 2794, 2960,
3136, 3322, 0, 0 ], FreqNota

READ Durata + indice, DurataNota

DurataNota = NotaIntera / DurataNota

FREQOUT 9, DuratsNota, FreqNota

indice = indice + 1

LOOP

END

Come lavora NoteEDurate.bs2 Works


Le direttive DATA Note and Durate sono state illustrate prima del programma. Queste
direttive combinate con la costante NotaIntera sono usate per memorizzare tutti i dati
musicali utilizzati dal programma.

Le dichiarazioni delle cinque variabili usate nel programma sono mostrate qui sotto.
Anche se per accedere ai dati non è più utilizzato un ciclo FOR...NEXT, occorre che ci sia
ancora una variabile (indice) che tiene traccia di quale entrata DATA è in lettura nelle
Note e Durate. La variabile offset è utilizzata nei comandi LOOKDOWN e LOOKUP per
selezionare un valore particolare. La variabile LetteraNota memorizza un carattere cui
si è avuto accesso tramite il comando READ. I comandi LOOKUP e LOOKDOWN sono
utilizzati per convertire questo carattere in un valore di frequenza. Questo valore è
memorizzato nella variabile FreqNota ed è utilizzato come argomento Freq1. del
comando FREQOUT. La variabile DurataNota è usata in un comando READ per ricevere
un valore dalla Durate DATA. È usata anche per calcolare l’argomento Duration del
comando FREQOUT.
indice VAR Byte
offset VAR Nib
Frequenza e Suono · Pagina 279

LetteraNota VAR Byte


FreqNota VAR Word
DurataNota VAR Word

Il ciclo principale si mantiene in esecuzione fin quando dalla Note DATA viene letta la
lettera “Q” .
DO UNTIL LetteraNota = "Q"

Un comando READ ricava un carattere dalla Note DATA, e lo memorizza nella variabile
LetteraNota. La variabile LetteraNota viene poi usata in un comando LOOKDOWN per
impostare il valore della variabile offset. Ricordate che offset memorizza un 1 se
viene rilevata una “b”, un 2 se viene rilevata una “B”, un 3 se viene rilevata una “C”, e
così via. Questo valore offset è usato successivamente in un comando LOOKUP per
prevedere quale dovrebbe essere il valore della variabile FreqNota. Se offset è 1,
FreqNota sarà 1865, se offset è 2, FreqNota sarà 1976, se offset è 3, FreqNota è
2093, e così via.
READ Note + indice, LetteraNota

LOOKDOWN LetteraNota, [ "A", "b", "B", "C", "d",


"D", "e", "E", "F", "g",
"G", "a", "P", "Q" ], offset

LOOKUP offset, [ 1760, 1865, 1976, 2093, 2217,


2349, 2489, 2637, 2794, 2960,
3136, 3322, 0, 0 ], FreqNota

La frequenza della nota è stata determinata, ma la durata dev’essere ancora prevista. Il


comando READ usa il valore di indice per porre un valore da Durate DATA in
DurataNota.

READ Durate + indice, DurataNota

Quindi, DurataNota è fatta uguale alla costante NotaIntera divisa per DurataNota. Se
DurataNota parte col valore 4 da un comando READ, diventa 2000 ÷ 4 = 500. Se
DurataNota è 8, diventa 2000 ÷ 8 = 250.

DurataNota = NotaIntera / DurataNota

Ora che sono state determinate DurataNota e FreqNota, il comando FREQOUT suona la
nota.
Pagina 280 · Che cosa è un microcontrollore?

FREQOUT 9, DurataNota, FreqNota

Ad ogni esecuzione del ciclo principale, il valore di indice deve essere aumentato di
uno. Quando il ciclo principale torna all’inizio, la prima cosa che il programma fa è
leggere la nota successiva, usando la variabile indice.
indice = indice + 1

LOOP

Il vostro turno – Sperimentare con Tempo e un tono diverso


La quantità di tempo che ogni nota dura ha a che fare con il tempo (o ritmo). Potete
cambiare il tempo (musicale) regolando il valore della costante NotaIntera. Se lo
aumentate a 2250, il tempo diminuirà, e la canzone sarà suonata più lentamente. Se lo
diminuite a 1750, il tempo aumenterà e la canzone sarà suonata più rapidamente.

 Memorizzate NoteEDurate.bs2 con il nome NoteEDurateVostroTurno.bs2.


 Modificate il tempo di NoteEDurateVostroTurno.bs2 regolando il valore di
NotaIntera. Provate i valori 1500, 1750, 2000, e 2250.
 Ri-eseguite il programma dopo ciascuna modifica, e decidete quale suona
meglio.

Inserire dati musicali è molto più facile quando tutto ciò che dovete fare è registrare note
e durate. Eccovi le prime otto note della Quinta Sinfonia di Beethoven.
Note DATA "G","G","G","e","P","F","F","F","D","Q"

Durate DATA 8, 8, 8, 2, 8, 8, 8, 8, 2

NotaIntera CON 2000

 Memorizzate il vostro programma modificato col nome QuintaBeethoven.bs2.


 Sostituite le direttive DATA Note e Durate e la dichiarazione di costante
NotaIntera con il codice qui sopra.
 Eseguite il programma. Suona bene?

Aggiunta di caratteristiche musicali


Il programma esempio che avete appena terminato ha introdotto note, durate, e pause.
Esso ha utilizzato inoltre la durata di una nota intera per determinare il tempo (o ritmo).
Frequenza e Suono · Pagina 281

Ecco tre ulteriori caratteristiche che possiamo aggiungere ad un programma che esegue
musica:

 Suonare note “puntate”


 Determinare la durata della nota intera (o “breve”) dal tempo
 Suonare note da più di una ottava

Il termine puntato si riferisce ad un punto usato negli spartiti per indicare che una nota
dev’essere suonata a 1 ½ volta della sua durata normale. Per esempio, una nota puntata
ad un quarto dovrà durare per la durata di una nota a un quarto, più quella di una nota a
un ottavo. Una nota puntata a un mezzo dura per la durata di un mezzo più la durata di
una nota di un quarto. Potete aggiungere una tabella di dati che memorizza se una nota è
puntata o no. In questo esempio, uno zero significa che non c’è il punto mentre un 1
significa che c’è il punto:
Punti DATA 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 1, 0

I programmi che eseguono musica esprimono tipicamente il tempo di una canzone in


battute per minuto. E’ lo stesso che dire quarti di nota per minuto.
BattutePerMin CON 200

La Figura 8-4 è una ripetizione della Figura 8-3 da pagina 270. Essa mostra la 6a e la 7a
ottava sulla tastiera di un pianoforte. Queste sono le due ottave che suonano in modo più
chiaro quando sono riprodotte dall’altoparlante piezo. Ecco un esempio di una direttiva
DATA che userete nel capitolo Il vostro turno per eseguire note da più di una ottava usando
la direttiva Note DATA.
Ottave DATA 6, 7, 6, 6, 6, 6, 6, 6, 6, 7, 6,
6, 6, 6
Pagina 282 · Che cosa è un microcontrollore?

Figura 8-4: I tasti più a destra di un pianoforte e le loro frequenze

Programma esempio: MusicaConPiùCaratteristiche.bs2


Questo programma esempio suona le prime note di “For He’s a Jolly Good Fellow.”
(“Perché è un bravo ragazzo”) Tutte le note vengono dalla stessa (7a) ottava, ma alcune
note sono puntate. Nel capitolo Il vostro turno, proverete un esempio che usa note da più
di una ottava, e note puntate.

 Digitate ed eseguite MusicaConPiùCaratteristiche.bs2.


 Contate le note e osservate se potete sentire le note puntate ( durata 1 ½).
 Ascoltate anche le note dell’ottava 7. Provate a cambiare una di quelle note
all’ottava 6. Il cambio nel modo in cui la musica viene eseguita è del tutto
drastico.

' Che cos’è un Microcontrollore - MusicaConPiùCaratteristiche.bs2


' Suona l’inizio di Perchè è un bravo ragazzo.
'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "Programma in esecuzione!"


Frequenza e Suono · Pagina 283

Note DATA "C","E","E","E","D","E","F","E","E","D","D",


"D","C","D","E","C","Q"
Ottave DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7
Durate DATA 4, 2, 4, 4, 4, 4, 2, 2, 4, 2, 4,
4, 4, 4, 2, 2
Punti DATA 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 1, 0

BattutePerMin CON 320

indice VAR Byte


offset VAR Nib

LetteraNota VAR Byte


FreqNota VAR Word
DurataNota VAR Word
OttavaNota VAR Nib
PuntoNota VAR Bit

NotaIntera VAR Word


NotaIntera = 60000 / BattutePerMin * 4

DO UNTIL LetteraNota = "Q"

READ Note + indice, LetteraNota

LOOKDOWN LetteraNota, [ "C", "d", "D", "e", "E",


"F", "g", "G", "a", "A",
"b", "B", "P", "Q" ], offset

LOOKUP offset, [ 4186, 4435, 4699, 4978, 5274,


5588, 5920, 6272, 6645, 7040,
7459, 7902, 0, 0 ], FreqNota

READ Ottave + indice, OttavaNota


OttavaNota = 8 - OttavaNota
FreqNota = FreqNota / (DCD OttavaNota)

READ Durate + indice, DurataNota


DurataNota = NotaIntera / DurataNota

READ Punti + indice, PuntoNota


IF PuntoNota = 1 THEN DurataNota = DurataNota * 3 / 2

FREQOUT 9, DurataNota, FreqNota

indice = indice + 1

LOOP
Pagina 284 · Che cosa è un microcontrollore?

END

Come lavora MusicaConPiùCaratteristiche.bs2


Qui sotto sono riportati i dati musicali dell’intera canzone. Per ciascuna nota nella
direttiva Note DATA, c’è un corrispondente dato nelle direttive DATA Ottave, Durate, e
a
Punti. Per esempio, la prima nota è una nota C (Do) nella 7 ottava; è una nota da un
quarto e non è puntata. Ecco un altro esempio: la seconda a partire dall’ultima nota (non
inclusa “Q”) è una nota E (Mi), nella 7a ottava. E’ una nota metà, ed è puntata. C’è
anche una costante BatttutePerMin che imposta il tempo della canzone.
Note DATA "C","E","E","E","D","E","F","E","E","D","D",
"D","C","D","E","C","Q"
Ottave DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7
Durate DATA 4, 2, 4, 4, 4, 4, 2, 2, 4, 2, 4,
4, 4, 4, 2, 2
Punti DATA 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 1, 0

BattutePerMin CON 320

Nel programma esempio precedente, NotaIntera era una costante. Questa volta, è una
variable che conterrà la durata di una nota intera in ms. Dopo aver calcolato questo
valore, NotaIntera sarà usata per determinare le durate di tutte le altre note, proprio
come nel programma precedente. Le variabili indice, offset, LetteraNota, e
DurataNota sono anch’esse usate nello stesso modo in cui lo erano nel programma
precedente. La variabile FreqNota è gestita in modo un pò diverso, poichè ora deve
essere regolata in funzione dell’ottava in cui viene suonata la nota. Le variabili
OttavaNota e PuntoNota sono state aggiunte per gestire le caratteristiche ottava e
punto.
NotaIntera VAR Word

indice VAR Byte


offset VAR Nib

LetteraNota VAR Byte


FreqNota VAR Word
DurataNota VAR Word
OttavaNota VAR Nib
PuntoNota VAR Bit
Frequenza e Suono · Pagina 285

La variabile NotaIntera è calcolata usando BattutePerMin. Il tempo della canzone è


definito in battute per minuto e il programma deve dividere 60000 ms per
BattutePerMin, poi moltiplicare per 4. Il risultato è il valore corretto per una nota
intera.
NotaIntera = 60000 / BattutePerMin * 4

La Matematica viene eseguita da sinistra a destra. Nel calcolo NotaIntera = 60000


/ BattutePerMin * 4, il BASIC Stamp calcola prima 60000 / BattutePerMin. Poi,
moltiplica quel risultato per 4.
Per raggruppare le operazioni si possono usare le parentesi. Se volete prima dividere
BattutePerMin per 4 , potete far così: NotaIntera = 60000 / (BattutePerMin * 4).

Ciò è del tutto uguale al programma precedente:


DO UNTIL LetteraNota = "Q"

READ Note + indice, LetteraNota

LOOKDOWN LetteraNota, [ "C", "d", "D", "e", "E",


"F", "g", "G", "a", "A",
"b", "B", "P", "Q" ], offset

Ora che nella miscela ci sono le ottave, la parte di codice che prevede la frequenza delle
note è stata cambiata. La tabella di valori del comando LOOKUP contiene frequenze di
nota dalla 8a ottava. Questi valori possono essere divisi per 1 se volete suonare le note
nella 8a ottava, per 2 se volete suonare le note nella 7a ottava, per 4 se volte suonare le
note nella 6a ottava e per 8 se volete suonare le note nella 5a ottava. La divisione va fatta
prima. Tutto ciò che fa questo comando LOOKUP è porre una nota dalla 8a ottava nella
variabile FreqNota.
LOOKUP offset, [ 4186, 4435, 4699, 4978, 5274,
5588, 5920, 6272, 6645, 7040,
7459, 7902, 0, 0 ], FreqNota

Ecco come la variabile FreqNota è regolata per avere l’ottava corretta. Dapprima, il
comando READ cattura il valore di ottava memorizzato nella Ottave DATA. Questo può
essere un valore tra 5 e 8.
READ Ottave + indice, OttavaNota
Pagina 286 · Che cosa è un microcontrollore?

A seconda dell’ottava, vogliamo dividere FreqNota per 1, 2, 4, o 8. Questo significa che


il risultato è in realtà da dividere per 20 = 1, 21 = 2, 22 = 4, o 23 = 8. L’istruzione qui sotto
prende il valore di OttavaNota, che potrebbe essere un valore tra 5 ed 8, e sottrae quel
valore da 8. Se OttavaNota era 8, ora è 0. Se OttavaNota era 7, ora è 1. Se
OttavaNota era 6, ora è 2, e se OttavaNota era 5, ora è 3.

OttavaNota = 8 - OttavaNota

Ora, OttavaNota è un valore che può essere usato come esponente di 2, ma come si fa ad
elevare 2 ad una sua potenza in PBASIC? Una risposta è usare l’operatore DCD. DCD 0 è
1, DCD 1 è 2, DCD 2 è 4, e DCD 3 è 8. Dividendo FreqNota per DCD OttavaNota significa
che state dividendo per 1, 2, 4, o 8, che dividerà FreqNota per il valore corrente. Il
risultato finale è che FreqNota è impostato all’ottava corretta. Userete il terminale di
Debug nel capitolo Il vostro turno per osservare più da vicino come funzioni questo.
FreqNota = FreqNota / (DCD OttavaNota)

Come faccio a sapere come si usa l’operatore DCD? Apprendete e imparate con la
pratica. Ogni volta che vedete un nuovo comando, operatore, o qualsiasi altra parola chiave
usata in un esempio, cercatela nel manuale BASIC Stamp. Leggete cosa dice, e provate ad
usarla in un programma fatto da voi.
Acquisite l’abitudine di leggere periodicamente il Manuale del BASIC Stamp e provare i
piccoli programmi esempio. Questo è il modo migliore di acquisire familiarità con i vari
comandi ed operatori e con il loro modo di operare. Facendo queste cose, svilupperete
l’abitudine di aggiungere sempre qualcosa all’elenco di strumenti di programmazione che
potete usare per risolvere problemi.

Le prime due righe di codice per determinare la durata della nota sono quasi le stesse del
codice del programma esempio precedente. Ora, però, qualsiasi nota può essere puntata,
il che vuol dire che la sua durata potrebbe dover essere moltiplicata per 1,5. Per accedere
ai valori memorizzati in EEPROM dalla direttiva DATA Punti si usa un comando READ.
Ogni volta che il valore della variabile PuntoNota è 1, per moltiplicare per 3 e dividere
per 2 si usa una frase IF...THEN.
READ Durate + indice, DurataNota
DurataNota = NotaIntera / DurataNota

READ Punti + indice, PuntoNota


IF PuntoNota = 1 THEN DurataNota = DurataNota * 3 / 2
Frequenza e Suono · Pagina 287

Matematica con interi. Il BASIC Stamp non elabora automaticamente un numero come
1,5. Quando effettua calcoli matematici, lavora soltanto con numeri interi: …, -5, -4, -3, -2, -
1, 0, 1, 2, 3, … La migliore soluzione per moltiplicare per 1,5 è di moltiplicare per 3/2.
Dapprima, moltiplicare per 3, e poi dividere per 2.
Ci sono molti modi di programmare il BASIC Stamp per gestire valori frazionari. Potete
programmare il BASIC Stamp perché usi gli interi per considerare la parte decimale di un
numero. Questo fatto è stato introdotto nel manuale Basic Analog and Digital Student
Guide. Ci sono inoltre due operatori che rendono più facile il lavorare con valori frazionari, e
sono: ** and */. Questi operatori sono illustrati in dettaglio nel manuale Applied Sensors
Student Guide e nel manuale del BASIC Stamp.

La parte rimanente di questo programma esempio opera nello stesso modo in cui operava
nel programma esempio precedente:
FREQOUT 9, DurataNota, FreqNota
indice = indice + 1
LOOP
END

Il vostro turno – Suonare un motivo con più di una ottava


MusicaConPiùCaratteristiche.bs2 faceva uso delle pause, ma si manteneva entro una sola
ottava. Il motivo “Take Me Out to the Ball Game” (“Portami fuori a giocare a palla”)
mostrato qui sotto suona la maggior parte delle sue note nella 6a ottava. Ci sono due note
nella 7a ottava, ed esse fanno una grande differenza nel modo in cui suona.

 Memorizzate una copia del programma col nome


MusicaConPiùCaratteristicheVostroTurno.bs2.
 Modificate il programma sostituendo le quattro direttive Data ed una
dichiarazione di costante con queste altre:
Note DATA "C","C","A","G","E","G","D","P","C","C","A",
"G","E","G","Q"
Ottave DATA 6, 7, 6, 6, 6, 6, 6, 6, 6, 7, 6,
6, 6, 6
Durate DATA 2, 4, 4, 4, 4, 2, 2, 4, 2, 4, 4,
4, 4, 2
Punti DATA 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1

BattutePerMin CON 240

 Eseguite il programma e verificate che suoni in modo corretto .


Pagina 288 · Che cosa è un microcontrollore?

Quelle due note nella 7a ottava sono essenziali per far suonare il motivo in modo corretto.
E’ interessante ascoltare cosa succede se quei valori della 7a ottava sono cambiati nei
corrispondenti valori della 6a.

 Provate a cambiare i due valori della 7a nella direttiva Ottave DATA in modo che
essi siano della 6a. Tenetelo a mente, ciò farà suonare “Take Me out to the Ball
Game” in modo strano.
 Eseguite il programma, e ascoltate l’effetto dell’ottava errata sulla canzone.
 Cambiate di nuovo la Ottave DATA riportandola allo stato originario.
 Eseguite di nuovo il programma ed ascoltate il motivo per vedere se suona di
nuovo in modo corretto.

ATTIVITÀ #5: SUONERIE CON IL RTTTL


I vecchi telefoni cellulari usavano suonare i toni di avviso (delle chiamate, cioè le
suonerie) con un altoparlante piezo. Le suonerie venivano scaricate dal web su un
computer, e poi ricaricate dal computer sul microcontrollore del telefono cellulare.
All’epoca, uno dei modi più utilizzati per comporre, registrare e inviare suonerie era un
modo che usava stringhe di testo con caratteri che descrivevano ciascuna nota nel motivo.
Eccovi un esempio di come le prime note dalla “5a di Beethoven” apparivano in una di
queste stringhe:
Beethoven5:d=8,o=7,b=125:g,g,g,2d#,p,f,f,f,2d

Questo formato per memorizzare dati musicali è chiamato RTTTL, acronimo di Ringing
Tone Text Transfer Language (Linguaggio per trasferire testi di suonerie). La grande
trovata dei file RTTTL all’epoca fu la loro larga condivisione via World Wide Web.
Molti siti hanno file RTTTL disponibili per lo scarico gratuito. C’erano anche programmi
software gratuiti usabili per comporre e simulare questi file, oltre a caricarli sul vostro
cellulare. La specifica del RTTTL è ancora pubblicata online. L’Appendice C riassume
il modo in cui un file RTTTL memorizza note, durate, pause, tempo, e note puntate.

Questa attività introduce alcune tecniche di programmazione PBASIC usabili per


riconoscere elementi diversi di testo. L’abilità di riconoscere caratteri o gruppi di caratteri
diversi e compiere azioni basate sul contenuto dei caratteri è estremamente utile. Infatti,
è la chiave per convertire una suoneria di formato RTTTL (come la Beethoven5 riportata
sopra) in musica. Alla fine di questa attività, c’è un programma applicativo che potete
usare per suonare suonerie in formato RTTTL.
Frequenza e Suono · Pagina 289

Scegliere quale blocco di codice eseguire in base a un tipo di carattere


La frase SELECT...CASE è probabilmente il miglior strumento di programmazione per
riconoscere caratteri o valori. Tenete a mente che è uno degli strumenti usati per
convertire una suoneria RTTTL in note musicali.
In generale, la SELECT...CASE è usata per:

 Scegliere una variabile o un’espressione.


 Valutare quella variabile o espressione in base a un tipo di carattere .
 Eseguire blocchi di codice differenti a seconda di quale tipo di carattere è
riportato in quella variabile.

Ecco la sintassi di SELECT...CASE: SELECT espressione


CASE condizion(e)
frase (frasi)
{ CASE ELSE
frase (frasi) }
ENDSELECT

Potete provare i due programmi esempio che seguono, per vedere come SELECT...CASE
lavora. ScegliTipoConValori.bs2 considera valori numerici digitati nel terminale di
Debug e dice qual’è la dimensione minima di variabile necessaria a memorizzare quel
valore. ScegliTipoConCaratteri.bs2 dice se il carattere digitato nel terminale di Debug è
maiuscolo o minuscolo, o è una cifra, o un segno di interpunzione.

Ricordate di usare la Finestrella di trasmissione nel terminale di Debug per inviare i


caratteri che digitate al BASIC Stamp. Le finestrelle di trasmissione e ricezione sono
mostrate nella Figura 8-5.
Pagina 290 · Che cosa è un microcontrollore?

Figura 8-5
Finestrelle di Invio di messaggi
al BASIC Stamp
Trasmissione →
Digitate un valore tra Cliccate sulla
0 e 65535 1 finestrella di
BIT
Trasmissione
Ricezione → Digitate un altro valore 10 (superiore) e
NIB (Nibble) digitate il valore o i
caratteri che volete
trasmettere al
BASIC Stamp.

Programma esempio: ScegliTipoConValori.bs2


 Digitate ed eseguite ScegliTipoConValori.bs2.
 Nel terminale di Debug, accertatevi che la casella di opzione Echo Off sia bianca
(nessun segno di spunta).
 Cliccate sulla finestrella di trasmissione del terminale di Debug.
 Digitate un valore tra 0 e 65535, e premete il tasto Enter.

Cosa accade se digitate un numero maggiore di 65535? Se digitate il numero 65536, il


BASIC Stamp memorizzerà il numero 0. Se digitate il numero 65537, il BASIC Stamp
memorizzerà il numero 1, e così via. Se un numero è troppo grande per entrare nella
variabile a cui si invia, questo fenomeno è detto overflow.

 Usate la Tabella 8-1 per verificare che il programma esempio prenda le decisioni
giuste sulle dimensioni dei numeri che digitate nel terminale di Debug.

Tabella 8-1: Tipi di variabile e valori che possono memorizzare


Tipo di variable Intervallo di valori
Bit Da 0 a 1
Nib Da 0 a 15
Byte Da 0 a 255
Word Da 0 a 65535
Frequenza e Suono · Pagina 291

' Che cos’è un Microcontrollore - ScegliTipoConValori.bs2


' Digitate un valore e vedete la minima variabile che può ospitarlo.

'{$STAMP BS2}
'{$PBASIC 2.5}

valore VAR Word


PAUSE 1000

DEBUG "Digita un valore tra ", CR,


"0 e 65535: "

DO

DEBUGIN DEC valore

SELECT valore

CASE 0, 1
DEBUG "Bit", CR
PAUSE 100

CASE 2 TO 15
DEBUG "Nib (Nibble)", CR
PAUSE 200

CASE 16 TO 255
DEBUG "Byte", CR
PAUSE 300

CASE 256 TO 65535


DEBUG "Word", CR
PAUSE 400

ENDSELECT

DEBUG CR, "Digita un altro valore: "

LOOP

Come lavora ScegliTipoConValori.bs2


Per memorizzare i valori digitati nel terminale di Debug è stata dichiarata una variabile
word.
valore VAR Word

Il comando DEBUGIN prende il numero digitato e lo pone entro la variabile valore.


DEBUGIN DEC valore
Pagina 292 · Che cosa è un microcontrollore?

La frase SELECT sceglie la variabile valore come quella da cui elaborare i casi.
SELECT valore

Il primo caso è quando la variabile valore è uguale a 0 o ad 1. Se il valore uguaglia uno


qualsiasi di questi numeri, sono eseguiti i comandi DEBUG e PAUSE che lo seguono.
CASE 0, 1
DEBUG "BIT", CR
PAUSE 100

Il secondo caso è se il valore uguaglia un numero qualsiasi compreso tra 2 e 15. Se è


uguale ad uno qualsiasi di quei numeri, sono eseguiti i comandi DEBUG e PAUSE sotto la
CASE.

CASE 2 to 15
DEBUG "NIB (Nibble)", CR
PAUSE 200

Quando tutti i casi sono stati eseguiti, per completare la frase SELECT..CASE è usata la
parola chiave ENDSELECT.
ENDSELECT

Programma esempio: ScegliTipoConCaratteri.bs2


Questo programma esempio valuta quale carattere digitate nella finestrella di
trasmissione del terminale di Debug. Può riconoscere caratteri in maiuscolo e minuscolo,
cifre, ed alcuni segni di interpunzione. Se digitate un carattere che il programma non
riconosce, vi dirà di riprovare (cioè di digitare un carattere differente).

 Digitate ed eseguite ScegliTipoConCaratteri.bs2.


 Accertatevi che la casella Echo Off sia Bianca (nessun segno di spunta).
 Cliccate la finestrella di trasmissione del terminale di Debug per porvi il cursore
 Digitate caratteri nella finestra di trasmissione ed osservate i risultati.

' Che cos’è un Microcontrollore - ScegliTipoConCaratteri.bs2


' Programma che può identificare alcuni caratteri: tipo, cifra, segno di
' interpunzione.

'{$STAMP BS2}
'{$PBASIC 2.5}
Frequenza e Suono · Pagina 293

carattere VAR Byte


PAUSE 1000

DEBUG "Digita un carattere: ", CR

DO
DEBUGIN carattere

SELECT carattere

CASE "A" TO "Z"


DEBUG CR, "Maiuscolo ", CR

CASE "a" TO "z"


DEBUG CR, "Minuscolo ", CR

CASE "0" TO "9"


DEBUG CR, "Cifra", CR

CASE "!", "?", ".", ","


DEBUG CR, "Segno di interpunzione", CR

CASE ELSE
DEBUG CR, "Caraetere sconosciuto.", CR,
"Prova uno diverso."

ENDSELECT

DEBUG CR, "Digita un altro carattere ", CR


LOOP

Come lavora ScegliTipoConCaratteri.bs2


Se confrontato con ScegliTipoConValori.bs2, questo programma esempio ha poche
differenze. Prima di tutto, il nome della variabile valore è stato cambiato in
carattere, e la sua dimensione è stata cambiata da word a byte. La ragione è che tutti i
caratteri del PBASIC hanno dimensione byte. La frase SELECT sceglie la variabile
carattere per la valutazione caso per caso.

SELECT carattere

Le virgolette sono usate per dire all’Editor del BASIC Stamp che fate riferimento a
caratteri. Si possono trattare i gruppi di caratteri e segni di interpunzione che seguono
come un intervallo di numeri, poiché il BASIC Stamp li riconosce dal loro equivalente
numerico ASCII — vedere la tabella ASCII nell’Help dell’Editor del BASIC Stamp.
SELECT carattere
Pagina 294 · Che cosa è un microcontrollore?

CASE "A" TO "Z"


DEBUG CR, "Maiuscolo ", CR

CASE "a" TO "z"


DEBUG CR, "Minuscolo ", CR

CASE "0" TO "9"


DEBUG CR, "Cifra", CR

CASE "!", "?", ".", ","


DEBUG CR, "Segno di interpunzione", CR

C’è soltanto una diversa frase CASE, non usata nell’esempio precedente:
CASE ELSE
DEBUG CR, "Carattere sconosciuto.", CR,
"Prova uno diverso."

Questa frase CASE dice al blocco di codice SELECT cosa fare se nessuno dei casi previsti è
vero. Potete far lavorare questo caso digitando un carattere come % o $.

Il vostro turno – Scelta di caratteri speciali


 Modificate la frase SELECT...CASE in ScegliTipoConCaratteri.bs2 in modo che
visualizzi “Carattere speciale” quando inserite uno di questi caratteri: @, #, $,
%, ’^’ , &, *, (, ), _, or +.

Programma applicativo esecutore di suoneria RTTTL


Qui sotto è riportato il file RTTTL che contiene le informazioni musicali usate nel
programma esempio successivo. Ci sono cinque direttive RTTTL_File DATA ulteriori
che potete provare nel capitolo “Il vostro turno”. Questo programma esegue un motivo
chiamato “Reveille” che è la “sveglia mattutina” suonata negli accampamenti militari
come prima cosa al mattino. Potete averla ascoltata in tantissimi film o spettacoli
televisivi.
RTTTL_File DATA "Reveille:d=4,o=7,b=140:8g6,8c,16e,16c,8g6,8e,",
"8c,16e,16c,8g6,8e,8c,16e,16c,8a6,8c,e,8c,8g6,",
"8c,16e,16c,8g6,8e,8c,16e,16c,8g6,8e,8c,16e,",
"16c,8g6,8e,c,p,8e,8e,8e,8e,g,8e,8c,8e,8c,8e,8c,",
"e,8c,8e,8e,8e,8e,8e,g,8e,8c,8e,8c,8g6,8g6,c."
Frequenza e Suono · Pagina 295

Programma esempio: MicroMusicaConRtttl.bs2


Questro programma applicativo è piuttosto lungo, ed è una buona idea scaricare l’ultima
vesrione dalla pagina web www.parallax.com/go/WAM. Scaricare questo programma e
aprirlo con l’Editor del BASIC Stamp dovrebbe farvi risparmiare un bel po’ di tempo.
L’alternativa, naturalmente, è digitare a mano e mettere a punto quattro pagine di codice.

 Con l’editor del BASIC Stamp, aprite il vostro file MicroMusicaConRtttl.bs2,


oppure digitate a mano l’esempio qui sotto con molta attenzione.
 Eseguite il programma, e verificate che il motivo è riconoscibile come la sveglia
mattutina dei militari (Reveille).
 Andate al capitolo “Il vostro turno” e provate altri motive ulteriori (direttive
RTTTL_File DATA).

' Che cos’è un Microcontrollore - MicroMusicaConRtttl.bs2


' Esegue suonerie in formato Nokia RTTTL usando direttive DATA.

'{$STAMP BS2}
'{$PBASIC 2.5}
DEBUG "Programma in esecuzione!"

' -----[ Definizioni I/O]-------------------------------------------------

PinAltoparlante PIN 9 ' Altoparlante Piezo connesso a P9.

' -----[ Variabili ]-------------------------------------------------------

contatore VAR Word ' Contatore tutto-fare.


car VAR Byte ' Variabile memorizza caratteri.
indice VAR Word ' Indice per puntare ai dati.

LetteraNota VAR Byte ' Memorizza carattere nota.


FreqNota VAR Word ' Memorizza frequenza nota.
OttavaNota VAR Word ' Memorizza ottava nota.

durata VAR Word ' Memorizza durata nota.


tempo VAR Word ' Memorizza tempo.

default_d VAR Byte ' Memorizza durata default.


default_o VAR Byte ' Memorizza ottava default.
default_b VAR Word ' Memorizza batt/min default.

' -----[ Dati in EEPROM]---------------------------------------------------

RTTTL_File DATA "Reveille:d=4,o=7,b=140:8g6,8c,16e,16c,8g6,8e,",


"8c,16e,16c,8g6,8e,8c,16e,16c,8a6,8c,e,8c,8g6,",
"8c,16e,16c,8g6,8e,8c,16e,16c,8g6,8e,8c,16e,",
"16c,8g6,8e,c,p,8e,8e,8e,8e,g,8e,8c,8e,8c,8e,8c,",
Pagina 296 · Che cosa è un microcontrollore?

"e,8c,8e,8e,8e,8e,8e,g,8e,8c,8e,8c,8g6,8g6,c."

Fatto DATA ",q,"

Note DATA "p", "a", "#", "b",


"c", "#", "d", "#",
"e", "f", "#", "g",
"#"
Ottava8 DATA Word 0, Word 3520, Word 3729, Word 3951,
Word 4186, Word 4435, Word 4699, Word 4978,
Word 5274, Word 5588, Word 5920, Word 6272,
Word 6645

' -----[ Inizializzazione ]------------------------------------------------

contatore = 0 ' Inizializza contatore.

GOSUB TrovaUguali ' Trova primo '=' nel file.


GOSUB ProcessaDurata ' Ottiene durata default.
GOSUB TrovaUguali ' Trova prossimo '='.
GOSUB ProcessaOttava ' Ottiene ottava default.
GOSUB TrovaUguali ' Trova ultimo '='.
GOSUB OttieneTempo ' Ottiene tempo default.

' -----[ Codice Program]----------------------------------------------------

DO UNTIL car = "q" ' Cicla fino a 'q' in DATA.


GOSUB ProcessaDurata ' Ottiene durata nota.
GOSUB ProcessaNota ' Ottiene valore indice nota.
GOSUB ControllaSePunto ' Se punto, durata 3/2.
GOSUB ProcessaOttava ' Ottiene ottava.
GOSUB SuonaNota ' Ottiene freq, suona nota, prox.
LOOP ' Fine ciclo principale.

END ' Fine del programma.

' -----[ Subroutine – Trova carattere uguale ]-----------------------------

TrovaUguali: ' Va attraverso i caratteri nel


' file RTTTL cercando per un
DO ' '='. Incrementa cuntatore
READ RTTTL_File + contatore, car ' fin quando si trova '=' , poi
contatore = contatore + 1 ' ritorna alla chiamata.
LOOP UNTIL car = "="

RETURN

' -----[ Subroutine - Legge Tempo da testata RTTTL]----------------------


' Ogni carattere della tastiera ha un numero unico chiamato valore ASCII.
' I caratteri 0, 1, 2,...9 hanno i valori ASCII di 48, 49, 50,...57.
' Potete sempre convertire dal carattere che rappresenta una cifra al
' suo valore sottraendo 48 dalla variabile che memorizza la cifra.
Frequenza e Suono · Pagina 297

' Potete esaminare questo confrontando DEBUG DEC 49 e DEBUG 49.

OttieneTempo: ' Analizza file RTTTL per Tempo.


' Converte caratteri in
default_b = 0 ' cifre sottraendo 48
DO ' dal valore ASCII di ciascun
READ RTTTL_File + contatore, car ' carattere. Iterativamente
IF car = ":" THEN ' moltiplica ciascuna cifra per
default_b = default_b / 10 ' 10 se c’è una altra cifra, poi
contatore = contatore + 1 ' aggiunge la cifra più recente
EXIT ' alla colonna dell’’uno.
ENDIF ' Per esempio, la stringa
default_b = default_b + car - 48 ' "120" è (1 X 10 X 10)
contatore = contatore + 1 ' + (2 X 10) + 0. Per primo
default_b = default_b * 10 ' è convertito il '1', poi
LOOP UNTIL car = ":" ' moltiplicato per 10. Poi è
' convertito/aggiunto il '2'. Poi
RETURN ' è convertito/aggiunto 0, fatto.

' -----[ Subroutine – Guarda l’ottava ]------------------------------------

ProcessaOttava: ' L’ottava si include o meno in


' una data nota poiché qualsiasi
READ RTTTL_File + contatore, car ' nota che viene suonata
SELECT car ' nella ottava di default
CASE "5" TO "8" ' non specifica la
OttavaNota = car - "0" ' ottava. Se c’’è un car
contatore = contatore + 1 ' da '5' a '8' usate quello,
CASE ELSE ' altrimenti usate default_o.
OttavaNota = default_o ' I caratteri sono convertiti
ENDSELECT ' in cifre sottraendo '0',
IF default_o = 0 THEN ' che è lo stesso che
default_o = OttavaNota ' sottrarre 48. La prima volta
ENDIF ' che è chiamata questa
' subroutine, default_o è 0.
RETURN ' Se 0, allora imposta default_o.

' -----[ Subroutine - Trova indice di Nota ]--------------------------------

ProcessaNota: ' Imposta valore indice per ricerca


' di frequenza nota basata su
READ RTTTL_File + contatore, car ' carattere nota. Se 'p',
SELECT car ' indice è 0. Se da 'a' a 'g',
CASE "p" ' Legge valori carattere in
indice = 0 ' tabella DATA e trova accordo.
contatore = contatore + 1 ' Registra valore indice quando
CASE "a" TO "g" ' trova accordo. Se car success-
FOR indice = 1 TO 12 ' sivo è un diesis (#), aggiunge
READ Note + indice, LetteraNota ' 1 al valore di indice per
IF LetteraNota = car THEN EXIT ' aumentare l’’indice (e la
NEXT ' frequenza) di 1 tacca.
contatore = contatore + 1 ' Come le altre subroutine,
Pagina 298 · Che cosa è un microcontrollore?

READ RTTTL_File + contatore, car ' aumenta il contatore per ciascun


SELECT car ' carattere che è elaborato.
CASE "#"
indice = indice + 1
contatore = contatore + 1
ENDSELECT
ENDSELECT

RETURN

' -----[ Subroutine - Determina Durata Nota]---------------------------------

ProcessaDurata: ' Controlla se caratteri formano


' 1, 2, 4, 8, 16 o 32.
READ RTTTL_File + contatore, car ' Se si, converte da carattere
' ASCII a valore sottraendo 48.
SELECT car ' Nel caso di 16 o 32, moltiplica
CASE "1", "2", "3", "4", "8" ' per 10 ed aggiunge la cifra
durata = car - 48 ' successiva alla colonna
contatore = contatore + 1 ' degli uni.
READ RTTTL_File + contatore, car
SELECT car
CASE "6", "2"
durata = durata * 10 + car - 48
contatore = contatore + 1
ENDSELECT
CASE ELSE ' Se manca la durata,
durata = default_d ' usate il default.
ENDSELECT

IF default_d <> 0 THEN ' Se default_d non è definito


durata = 60000/default_b/durata*3 ' (if default_d = 0), allora
ELSE ' impostate default_d = alla
default_d = durata ' durata dalla d=#.
ENDIF

RETURN

' -----[ Subroutine – Controlla se '.' Indica 1,5 volte la Durata ]----------

ControllaSePunto: ' Controlla se punto che indica


' multiplicare durata per 3/2.
READ RTTTL_File + contatore, car ' Se trova ‘’.’’, moltiplica per
SELECT car ' 3/2 e incrementa contatore,
CASE "." ' altrimenti, non far niente
durata = durata * 3 / 2 ' e ritornare.
contatore = contatore + 1
ENDSELECT

RETURN
Frequenza e Suono · Pagina 299

' -----[ Subroutine – Trova Virgola e Suona Note/Durata ]-----------------

SuonaNota: ' Trova ultima virgola nella


' nota appena inserita. Quindi,
READ RTTTL_File + contatore, car ' prendere la frequenza della
SELECT car ' nota da data, e suonarla, o
CASE "," ' far pausa se frequenza = 0.
contatore = contatore + 1
READ Ottava8 + (indice * 2), Word FreqNota
OttavaNota = 8 - OttavaNota
FreqNota = FreqNota / (DCD OttavaNota)
IF FreqNota = 0 THEN
PAUSE durata
ELSE
FREQOUT PinAltoparlante, durata, FreqNota
ENDIF
ENDSELECT

RETURN

Come lavora MicroMusicaConRtttl.bs2


Questo programma esempio è molto divertente da usare, e mostra il genere di codice che
riuscirete a scrivere dopo un po’ di pratica. Però, è stato incluso in questo testo più per
divertimento che per i concetti di codifica che impiega. Se esaminate brevemente il
codice, potete notare che avete già utilizzato tutti i comandi e gli operatori del
programma, eccetto uno!

Ecco l’elenco degli elementi in questo programma che dovrebbero, d’ora in poi, esservi
familiari:

 Commenti che vi aiutino a spiegare il vostro codice


 Dichiarazioni di costanti e variabili
 Dichiarazioni DATA
 Comandi READ
 Blocchi IF...ELSE...ENDIF
 Cicli DO...LOOP sia con WHILE ed UNTIL, che senza
 Subroutine con GOSUB, etichette, e RETURN
 Cicli FOR...NEXT
 Comandi LOOKUP e LOOKDOWN
 Comandi FREQOUT e PAUSE
 Comando SELECT...CASE
Pagina 300 · Che cosa è un microcontrollore?

 EXIT è un commando nuovo, che consente semplicemente al programma di


“uscire” da un ciclo prima che esso sia stato completato, ed è usato spesso in
frasi IF...THEN.

Il vostro turno – Motivi differenti


 Provate a sostituire la direttiva RTTTL_File DATA nel programma
MicroMusicaConRTTTL.bs2 con ciascuno dei cinque file musicali differenti
riportati qui sotto.

Soltanto una direttiva RTTTL_File DATA per volta! Assicuratevi di sostituire, non
aggiungere, la vostra nuova direttiva RTTTL_File DATA.

 Eseguite MicroMusicaConRTTTL.bs2 per provare ciascuno dei file TTTL.

RTTTL_File DATA "TwinkleTwinkle:d=4,o=7,b=120:c,c,g,g,a,a,2g,f,",


"f,e,e,d,d,2c,g,g,f,f,e,e,2d,g,g,f,f,e,e,2d,c,c,",
"g,g,a,a,2g,f,f,e,e,d,d,1c"

RTTTL_File DATA "FrereJacques:d=4,o=7,b=125:c,d,e,c,c,d,e,c,e,f",


",2g,e,f,2g,8g,8a,8g,8f,e,c,8g,8a,8g,8f,e,c,c,g6",
",2c,c,g6,2c"

RTTTL_File DATA "Beethoven5:d=8,o=7,b=125:g,g,g,2d#,p,f,f,f,2d"

RTTTL_File DATA "ForHe'sAJollyGoodFellow:d=4,o=7,b=320:c,2e,e,e,",


"d,e,2f.,2e,e,2d,d,d,c,d,2e.,2c,d,2e,e,e,d,e,2f,",
"g,2a,a,g,g,g,2f,d,2c"

RTTTL_File DATA "TakeMeOutToTheBallgame:d=4,o=7,b=225:2c6,c,a6,",


"g6,e6,2g.6,2d6,p,2c6,c,a6,g6,e6,2g.6,g6,p,p,a6",
",g#6,a6,e6,f6,g6,a6,p,f6,2d6,p,2a6,a6,a6,b6,c,",
"d,b6,a6,g6"

Scaricamento di file RTTTL: Altri file RTTTL sono disponibili per lo scaricamento da vari
siti del World Wide Web. Questi file sono contributi di entusiasti di suonerie, molti dei quail
non sono esperti di musica. Alcuni motivi di suonerie telefoniche sono molto buoni, altri
sono appena riconoscibili. Se volete scaricare ed eseguire un maggior numero di file
RTTTL, accertatevi di rimuovere tutti gli spazi che si trovassero fra i caratteri, e poi inserire i
flie di testo tra virgolette.
Frequenza e Suono · Pagina 301

SOMMARIO
Questo capitolo ha introdotto tecniche per generare suoni e motivi musicali con il BASIC
Stamp e un altoparlante piezoelettrico. Per inviare ad un altoparlante piezoelettrico
segnali alto/basso che generino effetti sonori e/o note musicali si può utilizzare il
comando FREQOUT. Il comando FREQOUT ha argomenti che controllano il Pin I/O cui si
invia il segnale, la Durata del tono musicale, e la frequenza del tono (Freq1). Per suonare
due note contemporaneamente si può usare l’argomento opzionale Freq2.

Si possono realizzare effetti sonori regolando frequenza e durata dei toni e le pause tra
essi. Il valore della frequenza si può anche far variare in un intervallo di valori per creare
una varietà di effetti.

Fabbricare note musicali dipende anche da frequenza, durata, e pause. Il valore


dell’argomento Duration del comando FREQOUT è determinato dal tempo della canzone e
dalla durata della nota (intera, metà, un quarto, ecc.). Il valore Freq1 della nota è
determinato dalla lettera di nota e dalla sua ottava. Le pause fra le note sono utilizzate
per impostare la durata dei comandi PAUSE che le realizzano.

Con una sequenza di comandi FREQOUT si possono suonare semplici canzoni col BASIC
Stamp, ma esistono modi più efficienti per memorizzare e reperire dati musicali.
Le direttive DATA assieme con le loro etichette opzionali Symbol sono state utilizzate per
memorizzare valori byte senza alcun prefisso, e valori word usando il prefisso Word. Per
reperire valori memorizzati in direttive DATA è stato usato il comando READ. Negli esempi
di questo capitolo, l’argomento Location del comando READ ha utilizzato sempre
l’etichetta opzionale Symbol della direttiva DATA per differenziare i diversi tipi di dati.
Alcune etichette Symbol utilizzate sono state Note, Durate, Punti, ed Ottave.

I dati musicali possono essere memorizzati in formati presi a prestito essi stessi dalla
traduzione di spartiti musicali. I dati in stile spartito musicale possono poi essere
convertiti in frequenze con i comandi LOOKUP e LOOKDOWN. Si possono effettuare anche
operazioni matematiche su valori di variabili per cambiare l’ottava di una nota, dividendo
la sua frequenza per una potenza di due. Le operazioni matematiche sono utili anche per
determinare la durata di note o col tempo, oppure con la durata di una nota intera.

E’ stato introdotto il costrutto SELECT...CASE come modo per calcolare una variabile in
base al tipo di carattere. Il costrutto (o frase) SELECT...CASE è particolarmente utile per
esaminare caratteri o numeri quando ci sono molte scelte disponibili, come per esempio
quale potrebbe essere la variabile ospitante, e molti insiemi diversi di azioni che occorre
Pagina 302 · Che cosa è un microcontrollore?

effettuare basandosi sul valore della variabile. Un programma che converte stringhe di
caratteri che descrivono motivi musicali da vecchi telefoni cellulari (detti file RTTTL) è
stato utilizzato per introdurre un programma più grande che fa uso di tutte le tecniche di
programmazione introdotte in questo testo. Il costrutto SELECT...CASE ha giocato un
ruolo di primo piano in questo programma perché è stato utilizzato per esaminare i
caratteri scelti entro un file RTTTL in base a un tipo di carattere.

Domande
1. Che cosa fa in modo che un suono venga riprodotto con tono alto? Che cosa fa
in modo che venga riprodotto con tono basso?
2. Che cosa fa il comando FREQOUT 15, 1000, 3000? Quale effetto ha ciascuno
dei numeri che contiene?
3. Come potete modificare il comando FREQOUT nella domanda 2 in modo che invii
due frequenze contemporaneamente?
4. Se premete un tasto B6 della tastiera di un pianoforte, quale frequenza invia?
5. Come potete modificare una direttiva DATA o un comando READ se volete
memorizzare e reperire valori word?
6. Potete avere più di una direttiva DATA? Se si, come potete dire ad un comando
READ di ottenere dati dall’una o dall’altra direttiva DATA?
7. Se conoscete la frequenza di una nota in una ottava, cosa dovete fare a quella
frequenza per suonarla nella ottava successiva più alta?
8. Che cosa fa il costrutto SELECT...CASE?

Esercizi
1. Modificate il motivo “Sveglia…” dal programma ToniAzione.bs2 in modo che
la frequenza del tono che suona aumenti di 500 ogni volta che il tono si ripete.
2. Spiegate come modificare MusicaConPiùCaratteristiche.bs2 in modo che
visualizzi un messaggio di attenzione nel terminale di Debug ogni volta che
viene suonata una nota puntata.

Progetti
1. Costruite un generatore di toni controllato da pulsanti. Se si preme un pulsante,
l’altoparlante deve emettere un bip da 2 kHz per 1/5 di secondo. Se si preme
l’altro pulsante l’altoparlante deve emettere un bip da 3 kHz per 1/10 di secondo.
Frequenza e Suono · Pagina 303

Soluzioni
D1. Il nostro orecchio rileva cambiamenti della pressione dell’aria come toni. Un
tono alto viene da cambiamenti di pressione dell’aria più veloci, un tono basso
da cambiamenti di pressione dell’aria più lenti.
D2. FREQOUT 15, 1000, 3000 invia un segnale di 3000 Hz dal pin P15 per un
secondo (1000 ms). L’effetto di ciascun numero: 15 – pin I/O P15; 1000 – durata
del tono uguale a 1000 ms o un secondo; 3000 – la frequenza del tono, in hertz,
in modo che invii un tono da 3000 Hz.
D3. Usate l’argomento opzionale Freq2. Per eseguire 3000 Hz e ad esempio, 2000
Hz, aggiungiamo semplicemente la seconda frequenza al comando, dopo una
virgola:
FREQOUT 15, 1000, 3000, 2000

D4. 1975.5 Hz, vedi Figura 8-3 a pagina 270.


D5. Usate il modificatore opzionale Word prima di ciascun dato.
D6. Si. Ciascuna direttiva DATA può avere un diverso parametro opzionale Symbol.
Per specificare da quale direttiva DATA ottenere i dati, includere il parametro
Symbol dopo la parola chiave READ. Ad esempio: READ Note, LetteraNota.
In questo esempio, Note è il parametro Symbol della direttiva Data.
D7. Per ottenere una determinata nota nell’ottava superiore successiva, moltiplicate
la frequenza per due.
D8. SELECT...CASE sceglie una variabile o espressione, la vàluta in base al tipo di
carattere, ed esegue blocchi di codice differenti a seconda di quale tipo di
carattere è il valore della variabile.
E1. Questo problema può essere risolto o aumentando manualmente ciascun tono di
500, oppure utilizzando un ciclo FOR...NEXT con un valore STEP di 500.

Utilizzando il ciclo FOR...NEXT: Aumentando il tono manualmente:


DEBUG "Aumento del tono di sveglia...",DEBUG "Aumento del tono di
CR sveglia...",CR
PAUSE 100 PAUSE 100
FOR frequenza = 1500 TO 3000 STEP 500 FREQOUT 9, 500, 1500
FREQOUT 9, 500, frequenza PAUSE 500
PAUSE 500 FREQOUT 9, 500, 2000
NEXT PAUSE 500
FREQOUT 9, 500, 2500
PAUSE 500
FREQOUT 9, 500, 3000
PAUSE 500
Pagina 304 · Che cosa è un microcontrollore?

E2. Modificate le righe che controllano la nota puntata:


READ Punti + indice, PuntoNota
IF PuntoNota = 1 THEN DurataNota = DurataNota * 3 / 2

Aggiungete un comando DEBUG alla IF...THEN. Non dimenticate la ENDIF.


READ Punti + indice, PuntoNota
IF PuntoNota = 1 THEN
DurataNota = DurataNota * 3 / 2
DEBUG "Nota puntata!", CR
ENDIF

P1. Usate il circuito dell’altoparlante piezo dalla Figura 8-2 a pagina 262; e i circuiti
del pulsante dalla Figura 4-26 a pagina 141.

' Che cos’è un Microcontrollore - Cap8Prog01_GeneraTonoAPuls.bs2


' P4 premuto: bip a 2 kHz per 1/5 di secondo. 2 kHz = 2000 Hz.
' 1/5 s = 1000 / 5 ms = 200 ms
' P3 premuto: bip a 3 kHz per 1/10 di secondo. 3 kHz = 3000 Hz.
' 1/10 s = 1000 / 10 ms = 100 ms
'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "Programma in esecuzione!"


DO
IF (IN4 = 1) THEN
FREQOUT 9, 200, 2000 ' 2000 Hz per 200 ms
ELSEIF (IN3 = 1) THEN
FREQOUT 9, 100, 3000 ' 3000 Hz per 100 ms
ENDIF
LOOP
Costruire prototipi delle proprie invenzioni · Pagina 305

Capitolo 9: Mattoni (elementi di costruzione)


elettronici
QUEI PICCOLI CHIP NERI
Per trovare esempi di “quei piccoli chip neri” occorrerà solo guardare non più in là del
vostro BASIC Stamp (vedi Figura 9-1). Ciascuno di quei chip ha una funzione speciale. Il
chip in alto a destra è il regolatore di tensione. Questo chip prende la tensione della
batteria e la converte in quasi esattamente 5,0 V, ciò che occorre al resto dei componenti
del BASIC Stamp per funzionare correttamente. Il chip in alto a sinistra è la EEPROM
del modulo BASIC Stamp. I programmi PBASIC sono condensati in numeri detti token
(simboli), che vengono scaricati nel BASIC Stamp. Questi simboli sono memorizzati
nella EEPROM, e potete vederli cliccando Run e poi Memory Map nell’Editor del BASIC
Stamp. Il chip più grosso è detto Interpreter chip.(chip interprete). E’ un
microcontrollore pre-programmato con l’Interprete PBASIC, che va a prendere i simboli
dalla EEPROM e poi interpreta il comando PBASIC rappresentato da quel simbolo.
Quindi esegue il comando, va a prendere il successivo simbolo, e così via. Questo
processo è chiamato fetch and execute (vai a prendere ed esegui).

Regolatore da
5V che
EEPROM da 2K converte il
memorizza il codice voltaggio di
PBASIC e i dati registrati input in 5 volt
→ regolati

Figura 9-1
Circuiti
Integrati del
BASIC
Stamp 2

Chip con l’interprete


PBASIC (un
microcontrollore pre-
programmato)

Pagina 306 · Che cosa è un microcontrollore?

Le persone parlano dei piccoli chip neri usando il termine “circuito integrato” (IC). Il
circuito integrato è in realtà un piccolo chip di silicio contenuto all’interno del
contenitore di plastica o ceramica nero. A seconda del chip, esso può avere un qualsiasi
numero di transistor tra centinaia e milioni . Un transistor è il mattone base dei circuiti
integrati, e in questo capitolo avrete l’opportunità di fare esperimenti con un transistor.
Altri componenti familiari progettati all’interno dei chip di silicio includono diodi,
resistenze e condensatori (capacità).

Pensate un momento alle attività che avete sperimentato in questo libro fino a questo
punto. L’elenco comprende: commutazione on e off di un LED, lettura di puilsanti,
controllo di servo, lettura di potenziometri, misura di luce, controlli di display, e
produzione di suoni. Sebbene questo sia solo l’inizio, è ancora molto emozionante,
specialmente se si considera che potete combinare queste attività per costruire dispositivi
più complessi. Il nocciolo del sistema che rende possibili tutte queste attività è costituito
soltanto dai tre circuiti integrati mostrati nella Figura 9-1 e da poche altre parti. Solo
questo evidenzia quanto potenti possano essere i circuiti integrati, quando sono progettati
per lavorare assieme.

ESPANDETE I VOSTRI PROGETTI CON CIRCUITI INTEGRATI


PERIFERICI
Esistono migliaia di circuiti integrati progettati per essere usati con i microcontrollori.
Talvolta i costruttori di circuiti integrati diversi fabbricano chip che eseguono la stessa
funzione. Talvolta le caratterisitiche di ciascun chip sono leggermente diverse, e altre
volte i chip sono quasi identici, ma uno può costare un pò meno dell’altro. Ciascuno
delle migliaia di circuiti integrati diversi può essere usato come mattone da costruzione
per molti progetti diversi. Le ditte produttrici pubblicano informazioni su come ciascun
circuito integrato lavori, in documenti chiamati datasheets (fogli di specifiche) e questi
fogli sono disponibili sui loro siti web. I costruttori pubblicano anche delle application
notes (note applicative), che illustrano come usare i loro circuiti integrati in modo unico o
utile, e ciò facilita il progetto di prodotti. I costruttori di circuiti integrati diffondono
queste informazioni sperando che gli ingegneri le useranno per incorporare i loro chip
negli ultimi giocattoli o applicazioni da avere ad ogni costo. Se vengono venduti migliaia
di giocattoli, la ditta vende migliaia dei loro circuiti integrati.

In questo capitolo, farete esperimenti con un transistor e un circuiti integrato di uso


speciale, detto potenziometro digitale. Come ricordato prima, il transistor è il mattone
base dei circuiti integrati. È, inoltre, un mattone base anche per una gran quantità di altri
Costruire prototipi delle proprie invenzioni · Pagina 307

circuiti. Anche il potenziometro digitale ha una gran varietà di utilizzi. Tenete a mente
che per ciascuna attività svolta finora, esistono probabilmente centinaia di modi diversi in
cui potreste usare questi circuiti integrati.

ATTIVITÀ #1: CONTROLLO DEL FLUSSO DI CORRENTE CON UN


TRANSISTOR
In qusta attività, userete un transistor per controllare la corrente che passa attraverso un
LED. Potrete usare il LED per controllare la corrente, poichè esso brilla più
intensamente quando lo attraversa una corrente grande, e meno intensamente quando una
corrente minore lo attraversa.

Introduzione del transistor


La Figura 9-2 mostra il simbolo schematico e il disegno di parte del transistor 2N3904.
Esistono molti tipi diversi di transistor. Questo è chiamato NPN, con riferimento al tipo
di materiali usati per costruire il transistor e al modo in cui questi materiali sono
incorporati nel silicio. Il modo migliore di iniziare a pensare a un transistor è di
immaginarlo come una valvola usata per controllare la corrente. Transistor differenti
controllano quanta corrente li attraversa con differenti mezzi. Questo transistor controlla
quanta corrente passa entro C (collettore) e fuori da E (emettitore). Esso usa la quantità
di corrente che può attraversare il terminale B (base) per controllare la corrente che passa
da C verso E. Con una piccolissima quantità di corrente permessa in B, un flusso di
corrente circa 416 volte tale quantità fluisce attraverso il transistor entro C e fuori da E.

C Figura 9-2
B
B Transistor 2N3904
E
2N3904
E
Pagina 308 · Che cosa è un microcontrollore?

Il foglio di specifiche di parte del 2N3904: Come ricordato prima, i fabbricanti di


semiconduttori pubblicano documenti chiamati fogli di specifiche (datasheet) per le parti che
fabbricano. Questi fogli di specifiche contengono informazioni usate dagli ingegneri per
progettare l’inserimento della parte in un prodotto. Per vedere un esempio di foglio di
specifiche per il 2N3904: collegatevi al sito www.fairchildsemi.com. Digitate “2N3904” nel
campo Search sulla “home page” della Fairchild Semiconductor, e cliccate Go. Uno dei
risultati della ricerca dovrebbe essere un link alla informazione di prodotto del 2N3904.
Seguitelo e cercate il link al Datasheet. Molti browser per web visualizzano il datasheet
aprendolo con Adobe Acrobat Reader.

Parti per l’esempio del transistor


(1) Transistor – 2N3904
(2) Resistenze – 100 kΩ (marrone-nero-giallo)
(1) LED – qualsiasi colore
(1) Potenziometro – 10 kΩ
(3) Cavallotti di filo

Costruzione e prova del circuito del transistor


La Figura 9-3 mostra un circuito usabile per controllare manualmente quanta corrente il
transistor fa passare nel LED. Ruotando la manopola del potenziometro, il circuito
rilascerà quantità diverse di corrente al terminale base del transistor. Questo modificherà
la quantità di corrente che il transistor fa passare dal suo collettore al suo emettitore. Il
LED darà una indicazione chiara della modifica brillando più o meno intensamente.

 Costruite il circuito mostrato in Figura 9-3.


o Assicuratevi che il pin anodo del LED (più lungo) sia connesso a Vdd.
o Controllate due volte il circuito del transistor. Notate che la parte piatta
del transistor è rivolta verso destra nel diagramma di cablaggio.
 Ruotate la manopola del potenziometro e verificate che il LED cambi intensità di
illuminazione in risposta al cambiamento di posizione del terminale mobile del
potenziometro.
Costruire prototipi delle proprie invenzioni · Pagina 309

Vdd Vdd

LED Figura 9-3


Circuito con
transistor a
controllo
POT 100 k
manuale con
10 k
potenziometro
100 k

Vss Vss

Il vostro turno – Commutazione On/Off del transistor


Se volete soltanto commutare un transistor on ed off, potete usare il circuito mostrato in
Figura 9-4. Quando il BASIC Stamp invia un segnale alto a questo circuito, il transistor
conduce tanta corrente quanta ne passerebbe se aveste regolato il potenziometro per la
massima brillanza del LED. Quando il BASIC Stamp invia un segnale basso a questo
circuito, il transistor smetterà di condurre corrente, e il LED non emetterà alcuna luce.

Qual’è la differenza tra quanto detto e la connessione di un circuito LED a un pin I/O?
I pin I/O del BASIC Stamp limitano quanta corrente devono rilasciare. I transistor hanno
anch’essi delle limitazioni, ma queste sono molto più alte .Nel manuale Process Control
Student Guide, un transistor viene utilizzato per pilotare un piccolo ventilatore a corrente
continua (DC). È utilizzato anche per fornire grandi quantitativi di corrente a una piccola
resistenza utilizzata come elemento riscaldatore. Ciascuna di queste due applicazioni
condurrebbe una tale quantità di corrente da danneggiare rapidamente il BASIC Stamp, ma
il transistor può sopportarla tranquillamente .

 Costruite il circuito mostrato in Figura 9-4.


 Scrivete un programma che invii segnali alto e basso a P8 due volte al secondo.
SUGGERIMENTO: il programma LedAccesoSpento.bs2 a pagina 45 deve
essere modificato solo per mandare segnali alto/basso a P8 invece che a P14.
Ricordatevi di memorizzarlo con un altro nome prima di fare le modifiche.
 Eseguite il programma e verificate che dà il controllo acceso/spento del LED.
Pagina 310 · Che cosa è un microcontrollore?

Vdd Vdd Vin Vss


X3 Figura 9-4
P15 Circuito che
P14
LED P13
da al BASIC
P12 Stamp il
P11 controllo di
P10
P9 corrente
P8 100 k P8 acceso/spento
P7
P6 di un LED
P5 tramite un
100 k P4
P3
transistor
P2
P1
P0
Vss X2

ATTIVITÀ #2: INTRODUZIONE DEL POTENZIOMETRO DIGITALE


In questa attività, rimpiazzerete il potenzionmetro a regolazione manuale con un
potenziometro a circuito integrato regolato in modo digitale. Programmerete poi il
BASIC Stamp per regolare il potenziometro digitale, che regolerà a sua volta la
luminosità del LED allo stesso modo in cui lo faceva il potenziometro manuale della
attività precedente.

Introduzione al potenziometro digitale


La Figura 9-5 mostra una mappa dei pin del potenziometro digitale che userete in questa
attività. Questo chip ha 8 pin, quattro su ciascun lato, spaziati in modo da facilitare il suo
inserimento in una breadboard (separazione tra i pin: 1/10 di pollice). Il costruttore ha
posto un incavo di riferimento sull’involucro plastico in modo che possiate distinguere tra
pin 1 e pin 5. L’incavo di riferimento è un piccolo semicerchio nell’involucro del chip.
Potete usare questo incavo come riferimento dei numeri di pin sul chip. I numeri di pin
sul chip si contano dall’alto, in senso antiorario a partire dall’incavo di riferimento.

Sostituzioni della parte: A volte è necessario per la Parallax sostituire una parte (o
componente). La parte (nuova) funzionerà allo stesso modo della vecchia, ma l’etichetta su
di essa può essere diversa. Se trovate che il potenziometro digitale incluso nel vostro Kit di
parti di “What’s a Microcontroller” non è etichettato AD5220, è assicurato che esso lavorerà
ancora allo stesso modo ed effettuerà correttamente questa attività.
Costruire prototipi delle proprie invenzioni · Pagina 311

Incavo (tacca)
di riferimento
Figura 9-5
Mappa dei pin del AD5220

1 CLK Vdd 8
Usate l’incavo di riferimento per
2 U/D CS 7 accertarvi che il chip AD5220 sia col
suo lato destro in alto quando lo
3 A1 B1 6
inserite nel vostro circuito sulla
4 GND W1 5 breadboard.
AD5220

Ecco un sommario di ciascuno dei pin dell‘AD5220 e delle sue funzioni:

1. CLK: pin che riceve gli impulsi di clock (segnali basso-alto-basso) per muovere
il terminale mobile (del potenziometro).
2. U/D: pin che riceve un segnale alto per far muovere il terminale mobile (W1) in
avanti verso A1, o un segnale basso per farlo muovere verso B1. Questo pin
imposta soltanto la direzione: il terminale mobile non si muove davvero fin
quando un impulso (un segnale basso – alto – basso) è inviato al pin CLK.
3. A1: terminale A del potenziometro.
4. GND: connessione di massa. La massa, sia sulla scheda Board of Education che
sula scheda BASIC Stamp HomeWork Board, è il terminale Vss.
5. W1: terminale mobile (W) del potenziometro.
6. B1: terminale B del potenziometro.
7. CS: pin di selezione del chip. Applicate un segnale alto a questo pin, e il chip
ignora tutti i segnali di controllo inviati ai pin CLK e U/D. Applicate un segnale
basso a questo pin, ed esso fa agire tutti i segnali di controllo che riceve.
8. Vdd: connettere questo pin a +5 V, che è Vdd sia sulle schede Board of
Education che sulle BASIC Stamp HomeWork Board.

Il foglio specifiche (Datasheet) di parte del AD5220: Per vedere il foglio specifiche di
parte per il chip AD5220: andate al sito www.analog.com. Inserite “AD5220” nel campo
Search della home page dei Dispositivi Analogici (Analog Devices), e cliccate sul pulsante
Search. Cliccate il link al Data Sheet. Cliccate il link che porta la scritta “AD5220:
Increment/Decrement Digital Potentiometer Datasheet”.

Parti del transistor controllato dal pot digitale


(1) Transistor – 2N3904
Pagina 312 · Che cosa è un microcontrollore?

(2) Resistenze – 100 kΩ (marrone-nero-giallo)


(1) LED – qualsiasi colore
(1) Potenziometro digitale – AD5220
(10) Cavallotti di filo

Costruzione del circuito con il potenziomentro digitale


La Figura 9-6 mostra lo schema di un circuito con il potenziometro digitale usato al posto
di un potenziometro a comando manuale, e la Figura 9-7 mostra il diagramma di
cablaggio del circuito. Il BASIC Stamp può controllare il potenziometro digitale
inviando segnali di controllo ai pin P5 e P6.

 Costruite il circuito mostrato in Figura 9-6 e Figura 9-7.


Vdd Vdd
Vdd
AD5220
CLK Vdd 8
P6 1 Figura 9-6
P5 2
U/D CS 7 Schema circuitale
A1 B1 6
del transistor
3
controllato dal
4
GND W1 5 100 k potenziometro
digitale
100 k

Vss Vss

Vdd Vin Vss


X3
P15
P14
P13
P12 Figura 9-7
P11 Diagramma di
P10
P9 cablaggio per la
P8 Figura 9-6
P7
P6
AD5220

P5
P4
P3
P2
P1
P0
X2
Costruire prototipi delle proprie invenzioni · Pagina 313

Programmazione del controllo tramite potenziometro digitale


Immaginate che la manopola sul potenziometro manuale dell’esercizio precedente abbia
128 posizioni. Immaginate inoltre che il potenziometro sia a metà del suo intervallo di
movimento. Ciò significa che potete ruotare la manopola di 63 passi in una direzione e di
64 passi nell’altra direzione.

Diciamo che ruotate il potenziometro di un passo in senso orario. Il LED diventerà


appena leggermente più brillante. Sarebbe la stessa cosa inviare un segnale alto al pin
U/D dell’AD5220 e inviare un impulso (alto-basso-alto) al pin CLK.
HIGH 5
PULSOUT 6, 1
Immaginate quindi di ruotare il vostro potenziometro manuale di 3 passi in senso
antiorario. Il LED diventerà appena appena meno brillante. Sarebbe lo stesso inviare un
segnale basso al pin U/D sul AD5220 e inviare tre impulsi al pin CLK.
LOW 5
FOR contatore = 1 TO 3
PULSOUT 6, 1
PAUSE 1
NEXT

Immaginate poi di ruotare il potenziometro completamente in senso orario. Sarebbe lo


stesso che inviare un segnale alto al pin U/D dell’AD5220 ed inviare 65 impulsi al pin
CLK. Ora il LED dovrebbe essere molto brillante.
HIGH 5
FOR contatore = 1 TO 65
PULSOUT 6, 1
PAUSE 1
NEXT

Infine, immaginate di ruotare il vostro potenziometro manuale completamente in senso


antiorario. Il LED non dovrebbe emettere alcuna luce. Sarebbe lo stesso che inviare un
segnale basso al pin U/D, ed applicare 128 impulsi al pin CLK
LOW 5
FOR contatore = 0 TO 127
PULSOUT 6, 1
PAUSE 1
NEXT
Pagina 314 · Che cosa è un microcontrollore?

Programma esempio: PotDigitaleSuGiu.bs2


Questo programma esempio regola il potenziometro su e giù, da una estremità del suo
intervallo all’altra, facendo sì che il LED diventi gradualmente più brillante, poi
gradualmente meno brillante.

 Digitate ed eseguite PotDigitaleSuGiu.bs2.

' Che cos'è un Microcontrollore - PotDigitaleSuGiu.bs2


' Fa variare il pot digitale pot nel suo intervallo di valori.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Programma in esecuzione!"

contatore VAR Byte

DO
LOW 5

FOR contatore = 0 TO 127


PULSOUT 6, 1
PAUSE 10
NEXT

HIGH 5

FOR contatore = 0 TO 127


PULSOUT 6, 1
PAUSE 10
NEXT
LOOP

Il vostro turno – Cambiare il ritmo di ripetizione e condensare il codice


Potete aumentare o diminuire il ritmo di ripetizione al quale il LED diventa più o meno
luminoso cambiando l’argomento Duration (Durata) del comando PAUSE.

 Modificate e rieseguite il programma usando PAUSE 20 e notate la differenza nel


ritmo di ripetizione al quale il LED diventa più o meno luminoso.
 Ripetere con PAUSE 5.

Per semplificare questo programma, potete anche utilizzare un comando detto TOGGLE . Il
comando TOGGLE cambia lo stato di un pin I/O del BASIC Stamp. Se il pin I/O stava
Costruire prototipi delle proprie invenzioni · Pagina 315

inviando un segnale alto, TOGGLE gli fa inviare un segnale basso. Se il pin I/O stava
inviando un segnale basso, TOGGLE gli fa inviare un segnale alto l.

 Memorizzate PotDigitaleSuGiu.bs2 come PotDigitaleSuGiuConToggle.bs2.


 Modificate il programma in modo che sia il programma riportato qui sotto.
 Eseguite il programma e verificate che funzioni allo stesso modo di
PotDigitaleSuGiu.bs2.
 Confroontate il numero di righe di codice che impiega per fare lo stesso lavoro.
Eseguire un programma fuori dalla memoria di programma è un problema che alcune
persone incontrano quando i loro progetti BASIC Stamp diventano più grossi e complicati.
Usare TOGGLE invece di due cicli FOR...NEXT è proprio un esempio, fra molte tecniche
impiegabili, di come fare lo stesso lavoro con metà del codice.

' Che cos'è un Microcontrollore - PotDigitaleSuGiuConToggle.bs2


' Commuta il pot digitale attraverso i suoi valori.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Programma in esecuzione!"

contatore VAR Byte


LOW 5

DO
FOR contatore = 0 TO 127
PULSOUT 6,5
PAUSE 10
NEXT
TOGGLE 5
LOOP

Guardando il potenziometro digitale al suo interno


La Figura 9-8 mostra un diagramma dell’interno del potenziometro AD5220. L’integrato
AD5220 ha 128 elementi resistivi (resistenze), ciascuno dei quali è di 78,125 Ω (valore
nominale). Questi 128 elementi danno, in complesso, un totale di 10.000 Ω o 10 kΩ.
Pagina 316 · Che cosa è un microcontrollore?

3
A1
Ad5220 78 
pos. 127
78 
1 CLK
2 U/D pos. 126
W1 78 
5 Figura 9-8
7 CS 40  pos. 125
Dentro l’AD5220
… …
78 
pos. 1
78 
pos. 0 B1
6

Un valore nominale significa un valore scritto sul componente. Le parti come


resistenze e condensatori hanno, di solito, un valore nominale e una tolleranza. Ciascuno
degli elementi resistivi dell‘AD5220 ha un valore nominale di 78,125 , con una tolleranza
del 30% (23,438 ) sopra o sotto il valore nominale.

Tra ogni paio di questi elementi resistivi c’è un interruttore, chiamato presa. Ciascun
interruttore è in realtà un transistor commutato on oppure off per lasciare o non lasciar
passare corrente. Uno solo di questi interruttori per volta può essere chiuso. Se si chiude
uno degli interruttori superiori (come le pos. 125, 126, o 127), è come avere la manopola
del potenziometro manuale girata quasi tutta o completamente in senso orario. Se
vengono chiuse la pos. 0 o la 1, è come avere il potenziometro manuale ruotato quasi
tutto o completamente in senso antiorario.

Immaginate che sia chiusa la Pos. 126. Se volete porre la presa a 125, (aprire la pos. 126
e chiudere la pos. 125), impostate U/D basso, poi inviate un impulso a CLK. Se volete
porre la presa alla Pos 127, impostate U/D alto e fornite 2 impulsi. Se volete portare la
presa in basso a 1, impostate U/D basso e inviate 126 impulsi.

Il programma esempio che segue usa il terminale di Debug per chiedere quale
impostazione di presa volete. Poi decide se impostare il pin U/D alto o basso, e applica il
numero di impulsi corretto per portare la presa dalla sua vecchia impostazione alla nuova.

Ad eccezione dei dati EEPROM, il programma esempio che segue ha anche tutte le
sezioni che vi aspettereste di trovare normalmente in un programma applicativo:
Costruire prototipi delle proprie invenzioni · Pagina 317

 Titolo – commenti che includono il nome del programma, la sua descrizione, e le


direttive Stamp e PBASIC
 Dati EEPROM – dichiarazioni DATA che memorizzano elenchi di valori
predefiniti in porzioni della memoria EEPROM non necessarie alla
memorizzazione del programma
 Definizioni I/O – direttive PIN che nominano pin I/O
 Costanti – dichiarazioni CON che nominano valori presenti nel programma
 Variabili – dichiarazioni VAR che assegnano nomi alle porzioni di memoria RAM
del BASIC Stamp per memorizzare valori
 Inizializzazione – routine che fa partire il programma col piede giusto. In questo
programma, la presa del potenziometro dev’essere portata giù fino a zero
 Main – routine che gestisce il lavoro principale che il programma deve fare
 Subroutine – segmenti di codice che fanno lavori specifici, sia tra loro che, in
questo caso, per la routine main (principale)

Programma esempio: PotDigitaleControllatoDaTerminale.bs2


Potete usare questo programma esempio e il terminale di Debug per impostare la presa
del potenziometro digitale. Cambiando l’impostazione della presa del potenziometro
digitale, cambiate la luminosità del LED connesso al transistor controllato dal
potenziometro digitale. La Figura 9-9 mostra un esempio in cui si digita il valore 120
nella finestrella di trasmissione del terminale di Debug mentre il programma è in
esecuzione. Poiché l’impostazione originaria della presa era 65, il LED diventa quasi due
volte più luminoso quando la presa viene regolata a 120.

Figura 9-9
Finestrelle di Invio di messaggi
al BASIC Stamp
Trasmissione →
Cliccate la
L’impostazione della presa è: 65 finestrella di
trasmissione
Digitate la nuova impostazione (superiore) e
Ricezione → (da 0 a 127): 120 digitate il numero
della nuova
impostazione di
presa.
Pagina 318 · Che cosa è un microcontrollore?

 Digitate ed eseguite PotDigtialeControllatoDaTerminale.bs2.


 Assicuratevi che la casella Echo Off sia vuota (nessun segno di spunta).
 Cliccate sulla finestrella di trasmissione del terminale di Debug per posizionare
il cursore su di essa.
 Digitate nel terminale di Debug valori tra 0 e 127. Accertatevi di premere il
tasto Invio (enter) dopo aver digitato le cifre.

' -----[ Titolo ]----------------------------------------------------------


' Che cos'è un Microcontrollore – PotDigitaleControllatoDaTerminale.bs2
' Aggiorna il valore di presa del pot digitale in base a input di utente sul
' terminale di Debug.

' {$STAMP BS2}


' {$PBASIC 2.5}

' -----[ Dati in EEPROM ]--------------------------------------------------

' -----[ Definizioni I/O ]-------------------------------------------------

PinUd PIN 5 ' Imposta valori dei pin I/O


PinClk PIN 6 ' connessi a CLK e U/D.

' -----[ Constants ]-------------------------------------------------------

RitardoImpulsi CON 10 ' Ritardo per osservare il calo


RitardoLettore CON 2000 ' di luce del LED

' -----[ Variabili ]-------------------------------------------------------

contatore VAR Byte ' Contatore per FOR...NEXT.


ImpostazVecchiaPresa VAR Byte ' Precedente impostazione presa.
ImpostazNuovaPresa VAR Byte ' Nuova impostazione presa.

' -----[ Inizializzazione ]------------------------------------------------

ImpostazVecchiaPresa = 0 ' Inizializza a zero la vecchia


ImpostazNuovaPresa = 0 ' e la nuova impostazione presa.

LOW PinUd ' Imposta pin U/D per basso.


FOR contatore = 0 TO 127 ' Imposta presa a posizione minima.
PULSOUT 6,5
PAUSE 1
NEXT
PAUSE 1000 ' Aspetta 1 s prima del primo messaggio

' -----[ Routine Main]----------------------------------------------------


Costruire prototipi delle proprie invenzioni · Pagina 319

DO

GOSUB Imposta_Nuova_Presa ' Visualizza utente e ottiene input.


GOSUB Imposta_Pin_Ud ' Imposta pin U/D per alto/basso.
GOSUB Impulsi_pin_Clk ' Rilascia impulsi.

LOOP

' -----[ Subroutine ]------------------------------------------------------

Imposta_Nuova_Presa: ' Visualizza istruzioni e ottiene


' input da utente per nuovo valore
DEBUG CLS, "La impostazione della presa è: ", ' impostazione presa.
DEC ImpostazNuovaPresa, CR, CR
DEBUG "Digitate la nuova ", CR, "impostazione (da 0 a 127): "
DEBUGIN DEC ImpostazNuovaPresa

RETURN

Imposta_Pin_Ud: ' Esamina nuovo e vecchio valore presa


' per decidere valore del pin U/D.
IF ImpostazNuovaPresa > ImpostazVecchiaPresa THEN
' Notifica ad utente se i valori sono
HIGH PinUd ' uquali.
ImpostazVecchiaPresa = ImpostazVecchiaPresa + 1
' Incrementa Impulsi_pin_Clk.
ELSEIF ImpostazNuovaPresa < ImpostazVecchiaPresa THEN
LOW PinUd
ImpostazVecchiaPresa = ImpostazVecchiaPresa - 1
' Decrementa Impulsi_pin_Clk.

ELSE
DEBUG CR, "La nuova e la vecchia impostazione", CR,
"sono uguali, prova ", CR,
"di nuovo...", CR
PAUSE RitardoLettore ' Da al lettore il tempo
ENDIF ' per vedere il messaggio.

RETURN

Impulsi_pin_Clk:

' Rilascia impulse da vecchio a nuovo valore. Rammentate che Imposta_Pin_Ud


' ha regolato il valore di ImpostazVecchiaPresa al valore ImpostazNuovaPresa
' più 1. Questo evita che il ciclo FOR...NEXT sia eseguito una volta di
' troppo.

FOR contatore = ImpostazVecchiaPresa TO ImpostazNuovaPresa


PULSOUT PinClk, 1
PAUSE RitardoImpulsi
NEXT
Pagina 320 · Che cosa è un microcontrollore?

ImpostazVecchiaPresa = ImpostazNuovaPresa ' Tiene traccia dei valori


' di impostazione presa vecchi e nuovo.
RETURN

SOMMARIO
Questo capitolo ha introdotto i circuiti integrati e il modo in cui si possono usare col
BASIC Stamp. È stato usato un transistor come valvola regolatrice di corrente, ed un
potenziometro digitale per controllare la quantità di corrente che attraversa il transistor.
Si sono esaminati la tacca di riferimento e la mappa dei pin del potenziometro digitale
introdotto, come elementi importanti dei chip elettronici. È stata discussa la funzione di
ciascun pin del potenziometro digitale, e analogamente la struttura interna del dispositivo.
È stato introdotto anche il comando PBASIC TOGGLE come mezzo per risparmiare
memoria di programma.

Domande
1. Quali sono i nomi dei terminali del transistor che avete usato in questo capitolo?
2. Quale terminale controlla la corrente che passa nel transistor?
3. Che cosa potete fare per aumentare o diminuire la corrente che passa nel
transistor?

Esercizio
1. Scrivete un programma che regoli la presa del potenziometro digitale alla
posizione 0 indipendentemente dalla sua impostazione di corrente.

Progetto - Sfida avanzata


1. Aggiungete un fototransistor al vostro progetto e fate in modo che la luminosità
del LED regoli la luminosità vista dal fototransistor. Notate che la soluzione data
è degna di essere letta, poichè mostra un approccio utile a riportare in scala un
input ad un altro output.
Costruire prototipi delle proprie invenzioni · Pagina 321

Soluzioni
D1. Emettitore, base, e collettore.
D2. La base controlla la corrente che passa attraverso il transistor.
D3. Aumentate o diminuite la corrente consentita nella base del transistor.
E1. Per risolvere questo esercizio, guardate PotDigitaleControllatoDaTerminale.bs2.
La prima cosa che fa, nella sezione Inizializzazione, è di impostare la presa alla
posizione più bassa. Proprio il suo codice è stato usato nella soluzione qui sotto.

' Che cos'è un Microcontrollore - Cap9Es01_ImpostaPresaAZero.bs2


' Ruota la presa sul pot digitale completamente in giù a zero
' {$STAMP BS2}
' {$PBASIC 2.5}
DEBUG "Programms in esecuzione!"

PinUd PIN 5 ' Imposta valori dei pin I/O


PinClk PIN 6 ' connessi a CLK e U/D.
contatore VAR Byte ' Contatore per FOR...NEXT.

LOW PinUd ' Pone pin U/D for a Basso.


FOR contatore = 0 TO 128 ' Imposta presa alla sua
PULSOUT PinClk,5 ' posizione più bassa.
PAUSE 1
NEXT

P1. Usate il circuito del potenziometro digitale dalla Figura 9-6 a pagina 312 e il
circuito del fototransistor dalla Figura 7-4 a pagina 214.

Questa soluzione si basa su PotDigitaleControllatoDaTerminale.bs2, e incorpora


elementi da FototransistorAnalogicoABinario.bs2 dal Capitolo 7, Attività #5. È
anche applicata un pò di algebra per risolvere un problema di scalatura che adatta
l’intervallo di valori ottenibili dalla misura di RCTIME del fototransistor, a un
intervallo da 0 a 128 per il potenziometro digitale . Tenete a mente che questa è
una soluzione esempio e non è affatto l’unica soluzione o approccio al problema.

La chiamata di subroutine GOSUB Imposta_Nuova_Presa del programma


PotDigitaleControllatoDaTerminale.bs2 è sostituita da altre due chiamate di
subroutine: GOSUB Leggi_Fototransistor e GOSUB Scala_Fototransistor.
Analogamente, la subroutine Imposta_Nuova_Presa è sostituita dalle
subroutine Leggi_Fototransistor e Scala_Fototransistor.
Leggi_Fototransistor è una versione subroutine dei comandi che prendono
la misura di RCTIME del fototransistor e limitano l’intervallo dei suoi valori di
Pagina 322 · Che cosa è un microcontrollore?

ingresso in FototransistorAnalogicoABinario.bs2. I nomi dei pin, delle costanti


e delle variabili sono stati modificati e, per una visualizzazione di 10-volte-per-
secondo, il commando PAUSE 100 è stato modificato in PAUSE 1, che è tutto
quanto occorre per caricare il condensatore prima di prendere la misura RCTIME.
Appena questa subroutine avrà memorizzato un valore nella variabile
LetturaLuce, questo sarà compreso tra ValMin (100) e ValMax (4000).
Accertatevi di provare e modificare questi valori per adattarli alle vostre
condizioni di illuminazione.

Il problema che abbiamo adesso è che ci sono soltanto 128 impostazioni di presa,
e 3900 misure possibili per il RCTIME del fototransistor. Per correggere questa
differenza ci occorre dividere la misura RCTIME del fototransistor per un qualche
valore, in modo da adattarla all’intervallo tra 0 e 127. Quindi, sappiano che
occorre dividere l’intervallo dei valori di input per un qualche valore in modo da
farlo cadere nei 128 valori. Si produce un’equazione come questa :

Intervallo Possibii Misure Fototransistor


────────────────────────── = 128 PosizioniPresaPossibili
DivisoreScala

Per risolvere questa equazione, moltiplicate entrambi i lati dell’equazione per


DivisoreScala, e poi dividete entrambi i membri per 128 PosizioniPresaPossibili.

Nel codice, l’intervallo di misure possibili per il fototransistor è ValMax –


ValMin, DivisoreScala è una variabile, e 128 è una costante. Quindi, questo
codice dalla sezione Dichiarazioni e Inizializzazione potrà prevedere un valore di
DivisoreScala del tipo:
DivisoreScala = (valMax – valMin) / 128

Dopo ciascuna misura RCTIME del fototransistor, la subroutine


Scala_Fototransistor sottrae valMin da LetturaLuce e poi divide la misura
per DivisoreScala. Il risultato accorda l’intervallo di misure di input da 100 a
4000 all’intervallo delle impostazioni della presa di uscita da 0 a 127.
Scala_Fototransistor:
Costruire prototipi delle proprie invenzioni · Pagina 323

LetturaLuce = (LetturaLuce – valMin) / DivisoreScala


RETURN

Assumendo che ValMin sia 100 e ValMax sia 4000, la variabile LetturaLuce
potrebbe memorizzare 3900 valori possibili. Cosa accadrebbe se l’intervallo di
input fosse da ValMin = 10.000 a ValMax = 13.900? Quando sottraete
ValMin = 10.000, ci sono ancora 3900 valori possibili, e dividendoli per
DivisoreScala la misura si adatterebbe in modo corretto alla corrispondente
impostazione di presa del pot digitale Se il vostro codice non avesse come
prima cosa sottratto ValMin, il valore scalato risultante sarebbe completamente
fuori dell’intervallo da 0 a 128 per il pot digitale.

' Che cos'è un Microcontrollore -


' Cap09Pr01_PotDigitaleFotoControllato.bs2
' Aggiorna la presa di un pot digitale in base a lettura di un
' fototransistor
' {$STAMP BS2}
' {$PBASIC 2.5}

' -----[ Dichiarazioni e Inizializzazione]-----------------------------


PinUd PIN 5 ' Imposta valori dei pin I/O
PinClk PIN 6 ' connessi a CLK e U/D.
PinFoto PIN 2 ' Fototransistor su pin P2
RitardoImpulsi CON 10 ' Ritardo per oaservare il
RitardoLettore CON 2000 ' calo di luce del LED
valMax CON 4000 ' Max val del fototransistor
valMin CON 100 ' Min val del fototransistor

contatore VAR Byte ' Contatore per ciclo FOR...NEXT.


ImpostazVecchiaPresa VAR Byte ' Precedente impostazione presa.
ImpostazNuovaPresa VAR Byte ' Nuova impostazione presa.
LetturaLuce VAR Word ' lettura dal fototransistor
DivisoreScala VAR Word ' Per scalare valori

' Imposta un valore che può dividere misura RCTIME del fototransistor
' per scalarla ad un intervallo tra 0 e 128

DivisoreScala = (valMax - valMin) / 128

ImpostazVecchiaPresa = 0 ' Inizializza a zero i valori vecchio


ImpostazNuovaPresa = 0 ' e nuovo di impostazione presa.

LOW PinUd ' Imposta pin U/D a basso.


FOR contatore = 0 TO 127 ' Imposta presa alla posizione minima.
PULSOUT PinClk,5
PAUSE 1
NEXT
Pagina 324 · Che cosa è un microcontrollore?

PAUSE 1000 ' 1 sec. prima del 1° messaggio

' -----[ Routine Main]------------------------------------------------


DO
GOSUB Leggi_Fototransistor
GOSUB Scala_Fototransistor
ImpostazNuova Presa = LetturaLuce MIN 1 MAX 127
DEBUG HOME, DEC5 LetturaLuce
GOSUB Imposta_Pin_Ud ' Imposta pin U/D pin per alto/basso.
GOSUB Impulso_pin_Clk ' Eilascia impulsi.
LOOP

' -----[ Subroutine ]-------------------------------------------------


Imposta_Pin_Ud: ' Esamina valori di presa
IF ImpostazNuovaPresa > ImpostazVecchiaPresa THEN
' nuovo e vecchio per decidere
HIGH PinUd
ELSEIF ImpostazNuovaPresa < ImpostazVecchiaPresa THEN
' il valore di PinUd. Notifica
LOW PinUd ' a utente se i valori sono
ENDIF ' uguali.
RETURN

Impulso_pin_Clk: ' Rilascia impulsi da valori


FOR contatore = ImpostazVecchiaPresa TO ImpostazNuovaPresa
' vecchio o nuovo.
PULSOUT PinClk, 1
PAUSE RitardoImpulsi
NEXT
ImpostazVecchiaPresa = ImpostazNuovaPresa ' Tiene traccia dei valori
RETURN ' nuovo e vecchio di impostaz. presa.

Leggi_Fototransistor:
HIGH PinFoto
PAUSE 1
RCTIME PinFoto, 1, LetturaLuce
LetturaLuce = LetturaLuce MAX valMax MIN valMin
RETURN

Scala_Fototransistor:
LetturaLuce = (LetturaLuce - valMin) / DivisoreScala
RETURN
Costruire prototipi delle proprie invenzioni · Pagina 325

Capitolo 10: Costruire prototipi delle proprie


Invenzioni
Questo testo ha introdotto i principi base per integrare un computer in progetti ed
invenzioni. Ingredienti di un comune circuito in prodotti di uso quotidiano, con i quali
ora avete un po’ di esperienza, includono: luci indicatrici, pulsanti, servo, quadranti a
disco, visualizzatori digitali, sensori di luce, altoparlanti, transistor, e altri circuiti
integrati. Adesso avete anche fatto l’esperienza di connettere questi circuiti ad un
microcontrollore BASIC Stamp e potete scrivere codice sia per provarli, sia per integrarli
in piccole applicazioni.

A questo punto, sarete interessati a impiegare le vostre nuove capacità per inventare
qualcosa, o per imparare di più, o forse per entrambe le cose. Quel che avete imparato in
questo libro può portarvi ben avanti sulla strada del fabbricare prototipi di un gran
numero di invenzioni diverse. In questo capitolo, userete un sistema di micro allarme
come esempio di prototipo di un dispositivo molto familiare. Lungo la strada,
adopererete alcune importanti tecniche e abitudini di prototipizzazione, che includono:

 Suggerimenti per un rapido sviluppo delle vostre idee di progetto e invenzioni


 Un esempio di come costruire e provare ciascun sotto-sistema del prototipo
 Esempi di come incorporare codice di prova nel codice del vostro progetto
 Buone pratiche per commentare il codice e le varie versioni di file
 Esempi di uso di parti familiari, come sostituti di dispositivi con interfacce simili
 Suggerimenti e trucchi per superare progetti precedenti
 Dove reperire in seguito più progetti Stamps in Class e dispositivi interessanti

APPLICARE LE PROPRIE CONOSCENZE AD ALTRE PARTI E


COMPONENTI
Il circuito di un pulsante dall’attività 1 del capitolo 3 è un esempio di semplicissimo
dispositivo di input che converte una condizione fisica (se qualcuno ha premuto un
pulsante o no) in un segnale alto o basso rilevabile ed elaborabile dal BASIC Stamp.
Avete usato i pulsanti anche in applicazioni che controllavano il lampeggiare di una luce,
le posizioni di un servo e i toni di un altoparlante. Ci sono molti sensori che rilevano una
condizione fisica diversa dal “contatto” e che inviano inoltre segnali alti e bassi
monitorabili da un pin I/O del BASIC Stamp. Alcuni esempi comprendono sensori di
gas, di moto, e suoni, e ne esistono molti, molti altri ancora. Poiché adesso avete
esperienza del far controllare al BASIC Stamp il circuito di un pulsante, controllare un
Pagina 326 · Che cosa è un microcontrollore?

suono o un sensore di movimento è cosa molto simile, e certamente un passo successivo


ragionevole .

Un’altra tecnica presente in questo manuale è la misura del decadimento RC con il


comando RCTIME, per rilevare la posizione della manopola di un potenziometro e i livelli
di luce con un fototransistor ed un LED assieme. Questi esempi sono proprio la punta di
un iceberg in termini di sensori usabili in un circuito di decadimento RC. Altri esempi
comprendono umidità, temperatura, e pressione, e questo è ancora soltanto il principio.
La luce di un indicatore LED fornisce ancora un altro esempio di circuito rappresentativo
di una gamma di circuiti con funzioni molto diverse. Il circuito a LED è controllato
dall’uscita alta/bassa di un pin I/O del BASIC Stamp. Con circuiti aggiuntivi di supporto,
potete usare segnali alto/basso per muovere motori elettrici in avanti e indietro,
accendere/spegnere luci, accendere/spegnere elementi riscaldatori, ed altro.

Ora, pensate a tutti gli altri dispositivi che avete sperimentato in questo manuale.
Ciascuno di essi è solo un esempio in un elenco di dispositivi con interfacce simili usabili
per realizzare prototipi di ogni tipo di invenzioni.

REALIZZARE IL PROTOTIPO DI UN MICROSISTEMA ANTIFURTO


In questo capitolo, useremo parti del kit “What’s a Microcontroller” (“Che cos’è un
microcontrollore”) per realizzare il prototipo di un piccolissimo sistema antifurto che
potreste utilizzare in un tavolo, un cassettone, una cassetta degli attrezzi, o in uno
stanzino. Potrebbe essere utile a coloro, fratellastri o colleghi, sospettati di prendere a
prestito il vostro materiale senza chiedere il permesso. Con questo prototipo,
investigheremo anche su altre parti e componenti che potrete incorporare nel vostro
sistema antifurto, per farlo funzionare con gli stessi principi delle parti di kit che vi sono
familiari, ma che potrebbero dare al vostro kit molta efficienza in più. Partendo da qui,
vedremo il modo di trovare, comprendere, provare ed incorporare altre parti con le quali
potreste non avete mai lavorato prima.

ATTIVITÀ #1: DALL‘IDEA ALLA PROVA DEL CONCETTO


Molti prodotti partono come idea, in alcuni casi un‘invenzione che potrebbe essere
“veramente brillante,” e in altri casi è proprio quello che ci vuole per risolvere un
problema. Questa idea può essere sviluppata in un concetto con disegni e specifiche, e un
po’ di lavoro di progetto preliminare. Il passaggio successivo è tipicamente lo sviluppo
di un prototipo funzionante. Potrebbe non essere bello, ma dovrà mostrare in modo
affidabile la fattibilità di un dispositivo che operi secondo il concetto e le specifiche
previste. In società che sviluppano prodotti, questa prova di concetto è tipicamente
Costruire prototipi delle proprie invenzioni · Pagina 327

richiesta per ottenere l’approvazione della direzione aziendale e il finanziamento per


continuare a sviluppare il prodotto.

Idea, concetto, e descrizione funzionale


Diciamo che si debba realizzare un armadietto con uno sportello incernierato e un
cassetto, e vi occorra un piccolissimo sistema antifurto. Oppure, forse volete progettare
un armadietto speciale con antifurto incorporato. La Figura 10-1 mostra uno schizzo del
modo in cui si può utilizzare un potenziometro e un contatto elettrico simile ad un
pulsante per rilevare se viene aperto sia lo sportello, sia il cassetto. Lo schizzo è simile
ad un diagramma concettuale, che focalizza l’attenzione soltanto sul comunicare che cosa
fa il prodotto o l’invenzione.

LED Piezoaltoparlan
te

Figura 10-1
Potenziometro - Schizzo
-----
concettuale di
Pulsante ------ un
---------- microsistema
antifurto per un
armadietto

La descrizione funzionale è importante . Quando avete un’idea migliore di ciò che si


suppone inizialmente che il vostro dispositivo debba fare, evitate che possano verificarsi
problemi se dovete riprogettare il dispositivo per incorporarvi qualcosa cui non avevate
pensato. I progettisti e le società che creano comuni dispositivi per utenti debbono stare
Pagina 328 · Che cosa è un microcontrollore?

molto attenti ad interpellare la propria clientela per comprenderne le aspettative. Specie


per dispositivi di progettazione ordinaria, la loro riprogettazione può essere altamente
costosa e lunga.

Ecco un esempio di una breve descrizione funzionale usabile per il nostro semplice
dispositivo: Sviluppare un prototipo di circuito e del suo programma per un micro
sistema di allarme che possa sorvegliare uno sportello incernierato e un cassetto. Se
inserito, dovrà suonare un allarme se vengono aperti lo sportello e/o il cassetto. Un LED
di stato dovrà dare luce verde quando l’allarme non è inserito, e luce rossa quando è
inserito. Un prototipo dovrà essere inserito e disinserito su controllo di un computer. Si
dovrà incorporare un ritardo di tempo per consentire all’utente la chiusura dell’armadietto
dopo che il dispositivo è stato inserito.

Specifica
Oltre alla descrizione funzionale, una specifica tiene tipicamente in considerazione quanti
più aspetti è possibile del dispositivo proposto, inclusi: costo, consumo di corrente,
alimentazione (di tensione), dimensioni, peso, volume dell’altoparlante, e molti altri
dettagli.

Progetto iniziale
Spesso, il progetto iniziale comporta il confronto delle proprie idee con approcci che
”potrebbero“ risolvere il problema, e molte di queste idée debbono essere verificate per
scoprire se sono realizzabili nella realtà. Altre parti del progetto potrebbero comportare
parti e pratiche di progetto completamente standard o del tutto comuni. Il nostro micro
allarme cade in questa categoria, almeno per quanto concerne il prototipo. Si potrebbe
montare un pulsante nell’armadietto, in modo che quando si chiude il cassetto, questo
preme il pulsante. Per lo sportello incernierato, si potrebbe attaccare un potenziometro
che giri con lo sportello e possa sentire la posizione dello sportello. Il LED bicolore è un
indicatore familiare, e il piezo-altoparlante è certamente un noto rivelatore di allarme.

Quindi, ora sappiamo quali circuiti occorrono per il nostro micro prototipo di allarme per
l’armadietto: LED bicolore, pulsante, potenziometro e piezoaltoparlante. Ecco un elenco
dei capitoli e attività dove è stato presentato ciascuno di questi circuiti:

 LED Bicolore: Cap. 2, Attività 5


 Pulsante: 3, 1
 Potenziometro: 5, 4
 Piezoaltoparlante: 8, 1
Costruire prototipi delle proprie invenzioni · Pagina 329

Elenco delle parti per l’allarme di un armadietto:


Tornando indietro a ciascuno dei capitoli appena elencati e mettendo assieme tutte le
parti si ottiene il seguente elenco di parti:

(3) Resistenze – 220 Ω (rosso-rosso-marrone) (1) Piezo-altoparlante


(1) Resistenza – 10 kΩ (marrone-nero-arancio) (1) Condensatore – 0.01 µF
(1) LED – bicolore (1) Potenziometro – 10 kΩ
(1) Pulsante – normalmante aperto (4) Cavallotti di filo

Schema allarme dell’armadietto


Lo schema in Figura 10-2 è organizzato per dare a tutti i componenti abbondanza di
spazio sulla breadboard, pertanto non tutte le connessioni dei pin I/O sono le stesse di
quelle che erano nei capitoli precedenti. Dovrete tenere a mente questo fatto quando
raccogliete esempi di codice dai capitoli precedenti per provare ciascun circuito.
Pagina 330 · Che cosa è un microcontrollore?

Figura 10-2: Schema del prototipo del sistema di allarme

LED
bicolore

ATTIVITÀ #2: COSTRUZIONE E PROVA SINGOLA DI CIASCUN


CIRCUITO
Ogni volta che potete, provate singolarmente ciascun sottosistema prima di tentare di farli
lavorare assieme. Se seguite questa regola, i vostri progetti procederanno senza ulteriori
intoppi, e ciò risparmierà una gran quantità di tempo per la prova e messa a punto. Per
esempio, se si costruiscono tutti i circuiti ma non si provano, le persone hanno una
tendenza naturale a passare troppo tempo ad esaminare il codice (dei programmi) e si
Costruire prototipi delle proprie invenzioni · Pagina 331

dimenticano di controllare ciascun circuito. Quindi, il risparmio di tempo più importante


in questa procedura è accertarsi che non ci siano errori nei circuiti tentando di ingannare
se stessi nel pensare che ci siano invece errori di codifica.

Costruzione e prova di ciascun circuito


Questa attività mostra come ci si focalizza sui singoli sottosistemi costruendo e provando
ciascun circuito. Una volta costruito e provato il circuito del pulsante, costruiremo e
proveremo il circuito dell’altoparlante. Dopo aver ripetuto questa procedura con il
potenziometro e il LED bicolore, i circuiti saranno tutti “dati per buoni” e pronti per
ricevere i codici di alcune applicazioni.

 Trovate il codice di prova nel capitolo 3, attività #1 che potete adattare alla prova
del circuito con pulsante della Figura 10-2.
 Modificate i riferimenti ai pin I/O in modo che operino col circuito in Figura
10-2.
 Provate il codice e correggete qualsiasi malfunzionamento o errore di cablaggio
prima di continuare.
 Ripetete questo stesso procedimento per:
o Circuito del piezoaltoparlante dal capitolo 8, attività #1
o Circuito del potenziometro dal capitolo 5, attività #4
o Circuito del LED bicolore dal capitolo 2, attività #5
 Accertatevi di salvare ciascun programma modificato sotto nuovo nome,
preferibilmente in una cartella separata, denominata per esempio “ Capitolo 10
CEUM.”

Il vostro turno – Prova del sistema


Ora che tutti i circuiti sono stati provati e tutti i programmi di prova salvati nel vostro PC,
è tempo di costruire un test del sistema con visualizzazione di messaggi di prova (debug)
che dicano quale circuito si sta provando mentre il codice di prova è in esecuzione.
Questo è un esercizio utile, dato che i sistemi di allarme in commercio hanno modalità di
funzionamento in auto-test e diagnostica che utilizzano tutte le loro caratteristiche in una
sola routine.

 Combinate gli elementi del programma di prova in un singolo programma che:


o Parta visualizzando il colore del LED bicolore nel terminale di Debug
mentre aggiorna il colore...
o Quindi visualizzi un messaggio che dica che sta funzionando
l’altoparlante piezo mentre questo emette suoni...
Pagina 332 · Che cosa è un microcontrollore?

oFinalmente entri in un ciclo che riporta ripetutamente lo stato del


sensore del pulsante azionato dal cassetto e quello del sensore del
potenziometro dello sportello incernierato nel terminale di Debug.
 Effettuate la prova e correggete tutti i malfunzionamenti prima di continuare.

ATTIVITÀ #3: ORGANIZZAZIONE DI COMPITI DI CODIFICA IN PICCOLE


PARTI
Allo stesso modo in cui ciascun circuito dev’essere costruito e provato prima di farli
lavorare tutti assieme, ciascuna delle caratteristiche del codice dovrà anch’essa essere
sviluppata e provata da sola prima di incorporarla in una applicazione più grande.
ProtoMicroAllarme(Sv-009).bs2 è un esempio di programma che, nel suo modo di
funzionare, realizza una prova di concetto. La sua interfaccia utente col terminale di
Debug è principalmente il centro dell’applicazione, e il sistema di allarme cicla
correttamente attraverso i suoi vari modi o stati di funzionamento, incluse le condizioni di
allarme non inserito, inserimento, allarme inserito, e azione delì’allarme.

A questo punto, la subroutine Inserisce_allarme alla fine del programma è ancora in


costruzione. Ha già in posizione il codice che fa agire l’allarme se il pulsante è rilasciato,
cosa che indica che il cassetto è stato aperto, ma non sorveglia ancora lo sportello
incernierato. Il codice di controllo del potenziometro va aggiunto alla subroutine
Controlla_Sensori che misura la sua posizione . Se la sua posizione è oltre una certa
soglia, ad esempio 15, la variabile stato dovrà essere modificata a Attivato.
Rimangono due compiti aggiuntivi: l’accensione del LED bicolore a verde quando
l’allarme non è inserito, e a rosso quando l’allarme è inserito. Questi compiti rimanenti
sono indicati dai commenti nelle righe di codice, del tipo:
' Da_fare: LED bicolore verde
...
' Da_fare: LED bicolore rosso
...
' Da_fare: Controllare se potenziometro è oltre valore
' di soglia. Se si, allora, attivare allarme

 Digitate a mano ProtoMicroAllarme(Sv-009).bs2 nell’Editor del BASIC Stamp


(raccomandato), o scaricatelo da www.parallax.com/go/WAM ed apritelo con
l’Editor del BASIC Stamp.
 Esaminate il programma e notate come ciascuna subroutine sia modulare, e
faccia un determinato lavoro. Questo fatto fa parte dell’organizzare i compiti di
codifica in piccole porzioni.
Costruire prototipi delle proprie invenzioni · Pagina 333

 Se non ricordate come usare le finestrelle di trasmissione e ricezione del


terminale di Debug, rivedetevi la Figura 9-9 a pagina 317.
 Caricate ProtoMicroAllarme(Sv-009).bs2 nel BASIC Stamp e nella finestrella di
trasmissione del terminale di Debug digitate il carattere A per inserire l’allarme,
e il carattere D per disinserire l’allarme. Il sistema compie un breve conto alla
rovescia prima di inserire l’allarme. Accertatevi di premere e tenere premuto il
pulsante prima che l’allarme sia stato inserito.
 Mentre l’allarme è inserito, rilasciate il pulsante. Avrete la possibilità di
disinserire l’allarme dopo pochi secondi dal suono dell’allarme stesso.
 Inserite nuovamente l’allarme. Questa volta, digitate “D” per disinserire
l’allarme prima di rilasciare il pulsante.

' -----[ Titolo ]------------------------------------------------------------


'Che cos'è un Microcontrollore - ProtoMicroAllarme(Sv-009).bs2
'Prova il sistema di allarme di un armadietto.

' {$STAMP BS2} ' Target = BASIC Stamp 2


' {$PBASIC 2.5} ' Linguaggio = PBASIC 2.5

' -----[ Costanti ]----------------------------------------------------------


NonInserito CON 0 ' Stati sistema allarme
Inserimento CON 1
Inserito CON 3
Attivato CON 4

' -----[ Variabili ]---------------------------------------------------------


secondi VAR Word ' Memorizza conto secondi
contatore VAR Byte ' Per contare
car VAR Byte ' Memorizza caratteri
stato VAR Nib ' Memorizza stato sistema allarme
' -----[ Inizializzazione ]--------------------------------------------------
PAUSE 1000 ' Aspetta 1 secondo
DEBUG "Programma in esecuzione..." ' Visualizza messaggio esecuzione
stato = NonInserito ' Inizializza stato allarme
' -----[ Routine Main]-------------------------------------------------------
DO ' Ciclo principale (Main)
SELECT stato ' Valuta stato caso per caso
CASE NonInserito ' Se stato = non inserito
' Da_fare: LED bicolore verde
GOSUB Chiede_di_Inserire ' chiama Chiede_di_Inserire
CASE Inserimento ' Se stato = Inserimento
GOSUB Inserisce_Allarme ' chiama Inserisce_Allarme
CASE Inserito ' Se stato = Inserito
' Da_fare: LED bicolore rosso
GOSUB Controlla_Sensori ' Chiama Controlla_Sensori
GOSUB Chiede_di_Disinserire ' Chiama Chiede_di_Disinserire
CASE Attivato ' Se stato = Attivato
GOSUB Allarme_Attivato ' Chiama Allarme_Attivato
Pagina 334 · Che cosa è un microcontrollore?

ENDSELECT ' Fatta valutazione car


LOOP ' Ripete ciclo main

' =====[ Subroutine ]======================================================

' -----[ Subroutine – Chiede_di_Inserire ]------------------------------------


Chiede_di_Inserire:
DEBUG CLS, "Digita A per inserire", CR, ">" ' Visualizza messaggio
GOSUB Ottieni_Input_Utente ' Chiama Ottieni_Input_Utenete
RETURN ' Ritorno da Chiede_di_Inserire
' -----[ Subroutine – Chiede_di_Disinserire ]---------------------------------
Chiede_di_Disinserire:
DEBUG CLS, "Digita D per disinserire", CR, ">" ' Visualizza messaggio
GOSUB Ottieni_Input_Utente ' Chiama Ottieni_Input_Utente
RETURN ' Ritorna da Chiede_to_Disinserire
' -----[ Subroutine – Inserisce_Allarme]--------------------------------------
Inserisce_Allarme:
DEBUG CLS, "Chiudi armadietto.", ' Avverte utente di chiudere armadietto
CR, "Avete"
FOR secondi = 8 TO 0 ' Conta alla rovescia secondi rimasti
DEBUG CRSRX, 9, DEC secondi, CLREOL, ' Visualizza tempo rimanente
" secondi rimasti..."
PAUSE 1000 ' Aspetta 1 secondo
NEXT ' Ripete conto alla rovescia
stato = Inserito ' Pone variabile stato a Inserito
RETURN ' Ritorno da Inserisce_Allarme
' -----[ Subroutine - Allarme_Inserito ]--------------------------------------
Allarme_Inserito:
DO ' Ciclo Inserito
GOSUB Chiede_di_disinserire ' Controlla input utente
GOSUB Controlla_Sensori ' Controlla sensori
LOOP UNTIL stato <> Inserito ' Ripete fin quando stato non inserito
RETURN ' Ritorno da Allarme_Inserito
' -----[ Subroutine - Allarme_Attivato]--------------------------------------
Allarme_Attivato:
DO ' Ciclo Allarme Attivato
DEBUG CLS, "Allarme attivato!!!" ' Visualizza avviso
FOR contatore = 1 TO 15 ' Suona 15 toni di allarme
FREQOUT 6, 100, 4500
PAUSE 100
NEXT
FOR secondi = 1 TO 6 ' 3 sec. per disinserimento utente
IF stato <> Attivato THEN EXIT
GOSUB Chiede_di_Disinserire
NEXT
LOOP UNTIL stato <> Attivato ' Ripete fin quando disattivato
' -----[ Subroutine - Ottieni_Input_Utente ]---------------------------------
Ottieni_Input_Utente:
car = 0 ' Cancella variabile car
SERIN 16, 84, 500, Tempo_Finito, [car] ' Aspetta 0,5 sec. per premi testo
GOSUB Elabora_Car ' Se tasto, chiama Elabora_Car
Tempo_Finito: ' Se non è tasto, salta chiaamata
Costruire prototipi delle proprie invenzioni · Pagina 335

RETURN ' Ritorna da Ottieni_Input_Utente


' -----[ Subroutine - Elabora_Car ]------------------------------------------
Elabora_Car:
SELECT car ' Valuta car caso per caso
CASE "A", "a" ' Se "A" o "a"
stato = Inserimento ' Cambia var stato a Inserimento
CASE "D", "d" ' Altrimenti, se "D" or "d"
stato = NonInserito ' Cambia var stato a NonInserito
CASE ELSE ' altrim. se non "A", "a", "D", "d"
DEBUG "Carattere errato, prova di nuovo" ' Visual. messaggio errore
PAUSE 2000 ' Dà a utente 2 sec. per leggere
ENDSELECT ' Fatta valutazione carattere
RETURN ' Ritorno da Elabora_Car

' -----[ Subroutine - Controlla_Sensori ]------------------------------------


Controlla_Sensori:
' Da_fare: Controlla se Potenziometro è sopra il valore di soglia.
' Se si, allora, attiva allarme
IF IN0 = 0 THEN stato = Attivato ' Puls. rilasciato? Attiva allarme.
RETURN ' Ritorno da Controlla_Sensori

Nuove tecniche di codifica nel codice esempio


Date un’occhiata al secondo ciclo FOR...NEXT nella subroutine Allarme_Attivato:
FOR secondi = 1 TO 6
IF stato <> Attivato THEN EXIT
GOSUB Chiede_di_Disattivare
NEXT

Se una chiamata della subroutine Chiede_di_Disattivare produce un cambiamento


nella variabile stato, la frase IF...THEN usa EXIT per uscire fuori dal ciclo
FOR...NEXT prima che siano fatte le sei ripetizioni del ciclo stesso.

Un altro comando nuovo detto SERIN appare nella subroutine Ottieni_Input_ Utente.
DEBUG e DEBUGIN sono versioni speciali dei comandi più generali SEROUT e SERIN. Per
vedere come lavora questo comando, provate a sostituire il comando DEBUG "Programma
in esecuzione..." con SEROUT 16, 84, ["Programma in esecuzione..."]. A
differenza dei comandi DEBUG e DEBUGIN, SEROUT e SERIN possono comunicare con
qualsiasi pin I/O, o con il pin 16 per la comunicazione con il terminale di DEBUG. Essi
hanno anche codici speciali usabili per scegliere il tasso di baud, descritti nelle tabelle
Baud Rate dei comandi SERIN e SEROUT nel manuale BASIC Stamp.
Ottieni_Input_Utente:
car = 0
SERIN 16, 84, 500, Tempo_Finito, [car]
Pagina 336 · Che cosa è un microcontrollore?

GOSUB Elabora_Car
Tempo_Finito:
RETURN

La subroutine Ottieni_Input_Utente inizia con l’impostare la variabile car a 0 per


cancellare qualsiasi vecchio valore che car potrebbe aver memorizzato. Poi, essa esegue
il comando SERIN, Con il valore opzionale di Timeout impostato a 500 ms (mezzo
secondo), e l’etichetta opzionale di timeout impostata a Tempo_Finito, che è due righe
più sotto. Se il comando SERIN riceve un carattere entro 500 ms, memorizza il risultato
nella variabile car e si sposta alla riga successiva, che richiama la subroutine
Elabora_Car. Se non ottiene un carattere entro 500 ms, salta invece a Tempo_Finito,
che lo porta oltre la chiamata di subroutine.

Il vostro turno – Passo successivo verso la prova di concetto


È adesso il momento di ottenere che il programma funzioni come prova di concetto .

 Memorizzate una copia di ProtoMicroAllarme(Sv-009).bs2 col nome


ProtoMicroAllarme(Sv-010).bs2
 Usate segmenti del vostro codice già provato nell’Attività #2 per completare i tre
punti etichettati “Da_fare”.
 Provate il vostro codice modificato, e quando lavora in modo corretto, salvate
una copia del codice come ProtoMicroAllarme(Sv-011).bs2

ATTIVITÀ #4: DOCUMENTAZIONE DEL PROPRIO CODICE!


ProtoMicroAllarme(Sv-011).bs2 non è del tutto completo poichè occorre ancora un pò di
documentazione e altri cambiamenti per rendere il programma facile da modificare e
manutenere. Ad esempio, nella subroutine Allarme_Attivato, il comando FREQOUT 6,
100, 4500 ha quello che alcuni codificatori chiamerebbero “numeri del mistero.”
Numeri del mistero sono valori usati in modo che un osservatore casuale potrebbe non
riuscire a discernere facilmente. Potreste riscrivere questo comando come FREQOUT
PinAltoparlante, TempoBeep, TonoAllarme. Potete poi aggiungere una sezione
Direttive Pin sopra l’area delle Costanti, e dichiarare PinAltoparlante PIN 6. Inoltre,
nella sezione Costanti, dichiarare TempoBeep CON 100, e TonoAllarme CON 4500.

Non tutte le costanti di un determinato programma debbono avere un nome. Tenete a


mente che i numeri del mistero sono valori usati in modo che l’osservatore casuale
potrebbe non riuscire a discernere facilmente il loro significato. Un altro esempio dalla
subroutine Allarme_Attivato è:
Costruire prototipi delle proprie invenzioni · Pagina 337

FOR secondi = 1 TO 6 '3 sec. per disinserimento utente.

I numeri 1 e 6 non sono numeri del mistero poichè è chiaro che essi fanno ripetere il ciclo
FOR...NEXT sei volte, e il commento alla destra della FOR indica che sei ripetizioni
durano tre secondi. Non tutti i supervisori possono essere d’accordo con questa
interpretazione, ed alcuni potrebbero proclamare con calore che i numeri 1 e 6 sono
realmente numeri del mistero. Se ultimate il vostro codice sul posto di lavoro e il vostro
capo è un pignolo del nominare tutte le costanti, è probabilmente buona idea aderire
proprio a qualsiasi stile di codifica venga richiesto.

 Scorrete ProtoMicroAllarme(Sv-011).bs2 e documentate i numeri del mistero


dichiarando le direttive pin e le costanti, e sostituendo i loro nomi ai numeri nel
programma.
 Una eccezione alle direttive PIN è l’argomento Pin del comando SERIN, che deve
essere dichiarato come una costante e non come un pin. Gli argomenti Pin
servono per i pin I/O e vanno da P0 a P15. L’argomento Pin 16 forza il
comando SERIN ad ascoltare il pin SIN del modulo BASIC Stamp, che è
connesso alla porta di programmazione della vostra scheda.

Un’altra area dove la documentazione di ProtoMicroAllarme(Sv-011).bs2 è ancora


debole è nei commenti che spiegano ciascuna routine e subroutine. Ciascuna subroutine
dovrebbe avere commenti che spiegano cosa fa, le variabili da cui dipende per fare il suo
lavoro, e le variabili che la subroutine usa per memorizzare i risultati prima della RETURN.
Ecco un esempio di buona documentazione aggiunta all’inizio della subroutine
Elabora_Car.

' -----[ Subroutine - Elabora_Car ]---------------------------


'
' Aggiorna la variabile stato in base ai contenuti della
' variabile car. Se car contiene "A" o "a", nella variabile
' stato viene memorizzata la costante Attivato. Se car
' contiene "D" o "d", in stato viene memorizzata la costante
' NonAttivato.

Elabora_Car:
'... codice contenuto qui omesso
RETURN ' Ritorno da...

 Aggiornate le descrizioni tra i titoli delle subroutine e le loro etichette, e ripetete


lo stesso aggiornamento anche per la routine main.
Pagina 338 · Che cosa è un microcontrollore?

 Quando avete finito, memorizzate una copia del vostro codice con il nome
MicroAllarmeProvaDiConcetto(v1.0).bs2.

Salvate copia e incrementate il numero di versione dopo ciascun cambiamento


Assicuratevi di continuare a salvare copie del vostro codice con ogni piccola modifica.
Ciò rende facile fare piccoli passi indietro al codice che lavora, se i vostri cambiamenti
causano problemi. Per esempio, prima della vostra successiva modifica, salvate il file
come MicroAllarmeProvaDiConcetto(v1.01).bs2, o forse perfino v1.01a. Quando la
vostra caratteristica è stata implementata completamente, scegliete un passo di revisione
ragionevole. Per revisione piccola, provate v1.1; per revisione grande, date v2.0.

ATTIVITÀ #5: DOTATE LA VOSTRA APPLICAZIONE DI NUOVE


FANTASTICHE FUNZIONALITÀ
Come accennato prima, ciascun circuito con cui avete operato in questo testo è in realtà
un esempio preso da un gruppo di componenti e moduli con cui il BASIC Stamp può
interagire nello stesso modo. La Figura 10-3 mostra alcune sostituzioni di parti che
potreste fare per convertire il vostro sistema di sicurezza con mini-contenitore in un
sistema che proteggerà un oggetto situato all’aperto. Questo sistema modificato all’uopo
può invece rilevare movimenti nella stanza, e rilevare anche se qualcuno solleva l’oggetto
che volete proteggere:

 Pulsante: uscita alto-basso → sostituite con Sensore di Movimento PIR


 Potenziometro: resistenza variabile → sostituite con Sensore FlexiForce

Il sensore PIR rileva le variazioni di configurazione della luce infrarossa nell’area


circostante, e invia un segnale alto per indicare che è stato rilevato movimento, o un
segnale basso per indicare nessun movimento. La resistenza del sensore FlexiForce varia
con la forza applicata al punto rotondo alla sua estremità (ad esempio un oggetto che si
siede su di esso), quindi può essere misurata in un circuito RC con il comando RCTIME.
Costruire prototipi delle proprie invenzioni · Pagina 339

Figura 10-3: Sensori per aggiornare il nostro mini sistema di allarme

Sensore PIR di Sensore FlexiForce


movimento

 Andate nel sito www.parallax.com e digitate “motion detection” (rilevazione di


movimenti) nel campo Search (ricerca), quindi cliccate il pulsante Go (vai).
 Trovate il sensore PIR tra i risultati della ricerca e andate alla sua pagina di
prodotto.
 Scaricate la documentazione del sensore PIR (file .pdf), e opzionalmente
osservate la video clip sul sensore PIR. Il file PDF sarà nella sezione della
pagina dedicata ai Download.
 Leggete le spiegazioni della documentazione, gli schemi, e il codice di esempio
PIR_Simple.bs2. Potreste sostituire questo sensore a un pulsante?
 Tornate ai risultati della vostra ricerca (o indietro alla home page Parallax) e
digitate pressure (pressione) nel campo Search. Poi seguite il link del sensore
FlexiForce.
 Trovate e “scucite” (un-zip) la documentazione e il codice sorgente (.zip) del
FlexiForce .
 Nella cartella scucita, aprite e leggete la documentazione, gli schemi, e il codice
sorgente FlexiForce Simple.bs2. Potreste sostituire questo sensore ad un
potenziometro ?

Per avere un esempio passo-passo che illustri come possiate incorporare i


miglioramenti di questa attività e della successiva nella vostra applicazione Micro
Allarme, seguite il link Stamps in Class “Mini Projects” al sito:
www.parallax.com/Education.

ATTIVITÀ #6: COME SUPERARE LE DIFFICOLTÀ DI PROGETTO


Ora che avete quasi finito con Che cos’è un microcontrollore?, uno dei passi successivi
più importanti da affrontare è trovare risposte ai compiti che non sapete ancora come
risolvere col vostro microcontrollore. Ecco i passi generali:
Pagina 340 · Che cosa è un microcontrollore?

Passo 1: Cercare componenti o circuiti che possano risolvere il vostro problema.


Passo 2: Leggere sul componente/circuito, e trovare come lavora. Fare
particolare attenzione a come il BASIC Stamp avrà bisogno di interagire
con il componente/circuito.
Passo 3: Controllate se sia disponibile il codice esempio per il circuito o il
componente. Ciò renderà estremamente più facile incorporarlo nella
vostra applicazione.

Il prossimo passo nel vostro progetto è visualizzare lo stato del sistema senza la
connessione al computer. Ecco un esempio di come potete trovare e valutare un
componente per la vostra applicazione.

 (Passo 1) Andate al sito www.parallax.com e inserite il termine “display” nel


campo Search. Dalla home page, vi può occorrere di fare click sul pulsante Go
invece di premere semplicemente Enter sulla tastiera. Andate alle pagine di
prodotto dei vari elementi risultanti dalla ricerca e vedete se ne trovate uno che
sia relativamente economico e capace di visualizzare una coppia di righe di testo.

Se avete deciso che il LCD Seriale 2 x 16 Parallax in Figura 10-4 è un buon candidato,
siete sulla strada giusta. Comunque, quasi tutti i display sono una buona scelta.

Figura 10-4
Parallax 2x16 Serial LCD
(LCD Seriale 2x16
Parallax)

 (Passo 2) andate alla pagina di prodotto del LCD. seriale 2x16 Parallax Se non
lo avete già fatto, leggete la descrizione del prodotto. Poi, trovate il link al file
PDF di documentazione (Parallax Serial 2x16 LCD’s PDF Documentation).
Sarà nella sezione Downloads & Resources della pagina, probabilmente sotto la
voce “Parallax Serial 2x16 LCD Documentation v2.0 (pdf).” Il numero di
versione 2.0 potrebbe esser più alto al momento in cui fate questo tentativo.
 (Passo 3) Controllate se c’è codice di esempio nel PDF di documentazione del
LCD seriale 2x16 Parallax e se ci siano anche link al codice nella sezione
Costruire prototipi delle proprie invenzioni · Pagina 341

Downloads & Resources della pagina web del prodotto . Cercate un programma
esempio grazioso, breve e semplice che visualizzi un messaggio di testo perché
di solito fornisce un buon punto di partenza.

Dopo la breve introduzione a SERIN e SEROUT che ha seguito il programma esempio di


questo capitolo, il codice esempio per il LCD seriale Parallax, che fa leva sul SEROUT,
potrebbe apparirvi piuttosto familiare.

Se seguite il link Smart Sensors and Applications, potete scaricare il testo Smart
Sensors and Applications (in Italiano Sensori Intelligenti e loro applicazioni), che ha un
intero capitolo sul controllo di questo display con il BASIC Stamp 2.

Tre esempi tra quanti?


I sensori PIR e FlexiForce e il LCD seriale Parallax sono tre esempi di moduli e
componenti usabili per aumentare di molto la funzionalità del vostro prototipo. Questi tre
sono soltanto una goccia nel secchio, a confronto di quanti ne siano disponibili.

La Figura 10-5 mostra alcuni moduli e componenti ulteriori, e rappresenta anch’essa


soltanto un piccolo campione. Gli esempi nella figura sono: (a) modulo RF per
comunicazioni radio (RF module for radio com), (b) giroscopio (gyro) per rilevare
velocità di rotazione, (c) bussola (compass) per trovare direzioni, (d) sensore di
vibrazione (vibration sensor), (e) accelerometro (accelerometer) per rilevare variazioni di
inclinazione e velocità, (f) sensore ultrasonico (ultrasonic sensor) per rilevare distanze,
(g) sensore di intensità luminosa (light intensity sensor), (h) controllore di servo (servo
controller), (i) controllore di motore CC (DC motor controller), (j) matrice Darlington
(Darlington array) per pilotare bobine di motori passo-passo, e (k) motore passo-passo
(stepper motor). Potete trovare tutti questi dispositivi nel sito www.parallax.com con una
ricerca su parola chiave. Ad esempio, per trovare di più sull’elemento (f), digitate
“ultrasonic sensor” nel campo Search della home page di Parallax e poi fate click sul
pulsante Go.

_____________________________
Nota – abbiamo mantenuto tra parentesi (in corsivo) i termini inglesi per facilitare la
ricerca sul sito Parallax dei corrispondenti elementi.
Pagina 342 · Che cosa è un microcontrollore?

Figura 10-5: Altri esempi di moduli e accessori

Comunicazioni Sensori Controllo di Motori

b e h

a j

c f

k
i
d g

Il vostro turno – Investigazione di un maggior numero di risorse


Se avete in mente un progetto e vi occorre trovare un circuito e il suo codice (di
programma) per supportare una delle caratteristiche del vostro progetto, la procedura di
ricerca appena discussa vi fornirà un buon punto di partenza, ma essa trova soltanto le
pagine di prodotto sul sito www.parallax.com, e c’è un gran numero di domande sul
progetto cui le pagine di prodotto non daranno necessariamente risposte.
Fortunatamente, ci sono molte più risorse, che includono:

 Testi PDF Stamps in Class


 PDF di documentazione di prodotto Parallax
 Dadi e Volt delle colonne BASIC Stamps
 Risposte a domande ed articoli sui forum.parallax.com
 Articoli su BASIC Stamp pubblicati su Internet

Quando state cercando componenti e informazioni sul modo di usarli col BASIC Stamp,
siete nella categoria di “application information” (“informazioni applicative”). Quando
cercate informazioni applicative, è meglio iniziare con il sito web del costruttore, poi
Costruire prototipi delle proprie invenzioni · Pagina 343

espandere la ricerca per includervi forum, e se ancora non avete trovato una buona
soluzione, espandete ulteriormente la ricerca a tutto il World Wide Web. La Figura 10-6
mostra un esempio di ricerca su parola chiave con Google, che ricerca i termini“infrared”
(“infrarosso”) e “remote” (“comando a distanza”, o telecomando) nei documenti PDF e
nelle pagine di prodotto del sito www.parallax.com. La parte importante qui è che
Google cerca documenti PDF invece di cercare soltanto pagine di prodotto. Assicuratevi
di non porre spazi nella scritta site:www.parallax.com.

Figura 10-6
Ricerca con Google nel
sito www.parallax.com

Potete modificare la ricerca per includere domande e risposte sui forum di supporto
Parallax cambiando “www” in “forums” come segue:

infrared remote site:forums.parallax.com

Questo ricerca tutte le domande, risposte e articoli brevi che contengono le parole
“infrared” e “remote” nei forums.parallax.com. Per trovare un’applicazione specifica per
il BASIC Stamp, cambiate la vostra ricerca nei termini descritti sotto. Assicuratevi che le
parole BASIC Stamp siano tra virgolette perché ciò filtrerà i risultati raccolti tra la posta.

Ecco un riassunto delle sequenze di ricerca di Google per “BASIC Stamp” infrared
remote

 infrared remote site:www.parallax.com


o Cerca i termini “infrared” e “remote” nei PDF e nelle pagine di prodotto
del sito www.parallax.com
 infrared remote site:fourms.parallax.com
o Cerca i termini “infrared” e “remote” in discussioni al sito
forums.parallax.com
 “BASIC Stamp” infrared remote
o Cerca in tutto il web le parole “infrared” e “remote” nella stessa pagina
o nei PDF con la frase “BASIC Stamp.”
Pagina 344 · Che cosa è un microcontrollore?

Il prossimo passo per il progetto del Micro Allarme è una tastiera (keypad), ma la
documentazione e gli esempi che trovate con una semplice ricerca di pagina di prodotto
al sito parallax.com è risultata scarsa e sprovvista di circuiti esempio e relativo codice.
Poiché servirà una ricerca ulteriore , proviamo una ricerca con Google nel sito Parallax
che trovi tutti i riferimenti alla parola keypad. Ricordate, la ricerca con Google include i
documenti PDF.

 Andate al sito www.google.com.


 Digitate “keypad site:www.parallax.com” nel campo Search e poi premete Enter.

I risultati possono richiedere un pò di pazienza e tenacia nel passarli al setaccio, e ci


saranno molte pagine di risultati. C’è di solito abbastanza da scegliere in ciascuno dei
risultati di ricerca per ottenere alcuni contesti per ciascun link. Questo darà una certa
idea di quali risultati tralasciare e quali osservare più in dettaglio. Dopo poche pagine,
potreste trovare e seguire un link ad un Kit delle parti per un IR Remote (telecomando ad
infrarossi), mostrato nella Figura 10-7. Potrebbe non essere la soluzione che aspettavate,
ma dopo aver esaminato il prezzo, la documentazione e il codice esempio, potrebbe
costituire un buona scelta potenziale di tastiera del vostro micro sistema di sicurezza
potenziato.

Figura 10-7: Kit delle parti per un telecomando a IR

Se, dopo tutto questo, ancora non avete trovato l’informazione che cercavate, è ora di
chiedere ai forum.parallax.com. Quando fate una domanda nei forum, essa sarà vista da
esperti di una varietà di rami, e da insegnanti, hobbysti, e studenti. L’esperienza
collettiva dei Forum Parallax dovrebbe aiutarvi a superare le difficoltà di qualsiasi
progetto!
Costruire prototipi delle proprie invenzioni · Pagina 345

Ostacoli di progetto da memoria e velocità del processore


In alcuni casi, i programmi per i progetti più grandi possono raggiungere una lunghezza
sufficiente a superare la memoria di programma del BASIC Stamp 2. Questo ostacolo di
progetto può essere superato, in alcuni casi, riscrivendo codice che faccia più lavoro con
un numero di comandi minore. Un’altra opzione è aggiornarsi ad un modello di BASIC
Stamp con memoria di programma più grande. In altri casi, il progetto potrebbe
comportare la memorizzazione di più valori di variabili di quante ne possa memorizzare
il BASIC Stamp 2. Ci sono inoltre modelli di BASIC Stamp 2 caratterizzati da memoria
RAM di servizio per i valori delle variabili. Altri progetti potrebbero aver bisogno di fare
più compiti in un tempo minore di quanto il BASIC Stamp 2 è progettato per dare, perciò
alcuni modelli di BASIC Stamp 2 sono progettati con velocità di elaborazione maggiori.

La Figura 10-8 mostra tutti i modelli diversi di BASIC Stamp. Per avere dettagli su uno
di questi, seguite il link “Compare BASIC Stamp Modules” (“Confronta i modelli di
BASIC Stamp”) al sito www.parallax.com/basicstamp.

Figura 10-8: La linea completa dei Modelli di BASIC Stamp

Da sinistra: BS1, BS2, BS2e, BS2sx, BS2p24, BS2p40, BS2pe, BS2px

BS1: A buon mercato, ma ancora capace, perfetto per progetti piccoli o spazi stretti.
BS2: Ideale per principianti con una vasta base di risorse di codice esempio; è il
cuore del programma Stamps in Class.
BS2e: Perfetto per utenti BS2 cui occorra più spazio per il programma e le variabili.
BS2sx: Supporta l’insieme dei comandi BS2 con maggior spazio per variabili e
programma, a più del doppio della velocità di esecuzione.
BS2p24: In aggiunta alla maggior velocità e al maggior spazio per le variabili, comandi
speciali supportano il polling I/O, i LCD di caratteri (alfabetici) e i protocolli
I2C e 1-wire.
BS2p40: Tutte le caratteristiche del BS2p24 con un banco di 16 pins I/O aggiuntivi.
Pagina 346 · Che cosa è un microcontrollore?

BS2pe: Supporta l’insieme di comandi del BS2p24 con un consumo di potenza più
basso e una maggior memoria, per applicazioni di acquisizione dati alimentate
a batteria.
BS2px: Il modello più veloce di BASIC Stamp: supporta tutti i comandi BS2p24, più
caratteristiche speciali di configurazione I/O.
Una cosa da tenere a mente se vi aggiornate a un modello di BASIC Stamp più veloce
sono le differenze di unità per i comandi sensibili al tempo come RCTIME e FREQOUT.
Poiché i modelli differenti di processor eseguono a velocità diverse, le unità per Duration
e Frequency e gli altri argomenti potrebbero essere differenti. Ad esempio, quando il BS2
esegue FREQOUT 6, 100, 4500, invia un tono di allarme di timbro alto a P6 per 100 ms
(1/10th di secondo) ad una frequenza di 4500 Hz. Lo stesso comando eseguito dal BS2px
invia un tono che dura soltanto 16,6 ms ad una frequenza di 27.135 Hz, che è a tono così
alto da non essere udibile per alcun orecchio umano! Per la descrizione completa di
come ciascun comando lavori su ciascun modello, e per suggerimenti sulla conversione
di programmi BS2 perché eseguano in modo corretto su altri modelli, si veda l’aiuto del
Editor del BASIC Stamp.

Elaborazione parallela ad alte prestazioni


Alcune applicazioni complesse richiedono agilità di elaborazione e memoria ben oltre le
capacità della linea BASIC Stamp 2. Questi sono i tipi di progetto per i quali è
appositamente progettato il microcontrollore Propeller (Propulsore). Questo
microcontrollore con prestazioni uniche ha otto processori a velocità molto più alta in un
unico chip, assieme a 32 pin I/O e ad un’ampia memoria di programma e RAM. I
processori possono funzionare tutti contemporaneamente, sia indipendentemente l’un
l’altro, sia in modo cooperativo, condividendo l’accesso alla memoria globale e il clock
(orologio) di sistema. Ciascun processore ha inoltre la sua propria memoria, e un
hardware aggiuntivo per eseguire compiti complessi come il monitoraggio dello stato dei
pin I/O ad alta velocità o la generazione di segnali per un display televisivo o di
computer.

Il kit didattico Propeller mostrato nella Figura 10-9 è un buon modo di iniziare col
microcontrollore Propeller. Questo kit non è necessariamente il migliore dei passi
successivi dopo Che cos’è un microcontrollore? (What’s a Microcontroller?) La
prossima attività contiene alcune buone raccomandazioni per i passi del prossimo
libro/kit. Comunque, quando notate che i vostri progetti diventano più ambiziosi e con
maggiori sfide, ricordatevi del microcontrollore Propeller e del kit didattico Propeller.
Costruire prototipi delle proprie invenzioni · Pagina 347

Figura 10-9
Kit didattico Propeller
(a sinistra) e
Piattaforma PE (a
destra)

ATTIVITÀ #7: COSA IMPARARE DOPO?


Ora che avete quasi completato il testo Che cos’è un Microcontrollore (What’s a
Microcontroller?), è tempo di pensare a cosa imparare dopo. Prima di continuare,
prendetevi un momento per considerare a cosa siete principalmente interessati. Alcune
delle categorie generali su cui fare ulteriori ricerche comprendono:

 Robotica
 Elettronica
 Sensori
 Automazione
 Progetti di hobbistica
 Scienze della terra e misura del clima

Questa attività fa l’inventario delle risorse che potete usare per muovervi in ciascuna di
queste categorie.

Le risorse, i kit, e i componenti di cui si parla in questa attività sono correnti al


momento in cui è stato scritto questo capitolo (autunno 2009). Possono rendersi disponibili
versioni più recenti e migliori delle risorse, dei kit, e dei componenti che sostituiranno quelli
presentati qui . Per informazioni aggiornate, controllate il sito www.parallax.com .

Continuazione di Che cos’è un microcontrollore


La Figura 10-10 mostra i libri e i kit che sono il miglior seguito di questo libro. Robotica
con il Boe-Bot (Robotics with the Boe-Bot) è molto divertente e costituisce una grande
Pagina 348 · Che cosa è un microcontrollore?

esperienza didattica poichè vi permette di applicare molte delle tecniche di questo libro
ad applicazioni di robotica con il robot semovente Boe-Bot®. Sensori intelligenti e loro
applicazioni (Smart Sensors and Applications) è stato scritto per essere la seconda parte
di “Che cos’è un Microcontrollore.” Ha un altro nome poiché tutti i bei sensori e display
a cristalli liquidi mostrati al centro della Figura 10-10 hanno coprocessori che
comunicano con il BASIC Stamp. I coprocessori li rendono sensori “intelligenti”.
Understanding Signals (Comprendere i segnali) è un libro importante perché vi consente
di “vedere” le interazioni tra il BASIC Stamp e i circuiti con un oscilloscopio Parallax
che collegate alla porta USB del vostro computer.

Figura 10-10: Seguito alla grande, dopo Che cos’è un microcontrollore?

Comprendere i
Kit del Robot Boe-Bot Sensori intelligenti e segnali - Parti e
Applicazioni - Parti e Testo
Testo

Ulteriori kit e testi di Stamps in Class


La Figura 10-11 mostra un diagramma di flusso che riassume tutti i kit e testi di Stamps
in Class disponibili al momento di questa stesura. E’ accessibile tramite il link Stamps in
Class Program Overviews and Flowchart al sito www.parallax.com/Education, e potete
fare clic su ciascuna delle immagini per visitare la pagina di prodotto per il libro e il kit
che lo accompagna. Che cos’è un microcontrollore? è in alto a sinistra nella figura. Da
lì, il diagramma di flusso indica che potete sia saltare a Robotics with the Boe-Bot sia a
qualsiasi testo/kit delle serie Sensors o Signals.
Costruire prototipi delle proprie invenzioni · Pagina 349

Scarico dei testi completi in PDF: Potete scaricare l’intero PDF a colori di ciascun libro
Stamps in Class dal sito www.parallax.com. Cliccate su una qualsiasi delle illustrazioni nel
diagramma per navigare alla pagina Testo + Kit, e troverete il link al PDF nella sezione
Downloads della pagina.

Figura 10-11
Diagramma di
flusso
Stamps in Class
Pagina 350 · Che cosa è un microcontrollore?

Se la categoria cui siete interessato è:

 Robotica, allora il passo successivo è certamente Robotics with the Boe-Bot.


 Sensori, invenzioni, o progetti di hobbistica, allora il passo successivo sarà
Sensori intelligenti e applicazioni (Smart Sensors and Applications).
 Elettronica (segnali), allora il passo successivo sarà Understanding Signals.
 Automazione, allora il passo successivo sarà Process Control.
 Scienza della terra e misura del clima, allora il passo successivo sarà Applied
Sensors (originariamente Earth Measurements).

Risorse aggiuntive Stamps In Class


In aggiunta e oltre al contenuto dei libri di testo Stamps in Class, ci sono dei “Mini
Progetti” Stamps in Class con i link nel sito www.parallax.com/Education. Alcuni
progetti utilizzano solo le parti in stock da un determinato kit, ma mostrano nuovi modi di
usarli, oltre a introdurre nuovi concetti. Molti di questi progetti sono simili a capitoli
completi di libri Stamps in Class con attività, schemi, diagrammi di cablaggio, e listati di
codice completi che si possono scaricare dal sito. Alcuni hanno perfino tutorial video che
li accompagnano . La Figura 10-12 è presa dal video del progetto “Build Your Own Mini
Timer” (Costruisci il tuo mini-timer), che può essere realizzato con le sole parti che avete
utilizzato in questo libro. Se state cercando maggiori informazioni o ispirazione creativa,
li potreste trovare qui.
Costruire prototipi delle proprie invenzioni · Pagina 351

Figura 10-12: Esempio di “Mini Progetto” Stamps in Class

SOMMARIO
Questo libro ha introdotto una varietà di circuiti e tecniche, che sono tutte mattoni
elementari di prodotti commerciali comuni, come pure di invenzioni. Questo libro ha
introdotto anche tecniche per mettere assieme i vari mattoni con il microcontrollore
BASIC Stamp. Questo capitolo mostra come incorporare queste tecniche e i mattoni in
un prototipo, ed ha raccomandato anche i passi successivi per apprendere di più nella
vostra area di interesse.

L’approccio per far interagire il BASIC Stamp con un determinato circuito può essere
applicato a una varietà di altri circuiti e moduli, per realizzare una gamma ancor più vasta
di compiti. Due esempi applicati al prototipo di micro-allarme sono stati: (1) un sensore
di movimento con un’interfaccia simile al pulsante e (2) un sensore di pressione con
un’interfaccia simile al potenziometro.
Pagina 352 · Che cosa è un microcontrollore?

Mentre sviluppate il codice per la vostra applicazione, accertatevi di memorizzare spesso


il vostro lavoro sotto nomi di revisione incrementali (con suffissi -1, -2, ecc.).
Assicuratevi, inoltre, di usare nomi significativi per i pin I/O e numeri con le direttive
PIN e CON. Infine, aggiungete abbondanti commenti al vostro codice, che spieghino cosa
fa e come lo fa. Le subroutine debbono includere commenti che spieghino cosa fa la
subroutine, assieme a tutte le sue variabili e ai valori che queste usano per fare il loro
lavoro, e alle variabili che conservano i risultati quando la subroutine è stata eseguita.

Questo capitolo ha introdotto anche una varietà di tecniche di ricerca per implementare
caratteristiche del vostro prototipo. Perfino se siete digiuni di come far lavorare una
caratteristica particolare, potete usare la ricerca di termini per trovare componenti ,
circuiti, ed esempi di codice utili. I libri di testo Stamps in Class e i relativi kit
caratterizzano una ricchezza di circuiti e tecniche di progetto utili, e sono di grande aiuto
per apprendere di più nel campo della robotica, dei sensori, dell’elettronica,
dell’automazione, della scienza della terra, ed altro ancora. Tutti i testi che
accompagnano i kit Stamps in Class sono scaricabili gratuitamente.

Ora che avete raggiunto la fine di questo libro, prendetevi il tempo di pensare a quattro
cose: (1) le tecniche che avete appreso, (2) la vostra prossima invenzione, progetto o
prototipo, (3) come ciò che avete appreso qui possa essere applicato ad essa, e (4) ciò che
volete imparare dopo.

 Ora, è tempo di iniziare il vostro prossimo progetto o prototipo.


 Accertatevi di mantenere lo studio e l’apprendimento di nuove tecniche man
mano che procedete.
 Divertitevi e buona fortuna!
Appendice A: Elenco delle Parti e opzioni del kit · Pagina 353

Appendice A: Elenco delle parti e Opzioni del Kit


Che cos’è un microcontrollore Kit parti e testo #28152, Solo parti #28122
Parti e quantità soggettte a cambiamenti senza informazioni preventive
Parte Parallax # Descrizione Quantità
150-01020 Resistenza, 5%, 1/4W, 1 k 10
150-01030 Resistenza, 5%, 1/4W, 10 k 4
150-01040 Resistenza, 5%, 1/4W, 100 k 2
150-02020 Resistenza, 5%, 1/4W, 2 k 2
150-02210 Resistenza, 5%, 1/4W, 220  6
150-04710 Resistenza, 5%, 1/4W, 470  6
152-01031 Potenziometro - 10 k 1
200-01031 Condensatore, 0.01 F 2
200-01040 Condensatore, 0.1 F 2
201-01080 Condensatore, 1000 F 1
201-03080 Condensatore 3300 F 1
28123 Testo What’s a Microcontroller? (solo in #28152) 1
350-00001 LED – Verde – T1 3/4 2
350-00005 LED – Bicolore – T1 3/4 1
350-00006 LED – Rosso – T1 3/4 2
350-00007 LED – Giallo – T1 3/4 2
350-00027 Display LED a 7 segment i 1
350-00029 Fototransistor, 850 nm, T1 3/4 1
400-00002 Pulsante – Normalmente aperto 2
451-00303 Capocorda a 3 Pin – Maschio/Maschio 1
500-00001 Transistor – 2N3904 1
604-00010 potenziometro digitale 10 k 1
800-00016 Cavallotti di filo da 3” – Sacchetto di 10 2
900-00001 Piezo Altoparlante 1
900-00005 Servo Standard Parallax 1
Pagina 354 · Che cosa è un microcontrollore?

OPZIONI KIT COMPLETO


Sono disponibili parecchie opzioni di kit che includono una scheda di sviluppo con
microcontrollore BASIC Stamp 2 e tutti i componenti elettronici per completare le
attività descritte in questo testo:

 Il kit attività BASIC Stamp (#90005) include:


o Scheda BASIC Stamp HomeWork con BS2 montato in superficie
o Adattatore da USB a Seriale con cavo USB da A a Mini-B (#28031)
o Parti e testo What’s a Microcontroller? (#28153)

 Il kit presentazione BASIC Stamp (Seriale #27207 o USB #27807) include:


o Scheda Board of Education (Seriale #28150 o USB #28850)
o Modulo microcontrollore BASIC Stamp 2 (#BS2-IC)
o Cavo per programmazione (Seriale #800-00003 o USB da A a Mini-B
#805-00006)
o Parti e testo What’s a Microcontroller? (#28152)
o Manuale BASIC Stamp (#27218)

 Il kit parti & testo What’s a Microcontroller (#28152). PIU’


 Il kit complete Board of Education (Seriale #28103 o USB #28803), include:
o Scheda Board of Education (Seriale #28150 o USB #28850)
o Modulo microcontrollore BASIC Stamp 2 (#BS2-IC)
o Cavo per programmazione (Seriale #800-00003 o USB da A a Mini-B
#805-00006)
o Cavallotti di filo (1 pacco di 10)

Nota per gli Insegnanti: Sono disponibili sconti quantità per tutti i kit elencati sopra; per
i dettagli si veda la pagina di prodotto di ciascun kit al sito www.parallax.com. In
aggiunta, è disponibile separatamente in pacchi di 10 la scheda BASIC Stamp
HomeWork Board, come soluzione economica per l’uso in classi, che costa molto meno
del kit Board of Education + modulo BASIC Stamp 2 (#28158). Vi preghiamo di
contattare il Parallax Sales Team al numero telefonico gratuito (888) 512-1024 per il
prezzo di quantità più grandi.
Appendice B: Aggiunte su elettricità · Pagina 355

Appendice B: Aggiunte su elettricità


Cos’è un elettrone? Un elettrone è una delle tre parti fondamentali di un atomo; le altre
due sono il protone e il neutrone. Uno o più protoni e neutroni si incollano assieme nel
centro della molecola in un’area detta nucleo. Gli elettroni sono molto piccoli in confronto a
protoni e neutroni, ed orbitano attorno al nucleo. Gli elettroni si respingono l’un l’altro,
mentre elettroni e protoni si attraggono l’un l’altro.
Cos’è la carica ? La tendenza di un elettrone a respingere un altro elettrone e ad attrarre
un protone vicino è detta carica negativa . La tendenza di un protone a respingere un altro
protone ed attrarre un elettrone è detta carica positiva . Quando una molecola ha più
elettroni che protoni, si dice che è carica negativamente. Se una molecola ha meno elettroni
che protoni, si dice che è carica positivamente. Se una molecola ha elettroni e protoni in
numero uguale, si dice che ha carica neutra.
Che cos’è il voltaggio (o tensione)? Voltaggio è come dire pressione elettrica. Quando
una molecola carica negativamente è vicina a una molecola carica positivamente, l’elettrone
extra sulla molecola carica negativamente tenta di portarsi dalla molecola carica
negativamente a quella carica positivamente. Le batterie contengono un composto con
molecole cariche negativamente separato da un composto con molecole cariche
positivamente. Ciascuno di questi composti è connesso a uno dei terminali della batteria; il
composto carico positivamente è connesso al terminale positivo (+), e il composto negativo
è connesso al terminale negativo (-).
Il volt è una misura della pressione elettrica, e si abbrevia con una V maiuscola. Potete già
esservi familiarizzati con la batteria a nove volt (9 V) usata per alimentare la scheda Board
of Education o la HomeWork Board. Altre batterie usate molto comunemente includono le
batterie a 12 V presenti nelle automobili e le batterie AA da 1.5 V usate in calcolatrici, giochi
palmari ed altri dispositivi.
Cos’è la corrente? La corrente è una misura del numero di elettroni che in un secondo
passano attraverso un circuito. Talvolta le molecole si legano in una reazione chimica che
crea un composto (carico in modo neutro). Altre volte, l’elettrone lascia la molecola carica
negativamente e si unisce ad una molecola carica positivamente attraversando un circuito
come quello che avete appena costruito e provato. La lettera usata più comunemente per
indicare la corrente negli schemi elettrici e nei libri è la “I.” maiuscola
Cos’è un amp? Un amp (abbreviazione di ampere) è l’unità base di corrente, e la
notazione per amp è la maiuscola “A.” A confronto con i circuiti che state usando con il
BASIC Stamp, un amp è una quantità di corrente molto grande. E’ un valore conveniente
per descrivere la quantità di corrente che una batteria di automobile fornisce ai fari
abbaglianti, al ventilatore che raffredda il motore dell’automobile, e ad altri dispositivi di alta
potenza. Il Milliamp (mA) e il microamp (μA) sono misure più convenienti per discutere la
corrente che alimenta il modulo BASIC Stamp e la corrente tra i pin I/O e i circuiti. 1 mA =
1/1,000 A, e 1 μA = 1/1,000,000 A.
Cos’è la resistenza? Resistenza è la tendenza di un elemento di un circuito a resistere al
flusso di elettroni (la corrente) dal terminale negativo di una batteria al terminale positivo.
L’ohm è la misura base di una resistenza. E’ stato già introdotto e si abbrevia con la lettera
greca omega ().
Cos’è un conduttore? Un filo di rame non ha quasi resistenza, ed è detto conduttore.
Pagina 356 ·Che cos’è un microcontrollore?

ATTIVITÀ BONUS: LEGGE DI OHM, VOLTAGGIO, E CORRENTE


Questa attività applica alcune delle definizioni appena discusse.

Parti per la Legge di Ohm


(1) Resistenza – 220 Ω (rosso-rosso-marrone)
(1) Resistenza – 470 Ω (giallo-viola-marrone)
(1) Resistenza – 1 kΩ (marrone-nero-rosso)
(1) Resistenza – 2 kΩ (rosso-nero-rosso)
(1) LED – qualsiasi colore

Circuito di prova
Il valore di resistenza di Ri in Figura B-1 può essere cambiato. Una resistenza più bassa
consente che una maggior corrente attraversi il LED, e questo avrà una luce più brillante.
Valori di resistenza più alti faranno apparire il LED a luce meno intensa poiché non
consentono che nel circuito passi altrettanta corrente.

 Scollegate Potenza alla vostra Board of Education o HomeWork Board ogni


volta che modificate il circuito.
 Costruite il circuito in Figura B-1 iniziando con una resistenza da 220 Ω.
 Modificate il circuito sostituendo la resistenza da 220 Ω con una resistenza da
470 Ω. La luce del LED è meno brillante?
 Ripetete usando la resistenza da 1 kΩ, poi quella da 2 kΩ, controllando ogni
volta il cambio di luminosità.

Vdd Vin Vss


X3
Vdd +
R1 R2 R3 R4 P15
P14
P13
Ri
P12 Figura B-1
P11
P10 Controllo di corrente
P9 con un LED
P8
R1 = 220  P7
LED R2 = 470  P6
P5
R3 = 1 k P4
R4 = 2 k P3
P2
Vss P1
P0
X2
Appendice B: Aggiunte su elettricità · Pagina 357

Se state usando una batteria da 9 V, potete confrontare anche la luminosità di una diversa
sorgente di voltaggio, Vin. Vin è connesso direttamente al terminale + della batteria da 9
V, e Vss è connesso direttamente al terminale negativo della batteria. Nel nostro sistema,
Vdd è 5 V stabilizzato. Questa è circa la metà del voltaggio della batteria da 9 V.

 Se non state usando una batteria da 9 V, fermatevi qui e saltate alla sezione
Calcolo della corrente qui sotto. Altrimenti, continuate.
 Iniziate col circuito mostrato in Figura B-1, ma usate una resistenza da 1 kΩ.
 Prendete nota di quanto sia brillante la luce del LED.
 Scollegate potenza.
 Modificate il circuito: scollegate il filo della resistenza da Vdd e connettetelo a
Vin.
 Quando ricollegate di nuovo potenza, il LED è più brillante? Quanto più
brillante?

NON provate a fare l’esperimento Vin con una resistenza da 220 o 470 , queste
fornirebbero al LED più corrente di quanto ne possa sopportare.

Calcolo della corrente


Il Manuale del BASIC Stamp ha alcune regole su quanta corrente i pin I/O possano
fornire ai circuiti. Se non seguite queste regole, potete finire per danneggiare il vostro
BASIC Stamp. Le regole hanno a che fare con quanta corrente un pin I/O può liberare e
quanta corrente può liberare un gruppo di pin I/O .

Regole di corrente per i pin I/O del BASIC Stamp


 Un pin I/O può “originare” fino a 20 mA. In altre parole, se mandate un segnale
HIGH ad un pin I/O, non dovrebbe alimentare il circuito del LED con più di 20 mA.

 Se ricablate il circuito del LED in modo che il BASIC Stamp faccia accendere il
LED quando mandate il comando LOW, un pin I/O può “erogare” fino a 25 mA.

 I pin da P0 a P7 possono fornire soltanto fino a 40 mA. Analogamente quelli da


P8 a P15. 40 mA è anche la corrente di alimentazione I/O del regolatore
(alimentatore stabilizzato) da 5 V del modulo BASIC Stamp 2, pertanto la corrente
totale che viene emessa da tutti i pin I/O non dovrà mai superare 40 mA. Se
avete molti circuiti a LED, vi occorreranno resistenze più grandi perché i circuiti
non conducano troppa corrente.
 Per maggiori informazioni, consultate la tavola di descrizione Pin del BASIC
Stamp 2 nel Manuale BASIC Stamp.
Pagina 358 ·Che cos’è un microcontrollore?

Se sapete come calcolare quanta corrente userà il vostro circuito, potrete allora decidere
se è OK far brillare i vostri LED tanto intensamente. Ciascun componente ha regole per
ciò che fa con voltaggio, resistenza, e corrente. Per il diodo a emissione di luce, la regola
è un valore chiamato tensione di conduzione del diodo. Per la resistenza, la regola è detta
Legge di Ohm. Ci sono anche regole per quanta corrente e voltaggio si sommino nei
circuiti. Queste regole si chiamano Leggi di Kirchhoff per voltaggio e corrente .
Appendice B: Aggiunte su elettricità · Pagina 359

Vdd – Vss = 5 V Il voltaggio (pressione elettrica, o tensione) tra Vdd e Vss è 5 V. Questo
voltaggio si chiama tensione stabilizzata, ed opera quasi nello stesso modo di una batteria
che fornisce esattamente 5 V. (Le batterie non hanno tensione tipica di 5 V, anche se
quattro batterie ricaricabili al nickel-cadmio da 1.2 V in serie possono sommarsi fino a 4.8
V) Le schede Board of Education e BASIC Stamp HomeWork Board hanno entrambe
alimentatori stabilizzati a 5 V che convertono le tensioni fornite dalle batterie da 6 a 9 V in
tensione stabilizzata da 5 V per gli zoccoli Vdd sopra la breadboard. Il BASIC Stamp ha
anche lui uno stabilizzatore-regolatore di tensione incorporato che converte l’input di 6 o 9 V
in 5 V per i suoi componenti.
Vin – Vss = 9 V Se state usando una batteria da 9 V, il voltaggio da Vin a Vss è 9 V. State
attenti. Se state usando un alimentatore stabilizzato alimentato dalla rete elettrica (con
presa a muro), anche se dice 9 V, può andare a tensioni fino a 18 V.
Terra e/o riferimento si riferisce al terminale negativo di un circuito. Quando si va al
BASIC Stamp e alla Board of Education, Vss è considerato il riferimento di terra. E’ di zero
volt, e se state usando una batteria da 9 V, è il terminale negativo di quella batteria. Il
terminale positivo della batteria è 9 V. Vdd è 5 V (sopra il riferimento Vss di 0 V), ed è un
voltaggio speciale fatto da un chip regolatore di tensione per dare potenza elettrica al BASIC
Stamp.
Legge di Ohm: V = I × R La tensione (o voltaggio) misurata ai capi dei terminali di una
resistenza (V) è uguale alla corrente che passa attraverso la resistenza (I) moltiplicata per il
valore della resistenza (R).
Tensione di conduzione del diodo : è la tensione tra l’anodo e il catodo di un diodo
mentre la corrente passa dall’anodo al catodo. Per il LED verde nel circuito di Figura 2-6 a
pagina 35, potete assumere che la tensione di conduzione ai capi del LED è di circa 2,1 V
per amore dei calcoli fatti sul circuito. Se il LED è giallo, assumete 2,0 V, e se il LED è
rosso, assumete 1,7 V. Queste tensioni varieranno leggermente con la quantità di corrente
che passa nel circuito. Minori resistenze in serie e/o maggiori voltaggi applicati al circuito
produrranno un flusso di corrente più alto. Maggiori resistenze in serie e/o minori voltaggi
applicati produrranno un flusso di corrente più basso.
Legge di Kirchhoff semplificata per il voltaggio: il voltaggio usato uguaglia il
voltaggio fornito. Se alimentate un circuito con 5 V, il numero di volt che tutte le sue parti
usano, è stato al meglio una tensione fino a 5 V.
Legge di Kirchhoff semplificata per la corrente: la corrente in ingresso uguaglia la
corrente in uscita. La corrente che entra in un circuito LED da Vdd è la stessa quantità di
corrente che lo lascia attraverso Vss. Analogamente, se collegate tre LED al BASIC Stamp,
e ciascun circuito LED conduce 5 mA, ciò vuol dire che il BASIC Stamp deve alimentare tutti
i circuiti con una corrente totale di 15 mA.
Pagina 360 ·Che cos’è un microcontrollore?

Calcolo di esempio: un circuito, due circuiti


Il calcolo di quanta corrente conduca il circuito di un LED rosso si svolge in due tempi:

1. Prevedete quale sia il voltaggio ai capi della resistenza


2. Usate la legge di Ohm per prevedere la corrente che attraversa la resistenza.

La Figura B-2 mostra come calcolare il voltaggio ai capi della resistenza. Il voltaggio
fornito è a sinistra, ed è 5 V. I voltaggi usati da ciascun componente sono alla destra del
circuito. Il voltaggio che non conosciamo all’inizio è VR, il voltaggio attraverso la
resistenza. Ma sappiamo che il voltaggio attraverso il LED sta per assumere il valore di
circa 1,7 V (la tensione di conduzione diretta del diodo che emette luce rossa). Sappiamo
anche che il voltaggio ai capi delle parti deve assommare in totale a 5 V per la Legge di
Kirchhoff sul Voltaggio. La differenza tra 5 V e 1,7 V è 3,3 V, quindi questo dev’essere
il voltaggio ai capi della resistenza, VR.

Figura B-2
VR  1.7 V  5 V Voltaggio ai
VR  5 V  1.7 V capi del
circuito, della
VR  3.3V resistenza, e
del LED

Kilo è il prefisso metrico per 1000. Il modo usato nelle unità di misura per dire 1000 è
kilo, e si abbrevia con la lettera k minuscola. Invece di scrivere 1000 , potete scrivere 1
k. In ciascun modo, si pronuncia un-kilo-ohm. Analogamente, 2000  si scrive 2 k.
Milli è il prefisso metrico per 1/1000, e si abbrevia con la lettera m minuscola. Se il
BASIC Stamp alimenta il circuito di un LED con 3,3 millesimi di un amp, ciò vuol dire 3,3
milliamps, o 3,3 mA.
Cos’è un mA? Pronunciato milliamp, è la notazione per un millesimo-di-un-amp. La “m”’ in
mA è la notazione metrica per milli, che sta per 1/1000. La “A” in mA sta per amp. Mettete
le due cose assieme, ed avrete milliamp, e questo è molto utile a descrivere la quantità di
corrente emessa dal BASIC Stamp e che fluisce nel circuito connesso ad esso.

Ora che abbiamo calcolato la tensione ai capi della resistenza, la Figura B-3 mostra un
esempio di come usare quel valore per calcolare la corrente che passa attraverso la
Appendice B: Aggiunte su elettricità · Pagina 361

resistenza. Iniziate con la legge di Ohm: V = I × R. Conoscete i valori di V (3,3 V) ed R


(470 Ω). Ora, tutto ciò che dovete fare è risolvere per I (la corrente).

V  IR
3.3V  I  470 Ω
3.3 V
I
470 Ω Figura B-3
Calcolo della
I  0.00702 V corrente che

attraversa la
I  0.00702 A
resistenza
7.02
I A
1000
I  7.02 mA

Si, è vero ! 1 A = 1 V/ (Un amp è un volt per ohm).


Quanta corrente è 7,02 mA? È la quantità di corrente che il circuito LED in Figura B-2
conduce. Potete sostituire la resistenza da 470  con una resistenza da 220 : il circuito
condurrà circa 15,0 mA, e il LED avrà luce più brillante. Se usate una resistenza da 1000 ,
il circuito condurrà 3,3 mA, e il LED avrà luce meno brillante. Una resistenza da 2000 
farà illuminare il LED ancora di meno, e la corrente sarà 1,65 mA.

Diciamo che volete fare in modo che un pin I/O accenda contemporaneamente due LED .
Questo significa che il BASIC Stamp, al suo interno, dovrà alimentare i circuiti come
mostra la Figura B-4. La corrente del circuito supererà il limite di 20 mA del pin I/O?
Verifichiamo. Ricordate che la versione semplificata della legge di Kirchhoff’ sulla
corrente dice che la corrente totale emessa dall’alimentatore dev’essere uguale alla
corrente fornita a tutti i circuiti. Ciò significa che I in Figura B-4 deve uguagliare il totale
delle due correnti che vengono emesse. Sommate semplicemente le due correnti emesse,
e otterrete in risposta 14,04 mA, che potete arrotondare a 14,0 mA. Poiché questa
emissione di corrente è ancora sotto il limite di 20 mA del pin I/O, ci si può connettere
con sicurezza ad un pin I/O e commutare acceso/spento con il BASIC Stamp.
Pagina 362 ·Che cos’è un microcontrollore?

Figura B-4
I  I 1  I 2  ... I i Corrente
I  7.02 mA  7.02 mA totale
fornita ai
I  14.04 mA  14.0 mA due circuiti
a LED

Il vostro turno – Modifica del circuito


 Ripetete l’esercizio in Figura B-2, ma usate Vin – Vss = 9 V invece di Vdd – Vss
= 5 V.

Assumendo che la tensione di conduzione diretta non cambi, la risposta è VR =


7,3 V. La tensione misurata sulla resistenza sarà probabilmente leggermente
inferiore a causa di una maggior tensione di conduzione diretta del LED per la
maggior corrente che attraversa il circuito.

 Ripetete l’esercizio in Figura B-3, ma usate una resistenza da 1 kΩ.

Risposta: I = 3,3 mA.

 Usate VR = 7,3 V per fare l’esercizio in Figura B-3 con una resistenza da 1 kΩ.

Risposta: I = 7,3 mA.

 Ripetete l’esercizio mostrato in Figura B-4 con una delle resistenze da 470 Ω e
l’altra da 1 kΩ.

Risposta: I = 7,02 mA + 3,3 mA = 10,32 mA.


Appendice C: Sommario del formato RTTTL· Pagina 363

Appendice C: Sommario del formato RTTTL


Questo è un sommario inteso come aiuto a dare un senso al formato RTTTL. Le
specifiche complete del RTTTL si possono trovare pubblicate in vari siti web. Con un
qualsiasi motore di ricerca, usate le parole chiave “RTTTL specification” (“specifiche
RTTTL”) per rivedere le pagine web che riportano le specifiche.

Ecco un esempio di suoneria in formato RTTTL :


TakeMeOutToTheBallgame:d=4,o=7,b=225:2c6,c,a6,g6,e6,2g.6,2d6,p,
2c6,c,a6,g6,e6,2g.6,g6,p,p,a6,g#6,a6,e6,f6,g6,a6,p,f6,2d6,p,2a6
,a6,a6,b6,c, d,b6,a6,g6

Il testo che precede il primo carattere “:” (due punti) è ciò che il telefono cellulare
visualizza come nome del motivo-suoneria In questo caso, la suoneria si chiama:
TakeMeOutToTheBallGame: (Portami alla partita)

Tra il primo e e il secondo carattere “:”, sono presenti le impostazioni predefinite per la
canzone usando d, o, e b. Ecco cosa significano queste lettere:
d – durata
o – ottava
b – battute per minuto o tempo.

In TakeMeOutToTheBallGame, le impostazioni predefinite sono:


d=4,o=7,b=225:

Le note della melodia sono inserite dopo il secondo carattere “:”, separate da virgole. Se
è usata proprio la lettera che rappresenta la nota (C sta per Do), quella nota sarà suonata
per la durata predefinita nell’ottava predefinita. Per esempio, la seconda nota in
TakeMeOutToTheBallGame è:
,c,

Poiché non ci sono altre informazioni, sarà suonata per la durata preimpostata della nota
da ¼ (d=4) (minima), nella settima ottava (o=7).

Una nota può avere fino a cinque caratteri tra le virgole; ecco cosa specifica ciascun
carattere:
Pagina 364 ·Che cos’è un microcontrollore?

,durata nota diesis punto ottava,

Ad esempio:
,2g#.6,

…significa suona la mezza nota G-diesis per 1 ½ la durata di una semi-nota, e suonala
nella sesta ottava.

Ecco alcuni esempi da TakeMeOutToTheBallGame:

,2g.6, – mezza nota, G, puntata, sesta ottava


,a6, – durata predefinita di un quarto di nota, nota A suonata in sesta ottava
,g#6, – durata un quarto, nota G, diesis (denotato da #), sesta ottava

Il carattere:
,p,

…sta per pausa, ed è usato per le pause (i riposi). Senza altre informazioni extra, la p
suona per la durata predefinita di un quarto di nota. Potete anche suonare un riposo di
valore metà nota usando:
,2p,

Ecco un esempio di un riposo puntato:


,2p.,

In questo caso, il riposo durerebbe metà nota più un quarto di nota.


Indice · Pagina 365

Indice

-$- Apostrofo, 45
$ (Formattatore esadecimale), 222 Area per i prototipi, 34

-%- Argomenti, 42

% (Formattatore binario), 195 ASCII, 293

-*- Automazione, 350

** (Operatore Moltiplicazione Alta), 287 -B-


*/ (Operatore Moltiplicazione Media, 90, 287 Base

-?- di fototransistor, 215

? (simbolo = x formattatore), 48 di Transistor, 308

-µ- BASIC Stamp, 13, 345


BASIC Stamp Editor, 17
µF (microfarad), 155
BASIC Stamp, confronto dei modelli, 345
Batteria, 37
-A-
Battimento, 268
Attivo-alto vs. attivo basso, 74
Bemolle, nota - (Flat), 270
AD5220, potenziometro digitale, 311
Benamino Franklin, 38
Algoritmo, 92
Bicolore (LED), 54
Allarme armadietto, progetto-, 327
Binario, 61
Alphabet Song, 274
% (Formattatore binario), 195
Altoparlante piezoelettrico, 261
Bit, 48, 193
Amp, 355
dimensione di variabile, 48
AND, 82
Blocco di codice, 82
Annidamento di subroutine, 234
Booleani, 65
Annidato, ciclo - 266
Breadboard, 34, 35, 311
Anodo, 32
BS1, 345
di display a 7 segmenti, 184
BS2, 345
LED, 32
Pagina 366 ·Che cos’è un microcontrollore?

BS2e, 345 Codice di commento, 45


BS2p24, 345 Collettore
BS2p40, 346 di fototransistor, 215
BS2pe, 346 di Transistor, 308
BS2px, 245, 346 Colore, spettro di- 211, 212
BS2sx, 345 COM, porta- 44
Bus, parallelo, 191 Commutare, 65
Byte, 48, 193 Comunicazione, prodotti di-, 341
dimensione di variable, 48 Condensatore (capacità), 155
-C- - Ceramico, Simbolo di schema e disegno
di parte, 163
Cadmio, solfuro di-, 211
- Elettrolitico, 155
Caratteri di controllo. Vedi DEBUG, caratteri di
controllo condensatore elettrolitico, simbolo di
schema e diagramma di parte, 156
Carica, 355
capacità di giunzione, 251
Carica negativa, 355
polarità di- – terminali identificatori, 156,
Catodo, 32 157
Catodo comune in display a 7 segmenti, - usati in parallelo, 239
184
Conduttore, 355
LED, 32
Costanti, 174
Catodo comune, 184
Costruire prototipi, 325
Chip Interprete, 305
Concetto, prova di -, 326
Ciclo, 127, 261
Controllare, 65
Ciclo annidato, 249
Controllo di Processo, 350
Circuito aperto, 66
Conteggio, 45, 87
Circuito chiuso, 68
Conversione da esadecimale a decimale, 220
CLREOL, 180
Corrente, 30, 38, 355
CMOS, 65
Milliamp, 360
Codice
CR, 27
blocco di-, 82
CRSRUP, 139
sovraccarico di-, 89
Indice · Pagina 367

-D- Diodo, tensione di conduzione, 359


Dadi e Volt delle colonne BASIC Stamps, 342 Dispositivo, parallelo, 191
DATA, 272 DIRH, 193
Datalogging (raccolta dati), 218 Display a 7 segmenti, 183, 184, 183–185
DCD, 286 DO…LOOP, 43, 87, 133
DEBUG, 39 DTMFOUT, 268
DEBUG, Caratteri di controllo, 139 Dual Tone Multi Frequency, 268
CLREOL, 180 -E-
CR, 27 Eco, 131
CRSRUP, 139 Editor (del BASIC Stamp), 17
HOME, 80 EEPROM, 218
DEBUG, Formattatori, 139 Elaborazione parallela, 346
$ (Formattatore esadecimale), 222 Elettrolitico, condensatore-, 155
% (Formattatore binario), 195 Elettrone, 37, 38, 355
? (simbolo = x formattatore), 48 Emettitore
DEC (Formattatore decimale), 129, 222 di fototransistor, 215
DEBUGIN, 129 di Transistor, 308
DEC, 129, 222 END, 68
Decimale Errore di intervallo di variabile, 131
- formattatore DEC, 222 Errore di rollover a 16-bit, 131
- numeri, 198, 219 Esadecimale, formattatore - $, 222
Descrizione funzionale, 327 Esadecimali, numeri -, 183
Diagramma concettuale, 327 Esadecimale a decimale, conversione da -,
220
Diagramma di temporizzazione , 112
Esplorazione (polling), 84
Diesis, nota - (sharp), 270
Esplorazione, esempio di -, 87
Diodo, 32
Etichetta, 232
Diodo emettitore di luce (Light Emitting Diode).
Vedi LED EXIT, 299, 335
Diodi emettitori di luce, 32
Pagina 368 ·Che cos’è un microcontrollore?

-F- HOME, 80
Farad, 177 HomeWork board
Fetch and execute (Vai a prendere ed esegui), scheda- e divisore di tensione del circuito
305 RCTIME, 168
Finestrella di Ricezione, 130 -I-
Finestrella di Trasmissione, 129-130 I/O pin (vedi Pin I/O)
Flat, nota - (bemolle), 270 IF…ELSEIF…ELSE, 79
FlexiForce, Sensore- , 339 IF…THEN, 82
FOR…NEXT, 45, 133 IF…THEN…ELSE, 75
Formattatore decimale DEC, 222 IN3, 71
Formattatori, DEBUG. Vedi DEBUG, Incavo di riferimento, 311
Formattatori
Interi, matematica con - , 287
Fotoresistenza, 211
Interferenza, 268
Fototransistor, 210
Interprete, chip -, 305
Frazioni, 90
Isteresi, 244
FREQOUT, 263, 267
-J-
Frequenza, 264
-K-
Funzionale, descrizione -, 327
KCL (Kirchhoff Current Law, legge di Kirchhoff
-G- sulla corrente), 358
Giunzione, capacità di -, 251 kHz, 263
Google, 343 Kilo, 360
GOSUB, 231 Kirchhoff, Leggi di - (semplificate)
GOTO, 232 Corrente, 359
Grado, 109 Voltaggio, 359
Grafico, tracciamento- di dati Kit delle parti di un telecomando a IR, 324
software per il ----, 228 KVL, (Kirchhoff Voltage Law legge di Kirchhoff
sul voltaggio) 358
-H-
-L-
hertz, 261, 263
LCD, Display a- , 320
HIGH, 42, 197
LCD Seriale 2x16, 340
Indice · Pagina 369

LED, 29 Microsecond, 113


Bicolore, 54 Milli, 360
Come sensore di luce, 250 Millepiedi, Progetto, 16
Disegno di parte e simbolo di schema del Millisecondo, 42, 113
-, 33
Mini-timer, progetto - video di "Costruisci il tuo -
Legge di Ohm, 246, 359 ", 350, 351
Leggi di Kirchhoff su Voltaggio e Corrente, 358 Misuratore di Luce, 229
Linguaggio per trasferire testi di suonerie Motore, controllore di-, 341
(RTTTL), 288
Movimento,. Sensore PIR di -, 338
LOOKDOWN, 201, 202
Musica
LOOKUP, 198
Punto (nota puntata), 281
LOW, 42, 197
Riposi (Pause), 275
Luce, Misuratore di -, 229
Tempo, 277
Luce solare, 216
Mistero, numeri del-, 336
Luce Visibile, 210
-N-
Lunghezza d'onda, 211
Nanometro, 211
-M-
Naturali, tasti -, 270
mA, 360
nc, 185
Main, -routine (routine principale), 237
Negativa, carica -, 355
Massa (o Terra, Ground) 33, 359
Neutro, 37
Matematica, 287
Neutrone, 355
Matematiche, Operazioni, 285
Nib, 48
Memoria
dimensione di variabile -, 48
Mappa di - (Memory Map), 218
Non collegato, 185
Sovrascrivere il programma, 222
Nominale, valore -, 317
Mappa di memoria, 218, 222
NPN, transistor -, 307
Metriche, unità di misura -, 360
Nucleo, 355
Microcontrollore, 13
Numeri
Microcontrollore Propeller, 346
a Base 10, 198
Microfarad, 155
Pagina 370 ·Che cos’è un microcontrollore?

a Base16, 198 dispositivo, 191


a Base 2, 71 Parallelo, condensatori in -, 239
Binari, 71, 193 Parallela, elaborazione -, 346
Decimali, 198 PAUSE, 42
Esadecimali, 198 PBASIC, Linguaggio-
Numeri binari, 71, 193, 195 AND, 82
Numeri decimali, 198, 219 Argomenti, 42
Numeri del mistero, 336 Bit, 48
Nuts and Volts, vedi Dadi e Volt Byte, 48
-O- CLREOL, 180
Offset, 171 CR, 27
Ohm, 355 CRSRUP, 139
Ohm, Legge di -, 246, 359 DATA, 272
Omega Ω, 30 DCD, 286
ON GOSUB, 232 DEBUG, 39
ON GOTO, 232 DEBUGIN, 129
Onde sonore (sound waves), 263, 268 DEC, 129, 222
Operatori PBASIC, vedi PBASIC, operatori DIRH, 193
Operazioni matematiche, 285 DO…LOOP, 43, 87, 133
OR, 82 DTMFOUT, 268
Ottava, 270 END, 68
OUTH, 193 EXIT, 299, 335
Overflow, 290 FOR…NEXT, 45, 133

-P- FREQOUT, 263, 267

Parallax, Servo Standard GOSUB, 231

Diagramma di parte, 101 GOTO, 232

Precauzione, 102 HIGH, 42, 197

Parallelo HOME, 80

bus, 191 IF…ELSEIF…ELSE, 79


Indice · Pagina 371

IF…THEN, 82 */ (Moltiplicazione Media) , 90, 287


IF…THEN…ELSE, 75 DCD, 286
IN, 71 Ordine di esecuzione, 285
LOOKDOWN, 201, 202 Parentesi, 285
LOOKUP, 198 Piezo, vedi Piezoelettrico
LOW, 42, 197 Piezoelettrico, Altoparlante -, 261
Nib, 48 PIN (Direttiva - ), 175
ON GOSUB, 232 Pin I/O, protezione di -, 73
ON GOTO, 232 Pin I/O
OR, 82 Direzione (proprietà) di default, 196
OUTH, 193 registri DIRH e OUTH, 193
PAUSE, 42 Pin Input/Output Vedi Pin I/O
PIN, 175 Pin, mappa dei -, 184, 311
PULSOUT, 112-113 PIR. Sensore - di Movimento, 338
RANDOM, 91 Polling, vedi Esplorazione
RCTIME, 161, 213 Porta COM, 44
READ, 221 Porta COM Virtuale, 22
RETURN, 231 Positiva, carica- 355
SELECT…CASE, 289 Potenziometro, 151
SERIN, 335 AD5220 (- digitale), 311
SEROUT, 335 Presa, potenziometro, 317
STEP, 133 Principale, routine - (Main routine), 237
TOGGLE, 315 Processo, Controllo di - (Process Control), 350
UNTIL, 87, 133 Progetto millepiedi, 16
WHILE, 133 Progetto mini-timer - video di "Costruisci il tuo -
", 350, 351
Word, 221
Prodotti per comunicazioni, 342
WRITE, 221, 222
Programma
PBASIC, Operatori
Cicli, - annidati, 266
** (Moltiplicazione Alta), 287
Pagina 372 ·Che cos’è un microcontrollore?

Sovrascrittura, 222 LampeggiaEntrambiILed.bs2, 53


Programmi, Listati dei- LedAccesoSpento.bs2, 42
Cap01Pr01_Aggiungi1234.bs2, 28 LedAccesoSpentoDieciVolte.bs2, 47
Cap01Pr02_ PrimoProgrVostroTurno.bs2, LedControllatoAPulsante.bs2, 76
28
LeggiMisureDiLuceDaEeprom.bs2, 225
Cap02Pr01_Conteggio.bs2, 64
LeggiPotConRcTime.bs2, 164
Cap03Pr01_TempoReazioneDueGiocator
i.bs2, 96 LeggiStatoPulsante.bs2, 72

Cap04Pr01Sol1_IntBlocco.bs2, 147 MemorizzaMisureDiLuceInEeprom.bs2,


222
Cap04Pr01Sol2_IntBlocco.bs2, 148
MicroMusicaConRtttl.bs2, 295
Cap05Pr01_ControlloServoConPot.bs2,
179 MisuratoreDiLuce.bs2, 235

Cap06Pr01_FishAndChips.bs2, 208 MusicaConPiuCaratteristiche.bs2, 282

Cap07Pr01_Controllo_Scuri.bs2, 258 NoteEDurate.bs2, 277

Cap07Pr02_ Controllo_Scuri_Extra.bs2, PotDigitaleControllatoDaTerminale.bs2,


259 318

Cap08Pr01_GeneraTonoAPuls.bs2, 304 PotDigitaleSuGiu.bs2, 314

Cap09Es01_ImpostaPresaAZero.bs2, PotDigitaleSuGiuConToggle.bs2, 315


321 ProtoMicroAllarme(Dev-009).bs2, 333
Cap9Pr01_PotDigitaleFotoControllato.bs2 ProvaLedBiColore.bs2, 59
, 323
ProvaFototransistorBinario.bs2, 249
CentraServo.bs2, 113
ProvaFototransistor.bs2, 215
CicliAnnidati.bs2, 266
ProvaPiezoConFreqout.bs2, 247
ControlloAPulsanteDiDueLed.bs2, 79
ProvaSecondoLed.bs2, 52
ControlloServoAPulsanti.bs2, 143
ProvaSegmentoConAltoBasso.bs2, 192
ControllaServoConDebug.bs2, 131
RallentaSegnaliServoPerLed.bs2, 122
ControlloServoConPot.bs2, 173
RcTimerEsplorato.bs2, 159
ControlloServoConPotEUsoDIrettive.bs2,
175 RicercaInversaSemplice.bs2, 202

CoppiaDiToni.bs2, 268 RicercaSemplice.bs2, 193

DoReMiFaSolLaSiDo.bs2, 271 ScegliTipoConCaratteri.bs2, 292

FototransistorAnalogicoABinario.bs2, 242 ScegliTipoConValori.bs2, 291


Indice · Pagina 373

SubroutineSemplici.bs2, 232 Resistenza (componente), 30, 41


TempoReazione.bs2, 85 come protezione di pin I/O , 41
ToniAzione.bs2, 268 Disegno di parte e simbolo di schema, 31
TrePosizioniServo.bs2, 122 protezione pin I/O, 73
TwinkleTwinkle.bs2, 274 Rinforzo (Pull-up) e Indebolimento (Pull-
down), 73
VelocitiaServo.bs2, 137
Valori con Codice Colori, 31
VisualizzaCifre.bs2, 193
Variabile, Flexiforce, 338
VisualizzaCifreConRicerca.bs2, 199
Variabile, potenziometro digitale, 311
VisualizzaQuadrante.bs2, 204
Variabile, potenziometro, 151
Prova di concetto, 326
Resistenza (proprietà fisica), 355
Propeller, microcontrollore, 346
Riposi o pause, in musica, 275
Protone, 355
RETURN, 231
Prototipi, Costruire - , 325
Reveille (sveglia mattutina), 294
Prototipi, area per i -, 34
Ringing Tone Text Transfer Language, 288
Pseudo codice, 76
Robotica con il Boe-Bot, 347
Pseudo random, 92
Rollover, errore di -, 131
Resistenze di Pull-up e Pull-down, 73
Routine principale (Main routine), 237
PULSOUT, 112-113
RTTTL, 288
Punto, in musica, 281
-S-
Pulsante, 66
Scalatura o riduzione in scala, 171
Attivo-alto, 74
Schema (di circuito, 38
-R-
Simbolo schematico, 31
Raccolta dati (Datalogging), 218
Schmitt, trigger di -, 245
RANDOM, 91
Seed value for pseudo random numbers, 86,
RCTIME, 161, 213 87
READ, 221 SELECT…CASE, 272
Ricevere, 65 Sentire, 65
Riferimento, 359 Sensore FlexiForce, 339
Riferimento, incavo di-, 311 Sensore PIR.di Movimento, 338
Pagina 374 ·Che cos’è un microcontrollore?

Sensori (prodotti), 341 Etichetta, 232


Sensori Applicati (Applied Sensors), 349 Limite di annidamento, 234
Seriale, 2x16 LCD - , 340 Suoni di Azione, 264
SERIN, 335 -T-
SEROUT, 335 Take Me Out To The Ball Game (canzone per
suoneria), 363
Servo
Tasti naturali, 270
Avvertenza su alimentazione, 108
Telecomando, Kit di parti per - IR, 344
Avviso di precauzione, 102
Tempo, 277
Diagramma di Temporizzazione, 112
Terminale di Debug
Servo Standard Parallax, vedi Parallax
Finestrelle di Trasmissione e Ricezione,
Servo, ponticello tra i connettori del-, 103
129-130
Sharp, note - (diesis), 270
Terra (pianeta-), Misure dei clima, 350
Simboli di programma, 218, 222, 305
Terra (pianeta-), Scienza della -, 350
Sistema incorporato, 13
Terra (o Massa, Ground) 33, 359
Smart Sensors and Applications, 350
Testo "Smart Sensors and Applications", 349
Smart Sensors and Applications, Testo -, 341
Temporizzazione, diagramma di-, 112
Software per tracciamento grafico di dati, 228
TOGGLE, 315
Sound waves. Vedi Onde sonore
Tolleranza, 32, 317
Sovraccarico di codice, 89
Tracciamento grafico di dati
Sovrapposizione, 268
software per il ----, 228
Sovrascrivere il programma, 222
Transistor, 212, 308
Specifica, 328
Simbolo di schema e disegno di parte,
StampPlot LITE, 228 308
Stamps in Class. diagramma di flusso -, 349 Transistor NPN, 307
Stamps in Class, Mini Progetti, 350 Transistor-transistor logic (TTL), 245
STEP, 133 Trasmettere, 65
Subroutine, 231 Trigger di Schmitt, 245
Annidamento di -, 234 TTL, 65
Chiamata, 233 Twinkle Twinkle Little Star, 273-274
Indice · Pagina 375

-U- Vdd, 359


UNTIL, 87 Video tutorials, 350
USB drivers, 22 Video di Build Your Own Mini Timer project,
351
-V-
Vin, 359
Vai a prendere ed esegui (Fetch and execute),
305 Virtuale, Porta COM -, 22

Valore nominale, 317 Visibile, Luce -, 210

Variabile, errore intervallo di -, 131 Volt, 355

Variabile, resistenza -, 339 Voltaggio, 38, 355

potenziometro (a rotazione), 151 Voltaggio, circuito per la caduta di, 157

potenziometro (digitale), 311 Voltaggio, divisore di -, 168

Variabili, 48 Vss, 359

Bit, 48 -W-
Byte, 48 WHILE, 133
DIRH, 193 Word (parola), 48
Inizializzazione, 86 Dimensione variabile, 48
Memorizzazione in RAM, 224 WORD, modificatore -, 221
Nib, 48 WRITE, 221, 222
OUTH, 193 -Z-
Overflow, 290 Zoccoli (Sockets), 34
Parola (word), 47 -Ω-
Regole per i nomi, 47 Ω omega, 30
Pagina 376 ·Che cos’è un microcontrollore?
Pagina 378 ·Che cos’è un microcontrollore?

Le parti e le quantità sono soggette a cambiamento senza preavviso. Le parti possono


essere diverse da quanto mostrato in questa figura. Se avete domande su quanto ricevuto,
vi preghiamo di segnalarcelo all’indirizzo e-mail stampsinclass@parallax.com.