PIC vs AVR = Italia vs Resto del mondo?

« Older   Newer »
  Share  
kokiua
view post Posted on 7/8/2012, 16:30




Visto che il firmware è il mio lavoro da tanto, ho pensato di fare qui il mio primo intervento per portare come risposta a questa discussione anche la mia personale esperienza.
Se non erro (è da molto che non li uso) il mondo PIC rispetto alla maggior parte del "resto" (Atmel compresa) si differenzia per una scelta fondamentale nell'organizzazione della memoria. La Microchip ha scelto di indirizzare la memoria in banchi mentre la "consuetudine" degli altri uP è quella di indirizzare in modo "lineare".
Questo fatto può risultare trascurabile se per programmare viene usato il C (ci pensa il compilatore a risolvere i problemi), ma se si desidera fare qualcosa che sfrutti appieno le caratteristiche e la velocità del processore, è indispensabile ricorrere all'assembler.
Così, quando ad esempio si deve recuperare dei dati da una tabella in memoria, il dover indirizzare i banchi è una bella "rottura", perchè rende difficile mantenere costante un eventuale ciclo che deve rispettare precisi tempi di esecuzione.

Per questo motivo credo proprio che il passato successo dei PIC (e non solo per l'Italia) sia dovuto soprattuto al bassissimo costo e all'eccellente azione di propaganda informativa fatta nel nostro paese (senza contare poi la diffusione a seguito dei tanti sistemi per decriptare il digitale prima di Sky ;-)

In passato, quando ancora l'SMD era solo per le grandi aziende, scelsi il PIC in alcune realizzazioni industriali per il suo basso costo (per modeste produzioni), per le configurazioni contenute (poche porte di i/o e quindi package poco ingombranti) e per i ridotti consumi (al tempo era praticamente l'unico in commercio).
Ad esempio fu una scelta praticamente obbligata per progettare una riga metrica di precisione che doveva avere le seguenti caratteristiche:
- leggere un encoder bidirezionale formato da una rotella forata (tipo vecchi mouse), con led e relativo sensore;
- pilotare un display 7 seg. a 5 digit + segno;
- entrare in "sleep" se la lettura era assente per un tot di tempo spegnendo (quasi) tutto, ma con la possibilità di ripartire non appena la riga (presenza di lettura) si fosse mossa;
Il tutto alimentato con una batteria tampone per i casi di mancata alimentazione così da non perdere neppure un centesimo di millimetro anche a macchinario in arresto per inerzia.

Di fatto è il medesimo sistema che oggi si trova nei calibri digitali in commercio.
Se a qualcuno interessa dovrei avere ancora il sorgente da qualche parte (ma è roba piuttosto vecchia ;-)

 
Top
view post Posted on 8/8/2012, 15:16
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:


Già, è vero, alcuni che ho al lavoro, stanno in sleep, finchè non muovi l'asta di misurazione....ingegnoso :)

Per quanto riguarda il discorso dei pic, credo che a livello hobbistisco, vadando bene, magari a livello industriale un po'
meno.
La suddivisione in più banchi??? Già, non so perchè hanno pensato così, mi piacerebbe sapere i pro e i contro
di una organizzazione tale.
Certo che devi sempre avere sotto mano il datasheet, per sapere per esempio dov'è il timer1, altrimenti rischi d'impazzire solo
perchè non hai scritto BSF STATUS RP0 !!!
 
Top
kokiua
view post Posted on 8/8/2012, 18:53




CITAZIONE (GILA75 @ 8/8/2012, 16:16) 
Per quanto riguarda il discorso dei pic, credo che a livello hobbistisco, vadando bene, magari a livello industriale un po'
meno.

Oggi è certamente vero. Sicuramente quando uscirono avevano il vantaggio di essere praticamente gli unici in quella fascia di costo, e l'essere serviti come "base" per la maggior parte degli studenti di allora è stato un grosso goal da parte di Microchip.

Di fatto è quello che si sta ripetendo per Atmel grazie ad Arduino: bassi costi ed un sistema di sviluppo (se così lo si vuol chiamare..) alla portata di tutti.

Peccato però che alla fine fanno credere che il programmare un uP sia quasi come farlo con un computer ed un linguaggio evoluto.
Ed è così che si assiste al proliferare di progettini zoppicanti e per lo più senza il vero sfruttamento del dispositivo.
 
Top
view post Posted on 13/8/2012, 11:18
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:


CITAZIONE
Peccato però che alla fine fanno credere che il programmare un uP sia quasi come farlo con un computer ed un linguaggio evoluto.

Che sia Microchip,Atmel,Parallax...il dio soldo prima di tutto, cioè le vendite. Logico, che come dici tu,servire sistemi di sviluppo che
ti fanno fare "grandi" cose, senza smazzarti il casino del linguaggio macchina, fa gola ad una grossa fetta di mercato.

