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 #702  Tutorials
Propeller P8X32A - Parte 1 - Introduzione   28/02/2009
Introduzione al chip Propeller P8X32A
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.


Parte 1 - Introduzione al Parallax Propeller Chip P8X32A

Il chip P8X32A è un innovativo dispositivo prodotto dalla Parallax Inc. (www.parallax.com) caratterizzato da 8 processori a 32 bit integrati in un solo packeage. Gli otto processori (chiamati COGs) possono lavorare autonomamente o in modo cooperativo in quanto hanno a disposizione una propria memoria RAM dedicata da 512x32 bit e, in comune, periferiche I/O e una memoria di sistema composta da 32Kb di RAM e 32Kb di ROM. Questo chip collegato con un minimo di hardware esterno, è in grado di comunicare in modo semplice ed immediato, con periferiche comuni come ad esempio una tastiera per PC, un mouse, un monitor VGA o addirittura con un televisore dotato di ingresso video-composito. Infatti, grazie alle molteplici librerie messe a disposizione dalla Parallax, comunicare con una di queste periferiche non è più un problema per lo sviluppatore. L'ambiente di progettazione per PC viene fornito gratuitamente dal costruttore. Il tool di sviluppo software viene fornito con la possibilità di scrivere i programmi in due linguaggi diversi: Uno a basso livello (assembler) e uno ad alto livello (SPIN). Quest'ultimo viene compilato come codice-oggetto ed eseguito dall'interprete contenuto nella ROM del chip. E' possibile scrivere un programma anche utilizzando i due linguaggi contemporaneamente.

Un piccolo esempio pratico:

Per chi non ha mai visto le potenzialità di questo dispositivo, la semplicità di utilizzo delle librerie vi lascerà di stucco. Per fare un esempio se si vuole far comparire una scritta sul vostro monitor VGA, basta includere nel vostro progetto la libreria 'VGA_text' come scritto in queste pochissime righe di codice: 

CON

   _clkmode = xtal1+pll16x
   _xinfreq = 5_000_000 

OBJ 

   text : "vga_text"

PUB start 

   text.start(16)
   text.str(string("VGA Test"))

L'hardware VGA ? Praticamente quasi inesistente, per collegare il Propeller al vostro monitor, sono sufficienti otto resistenze e un connettore VGA femmina, collegando il tutto, come nella figura di esempio.

Questo è possibile perché nella libreria 'VGA_text', uno degli otto COG viene impiegato come processore video, lasciando l'esecuzione del programma principale agli altri. Solo grazie a questa particolare caratteristica del dispositivo, è possibile avere diverse periferiche funzionanti contemporaneamente in un solo chip. 

In questo esempio, se volete far comparire la scritta sul vostro televisore, invece che nel monitor VGA, basta sostituire la libreria 'VGA_text' con 'TV_text', ed il gioco è fatto.

Non vi basta ? Se volete gestire l'input da una tastiera PC per far comparire i caratteri sul monitor, basta utilizzare la libreria 'keyboard' e utilizzare nel programma il metodo 'getkey' per ricevere il codice ASCII dei caratteri digitati. La tastiera la collegate al propeller per mezzo di quattro resistenze.

 

Similarmente a questi esempi, ciascun COG lo potete far funzionare come convertitore A/D o D/A, oppure come una UART seriale, un generatore PWM, un generatore Video o di Audio. Basta sempre scegliere la libreria giusta per la vostra periferica.
 

Scrivere ed eseguire il programma nella memoria del Propeller:
 

Uno sviluppatore esperto si fa subito una domanda essenziale: Come faccio ad inviare il programma sviluppato nel mio PC nella memoria del chip ? La risposta è: NON SERVONO PROGRAMMATORI.
Il propeller lo collegate direttamente alla porta seriale del vostro PC, (o alla porta USB utilizzando un semplice convertitore) e dall'ambiente di sviluppo (IDE) della Parallax, compilate il programma e lo inviate subito nella memoria del propeller per l'esecuzione.
Il propeller ha un 'bootloader' integrato nella memoria ROM, quindi alla prima accensione, questo controlla se il PC deve inviare un programma da eseguire. In caso positivo, la comunicazione viene stabilita e il programma viene ricevuto.
All'interno del propeller, i programmi vengono eseguiti sempre dalla memoria RAM principale, questo significa che in assenza di alimentazione il software viene perduto. Per ovviare a questo problema, il chip è stato progettato per ospitare una memoria seriale I2C EEPROM esterna. All'accensione del propeller, se il software è presente nella memoria EEPROM, viene copiato in RAM ed eseguito.
Per scaricare il software sviluppato direttamente nella EEPROM, basta farlo dal compilatore con i tasti F11 o CTRL-F11 (Load EEPROM) invece dei tasti F10 o CTRL+F10 (Load RAM) per la normale esecuzione in RAM.
Sempre dal compilatore è possibile creare inoltre immagini HEX della memoria EEPROM nel caso in cui volete programmare la EEPROM con programmatori esterni.
 


 

