PICMicro in C

  1. Corso di programmazione PICMicro in C
  2. Articoli riguardanti programmazione (e non) collegati al corso di programmazione PICMicro in C
  3. Documentazione utile
  4. Software
  5. Altri articoli su Settorezero riguardanti i PICMicro
  6. Link indispensabili

Corso di programmazione PICMicro in C

Man mano che le lezioni di programmazione saranno pubblicate nel sito, questo indice verrà aggiornato, in maniera tale da avere tutto sott’occhio in un’unica pagina.

  1. Cos’è un microcontrollore, caratteristiche, note introduttive, come scegliere programmatore e linguaggio di programmazione
  2. Installazione degli strumenti di sviluppo, descrizione del circuito di base
  3. Scrivere il primo, semplice programma in C per PICMicro, impostare MPLAB e flashare il PICMicro con il PICKit 2. Facciamo lampeggiare un led
  4. Cosa sono gli interrupt, concetti di base per sistemi operativi multitasking su PICMicro
  5. Timer0 e Prescaler: come si impostano per generare l’interrupt nei tempi che vogliamo, applicazione pratica
  6. Collegamento dei pulsanti, pilotare un led in on/off
  7. Interfacciarsi con un display LCD HD44780 compatibile:
    Parte 1 – Tutto quello che c’è da sapere sui display LCD alfanumerici intelligenti
    Parte 2 – Hello World + Semplice menù per attivare delle funzioni
    Parte 3 – Come definire simboli e caratteri personalizzati nell’LCD + esempio di animazione
  8. Pilotare i display a led 7 segmenti in modalità multiplex – Realizziamo un contatore up/down gestito dall’interrupt sul Timer0
  9. Gestione della EEprom interna. Visualizzazione valore a 32bit da eeprom e lcd e counter up/down con memoria e reset.
  10. L’ USART e la comunicazione seriale tramite RS232 : ricetrasmissione comandi attraverso la porta seriale del computer
  11. Il convertitore analogico digitale:
    Parte 1 – Principi di funzionamento del convertitore A/D
    Parte 2 – Esempi pratici: visualizzare un valore analogico su barra a led o su display LCD. Termostato con isteresi basato su LM35
  12. La comunicazione I2C:
    Parte 1 – Il modulo MSSP e la sua implementazione per realizzare una comunicazione i2c in modalità master. Librerie.
    Parte 2 – Utilizzo delle eeprom esterne dalla 24xx00 alla 24xx1025

Le lezioni non sono finite, continueranno con cadenza irregolare. Iscrivetevi al sito per essere sempre aggiornati sugli sviluppi e per poter scaricare il materiale presentato di volta in volta.

Approfondimenti e appunti di utilizzo

  1. Utilizzo degli encoder in quadratura per l’immissione dei dati
  2. Utilizzo degli Shift Register SIPO per aumentare il numero di uscite
  3. Gestione di un tastierino numerico a matrice (tipo telefonico)

Articoli direttamente collegati alle lezioni

  1. Come vanno collegati i vari tipi di PICMicro e le memorie EEPROM al PICKit2 : Adattatore multizoccolo
  2. Capire come funzionano le numerazioni decimale, binaria, esadecimale e ottale
  3. Operazioni algebriche booleane: come si utilizzano gli operatori AND, OR, XOR e NOT e come applicarli ai registri ad 8 o più bit
  4. La codifica BCD e i display a 7 segmenti
  5. Gli operatori di scorrimento. Scomporre un valore a 16 bit in due valori ad 8 bit e viceversa. Esempio in C per picmicro su Display.
  6. La scheda di sviluppo Freedom II
  7. Circuito di interfaccia RS232/TTL

Altri articoli su SettoreZero riguardanti i PICMicro

  1. Divisione spicciola con decimali dopo la virgola in hitec-c su picmicro (risultati inviati su porta seriale rs232)
  2. Gestione in assembler di due display a led a 7 segmenti con PIC16F628
  3. PICMicro che non vengono più riconosciuti dal PICKit : L’errore “No Device Detected”
  4. La versione 9.70 del Pic-C Compiler va in Crash?
  5. Gestire e controllare i nostri dispositivi via Wireless : gli XBee
    Parte 1 – Cosa sono gli XBee e come si configurano
    Parte 2 – Applicazione pratica. Controllo remoto Relè e Temperatura con PIC16F88

Se ne avete la possibilità, supportate chi lavora gratuitamente a queste pagine con una piccola donazione: anche pochi centesimi fanno la differenza e aiutano a mantenere alto il morale e a stimolare la creazione di cose sempre nuove ed inedite.

Documentazione utilizzata nelle lezioni

  1. Manuale di programmazione C: Tricky C (1835)
  2. Elenco ufficiale dei dispositivi supportati dal Pickit2
  3. Documenti utili presenti nella sezione risorse
  4. Datasheet PIC16F877 e PIC16F876 (679)
  5. PIC Mid-Range MCU Family Reference Manual (378)
  6. Datasheet regolatore di tensione 7805 (257)
  7. Datasheet regolatore di tensione a basso dropout LM2940 (234)

Download Software

Software utilizzato nel corso di programmazione

  1. PICTimer: Calcolo del valore da assegnare al Timer0 e al Prescaler
  2. CustomCharHD44780: per la personalizzazione dei caratteri sui display basati sul controller Hitachi HD44780
  3. Microchip MPLab IDE
  4. Microchip PICKit2, applicazione e firmware aggiornato
  5. Editor di testo Notepad++

Altro software utile

  1. PicLoops (per generare ritardi in assembler, per windows)
  2. PikLoops (per generare ritardi in assembler, per Linux)
  3. Elenco dei linguaggi di programmazione e delle suite di sviluppo per PICMicro

