Elettronicamente.com
La risorsa Italiana per l'elettronica
e l'informatica applicata all'elettronica
  Sponsor
|Home| |Registrazione| |Login| |Disclaimer| |Contattaci| |Guida| |FAQs|
|Download| |Forum| |Links| |MySite|
Cerca in Elettronicamente:
 
I numeri di Elettronicamente.com:
  Iscritti: 12853
  Risorse On-Line: 508
  Links su siti di elettronica: 1304
  Sei il visitatore numero 1171359
Login non eseguito
Descrizione
ID #710  Tutorials
Propeller P8X32A - Parte 3 - Esercizio#7   07/03/2009
In questo esercizio viene modificato e migliorato solo il file oggetto OUTPUT.SPIN creato nell'esercizio numero 6.
Difficoltà:
Difficoltà di realizzazione o apprendimento. 2 stella/e.

Voto:
n.d.
Voto attuale (1/10) calcolato in base alla media delle votazioni di tutti gli iscritti che hanno votato questa risorsa.

Autore:
atomix
Autore della risorsa:atomix
HTML:
In questa casella viene indicato se è disponibile una pagina web da visualizzare.
File:
No
Allegato disponibile:
In questa casella viene indicato se è disponibile un file da scaricare.

Crediti Virtuali:
Free
Crediti virtuali necessari per scaricare il file allegato:0

Status:
ONLINE
Partecipa al FORUM di Elettronicamente.com per questo argomento.


Esercizio# 7 - Migliorare l'oggetto - Output.spin

In questo esempio viene modificato e migliorato solo il file oggetto OUTPUT.SPIN.
 

{{ Output.spin }} 

VAR

   long Stack[9] 'Assegna spazio necessario per lo stack
   byte Cog 'Memorizza l'ID del cog in funzione

PUB Start(Pin, Delay, Count): Success

{{Avvia un nuovo processo di lampeggio in un nuovo cog, ritorna TRUE se ok}}

   Stop
   Success := (Cog := cognew(Toggle(Pin, Delay, Count), @Stack) + 1) 

PUB Stop

{{Arresta il processo di lampeggio fermando il cog}}

if Cog
   cogstop(Cog~ - 1) 

PUB Active: YesNo

   {{Ritorna TRUE se il processo è attivo, altrimenti ritorna FALSE.}}
      YesNo := Cog > 0

 

PUB Toggle(Pin, Delay, Count)

    {{Inverte il Pin, tante volte come in Count e con ritardo in Delay (clock cycles).}}
           Se Count = 0, inverte il Pin per sempre.}} 

   dira[Pin]~~ 'Imposta il registro di direzione I/O
   repeat 'Ripeti il codice..
          !outa[Pin] 'Inverti il pin I/O
 
         waitcnt(Delay + cnt) 'Attendi i cicli macchina in Delay
      while Count := --Count #> -1 'Ripeti finché Count non è uguale a 0 (make min -1)
      Cog~ 'Cancella la variabile Cog
 

Negli esempi precedenti non era stato previsto un metodo per arrestare il lampeggio di un led, ma si doveva attendere il termine della sua esecuzione. In questo esempio invece vengono aggiunti due nuovi metodi all'oggetto "Output", uno chiamato Start e uno chiamato Stop. Il primo (Start) esegue l'avvio di un nuovo cog ed il lampeggio del led collegato al pin richiesto. Il secondo (Stop) termina semplicemente l'operatività del cog terminandone di conseguenza anche l'esecuzione del suo programma. Nel gruppo di dichiarazione delle variabili (VAR) è stata aggiunta una variabile chiamata Cog, che avrà il compito di memorizzare quanti Cog sono attivi. Entrambe le variabili (Stack e Cog) sono "Pubbliche" all'interno dell'oggetto OUTPUT.SPIN, ciò significa che la loro modifica all'interno dei metodi (PUB o PRI) avranno effetto solo all'interno dell'oggetto OUTPUT.SPIN.

Nel metodo 'Start':

E' stato aggiunta la possibilità di far ritornare un valore (: Success) che riporta il risultato (positivo/negativo) dell'operazione di start di un nuovo Cog. A causa del fatto che nel 'propeller' i Cog non sono infiniti, ma ne abbiamo un numero limitato, è buona cosa sapere se l'avvio di un nuovo Cog è avvenuto con successo.
Per ciascun metodo PUB/PRI, il ritorno di un valore è sempre di tipo Long (4 bytes), ma in questo caso, il valore di ritorno sarà di tipo booleano (true/false).