Esempio di interfaccia per collegamento RS232

Composizione Hardware del chip P8X32A: 

Il propeller P8X32A è disponibile in tre differenti packeage: DIP a 40 pin, LQFP a 44 pin e QFN.
La possibilità di avere la versione DIP a 40 pin con passo standard 2.54 pollici farà sicuramente contenti tutti i sviluppatori che desiderano iniziare a lavorare con questo dispositivo, in quanto spesso le versioni più piccole sono a volte un ostacolo da superare sotto il punto di vista delle saldature. Le altre versioni invece combinano il vantaggio della straordinaria potenzialità che offre questo dispositivo con le ridottissime dimensioni.

 



 



 



 



 


Di seguito le caratteristiche generali del propeller:

 

Modello

Packeage

I/O Pins

Alimentazione

Clock Esterno

Oscillatore interno RC

Velocità esecuzione

RAM/ROM Globale

COG RAM

P8X32A-D40

40-pin DIP

32 CMOS

3.3 Volt DC

DC ÷ 80 Mhz

12 Mhz o 20 Khz*

0 ÷ 160 MIPS

(20 MIPS/cog)

32K RAM

32K ROM

512x32 bits per COG

P8X32A-Q40

44-pin LQFP

P8X32A-M40

44-pin QFN

* Approssimativo: può variare da 8-20Mhz o 13-33 Khz rispettivamente.


Ciascun processore (COG) è caratterizzato da:

  • Una memoria RAM da 512x32 bit
  • Due contatori (A/B)

  • Un generatore video

  • Un registro di input/output

  • Un registro di direzione per la periferica I/O

     


Le periferiche di Input/Output, i bus dati e quant'altro, vengono tutte condivise con un meccanismo chiamato 'Hub', ovvero una logica di 'round-robin' consente a ciascun processore (Cog) di usare a turno le risorse hardware. Più processori sono attivi e maggiore sarà il tempo di attesa necessario per l'accesso alle periferiche.
 

Le periferiche di Input/Output:


Le porte di I/O vengono gestite in ciascun Cog con un unico registro a 32 bit per la direzione e il dato. Ciascun Cog potrà accedere contemporaneamente agli stessi pin di I/O, utilizzando però una logica di arbitraggio che evita possibili conflitti che si potrebbero verificare nel caso in cui i registri di direzione e di dato dei differenti Cog non siano esattamente uguali.

Il propeller ha in totale 32 pin che possono funzionare singolarmente da Input o da Output. Di questi, 28 sono di uso generale, mentre i rimanenti (pin 28÷31) hanno delle funzioni speciali nella fase di boot-up (accensione). Successivamente a questa fase possono essere utilizzati anch'essi come I/O di uso generale. Dopo la fase di boot-up, tutti i pin I/O possono essere utilizzati in qualsiasi momento da qualsiasi Cog.
Tutti i Cog hanno a disposizione un loro personale registro di direzione e un registro I/O di Output dei dati. In ciascun Cog, il registro di direzione è collegato con il registro di direzione del Cog precedente rispettando una logica di 'OR' collegati in cascata, così da permettere sempre una configurazione globale che salvaguardi un'eventuale collisione causata nella condizione in cui i registri possano essere configurati diversamente tra loro. La stessa logica ad 'OR' in cascata viene applicata per il registro dei dati (I/O Output), così basterà che uno dei Cog imposti uno dei bit "a uno" per avere la corrispettiva uscita logica a livello 'alto'.

Nella tabella che segue, viene riportato un esempio di come i registri di direzione e di Output interagiscono tra loro rispettando la logica di 'OR' in cascata. Gli otto esempi vengono applicati al PIN P12 in differenti condizioni, riportando il risultato nella penultima colonna. L'ultima colonna riporta la 'regola' che viene seguita in quella condizione. La colonna 'Cog ID' rappresenta lo stato di direzione e di dato I/O del Bit 12 per ciascun Cog.

Per il registro di direzione: 0=input, 1=output
Per il registro di dati Output: 0=low, 1=high

Le tre regole di funzionamento:

 

A

Un pin può essere un 'input' solo se nessuno dei Cog attivi lo imposta come output.

B

Un pin è un output a livello logico basso (low) solo se tutti i Cog attivi lo hanno impostato come 'output' nel registro direzioni (1) e hanno quel bit impostato a zero (low).

C

Un pin è un output a livello logico alto (high) se un qualsiasi Cog attivo lo ha impostato come 'output' nel registro direzioni (1) e ha quel bit impostato a uno (high).





Tutti i Cog non attivi non hanno influenza sullo stato dei pin I/O in quanto non partecipando al funzionamento globale del processore, tutti i registri sono allo stato di reset (zero logico).

