Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
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?
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.
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.
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
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.
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.
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
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
Figura 1-6
Tagliaerba robotizzato
con Modulo
Microcontrollore
BASIC Stamp 2
Figura 1-7
Esempi di microcontrollori per
uso ambientale ed Aerospaziale
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.
Figura 1-8
La pagina del software
BASIC Stamp Editor al
sito www.parallax.com/
basicstampsoftware
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.
Figura 1-10
Finestra di scarico File
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
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.
Figura 1-13
Finestra
dell’installatore del
BASIC Stamp Editor
Cliccate Next.
Figura 1-14
Messaggio
Install USB Driver
Lasciare il box
spuntato,e cliccate
Next.
Pagina 22 · Che cosa è un microcontrollore?
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.
Figura 1-16
Installazione del
Editor BASIC
Stamp completata
Cliccare Finish.
Figura 1-17
Icona del Editor BASIC
Stamp sul Desktop
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.
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.
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?
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
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
END
P2. Le ultime tre righe DEBUG possono essere cancellate. Occorre un CR aggiuntivo
dopo il messaggio "Ciao".
END
Figura 2-1
Luci indicatrici
Le luci indicatrici
sono d’uso comune
in molti dispositivi
d’impiego quotidiano.
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:
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
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 Ω:
Figura 2-4
Disegno di Parte e simbolo
schematico di un LED
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.
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.
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:
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.
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.
-
- -
+ - 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.
- - - - -
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.
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.
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!
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.
'{$STAMP BS2}
'{$PBASIC 2.5}
DO
HIGH 14
PAUSE 500
LOW 14
PAUSE 500
LOOP
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.
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
Aprite LedAccesoSpento.bs2.
Cancellate completamente il comando DEBUG.
Eseguite il programma modificato mentre osservate il vostro LED.
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?
HIGH 14
PAUSE 250
LOW 14
PAUSE 250
LOOP
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
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.
' DO
HIGH 14
PAUSE 1000
LOW 14
PAUSE 2000
' LOOP
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
FOR contatore = 1 TO 10
DEBUG ? contatore
HIGH 14
PAUSE 500
LOW 14
Pagina 48 · Che cosa è un microcontrollore?
PAUSE 500
NEXT
END
…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:
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
DEBUG ? contatore
HIGH 14
PAUSE 500
LOW 14
PAUSE 500
NEXT
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.
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?
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.
modificate per controllare il circuito a LED collegato a P15. Invece di usare HIGH 14 e
LOW 14, userete HIGH 15 e LOW 15.
DO
HIGH 15
PAUSE 500
LOW 15
PAUSE 500
LOOP
DO
HIGH 14
HIGH 15
PAUSE 500
LOW 14
LOW 15
PAUSE 500
LOOP
HIGH 14
LOW 15
PAUSE 500
LOW 14
HIGH 15
PAUSE 500
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.
Figura 2-16
LED
bicolore Area LED Bicolore
piatta
verde rosso Simbolo schematico (a
sinistra) e disegno di parte
pin (a destra).
lungo
Figura 2-17
LED Bicolore e
tensione applicata
Verde (sinistra),
rosso (centro) e
LED LED nessuna luce
verde rosso LED (destra)
spento
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).
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?
2
LOW = Vss P14
Figura 2-20
Prova del LED bicolore
con il BASIC Stamp
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.
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
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
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.
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).
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
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
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 .
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)
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.
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?
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
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.
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
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.
Figura 3-8
Terminale di Debug che visualizza gli
stati di un pulsante
DO
DEBUG ? IN3
PAUSE 250
LOOP
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.
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).
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.
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
DO
DEBUG ? IN3
IF (IN3 = 1) THEN
HIGH 14
PAUSE 50
LOW 14
PAUSE 50
ELSE
PAUSE 100
ENDIF
LOOP
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
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.
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
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
PAUSE 50
LOOP
IF (IN3 = 1) THEN
HIGH 14
PAUSE 50
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.
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
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.
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?
PAUSE 1
ContaTempo = ContaTempo + 1
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
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.
Le istruzioni DO...LOOP possono essere annidate. In altre parole, potete mettere una
DO...LOOP all’interno di un’altra.
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.
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.
PAUSE 1
ContaTempo = ContaTempo + 1
L’ultima istruzione nel programma è LOOP, che rimanda il programma indietro alla
primissima istruzione DO.
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
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.
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!
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
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?
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.
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.
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
Aspettare che entrambi i pulsanti siano premuti prima di accendere il LED rosso,
usando l’operatore AND:
ContaTempoB = ContaTempoB + 1
ENDIF
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
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.
LOW 15
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
DEBUG "Per giocare di nuovo, premere ", CR ' Istruz. nuovo gioco.
DEBUG "ancora i pulsanti.", CR, CR
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
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?
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.
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
Figura 4-3
Reset
Scollegate Energia
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?
La Figura 4-5 mostra lo schema circuitale che costruirete sulla vostra Board of 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
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.
Figura 4-8
Parte Extra per circuito Servo della
HomeWork Board BASIC Stamp
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.
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
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.
Bianco
Rosso
Figura 4-11
Nero Servo collegato ad
una HomeWork
Board
Controllo del Movimento · Pagina 109
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°.
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.
Figura 4-15
Intervallo delle
posizioni possibili del
centro
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.
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
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.
DO
PULSOUT 14, 750
PAUSE 20
LOOP
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.
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!
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
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.
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
Se il vostro comando è PULSOUT 14, 500, l’impulso durerà per 500 × 2 μs = 1000 μs =
1.0 ms. (Ricordate, 1000 μs = 1 ms.)
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
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
Figura 4-21
Mano con animazione elettronica
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.
FOR contatore = 1 to 15
PULSOUT 14, 7500
PAUSE 200
NEXT
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
Figura 4-22
TrePosizioniServo.bs2
Il programma fa
mantenere al servo
ciascuna posizione
per circa tre secondi.
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.
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°.
PAUSE 1000
END
Controllo del Movimento · Pagina 125
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.
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
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
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.
In questa attività, programmerete il BASIC Stamp per ricevere due valori dal terminale di
Debug, e poi usare questi valori per controllare il servo:
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
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
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
Figura 4-25
Finestrelle del terminale di Debug
← Finestrella di Trasmissione
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.
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.
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!
PAUSE 1000
DEBUG CLS, "Tempo esecuzione Servo:", CR,
Pagina 132 · Che cosa è un microcontrollore?
DO
LOOP
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
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
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
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.
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.
Eseguitelo e verificate che si ripete fin quando non digitate un valore
nell’intervallo corretto da 350 a 1150.
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
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à.
PAUSE 1000
DO
DEBUG "Larghezza impulso aumentata di 8", CR
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.
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.
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
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.
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
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
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 "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.
PAUSE 1000
Controllo del Movimento · Pagina 149
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
LOOP
Misure di rotazione · Pagina 151
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
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
Figura 5-5
Circuito-prova
Potenzometro-
LED
Figura 5-6
Manopola del
(a) (c) (e) potenziometro
3300 µ
Figura 5-7
Simbolo schematico e disegno di
3300 µF
parte di un condensatore da 3300 µF
F
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.
DEBUG CLS
HIGH 7
DEBUG " Condensatore in carica...", CR
FOR contatore = 5 TO 0
PAUSE 1000
DEBUG DEC2 contatore, CR, CRSRUP
NEXT
DO
PAUSE 100
Contatempo = Contatempo + 1
DEBUG ? IN7
DEBUG DEC5 Contatempo, CR, CRSRUP, CRSRUP
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
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
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)
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?
PAUSE 1000
DO
Misure di rotazione · Pagina 165
HIGH 7
PAUSE 100
RCTIME 7, 1, tempo
DEBUG HOME, "tempo = ", DEC5 tempo
LOOP
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.
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.
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
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:
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.
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).
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:
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
PAUSE 1000
DEBUG "Il programma è in esecuzione!"
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
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:
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
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.
PinServo PIN 14
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
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.
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
PAUSE 1000
DEBUG "Il programma è in esecuzione!"
Pagina 180 · Che cosa è un microcontrollore?
DO
LOOP
PAUSE 1000
DO
RCTIME 7, 1, tempo
tempo = tempo + 649 ' Scala tempo a range servo
LOOP
Misure di Luce · Pagina 183
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.
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
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
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
1 kall)
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
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
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.
'{$STAMP BS2}
'{$PBASIC 2.5}
PAUSE 1000
DEBUG "Pin I/O", CR,
"-------", CR
FOR ContatorePin = 8 TO 15
NEXT
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.
'{$STAMP BS2}
'{$PBASIC 2.5}
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).
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.
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.
indice = 2
PAUSE 1000
DEBUG ? indice
DEBUG ? valore, CR
END
'{$STAMP BS2}
'{$PBASIC 2.5}
OUTH = %00000000
DIRH = %11111111
PAUSE 1000
FOR indice = 0 TO 9
LOOKUP indice, [ %11100111, %10000100, %11010011,
%11010110, %10110100, %01110110,
%01110111, %11000100, %11110111, %11110110 ], OUTH
DIRH = %00000000
END
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?
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.
valore = 167
PAUSE 1000
DEBUG ? valore
DEBUG ? indice, CR
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.
valore = 35
LOOKDOWN valore, <= [ 7, 19, 28, 85, 167 ], indice
Figura 6-17
Visualizzazione della posizione del
Potenziometro col Display LED a 7
segmenti
'{$STAMP BS2}
'{$PBASIC 2.5}
PAUSE 1000
DEBUG "Programma in esecuzione!"
OUTH = %00000000
DIRH = %11111111
DO
HIGH 5
PAUSE 100
RCTIME 5, 1, tempo
LOOKDOWN tempo, <= [40, 150, 275, 400, 550, 800], indice
LOOP
Misure di Luce · Pagina 205
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
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
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.
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?
'{$STAMP BS2}
'{$PBASIC 2.5}
DO
NEXT
LOOP
Misure di Luce · Pagina 209
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.
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
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
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.
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.
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
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
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.
DO
HIGH 2
PAUSE 100
RCTIME 2, 1, tempo
DEBUG HOME, "tempo = ", DEC5 tempo
LOOP
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.
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.
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.
Questo approccio di conversione lavora alla stessa maniera in altre basi di numerazione,
inclusi i valori decimali in base 10. Ad esempio:
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.
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?
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.
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
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?
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.
PAUSE 1000
NEXT
END
Pagina 226 · Che cosa è un microcontrollore?
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à.
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-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.
PAUSE 1000
DO
LOOP
Prima_Subroutine:
RETURN
Misure di Luce · Pagina 233
Seconda_Subroutine:
RETURN
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
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
PAUSE 3000
RETURN
Potete anche chiamare una subroutine dall’interno di un’altra. Questo evento è detto
annidamento di subroutines.
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.
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”.
PAUSE 1000
GOSUB Ottieni_Tempo_Rc
GOSUB Ritarda
GOSUB Aggiorna_Display
LOOP
' Subroutine
HIGH 2
PAUSE 3
RCTIME 2, 1, tempo
RETURN
PAUSE tempo / 3
RETURN
RETURN
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
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
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 */.
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.
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.
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?
PAUSE 1000
DO
HIGH 2
PAUSE 100
RCTIME 2, 1, tempo
LOOP
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).
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?
5V 5V
1 Logico
≈4.25 V
1 Logico
Nessun Cambiamento
≈1.4 V
0 Logico
≈0.75 V
0 Logico
0V 0V
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.
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
DO
DEBUG ? IN2
PAUSE 250
LOOP
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.
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.
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
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
È 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
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
PAUSE 1000
DO
HIGH 2
PAUSE 1 ' PAUSE 100 -> PAUSE 1
RCTIME 2, 1, tempo
Misure di Luce · Pagina 259
LOOP
PAUSE 1000
DO
HIGH 2
PAUSE 1 ' PAUSE 100 -> PAUSE 1
RCTIME 2, 1, tempo
DEBUG HOME, "tempo = ", DEC5 tempo
LOOP
Frequenza e Suono · Pagina 261
Figura 8-1
Disegno di parte e simbolo
schematico dell’altoparlante
piezoelettrico
Pagina 262 · Che cosa è un microcontrollore?
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
PAUSE 1000
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.
'{$STAMP BS2}
'{$PBASIC 2.5}
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 "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
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
'{$STAMP BS2}
'{$PBASIC 2.5}
PAUSE 1000
NEXT
DEBUG CR
NEXT
END
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?
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).
'{$STAMP BS2}
'{$PBASIC 2.5}
PAUSE 1000
DEBUG "Fatto", CR
END
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
'{$STAMP BS2}
'{$PBASIC 2.5}
PAUSE 1000
END
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
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
NEXT
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.”
'{$STAMP BS2}
'{$PBASIC 2.5}
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
PAUSE 1000
FOR indice = 0 TO 6
NEXT
END
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?
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
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.
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.
'{$STAMP BS2}
'{$PBASIC 2.5}
Durate DATA 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
2, 4, 4, 2
indice = indice + 1
LOOP
END
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
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
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.
Ora che sono state determinate DurataNota e FreqNota, il comando FREQOUT suona la
nota.
Pagina 280 · Che cosa è un microcontrollore?
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
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
Ecco tre ulteriori caratteristiche che possiamo aggiungere ad un programma che esegue
musica:
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
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?
indice = indice + 1
LOOP
Pagina 284 · Che cosa è un microcontrollore?
END
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
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?
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
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
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.
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.
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.
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.
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.
'{$STAMP BS2}
'{$PBASIC 2.5}
DO
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
ENDSELECT
LOOP
La frase SELECT sceglie la variabile valore come quella da cui elaborare i casi.
SELECT valore
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
'{$STAMP BS2}
'{$PBASIC 2.5}
Frequenza e Suono · Pagina 293
DO
DEBUGIN carattere
SELECT carattere
CASE ELSE
DEBUG CR, "Caraetere sconosciuto.", CR,
"Prova uno diverso."
ENDSELECT
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?
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 $.
'{$STAMP BS2}
'{$PBASIC 2.5}
DEBUG "Programma in esecuzione!"
"e,8c,8e,8e,8e,8e,8e,g,8e,8c,8e,8c,8g6,8g6,c."
RETURN
RETURN
RETURN
' -----[ Subroutine – Controlla se '.' Indica 1,5 volte la Durata ]----------
RETURN
Frequenza e Suono · Pagina 299
RETURN
Ecco l’elenco degli elementi in questo programma che dovrebbero, d’ora in poi, esservi
familiari:
Soltanto una direttiva RTTTL_File DATA per volta! Assicuratevi di sostituire, non
aggiungere, la vostra nuova direttiva RTTTL_File DATA.
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.
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
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.
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
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.
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.
C Figura 9-2
B
B Transistor 2N3904
E
2N3904
E
Pagina 308 · Che cosa è un microcontrollore?
Vdd Vdd
Vss Vss
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 .
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
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”.
Vss Vss
P5
P4
P3
P2
P1
P0
X2
Costruire prototipi delle proprie invenzioni · Pagina 313
DO
LOW 5
HIGH 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.
DO
FOR contatore = 0 TO 127
PULSOUT 6,5
PAUSE 10
NEXT
TOGGLE 5
LOOP
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
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
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?
DO
LOOP
RETURN
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:
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.
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.
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.
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 :
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.
' Imposta un valore che può dividere misura RCTIME del fototransistor
' per scalarla ad un intervallo tra 0 e 128
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
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:
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.
LED Piezoaltoparlan
te
Figura 10-1
Potenziometro - Schizzo
-----
concettuale di
Pulsante ------ un
---------- microsistema
antifurto per un
armadietto
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
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.”
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
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.
Elabora_Car:
'... codice contenuto qui omesso
RETURN ' Ritorno da...
Quando avete finito, memorizzate una copia del vostro codice con il nome
MicroAllarmeProvaDiConcetto(v1.0).bs2.
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.
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.
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.
_____________________________
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?
b e h
a j
c f
k
i
d g
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:
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
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.
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
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.
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.
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)
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.
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.
Comprendere i
Kit del Robot Boe-Bot Sensori intelligenti e segnali - Parti e
Applicazioni - Parti e Testo
Testo
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?
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?
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.
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
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.
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.
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.
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?
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
V IR
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
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
Usate VR = 7,3 V per fare l’esercizio in Figura B-3 con una resistenza da 1 kΩ.
Ripetete l’esercizio mostrato in Figura B-4 con una delle resistenze da 470 Ω e
l’altra da 1 kΩ.
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.
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?
Ad esempio:
,2g#.6,
…significa suona la mezza nota G-diesis per 1 ½ la durata di una semi-nota, e suonala
nella 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,
Indice
-$- Apostrofo, 45
$ (Formattatore esadecimale), 222 Area per i prototipi, 34
-%- Argomenti, 42
-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
Parallelo HOME, 80
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?