dott.cicala Inserito: 14 dicembre 2015 Segnala Inserito: 14 dicembre 2015 (modificato) Salve a tutti!Sto cercando di raccogliere informazioni ed esempi sia in ASM che in C (ma pure in Basic o Pacal...tutto fa brodo!) sull'uso di questo piccolo e versatile PIC. In rete non ho trovato moltoIl piccolo è capace di realizzare funzioni interessanti e dispone di svariate periferiche integratedispone, oltre a tutto il resto, 3 uscite PWM a 16bit.Un buon sistema per mandare in pensione, finalmente, tutti quei circuiti con il 555, XR4151 ecc ecc ecc....Avanti con le idee...e gli esempi...che spero ci siano! Modificato: 14 dicembre 2015 da dott.cicala
Livio Orsini Inserita: 15 dicembre 2015 Segnala Inserita: 15 dicembre 2015 Il bello dei PIC è che sono software compatibili, ovvero tutte le funzioni si programmano nel medesimo modo. QUindi non è necessario trovare esempi specifici per questo tipo di pic, che è piuttosto recente, ma basta consultare le AN Microchip o altri siti per avere tutto disponibile.
dott.cicala Inserita: 15 dicembre 2015 Autore Segnala Inserita: 15 dicembre 2015 Vanno bene anche le AN....ne ho trovata una sola e non contiene nulla di interessante. Questo piccolo è un po' diverso dai soliti noti....e ha qualche registro in più.
dott.cicala Inserita: 19 dicembre 2015 Autore Segnala Inserita: 19 dicembre 2015 (modificato) Arriva Natale......Usiamo il pic-colo per qualche semplice effetto luminoso....che ha anche valore didattico.Viene usato l'oscillatore interno a 32MHz- Un fototransistor connesso ad un AI forma un crepuscolare che avvia la sequenza, la quale inizia con una serie di lampeggii a frequenze diverse e viene ripetuta varie volte fino alla esecuzione della sequenza di alba-tramonto.La gestione del 16bit pwm module e del Complementary waveform generator module, non sono così elementari come si può supporre.Il codice è stato scritto in MikroC che, non sarà il massimo, ma anche la versione gratuita è sufficiente.....Le librerie di MikroC, Pwm_init - Pwm_duty - Pwm_start - Pwm_stop (anche nella ultimissima release 6.6.2) non funzionano con questa MCU, e quindi è necessario gestirsi i registri Registri dell'oscillatore OSCCON = 0b11110000; // Int Osc 32MHz 4xPLL ON OSCTUNE = 0b00111111; // Max Frequency Registri del 16bit PWM2 Module PWM2CON = 0b11000000; // module enable, output enable, normal polarity, standard mode PWM2CLKCON = 0b00100001; // HFINTOSC clock, no prescaler PWM2PR = 0x3FF; // PWM PERIOD COUNT REGISTER PWM2PH = 0x3FF; // PWM PHASE COUNT REGISTER E' inoltre necessario scrivere il valore del Duty Cycle desiderato in due registi (nell'esempio 100%) PWM2DCL =0b11111111; PWM2DCH =0b00000011; Oppure in PWM2DC = 512; // dc=50% e in ultimo, settare il bit 7 - LDA - del registo PWM2LDCON PWM2LDCON.B7=1; il quale poi verrà resettato dal PWM module while(1) { PWM2DC = Dimmer; // <---- Dimmer è una variabile di tipo unsigned int PWM2LDCON.B7=1; }Che dite? Non è poi tanto migrabile il codice dagli altri pic 12F5xx - 12F6xx Modificato: 19 dicembre 2015 da dott.cicala
dott.cicala Inserita: 19 dicembre 2015 Autore Segnala Inserita: 19 dicembre 2015 (modificato) //**************************************************************************************** // Project: Standard Mode PWM Test // Author : S.T. 4 Plc Forum // Alba-Tramonto 3ch // Date : 19/12/2015 // MCU : PIC12F1572 - INT.OSC. 32MHz //**************************************************************************************** //****** TAGs **************************************************************************** sbit Load1 at PWM1LDCON.B7; sbit Load2 at PWM2LDCON.B7; sbit Load3 at PWM3LDCON.B7; unsigned int Dc1, Dc2, Dc3, DutyCycle; bit dn, up; //**************************************************************************************** //**************************************************************************************** void main() { //**************************************************************************************** // Registro configurazione Oscillatore //**************************************************************************************** OSCCON = 0b11110000; // Int Osc 32MHz 4xPLL ON OSCTUNE = 0b00111111; // Max Frequency //**************************************************************************************** // Registri configurazione PORT[A] //**************************************************************************************** WPUA = 0b00000000; // Resistenze Pull Up disattivate SLRCONA = 0b00000000; // Slew Rate non limitato INLVLA = 0b00001000; // Ctrl. Soglia Ingressi 0=TTL-1=Scmitt Triggered ODCONA = 0b00000000; // Ctrl. Open Drain Outputs 0=Totem Pole-1=Open Drain APFCON = 0b00000000; // Alternate Pin Function Control Register TRISA = 0b11001000; // RA0-RA1-RA2-RA4-RA5=OUT - RA3=INPUT LATA = 0b00000000; // PORT[A] Latch register ANSELA = 0b00000000; // Ingresso Anaogici OFF //**************************************************************************************** // Registri configurazione INTERRUPTS //**************************************************************************************** INTCON = 0b00000000; // INTERRUPTS CTRL REGISTER PIE1 = 0b00000000; // PERIPHERAL INTERRUPT ENABLE REGISTER 1 PIE2 = 0b00000000; // PERIPHERAL INTERRUPT ENABLE REGISTER 2 PIE3 = 0b00000000; // PERIPHERAL INTERRUPT ENABLE REGISTER 3 PIR1 = 0b00000000; // PERIPHERAL INTERRUPT REQUEST REGISTER 1 PIR2 = 0b00000000; // PERIPHERAL INTERRUPT REQUEST REGISTER 2 PIR3 = 0b00000000; // PERIPHERAL INTERRUPT REQUEST REGISTER 3 IOCAP = 0b00000000; // INTERRUPT-ON-CHANGE PORT[A] POSITIVE EDGE REGISTER IOCAN = 0b00000000; // INTERRUPT-ON-CHANGE PORT[A] NEGATIVE EDGE REGISTER IOCAF = 0b00000000; // INTERRUPT-ON-CHANGE PORT[A] FLAG REGISTER //**************************************************************************************** // Registri configurazione 16-BIT PWM MODULE //**************************************************************************************** //----RA1 - PWM1 ------------------------------------------------------------------------- PWM1CON = 0b11000000; // module enable, output enable, normal polarity, standard mode PWM1CLKCON= 0b00100001; // HFINTOSC clock, Prescaler /4 PWM1PR = 0x3FF; // PWM PERIOD COUNT REGISTER PWM1PH = 0x3FF; // PWM PHASE COUNT REGISTER //----RA0 - PWM2 ------------------------------------------------------------------------- PWM2CON = 0b11000000; // module enable, output enable, normal polarity, standard mode PWM2CLKCON= 0b00100001; // HFINTOSC clock, Prescaler /4 PWM2PR = 0x3FF; // PWM PERIOD COUNT REGISTER PWM2PH = 0x3FF; // PWM PHASE COUNT REGISTER //----RA2 - PWM3 ------------------------------------------------------------------------- PWM3CON = 0b11000000; // module enable, output enable, normal polarity, standard mode PWM3CLKCON= 0b00100001; // HFINTOSC clock, no prescaler PWM3PR = 0x3FF; // PWM PERIOD COUNT REGISTER PWM3PH = 0x3FF; // PWM PHASE COUNT REGISTER //----PWM MIRROR REGISTERS --------------------------------------------------------------- PWMLD = 0x000; // PWM LOAD SIMULTANEOUSLY REGISTER //**************************************************************************************** //Ciclo Alba-Tramonto //**************************************************************************************** while(1) { if(DutyCycle>=1022) { up=0; Delay_ms(5000); dn=1; } else if(DutyCycle==0) { dn=0; Delay_ms(5000); up=1; } if(up) { DutyCycle++; Delay_ms(100); } if(dn) { DutyCycle--; Delay_ms(100); } if(Dc2!=DutyCycle) { Dc1=DutyCycle; Dc2=1022-Dc1; Dc3=DutyCycle; PWMLD=0x7; } PWM1DC = Dc1; PWM2DC = Dc2; PWM3DC = Dc3; } } Modificato: 19 dicembre 2015 da dott.cicala
Livio Orsini Inserita: 20 dicembre 2015 Segnala Inserita: 20 dicembre 2015 Non vedo grandi diferenze, se non nei settaggi iniziali, ma questo è normale.
dott.cicala Inserita: 20 dicembre 2015 Autore Segnala Inserita: 20 dicembre 2015 Be io ho avuto qualche difficoltà a far funzionare quello che già funzionava da tempo su di un 16F88 e su di un 16F877A specialmente perché non ho trovato quasi niente in rete e nemmeno nel sito del produttore e contemporaneamente...non sono ferratissimo....Se poi ci aggiungiamo le lacune tremende di MikroC, e un datasheet di 300 pagine, le difficoltà aumentano.Le differenze sembrano minime però nell'esempio sopra il funzionamento è in "Standard Mode". Più avanti mi piacerebbe affrontare anche gli altri modi di funzionamento:Set on Match - Toggle on Match - Center AlignedVerificare l'effetto dei registri PWMxOF e PWMxPH che determinano rispettivamente la fase e l'offset....tempo permettendo.Come sempre sono graditi suggerimenti.
Livio Orsini Inserita: 20 dicembre 2015 Segnala Inserita: 20 dicembre 2015 (modificato) Scusa perchè usi MicroC, quando hai la ersione gratuita del C fornito da Microchip assieme a Mplab e MplabX. La versione gratuita è meno ottimizzata di quella a pagamento, ma comunque non ha lacune di sorta e poi è perfettamente adattata ai varri modelli di PIC.Io comunque uso CsC per le vecchie CPU, perchè per le nuove non ho gli aggiornamenti (che cosatono).Poi cosa usi come ICD, PicKit3? Modificato: 20 dicembre 2015 da Livio Orsini
dott.cicala Inserita: 20 dicembre 2015 Autore Segnala Inserita: 20 dicembre 2015 Il punto è proprio quello.MikroC mi è stato regalato, con tanto di licenza, insieme alla EasyPic7Pro che ha già a bordo programmatore e ICD, ma ho anche il PicKit3, MPLAB e MPLABXA parte i limiti del compilatore,che comunque con licenza garantisce upgrades a vita, la EasyPic7Pro è molto comoda e versatile.Dovrebbe essere possibile usarla anche con MPLAB - MPLABX (non l' ICD) e con il PicKit3...ma non ho ancora provato
walterword Inserita: 20 dicembre 2015 Segnala Inserita: 20 dicembre 2015 (modificato) con 2,50 euro ti prendevi un arduino 1 di ultima generazione dalla cina ed avevi gia finito .Installavi Ide, Atmel Studio o Visual Studio + Visual micro plugin ,sempre gratis ovviamente Modificato: 20 dicembre 2015 da walterword
dott.cicala Inserita: 20 dicembre 2015 Autore Segnala Inserita: 20 dicembre 2015 Sì lo so, ne ho più d'uno....ma quando ci faccio qualcosa e guardo dentro la scatola....non vedo niente di mio ma un puzzle di cose comprate e assemblate.Con i pic invece è diverso. Parto da un mio schema, un mio pcb, passando per una decina di fallimenti.....prima o poi raggiungo l'obbiettivo.I datasheets sono un condensato di informazioni, basta interpretare male una virgola e non funziona nulla...però leggendo e rileggendo.....Ora....volevo provare con l'appena scaricato MPLAB....e cosa scopro?...che non viene supportato e bisogna passare all'ancora più complesso MPLAB X dove X è l'incognita che rappresenta la quantità di moccoli necessari per raggiungere l'obiettivo.....
Livio Orsini Inserita: 20 dicembre 2015 Segnala Inserita: 20 dicembre 2015 No guarda che MPLABX è solo apparentemente più complesso, ma in pratica è più semplice e da molte funzioni in più, basta farci la mano.Se ti interessa vai sul sito di Elettronicain e c'è un bel tutorial su MPLABX, non so se è scaricabile anche da chi non è abbonato. Nel caso fammelo spaere e, se hai pazienza, te lo scarico io e te lo invio per posta elettronica. Comunque fai bene a preferire i PIC. Soprattutto perchè se fai i lavori bene ti eviti un sacco di grane con le EMC che schede come Arduino proprio non digeriscono (anche Walter ne sa qualche cosa di questi problemi con arduino), anche perchè lo scopo primario di queste schede è un sistema di sviluppo software a basso costo.Io da un po' ho rinunciato perchè con i chip smd proprio non me la senta di saldare. Poi dovrei far fare i cs da aziende specializzate, perchè con questi dispositivi, se non sono pulci come quello che stai usando, fare i cs in casa per me un'espressione di tavazzismo spinto.
dott.cicala Inserita: 20 dicembre 2015 Autore Segnala Inserita: 20 dicembre 2015 Eccolo qui.....MPLAB X IDE....sul sito di Elettronicain e c'è un bel tutorial su MPLABX sono abbonato dal....2001......e non me ne sono accorto.....colpa delle valvole! Adesso guardo....se trovo la tessera e la password.....
dott.cicala Inserita: 20 dicembre 2015 Autore Segnala Inserita: 20 dicembre 2015 L'ho trovato!! Adesso lo stampo e me lo studio.Comunque sto usando la versione DIL8.....niente di più che un 555 come dimensioni, ma dalle potenzialità il cui limite è la sola fantasia.Più avanti....nel progettino di cui sopra, verrà inserita la parte inerente l'interruttore crepuscolare, che servirà a dare l'avvio alla sequenza, sfruttando un ingresso analogico che fa capo allo stesso pin di un PWM e per fare ciò, verrà sfruttata la possibilità fornita registroAPFCON [Alternate Pin Function Control Register]il quale permette di "spostare" alcune funzioni da un pin ad un altro.Magari aggiornerò lo schema allo scopo di pilotare un led rgb....in pratica...tanto lavoro...che si può evitare comprando la pallina cinese che esegue le stesse funzioni....al costo di 3€.....
Livio Orsini Inserita: 20 dicembre 2015 Segnala Inserita: 20 dicembre 2015 Però vuoi mettere la soddisfazione?Io ho sempre sostenuto che chi fa questo nostro deve avere un bel substrato di masochismo.
gabri-z Inserita: 20 dicembre 2015 Segnala Inserita: 20 dicembre 2015 Però vuoi mettere la soddisfazione?Io ho sempre sostenuto che chi fa questo nostro deve avere un bel substrato di masochismo. Non esiste la soddisfazione senza una '' fatica '' precedente ........ Mi ritengo nella stessa '' trincea '' , anche se di livello inferiore , cioè , di fatica .........maggiore !
dott.cicala Inserita: 20 dicembre 2015 Autore Segnala Inserita: 20 dicembre 2015 (modificato) //****************************************************************************** // Project : Standard Mode PWM Test // Author : S.T. 4 Plc Forum // Alba-Tramonto 3ch + Crepuscolare // Date : 20/12/2015 // MCU : PIC12F1572 - INT.OSC. 32MHz // Compiler: MikroC PRO for PIC V6.6.2 //****************************************************************************** //****** TAGs ****************************************************************** sbit Load1 at PWM1LDCON.B7; sbit Load2 at PWM2LDCON.B7; sbit Load3 at PWM3LDCON.B7; sbit man at RA3_BIT; unsigned int Dc1, Dc2, Dc3, DutyCycle, AnVal; bit dn, up, start; //****************************************************************************** //****************************************************************************** void main() { //****************************************************************************** // Registro configurazione Oscillatore //****************************************************************************** OSCCON = 0b11110000; // Int Osc 32MHz 4xPLL ON OSCTUNE = 0b00111111; // Max Frequency //****************************************************************************** // Registri configurazione PORT[A] //****************************************************************************** WPUA = 0b00000000; // Resistenze Pull Up disattivate SLRCONA = 0b00000000; // Slew Rate non limitato INLVLA = 0b00001011; // Ctrl.Ingressi 0=TTL-1=Scmitt Triggered ODCONA = 0b00000000; // Ctrl. Outputs 0=Totem Pole-1=Open Drain APFCON = 0b00000011; // Alternate Pin Function: PW1->RA5 - PWM2->RA4 TRISA = 0b11001011; // RA2-RA4-RA5=OUT - RA0-RA1-RA3=INPUT LATA = 0b00000000; // PORT[A] Latch register ANSELA = 0b00000001; // Ingressi Anaogici RA4=AN3 //****************************************************************************** // Registri configurazione INTERRUPTS //****************************************************************************** INTCON = 0b00000000; // INTERRUPTS CTRL REGISTER PIE1 = 0b00000000; // PERIPHERAL INTERRUPT ENABLE REGISTER 1 PIE2 = 0b00000000; // PERIPHERAL INTERRUPT ENABLE REGISTER 2 PIE3 = 0b00000000; // PERIPHERAL INTERRUPT ENABLE REGISTER 3 PIR1 = 0b00000000; // PERIPHERAL INTERRUPT REQUEST REGISTER 1 PIR2 = 0b00000000; // PERIPHERAL INTERRUPT REQUEST REGISTER 2 PIR3 = 0b00000000; // PERIPHERAL INTERRUPT REQUEST REGISTER 3 IOCAP = 0b00000000; // INTERRUPT-ON-CHANGE PORT[A] POS.EDGE REGISTER IOCAN = 0b00000000; // INTERRUPT-ON-CHANGE PORT[A] NEG.EDGE REGISTER IOCAF = 0b00000000; // INTERRUPT-ON-CHANGE PORT[A] FLAG REGISTER //****************************************************************************** // Registri configurazione 16-BIT PWM MODULE //****************************************************************************** //----RA1 - PWM1 --------------------------------------------------------------- PWM1CON = 0b11000000; // module en, output en, norm pol, standard m. PWM1CLKCON= 0b00100001; // HFINTOSC clock, Prescaler /4 PWM1PR = 0x3FF; // PWM PERIOD COUNT REGISTER PWM1PH = 0x3FF; // PWM PHASE COUNT REGISTER //----RA0 - PWM2 --------------------------------------------------------------- PWM2CON = 0b11000000; // module en, output en, norm pol, standard m. PWM2CLKCON= 0b00100001; // HFINTOSC clock, Prescaler /4 PWM2PR = 0x3FF; // PWM PERIOD COUNT REGISTER PWM2PH = 0x3FF; // PWM PHASE COUNT REGISTER //----RA2 - PWM3 --------------------------------------------------------------- PWM3CON = 0b11000000; // module en, output en, norm pol, standard m. PWM3CLKCON= 0b00100001; // HFINTOSC clock, no prescaler PWM3PR = 0x3FF; // PWM PERIOD COUNT REGISTER PWM3PH = 0x3FF; // PWM PHASE COUNT REGISTER //----PWM MIRROR REGISTERS ----------------------------------------------------- PWMLD = 0x000; // PWM LOAD SIMULTANEOUSLY REGISTER //****************************************************************************** //****************************************************************************** //Crepuscolare con isteresi //****************************************************************************** while(1) { AnVal=ADC_Read(0); start=((AnVal>512)||(AnVal>128 & start)); //****************************************************************************** //Ciclo Alba-Tramonto //****************************************************************************** if(start||man) { if(DutyCycle>=1022) { up=0; Delay_ms(5000); dn=1; } else if(DutyCycle==0) { dn=0; Delay_ms(5000); up=1; } if(up) { DutyCycle++; Delay_ms(100); } if(dn) { DutyCycle--; Delay_ms(100); } if(Dc2!=DutyCycle) { Dc1=DutyCycle; Dc2=1022-Dc1; Dc3=DutyCycle; PWMLD=0x7; } } else { DutyCycle=1023; Dc1=0; Dc2=0; Dc3=0; dn=1; up=0; PWMLD=0x7; } PWM1DC = Dc1; PWM2DC = Dc2; PWM3DC = Dc3; } } Modificato: 20 dicembre 2015 da dott.cicala
dott.cicala Inserita: 20 dicembre 2015 Autore Segnala Inserita: 20 dicembre 2015 Ecco come devono essere impostati i "Fuses" in MikroC
dott.cicala Inserita: 20 dicembre 2015 Autore Segnala Inserita: 20 dicembre 2015 C'è ancora tanto spazio!
Livio Orsini Inserita: 21 dicembre 2015 Segnala Inserita: 21 dicembre 2015 Stefano poi mi studio l'applicazione perchè potrebbe essere interessante conoscere questi ragnetti.Solo che è un po' che ho accantonato i pic proprio per la ralizzazione dei cs. Però questi cosini si potrebbe anche cablarli su una mille fori.Mi ritengo nella stessa '' trincea '' , anche se di livello inferiore , cioè , di fatica .........maggiore ! Gabri non fare il modesto.
walterword Inserita: 21 dicembre 2015 Segnala Inserita: 21 dicembre 2015 dottor Cicala ....se il tuo problema è quello di vedere qualcosa di tuo nella scatoletta quando la apri allora potresti anche creartelo il microcontrollore , per esempio con un fpga.O seno' puoi anche creare un microprocessore fatto in casa, prendi qualche laser, i wafer di silicio .... il silicio lo preferisci in wafer oppure credi sia meglio installare un impianto e produrlo direttamente tramite processo Siemens ? Io quando apro la scatoletta vedo sempre quello che mi interessa, il firmware , il software rappresentano l'anima del programmatore
walterword Inserita: 21 dicembre 2015 Segnala Inserita: 21 dicembre 2015 Livio non perdere tempo a studiare i ragnetti .....cerca il circuito DDS :D
dott.cicala Inserita: 21 dicembre 2015 Autore Segnala Inserita: 21 dicembre 2015 Caspita! Vedendo il tuo nome fra gli interventi mi ero illuso di poter assistere a una lectio magistralis sul software.....e invece.....Comunque...non ho detto e non penso nemmeno che arduino sia un bidone e chi lo usa sia un minus habens.....al contrario di quanto hai fatto tu.
walterword Inserita: 21 dicembre 2015 Segnala Inserita: 21 dicembre 2015 con MPlabX ho avuto solo dispiaceri tra driver usb ed altro .E' stato li che ho deciso di passare ad Arduino
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora