What’s a microcontroller
WhatITA.doc
WHAT’S A MICROCONTROLLER Guida dello studente per gli ESPERIMENTI 1 - 6 Versione 1.5
Traduzione ing. Angelo Morandi ITIS “A. Bernocchi” - Legnano (Mi)
1
What’s a microcontroller
WhatITA.doc
CONTENUTI
1:.........................................................................................................................................................5
ESPERIMENTO #
W WA AH HTT’’ss A AM MIIC CR RO OC CO ON NTTR RO OLLLLE ER R ........................................................................................................5
C CO OM MPPO ON NEEN NTTII R RIIC CH HIIEESSTTII.........................................................................................................................................6 C O N O S C E R E A B A S E A CO ON NO OS SC CE ER RE E LLLA AB BA AS SE ETTTTTTA A ..............................................................................................................................................7 CONNETTIAMO IL PRIMO LED ..................................................................................................................................8 CONNESSIONE DEL SECONDO LED............................................................................................................................8 CONNESSIONE DELLA BASETTA AL PC......................................................................................................................8 SSC CA AR RIIC CA AR REE:: .............................................................................................................................................................10 O R A A N A L I Z R A A N A L I Z M O N O S R O P R O G R A M M A ORA ANALIZZZZIIIAAAM MO O IIILLL N NO OS STTTR RO OP PR RO OG GR RA AM MM MA A:: ..............................................................................................................11 Q U E S T I O N S QUESTIONS ...............................................................................................................................................................14 C CH HA ALLLLEEN NG GEE!! ............................................................................................................................................................14 C CO OSSA AH HO O SSTTU UD DIIA ATTO O?? ............................................................................................................................................15 PPEER RC CH HEE’’ LL’’H HO O SSTTU UD DIIA ATTO O?? ..................................................................................................................................15
ESPERIMENTO #
2:......................................................................................................................................................16
E ES SP PLLO OR RA AR RE E IILL M MO ON ND DO OE ES STTE ER RN NO O...............................................................................................16 PPA AR RTTII R RIIC CH HIIEESSTTEE:: ...................................................................................................................................................16 C O S T R U I A COSTRUIAM MO OLLO O:: ....................................................................................................................................................17 M A I M M A R G O PPR O:: .............................................................................................................................................17 OLLO ROGRAMMIAMO S N O I T S E U Q S N O I T S E U QUESTIONS ...................................................................................................................................................................22 C GEE .............................................................................................................................................................22 NG ALLLLEEN HA CH O H A S O C O??........................................................................................................................................23 ATTO DIIA UD COSA HO SSTTU ? T I N R A R E L I D I D Y H W T I N R A R E L D I D Y H WHY DID I LERARN IT? .................................................................................................................................................23 H HIISS?? ......................................................................................................................................23 APPPPLLYY TTH N II A AN CA WC OW HO
ESPERIMENTO #
3:......................................................................................................................................................24
M E ...........................................................................24 RE OR OLLLLO RO NTTR ON CO OC RO CR MIIC O ccoonn iill M NTTO EN ME VIIM OV MO PPA HIIEESSTTEE ....................................................................................................................................................24 CH RIIC RTTII R AR C O!! .......................................................................................................................................................24 CIILLO UIISSC RU OSSTTR CO A I M M A R G O PPR O !! .................................................................................................................................................26 MO ROGRAMMIAM I O M A I Z Z I L A N A A R O A M M A R G O I O M A I Z Z I L A N A A R A..............................................................................................................................27 MA MM AM RA GR OG ORA ANALIZZIAMO ILLLPPPRRRO E G N E L L A H C CHALLENGE .............................................................................................................................................................30 C GEE .............................................................................................................................................................30 NG ALLLLEEN HA CH W WHHHAAATTTHHHAAAVVVEEE II LLLEEEAAARRRNNNEEEDDD?? .............................................................................................................................................31 PPEER O?? .................................................................................................................................31 ATTO AR RA MPPA O IIM HO CH HEE’’ LL’’H RC C O?? .............................................................................................................................31 AR RLLO OU UTTIILLIIZZZZA OSSSSO OM MEE PPO CO
ESPERIMENTO #
4:......................................................................................................................................................32
S E....................................................................................................................32 ON NE OM MA AZZIIO AU UTTO EA CE PLLIIC SE EM MP PPA AR RTTII R RIIC CH HIIEESSTTEE ....................................................................................................................................................33 PPR O G R A M ROGRAMM MIIA AM MO O!! ..................................................................................................................................................34 D O M A N D E DOM ANDE ..................................................................................................................................................................39 C CH HA ALLLLEEN NG GEE!! ............................................................................................................................................................40 W WHHHAAATTTDDDIIIDDD II LLLEEEAAARRRNNN IIITTT?? .................................................................................................................................................41 W WHHHAAATTTHHHAAAVVVEEE II LLLEEEAAARRRNNNEEEDDD?? .............................................................................................................................................42
ESPERIMENTO #
5:......................................................................................................................................................43
M MIIS SU UR RA AD DII U UN N IIN NP PU UTT..................................................................................................................................43 PPA AR RTTII R RIIC CH HIIEESSTTEE ....................................................................................................................................................43 PPR O G R A M ROGRAMM MIIA AM MO O !! .................................................................................................................................................45 S T I O N S Q U E QUESTIONS ...............................................................................................................................................................48 C NG GEE !! ...........................................................................................................................................................48 CH HA ALLLLEEN W WHHHYYYHHHAAAVVVEEE II LLLEEEAAARRRNNNEEEDDD?? ...............................................................................................................................................49
2
What’s a microcontroller
WhatITA.doc
W WHHHYYYDDDIIIDDD II LLLEEEAAARRRNNN IIITTT?? ...................................................................................................................................................49 H O W C A N A P P Y H S HO OW WC CA AN N II A AP PP PLLLY Y TTTH HIIIS S? ? ..............................................................................................................................................50 ESPERIMENTO #
6:......................................................................................................................................................51
D DA AM MA AN NU UA ALLE EA AD DIIG GIITTA ALLE E ......................................................................................................................51 C CO OM MPPO ON NEEN NTTII ...........................................................................................................................................................51 C O S T R U I A M COSTRUIAMO OLLO O !! ...................................................................................................................................................52 PPO G R A M M I A M O OGRAMMIAMO !! ....................................................................................................................................................54 Q U QUEESSTTIIO ON NSS ...............................................................................................................................................................58 C H A L L E N CHALLENG GEE !! ...........................................................................................................................................................59 W WHHHYYYHHHAAAVVVEEE II LLLEEEAAARRRNNNEEEDDD?? ...............................................................................................................................................59 W WH HYY D DIID D II LLEEA AR RN N IITT ?? ............................................................................................................................................60
3
What’s a microcontroller
WhatITA.doc
Note del traduttore Ho affrontato la traduzione dei tre manuali 1. EARTH MEASUREMENTS 2. BASIC ANALOG AND DIGITAL 3. WHAT’S A MICROCONTROLLER dopo essermi reso conto di quanto fosse difficoltosa ed approssimata la loro comprensione da parte dei miei studenti e soprattutto da parte mia e dei miei colleghi. Il mio maggior problema, di fronte ad un testo tecnico in inglese, è che a scuola mi hanno insegnato solo il francese ed il tedesco; e purtroppo mi sono reso conto di quanto fosse necessario un mio aggiornamento soprattutto dei termini tecnici in inglese. Ho voluto rendere disponibile a chiunque questa mia fatica, sperando in un benevolo atteggiamento del lettore nei riguardi di qualche mia immancabile approssimazione. Ho cercato di rispettare, quasi alla lettera, il testo, cercando di interpretare al meglio i “modi di dire” dell’inglese; ho avuto un valido aiuto dall’utilizzo del traduttore “Babylon”, scaricabile dall’omonimo sito in internet. Ho lasciato in inglese le ultime parti dei paragrafi, chiamate CHALLENGE, perché convinto della necessità che gli studenti debbano comunque leggere, tradurre, capire, ragionare con termini tecnici in inglese; considerando che, per esempio, ogni apparecchiatura, dispositivo, componente elettronico, materiale, sistema tecnico è costruito, commercializzato, divulgato e venduto con pubblicazioni scritte in inglese. Anzi, con l’aiuto di un proiettore, chiedevo il significato dei termini e delle frasi, sollecitando una specie di gara tra gli studenti ad aiutare il docente “ignorante in inglese” a tradurre e spiegare le frasi lette. Da ultimo, questi argomenti sono stati utilizzati dalla professoressa di inglese come base per la propria didattica nella classe.
Ing. Angelo Morandi Docente di Elettrotecnica e Sistemi Automatici ITIS “A. Bernocchi” – Legnano (Mi)
Per chi volesse contattarmi per consigli o critiche la mia e-mail ,è:
[email protected] Legnano, 03-03-03
4
What’s a microcontroller
WhatITA.doc
ESPERIMENTO #1: W WA AH HTT’’ss A AM MIIC CR RO OC CO ON NTTR RO OLLLLE ER R Molti di noi sanno cosa e’ un computer. Esso di solito ha una tastiera, un monitor, una CPU (Central Processing Unit), una stampante e un mouse. Questi tipi di computer come i Mac o i PC, sono essenzialmente progettati per comunicare con l’uomo. Database management, analisi finanziaria, o ogni “word-processing” sono tutti eseguiti all’interno della “grande scatola” che contiene la CPU, la memoria, l’hard-disk, etc… L’attuale “computing”, comunque, ha luogo nella CPU. Se tu ci pensi, lo scopo di un monitor, della tastiera, del mouse e la stampante è “collegare” la CPU col mondo esterno. Ma sapevi che ci sono computer tutt’intorno a noi, usando programmi, facendo calcoli, non interagendo direttamente con l’uomo? Questi computer sono nella tua auto, sullo “Space Shuttle”, nei giochi del tuo fratellino, e potrebbero perfino essere nel tuo asciugacapelli. Noi chiamiamo questi dispositivi “microcontrollers”. Micro perché sono piccoli e controller perché “controllano” le macchine, i gadgets e ogni cosa. Il microcontroller è poi per definizione, progettato per collegare la macchina con la gente. Essi sono duttili perché puoi costruire una macchina o un dispositivo, scrivere programmi per te automaticamente. Ci sono un’infinità di applicazioni per i microcontroller. L’unico limite è la tua immaginazione! Sono possibili centinaia (se non migliaia) di differenti variazioni del microcontroller. Alcune sono programmate e prodotte per specifiche applicazioni così come il controllo del tuo forno a microonde. Altre sono riprogrammabili, che significa che possono essere usate per molte e molte applicazioni differenti. I microcontroller sono incredibilmente versatili, lo stesso dispositivo Cos’è potrebbe controllare un modello di missile, un tostapane, il sistema P.C.B: Circuito stampato su di antibloccaggio dei freni della tua auto. scheda. I circuiti Questo esperimento ci introdurrà ad un microcontroller molto complessi elettronici popolare chiamato BASIC Stamp. richiedono molte Il BASIC Stamp è un sofisticato apparato di insiemi di circuiti, tutti connessioni tra i vari assemblati in un piccolissimo circuito stampato (PCB). componenti. Una P.C.B. è semplicemente un pezzo rigido in fibra di vetro (solitamente) che ha molte piste di rame incise su di esso. Questi fili trasportano i segnali tra i vari componenti del circuito.
Questa è una piccola raffigurazione del modulo Basic Stamp II. L’attuale modello ha le dimensioni di un francobollo. I programmi scritti per il Basic Stamp sono realizzati con una speciale versione del linguaggio basic (chiamato Pbasic).Molti altri microcontroller richiedono altre forme di 5
What’s a Microcontroller
WhatITA.doc
programmazione che possono essere molto difficili da imparare. Con il Basic Stamp, tu puoi creare circuiti semplici e programmi in pochi minuti (se sai come fare!). Comunque, non bisogna farsi incantare pensando che tutto il Basic Stamp possa essere “semplice”, molti sofisticati componenti commercializzati sono creati e venduti, usando il Basic Stamp come un cervello. Quando noi creiamo dispositivi che hanno un microcontroller che agisce come un cervello, in molti casi noi tentiamo di imitare le operazioni del corpo. Il tuo cervello si basa su informazioni ordinate per prendere decisioni.Tali informazioni si acquisiscono attraverso vari sensi come la vista, l’udito, il tatto etc…Questi sensi percepiscono ciò che succede nel “mondo reale”, e mandano le informazioni al tuo cervello attraverso ”processi”. Comunque, quando il tuo cervello prende una decisione, manda segnali esterni al tuo corpo per fare qualcosa nel “mondo reale”. Utilizzando gli “impulsi” dei i tuoi sensi, e le azioni provenienti dalle gambe, braccia, mani etc…, il tuo cervello è un’interfaccia e interagisce con il mondo eterno. Guidando per strada, i tuoi occhi percepiscono un cervo che sta correndo di fronte a te. Il tuo cervello analizza gli impulsi, prende una decisione, e dopo da istruzioni alle tue braccia e mani, facendo girare il volante e le ruote per evitare l’impatto con l’animale. Questi impulsi/decisioni/azioni sono integrati nel microcontroller. Noi li chiamiamo imput/output o I/0 per abbreviare. La prima lezione ti introdurrà sulle funzioni di “input” del Basic Stamp, e le lezioni seguenti introdurranno nuove idee ed esperimenti per le tue prove. Tu puoi usare le idee da queste lezioni per inventare una applicazione per programmare e circuiti. Per ogni esperimento, hai bisogno di un PC IBM compatibile con S.O. DOS 2.0 o superiore, WIN95/98/o NT4.0. C STTII ES HIIE CH RIIC NTTII R EN NE ON PO MP OM CO (1) (1) (1) (1) (2) (1) (6) (1)
BASIC Stamp II module Scheda Cavo di programmazione LED (diodi emettitori di luce) 470? , ¼ watt resistenza (gialla, viola, marrone) batteria da 9V o un trasformatore connesso alla Board of Education fili conduttori programma BASIC Stamp Editor, o il Dos o Win95
Alcuni sistemi microcontroller (o computer) consistono in due componenti primari: hardware e software. L’hardware è l’effettivo componente fisico del sistema. Il software è una lista di istruzioni che risiedono dentro l’hardware. Noi ora costruiremo l’hardware, e scriveremo un programma software per “controllarlo”. Per ordinare il nostro microcontroller ad agire con il mondo reale, abbiamo bisogno di assemblare alcuni “hardware”. Noi useremo una scheda PCB. Questa board e’ stata creata per semplici connessioni dalla “real world stuff” alla BASIC Stamp. I morsetti sono per l’alimentazione 6
What’s a Microcontroller
WhatITA.doc
(trasformatore o batteria da 9V), cavo di programmazione, e i piedini dell’Input / Output del BASIC Stamp. C’è anche una “zona prototipo” o Che Cos’è basetta (la board bianca con tutti i buchi). E’ questa l’area in cui LED: costruiremo il nostro circuito. Diodo emettitore di luce (led). Uno speciale tipo di diodo semiconduttore, che quando é connesso al circuito elettronico (con una resistenza che limita la corrente) emette una luce. I LED usano una potenza molto bassa, sono adatti per la connessione a dispositivi come lo stamp.
In questo esperimento noi connetteremo 2 LED alla Basic Stamp. I led sono una speciale forma di lampadina che per varie ragioni sono facilmente connettibili ai dispositivi del microcontroller. Ci sono 2 cose molto importanti da ricordare quando connettiamo i led al basic stamp. La prima é che devi sempre essere sicuro che ci sia un resistore connesso come mostra la figura. In questo esperimento il resistore deve valere 470 ohm e un quarto di watt. (Guarda l’appendice C altre informazioni).
Secondariamente bisogna essere certi che la polarità del led sia corretta. C’è un flat spot (smusso) su un lato del led che deve essere connesso a massa. Se la polarità è invertita, il led non potrà lavorare. Il lato flat corrisponde al conduttore più corto del led (catodo).
Connessione di un LED: Non collegare mai un LED alla Stamp senza avere una resistenza (del valore appropriato) nel circuito. La resistenza limita la quantità di corrente ad un livello di guardia tale da proteggere sia il LED che lo STAMP. What’s a
Schema Un progetto elettrico mostra le connessioni tra i componenti, ma non necessariamente come deve essere il circuito fisicamente. Noi usiamo i progetti schematici, perché aiutano a capire come il segnale circola in circuiti complessi.
Quando inserisci un led nella basetta piega i conduttori nel giusto angolo ad una breve distanza dal corpo, perché alcuni led non sopportano uno sforzo sulla plastica. C A T T E S A B A L E R E C S O N O A TA TT ET SE AS BA AB LA EL RE ER CE SC OS NO ON CO Il basic stamp ha un totale di 24 pin come in figura. Alcuni di questi contatti sono usati per connettere il Basic Stamp al pc e alla batteria a 9 volt. Sedici di questi pin sono utilizzabili per connettersi ai segnali esterni. Sulla scheda, tu puoi seguire i conduttori dal modulo del basic stamp alla linea di piedini nella parte sinistra della basetta. Ogni pin del basic stamp e’ sul bordo della basetta, e con i fili puoi collegare i piedini della basetta. E’ importante capire come funziona una basetta. Essa ha molte strisce metalliche che corrono allineate sotto. Queste strisce uniscono i contatti tra loro. Questo rende facile la connessione dei componenti per costruire un circuito elettrico. Per usare la basetta, i piedini del LED e della resistenza dovranno essere messi nei fori (sockets). Questi sockets sono fatti in modo che il componente resti nel posto desiderato. Ogni foro è collegato con uno dei collegamenti che corrono sotto la basetta. Tu puoi collegare differenti componenti mettendoli nei nodi comuni. 7
What’s a Microcontroller
WhatITA.doc
Ogni pin del BASIC Stamp ha un “nome identificativo” associato ad esso. Per esempio il pin #24 è VIN (voltaggio IN). Questo è uno dei connettori per la batteria a 9 V. Quando colleghi la batteria, c’è una connessione dalla batteria a questo pin. Questi pin/segnali che noi adopreremo con questo esperimento sono i seguenti: Pin # 5 6 21
Signal Name P0 Vdd P1 (+5 Volt)
Quando noi programmiamo il BASIC Stamp, ci riferiremo al Signal Name, piuttosto che all’attuale numero del pin. Le figure rappresentano due differenti metodi per mostrare uno schema elettrico. La figura 1 è un progetto “schematico” di un circuito. La figura 2 è lo stesso circuito, ma disegnato come una foto (topografico) che mostra come appare fisicamente il circuito. In ogni esperimento vedrai mostrato uno schema e una figura (finché non arriveremo a lezioni più avanzate). CONNETTIAMO IL PRIMO LED 1. Inserisci un filo in P0 e poi nella basetta come mostrato. Poi inserisci la resistenza nella basetta in serie al filo, ed inserisci la fine della resistenza nell’altra parte della basetta. 2. Inserisci il LED nella basetta in serie con la resistenza. Assicurati che il piedino del LED sia connesso con la resistenza. 3. Inserisci il piedino restante del LED a Vcc (+5V) nella “Board of Education”. CONNESSIONE DEL SECONDO LED 1, Inserisci il filo in P1; inserisci la resistenza nella basetta in serie al filo, e inserisci l’altro capo della resistenza nell’apposito spazio sulla basetta; 2, Inserisci il LED nella basetta in serie al resistore. Assicurati che la parte piatta del LED sia connessa al resistore; 3. Connetti il rimanente piedino dal led a Vcc (+5v) della basetta, usando il filo. CONNESSIONE DELLA BASETTA AL PC 1. Inserire un’estremità del cavo di programmazione alla basetta. 2. Inserire l’altra estremità del cavo a una delle due porte seriali del PC (COM1=9 pin, COM2=25 pin >> usa un adattatore a 9 pin) Questo e tutto! Noi abbiamo creato un circuito”hardware”. Ma non è possibile fare nulla ora. Tutto ciò perché abbiamo bisogno di… 8
What’s a Microcontroller
WhatITA.doc
Quanti di voi sanno come si scrive un programma? Non preoccuparti! Non è difficile! Un programma per computer è niente di più che una lista di istruzioni che un computer (o nel vostro caso, un microcontroller) esegue. Noi abbiamo creato un programma per il microcontroller digitandolo nel PC (utilizzando tastiera e monitor), dopo abbiamo mandato questo “codice”, attraverso il cavo seriale programmatore, al microcontroller. Questo programma (o lista di istruzioni) verrà eseguito all’interno del Basic Stamp.
PROGRAMMA: una serie di istruzioni che sono eseguite da un computer o un microcontroller in una sequenza specifica di operazioni assegnate. I programmi sono scritti in diversi linguaggi come FORTAN; ”C”; BASIC.
Se abbiamo scritto correttamente il programma, esso farà quello che noi vogliamo che faccia. Comunque, se facciamo uno sbaglio, l’apparecchio non funzionerà (o lavorerà male), e noi dovremo rifarlo. Rifacendolo devi prestare attenzione e ripetere l’intero processo; comunque, con più attenzione creerai il programma e, teoricamente, più facile sarà ricostruirlo. Un software ”bug” è un errore nel programma. In ogni modo rifacendolo si impara a trovare l’errore. Il Pbasic per il Basic Stamp ha una serie di comandi selezionabili : 36 per essere esatti. Una lista completa e una descrizione di ogni singolo comando e si trovano nel manuale del Basic Stamp. Per le proposte di questi esperimenti noi vedremo solo quattro comandi. Sono: OUTPUT, PAUSE, GOTO, e OUT. Come menzionato prima, un programma è una lista di istruzioni che sono eseguite in una sequenza determinata dalla struttura del programma stesso. Perciò, quando noi scriviamo un programma, è molto importante tenere in mente la sequenza di esecuzione che desideriamo. Per esempio, se noi vogliamo comprare una soda da una macchinetta, il nostro cervello esegue una lista di comandi per compierlo. Forse qualcosa come… 1. 2. 3. 4. 5. 6. 7. 8.
Inserire $ 1.00 nella macchinetta Aspettare la luce verde e proseguire Premere il bottone per il tipo di soda Vedere se la soda cade nel vassoio Prendere la soda dal vassoio Aprire la soda Bere la soda Burp
Ora, Se il tuo cervello avesse elaborato il seguente programma: 1. 2. 3. 4.
Premere il bottone per il tipo di soda Aprire la soda Inserire $ 1.00 nel vassoio Prendere la soda dal vassoio 9
What’s a Microcontroller
5. 6. 7. 8.
WhatITA.doc
Burp Bere la soda Aspettare la luca verde e proseguire Vedere la soda cadere nel vassoio
Non sarebbe successo molto. I comandi sono gli stessi, ma sono in ordine errato. Una volta che premi il bottone per il tipo di soda (passo #1), il tuo cervello (programma) richiede dei comandi in una sequenza logica. Questo è un errore. Noi umani possiamo cambiare il nostro programma a secondo di quello che succede. Il microcontrollore, invece, non ha la capacità di adattarsi e modificarsi alle nostre serie di istruzioni; essi sono solo capaci di eseguire le esatte sequenze di istruzioni che noi gli diamo. Ok, abbiamo abbastanza conoscenze; avviamo il programma. Connetti la batteria a 9 volt o l’alimentatore alla Board of Education. Connetti la porta seriale del tuo pc alla basetta. Accendi il tuo pc. Il software BASIC Stamp parte in DOS e/o Windows 95/98/NT4.0. Doppio click sull’icona del BASIC Stamp. Fai partire un programma chiamato “Stamp Editor”. Questo è un programma che fu creato per aiutarti a scrivere e scaricare programmi nel microcontrollore BASIC Stamp. S E:: RE AR CA RIIC AR CA SC FYI: Lo Stamp Editor: Se tu stai usando la versione DOS, premendo F1 sulla tastiera ti mostrerà le variabili che hai usato. Premendo lo spazio ti mostrerà 1) le variabili 2) la memoria totale e 3) la memoria in dettaglio. Ora per vedere quanto è grande il tuo programma devi semplicemente premere il tasto ALT e il tasto “m”.
Dopo che un programma è stato creato sul pc, è scaricato con un cavo nella memoria microcontrollore. Il programma e’ poi eseguito nello Stamp.
del
Lo schermo, eccetto alcune parole in alto, è vuoto. In esso creerai il tuo programma. Ora ricorda che stiamo cercando di scrivere il nostro programma utilizzando i componenti della “human interface” (monitor, tastiera, ecc...) che fa parte del tuo pc. Il programma che noi scriveremo non partirà sul pc ma piuttosto deve essere “downloaded” (scaricato) o mandato al microcontroller. Quando il programma avrà ricevuto i dati, il BASIC Stamp eseguirà le istruzioni esattamente come le abbiamo pensate. Digita il seguente programma nell’editor di BASIC Stamp così apparirà come in figura: output 0 reblink: out0 = 0 pause 1000 out0 = 1 10
What’s a Microcontroller
WhatITA.doc
pause 1000 goto reblink Ora premi il tasto “ALT”, digita la lettera “R” (per “run”) e poi premi “INVIO” Quando il menu mostra il comando RUN. Se tutto è andato bene, il LED che è connesso al piedino P0 (pin #5 sulla “Board of Education”) dovrebbe lampeggiare, “on” e “off”. Se ricevi un messaggio che dice, “Hardware not found”, ricontrolla i cablaggi di connessione tra il PC e la “Board of Education” (il nostro circuito) e assicurati che la “Board of Education” sia alimentata. Se ancora non funziona, controlla nel menu “EDIT”, “PREFERENCES option”, e “EDITOR OPERATION tab”. Il default nel settaggio della porta COM dovrebbe essere “AUTO”. Prova a caricare di nuovo (ripremi il tasto “ALT” e poi il tasto “R”). Se ancora non funziona, potresti avere un problema hardware o software! Ricontrolla il tuo programma per essere sicuro di averlo digitato correttamente. Se dopo questi tentativi, hai ancora problemi, chiedi aiuto al tuo professore. O A M M A R G O R P O R T S O N L O M A:: MA MM AM RA GR OG RO PR OP RO TR ST OS NO LN O IIIL MO ORRRAAA AAANNNAAALLLIIIZZZZZZIIIAAAM Il primo comando utilizzato è “output”. Ogni pin I/O (P0 &P15) può essere impostato come un “input” o un “output”. Se vogliamo che il microcontroller accenda e spenga un LED, il microcontroller deve operando con l’esterno. Quindi, per definizione, noi vogliamo che P0 sia un “output”. Risultato di questo primo comando: “output 0” rende P0 un output. (Se volessimo che P1 fosse un output, il comando dovrebbe essere “output1”). Il prossimo passo nel programma è “reblink”; non è veramente un comando, è un’etichetta o un marchio per segnare un certo punto nel programma. Però di questo parleremo più tardi... Ora, il pin # 5 o P0 è un pin di uscita. Nel mondo dei computer, la tensione su questo pin può essere alta o bassa, significa alto voltaggio o basso voltaggio. Un altro modo per definire alto o basso è I/O, 1 per alto e 0 per basso. Pensa ad un interruttore della luce sul muro, quando l’interruttore è in una posizione la lampada è accesa e quando è nell’altra posizione la lampada è spenta. E’ binario - Ci sono solo 2 possibili combinazioni ON o OFF oppure 1 o 0. Non è possibile ottenere una posizione di mezzo, non potrai mai mettere l’interruttore tra ON e OFF. Se vuoi fare accendere il LED, noi abbiamo bisogno che P0 diventi basso o “0”. P0 è azionato come un interruttore che può essere posizionato su ON e OFF, sotto il controllo del programma. I circuiti semplici sono raffigurati in figura 9 (led spento) e figura 10 (led acceso). Il flusso di corrente parte dalla tensione positiva; attraversa resistenze, i LED e arriva a P0 connesso a massa.
11
What’s a Microcontroller
WhatITA.doc
OUT tecnicamente parlando, “out” non è un vero e proprio comando, è un “registro”. Noi lo usiamo per porre un’uscita alta o bassa. Nei futuri esperimenti esploreremo i registri con maggior dettaglio.
Se con il prossimo comando spegnessimo il LED, tutto ciò accadrebbe troppo in fretta per essere visto. Perciò, abbiamo bisogno di rallentare il programma, così che possiamo vedere l’operazione. E quindi la proposta del prossimo comando è: “Pausa 1000”. Questo comando rallenta l’esecuzione per 1000 millisecondi, o 1 secondo. Il prossimo comando è “out0 = 1”. Questo comando porta alta l’uscita di P0, e spegne il LED perché non c’è flusso di corrente (differenza di potenziale nulla). Il successivo è “Pausa 1000” (per un altro secondo). Il LED è sempre spento. goto reblink: è facilmente spiegabile. Durante il corso del programma, quando si incontra il comando “goto”, il programma va ad un altro punto del programma. Nel nostro esempio, noi diremo al programma di ritornare all’etichetta reblink. Quindi il programma salterà tutti i comandi e ripartirà da reblink, in qualunque posizione del programma esso si trovi . Nel nostro programma, l’etichetta “reblink” è sulla seconda linea. Perciò quando l’istruzione “goto reblink:” è attiva, il programma salta fino alla seconda linea, e “loops” ripete la sequenza. E così ogni volta che il programma incontra il comando “goto reblink”. Questo causa una continua accensione e spegnimento del LED. Il “remark” è utile per la comprensione dello svolgimento del programma. Rimarcando o documentando, il tuo programma sarà facile da capire e correggere se c’è un problema. I “remark” nel tuo programma non sono eseguiti come comandi. Sono ignorati dal microcontroller. L’utilità del remark è quella di permettere a noi umani una più facile comprensione di cosa fa un determinato comando nel programma.
12
What’s a Microcontroller
WhatITA.doc
L’apostrofo (‘) è usato per separare i comandi dalla spiegazione del comando stesso. In altra parole, quello che è dopo l’ apostrofo non fa parte del programma. Così, il nostro programma potrà essere “rimarcato” in questo modo: COMANDI Output 0 reblink: out0 = 0 pause 1000 out0 = 1 pause 1000 goto reblink
REMARK ‘pone P0 come output ‘dove il loop inizia il ciclo ‘accende il LED; P0=0 ‘aspetta per 1 secondo, con il LED acceso ‘spegne il LED; P0=1 ‘lascia il LED spento per 1 secondo ‘torna indietro, e fa lampeggiare il LED
Il programma opererà ancora esattamente nello stesso modo, le “note” dopo l’apostrofo sono solo per aiuto, per capire cosa abbiamo scritto. Nota che in questo esperimento abbiamo usato il comando “PAUSE” per sospendere l’esecuzione per X millisecondi. Ricordare che l’istruzione richiede un tempo d’esecuzione. Per esempio, il tempo programmato per i comandi LOW, HIGH, e PAUSE è di circa 0,15 millisecondi ognuno. In media BASIC Stamp esegue 4.000 istruzioni per secondo. A simpler Way Ricorda che ogni pin del Stamp (P0-P15) può essere configurato come un input o un output. Nell’ordine, per rendere il pin un output, usiamo il comando: ”OUTPUT”. Quel pin è un output, possiamo renderlo “low” (livello logico 0) o “high” (livello logico 1), con “OUT=0 (per low) o “OUT=1” (per high). Usando questi comandi, sono necessarie due righe nel nostro programma per rendere il pin output e per renderlo high o low. Questo si puó semplificare. Se tu vuoi rendere P0 output e high (allo stesso tempo), usa semplicemente un comando “high 0” , e viceversa, per rendere P0 un output e low (allo stesso tempo) usa: “low 0”. Il nostro programma d’esempio ora apparirebbe così: reblink: low 0 pause 1000 high 0 pause 1000 goto reblink Il programma funziona esattamente nello stesso modo, è solo che il nuovo comando non solo rende il pin high o low (come “OUT0=0” e “OUT 1=1) ma essi fanno anche diventare il pin un output. In casi semplici (come questo programma), questo metodo basterà, ma in programmi più complessi, un metodo può essere più appropriato di un altro. Questo lo vedremo nelle prossime lezioni.
13
What’s a Microcontroller
WhatITA.doc
Q QU UE ES STTIIO ON NS S 1. In cosa differisce un microcontrollore da un computer ? 2. Qual’é la differenza tra hardware e software ? 3. Perché il microcontrollore lavora come il tuo cervello ? 4. Cosa si intende per debug ? 5. Il seguente programma deve accendere il LED per 2 secondi sul pin P0, quindi spegnerlo per 2 secondi, & quindi ripete. 6. Quali errori ci sono nel programma e quali correzioni sono necessarie ? Output 0 reblenk: out0 = 0 pause 200 out1 = 1 pause 2000 goto nreblink
C E!! GE NG EN ALLLLE HA CH
14
What’s a Microcontroller
WhatITA.doc
C CO OS SA AH HO OS STTU UD DIIA ATTO O??
P O?? ATTO DIIA UD STTU OS HO E’’ LL’’H HE CH RC ER PE
15
What’s a Microcontroller
WhatITA.doc
ESPERIMENTO # 2: E ES SP PLLO OR RA AR RE E IILL M MO ON ND DO OE ES STTE ER RN NO O Prendiamo una decisione: il nostro cervello lo fa sempre. Noi costruiamo decisioni basate su cosa abbiamo visto, sentito, toccato, ecc. Come noi abbiamo imparato nell’esperimento #1 (cosa è un microcontrollore?), i microcontrollori funzionano come il nostro cervello. Essi manipolano il “mondo reale” basandosi sugli “input”. Esperimento #2: vogliamo focalizzare su come possiamo progettare il sistema a microcontrollore, che può cambiare le sue uscite a seconda del tipo di “input” digitali che si presentano. I microcontrollori sono dispositivi programmabili. Essi contengono una certa lista d’istruzioni (chiamate istruzioni o codici). Essi dicono cosa deve fare, a seconda di certe circostanze. Il BASIC Stamp è programmabile in BASIC, linguaggio di programmazione, che è facile da imparare. Esploriamo come un microcontrollore reagisce e controlla il mondo esterno: P E:: STTE ES HIIE CH RIIC RTTII R AR PA 1. 2. 2. 1. 1. 2. 2. 1. 6. 1.
Cavo di programmazione LED pulsanti BASIC Stamp II basetta resistenze da 470 Ohm resistenze da 10 KOhm batteria da 9 volt o trasformatore cavetti programma BASIC Stamp, funzionante in DOS o WIN98
Che cos’è: SENSORE: Un sensore è un dispositivo di ingresso usato per riconoscere o misurare una grandezza fisica. Gli esempi includono i sensori che percepiscono la luce, la temperatura, pressione e sostanze chimiche (come per esempio monossido di carbonio CO2).
C’é un’infinita varietà di sensori, che possiamo connettere al BASIC Stamp. Questo esperimento, includerà un pulsante (un tipo di sensore) ed un LED (un dispositivo di uscita).
16
What’s a Microcontroller
WhatITA.doc
C CO OS STTR RU UIIA AM MO OLLO O:: Usando la basetta mostrata nella figura costruiamo il circuito raffigurato nello schema funzionale grafico. Ricordati che i LED devono essere connessi con il catodo (smusso) ai pin di uscita P0 e P1. Assicurati che ci sia una resistenza da 470 ? in serie con ogni LED, ci sia pure una resistenza da 10 K?? collegata al lato alto (+Vdd) di ogni pulsante. Dal momento in cui questo esperimento usa due differenti valori di resistenza e questi sembrano uguali, come puoi distinguerli? Leggendo il codice colori. P PR RO OG GR RA AM MM MIIA AM MO OLLO O:: Il circuito possiede un pulsante e un dispositivo di uscita (LED). Una volta installati tutti i componenti sulla basetta del prototipo come mostrato in figura, attacca il cavo seriale tra la basetta e il PC e fornisci alimentazione. Avvia il BASIC Editor cliccando sull’icona. Come abbiamo imparato nell’esperimento 1, lo schermo, eccetto che per poche parole di menu, è vuoto. Noi qui dobbiamo scrivere il programma di controllo che sarà poi scaricato nella memoria del microcontrollore. Una volta che il programma è stato ricevuto, il BASIC Stamp eseguirà le istruzioni correttamente come le abbiamo create. Scrivi il seguente programma: output 0 out=1 input 2 recheck: if in2=0 then blink goto recheck blink: low 0 pause 200 high 0 pause 200 goto recheck
INPUT: Tecnicamente noi non dobbiamo veramente dare al BASIC Stamp questo comando, perchè, all’accensione, ogni pin automaticamente viene configurato per essere un input. Comunque, incrementando la complessità circuitale è possibile cambiare lo stato dei pin da input ad output, o viceversa, tutto sotto il controllo del programma.
Ora mentre teniamo premuto il tasto ALT, digitiamo la lettera R. Se il programma non viene scaricato esattamente e tu leggi la scritta “errore” hai un “bug” nel programma. Se leggi “l’hardware non è stato trovato” controlla la connessione tra la basetta e il PC. Il programma di Windows BASIC Stamp II può aiutarti a trovare l’errore di programmazione. Puoi trovarne durante il “downloading”, puoi anche digitare ALT- M per verificare la sintassi e il tipo di errore. 17
What’s a Microcontroller
WhatITA.doc
Ricontrolla il programma e troverai certamente l’errore. Se il programma lavora correttamente, il LED si accenderà o si spegnerà solamente quando si preme il pulsante. L’istruizione output0 = 1 mette il registro dell’uscita P0 a “1” che equivale ad “alto”. Poiché il LED è connesso a Vcc (+5 Volt) e il pin P0 è messo a 1, non circola corrente, quindi il LED è spento. Quando il vostro programma eventualmente raggiunge il comando “goto recheck” esso guarda l’istruzione “recheck” e salta ad essa. Continua poi l’esecuzione da quel punto. Il comando “if in2=0 then blink” chiede al microcontrollore di controllare lo stato del pin “P2” e ne legge il valore digitale. In elettronica si hanno due differenti tipi di segnali: DIGITALI e ANALOGICI. L’interruttore fornisce uno “0” o un “1” (aperto o chiuso). Esso e’ un sensore di tipo digitale. La misura del livello dell’acqua di una piscina o una fotocellula sono esempi di input analogici. Il segnale analogico di questi sensori deve essere convertito in valore digitale per poter essere capito da un microcontrollore. Nell’elettronica digitale (binaria), ogni altro valore, oltre 0 e 1, non é valido. Quando il microcontrollore “legge” lo stato in P2 potrà vedere il valore di 0 o 1. Cerchiamo che lo stato di P2 sia a “0”. Se esso è a 1 il comando non viene eseguito, il programma passa al comando successivo (in questo caso “goto recheck”) che causa un ciclo continuo fino a che in P2 si abbia 0. Una volta che P2 diventa 0 il programma salta a “blink”. La routine “blink” è semplicemente un mini programma che causa l’accensione del led (per due secondi) e lo spegnimento (per due secondi). Dopo il lampeggio del led , con il comando “goto recheck” il programma torna a controllare lo stato di P2 e ricomincia. Osserva il programma con i commenti:
ANALOGICO Un valore variabile in modo continuo. Invece che tra i valori 0 o 1, i valori analogici possono variare in modo continuo tra i due estremi. Poiché i microcontrollori capiscono solo gli ingressi digitali, i sensori necessitano di circuiti interfaccia che convertono i valori analogici in equivalenti digitali. BINARIO E’ il sistema numerico usato da i microcontrollori. Noi normalmente usiamo 10 cifre (0-9). I sistemi digitali elettronici lavorano con due digit 0 & 1.
output 0 out0=1 input 2 recheck: if in2=0 then blink goto recheck
considera P0 come uscita mette P0 alto poni P2 come input etichetta inizio ciclo di test su P2 Se P2 è a 0 accendi il led se P2 è a 1 ritorna e controlla ancora P2
blink: low 0 pause 200 high 0 pause 200 goto recheck
etichetta ciclo di accensione accende il led; poni P0 a 0 attendi 200 millisecondi spegne il led; poni P0 a 1 attendi 200 millisecondi ritorna e controlla P2 18
What’s a Microcontroller
WhatITA.doc
Ora scrivi un nuovo programma. Registra il seguente programma col basic stamp editor: output 0 output 1 input 2 Input3 out0=1 out1=1 recheck: if in2=0 then blink if in3=0 then double_blink goto recheck blink: low 0 pause 200 high 0 pause 200 goto recheck double_blink low 0 low 1 pause 200 high 0 high 1 pause 200 goto recheck Prima di eseguire questo programma, sai dire cosa fa? Il programma è fatto per “prendere decisioni”, basandosi su quale pulsante si schiaccia. Una volta che viene schiacciato un bottone, il programma inizierà la routine appropriata. Il microcontrollore interpreta un segnale d’ingresso, prende una decisione, crea un segnale di uscita. La decisione è presa basandosi su quale bottone si schiaccia. Il comando “if in2=0 then blink”, controlla direttamente il pin2 e prende una decisione sulla base dello stato del contatto. Il comando “if in3=0 then double_blink” controlla altri pulsanti. Cosa succede se entrambi i bottoni sono schiacciati? Perchè? Ci possono essere delle volte in cui serve monitorare lo stato di un segnale in entrata (alto o basso) senza prendere una decisione. Può darsi che alcuni ingressi siano in un determinato stato prima di un evento. Se desideri avere un LED che lampeggia solo quando entrambi i bottoni sono premuti, il nostro programma non lavorerà correttamente. Le variabili ci permettono di memorizzare informazioni che saranno analizzate in seguito. 19
What’s a Microcontroller
WhatITA.doc
Le variabili vanno “dichiarate” prima di essere usate nel programma . Dichiarare le variabili è semplicemente un’istruzione nel programma che dice al microcontrollore il nome della variabile e la sua grandezza. Ora modifichiamo il programma per mostrarti un modo di come è possibile farlo: X var bit Y var bit
VARIABILE Una variabile è un simbolo che contiene un certo valore. Questo valore può cambiare sotto il controllo del programma, ma il siumbolo no. Le variabili possono immagazzinare delle informazioni, da usare successivamente.
output 0 output 1 out0=1 out1=1 input 2 input 3 get_status: X=in2 Y=in3 if X+Y=0 then double_blink goto get_status
‘ OR logico
double blink: low 0 low 1 pause 200 high0 high1 pause 200 goto get_status Le prime linee, “x var bit”, mostrano al microcontrollore come deve essere usata la variabile chiamata x e essa avrà un bit di dimensione. Poiché ci interessa solo lo stato del pin (0 o 1), un singolo bit è tutto quello di cui abbiamo bisogno per la lunghezza della variabile. Nella seconda linea si farà la stessa cosa per la Y. Nella routine “get_status”: si hanno due tipi di procedure. In “x=in2” il microcontrollore guarderà all’ingresso di P2, che (diversamente dal nostro precedente programma), non salterà a un’altra locazione, ma memorizza i segnali (compresi tra “0” e “1”) nella nostra variabile chiamata “x”. Il programma fa lo stesso per Y nelle altre linee. Adesso, nell’esecuzione del programma (dopo aver letto i pin P1 e P2), comunque siano le entrate P1 e P2, i valori letti sono registrati nelle variabili X eY. Noi adesso possiamo fare alcune “operazioni” su queste variabili. Per esempio , nel nostro programma noi abbiamo sommato i valori di X e di Y. Se il risultato è 0, il nostro programma salterà all’istruzione che nel nostro programma è chiamata “double_blink”. E’ necessario che entrambi i pulsanti siano premuti per saltare alla routine chiamata “double_blink”. 20
What’s a Microcontroller
WhatITA.doc
Le variabili non devono avere solo singoli caratteri. Nel nostro esempio usiamo semplicemente le lettere X e Y. Prova questo: usa nomi diversi da X eY, per esempio “Bonnie” e “Clyde”. Quando tu crei programmi molto complicati, assegni a una variabile, un nome che riguarda qualcosa che ti può aiutare nella verifica dei tuoi programmi (sopratutto se hai bisogno di effettuare dei debug). Altre informazioni sulle variabili In PBASIC, i nomi delle variabili possono avere una lunghezza di 32 caratteri. La lunghezza dei nomi non è rilevante per la velocità d’esecuzione del programma. Per esempio l’istruzione: x=in6,avrà la stessa velocità di esecuzione come questo_è_un_nome_molto_lungo =in6. Le variabili che possono essere dichiarate in 4 differenti dimensioni: Bit (1 bit); nib (nibble 4bits), byte (8bits), word(16 bit) = 2 byte. Puoi sempre dichiarare le tue variabili nella dimensione appropriata ai dati che dovranno contenere. La STAMP2 ha un limite di 208 bit di memoria Le variabili sono combinate in 13 “word” (parole) che consistono in 16 bit ciascuno. Questi bit possono essere utilizzati in ogni combinazione di spazio possibile. Per esempio, il tuo programma potrà avere 10 word variabili (160 bits) 10 nibble (40 bits) e 8 bit variabili(8 bits) o altre combinazioni non devono superare 208 bit. Guarda il Basic stamp Manual Version 1.9 per le informazioni aggiuntive riguardanti l’uso corretto delle variabili.
21
What’s a Microcontroller
WhatITA.doc
Q O N S QUUUEEESSSTTTIIIO ON NS S 1. How does a microcontroller make a decision? 2. What’s a sensor & why does a microcontroller need one? Name some different types of sensors. 3. Define a variable, & describe how they might be used in a program. 4. Write the code to declare a variable called “status”. The variable could be either “0” or a “1”. 5. Add appropriate remarks to the following program: output 0 output 1 out0=1 out1=1 recheck: if in2=0 then blink if in3=0 then double_blink goto recheck blink: low 0 pause 200 high 0 pause 200 goto recheck double_blink: low 0 low 1 pause 200 high 0 high 1 pause 200 goto recheck
C GE E NG EN ALLLLE CH HA 1. Write a program (complete with remarks) that will blink LED P0 on and off (every ½ second), as long as switch P2 is pressed. When the button is not pressed, LED P1 is on, but goes off when LED P0 is flashing. 2. Write a program that will blink both LED’s (every 1.2 seconds) when either switch is pressed. If no switches are pressed the LED’s are on & if both switches are pressed both LED’s are off. 3. Write a program that will alternately blink the LED’s on and off (continuously) every ½ second, but only after switch P2 has been pressed first (and released) , and then switch P3 is pressed. Then, note (remark) in your program, what would change if you wish to reverse the “switch press” order. 4. Write a program that will blink the LED’s (every .2 seconds) whenever switch P2 is pressed. Then while switch P2 is still depressed, LED P1 is turned off when switch P3 is pressed – but LED P0 is still blinking.
22
What’s a Microcontroller
WhatITA.doc
C CO OSSA AH HO O SSTTU UD DIIA ATTO O?? I/O pin Declared inputs (or sensors) if in1=0 program activated debug variables
On the lines below, insert the appropriate words from the list on the left. Microcontrollers need _______ in order to know what is going on in the “real world”. By using PBASIC commands such as _____________”, our program can determine what kind of output is appropriate. There are an infinite variety of sensors that can be interfaced to the BASIC Stamp. Although the switches that we used in this experiment were ______________by us pushing them, they could just as easily have been the switch sensors on an elevator door – the ones that keep you from getting squished as the door closes. _______________ are used to hold information, enabling our program to gather data now (perhaps from several different inputs), and then to make decisions at a more appropriate time Variables can be _____________, or “set up”, in 4 different sizes. If we wish to check the status (high or low) of a particular _________, then we can set the variable up as a single “bit”. Variables can be up to 32 characters in length. The important thing to remember when using variables, is to give them a name that means something to you. The length of the name will have no influence on how quickly your _________ executes, but a “very descriptive” name will make it much easier to ______ your program, should the need arise.
W WHHHYYY DDDIIIDDD II LLLEEERRRAAARRRNNN IIITTT?? The very heart of microcontrollers is their ability to make decisions based on inputs. Inputs to a microcontroller have to be in a digital format, but many types of “real world” situations are analog in nature. Sensor technology is one of the most challenging areas of electronics. There are hundreds of different types of sensors on the Space Shuttle & the satellites that it carries into orbit. Many people specialize in designing sensors that interface to microcontrollers. If you like to work on “hardware”, instead of writing programs (creating software), this could be a very exciting and ever challenging field. Any microcontroller (or for that matter, computer) system relies on digital inputs, in order to make correct decisions. It is important to realize that microcontroller decisions are only as good as the program that it’s running & the quality of the sensory inputs it gets. The more you look around, the more applications you’ll see for microcontroller & sensor technology.
H S?? HIIS Y TTH AP PP PLLY N II A AN WC CA OW HO Many retail stores have some sort of “door beeper” that chimes every time somebody goes in or out of the door. Every time the beeper goes off, the proprietor has to look and see who came in. Using a proximity sensor that detects the presence of an object (similar to a button being pushed), you could detect when somebody goes through the door. By using three sensors you could determine which direction they are travelling. Then, using a another tone, the system could alert you differently when somebody was only leaving.
23
What’s a Microcontroller
WhatITA.doc
ESPERIMENTO # 3: M MO OV VIIM ME EN NTTO O ccoonn iill M MIIC CR RO OC CO ON NTTR RO OLLLLO OR RE E Così siamo già all’esperimento n.3 e tutto quello che abbiamo fatto è per far lampeggiare alcuni LED. Aspetta che qualcosa si sta per muovere! Come tu sai un led è un dispositivo di emissione. Un microcontrollore può far lampeggiare bene dei led come può pilotare altri dispositivi di movimento (trasduttori) sotto il controllo di un programma. Sebbene i metodi di controllo siano molto simili, altri tipi di dispositivi come i motori possono darci un esempio molto più tangibile di manipolazione del mondo reale. Ci sono molti tipi differenti di motori che il Basic Stamp può controllare. La maggior parte dei motori comunque ha bisogno di certi tipi di circuiti di interfaccia esterni che permettono al nostro microcontrollore di manovrarli. In questo esperimento useremo uno specifico tipo di motore in corrente continua. Esso è chiamato servomotore. Che cosa è un servo? Un servo è un motore in corrente continua che ha dei circuiti interfaccia (di potenza) già costruiti al suo interno. Questo lo rende estremamente facile da connettere al microcontrollore. I tipi di servo che useremo furono originariamente progettati per macchine, barche e aerei radio comandati. Piuttosto che ruotare continuamente, come i normali tipi di motori per hobby, un servo è posizionabile (proporzionale). Tu puoi, inviando i giusti segnali dal BS2, ottenere la rotazione del servo verso un punto specifico e rimanervi. COS’E’ I servo hanno molte applicazioni. P E STTE ES HIIE CH RIIC RTTII R AR PA (1) circuito BS2 (1) “Board of education” (1) connettore doppio maschio a tre pin (1) cavi di programmazione (1) servo RC (1) LED (diodo emettitore di luce) (1) resistore 470 ? 1/4 Watt (1) condensatore elettrolitico da 3.000 ? F (1) batteria o trasformatore a 9V (6) fili di collegamento (1) programma Basic Editor anche per DOS o Win 95/98 C CO OS STTR RU UIIS SC CIILLO O!!
UN CIRCUITO INTERFACCIA: I microcontrollori funzionano con tensioni e segnali di livello molto basso. Essi non hanno molta capacità di comandare grossi dispositivi o di grande potenza. Considera il tuo walkman come un microcontrollore. Esso può far funzionare da solo piccoli emettitori (come le cuffie), ma per controllare grandi dispositivi (come grandi casse) ti servirà un circuito interfaccia come amplificatore. Il BASIC Stamp può controllare i piccoli motori del tuo robot, ma con l’appropriato circuito interfaccia esso può operare sui motori che aprono le chiuse di una diga. Dipende tutto dal circuito interfaccia.
I servo esistono in molte forme e grandezze, dipende dalla loro applicazione. 24
What’s a Microcontroller
WhatITA.doc
Usando la “Board of education” crea il circuito hardware come mostrato nell’illustrazione e nello schema circuitale . Il colore dei conduttori può variare a seconda del modello di servo. In tutti i casi il filo nero é connesso a Vss (0 V) e il filo rosso è connesso a Vdd (+5 V), il filo rimanente (il terzo) può essere bianco o giallo (o altro). Questo è il filo del segnale controllo in ingresso che connetteremo al pin P1 sul circuito base. COS’E’ Vdd & Vss: Queste sono definizioni usate per la tensione positiva e la massa. Nel nostro circuito Vdd è uguale a +5V e Vss è uguale a 0V. Questo è un valore assegnato quasi comunemente per la maggior parte dei sistemi di computer, comunque questi valori possono variare in dipendenza dei tipi di dispositivi elettronici utilizzati nel circuito.
COS’E’ UN CONDENSATORE: Un condensatore accumula energia elettrica. Esso è usato nel nostro circuito come una piccola batteria, per fare arrivare una extracorrente (misurata in ampere) richiesta quando il servo motore inizia a girare. Il condensatore aiuta a far arrivare questa potenza di spunto, facendo funzionare il circuito facilmente, minimizzando i picchi che potrebbero causare un funzionamento irregolare del nostro microcontrollore.
Assicurati di collegare in serie al LED una resistenza da 470 ? . Come visto nell’esperimento precedente, ciò serve a limitare la corrente assorbita dal LED a valori ottimali. Una corrente eccessiva potrebbe bruciare il LED e danneggiare il BS2. Il condensatore è polarizzato: è importante collegare il polo negativo a massa (Vss) e il positivo a +5V (Vdd). Un collegamento invertito potrebbe danneggiare il condensatore. Questo circuito ha due tipi di trasduttori (un LED e un servo). Una volta posizionati i componenti sulla basetta, collega il cavo di programmazione tra BS2 e la porta seriale del PC e alimenta il circuito a 9 Volt con una batteria o con un trasformatore (se la potenza richiesta è maggiore). 25
What’s a Microcontroller
WhatITA.doc
P PR RO OG GR RA AM MM MIIA AM MO O !! Avviamo BASIC stamp EDITOR e scriviamo il seguente programma: output 5 here: out5=1 pause 200 out5=0 pause 200 goto here Ora premiamo contemporaneamente ALT e R e quindi INVIO Il LED dovrebbe ora lampeggiare. Ma dov’è la novità ? La risposta è che abbiamo usato un comando più evoluto e questa semplice routine ci fa capire come lavora. Ora modifica le pause da 50 a 30 a 20 a 5. Cosa avverrà ? Il LED lampeggerà sempre più velocemente poiché il tempo di ogni pausa sarà sempre più breve fino a che non potremo più distinguere le interruzioni e quindi vedremo il LED sempre acceso. OK, il servo è controllato da una serie di impulsi che hanno una durata tra 1 e 2 millisecondi e che si ripetono dopo 10 millisecondi. Osserva che il comando pause è in millisecondi e che la più piccola pausa è di 1 ms e il valore seguente è 2 ms. Un servo necessita di una serie di impulsi (sul filo di controllo) che variano tra 1 e 2 ms in lunghezza. Con una serie di durata costante di 1 ms, il servo si posiziona fino ad un estremo della sua rotazione. Se la durata si incrementa di 1,1 ms – 1,2 ms – 1,3 ms , 1,4 ms – ecc. il servo ruota fermandosi su differenti posizioni fino all’estremo opposto, quando la lunghezza è 2 ms. Questi impulsi si ripetono ogni 10 ms. OK, con queste informazioni, scriviamo un programma che fa ruotare il servo ad un estremo, vi rimane per un certo tempo, e poi all’altro estremo, vi permane per un certo tempo e poi ripete il ciclo. x var word output 1 here: for x = 1 to 100 pulsout 1,500 pause 10 next 26
What’s a Microcontroller
pause 500 for x = 1 to 100 pulsout 1,1000 pause 10 next pause 500 goto here Premiamo ALT, R, INVIO
WhatITA.doc
Cos’è MILLISECONDI I computer e i microcontrollori operano in modo molto veloce. Un millisecondo è 1/1.000 di secondo; cioè ci sono 1.000 millisecondi in un secondo. Ciò sembra un tempo veramente piccolo, ma è abbastanza grande per il mondo dei computer. Infatti il PC da noi usato probabilmente opera in milionesimi di secondo. Diagramma dei tempi Il PC opera con serie di impulsi tra 0 e 5 Volt. Il diagramma temporale è semplicemente un modo di rappresentare gli impulsi. Il diagramma si legge da sinistra a destra
SE il programma lavora correttamente, il servo dovrebbe ruotare continuamente da un estremo all’altro. I servomotori non sono progettati per ruotare in modo continuo (come i motori standard che fanno muovere le ruote). Invece sono usati per applicazioni che richiedono un posizionamento. Esempi potrebbero essere: la chiusura e l’apertura delle valvole o il movimento di un braccio robotico. O A M M A R G O R P L O M A MA MM AM RA GR OG RO PR LP O IIIL MO ORRRAAA AAANNNAAALLLIIIZZZZZZIIIAAAM
FYI Sebbene i servo non siano progettati per ruotare in modo continuo, essi potrebbero essere modificati per un movimento rotatorio continuo. Vedi Appendici per ulteriori informazioni.
x var word Ricorda che bisogna dichiarare inizialmente le variabili che si usano in seguito. Questo comando informa il BASIC Stamp che useremo la variabile di nome “x” e che avrà la lunghezza di 16 bit (binary digit), cioè un “word” che può contenere numeri di valori da 0 a 65.536 (2^16). output 1 L’abbiamo già visto : pone P1 come uscita here È semplicemente un’etichetta for x = 1 to 100 È l’ inizio di un ciclo “FOR … NEXT” . Dice semplicemente che la variabile x conterrà 1 come primo valore. Il programma esegue quindi le istruzioni seguenti fino a che incontra il comando “NEXT”. Appena giunge a “next”, il programma ritorna al comando “for x = 1 to 100” e incrementa di 1 il valore di “x”. Il ciclo si ripete fino a che “x = 100”; allora il programma esce dal “loop” ed esegue l’istruzione successiva a “next”. Noi abbiamo mandato una stringa di 100 impulsi al servo, che hanno una durata sufficiente a che il servo esegua il movimento richiesto. Il microcontrollore è troppo veloce per il trasduttore meccanico e quindi, mandando una serie di 100 impulsi, diamo al servo il tempo necessario per agganciare il BS2. 27
What’s a Microcontroller
WhatITA.doc
pulsout 1,500 È un comando molto pratico. Alcune volte abbiamo necessità di generare una serie di impulsi stabili e precisi: per esempio il servo ruota in un senso o nell’altro se modifichiamo il tempo da 1 a 2 ms. Usando il comando “pause” non potremmo avere la necessaria precisione che è invece possibile ottenere con “pulsout”, che opera con i microsecondi. “pulsout 1” genera un singolo impulso in P1, “500” è il valore che determina la durata dell’impulso in microsecondi. Pulsout ha una risoluzione di 2 microsecondi, perciò un valore di 500, determina un tempo di durata 500 per 2 microsecondi, o 1.000 microsecondi = 1 millisecondo (il valore richiesto dal servo per ruotare ad un estremo). Un valore “1000” crea un impulso lungo 1.000 x 2 microsecondi = 2 millisecondi (la durata richiesta dal servo per ruotare all’estremo opposto). pause 10 Le specifiche del servo richiedono che l’intervallo tra gli impulsi della serie sia approssimativamente di 10 ms next Da questo punto si ripete il ciclo fino a che x = 100. Il microcontrollore genera cioè una serie di 100 impulsi della durata di 1 millisecondo e distanti tra loro di 10 millisecondi. pause 500 Permette di mantenere fermo il servo prima che riprenda la rotazione contraria. for x = 1 to 100 è identico al ciclo precedente. Però la durata dell’impulso è di 2 ms, quindi la rotazione è in senso contrario. pulsout 1,1000 Crea un impulso di 2 ms. next Chiusura del secondo ciclo. goto here Torna all’inizio e ripete tutto di nuovo.
Inizializzazione La prima parte di molti programmi si riferisce spesso a routine di inizializzazione. Con esse vengono dichiarati i parametri che verranno usati poi dal programma.
OK. Riepiloghiamo quanto esegue il programma. Dopo l’inizializzazione, il programma invia al servo 100 impulsi da 1 millisecondo che lo fanno ruotare ad un estremo; dopo 500 ms, altri 100 impulsi da 2 millisecondi lo faranno ruotare all’estremo opposto. Ora facciamo qualcosa di interessante. Poiché la posizione e il senso di rotazione sono determinate dalla lunghezza dell’impulso, vediamo cosa succede con il seguente comando. pulsout 1,750 28
What’s a Microcontroller
WhatITA.doc
Ricorda il servo ruota in una particolare posizione appena si modifica il valore della durata dell’impulso. Modificando il valore a 750, questo genera un impulso di 750x2 microsecondi = 1,5 ms. Il servo ruota nella posizione di mezzo. Prova differenti valori per vedere il relativo tipo di rotazione. Hai capito cosa abbiamo fatto? Il nostro programma è in grado di muovere congegni meccanici. Se il servo fosse più grande, potremmo muovere bracci di robot industriali o aprire porte automaticamente.
29
What’s a Microcontroller
WhatITA.doc
C CH HA ALLLLE EN NG GE E 1. How is a servo different than a motor? 2. What command do we use (in PBASIC) to control a servo’s rotation? 3. Why can’t we use the Pause command to create the pulse lengths necessary to control a servo? 4. Describe the way a “For…Next” loop operates. 5. Add appropriate remarks to the following program: x var word output 1 here: for x = 1 to 100 pulsout 1,500 pause 10 next for x = 1 to 100 pulsout 1,1000 pause 10 next goto here C E GE NG EN ALLLLE HA CH 1. Write a program (complete with remarks) that will turn on the LED (on P5) every time the servo reaches one extreme of its travel, and then turn the LED off when it reaches the other extreme. 2. Write a program (with remarks) that rotate the servo from one extreme to the other (back & forth), but stopping for a short “pause” in the middle of its rotation each time. 3. Write a program (with remarks) that will move the servo to one extreme to the midpoint, return back, then rotate all the way to the other extreme, & then recycle. 4. Write a program that will cause the LED to blink 3 times & then rotate the servo from one extreme to the other. Pause for a moment & then repeat. This would be like a “warning” indicator that an automatic piece of machinery was about to start.
30
What’s a Microcontroller
WhatITA.doc
W WHHHAAATTT HHHAAAVVVEEE II LLLEEEAAARRRNNNEEEDDD?? Inserire nelle linee le parole appropriate del riquadro. _______________ area special type of DC _____________ which is well suited for connecting directly to a microcontroller. A servo is designed to react to a series of _____________ on its control wire. As the width of these pulses changes from 1 to 2 _______________, the servo’s internal circuitry causes the motor to rotate to the appropriate position. We use the _____________ command to output a specific pulse width for the control line input of the servo. In our application, we varied the pulse width between 1 and 2 milliseconds, using the command: Pulsout 1, X; where X is a _____________ value between 500 and 1000. Since the pulsout command has a resolution of 2 microseconds, this gave us a pulse width output of 1000 and 2000 microseconds, respectively. Servos can be large or small, depending upon the application. The _____________circuitry (which is built into the servo housing) eliminates the need for us to connect many other _____________components for proper circuit operation. A ___________ loop is a convenient method to loop through a certain portion of our program for a predetermined number of ____________. In our sample program, we looped 100 times, but this number could have been easily changed to accommodate other loop lengths, depending on the requirements of the program and hardware. Cycles Decimal Motor Interface For…Next Pulsout Servos Pulses Milliseconds hardware
P O?? ATTO RA AR PA MP O IIM HO E’’ LL’’H HE CH RC ER PE A molti di noi, un microcontrollore che fa lampeggiare un led potrebbe non sembrare una grande cosa ma fare muovere un motore o un dispositivo meccanico sotto il controllo di un programma é dove i microcontrollori iniziano realmente a diventare interessanti. Sebbene il microcontrollore non sappia quale sia il dispositivo di emissione (led o servo), facendo muovere qualcosa nel mondo reale,esso ci da un esempio molto più tangibile di manipolazione della realtà. Ci sono microcontrollori (alcuni con Basic Stamp!) tutt’intorno a noi, che comandano servo motori in continua ed alternata, avvolgimenti ed altri tipi di dispositivi di movimento. In ogni campo, dal piccolo dispositivo che vibra nel tuo cellulare, alle porte automatiche del supermercato, ai manipolatori robotici usati dagli sviluppatori per hobby o per professione. C O?? AR RLLO OU UTTIILLIIZZZZA SO PO OS SS OM ME EP CO Sebbene è di solito richiesto un circuito interfaccia addizionale per la maggior parte degli altri tipi di dispositivi di moto (per connetterli al circuito base) i principali schemi in questi esperimenti usano essenzialmente le stesse tecniche di controllo. Molte persone trascorrono la loro vita a progettare microcontrollori basati su sistemi che manipolano meccanicamente la realtà. Anche se tu non farai questo tipo di lavoro come carriera, tu avrai ancora un’apprezzamento per quello che c’è dentro il tuo “pager vibrate” o le porte automatiche del supermercato. Adesso che sappiamo come controllare un servo motore, tu puoi progettare un sistema di controllo per un modello di aereo che avrebbe la funzione simile ad un autopilota su un aereo vero. Se tu aggiungi un altimetro digitale come input per il circuito base, allora l’aereo potrebbe volare automaticamente. Infatti puoi progettare una sorta di sistemi di sicurezza che potrebbero permettere a un principiante di far volare l’aereo, ma nel caso in cui precipitasse, il tuo sistema autopilota avrebbe potuto prendere il controllo e prevenire la catastrofe. 31
What’s a Microcontroller
WhatITA.doc
ESPERIMENTO # 4: S SE EM MP PLLIIC CE EA AU UTTO OM MA AZZIIO ON NE E Nell’esperimento n°3 usavamo un servomotore (un particolare tipo di motore ) per dimostrare come un microcontroller può azionare un congegno meccanico nel “mondo reale”. Automazione: Il programma che abbiamo scritto (e caricato nella in questo esperimento, il termine memoria del BASIC Stamp) controllava la rotazione e la automatizzare significa che qualcosa posizione del servomotore. compie un azione senza nessuna Il programma faceva eseguire al servomotore un “interazione umana”. Nel nostro oscillazione avanti e indietro tra due differenti rotazioni esempio (la porta automatica del da un estremo all’altro. Questo era un esempio di come supermercato) , ciò non è esattamente un microcontroller poteva gestire il funzionamento del vero. Sebbene noi non spingiamo motore. fisicamente nessun pulsante, stiamo Comunque nell’esperimento n° 3, BASIC Stamp era “cieco”. Tutti i servomotori reagivano al nostro codice. Ricorda che il vero cuore del microcontroller sta nell’abilità di prendere decisioni basate su degli input per poi manovrare “il mondo reale” con degli output.
con la nostra presenza, figurativamente “spingendo il pulsante delle luci per il rilevamento”. Questo comunque sembra completamente automatico, perché non dobbiamo “pensare” ad altro che attraversare la porta. In conclusione l’automazione è l’abilità del microcontrollore di fare cose senza interagire con nessuna delle sue parti.
In questo esperimento noi stavamo giusto facendo questo. Si, noi azioniamo il servomotore, ma soltanto con un’opportuna condizione di input. Puoi pensare a questo esperimento come all’esempio di una porta automatica del supermercato.
La porta è chiusa la maggior parte del tempo finché qualcuno – o qualcosa – arriva vicino; allora la porta si apre automaticamente. Non c’è apparentemente nulla che dobbiamo fare per aprire la porta. Non dobbiamo spingere alcun pulsante. Questa è una delle più basilari forme di automazione. Alcuni dei sensori che sono usati per questo tipo di applicazione sono molto sofisticati, altri sono veramente semplici. Comunque, essi hanno solo una cosa in comune ed è quella di captare un input e trasferire il segnale al microcontroller cosicché esso può prendere una decisione, in questo caso “aprendo la porta”. Come il nostro “sensore a rilevamento”, c’è un altro congegno chiamato “foto-resistore”. Esso è un congegno creato per rilevare differenti livelli di luce e fa parte dei sensori “ottici”.
32
What’s a Microcontroller
WhatITA.doc
P PA AR RTTII R RIIC CH HIIE ES STTE E L’ ESPERIMENTO n°4 richiede i seguenti componenti: o o o o o o o o o o o o o o
BASIC Stamp II “Board of education” Tre connettori pin Tre connettori pin Cavo seriale di programmazione R/C servo per radiocomandi LED resistore da 470 ohm, ¼ di watt condensatore elettrolitico da 3300 microfarad fotoresistore, fotocellula al cadmio (CdS) resistore da 10K ohm, ¼ di watt batteria da 9 volt o trasformatore computer con DOS 2.0 o superiore, con una porta seriale disponibile programma BASIC Stamp Editor Usate la “Board of education”, per creare il circuito hardware come mostrato. La figura a sinistra è lo schema mentre l’altra è
la vista reale. A seconda del modello del servomotore, il colore dei fili può variare. In tutti i casi (con il servomotore che la Parallax ti fornisce), il filo nero va connesso a Vss e il filo rosso va connesso a +5V Vdd. Il rimanente (terzo) filo sarà bianco o giallo ( o altro ). Questo è il filo che controlla l’input e andrà connesso al segnale P1 sul BASIC Stamp. Questo circuito ha due tipi di dispositivi in uscita (LED e servo) e un tipo di ingresso (foto resistenza). Ricordati di connettere il LED in modo esatto. 33
What’s a Microcontroller
WhatITA.doc
P PR RO OG GR RA AM MM MIIA AM MO O!! Una volta collegati i componenti sulla basetta, collegare il cavo seriale e l’alimentazione di 9 Volt. Poiché il servo potrebbe richiedere più corrente di quella che la batteria è in grado di fornire, sarebbe conveniente usare il trasformatore. Avviamo sul PC il Basic Editor e scriviamo il seguente programma: this_place: high 5 pause 200 low 5 pause 200 goto this_place Premiamo ALT, R, INVIO per trasferire il programma nella memoria del BS2 Ancora un programma di lampeggio ? Si e no. Notare innanzitutto che non c’è il comando “output 5”; infatti i comandi “high” e “low” fissano automaticamente il pin come uscita. Ciò fa risparmiare battute di scrittura e spazio in memoria. In effetti dobbiamo preoccuparci dello spazio in memoria non con il nostro piccolo programma, ma con quelli più complessi e sofisticati. Inoltre più il programma è compatto e più è veloce. Modifica il programma in questo modo: n var bit n=0 this_place: n=0 low 5 debug ? n pause 1000 high 5 n=1 debug ? n pause 1000 goto this_place
PROGRAM SPACE I microcontrollori possono avere diversi tipi di memoria. Nel caso del BS2 siamo limitati a 2048 bytes (EEPROM) di memoria di accumulo. Esso è usato sia per il programma che per i dati. Se vuoi usare BS2 per monitoraggio (i.e. stazione meteorologica) bisogna scrivere un programma ridotto, per avere più spazio per i dati. EEPROM Significa “Electrically Erasable Programmable Read Only Memory”. Benché sviluppata per uso industriale, è facile usarla. Noi possiamo memorizzare il programma e i dati nella EEPROM con comandi semplici. Inoltre essa mantiene la memoria anche in assenza di alimentazione. Ciò che distingue la EEPROM da altre memorie è la sua facilità di cancellazione e scrittura per moltissime volte.
Esegui il programma. Non solo il LED sarà intermittente ma dovresti avere un “quadro informativo” sul PC, che alternativamente visualizzerà “n=1” e “n=0”. Prova a dividerlo, vedrai cosa succede 34
What’s a Microcontroller
WhatITA.doc
n var bit La variabile è chiamata “n”, un bit di dimensione. this_place: L’etichetta del programma n=0 Qualcosa di nuovo. Stiamo andando a “fissare” il valore di ‘n’ a 0” low 5 Metti P5 basso, in modo da accendere il LED. debug ? n Localizza errori. Questa parola suona familiare. Ricorda che “debug” vuol dire elimina gli errori nel tuo programma. Bene il linguaggio PBASIC ha un comando chiamato “debug”, che può realmente aiutare sbarazzandosi di tutti i piccoli guasti del programma. Normalmente mandiamo il programma dal cavo di programmazione del PC al BASIC Stamp. E’ essenziale che vada (fino ad ora) in una sola direzione. Debug è un comando molto specializzato che consente al BASIC Stamp di mandare informazioni (“dati”) indietro su per il cavo, che visualizza sul monitor del PC. In questa maniera noi possiamo “guardare dentro il BASIC Stamp” e vedere i dati con cui il BASIC Stamp sta lavorando. In questo caso, settiamo il valore di “n” a 0 in un comando precedente. Quando si incontra il comando debug, “stampa” il valore di “n” nella finestra del debug sul PC. Il “?” è un abbreviazione di “stampa”, il comando infatti dice letteralmente “apri la finestra del debug sul pc e stampa il valore di “n” sullo schermo”. pause 1000 Facile per ora, giusto?
DEBUG È un comando molto comodo per vedere cosa succede all’interno del processore ed ha un uso molto flessibile.
high 5 Turn off the LED. n=1 Qui abbiamo cambiato il valore di “n” a 1.
debug ? n Abbiamo mandato il valore di “n” al PC. Da allora il valore di “n” è cambiato, debug “stampa” il cambiamento sullo schermo del PC. pause 1000 Certo noi sappiamo cosa fa. goto this_place Ancora una volta.
Codifica rigida È quando si impone un valore ad un parametro. Ci sono altri modo di predeterminare un valore (usando il comando con) che facilitano il cambiamento in futuro In alcuni casi le variabili usate sono dinamiche perché variano continuamente il loro valore durante l’esecuzione del programma.
Alcuni di voi ora potranno pensare “perché abbiamo bisogno di vedere il valore di ‘n’ nella nostra finestra del debug?”. Fin da quando abbiamo scritto nel nostro programma il valore 35
What’s a Microcontroller
WhatITA.doc
di “n”, noi sapevamo già qual era il valore di “n”, e perché ci complichiamo visualizzandocelo sul nostro monitor? E’ vero, il valore di “n” in questo esempio è “rigidamente codificato” – il programma setta il valore senza variazioni. Comunque, quando una variabile dipende da eventi esterni, come per esempio quando un input cambia a causa di un interruttore premuto, allora debug ci informa visualizzandoci il cambiamento del dato di input; da quel momento si accerterà se il nostro programma stia reagendo o no in modo appropriato. Prova a modificare il programma: n var bit this_place: n=in7 debug ? n pause 100 goto this_place Ora il valore di “n” non è più “rigido” , noi assegniamo a “n” un valore uguale a qualunque numero c’è in “in7”. Fino a che P7 è connesso al nostro foto-resistore, cambia la quantità di luce che il fotoresistore vede e cambia anche la tensione di input (su P7). Muovi la mano sopra il foto-resistore (non c’è bisogno di toccarlo), Il valore di debug sul PC dovrebbe cambiare da “1” a “0” , dipende se il foto-resistore vede o meno un ambiente buio o luminoso. Questa parte del circuito è chiamato partitore resistivo, ma esploreremo questa parte con maggiore dettaglio nel prossimo esperimento. Ti basti sapere a questo punto, che il foto-resistore cambia la sua resistenza (a causa della variazione di livelli di luce), e la tensione di P7 cambia. Questa tensione cambia come un segnale analogico. Ora poiché i pin di ingresso del microcontroller rilevano valori binari (digitali), nel momento in cui la tensione raggiungerà un certo valore (di soglia), si vedrà il valore di P7 cambiare in “1” (+ 5 volt) o “0” (0 volt). Quello che abbiamo creato è un “interruttore” che non ha bisogno di essere premuto! E’ un sensore che reagisce automaticamente ai livelli esterni di luce. Ora proviamo a fare qualcosa di divertente… Cambia questi valori: x var word n var bit output 1 close_the_door: for x = 1 to 100 pulsout 1,500 pause 10 next pause 10 36
What’s a Microcontroller
WhatITA.doc
look_for_people: n=in7 if n=1 then open_the_door pause 100 goto look_for_people open_the_door: for x = 1 to 100 pulsout 1,1000 pause 10 next pause 10 n=in7 if n =0 then close_the_door goto open_the_door Cosa pensi che il programma faccia? Non ti scoraggiare se il programma può essere un po’ lungo. Questa è la parte di inizializzazione del programma, sappiamo già cosa fanno questi comandi. x var word n var bit output 1 Abbiamo usato questa routine nell’ Esperimento n°3. Questo inviava una serie di impulsi che facevano ruotare il servo motore all’estremo della sua corsa. close_the_door: for x = 1 to 100 pulsout 1,500 pause 10 next pause 200 Questa parte del programma semplicemente controlla se il foto-resistore rileva o meno “un ombra”, e, se lo fa, costringe il programma ad eseguire la routine “aprire la porta”. look_for_people: n=in7 if n=1 then open_the_door pause 100 goto look_for_people Se il nostro servo motore è posto davanti alla porta del supermercato, questa routine la apre. open_the_door: for x = 1 to 100 37
What’s a Microcontroller
WhatITA.doc
pulsout 1,1000 pause 10 next pause 200 Questo è per la “sicurezza”. Se una persona rimane ferma del tempo vicino alla porta, il programma tiene la porta aperta. (Non bisogna strizzare i clienti, altrimenti andrebbero da un’altra parte!). n=in7 if n =0 then close_the_door goto open_the_door
38
What’s a Microcontroller
WhatITA.doc
D DO OM MA AN ND DE E Cos’è un’automazione? Cosa fa un comando di “debug” , e perché serve? Cosa fa un comando “ n = in7”? In cosa differisce il comando “ci sono persone qui = in7” ? Nell’esperimento, come fa il microcontroller a sapere che “la porta è aperta”? Aggiungi i commenti appropriati al seguente programma: x var word n var bit output 1 close_the_door: for x = 1 to 100 pulsout 1,500 pause 10 next pause 200 look_for_people: n=in7 if n=1 then open_the_door pause 100 goto look_for_people open_the_door: for x = 1 to 100 pulsout 1,1000 pause 10 next pause 200 n=in7 if n =0 then close_the_door goto open_the_door
39
What’s a Microcontroller
WhatITA.doc
C CH HA ALLLLE EN NG GE E!! Scrivi un programma (completo di commento) che accenda il led (In P ) ogni volta che il foto resistore è in ombra. Scrivi un programma (con commento ) che faccia lampeggiare il led due volte e apra la porta (far girare il servo), quando il sensore sia in ombra. Quindi ripeti il ciclo. Scrivi un programma (con commento ) che faccia lampeggiare il led due volte e apra la porta (far girare il servo), quando il sensore sia in ombra Inoltre il LED lampeggi incessantemente fino a quando c’è ombra. Ripeti poi il ciclo. Scrivi un programma che faccia lampeggiare il led continuamente quando il foto-resistore è in ombra. Quindi il led rimanga acceso mentre “la porta si sta aprendo”, Una volta che la porta è aperta, il led si spenga, solo quando l’ombra è andata via. Torna da capo e fallo ancora. Pensa una condizione dove il programma per questo esperimento non lavorerà correttamente.
40
What’s a Microcontroller
WhatITA.doc
W WHHHAAATTT DDDIIIDDD II LLLEEEAAARRRNNN IIITTT??
41
What’s a Microcontroller
WhatITA.doc
W WHHHAAATTT HHHAAAVVVEEE II LLLEEEAAARRRNNNEEEDDD??
42
What’s a Microcontroller
WhatITA.doc
ESPERIMENTO # 5: M MIIS SU UR RA AD DII U UN N IIN NP PU UTT Come studiato, i 16 pin del BS2 possono essere configurati come input o output. Se il pin è un ingresso, ci sono 7 differenti istruzioni che possono essere usate. Ciascuno di questi comandi è adatto per particolari condizioni di input. Per esempio, nell’esperimento #2 abbiamo studiato come usare il comando “input”. Se questa istruzione è usata nel nostro programma, setta il pin come input (che scoperta!). Quindi, ogni volta che vogliamo verificare lo stato del pin (se alto o basso) usiamo l’istruzione “if in2 = 0 then blink”. Essa “osserva” il pin e ne restituisce il valore. Se il valore è “0” l’istruzione interrompe la sequenza e fa un salto in un altro punto del programma che fa lampeggiare il led. Se il valore è “1”, viene eseguita l’istruzione successiva del programma. In ogni modo il valore dato da questo comando è binario, “0” o “1”. Esso è adatto a controllare se un pulsante è premuto o no (esperimento #2) o se una fotocellula è al buio o alla luce (esperimento #4). Il PBASIC ha altri comandi che aumentano la raffinatezza del controllo degli ingressi. Tutti i comandi sono trattati nel Basic Stamp Manual. In questo esperimento non solo daremo un’occhiata a un “input detection”, ma useremo anche un circuito integrato molto diffuso, il timer 555. P E STTE ES HIIE CH RIIC RTTII R AR PA Per questo esperimento avrai bisogno quello che segue:
7 differenti istruzioni di “input”. esse sono:
(1) BASIC Stamp II Button (1)“Board of Education” Count Input (1) Programming Cable Pulsin (1) LED Rctime (1) CMOS 555 timer IC Serin (1) 10 microfarad, 25 volt electrolytic capacitor Shiftin (1) 1 microfarad, 25 volt electrolytic capacitor Noi abbiamo già (1) 470 ohm, ¼ watt resistor usato “input”. (1) 100K potentiometer (variable resistor) Ora esamineremo (1) 15K ohm, ¼ watt resistor l’uso di “ Pulsin”. (1) 1 K ohm, ¼ watt resistor (1) 9 volt battery or wall transformer (misc.) connecting wires (1) Personal Computer running DOS 2.0 or greater, with an available serial port. (1) BASIC Stamp Editor program “SOURCES” per questi materiali sono elencati nell’appendice A 43
What’s a Microcontroller
WhatITA.doc
Questo circuito hardware usa un circuito integrato chiamato “timer 555”. Il 555 è in vero un insieme di circuiti elettronici (che riempiva una larga area su un circuito stampato) che è stato miniaturizzato e rinchiuso nel piccolo “chip” a 8 PIN che usiamo ora. Sebbene esso sia un agglomerato sofisticato di circuiti all’interno dell’involucro (case), il “555” è realmente semplice da usare in molte differenti applicazioni. Infatti il “555” è stato utilizzato in numerosi e vari dispositivi perché esso può fare molte cose diverse. Sebbene non sia “programmabile” come il BS2, il “555” può essere configurato con diverse combinazioni di resistori o condensatori, per svolgere molti differenti compiti. È necessario identificare il pin #1 dell’integrato usando una tacca di riferimento sul “case” Come nel BS2, nel 555 ogni pin ha uno scopo. Sebbene il 555 sia “a prova di proiettile”, un uso improprio di qualche pin lo può danneggiare; quindi bisogna essere accorti ed osservare la corretta disposizione dei piedini. Il tipo di circuito che assembleremo è un “multivibratore astabile”. Non preoccuparti del nome complicato. Tutto ciò significa che il 555 ha in uscita un’onda quadra. Ricorda che nell’esperimento #1 abbiamo usato i comandi “high” e “low” per fare lampeggiare un led; e questo è ciò che fa il 555: un’alternanza tra “on” e “off”. Il 555 è la versione hardware dell’esperimento #1 (pulsout). La frequenza di lampeggio (rate) dell’uscita (pin #3 del 555) dipende dai valori della resistenza e del condensatore. Essa cambia con la modifica di questi valori (costante di tempo ?=RC durante la carica e scarica di un condensatore). Usiamo un potenziometro per variare il valore della resistenza e quindi della frequenza.
MULTIVIBRATORE ASTABILE Il nome estroso significa che fornisce una serie di impulsi ad onda quadra senza interposizione di altri circuiti. Il 555 è la versione hardware del comando “pulsout”.
Nel potenziometro ci sono 3 terminali, o connessioni, disponibili. Una di queste è il “wiper” (cursore) e gli altri due sono gli estremi della resistenza. Noi abbiamo solo bisogno di collegare un estremo e il cursore al nostro circuito, come mostrato nella figura. Quando inserisci il timer IC 555 nella “breadboard”, assicurati che i contatti entrino correttamente nei fori così che non vengano tra loro cortocircuitati. Una volta completato il circuito in figura, applica tensione. 44
What’s a Microcontroller
WhatITA.doc
P PR RO OG GR RA AM MM MIIA AM MO O !! Avviamo l’Editor Il pin #4 è il piedino di “reset” che, se è posto “high”, abilita il 555; perciò lo colleghiamo direttamente a +5V (Vdd) per vedere lampeggiare il led. Proviamo invece ora a collegare il pin #4 a P1 del BS2 Scrivi il seguente programma: here: high 1 pause 5000 low 1 pause 5000 goto here
POTENZIOMETRO Un “pot” è un resistore che cambia valore quando si ruota l’albero del cursore. Ricorda che il potenziometro ha tre terminali. Il centrale è connesso al cursore che slitta sulla resistenza fornendo valori variabili tra zero e il valore massimo. Tale valore di targa può essere 5k, 10k, 100k, 1 mega ohm o di più. Essi possono avere differenti strutture adatte per diversi tipi di circuiti. Ma operano comunque allo steso modo: lo spostamento meccanico di un cursore cambia il valore della resistenza.
Ora premi ALT, R, INVIO Cosa succede e perché? Se ogni cosa funziona, dovresti vedere il led lampeggiare per 5 secondi, spento per 5 secondi, di nuovo lampeggiare, ecc. Poiché P1 è collegato al pin #4 di reset del 555, ogni volta che P1 è “high” il led lampeggia; al contrario se è “low” il led è spento perché si blocca il 555. Dirai: cosa significa? Bene. Ragiona in questo modo. Il microcontrollore è in grado di fare solo una cosa alla volta. Se vogliamo fare lampeggiare il led come “segnale di pericolo”, poiché il BS2 è impegnato ad abilitare il lampeggio, occorre che il 555 fornisca la sequenza di impulsi per il lampeggio. Ora, come mostrato in seguito, si può accendere il “circuito di lampeggio” , abilitandolo, e continuare nel programma con qualcosa di più importante. x var word low 1 here: high 1 for x = 1 to 500 debug ? x next pause 3000 low 1 pause 2000 goto here
‘turn the blinker on ‘count to 500 on the screen ‘while the LED blinks ‘turn the blinker off ‘go back and do it again
45
What’s a Microcontroller
WhatITA.doc
Ciò che abbiamo scritto è la possibilità di far lampeggiare il LED (acceso, spento, acceso, spento,ecc.) col BASIC Stamp l'azione di lampeggiamento è compiuta da un circuito temporizzatore "555". Il compito del BS2 è quello di attivare o disattivare il circuito lampeggiante e quindi può eseguire e fare altri compiti più importanti. In questo esempio, il compito è contare fino a 500 e mostrare i numeri sullo schermo. Nel caso reale, tuttavia, tu potresti acquisire diversi segnali di input dagli altri pin. In questo circuito, abbiamo usato un condensatore da 10 microfarad. Togli tensione e sostituisci il condensatore da 10 microfarad con uno da 1 microfarad. Assicurati di collegare con l'appropriata polarità il condensatore elettrolitico. Ridai tensione. Riducendo la capacità del condensatore (C1) abbiamo aumentato la frequenza di lampeggiamento del LED (?=RC). Anche se potrebbe essere difficile vederlo visivamente, il LED lampeggia ancora, ma ad una velocità molto più alta. Nell'esperimento # 4 (dove abbiamo controllato la rotazione di un servo), abbiamo usato un comando chiamato "pulsout". Ricorda che "pulsout" genera un singolo impulso con una lunghezza che dipende da uno dei parametri del comando. Per esempio per creare un impulso con una lunghezza di un millisecondo (su P1), il comando era “Pulsout 1, 500”. Il valore di 500 ha un incremento di 2 microsecondi. Perciò 500 x 2 microsecondi = 1000 microsecondi o un millisecondo. Ora useremo un nuovo comando chiamato "pulsin". Pulsin è il comando complementare a pulsout. Piuttosto che generare un segnale di una predeterminata lunghezza, il comando pulsin controlla un pin di input e misura la lunghezza del segnale memorizzando il valore in una variabile. Prova il seguente programma: x var word high 1 here: pulsin 0,1,x debug? x goto here
Che cos'è un microfarad? E' un’unità di misura della carica che può essere contenuta in un condensatore. Come il valore Ohm per le resistenze, il microfarad (per i condensatori) è utilizzabile in un ampio intervallo di valori. 1 microfarad è uguale a 1/1.000.000 di un Farad. Noi analizzeremo i condensatori in un esperimento che faremo, ma per ora non sappiamo qual'è il valore più basso della più bassa carica che può essere contenuta da un condensatore che risulta nell'oscillazione più veloce del circuito 555.
Cosa succede? Il pin #3 del timer 555 è collegato al LED. Il LED lampeggia ad una velocità determinata dal valore del potenziometro (e del condensatore). Abbiamo anche collegato l’uscita del 555 a P0 del BS2.
46
What’s a Microcontroller
WhatITA.doc
x var word questa istruzione semplicemente dimensiona una variabile chiamata “x” come “word” a 16 bit. Questo significa che “x” può arrivare al numero 65.536 (decimale) high 1 Ciò setta P1 “high”, e quindi abilita il 555 (perché è connesso al pin #4 di reset del 555) ad oscillare. Here: Un’etichetta per tornare da ... Pulsin 0,1,x Questo comando significa: Controlla all’ingresso P1 se c’è un impulso Attende che l’ impulso vada alto. Non appena è fatto, avvia il cronometro, ricontrolla il pin Appena il segnale torna “low”, ferma il conteggio e pone il valore nella variabile “x”. Questo valore ha un incremento di due microsecondi. debug? x mostra il valore di “x” sullo schermo del PC goto here ricomincia Ora prova a modificare il valore del potenziometro. Cosa succede al valore di “x” ? Puoi spiegarlo ? Ogni volta che cambi il valore del potenziometro, si modifica la frequenza di lampeggio. Pulsin può misurare al massimo 131 millisecondi a causa del valore del condensatore. Con una capacità di 10 microfarad la frequenza è troppo bassa affinché pulsin sia in grado di rilevarla. Attualmente siamo in grado di leggere la frequenza. Leggi sullo schermo il valore di “x” e moltiplicalo per 2 (ricorda che pulsin misura un intervallo di 2 ? s) e ottieni la lunghezza in ? s di ogni “blink”. Pulsin è un comando molto avanzato rispetto al solo “in”, ma deve essere usato nel modo appropriato alla singola applicazione. Per una completa conoscenza dei comandi PBASIC consulta l’Appendix B, il Basica Stamp Manual vers. 1.9.
47
What’s a Microcontroller
WhatITA.doc
Q QU UE ES STTIIO ON NS S 1. What is a potentiometer, & what is one typically used for? 2. Why might we want to use a ‘555’ timer to blink an LED instead of using the BASIC Stamp? 3. What does the pulsin command do? 4. What does the Reset pin on the ‘555’ do, & how do you connect it to the BASIC Stamp? 5. Add appropriate remarks to the following program: low 1 here: high 1 for x = 1 to 500 debug ? x next pause 3000 low 0 pause 2000 goto here
C E !! GE NG EN ALLLLE HA CH 1. Write a program (complete with remarks) that will allow the LED to blink whenever a switch is connected to P8. (You’ll need to build this circuit in hardware – if you need a hint, refer to Experiment #2 on connecting a switch to an input pin). 2. Draw the schematic diagram of your circuitry from Challenge #1. 3. Replace the switch part of the circuit in Challenge #1, with the photosensor circuit from Experiment #4. Connect the photosensor to P10 and write a program that will enable the ‘555’ blinker circuit for a period of 3 seconds, whenever the sensor “sees a shadow”. 4. Write a program that will display (using debug) the measured value of pulsin & whenever the value falls below 10000, the reset pin is brought low, shutting off the blinking circuit.
48
What’s a Microcontroller
WhatITA.doc
W WHHHYYY HHHAAAVVVEEE II LLLEEEAAARRRNNNEEEDDD?? On the lines below, insert the appropriate words from the list on the left. Microfarads Output Volume Level Simultaneously Values 131 seconds hardware debug variable integrated pulses
The ‘555’ timer is an ___________ circuit that can be used for many different applications. In this Experiment, we used it to create a stream of ___________that caused an LED to blink. We then connected the _____________of the ‘555’ to the BASIC Stamp and were able to measure the length of each pulse in _____________. A potentiometer is a mechanical version of a __________ resistor. To increase or decrease the ___________ of the pot, you physically rotate the shaft, not unlike changing the ______________on your home stereo.
The “blink rate” of the ‘555’ timer circuit is determined by the ______ of a resistor (measured in ohms) and a capacitor (measured in _____________). A microfarad is equal to 1 / 1000000 of a farad. The Pulsin command is the “input equivalent” to the _____________ command. Pulsin can measure pulses up to ___________ in length. In our program, using the __________ command, we could actually measure the length of each pulse that was blinking the __________. Utilizing hardware to accomplish simple things is sometimes the best solution to accomplish a given task. If you have an application that needs to do two things ____________, you will need to weigh the benefits / disadvantages of adding additional ___________ circuitry to your design. W WHHHYYY DDDIIIDDD II LLLEEEAAARRRNNN IIITTT?? This Experiment demonstrates the interfacing of other types of integrated circuits to a microcontroller. Microcontrollers are only capable of doing one thing at any one time. In many cases, this restriction isn’t a problem because the microcontroller operates at such a high rate of speed. If however, you absolutely need to be doing more than one thing at a time, the challenge can be easily solved by using additional circuitry as we did with the " 555" timer integrated circuit. The "555" timer has been used in innumerable applications and products throughout the years. In this experiment, we used the timer in what we call “astable multivibrator” mode. This was a relatively simple example of how to off-load some of the processing that ordinarily would have to be accomplished by the microcontroller. Many products that use a microcontroller as their central processing unit (CPU), rely heavily on additional circuitry to accomplish certain tasks. This is not to say that a microcontroller cannot do the job, but rather it is sometimes quicker and more cost-effective to use additional circuitry, to accomplish a given task. As 49
What’s a Microcontroller
WhatITA.doc
you design your own circuits, you’ll need to make decisions between additional code or additional hardware to come up with the most appropriate solution. In some upcoming experiments, we will be connecting many other types of IC’s to the BASIC Stamp which significantly enhance its operation and capabilities to interact with the "Real World". And of course, knowing how to interface different types of integrated circuits and components together is one of the foundational disciplines required of an electronics engineer.
H O W C A N A P P L Y T H S HO OW WC CA AN N II A AP PP PL LY YT TH HIIIS S? ? As you continue to experiment with microcontrollers, you’ll discover many different ways to interface or connect things. Some of these methods may be from some “application note” that was developed by a semiconductor company, still others might be your own creation. In any event, knowing the basic methods of connecting IC’s together to form a reliable product is a very valuable skill. Many of you have pagers or cell phones. These, as we’ve mentioned before have microcontrollers as their basic “brain”. But in order for these devices to realize their true potential, they need “support circuitry” (not unlike our 555 timer). And the ability to design a suitable hardware solution will always be in demand.
50
What’s a Microcontroller
WhatITA.doc
ESPERIMENTO # 6: D DA AM MA AN NU UA ALLE EA AD DIIG GIITTA ALLE E Nell’esperimento precedente abbiamo usato uno dei più popolari integrati di tutti i tempi; il timer 555. Con esso abbiamo costruito un “multivibratore astabile”; un nome estroso per un circuito che fa lampeggiare un led. Ricorda che la frequenza di lampeggio è controllata dai valori di due componenti: un condensatore ed una resistenza. Opportunamente abbiamo sostituito la resistenza con un potenziometro di un determinato valore. Ruotando il cursore ne modifichiamo la resistenza. Alcuni dispositivi non modificano il loro valore manualmente. Ad esempio in un telefono cellulare bisogna premere più volte un bottone per variare il volume del suono. In alcuni casi ciò è svolto da un circuito che ora esamineremo. Invece di variare il volume, il nostro circuito con il 555, non solo aprirà o chiuderà un circuito, ma anche varierà la frequenza di lampeggio di un led. Ricorda che tutto è realizzato in hardware. È importante tenerlo a mente in ogni progetto; si giunge a un compromesso di scelta di quale metodo sia più dispendioso.– cosa realizzare in software o in hardware. Questa non è una domanda corretta. In alcuni casi la scelta è indifferente ed è solo di tipo economico – Inoltre può un codice realizzare tutte le funzioni ? Queste sono riposte che si possono dare durante il processo di progettazione. Come vedremo, ci sono diverse riposte alle domande, e talvolta è meglio demandare al microcontrollore lo svolgere “mansioni veramente pesanti”, come i calcoli, e lasciare i compiti semplici a circuiti semplici (come un led lampeggiante). Prendiamo la Board of Education e vediamo cosa succede.
SCELTA ECONOMICA Se iniziate a creare un circuito, sia o no commerciale, il costo dei componenti elettronici può salire rapidamente – specialmente se lo fai per hobby. Diventa sempre più importante decidere qual è la migliore soluzione ad un particolare problema. Alcune volte il meglio coincide con l’economico, come alle volte potrai constatare.
Per questo esperimento occorrono i seguenti componenti: C CO OM MP PO ON NE EN NTTII (1) BASIC Stamp II module (1)“Board of Education” (1) Programming Cable (1) LED (1) 555 timer IC (1) X9313TP digital resistor (IC)
X9313 Nell’industria elettronica sono usate molte sigle per i singoli componenti. Queste sono semplici riferimenti al tipo di componente. Questo particolare IC è costruito dalla Xicor. 51
What’s a Microcontroller
WhatITA.doc
(1) 10 microfarad, 25 volt electrolytic capacitor (1) 1 microfarad, 25 volt electrolytic capacitor (1) 470 ohm, ¼ watt resistor (1) 100K potentiometer (variable resistor) (1) 15K ohm, ¼ watt resistor (1) 1 K ohm, ¼ watt resistor (1) 9 volt battery or wall transformer (misc.) connecting wires (1) BASIC Stamp Editor program C CO OS STTR RU UIIA AM MO OLLO O !! Il circuito in figura è essenzialmente un “blinker”, però, a differenza dell’esperimento #5, la variazione di frequenza è data da un circuito integrato X3913 che sostituisce il potenziometro.
52
What’s a Microcontroller
WhatITA.doc
Ricorda che il potenziometro è un resistore che cambia il suo valore quando si muove l’albero collegato al cursore. Questa variazione di resistenza è responsabile della modifica della frequenza del timer 555. L’integrato X3913 è un potenziometro digitale. Si può variare la sua resistenza mandando ad esso degli impulsi digitali generati dal BS2. Questi impulsi variano la posizione del cursore e quindi la frequenza del 555. IL circuito integrato X3913 ha una resistenza interna complessiva di 100 k? . La variazione non è continua, si può fermare in 31 posizioni. Ogni passo quindi corrisponde a 3.230 ? . (31 x 3230 = 100 k? ?? 53
What’s a Microcontroller
WhatITA.doc
Perciò, quando il cursore è in basso, la resistenza è circa zero ? (misurata tra il cursore e il contatto “low”). Quando il cursore si sposta in alto di un passo, la resistenza diventa 3.230 ? , poi diventa 6.460 ? e così fino a 100 K? . P PO OG GR RA AM MM MIIA AM MO O !! Assicurati che sia collegato il cavo seriale e quindi dai tensione. Scrivi il seguente programma con il Basic Editor. ZERO OHMS A causa della resistenza dei contatti e di altre resistenze tra le connessioni all’interno dell’integrato X3913, quando il cursore è “low” la resistenza non è zero ma è di 40 ? . Però l’errore è trascurabile in confronto ai 100 k? totali. Quaranta ohm non hanno alcun effetto sul regolare funzionamento del circuito.
x var word y var word output 0 output 1 output 2 output 3 high 0 low 3 low 2 for x = 1 to 32 high 1 low 1 next high 2 for y = 1 to 2 high 1 low 1 next here: goto here
OK, cosa fa il programma ? Se opera correttamente il led dovrebbe lampeggiare poco lentamente. Altrimenti controlla nel programma se le istruzioni sono corrette. Ora prova questo: cambia il valore di “y” da 2 a 25. Le istruzioni (commentate) dovrebbero essere: x var word y var word output 0 output 1 output 2 output 3
'555 reset 'increment 'UP / down 'chip select 54
What’s a Microcontroller
high 0 low 3
WhatITA.doc
‘enable the blinker ‘select the X9313
‘this section resets the variable resistor to zero ohms low 2 for x = 1 to 32 high 1 low 1 next
‘the pulses cause the X9313 to go “down” ‘pulse it ‘cycle 32 times
‘this routine sets the value of the variable resistor to a value ‘determined by ‘y’ in the For…Next Loop high 2 for y = 1 to 25 high 1 low 1 next
‘the pulses cause the X9313 to go “up”
here: goto here
‘after setting the resistor, stay here and do nothing
‘cycle 25 times (set the resistor up 25 positions)
Run the program. Cosa accade ? Perchè ? Ora controlla le seguenti parti di programma: x var word y var word Nulla di nuovo; vengono settate le coppie di variabili chiamate “x”” and “y”. output 0 '555 reset questa uscita è connessa alla linea di “time reset”. Perciò cambiando i valori di P0 abilitiamo o spegniamo il lampeggio. output 1 ‘incremento Cosa è connesso a P1 ? La risposta può essere trovata nelle caratteristiche del resistore variabile X3913. L’incremento del segnale (sul pin #1 di X3913) è ciò che ci serve per spostare il cursore. Come si può notare si usano i comandi “high” e “low” per rendere impulsivo il segnale. output 2 'UP / down Un’altra uscita da BS2 connessa al pin “UP / down” del X9313. Quando poniamo P2 “alto”, ogni impulso sul pin “incremento” causa un aumento del valore 55
What’s a Microcontroller
WhatITA.doc
resistivo. Per contro, se P2 è “basso”, ogni impulso decrementa il valore della resistenza di X3913. output 3 'chip select è solo un segnale per abilitare X3913 a modificare la sua resistenza. Se il segnale “chip select” è alto (pin 7 di X3913), ogni impulso “UP / down” è ignorato. high 0 ‘enable the blinker Pone P0 alto e per questo abilita il circuito di lampeggio. low 3 ‘select the X9313 il “chip select” P3 se posto a “0” abilita X3913 a ricevere gli impulsi e a modificare la sua resistenza, low 2
‘the pulses cause the X9313 to go “down”
All’accensione di X3913 non abbiamo alcuna idea di dove sia il cursore, perciò la routine seguente manda una serie di impulsi che portano all’inizio il cursore. Il numero di 32 impulsi (low 1) ci assicura di ritornare alla posizione iniziale. Gli eventuali impulsi in soprannumero verranno mandati a massa dall’integrato. low 2 ‘the pulses cause the X9313 to go “down” for x = 1 to 32 high 1 ‘pulse it low 1 next ‘cycle 32 times Questi comandi mandano P1 alto e basso 32 volte fino a riportarci alla posizione iniziale. high 2 ‘the pulses cause the X9313 to go “up” Ponendo P2 alto si muove il cursore verso l’alto. for y = 1 to 25 high 1 low 1 next ‘cycle 25 times (set the resistor up 25 positions) Si può dare a y una serie di valori da 1 a 32 (es. 25) che porta il cursore nella posizione corrispondente. here: ‘after setting the resistor, stay here and do nothing goto here A questo punto il programma rimane in questa posizione eseguendo sempre lo stesso “loop”. OK, modifichiamo il programma come di seguito per modificare la frequenza di lampeggio in modo visibile. x var word y var word 56
What’s a Microcontroller
WhatITA.doc
output 0
'555 reset
output 1 output 2 output 3
'increment 'UP / down 'chip select
high 0
‘turn on the blinker
here: low 2 low 3
‘point the wiper “down” ‘select (or enable) the X9313 to receive data
for x = 1 to 32 ‘reset the value of the wiper to “0” slowly high 1 low 1 pause 200 next high 2 for x = 1 to 32 high 1 low 1 pause 200 Next goto here
‘point the wiper “up” ‘make it go up 32 discrete positions ‘pause for a short time so that we can see it. ‘do it again
La prima parte del programma è la stessa, con l’eccezione dell’etichetta “here” e delle seguenti: high 2 ‘point the wiper “up” Impone al cursore di muoversi verso l’alto for y = 1 to 32 ‘make it go up 32 discrete positions Come prima, per mandare il cursore all’estremo in alto high 1 low 1 Qui sono creati gli impulsi
OHMmetro Un ohmetro è un dispositivo che misura valori di resistenza. Lavora facendo circolare una corrente in una resistenza e misurandone la caduta di tensione ai capi. Solitamente bisogna togliere alimentazione (al circuito sotto misura) prima di usare l’ohmetro. Tuttavia nel caso dell’IC X3913 si può lasciare l’alimentazione e misurare la resistenza facendo contatto con le sonde sui tre terminali (potenziometro) dell’integrato; infatti l’IC deve essere alimentato per potere variare la sua resistenza.
debug ? y Riusciamo a vedere la posizione del cursore pause 200 ‘pause for a short time so that we can see it. Ora, scrivendo “pause” qui, possiamo appena vedere dove si muove il cursore. Nota che il lampeggio diventa sempre più lento con la variazione della resistenza interna all’integrato. next goto here ‘do it again Invece che in un “do noting loop”, torniamo all’inizio per riprendere il processo.
57
What’s a Microcontroller
WhatITA.doc
Esperimento: Cambia alcuni valori. Cosa accade se non si riporta ogni volta il cursore in basso ? Prova un numero di impulsi oltre il limite di 32. Se possedessi un ohmetro, potresti misurare la variazione di resistenza del X3913 tra i due estremi di un potenziometro …
Q QU UE ES STTIIO ON NS S 1. What does “chip select” mean? 2. How is the X9313 different from the potentiometer that we used in Experiment #5? 3. Why does the For…Next command come in useful in this Experiment? 4. Why is it important to know how to hook up hardware, rather than just writing programs for a microcontroller? 5. Add appropriate remarks to the following program: x var word y var word output 0 output 1 output 2 output 3 high 0 low 3 low 2 for x = 1 to 32 high 1
low 1 next high 2 for y = 1 to 20 high 1 low 1 next here: goto here
58
What’s a Microcontroller
WhatITA.doc
C CH HA ALLLLE EN NG GE E !! 1. Write a program (complete with remarks) that alternates the rate of the LED blinker circuit from a slow speed to a fast speed, every 5 seconds. 2. Write a program that changes the rate of the blinker circuit every 1 second. The rate is to go from a fast blink to a slower blink. Once the circuit has cycled one complete time (after approximately 31 seconds!) have the program stop the blinker circuit and go to a “do nothing” loop. Display the wiper position as it is changing, on your PC using debug. 3. Replace the 10 microfarad capacitor in the 555 timer circuit with a 1 microfarad cap. Connect the output of the 555 to P5 on the BASIC Stamp. Now draw the complete schematic of your circuit. 4. Using the circuit from Challenge #3, modify the program from Challenge #2 to measure the length of the pulses in (2) microsecond increments using the ‘pulsin’ command on the BASIC Stamp’s P5 pin. Have the program recycle & do it again.
W WHHHYYY HHHAAAVVVEEE II LLLEEEAAARRRNNNEEEDDD?? Inserisci, nelle linee sotto, le parole appropriate poste nel riquadro Design Program Space Manual function pulses hardware interface off-loading displaying BASIC Stamp rate microcontroller
The ________________ is capable of doing many different things. It all depends on what type of ____________ is connected to it. In this Experiment we built a 555 timer circuit and allowed the microcontroller to send out a series of _________ that not only enabled the blinking circuit, but also controlled the actual ________ of the pulses coming out of the 555. The control of the blink rate was accomplished by replacing the “__________” pot that we used in our last Experiment with the X9313 “digital potentiometer”. There are many devices, such as the X9313, that allow microcontrollers to _____________ and control things in the “real world”. By setting the blink rate at a certain point, the BASIC Stamp was free to “go about other business”, such as calculating or ____________ data on our PC.
Many times it is necessary to free up valuable (and sometimes expensive) ___________________ for more important tasks. We saw this initially in Experiment #4, and we now see that the potential of “________________” some of the processing from the microcontroller may in fact, be unlimited. It’s possible, for example that a complete control system could be built with no microcontroller at all. It would be made entirely of “discrete” logic. In fact, until the emergence of the ______________, this was how circuits were built. The microcontroller therefore gives us the option of choosing whether a _____________ should be solved in hardware or software. It’s all part of the __________ process.
59
What’s a Microcontroller
WhatITA.doc
W WH HY YD DIID D II LLE EA AR RN N IITT ??
60
What’s a Microcontroller
WhatITA.doc
61