francesco93 Inserito: 3 maggio 2012 Segnala Share Inserito: 3 maggio 2012 salve a tutti, è la mia prima discussione che apro, quindi mi scuso se effettuo qualche errore. Ho visto che ci sono molti utenti preparati in questo forum e credo che riusciranno a darmi una mano. Come dal titolo, sto cercando di realizzare un termostato (il più semplice possibile) con il pic16f876. in sostanza voglio che il pic attiverà una determinata uscita(es. riscaldatori) se la temperatura scende sotto una temperatura di riferimento minima e attivarne un altra(es. ventole di raffreddamento) se la temperatura supera una temperatura di riferimento massima. infine magari utilizzare un display per la visualizzazione delle varie temperature. Se avete un pò di materiale a disposizione per questo progetto certamente mi tornerà utile! grazie! Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 3 maggio 2012 Segnala Share Inserita: 3 maggio 2012 Definisci materiale. magari comincia a chiarirti le idee sul tipo di sensore che vorrai usare e sul tipo di attuatore, sulle loro caratteristiche e necessità. Sul tipo di visualizzatore, sul modo di inserire, variare le soglie, etc. Cos'è? Un progetto amatoriale? Un esercizio scolastico? Link al commento Condividi su altri siti More sharing options...
francesco93 Inserita: 3 maggio 2012 Autore Segnala Share Inserita: 3 maggio 2012 è un progetto che volevo portare all'esame...solo che visto che a scuola stiamo un pò indietro ho deciso di chiedere aiuto a voi!Grazie comunque Link al commento Condividi su altri siti More sharing options...
francesco93 Inserita: 3 maggio 2012 Autore Segnala Share Inserita: 3 maggio 2012 il sensore da utilizzare è lm35,ho pensato a questo in quanto ci da un valore in tensione.Per la visualizzazione invece un display 16x2. per variare le soglie invece avevo pensato a dei pulsanti, due per ogni soglia, se però si va a complicare troppo il programma mi accontento anche di soglie fisse che preimposto in fase di programmazzione. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 4 maggio 2012 Segnala Share Inserita: 4 maggio 2012 Benissimo hai delineato nelle linee essenziali quello che vuoi fare. Ora, per poterti aiutare, sono necessarie altre informazioni. La parte Hw. Cosa userai? Hai già una scheda fatta? Hai un bread board? altro? Poi gli strumenti Sw. Ovviamente userai l'ambiente gratuito di MPLAB. Che linguaggio andrai ad usare? La suite gratuita "C" di MPLAB? altro? Più informazioni dai più facile sarà aiutarti. Spendi un po' di tempo a descrivere cosa vuoi fare, cosa sai fare e cosa vuoi ottenere. Link al commento Condividi su altri siti More sharing options...
francesco93 Inserita: 4 maggio 2012 Autore Segnala Share Inserita: 4 maggio 2012 okok purtroppo non ho le idee ben chiare...comunque per quanto riguarda la parte hw dovrò comprare la maggior parte dei componenti e montarli su bread-board. il circuito che voglio realizzare è piuttosto indicativo diciamo, anche per gli attuatori ad esempio potrei utilizzare semplicemente un led per indicare che sono stati attivati i riscaldamenti e la ventola di un pc nel momento in cui viene superata la temperatura di riferimento massima. Per la parte di programmazione ho meno esperienza, ho pensato di utilizzare mikrobasic per scrivere in c in maniera da utilizzare eventuali librerie e semplificare il programma rispetto a un linguaggio assembler. spero di essere stato abbastanza chiaro. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 4 maggio 2012 Segnala Share Inserita: 4 maggio 2012 Forse ti converrebbe usare una schedina con micro per impieghi generali. C'è quella prodotta dalla medesima azienda che produce MikroC, la EasyPIC7 che in questo periodo viene offerta a prezzo speciale di 56€ (ieshop.it) ed ha gia a bordo display, sensore di temperatura LM35, ingressi ed uscte. Leggere lo LM35 lo leggi direttamente dall'ingresso analogico del PIC. Se programmi l'ingresso per convertire su10 bit hai praticamente la temperatura in diretta. Impstare due sogle di comparazione è semplicissimo. COmincia a pensare alla topologia Hw, poi per fare il programma è quasi automatico. Link al commento Condividi su altri siti More sharing options...
francesco93 Inserita: 4 maggio 2012 Autore Segnala Share Inserita: 4 maggio 2012 non avevo mai sentito parlare di queste schede...comunque nel sito che mi hai proposto l'ho trovata ha un prezzo molto più alto! e credo che non mi conviene per l'utilizzo che ne devo fare... Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 4 maggio 2012 Segnala Share Inserita: 4 maggio 2012 Forse è finita la promozione. Comunque di schedine per pochi euro ne trovi di gia fatte. Comunque prova a leggere questa discussione Nel mesaggio 3 e 4 c'è il link allo schema delle schede che si possono vedere in foto. Se vuoi non sono difficili da realizzare. Ho deciso di non continuare con questo lavoro perchè sembra non interesssi ad alcuno. Link al commento Condividi su altri siti More sharing options...
francesco93 Inserita: 5 maggio 2012 Autore Segnala Share Inserita: 5 maggio 2012 ok...grazie comunque Link al commento Condividi su altri siti More sharing options...
maguls Inserita: 6 maggio 2012 Segnala Share Inserita: 6 maggio 2012 Ho deciso di non continuare con questo lavoro perchè sembra non interesssi ad alcuno. E' un vero peccato Livio, secondo me è un argomento molto interessante che poteva raccogliere anche molti utenti nuovi sul forum. Però certo ci vuole almeno un piccolo feedback... All'università io ho lavorato con fpga, dsp, microcontrollori, però quando le cose non le si utilizza spesso vanno nel dimenticatoio. Certo è che mi sono ripromesso di ricominciare a riguardare qualcosa, poi a me la programmazione non dispiace anzi. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 6 maggio 2012 Segnala Share Inserita: 6 maggio 2012 Però certo ci vuole almeno un piccolo feedback... Se vai a scorrere l'elenco dei progetti "on line" ne trovi parecchi, tutti abortiti per mancanza di partecipazione. Son tutti li che aspettano i risulttati, acquattati ed in silenzio. Son veramente pochi quelli che offrono collaborazione. Abbiamo persino lanciato un'iniziativa per la costruzione e progettazione di un PLC, regalando alcuni kit CUBLOC. FOrse ci sono ancora dei kit disponibili... Link al commento Condividi su altri siti More sharing options...
francesco93 Inserita: 6 maggio 2012 Autore Segnala Share Inserita: 6 maggio 2012 comunque nel caso in cui porto a termine questo progetto(spero tanto) lo posto qui! Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 6 maggio 2012 Segnala Share Inserita: 6 maggio 2012 comunque nel caso in cui porto a termine questo progetto(spero tanto) lo posto qui! Bravo hai centrato perfettamente lo spirito del forum! Comunque se hai domande e richieste non esitare a chiedere, nei limiti del possibile l'aiuto non ti verrà negato. Se ti metti d'impegno ce la dovresti fare. Una volta che hai realizzato il prototipo Hw, scrivere il codice è abbastanza semplice e in caso di difficoltà una mano a venirne fuori te la daremo senz'altro. Link al commento Condividi su altri siti More sharing options...
francesco93 Inserita: 12 maggio 2012 Autore Segnala Share Inserita: 12 maggio 2012 Eccomi ragazzi Dopo aver lavorato e studiato un pò di cose ho iniziato a realizzare qualcosa sperando che sta piuttosto bene. Riguardo la parte Hw non ho ancora comprato il materiale, quindi non ho potuto provare niente, ho pensato di non utilizzare schede già realizzate, ma acquistare i singoli componenti...comunque ho realizzato il circuito su eagle. Ho realizzato anche la parte Sw utilizzando mikrobasic...Premetto che non avevo mai utilizzato questo software, infatti ho molti, anzi moltissimi dubbi riguardo a ciò che ho realizzato Adesso vorrei postare il circuito realizzato su eagle e il programma in mikrobasic...devo caricarli nella sezione up/download prima di postarli qui? Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 13 maggio 2012 Segnala Share Inserita: 13 maggio 2012 Gli schemi siicuramente. Link al commento Condividi su altri siti More sharing options...
francesco93 Inserita: 13 maggio 2012 Autore Segnala Share Inserita: 13 maggio 2012 posto ciò chhe ho realizzato...il programma lo metto qui di seguito perche non ho capito bene come allegarlo... //program term //'16F876, //'termostato digitale main: { PORTB = 0; //setta a 0 le porte B TRISB = 1; //porte B come ingressi PORTC = 0; //setta a 0 le porte C TRISC = 0; //setta le porte C come uscite ADCON0 = 0b11000001; // utilizzo il clokc interno e la porta RA0 come analogica ADCON1 = 0b10000000; //il risultato in ADRESH è giustificato a destra, settaggio porteA analogiche Tmin=1; //definisco la temperatura di soglia minima Tmax=1; //definisco la temperatura di soglia max while(1); { ADCON0.ADON=1; ADGO = 1; // fa partire la conversione while(ADGO); //aspetta che il bit torni a 0 da solo(conversione terminata) ADCON0.ADON=0; //disattiva ADC Dato_ADC=ADRESH; Va = (5.0/256.0)*Dato_ADC; temp = Va*10; if (temp <= Tmin) { PORTA.RC0=1; PORTA.RC1=0; } else if (temp >= Tmax) { PORTA.RC0=0; PORTA.RC1=1; } else { PORTA.RC0=0; PORTA.RC1=0; } { if portb.0=0 than // se è stato premuto il pulsante RB0 Tmin=Tmin+1; // incrementa la variabile Tmin if portb.1=0 than // se è stato premuto il pulsante RB1 Tmin=Tmin-1; // decrementa Tmin if portb.2=0 than // se è stato premuto il pulsante RB2 Tmax=Tmax+1; // incrementa la variabile Tmax if portb.3=0 than // se è stato premuto il pulsante RB2 Tmax=Tmax-1; // decrementa Tmax } { LCD_Config(PORTC,7,6,5,4,PORTC,3,0,2); // Lcd_Cmd(Lcd_CURSOR_OFF); // spegni il cursore txt = temperatura; txt1 = °; txt2 = Th; txt3 = Tc; Lcd_Out(1, 1, txt); // scrivi la parola contenuta in text sul display Lcd_Out(2, 1, txt2); Lcd_Out(2, 9, txt3); Lcd_Out(1, 14, txt1); Lcd_Out(2, 7, txt1); Lcd_Out(2, 15, txt1); WordToStr(temp,t); Lcd_Out(1, 12, t); } end. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 13 maggio 2012 Segnala Share Inserita: 13 maggio 2012 Se il programma lo racchiudi entro i tags "code", quelli del pulsante con l'icona "<>" è meglio leggibile. Non uso microbasic, però mi sembra che usi la conversione a 8 bits (256 counts), forse ti conviene usare la conversione a 10 bits (1024 conts). Link al commento Condividi su altri siti More sharing options...
francesco93 Inserita: 13 maggio 2012 Autore Segnala Share Inserita: 13 maggio 2012 ah ok grazie non avevo capito che si mettevano li i programmi. comunque ho utilizzato la conversione a 8 bit sia per utilizzare un solo registro dove avere il valore digitale e poi perchè avevo lettosu alcune guide che il convertitore del pic16f876 era a 8bit Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 13 maggio 2012 Segnala Share Inserita: 13 maggio 2012 che il convertitore del pic16f876 era a 8bit I convertitori dei vari pic sono geenralmente a 10 bits, alcuni tipi hanno anche convertitori a 12 bits. Se usi la conversione a 10 bits è l'ideale per convertire lo LM35. Link al commento Condividi su altri siti More sharing options...
francesco93 Inserita: 13 maggio 2012 Autore Segnala Share Inserita: 13 maggio 2012 ok...quindi andrò ad utilizzare il registro adresh e adresel in questo modo credo: Dato_ADC=ADRESH+(ADRESL<<8) Va = (5.0/1024.0)*Dato_ADC; temp = Va*10; Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 13 maggio 2012 Segnala Share Inserita: 13 maggio 2012 Non saprei perchè non conosco il microbasic, in "C" è sufficiente dichiare la variabile come intero da 16 bits e la funzione che legge lo A/D_C rende il valore in questa variabile, senza necesità di shift o altro perchè vengono allineati a destra azzerando i bits più significativi. DOvresti leggere bene il manuale del microbasic; suppongo che ci sia la built in function che permette di leggere le conversioni su 10 bits. Link al commento Condividi su altri siti More sharing options...
francesco93 Inserita: 26 giugno 2012 Autore Segnala Share Inserita: 26 giugno 2012 eccomi finalmente sono riuscito a fare qualcosa le temperature di soglia però non è possibile variarle durante il funzionameto, quindi solo in fase di programmazione. Per scriverlo ho utilizzato mikrobasic... program termometro dim temp as longint dim temperatura as word dim decine, unita, decimi as byte dim gradi as word main: TRISA = $FF TRISB = $00 TRISC = $FF ADCON0 = %11000000 ADCON1 = %10000011 PORTB = $00 Lcd_Init(PORTC) Lcd_Cmd(LCD_CURSOR_OFF) Lcd_Cmd(LCD_CLEAR) Lcd_Out(1,1 ,"temp:") Delay_ms(1000) while TRUE temperatura = Adc_Read(0) temp = temperatura * 5000 temperatura = temp >> 10 decine = temperatura div 1000 temperatura = temperatura mod 1000 unita = temperatura div 100 temperatura = temperatura mod 100 gradi = (decine * 10) + unita if (gradi >= 34) then Lcd_Out(2,1 ,"condizionamento") else if (gradi <= 32) then Lcd_Out(2,1 ,"riscaldamento ") else Lcd_Out(2,1 ," ") end if end if if (temperatura < 25)then decimi = 0 else if (temperatura <= 75) then decimi = 5 else decimi = 10 end if end if if (decimi = 10) then decimi = 0 unita = unita + 1 if (unita = 10) then unita = 0 decine = decine +1 end if end if decine = decine + 48 if (decine = "0") then decine = " " end if Lcd_Chr(1,6,decine) Lcd_Chr(1,7,unita + 48) Lcd_Chr(1,8,".") Lcd_Chr(1,9,decimi + 48) Lcd_Out(1,10,"°C") delay_ms(5000) wend end. anche per quanto riguarda l'isteresi non riuscendo a fare diversamente ho pensato di introdurre un ritardo maggiore... Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 18 luglio 2012 Segnala Share Inserita: 18 luglio 2012 ciao Francesco Una domanda ....tu usi microbasic piuttosto che microc piuttosto che micropascal , i compilatori dei serbi Pero' non hai la scheda che vendono loro Quindi produci l'eseguibile e poi lo scarichi con MPLab e il cavo usb della microchip? ciao Walter p.s. ciao Livio mi confermi ll'operazione ? Link al commento Condividi su altri siti More sharing options...
giacomo56 Inserita: 19 luglio 2012 Segnala Share Inserita: 19 luglio 2012 Qualsiasi compilatore produce un file .hex che contiene il codice binario del programma che andrà caricato sul pic con uno dei programmatori che ci sono in commercio della Microchip o di terze parti. Ciao. Link al commento Condividi su altri siti More sharing options...
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