Menu:

PPTEA Guida Galattica


di MarKoZaKKa


Questa è la discussione originale.


Indice:

Capitolo 1:
a che serve?

La Guida Galattica, intendo... beh, ad imparare ad usare il PPTEA senza sorbirsi la noiosissima documentazione a corredo... in fondo, a che serve sapere usare i vettori, se col PPTEA ci voglio accendere un led?
E allora, cominciamo... ma nel capitolo 2, che già mi sono stancato a scrivere...
Se volete lasciare dei commenti, vi prego di inserirli nella apposita discussione
"Commenti alla Guida Galattica"
Darò a questa guida un carattere molto "leggero", sia per non cadere nel noioso, sia per non annoiarmi io.
Non intendo con questo offendere nessuno, dando toni scherzosi alla questione.
Programmare non è facile, farlo bene ancora meno, insegnarlo è difficilissimo; non sto prendendo in giro nessuno, ne chi sa programmare, ne chi non lo sa ancora fare, ne chi lo insegna.
Io, non sono in nessuna delle tre categorie, il PPTEA lo USO, ho delle basi arcaiche e lacunose di programmazione BASIC e Pascal, ma posso dedicare qualche tempo a questa cosa.
Buon divertimento!

Torna all'indice

Capitolo 2:
Il PPTEA, a che serve?

Il PPTEA è un microcontrollore della famiglia PICMicro (ovvero un circuito integrato o IC che contiene al suo interno quattro dozzine di oggetti che, sinceramente, non mi interessano), che un elettricista fulminato e megalomane in cerca di fama fortuna e gloria ha dotato di un "firmware", ovvero di una programmazione, che rende accessibile il suo utilizzo a tutti coloro siano in grado di programmare, senza curarsi di tutti quegli acchrocchi che si trovano al suo interno, utilizzando una sua personale versione del BASIC, che come dice il nome è un linguaggio di programmazione di base, rendendo tanto banale la cosa che quasi mi vergono a farci una guida sopra.

Dando per scontato che se stai leggendo questa guida, è inutile che ti spieghi come si installa il firmware, come si accende e cosa si collega al PPTEA per farlo funzionare, perché probabilmente hai la tua bella scheda "PPTEA/KSB" nuova fiammante che avrai comprato pagandola profumatamente al sottoscritto e che stai guardando come Amleto guardava il teschio del suo precettore (?!?), o forse è il contrario (è il PPTEA che guarda te, sperando in un tuo segno di vita) iniziamo a parlare dell'I/O (input/output; ingresso/uscita)