Links

  1. Download di MPLAB C Compiler for PIC18MCUs
  2. Download di MPLAB C Compiler for Academic Use (ex C18 Student edition)
  3. Download MPLAB (include Hitec C)
  4. Download versioni vecchie di MPLAB
  5. Download Microchip Applications Library (include il framework per l’USB)
  6. Pagina di supporto PICkit 2
  7. Pagina di supporto PICkit 3
  8. Download versione Beta della GUI per PICKit3
  1. #1 da Gioacchino il 7 novembre 2009

    Il corso di programmazione dei PICMicro in C è interessante, almeno per me che ne sono completamente disinformato.

  2. #2 da MAURIZIO il 20 novembre 2009

    Corso C interessante, peccato basato su pic 16f877 di cui microchip sta abbandondo la produzione a favore dei più attuali 16F883/887

    • #3 da Giovanni Bernardo il 20 novembre 2009

      A dire il vero, se non erro, la produzione del 16F877 è già cessata e oramai ci sono i pic serie 18 che costano quanto quelli serie 16 ma sono più performanti. La scelta è stata dettata dal fatto che il 16F877 è un vecchio cavallo di battaglia dotato di molte periferiche che si può facilmente trovare un po dappertutto anche nei negozi di elettronica meno forniti o nelle fiere, ed è ancora molto diffuso, almeno dalle mie parti. I programmi poi, capito il meccanismo con cui si settano i fuses e capiti i registri (ma soprattutto: imparato a leggere i datasheet), si possono facilmente adattare a qualsiasi pic, difatti alcuni utenti che seguono il corso stanno usando i programmi su 16F628: ognuno può usare il pic che vuole dal momento che in ogni lezione cerco di spiegare per bene dove può essere reperita questa o quell’altra informazione sul datasheet, questo è anche molto meglio perchè aiuta a districarsi in questo ambito. Se non erro, poi, l’887 è pin to pin compatibile con l’877, anche la quantità di memoria è la stessa, per cui i programmi che sto presentando qui non dovrebbero nemmeno avere bisogno di adattamenti, ma potrei sbagliarmi. Sul 16F877, inoltre, in rete si trovano una marea di esempi, proprio perchè è un “prodotto maturo” (come afferma la microchip stessa), sta sul campo da parecchio tempo, è quindi ultra collaudato e molti progetti di robotica in rete sono basati su tale microchip. Se qualcuno vuole usare altri pic, ben venga, possiamo vedere insieme volta per volta gli adattamenti da fare, tempo permettendo sono sempre a disposizione e rispondo a tutti (basta non avere fretta). Giusto per informazione: confronto 16F877 / 16F887: http://www.microchip.com/wwwproducts/ProductCompare.aspx?product1=PIC16F877&product2=PIC16F887

  3. #4 da paoloprova il 24 dicembre 2009

    Buonasera

    Il corso mi interessa molto, in quanto da tempo utilizzo i picmicro, ma solo programmandoli brutalmente con un programmatore parallelo e senza poter poi modificare il file di configurazione , se necessario.
    Vorrei chieder, se qualcuno li conosce, qualche giudizio sui programmatori “cinesi” ( sembrano copie del Pickit 2 ) che girano sul mercato Web e sulle relative schede di sviluppo allegate.
    Sono a prezzi realmente concorrenziali (dogana compresa), ma sono poi affidabili ed utili per l’apprendimento ??!!
    grazie a Tutti

    paoloprova

    • #5 da Giovanni Bernardo il 26 dicembre 2009

      Ciao Paolo,
      innanzitutto un grazie di cuore per la donazione e tanti auguri di Buone Feste. Qui cerchiamo di fare del nostro meglio, non siamo esperti ma ce la mettiamo tutta, sono anche i vostri consigli, interventi e suggerimenti che fanno la vera differenza.
      Riguardo ai programmatori provenienti dalla Cina purtroppo non so dirti assolutamente nulla, non li ho provati e non ho la minima idea di come possano andare. Però voglio dire anche questo: il pickit2 non costa poi molto (circa 34 euro), io l’ho comprato qui:
      http://www.robot-italy.com/product_info.php?cPath=1_26_57&products_id=710
      : è sicuramente un prodotto originale, il firmware si può aggiornare e programma davvero tantissimi dispositivi della Microchip, capisco che i programmatori clonati in Cina possano essere uguali in tutto e per tutto (ricordo difatti che la Microchip comunque rende disponibile a tutti lo schema elettrico del suo programmatore, per cui immaginavo che prima o poi qualche cinese si tuffasse in questo), ma per esperienza, vengono sempre utilizzati materiali scadenti (es.: dopo qualche utilizzo, per fare un esempio, ti si stacca la presa USB oppure il connettore non fa più contatto ecc) e le saldature sono fatte male, a volte per 10 euro di differenza uno se ne può trovare pentito.
      Per la scheda di sviluppo io consiglio fortemente la Freedom 2 di Mauro Laurenti : http://www.laurtec.com (basta fare una donazione di supporto), è davvero molto molto completa (ci sono predisposizioni per tutto ciò che serve per cominiciare: led, pulsanti, lcd, eeprom, real time clock, seriale, comunicazione CAN – il 99% delle schede commerciali ne è priva-, usb-per i pic predisposti- e ancora tanta altra roba), il pcb è davvero molto professionale e i prodotti commerciali che ci sono in giro gli fanno davvero un baffo. Mauro inoltre può anche fornirti un pic16f877a se glielo richiedi.
      Il mio consiglio è quello di prenderti il programmatore originale della microchip e la freedom2, ti assicuro che non te ne troverai affatto pentito e qualche euro in più speso ti verrà sicuramente ripagato dalla soddisfazione di avere prodotti validi, testati, funzionanti e realizzati davvero con passione e cura maniacale.

  4. #6 da paoloprova il 3 gennaio 2010

    Grazie per i consigli, Giovanni !!!
    Penso che li seguiro’ senz’altro .
    Ero inizialmente tentato dall’autocostruzione(visti gli schemi cortesemente forniti da Microchip), e visto anche che di programmatori Pic seriali e paralleli ne ho costruiti parecchi, ma stavolta voglio partire da un prodotto “sicuro”.

    Tanti Auguri anche a te per il nuovo Anno 2010 !

    Paolo

  5. #7 da luigi il 22 gennaio 2010

    Seguo con interesse questo Corso. La qualità primaria e la chiarezza di esposizione: non è da tutti.
    Il mio scopo è “adattare” quanto appreso, al PIC32. Sono alla lezione sui Display LCD 16×2.
    Il mio obiettivo è poter creare un sistema embedded dove sia presente una porta USB alla quale collegare una pendrive su cui scaricare dei dati. Es. quelli prodotti da una conversione A/D.
    Sarà dura, ma voglio tentare.

    • #8 da Giovanni Bernardo il 22 gennaio 2010

      Ciao e grazie.
      I pic32 sono dispositivi molto potenti, se realizzi qualcosa o hai degli appunti di utilizzo che vuoi condividere, siamo a disposizione. Non so se può esserti utile allo scopo: si tratta di una lettura che sto facendo in questi giorni per capire come sia possibile interfacciarsi in qualche modo al filesystem FAT32 da un picmicro, il link è questo: http://www.andyolivares.com/?p=168&lang=en sembra molto interessante

  6. #9 da Antonio il 29 gennaio 2010

    Ciao Giovanni,
    comlimenti per il corso mi sto veramente appassionando; vorrei farti una domanda.. Io mi sono registrato al sto ho avuto le credenziali ma non riusco a trovare dove utilizzarle per loggarmi… mi aiuteresti?
    Grazie
    Ciao

    • #10 da Giovanni Bernardo il 29 gennaio 2010

      Risulti registrato correttamente, se non riesci ad accedere probabilmente o stai sbagliando la password o non stai rispettando maiuscole/minuscole per nome utente e/o password.

  7. #11 da Giovanni il 29 gennaio 2010

    Corso ben costruito, complimenti !

  8. #12 da Alessandro il 1 febbraio 2010

    Un lavoro veramente eccellente, continuate così!!!

  9. #13 da Giuseppe il 4 febbraio 2010

    ciao giovanni. E’ da poco che sono venuto a conoscenza di questo sito e qundi di Te. Avrei tanta voglia di imparare a programmare e progettare con i pic. Fin ora mi sono solo limitato fare qualche piccolo intervento di modifiche di sorgenti e per poi ributtarlo nel pic. Il programmatore che utilizzo è MPLAB con ICD2, ma il compilatore che utilizzo è il CCS. Ultimamente ho fatto una programmazione ed ho selezionato, come sempre, le protezioni in lettura e mi è scappata una protezione in scrittura. Risultato, non riesco più a fare le modifiche di alcune #define che facevo, è rimasta memorizzata la prima #define che avevo messo. Come posso sproteggere il pic in scrittura?

    • #14 da Giovanni Bernardo il 5 febbraio 2010

      Hai selezionato protezione in scrittura e non riesci a modificare i #define? Non riesco a capire quello che vuoi dire. La protezione in scrittura serve proprio a non far scrivere, e non poter scrivere vuol dire anche non poter cancellare. Una volta fatto non puoi più tornare indietro.

  10. #15 da Giuseppe il 5 febbraio 2010

    Chiarissimo!
    E’ stato un errore fatale, il mio.
    La soluzione quindi è sostituire il pic!
    GRazie per il chiarimento

  11. #16 da giovanni.a il 9 febbraio 2010

    ciao giovanni,vorrei porti un piccolo problema che mi accade quando tento di stampare delle pagine del corso sui pic.Voglio complimentarmi intanto per l’ottimo lavoro e soprattutto chiaro nelle spiegazioni.il problema è questo:quando faccio per avviare la stampa mi compare un errore che mi obbliga praticamente a riavviare internet e..questo mi succede solo su questo sito.e’ un limite che tu hai imposto o è realmente un errorre sul mio pc ? premetto stampo le pagine che trovo interessanti per leggerle nei pochi momenti liberi (pausa pranzo) della giornata.

  12. #18 da giovanni.a il 18 febbraio 2010

    ciao Giovanni,ho iniziato il corso sui pic ed ho fatto i primi esperimenti.sto lavorando con i programmi da te consigliati e programmo il pic 16f877 con un programmatore autocostruito progettato da Sergio Fiocco (ottimo sito anche il suo).per testare il tutto ho caricato il tuo sorgente che fa lampeggiare un led,poi sempre un tuo sorgente hallo world !,il tutto funziona perfettamente.Succede però che quando creo da me il file .exe e vado a caricarlo nel pic con melabs i fuses vengono totalmente ignorati,faccio io le impostazioni ed invio. riscontro che i circuiti nn funzionano più come prima, soprattutto il circuiti con lcd visualizza scritte parziali e sparse a caso per la lunghezza della riga e solo se pigio 2 – 3 volte sul tasto reset. Mi chiedevo se ti era mai capitata una roba del genere o almeno riesci a dare una spiregazione od indirizzarmi verso un probabile problema. Ti ringrazio molto.ciao

    • #19 da Giovanni Bernardo il 18 febbraio 2010

      Ciao… (il file che carichi sul pic è .HEX e non .EXE !!) Non ho idea di come funzioni melabs, probabilmente interpreta qualche cosa in maniera sbagliata… Non ne ho idea. Facci caso se quando selezioni il pic stai attento a selezionare quello con la A finale, e che i fuses siano corretti, soprattutto quello relativo al tipo di oscillatore selezionato. Il fatto del display mi è capitato, ma non nel tuo modo: avevo visualizzata solo la prima riga e solo dopo alcune volte che premevo reset mi appariva la seconda: si trattava di un problema di temporizzazione, difatti pure se tantissimi chip sono HD44780 compatibili, non tutti rispettano le stesse temporizzazioni, per cui modificai il sorgente originale per pilotare i display aumentandone un po’ i tempi e cosi mi ha funzionato su tutti i display. Nel tuo caso potrebbe trattarsi di un problema del genere, e quindi legato in qualche modo all’ oscillatore selezionato in maniera errata nei fuses o al fatto che hai selezionato un pic senza la A finale (quello senza la A finale non arriva a 20MHz) ecc… Ma per il resto non so dirti di piu perchè non ho mai usato melabs. Inizialmente ho sempre usato il programmatore di sergio fiocco con icprog e non ho mai avuto problemi di sorta.

  13. #20 da giovanni.a il 18 febbraio 2010

    Ciao. ho fatto un pò di casino con le estensioni dei file. Per il pic invece nn credevo che il 16f877 non arrivasse ai 20MHz, perchè è proprio questo che sto usando e selezionavo appunto questo,inoltre utilizzo un lcd 2×40 ,la cosa penso dovrebbe essere ininfluente. Ma la cosa strana e che con il tuo sorgente.HEX il tutto funzionava correttamente.Comunque proverò a modificare le temporizzazioni e vedrò di procurarmi un 16f877A, qui dove abito l’unico negozio di elettronica ne è sprovvisto.Ti ringrazio ancora.ciao

  14. #21 da Paolo2BB il 15 marzo 2010

    Adesso che ho scritto la routine di delay, verifico con quella fornita da voi! sicuramente la mia è scritta meglio…..!
    Ciao

    • #22 da Giovanni Bernardo il 15 marzo 2010

      Ho detto più volte che su http://www.microchipc.com ci sono tante routine di delay, tra cui una “a precisione migliorata”. Dato che a me non interessa fare un orologio atomico (e se pure mi interessa farlo non utilizzo certo i ritardi), mi sta bene questa qui che generalmente fornisco insieme agli esempi, che poi è anche una di quelle che occupa minor memoria programma, che penso sia una delle cose principali da valutare dal momento che stiamo sviluppando con una versione LITE che limita la memoria programma. Poi dire “la mia è meglio della tua” ritengo sia assolutamente inutile, primo perchè la si dovrebbe confrontare con le altre che ci sono in giro, secondo perchè se non la si rende pubblica nessuno può valutare la bontà dell’affermazione. E poi comunque bisogna vedere le altre se sono ancora meglio.

  15. #23 da AbatiAlessandro il 16 marzo 2010

    Complimenti davvero ;)

  16. #24 da Paolo2BB il 17 marzo 2010

    Scusa Giovanni,
    forse non hai inteso la mia ironia con la frase “la mia è scritta meglio….!”, voleva anzi dire il contrario!!
    Comunque un bel corso! Bravi!

  17. #25 da Luca il 11 aprile 2010

    Carissimo Giovanni,
    posso consigliarti di approfondire l’argomento delle comunicazioni i2c magari in un bell’esempio con un rtc (ds1307)? E’ un must! =)
    Aspetto ansioso una tua risposta,
    Luca

    • #26 da Giovanni Bernardo il 11 aprile 2010

      Sarebbe già in programma. Ho difatti da poco finito di scrivere una libreria supercompleta per l’utilizzo del DS1307, che prevede l’utilizzo di tutte quante le caratteristiche di tale integrato, la sto testando e va bene. Sarà anche illustrata la piccola modifica da fare per utilizzarlo sulla freedom al posto del pcf8563, utilizzando anche la batteria tampone.

  18. #27 da Enzo Rodighiero il 21 aprile 2010

    da Enzo il 21/04/10
    Caro Giovanni sto leggendo il tuo corso di programmazione in C per PIC e lo trovo molto interessante, ora vorrei iniziare a caricare il primo programma, io uso la scheda Freedom di Laurenti con un quarzo da 4 MHz, mentre il tuo programma di esempio prevede un quarzo da 20 MHz, devo modificare qualche riga di programma?.
    Grazie

    • #28 da Giovanni Bernardo il 21 aprile 2010

      Basta modificare la definizione xtal_freq che serve unicamente alle routine di ritardo. Poi per altre lezioni, in cui si fanno dei calcoli specifici (tipo gli interrupt ecc) c’è bisogno che ti ricalcoli tutto in funzione del tuo quarzo. E’ spiegato come vengono fatti i calcoli, non dovresti avere difficoltà.

  19. #29 da Enzo Rodighiero il 24 aprile 2010

    Ciao Giovanni ho provato i primi due programmi, tutto ok, ho provato anche ad inserire delle modifiche giusto per fare un pò di pratica, non capisco però la differenza fra codici con estensione .h e .c visto che entrambi sono scritti in C, sarà una domanda banale, ma io sono alle prime armi con il C.
    Grazie, Enzo

    • #30 da Giovanni Bernardo il 24 aprile 2010

      Si tratta di una buona regola di programmazione. Nei file H (Header) si mettono tutte le dichiarazioni (variabili, defines, prototipi di funzione) in maniera tale che, quando si vuole modificare qualche parametro, si agisce soltanto sul file H: è un buon modo per tenere sotto controllo, in un unico file, tutti i parametri di funzionamento del programma.

      Nel file C si mettono le funzioni vere e proprie.

      E’ sempre buona norma dividere una libreria in un file C e un file H : chi la dovrà utilizzare già saprà che per poterla adattare al suo pic o alle sue esigenze non dovrà modificare le funzioni ma basterà soltanto cambiare qualche parametro o dichiarazione nel file H.

  20. #31 da Daddosh il 28 aprile 2010

    Ciao Giovanni! innanzitutto complimenti per il tutorial, mi è davvero prezioso dal momento che sto sviluppando la tesi triennale e ho scelto di controllare un robot mediante un PIC16F877A.
    Ecco il mio problema risiede nello scaricamento del file .HEX sul PIC, mi spiego: io ho realizzato il programmatore di Fiser e l’ho testato con l’hardware test (tutti i segnali pervengono regolarmente ai piedini dello zoccolo dove risiederà il PIC) del programma PICPGM e anche il programmatore è riconosciuto.
    A questo punto importo il file .HEX proposto da te (ti dò del tu) nella lezione 3 (led che lampeggia), lanciando la programmazione però mi dà errore sul “code mem” e fallisce.
    Dunque, se il programmatore è riconosciuto dal programma e il tuo eseguibile è correto, cosa può essere?cambiando software di programmazione potrei risolvere il problema?
    PS:se conosci il programma PICPGM (immagino di si), posso dirti come ho fatto i settaggi così magari ti è più facile aiutarmi, se possibile, a risolvere questo guaio!ti ringrazio in anticipo, spero in un tuo aiuto!

    • #32 da Giovanni Bernardo il 28 aprile 2010

      No, non conosco questo programma e quindi non ho idea di come funziona. Hai provato altri programmi oltre il mio? E’ un errore che ti da in fase di verifica? Se è un errore che ti da in fase di verifica cerca una funzione del programma che ti permette di disattivare la verifica, quindi riprogramma e prova se il programma va.

  21. #33 da Daddosh il 29 aprile 2010

    Dunque…dopo aver dedicato mezza giornata a controllare la corretta realizzzazione del mio programmatore e aver verificato che fosse funzionante, a partire dal presupposto che il tuo programma è corretto (ho provato a compilare anche quello della lezione 5 senza alcun esito), ho concluso che il PICPGM ha difficoltà nella programmazione del PIC16F877A (anche settando manualmente la word all’indirizzo 2007h a 3F32, i settaggi da te previsti nel programma in C).
    Ho scelto quindi di scaricare l’ultima versione di ICProg (la 1.06B) e riprovare la programmazione, inizialmente mi dava il classico errore all’indirizzo 0000h, poi ho pensato al tuo consiglio (preziosissimo devo dire, io mai ci avrei pensato) e ho deselezionato l’opzione “verify after programming” ….ebbene, ora anche il mio LED lampeggia!!!:D
    Grazie di nuovo Giovanni, sono alle prime armi come avrai intuito, ma molto interessato al mondo dei PIC…mi rifarò vivo!;)

    • #34 da Giovanni Bernardo il 30 aprile 2010

      Col programmatore parallelo e icprog pure a me ha sempre dato quell’errore durante la verifica e ho sempre ovviato togliendola… difatti come hai potuto constatare il pic viene programmato bene… è la lettura invece che da problemi e non ho idea perchè… ma dato il basso costo del pickit2 appena dopo fatto il programmatore su parallela passai subito al pickit

  22. #35 da Nicola il 30 aprile 2010

    Salve,
    volevo sapere se nelle prossime lezioni era previsto la realizzazione di un bootloader per il pic usato nei vari progetti. In rete si trovano molti bootloader ma non ho trovato nessun sito che parli di come realizzarli. Mi piacerebbe capire quindi come funzioni un piccolo bootloader e se sia possibile scriverlo in C magari sfruttando poi uno dei FW già presenti nei progetti di questo sito.Grazie

    • #36 da Giovanni Bernardo il 30 aprile 2010

      Non penso che parlerò del bootloader, non ne ho mai realizzato uno ma se ne avessi bisogno penso che utilizzerei uno dei tanti che si trovano in giro. Scrivere un buon bootloader penso sia complicato, e poi oltre al bootloader bisogna scrivere anche il software di programmazione che vi comunica.

  23. #37 da Luxifer il 30 aprile 2010

    Davvero grazie per questo tutorial!!! Il fatto che venga impiegato il C come linguaggio di programmazione mi ha spinto ad entrare nel mondo MCU e le spiegazioni fornite sono dettagliate al punto giusto.
    Non so se la mia domanda sia pertinente, ma vengo subito al punto.
    Dopo aver dato uno sguardo alla terza lezione, mi sono proposto di simulare il circuito che prevede il blinking del LED utilizzando il software Designsoft TINA v8.0. Generalmente iIl codice sviluppato in assembler o in C viene “caricato” da TINA utilizza il file .hex, oppure .asm o ancora .lst. Le domande che volevo porti sono:
    1) il file .as rilasciato dal compilatore sarebbe il .asm?
    2) possibile avere una delucidazione sul contenuto di questi tre tipi di file (.as,.hex,.lst)? Avendo cambiato il formato .as in .asm ho notato che qui vi è una sorta ti traduzione in assembler del codice implementato in C, o sbaglio?
    Grazie mille anticipatamente per le risposte, e buon lavoro.

    • #38 da Giovanni Bernardo il 30 aprile 2010

      Il file .AS creato dal compilatore è si una sorta di traduzione in assembler del codice C che vai a compilare, ma non so dirti più di tanto. Il file .LST è di ausilio nella ricerca di eventuali errori: è in pratica una specie di listato (come quello contenuto nel file .as) con numeri di riga ed eventuali errori trovati in fase di compilazione.

  24. #39 da Paolo Musso il 5 maggio 2010

    Ciao a tutti, è già un po’ di tempo che mi applico ai PIC ma con poco tempo a disposizione, sono per ora riuscito a realizzare un circuito per la gestione di un pannello solare con batteria e fotocellula per l’ ccensione di una lampada tramite inverter.
    In ogni modo non avevo mai visto un tutorial fatto così bene, complimenti. Lo dico per chi si avvicina la prima volta a questi micro e vista la fatica che ho fatto ( e che continuo a fare) con i datasheet duirei che questo è davvero il miglior modo per iniziare.
    Una domanda: non prevedi niente su dsPIC? magari controllo motori BLDC in PWM?

    Saluti

    Paolo

  25. #40 da Daddosh il 13 maggio 2010

    Ciao Giovanni, volevo chiederti se mi puoi consigliare come fare la lettura di un tastierino a matrice agendo su righe e colonne, mi riferisco più che al codice all’organizzazione (eventuale file.h), ecc. Grazie!

    • #41 da Giovanni Bernardo il 14 maggio 2010

      Per fare la lettura di un tastierino numerico non ci vuole nulla di particolare. Doveva essere il mio prossimo argomento ma non penso di riuscirci perchè sto lavorando anche ad altro. Se hai un tastierino 4×4 utilizzerai un’unico banco in cui setterai 4 I/O come uscite e 4 come ingressi. A 4 pin collegherai le 4 colonne e agli altri 4 le 4 righe (è indifferente). Nel main abiliterai una alla volta le 4 colonne (all’inizio saranno tutte a stato logico 1). Un uscita alla volta la porti a 0 restando le altre 3 a 1. Man mano quindi ti controlli le righe: confrontando la riga che è andata a zero con quale colonna hai settato a zero ecco che ti tiri fuori il tasto premuto. Come vedi in settings non ci va niente se non il settaggio opportuno delle 8 porte.

  26. #42 da Daddosh il 18 maggio 2010

    Ciao!dunque pur non riuscendo a vedere la tua risposta in questi giorni ho proceduto come hai detto tu, basandomi su un programmino simile.
    Se vuoi ti posso inviare il codice sorgente, cos’ poi (se lo ritieni valido) lo modifichi come meglio credi e inserisci anche questa voce!;)

    • #43 da Giovanni Bernardo il 18 maggio 2010

      Dipende da cosa hai realizzato e come, e se hai anche foto. Scrivimi a gianni at settorezero.com mandandomi quello che hai fatto e vedo se si può pubblicare.

  27. #44 da Daddosh il 20 maggio 2010

    Ciao a tutti!Ho fatto un programma scomposto su più file ma ho problemi nel passaggio delle variabili; in particolare ho 3 file.c:
    -main.c (controlla un robot planare che disegna delle celle)
    -posizionamento.c (funzione che movimenta i 2 motori per gli assi x ed y)
    -celle.c (funzione che sfrutta posizionamento.c per disegnare celle di forma
    indicata attraverso un valore ricevuto dal main)
    il mi oproblema sta nella gestione della portA, alla quale ho connesso i finecorsa; il fatto è che posizionamento.c deve riuscire a leggere istante per
    istante portA, come faccio per farglielo leggere?
    Se poi da celle.c invoco posizionamento.c, ho un doppio richiamo a funzione, in tal caso devo passare portA prima a celle.c e poi da questa a posizionamento.c
    Chiedo scusa ma ho provato diverse soluzioni senza trovar la via giusta e non so più come fare…

    • #45 da Giovanni Bernardo il 20 maggio 2010

      Non è che ci abbia capito qualcosa in quello che hai scritto, forse anche perchè ignoro completamente che tipo di applicazione è. Comunque sia ti conviene mettere i finecorsa sulle porte da RB4 a RB7 o su RB0 in maniera tale che puoi monitorare l’interrupt, senza stare a fare il polling dei finecorsa di continuo: appena giunti a finecorsa ti scatta l’interrupt e da li ti imposti dei flag che verranno poi controllati nel main cambiando il comportamento del programma.

  28. #46 da Daddosh il 20 maggio 2010

    In effetti ammetto che non è facile da spiegare, purtroppo non posso usare PORTB..dunque vedo di esser più chiaro:
    -supponi che abbia 2 file nella stessa cartella: main.c e posizionamento.c
    che contiene la definizione della funzione “posizionamento” stessa.
    -nel file main.c includo il file posizionamento.c
    -in posizionamento.c posso usare direttamente le diciture PORTA, PORTB, PORTC,ecc. per fare le varie operazioni o devo passarle come parametri alla funzione?
    Dico questo perchè so che la funzione è come una scatola nera a cui passo dei parametri in ingresso e ottengo eventualmente un valore di ritorno, e so che i parametri definiti al suo interno hanno visibilità locale.
    Ciò che mi chiedo è se i parametri globali definiti come PORTA da pic.h sono visibili anche dalla funzione inclusa.
    Spero di essere stato più chiaro!:)

  29. #47 da Luca il 7 giugno 2010

    Caro Giovanni,
    è da parecchio che non scrivo, l’università ha totalmente invaso anche il mio tempo libero.
    Volevo annunciarti che, oltre a ringraziarti ancora per il tuo corso, proprio la settimana scorsa ho parlato con un mio professore riguardo la tesi, che tratterà di una stazione di previsioni metereologiche composta da due schede collegate via xbee di cui una tramite i convertitori a\d preleverà informazioni da sensori di temp (lm58) e pressione (mps2100a-nd), e le invierà alla scheda base che comunicando via rs232 al pc, invierà informazioni che saranno trasmesse via internet ad un client.

    Oltre ciò, vengo a proporti il mio quesito del mese, ho finalmente trovato i due pic che più sono adatti ai miei smanettamenti, un pic16f690 ed un pic12f683, ed è di quest’ultimo che vengo a chiederti lumi.

    Stavo cercando di fare un programmino semplice, ovvero un led che via interrupt da un pulsante porta gpio2 communta da acceso a spento e viceversa. Ora però mi preoccupa tantissimo l’impostazione dei registri:
    io ho fatto così:

    #define LED GPIO4
    #define LED2 GPIO5
    #define BUT GPIO2

    OSCCON = 0b1110001; //Oscillatore a 8MHz
    TRISIO= 0b000100; //pulsante su gpio2
    INTCON= 0b10010001;
    ANSEL = 0; //tutti ingressi digitali

    void interrupt pulsante()
    {
    if(GPIF) //interrupt su GPIO?
    {GPIF=0; //cancello il “buffer”
    LED^=1; //controllo se sono entrato nell’interrupt
    if (!BUT){

    LED2^=1;
    DelayMs(10);//anti bounce
    while(!BUT){}; //anti lampeggio
    }
    }
    }

    Ma così non funge, non entra mai in interrupt!
    Qualche idea? Qualche lume sull’impostazione di tutti i miliardi di registri che questo pic veramente molto micro (8pin) ha?
    Grazie, Luca

    ndp. tanto per la cronaca, tale prog crasha con il solito errore “picc.exe ha smesso di voler funzionare senza farmi esaurire”…infatti l’ho compilato, piu volte e senza errori, con una versione precedente.

    • #48 da Giovanni Bernardo il 7 giugno 2010

      Allora… Per il TRISIO metti gli altri 2 bit che mancano, come l’hai scritto tu, con 6 bits, non so come può interpretarlo il compilatore.

      La config word? Non la vedo, è importante settarla bene per poter usare il quarzo interno.

      Stessa cosa per OSCCON: manca l’8° bit da mettere a zero. Poi metti a zero il bit 0 di OSCCON e setta la modalità opportuna nella config word. Anche se non cambia niente fallo lo stesso, io a volte ho trovato dei problemi su queste cose.

      E poi: ahi ahi ahi!!! Hai messo un Delay nella routine di interrupt?!? Lo sai che non si fa! Ti devi gestire la cosa in maniera differente. Comunque non vedo la necessità di controllarsi un pulsante tramite interrupt, lo puoi fare in polling nel main senza scomodare l’interrupt, e poi il flag di interrupt va resettato alla fine delle operazioni e non all’inizio. Nel tuo caso suppongo che, azzerando subito l’interrupt e rimbalzando il pulsante, l’interrupt viene richiamato di continuo non andando mai “a fondo” e comunque quel ritardo li dentro può creare bei casini. Riscrivi il codice controllandoti il pulsante nel main e non nell’interrupt.

    • #49 da Giovanni Bernardo il 7 giugno 2010

      Tieni conto che gestire un pulsante con l’interrupt non è una cosa semplice, mi spiego: l’interrupt sarà scatenato di continuo al cambio stato determinato dagli inevitabili rimbalzi del pulsante, per tale motivo il flag va resettato alla fine, ma la gestione dell’antirimbalzo va fatta via software inserendo dei ritardi per cui nella routine di interrupt proprio non ci può stare a meno che non ti complichi un bel po le cose gestendo vari flag da controllare nel main, che è una cosa che sconsiglio, l’interrupt sul cambio stato dei pin INT in genere viene utilizzato per contatti puliti tipo contatti ottici, magnetici o segnali in genere.
      Poi, per la tua applicazione, il 12F a cosa ti serve? Basta il 16F690 che ha l’ADC per leggere i sensori e l’USART per comunicare con l’XBee.

      • #50 da Luca il 3 luglio 2010

        Caro Giovanni,
        scusami se non ti ho risposto più al problema di interrupt e pic16f683, ho abbandonato un pò il tutto, sopratutto per un problema di mancanza di tempo (gliesamiiii) e il mio nervosismo esponenziale nella calibrazione dell’oscillatore interno (#$@zz! )! In ogni caso ho preso come oro colato le tue dritte, grazie!

        Ma sopratutto ho abbandonato tale scelta per il pic16f1827 …xlp,debug integrato, 32 mhz (5mips), per non parlare di cosa sono riusciti a far entrare in un dip18… cosa volere più dalla vita? (sopratutto se si ha un bellissimo pickit3!) se non buttare tutti i pic (vetusti) che si ha per le mani e migrare verso questo freschissimo prodotto?

        Qui siamo ancora in fervida attesa delle librerie i2c per il ds1307! Sappi che dopo aver imparato ad usare e testato il convertitore adc su questo pic, la mia voglia di conoscenza arriverà ai ferri corti! :D

        Ti ringrazio infinitamente per il tuo meraviglioso impegno, e l’attenzione dedicatami.
        Luca

  30. #51 da Nino il 7 giugno 2010

    Il corso sui pic e’ veramente interessantissimo, anche per me che non avevo assolutamente idea di cosa fossero e che adesso voglio invece sperimentare tutto quello che ho capito (magari rileggendo qualche altra volta). Volevo farti i miei complimenti per la chiarezza delle informazioni e la precisione nell’ esposizione degli argomenti.

  31. #52 da Nino il 7 giugno 2010

    Ciao Giovanni, volevo chiederti se e’ possibile utilizzare il progetto per la comunicazione wifi tramite xbee su porta rs232 per far comunicare il PC con una stampante (Epson Pos) alimentata a 24V. In caso affermativo come mi conviene alimentare il circuito collegato alla seriale della stampante? Ancora complimenti per i tuoi articoli e grazie.

    • #53 da Giovanni Bernardo il 7 giugno 2010

      Teoricamente è fattibile perchè alla fine due moduli XBee sostituiscono in tutto e per tutto un cavo seriale rs232. Sul lato pc metti l’XBee collegato con il suo adattatore (usb o rs232), sul lato stampante devi metterci un circuito basato su max232 con l’apposito connettore DB9 e alimentarlo a 5V. Poi gli XBee vanno settati per avere le stesse impostazioni di comunicazione del pos

    • #54 da Giovanni Bernardo il 7 giugno 2010

      ah! una precisazione! la comunicazione “WIFI” segue uno specifico protocollo. Con gli XBee fai una comunicazione wireless secondo il protocollo “ZigBee” NON WIFI… la cosa è ben diversa

  32. #55 da Nino il 7 giugno 2010

    Ahhhh!!!, adesso ho capito ancora meglio, scusa non sono molto esperto ma credo di avere imparato già tanto. Grazie per la precisazione.

  33. #56 da marco196638 il 20 giugno 2010

    Ciao Giovanni sono un patito di elettronica ma voglio imparare a programmare i PICMICRO.
    Sto seguendo le tue lezioni ma non riesco a compilare il programma, ho seguito alla lettera i passaggi salvando il programma come da te consigliato ma gli altri due files “delay.c” e “delay.h” come hai fatto a produrli?
    Con solo “main.c” il compilatore da errore come faccio a produrre gli altri due file necessari alla compilazione?
    Ti ringrazio in anticipo

  34. #58 da odessos il 27 giugno 2010

    Salve a tutti. Vorrei iniziare con qualche programmino semplice tipo il led lampeggiante.
    Sono intenzionato ad acquistare dalla microcip il PICkit-2 ed aggiungere allordine un chip per iniziare.
    Visto che il cip, su cui si basa il corso non è più fornibile cosa mi consigli?
    Credo che per iniziare non occorrono prestazioni eccelse, forse bastano anche chip da 8 bit e pochi pin.

    Stefano

    • #59 da Giovanni Bernardo il 27 giugno 2010

      al posto del 16F877A ora c’è il 16F887. A pochi pin ti posso consigliare il 16F88 che mi pare abbia tutte le periferiche.

  35. #60 da Stefano Bernini il 10 luglio 2010

    Ciao,intanto volevo dirti che il tuo sito è straordinario c’è di tutto e di più, e mi è stato molto utile per capire finalmente in linea di massima come si programmano i pic da zero!
    Volevo chiederti un consiglio:
    Devo scegliere un microcontrollore non so se stare su un PIC16f877 oppure su un dsPIC, voglio costruire un pendolo inverso su carrello (http://www.youtube.com/user/buonbomba#p/f), lo scopo è controllare un motore passo passo in funzione della posizione angolare che mi dice un encoder line drive,per far stare l’asta in equilibrio, i passi di progettazione sono questi:
    -modello matematico del sistema meccanico
    -linearizzazione del sistema meccanico
    -simulo il modello matematico con Matlab simulink
    -trovo legge di controllo con Matlab tramite funzione Pole and Place
    -trovata la funzione di trasferimento del sistema con il regolatore,la discretizzo con la trasformata Zeta
    -implemento la FDT discretizzata in linguaggio C
    -ORA IL GRANDE PROBLEMA: devo trasferire la legge di controllo a un microcontrollore che dato un ingresso digitale della posizione dell’encoder mi faccia di conseguenza muovere un motore passo passo tramite un azionamento di potenza fuori dal microcontrollore, QUALE MICRONTROLLORE USO??? la mia domanda nasce dal fatto che sono a conoscenza del fatto che il dsPIC ha una funzione dedicata chiamata QEI (Quadrature Encoder Interface) che mi facilita la lettura dell’encoder, invece sul PIC non c’è e ho letto diversi forum dove si hanno problemi con la lettura di encoder, ma il problema è che documentazione sui dsPIC c’è ben poco in giro e non so dove sbattere la testa. Poi per il PIC avrei un programmatore per il dsPiC no, oppure per lo meno non so se possa andare cmq!

    • #61 da Giovanni Bernardo il 11 luglio 2010

      Per quello che devi fare un dsPIC è sicuramente più adatto. Ma la programmazione di un dsPIC non è cosa semplice per quanto ne sappia. Anche i pic16 possono gestire gli encoder in quadratura, sfruttando gli interrupt, devi scriverti da solo il software di controllo. I dsPIC invece hanno delle periferiche hardware dedicate. Su questo comunque non posso esserti d’aiuto.

  36. #62 da Luca il 20 luglio 2010

    Caro Gianni,
    messo da parte il generatore sinusoidale, (dopo aver sbavato dietro ad un dsPIC33FJ128GP802 dip28!! con 40 MIPS e 10bit DAC; ed aver capito di posporre tale progettino di qui a max 5-6 mesi direttamente su quell’amabile dspic); ho deciso di “consolarmi” gettandomi a capofitto nel protocollo i2c, ho appena ordinato dei 24FC1025 (1Mhz! 200 anni di retenzione 1 Mbit, cosa volere piu dalla vita?) e vorrei incominciare a capirci qualcosa. (ho preferito l’i2c all’SPI perchè mi affascina come protocollo, ma sopratutto come vastità di periferiche sul mercato)
    Hai qualche idea a riguardo? qualche lezione in fase di preparazione? o magari del materiale da dove cominciare, qualche link utile (il materiale di microchipc è solo un macello); ovviamente quando finito ti invierò tutto il materiale prodotto.
    Luca

    • #63 da Giovanni Bernardo il 20 luglio 2010

      E’ parente di quello che ho messo su Facebook :D
      Per l’I2C ti ho risposto in un precedente messaggio…
      Comunque vedo di farlo diventare il prossimo articolo. Una lezione sull’I2C in genere, quindi l’utilizzo delle eeprom esterne e del DS1307.
      Il protocollo SPI è più veloce ma ha bisogno di 3 linee di comunicazione

      • #64 da Luca il 21 luglio 2010

        Allora,
        ci ho appena messo mani, e mi trovo davanti ad un problema, stavolta, titanico.

        Partendo dal presupposto che nel mio caso, devo adattare tutta la libreria perchè
        1) gli identificatori non sono gli stessi
        2) il 16f1827 a quanto pare ha due linee per comunicazioni seriali, e con ciò ha praticamente sdoppiati tutti i registri (es SSPSTAT in SSP1STAT e SSP2STAT)

        Ora la cosa si fà piu complicata del solito:
        sugli include dell’hitec c in C:\Program Files\HI-TECH Software\PICC\9.70\include in generale troviamo gli identificatori, ed esempio, così:
        ******************************************************************************
        // Register: WPUB
        volatile unsigned char WPUB @ 0×20D;
        // bit and bitfield definitions
        volatile bit WPUB0 @ ((unsigned)&WPUB*8)+0;

        volatile bit WPUB7 @ ((unsigned)&WPUB*8)+7;
        #ifndef _LIB_BUILD
        union {
        struct {
        volatile unsigned WPUB0 : 1;

        volatile unsigned WPUB7 : 1;
        ******************************************************************************

        Ma per quanto riguarda il registro SSP1STAT ed anche in tutti gli altri registri per le comunicazioni seriali mi trovo che le definizioni dei bit sono TUTTE COMMENTATE! Guarda: (riga 1765 del pic16lf1827.h):
        ******************************************************************************
        // Register: SSP1STAT
        volatile unsigned char SSP1STAT @ 0×214;
        volatile unsigned char SSPSTAT @ 0×214;
        // bit and bitfield definitions
        //volatile bit BF @ ((unsigned)&SSP1STAT*8)+0;
        //volatile bit UA @ ((unsigned)&SSP1STAT*8)+1;
        //volatile bit R_nW @ ((unsigned)&SSP1STAT*8)+2;
        //volatile bit S @ ((unsigned)&SSP1STAT*8)+3;
        //volatile bit P @ ((unsigned)&SSP1STAT*8)+4;
        //volatile bit D_nA @ ((unsigned)&SSP1STAT*8)+5;
        //volatile bit CKE @ ((unsigned)&SSP1STAT*8)+6;
        //volatile bit SMP @ ((unsigned)&SSP1STAT*8)+7;
        #ifndef _LIB_BUILD
        union {
        struct {
        volatile unsigned BF : 1;
        volatile unsigned UA : 1;
        volatile unsigned R_nW : 1;
        volatile unsigned S : 1;
        volatile unsigned P : 1;
        volatile unsigned D_nA : 1;
        volatile unsigned CKE : 1;
        volatile unsigned SMP : 1;
        };
        ******************************************************************************

        Cooosa? Hanno lasciato il lavoro a metà? Non erano sicuri che funzionasse?
        Il bello che gli identificatori dei registri 1 e 2 sono identici fra di loro! CKE nell’uno e CKE nell’altro! Perchèè perchèèè :’(
        Vedi i singoli bit SSP2STAT e SSP1STAT per esempio, come d’altronde tutti gli altri.

        Ho provato a fare una modifica a tale libreria, dopo aver accuratamente fatta una copia di backup, decommentando quelle righe e cambiando i bit del tipo CKE in CKE1 e CKE2 rispettivamente dei registri SSP1STAT e SSP2STAT ma durante la compilazione rimane l’errore : Error [192] C:\Users\Luca\Desktop\Programmazione Pic\16F1827\i2c.c; 24.1 undefined identifier “CKE1″

        Stasera diamo proprio i numeri mio caro picc.exe!!

        Guarda, io non ne posso più, ed il bello che ci sono persone che avranno speso 1000 dollari per questo compilatore. Che casino che casino….

        • #65 da Giovanni Bernardo il 21 luglio 2010

          Allora… io uso il picc 9.65 e non mi trovo un file pic16lf1827.h ma uno pic16f1827.h (che poi dovrebbe essere lo stesso in quanto la sigla LF identifica lo stesso dispositivo ma a basso consumo) e non ho nessuna riga commentata… Te lo mando via email

        • #66 da Giovanni Bernardo il 22 luglio 2010

          Ho controllato meglio. Non c’è nulla di anomalo non preoccuparti. Sono state utilizzate le strutture come per i pic18. Ho riscritto la libreria i2c per usarla con questi pic col doppio modulo MSSP. Te l’ho inviata via email, vedi se va.

  37. #67 da Gabriele il 22 luglio 2010

    Salve Giovanni
    una domanda stupida: come faccio a scaricare il .zip che contiene delay.c e delay.h? E’ scritto che dovrei effettuare il login, ma non trovo dov’è la finestra per registrarsi. Grazie

  38. #69 da Stefano Bernini il 22 luglio 2010

    Ciao,
    Intanto complimenti per il sito!
    Volevo chiederti se secondo te un programmatore autocostruito per pic16f877 può programmare anche pic della serie 18…i segnali mclr,pgm…ecc son sempre quelli vero?

    • #70 da Giovanni Bernardo il 22 luglio 2010

      La questione non riguarda tanto i pin di programmazione, che sono gli stessi pure per i dsPic e altre serie. La questione è il software dal momento che le varie famiglie hanno la memoria organizzata in maniera differente, per cui è il software che hai intenzione di usare che è da controllare, non tanto il programmatore. Il programmatore poi deve essere supportato dal software.

(non verrà pubblicata)
  1. Ancora nessun trackback

Fusion theme by digitalnature | Articoli (RSS) e Commenti (RSS) ^