Il metodo Start esegue due cose: Inizialmente esegue lo STOP del Cog (metodo Stop), questo è stato aggiunto giusto nel caso che il metodo START sia stato eseguito più volte (senza eseguire lo STOP), così da creare confusione tra i Cog ed eventualmente creare sovrascritture indesiderate nell'area dello STACK. Successivamente avviene lo Start con l'esecuzione della riga: Success := (Cog := cognew(Toggle(Pin, Delay, Count), @Stack) + 1)
Analizziamo brevemente questa riga: La prima cosa da dire è che è molto simile a quella dell'esercizio precedente, ma questa volta l'istruzione cognew è racchiusa all'interno di un'altra espressione. Il risultato di tutto è che la variabile Success assume un valore compreso tra 0 e 7 se l'operazione di start del Cog è avvenuta correttamente, altrimenti assumerà il valore -1 (Cog non disponibile). Invece la variabile Cog assumerà l'ID del cog che è entrato in esecuzione. Il metodo che eseguirà il nuovo Cog è ovviamente il metodo Toggle, come nell'esercizio precedente. Una cosa da notare è l'operatore di assegnazione ':=', il quale assume una sintassi leggermente differente rispetto ai linguaggi più comuni. Ricordiamo che invece i valori per le costanti devono essere assegnati solamente con il simbolo '='.

Nel metodo Stop:

viene arrestato il Cog se già in esecuzione. Infatti troveremo all'interno di questo metodo una IF che condiziona l'esecuzione dell'istruzione COGSTOP. Se la variabile Cog (ricordate che è stata impostata durante l'esecuzione di COGNEW?) è maggiore di zero, significa che almeno un COG è già in esecuzione. Quindi un valore di Cog superiore/diverso a zero equivale a TRUE, mentre un valore uguale a zero equivale a FALSE. Nella nostra IF, l'istruzione COGSTOP viene eseguita se la variabile Cog ha un valore diverso da zero (almeno un Cog è in esecuzione). Ora passiamo alla linea cogstop(Cog~ - 1). Nell'istruzione COGSTOP, è necessario indicare l'ID del cog che desideriamo arrestare. Avendo già a disposizione una variabile che contiene il valore dell'ultimo Cog avviato, possiamo dire al programma di fermare l'esecuzione del cog (sottraendo 1 dal suo valore iniziale), e successivamente 'azzerare' la variabile Cog. Questa ultima cosa avviene con l'istruzione 'Cog~' dove il simbolo '~' è un POST-OPERATOR, il che significa che l'operazione di 'azzeramento' della variabile Cog avverrà per ultima, dopo che viene sottratto '1' dal suo valore originale. Riassumendo, la sequenza è: Arresta il cog con ID = variabile Cog meno 1, successivamente imposta a zero la variabile Cog.

 

Nel metodo Active:

Viene semplicemente restituito un valore TRUE/FALSE se la variabile Cog è maggiore o uguale a zero. Il metodo può essere utile a capire se il cog è in esecuzione.

 

Nel metodo Toggle:

Sono state effettuate piccole ma significative variazioni. All'ultima linea troviamo l'istruzione Cog~ la quale 'azzera' la variabile Cog al termine dell'esecuzione del lampeggio. Questa serve a 'ricordare' che l'esecuzione del programma nel cog è teminata, quindi il Cog si metterà in uno stato dormiente fintanto che non ritorni in esecuzione con una nuova istruzione COGNEW. Se non forzassimo il valore di questa variabile a zero, i metodi START e ACTIVE potrebbero non capire che il lavoro in questo Cog è terminato, credendo che esso sia ancora impegnato nell'esecuzione di TOGGLE.

 

Parte 3 - Esercizio#6 Indice


 

 
Cod.33210
Sistema di sviluppo molto compatto per il chip Propeller P8X32A-M44 con interfaccia USB utilizzabile anche come modulo per i prototipi.
Ulteriori info:
http://www.elettroshop.com/dettagli.asp?pid=1629
Acquista ora questo prodotto su