Il PPTEA ha 16 linee di I/O configurabili, ovvero che possono essere impostate ciascuna come Input (ingresso) oppure Output (uscita) digitale... no, non devi mettere il dito li... uffa!
Intendo dire che ogni linea impostata come Output può assumere uno stato ALTO (il PPTEA porterà la tensione di quella linea a circa +5Vdc) oppure uno stato BASSO (la tensione sarà prossima a 0Vdc) come comandato dal programma in esecuzione; se impostata come Input, sulla base della tensione presente sulla linea, verrà considerata come stato logico ALTO (se la tensione applicata dall'esterno sarà prossima a +5Vdc) oppure BASSO (se la tensione sarà prossima a 0Vdc) ed il programma potrà eseguire comandi diversi sulla base di questo stato.

Bene, ma a che serve il PPTEA?
Fondamentalmente a farti spendere soldi in maniere che non avresti neppure immaginato, ad esempio ad accendere la luce della tua cantina mentre ti trovi in giardino usando un pulsante che prima (del PPTEA) accendeva le luci del giardino ed ora, con una modica spesa, accende due luci diverse.

Oppure, a comandare l'irrigazione dello stesso giardino, quando ci sono gli ospiti, cosa che avresti fatto con 20 euro di programmatore orario cinese preso al brico del centro commerciale.
Un simpatico effetto collaterale del PPTEA è che tua moglie avrà un motivo in più per essere "furiosa" con te.

Torna all'indice

Capitolo 3:
Il mio primo programma.

Per fare un programma, innanzitutto serve un problema da risolvere con un programma, il fatto che poi il programma crei problemi nuovi, è totalmente irrilevante.
Il mio problema è: accendere un LED. Soluzione: collega il LED ad una pila.
Il programma deve dividere questa semplice azione in passi ancora più semplici, che eseguiti in sequenza, mi portino al risultato.
Programma:
1) prendi un LED
2) prendi una pila
3) metti un piedino del led sul "+" della pila
4) metti l'altro piedino sul "-" della pila
5) il led si è acceso? se si, vai al punto 8), se no, vai al punto 6)
6) inverti i piedini del LED, girandolo
7) vai al punto 5)
8) il led è ancora acceso? se si, vai al punto 13), se no vai al punto 9)
9) scrivi su un postit "led bruciato"
10) attacca il postit al led
11) butta il led nei rifiuti RAEE
12) vai al punto 1)
13) scrivi su un postit "led funzionante"
14) attacca il postit al led
15) fine
Ecco fatto.
Abbiamo risolto un problema dividendolo in passi, sembra che tutto funzioni, ma è proprio così?
Qualcuno potrebbe dire che questo è un programma per bruciare i led, non per accenderli.
Vi posso assicurare che si accendono di luce vivissima, e cambiano pure colore, prima di bruciare... ma se il led fosse già bruciato prima che io lo colleghi alla pila senza resistenza, bruciandolo? Rimarrei "inlooppato" (bloccato in un loop) sulle istruzioni 5...7...
Ecco, al primo programma abbiamo già creato un "bug" e lo abbiamo pure scoperto.
Come? volevate fare un programma per il PPTEA? Ma se non sapete nemmeno accendere un led senza bruciarlo!

Torna all'indice

Capitolo 4:
Il mio primo programma per il PPTEA

Innanzitutto, dove lo scrivo il programma?
Anche su un pezzo di carta della focaccia, il problema è che se ungi il PPTEA non è che vada più veloce, meglio usare l'apposito COMPILER che hai provveduto a scaricare senza sapere cosa sia, e che hai installato seguendo il manuale, prima di fermarti davanti alla sua schermata bianca appena lanciato.
Quella pagina bianca è il posto giusto per scrivere il tuo primo programma per il PPTEA.
Bene, abbiamo ancora il problema del LED da risolvere, sappiamo che il PPTEA ha 16 I/O e sappiamo che possiamo configurarli, ma come si fa?
Torniamo al nostro LED: dobbiamo decidere a quale linea di I/O del PPTEA lo collegheremo, direi alla numero 15, tanto per fare qualcosa di eccentrico.
Inoltre, vogliamo che il LED si accenda quando la linea è a livello ALTO, oppure quando è a livello BASSO?
Dato che sono sbarazzino, voglio che si accenda quando la linea si trova a livello ALTO.
Pertanto, colleghiamo il nostro LED con l'anodo alla linea 15 del PPTEA, il catodo ad uno dei terminali di una resistenza da 1KOhm, e l'altro terminale a massa... no, non il pilota di F1, intendo il negativo dell'alimentazione, come? non sapete quale sia l'anodo e quale il catodo? Allora, fate così: collegate il terminale del LED al positivo di alimentazione invece che al PPTEA, se si accende, l'anodo è quello, altrimenti girate il led e riprovate, poi ricollegatelo alla linea 15.
Adesso, iniziamo a scrivere qualcosa nel compiler.
La prima istruzione sarà:

10 SETIO=&B0111111111111111

Dire che non c'è bisogno di spiegazioni: SETIO dice al PPTEA come voglio impostare le sue linee, &B indica che voglio usare la notazione binaria, le sedici cifre indicano quali linee voglio impostare come uscite (0) oppure ingressi (1), a partire dalla linea 15, quella più a sinistra, per arrivare alla linea 0, quella più a destra.
Se ad esempio avessi voluto impostare le linee da 0 a 7 come ingressi, e le altre come uscite, avrei scritto:

10 SETIO=&B0000000011111111