System Counter:

Il System Counter è un registro a 32 bit (solo lettura) che si incrementa ad ogni ciclo di clock. Questo registro è globale per tutti i Cog e può essere utile per il calcolo di temporizzazioni precise all'interno delle routines. Può essere letto contemporaneamente da più Cog.

Semafori (Locks):

Nel propeller sono stati previsti otto 'locks bits' (semafori) che hanno lo scopo di facilitare, da parte dei Cog, l'accesso esclusivo alle risorse del dispositivo. In alcune condizioni, come ad esempio la lettura e scrittura di dati nella memoria principale da parte di più Cog, potrebbe verificarsi la necessità di avere un accesso esclusivo da parte di un Cog in particolare, al fine di evitare che gli altri Cog possano effettuare modifiche nella stessa area e nello stesso momento.
 


Contatori: 

Ciascun Cog ha a disposizione due contatori: CTRA e CTRB.

Configurando i contatori in modo differente è possibile avere: 

  • sintetizzatori di frequenza

  • misuratori di frequenza

  • conteggio impulsi

  • misurazione di impulsi

  • modulazione di impulsi (PWM)

  • misurazione duty-cycle

  • conversione analogico/digitale

  • conversione digitale/analogico

     

Ciascun contatore può essere controllato per mezzo di tre registri:

  • Control Register (CTRA/CTRB)

  • Frequency Register (FRQA/FRQB)

  • Phase Register (PHSA/PHSB)


Ciascun contatore può essere alimentato da due pin di ingresso: APIN e BPIN.



 

Control Register (CTRA/CTRB): Seleziona i modi di funzionamento del contatore. Il nuovo modo di funzionamento del contatore parte appena questo registro viene impostato. Impostando a zero il valore di questo registro si interrompe immediatamente il funzionamento del contatore, dei suoi PIN associati e il conteggio del registro PHS. Attraverso questo registro è possibile anche impostare le caratteristiche del moltiplicatore di frequenza (PLL). Tutti i modi di funzionamento dei contatori sono riportati nel datasheet del propeller.
Frequency Register (FRQA/FRQB): Contiene il valore che verrà accumulato nel registro PHS.

Phase Register (PHSA/PHSB): Questo registro può essere letto e scritto utilizzando le istruzioni dei Cog. Ogni volta che si esegue la scrittura di un valore su questo registro, ne verrà sovrascritto il suo contenuto.



 



 

 

La Parallax mette a disposizione un Application Note (AN001) riportante una descrizione dettagliata del funzionamento dei contatori. Il documento (in inglese) lo potete trovare a questo indirizzo:
 

http://www.parallax.com/Portals/0/Downloads/appnt/prop/AN001-PropellerCountersv1.1.zip

Il documento riporta esempi dettagliati e programmi su come utilizzare i contatori al fine di avere convertitori ADC, PWM, ecc..

 

Generatore Video:
 



 

Ciascun Cog ha a disposizione un generatore video in grado di inviare informazioni ad un monitor VGA o un televisore con ingresso video-composito.

Se viene utilizzato il generatore video, il contatore A deve essere impostato come PLL al fine di generare i necessari segnali di temporizzazione. Il registro di configurazione video (VCFG) stabilisce il modo di funzionamento (NTSC o PAL). L'istruzione WAITVID è una speciale istruzione dedicata alla funzione di generazione del segnale video. Questa istruzione, che fa parte del gruppo di istruzioni WAITCNT, WAITPEQ, WAITPNE e WAITVID, arresta l'esecuzione delle istruzioni del Cog, in attesa che il generatore video sia pronto a prelevare l'informazione relativa al prossimo pixel da visualizzare. Nel datasheet originale, la Parallax raccomanda di seguire l'inizializzazione del contatore A e dei registri video correttamente prima di eseguire l'istruzione WAITVID. Se tale sequenza non viene rispettata, si rischia l'arresto definitivo dell'esecuzione del Cog.

 

La Parallax mette a disposizione delle ottime librerie per utilizzare il generatore video sia in modalità VGA che video-composito. Le librerie, di semplice utilizzo, vengono distribuite assieme il pacchetto di sviluppo Parallax dedicato al Propeller.

 

Clock di sistema: 

Il clock di sistema è controllato dal registro CLK (System Clock); esso determina la sorgente del clock per l'esecuzione dei programmi, ed in generale per tutto il funzionamento del propeller.

Il clock di sistema può essere configurato utilizzando l'oscillatore interno (RC) o un quarzo/risonatore esterno collegato ai pins 30 e 31 (XIN/XOUT).
L'oscillatore può essere configurato direttamente in fase di compilazione utilizzando la dichiarazione _CLKMODE e successivamente, modificato in run-time con l'istruzione CLKSET.
Nel clock di sistema è possibile attivare anche un PLL in grado di moltiplicare la frequenza in input.
Nella tabella di seguito vengono riportate le maggiori funzionalità di questo registro:


 