a € 80.10
+iva
invece di € 89.00+iva
RISPARMI IL 10%

Q.ta
 
Cod.32311

Kit accessori Propeller: Mini Tastiera (PS/2), Mouse ottico (PS/2), LCD 2.5"

Ulteriori info:
http://www.elettroshop.com/dettagli.asp?pid=1153
Acquista ora questo prodotto su

a € 125.10
+iva
invece di € 139.00+iva
RISPARMI IL 10%

Q.ta
 
Cod.32300

Scheda di sviluppo per Propeller, con programmatore USB

Ulteriori info:
http://www.elettroshop.com/dettagli.asp?pid=1160
Acquista ora questo prodotto su

a € 103.50+iva

invece di € 115.00+iva
RISPARMI IL 10%

Q.ta
 
Cod.P8X32A-D40

Microprocessore Propeller DIL 40 P8X32A-40

Ulteriori info:
http://www.elettroshop.com/dettagli.asp?pid=1149
Acquista ora questo prodotto su

a € 8.01
+iva
invece di € 8.90+iva
RISPARMI IL 10%

Q.ta
 
Cod.ESP8X32A-Q44

Microprocessore Propeller QFTP P8X32A-Q44

Ulteriori info:
http://www.elettroshop.com/dettagli.asp?pid=1150
Acquista ora questo prodotto su

a € 8.01+
iva
invece di € 8.90+iva
RISPARMI IL 10%

Q.ta
 
Cod.ES122-32000

Manuale tecnico del microcontrollore Propeller

Ulteriori info:
http://www.elettroshop.com/dettagli.asp?pid=1163
Acquista ora questo prodotto su

a € 35.10
+iva
invece di € 39.00+iva
RISPARMI IL 10%

Q.ta
 
Cod.3ES32111

Propeller Professional Development Board
Board di sviluppo professionale per Propeller

Documentazione: [Link]
Schema elettrico: [Link]
Acquista ora questo prodotto su

a € 170.55
+iva
invece di € 189.50+iva
RISPARMI IL 10%

Q.ta
 
Cod.ES32212

E' una scheda millefori con dimensioni 8x10 cm, con incluso un Propeller gia' saldato, la Eeprom da 64 KB, l'alimentatore a 5 e 3,3 volt, una zona predisposta per il montaggio del connettore VGA e quelli per mouse e tastiera


Acquista ora questo prodotto su

a € 31.50
+iva
invece di € 35.00+iva
RISPARMI IL 10%

Q.ta
 
Cod.130-32212



Componenti sciolti: tra cui un blocco (come nei PC) che contiene connettore VGA e due connettori PS2 e le resistenze per il collegamento al Propeller, che si sposano con la propeller Proto Board

Acquista ora questo prodotto su

a € 19.35+iva
invece di € 21.50+iva
RISPARMI IL 10%

Q.ta
 
Cod.32201

 

 

 E' l'adattatore USB/seriale per poter programmare il Parallax per mezzo della USB            

Acquista ora questo prodotto su

a € 26.55+iva
invece di € 29.50+iva
RISPARMI IL 10%

Q.ta
 
Cod.32305

 

Contiene un libro, il Prop Plug, una breadboard, un
Propeller a 40 pin e componenti sciolti, una scatola di plastica che contiene la breadboard e tutti i componenti sciolti

Acquista ora questo prodotto su

a € 103.50+iva
invece di € 115.00+iva
RISPARMI IL 10%

Q.ta
 
Cod.32100

Scheda di sviluppo per Propeller 44 pin QFP

Ulteriori info:
http://www.elettroshop.com/dettagli.asp?pid=1159
Acquista ora questo prodotto su

a € 80.55+iva

invece di € 89.50+iva
RISPARMI IL 10%

Q.ta
  Cloud
 Elettronicamente.com  PICmicro  RS232 FT232 P8X32A Parallax PIC16F84 Programmatore Elettronica PCB Circuito Stampato Fotoincisione Microchip PIC16F876 Linguaggio AVR Linux NE555 ARM HD44780 DISPLAY LCD Alimentatore XE164 Infineon LED Amplificatore Laboratorio Resistenza Condensatore Termometro PWM relazione
www.Elettronicamente.com
Utenti attualmente connessi:
(Nessuno)