Bene, ora che abbiamo detto al PPTEA quali devono essere le linee di uscita e quali di ingresso, dobbiamo dire al PPTEA di impostare la linea alla quale abbiamo collegato il LED al valore ALTO, in modo da accenderlo.
Useremo pertanto un'altra istruzione:

20 OUTBIT(15)=HIGH

Possiamo anche scrivere "1", oppure "TRUE" oppure "ONE" al posto di "HIGH", l'effetto sarebbe lo stesso, il nostro bravo elettricista ha deciso di confonderci le idee permettendoci di dire in quattro maniere diverse la stessa cosa. Bene, il led è acceso, e adesso?
Sarebbe carino farlo pure spegnere, e come si fa?
Bravi, sempre con la OUTBIT, basta dire che adesso vogliamo la linea 15 a livello BASSO, quindi:

30 OUTBIT(15)=LOW (oppure "0", oppure "FALSE", oppure "ZERO")

Ok, abbiamo acceso, abbiamo spento, direi che possiamo fermarci:

40 END

E adesso come facciamo a vedere se il nostro programma funziona?
Avrete sicuramente notato che si sono attivati i menù "Save" e "Compile".
Innanzitutto, salviamo questo complicatissimo programma, sennò ci tocca riscriverlo; poi, dobbiamo "Compilarlo", ovvero far eseguire un controllo di correttezza e successivamente una "traduzione" nel linguaggio del PPTEA, facendo click su "Compile".
La parte bassa della finestra mostrerà alcuni messaggi di alcun'interesse, ed una barra che ci indica se è tutto OK (colore verde) e quanta memoria del PPTEA stiamo utilizzando.
A questo punto, se avete scritto tutto correttamente, vedrete una piccola barra verde in basso, ed in alto si sarà attivata anche la voce "Debug".
Facciamo click li sopra, ed attiviamo il "Debugger".
Qui possiamo far funzionare il nostro programma come se fosse già dentro al PPTEA, vedere cosa succede, fermarlo e farlo ripartire, oppure farlo avanzare una riga alla volta, in maniera da capire dove è il baco che non lo fa funzionare correttamente.
Basta fare click su "RUN" per fare partire l'esecuzione simulata.
Fatto? Cosa avete visto? Nulla?
Vi siete fatti distrarre dalla barra blu che si muove, vero?
Guardate nell'area "I/O", in particolare il bit 15 e rifate click su "RUN"... visto? è apparsa un'attimo una "v" nel quadratino, e poi è scomparso...
Se spostate il cursore "Speed" verso "Slow", rallenterete l'esecuzione, e capirete meglio cosa accade ad ogni singola istruzione.
Certo, però è una tristezza, un led si accende e subito si spegne, sarebbe meglio che lampeggiasse... come fare... potremmo scrivere righe e righe di OUTBIT, ma prima o poi finiremmo la memoria del PPTEA.
Bisognerebbe poter far tornare indietro il programma, ma certo, con il GOTO, che stupido!
Facciamo click su EXIT DEBUG, e modifichiamo la linea 40:

40 GOTO 20

diciamo così al PPTEA di ritornare alla linea 20 e riprendere da li l'esecuzione.
Rifacciamo Save, Compile, Debug, Run e vediamo che il nostro bel "v" appare e scompare e appare e scompare e appare...
A questo punto, vi potrei far trasferire il codice al PPTEA, per poi sentirvi esclamare stizziti "Ma è sempre acceso!!!", invece, vi dico ancora una cosetta, vista la velocità di esecuzione delle istruzioni da parte del PPTEA, la durata del ciclo sarebbe così breve da darvi l'impressione di un led sempre acceso.
Dobbiamo aggiungere due righe, che ci permettono di "rallentare" il PPTEA:

25 WAITMS 500 35 WAITMS 500

l'istruzione WAITMS permette di inserire una pausa (WAIT) nell'esecuzione di tot millisecondi; noi stiamo inserendo due pause di 500 millisecondi, immediatamente dopo l'accensione e dopo lo spegnimento del LED; l'effetto sarà quello di lasciare il LED acceso per 500ms, poi lasciarlo spento per altri 500ms e così via.
Provare per credere, sapete già cosa fare.
Adesso potremmo trasferirlo al PPTEA, ma dopo tutte queste spiegazioni, sono stanco e vado a nanna...
Al prossimo capitolo.