BIT ->

7

6

5

4

3

2

1

0

Funzionalità

RESET

PLLENA

OSCENA

OSCM1

OSCM2

CLKSEL2

CLKSEL1

CLKSEL0


 

RESET

Effetto

0

Impostare sempre a '0' se non si desidera effettuare un RESET del chip

1

Stesso risultato di un RESET hardware - Riavvia il chip

 

PLLENA

Effetto

0

PLL disabilitato

1

Abilita il circuito PLL. La frequenza in input XIN viene moltiplicata per 16. Il bit OSCENA deve essere impostato ad '1' al fine di propagare il segnale in input al PLL. La frequenza interna del PLL deve essere compresa tra 64 Mhz e 128 Mhz, quindi la frequenza in ingresso XIN risulta compresa tra 4 Mhz e 8 Mhz.

 

OSCENA

Effetto

0

Circuito oscillatore disabilitato.

1

Circuito oscillatore abilitato. I due pin XIN/XOUT vengono utilizzati per collegare un quarzo/risuonatore. Nessun altro componente aggiuntivo (resistenze/condensatori) sono necessari per il funzionamento dell'oscillatore.

 

OSCM1

OSCM2

Effetto

0

0

Clock in input da DC a 80 Mhz

0

1

Quarzo/risuonatore da 4 Mhz a 16 Mhz

1

0

Quarzo/risuonatore da 8 Mhz a 32 Mhz

1

1

Quarzo/risuonatore da 20 Mhz a 60 Mhz

 

CLKSEL2

CLKSEL1

CLKSEL0

Master

Clock

Sorgente

Note

0

0

0

~12Mhz

Interno

Nessun componente esterno necessario. (8÷20 Mhz)

0

0

1

~20khz

Interno

Nessun componente esterno necessario. (13÷33 Khz)

0

1

0

XIN

OSC

Bit OSCENA deve stare a '1'

0

1

1

XIN x 1

OSC+PLL

Bit OSCENA e PLLENA devono stare a '1'

1

0

0

XIN x 2

OSC+PLL

Bit OSCENA e PLLENA devono stare a '1'

1

0

1

XIN x 4

OSC+PLL

Bit OSCENA e PLLENA devono stare a '1'

1

1

0

XIN x 8

OSC+PLL

Bit OSCENA e PLLENA devono stare a '1'

1

1

1

XIN x 16

OSC+PLL

Bit OSCENA e PLLENA devono stare a '1'

 

 


 


 

Organizzazione della memoria:
 

Il propeller ha a disposizione un totale di 64K di memoria, divisa tra 32K di RAM e 32K di ROM.

I primi 32K di RAM sono riservati ai programmi e ai dati che desideriamo conservare negli applicativi.

i secondi 32K di RAM sono divisi ulteriormente in cinque gruppi avente diverse funzionalità.

Font di caratteri: Il primo gruppo contiene tutti i caratteri che fanno parte della font Parallax, questi potrebbero essere utilizzati ad esempio per un ouput a video (VGA o video-composito), oppure per disegnare uno schema elettrico. Infatti la speciale font Parallax, include caratteri personalizzati che rappresentano parti di comuni schemi elettrici (es. condensatori, resistenze, induttanze, ecc..). Questi caratteri visualizzati in sequenza possono comporre uno schema elettrico.

Tabella per Funzioni Matematiche: Tre tabelle sono state riservate per speciali funzioni matematiche, Log, Anti-Log (per facilitare i calcoli con esponente) e una tabella per il calcolo del seno. Il manuale di programmazione spiega in dettaglio come utilizzare queste tabelle.

Interprete e Bootloader: Contiene l'interprete per i programmi scritti in SPIN (questo viene caricato nella RAM di ciascun Cog quando attivo) e un piccolo Bootloader che ha la funzione di trasferire i programmi compilati dal PC nella memoria del propeller.
 



 

RAM:

$0000÷$7FFF: Programmi applicativi e dati

ROM:

$8000÷$BFFF: Font di caratteri (256 cartteri composti da 16x32 pixel)

$C000÷CFFF: Tavola Log

$D000÷DFFF: Tavola Anti-Log

$E000÷F001: Tavola del seno

$F002÷$FFFF: Interprete e Bootloader


 


 

Font di caratteri Parallax:
 



 Memoria RAM: 

La memoria RAM, dedicata all'esecuzione dei programmi e al contenimento dei dati (es. contenuto delle variabili), ha inoltre una parte riservata ($000 ÷ $1FF) alla configurazione delle periferiche:

 

 
 

  Indice Parte 2 - L'ambiente di sviluppo (IDE)


 


 

 
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)