Comunque, non metto in discussione la prestanza superiore di altri uc rispetto ai pic, ma posso dire, che danno una buona base anche loro
se si studia bene l'architettura interna ecc...io li programmo in assembler e devo dire comunque che ti danno un bel pò da fare :)
 
Top
kokiua
view post Posted on 13/8/2012, 11:47




CITAZIONE (GILA75 @ 13/8/2012, 12:18) 
se si studia bene l'architettura interna ecc...io li programmo in assembler e devo dire comunque che ti danno un bel pò da fare :)

La programmazione in asm è certamente la soluzione ottimale per sfruttare qualsiasi uP, e risulta "essenziale" quando si programma piccoli dispositivi come i PIC.
Ogni problema ha la sua soluzione ottimale e troppo spesso si vede utilizzare dei processori esagerati per fargli accendere solo qualche led... Un po come sparare ad un passerotto con un cannone :)
Così io penso non sia possibile affermare che "questo" e meglio di "quello" ;)

Di sicuro programmare in asm non è da tutti (sopratutto per quelli a cui piace "vincere facile"). Ma è anche vero che se devi elaborare dei valori da un sensore per correggerne la curva (e quindi usare funzioni in virgola mobile), direi che per farlo in asm si deve proprio essere costretti! (a me è capitato, ma allora quasi non esistevano compilatori in C per le MPU in commercio).
 
Top
view post Posted on 13/8/2012, 16:56
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:


CITAZIONE
Di sicuro programmare in asm non è da tutti (sopratutto per quelli a cui piace "vincere facile"). Ma è anche vero che se devi elaborare dei valori da un sensore per correggerne la curva (e quindi usare funzioni in virgola mobile), direi che per farlo in asm si deve proprio essere costretti! (a me è capitato, ma allora quasi non esistevano compilatori in C per le MPU in commercio).

La diatriba asm Vs linguaggi alto livello, è già stata affrontata lungamente qui sul forum, ognuno diceva la sua, e qualche volta si
sono pure alzati i toni. Io faccio le cose in asm anche perchè non conosco il C, avevo iniziato, ma per motivi vari ho momentaneamente
sospeso. Credo però che programmare in assembler "casareccio", tipo il mio, cioè da autodidatta, e senza basi scolastiche,
in termini di prestazioni, sia ancora meno che col c. Come dire dai la ferrari a me e a un pilota una macchina normale: logico che mi batte
lo stesso no? Se si parla invece di come ti fa capire le cose...allora li si.

Ma volevo sapere, sono proprio curioso: secondo te, la divisione in banchi dei pic, che benefici da? Perchè hanno pensato così?
 
Top
kokiua
view post Posted on 14/8/2012, 06:23




CITAZIONE (GILA75 @ 13/8/2012, 17:56) 
Ma volevo sapere, sono proprio curioso: secondo te, la divisione in banchi dei pic, che benefici da? Perchè hanno pensato così?

Vado molto a memoria, ma se non erro è la conseguenza dell'architettura RISC (Harvard a bus separati) scelta all'inizio con i primi dispositivi prodotti, e che permette di avere un numero ridotto di istruzioni con tempi di esecuzione ideali (4 cicli) ma con l'inconveniente di avere l'indirizzo alle locazioni di memoria (trattate come "registri") direttamente nell'istruzione.
Per questo motivo la memoria viene "divisa" in blocchi in quanto l'indirizzo è appunto ottenuto con il registro che punta al banco e l'indirizzo vero e proprio contenuto nell'istruzione (se non ricordo male 12bit).

Per sicurezza ho cercato su wikipedia e ho trovato una descrizione che spiega molto meglio di me il concetto: (la fonte)
CITAZIONE
A causa dell'architettura RISC, dove nell'istruzione oltre al significato è compreso anche l'indirizzo di memorizzazione o di salto, la memoria viene segmentata. Per cambiare segmento in uso occorre agire su appositi registri, fatto questo che complica la programmazione dei PIC tramite linguaggio assembly, ma non quella con linguaggi di alto livello.

P.S. l'essere auto didatta non vuol dire essere "incapaci" o "inferiori". Non è studiando esperienze altrui e leggendo libri che si acquisisce intelligenza ed inventiva, lo studio permette solo di accelerare il proprio livello di professionalità sfruttando risultati di sperimentazioni fatte da altri (cosa che può fare chiunque in qualsiasi momento). Ma spesso e volentieri è più efficace rivivere le esperienze che apprenderne i soli esiti... :P
 
Top
21 replies since 25/4/2012, 20:15   1381 views
  Share