Torna all'indice

Capitolo 5:
Il mio primo programma per il PPTEA è una m&®Ð@

Avete fatto, vero?
Vi siete andati a leggere nella documentazione come si trasferisce il codice EABasic al PPTEA, lo avete fatto, siete stati li un pò a vedere il vostro led che faceva ACC...SPENT...ACC...SPENT, e poi vi siete detti "che mer...enda di programma..."
In effetti, è veramente una schifezza, per 1,50€ vi compravate un led lampeggiante che faceva già tutto.
Rendiamo la cosa più interessante, usiamo anche un'input, e facciamo in modo che se l'ingresso è ALTO il led lampeggia, e viceversa.
Rivediamo il nostro codice in tutto il suo splendore:

10 SETIO=&B0111111111111111
20 OUTBIT(15)=HIGH
25 WAITMS 500
30 OUTBIT(15)=LOW
35 WAITMS 500
40 GOTO 20

Prendiamo una linea qualsiasi, la 14 ad esempio, è già configurata come input.
Come possiamo modificare il codice per gestire lo stato della linea?
Innanzitutto, l'istruzione che ci serve è la INPBIT(n) che restituisce lo stato della linea n (che deve essere configurata come input).
Allora, deve essere dentro al ciclo perché dobbiamo controllarla prima di decidere se far lampeggiare il led, e farlo ad ogni ciclo per fermarci quando il suo stato cambia.
Quindi, se 14 è ALTA, lampeggio, altrimenti, aspetto che diventi alta. L'istruzione che ci serve è il cosiddetto "SALTO CONDIZIONALE" (OOOOoooohhhhh!!!! fà la folla, rullo di tamburi, OOOOOOpla!) ovvero una istruzione che, al verificarsi di una condizione, ci manda in un posto oppure in un'altro... un pò quello che succede con le donne, solo che in quel caso, loro non sanno quale sia la condizione (1 pragma misogino_mode=off)
La struttura dell'istruzione è questa:

IF condizione_da_verificare_è_vera THEN riga ELSE altrariga SE condizione_da_verificare_è_vera ALLORA vai alla riga ALTRIMENTI vai all'altra riga

La parte di istruzione ELSE altrariga è facoltativa, se serve si usa, altrimenti si può non scriverla.
Tornando al nostro LED, io farei così:

15 IF INPBIT(14)=HIGH THEN 20 ELSE 15

Ma potrei anche fare così:

15 IF INPBIT(14)=LOW THEN 15

oppure

15 IF INPBIT(14)=FALSE THEN 15

risparmiando ben 1 token, eliminando l'ELSE; dato che ne abbiamo 256 disponibili nel PPTEA, se il programma è lungo e con molti salti, ciò si traduce in un bel risparmio di memoria, come? cos'è un token?
Perdincibacco! il token è l'unità minima di memoria programma del PPTEA.
Il PPTEA senza espansione di memoria ha 256 token di memoria, vabbè che il manuale è noioso, ma se lo leggete, evito di perdere tempo in quisquilie, torniamo all'IF và

Potrei pure scrivere:

15 IF !INPBIT(14) THEN 15

Chi me la spiega? Si... lei, signorina Grace Arkansas... si.. bene... brava... come dice? La linea 40? Ah,si, è vero, mi sono scordato di dirlo... capito tutti?
Bene, proseguiamo.
Quindi adesso il nostro programma aspetterà che la linea 14 sia ALTA per iniziare a lampeggiare, e lo farà fino a che non tornerà bassa.
Dato che siete stati così bravi a trasferire il primo programma, trasferitevi sul PPTEA anche questo, e vedete che accade.
Si, la linea 14 la potete collegare ai +5V o a massa direttamente, senza resistenze.
Al prossimo capitolo.

Torna all'indice



Valid XHTML 1.0 Strict



[ Back to top ] [ Home ]