Sommario:

Termometro USB per interni/esterni (o "Il mio primo dispositivo USB"): 4 passaggi (con immagini)
Termometro USB per interni/esterni (o "Il mio primo dispositivo USB"): 4 passaggi (con immagini)

Video: Termometro USB per interni/esterni (o "Il mio primo dispositivo USB"): 4 passaggi (con immagini)

Video: Termometro USB per interni/esterni (o
Video: Hard Disk esterno non riconosciuto o danneggiato? Cosa fare! 2024, Dicembre
Anonim
Termometro USB per interni/esterni (o "Il mio primo dispositivo USB")
Termometro USB per interni/esterni (o "Il mio primo dispositivo USB")

Questo è un design semplice che mostra la periferica USB sui PIC 18F. Ci sono un sacco di esempi per i chip 18F4550 a 40 pin online, questo design dimostra la versione più piccola 18F2550 a 28 pin. Il PCB utilizza parti a montaggio superficiale, ma tutti i componenti sono disponibili in versioni con foro passante. Uso parti a montaggio superficiale perché è più veloce realizzare la scheda senza praticare fori. Il risultato finale è una piccola periferica USB che misura la temperatura interna/esterna. I dati sono disponibili al PC tramite una porta seriale virtuale. Nell'esempio vengono utilizzati i sensori di temperatura, ma è possibile aggiungere altri sensori analogici. grafico

Passaggio 1: panoramica del design

Panoramica del design
Panoramica del design
Panoramica del design
Panoramica del design
Panoramica del design
Panoramica del design

Componenti PIC richiesti

Questa periferica USB è basata sul PIC 18F2550 a 28 pin. Questo chip ha tutto il necessario per un'interfaccia USB a piena velocità. Un condensatore da 0,1 uf tra alimentazione e massa disaccoppia il PIC dall'alimentatore. Un cristallo da 20 MHz (usato per generare un clock interno da 48 MHz) e due condensatori da 27 pf. Un resistore da 10K dall'alimentazione al pin MCLR. Ho aggiunto un diodo equivalente 1n4148 tra il resistore e l'alimentazione in modo che i 13+volt posti su MCLR durante la programmazione non danneggino altri componenti sul circuito. Un'intestazione ICSP (5 pin) viene utilizzata per programmare ed eseguire il debug del dispositivo. Materiale USB richiesto Una presa USB tipo "B" femmina. È necessaria una capacità di 220nf-440nf per il regolatore di tensione USB interno. Uso due condensatori da 0,1 uf (gli stessi usati per il disaccoppiamento) senza problemi. Un LED con resistenza di limitazione della corrente da 330 ohm viene utilizzato per visualizzare lo stato della connessione USB. Materiale richiesto per il sensore Ho usato il sensore di temperatura a microchip TC1047A come sensore di temperatura interna. È fisicamente saldato alla scheda - questo fa sì che si scaldi di qualche grado in più rispetto alla temperatura ambiente. Un collettore viene utilizzato per collegare una sonda di temperatura esterna (versione TO-92 di TC1047a). Un ulteriore condensatore da 0,1 uf aiuta a disaccoppiare un lungo cavo dal resto della scheda. I livelli di tensione USB non sono sufficientemente coerenti per misurare e calcolare con precisione la temperatura dai sensori analogici. Viene utilizzato un riferimento di tensione esterno (MCP1525, 2,5 volt). Il riferimento di tensione richiede un condensatore sull'uscita da 1uf a 10uf. Senza questo condensatore il riferimento di tensione non funzionerà.

Passaggio 2: firmware

Il firmware utilizza la classe USB CDC per emulare una porta seriale. Il dispositivo verrà visualizzato come una porta COM virtuale su un PC. Il firmware è suddiviso in tre sezioni:1. Il driver USB si occupa di enumerare il dispositivo su un PC ed emulare una porta COM. 2. Una routine di servizio legge alternativamente i valori di temperatura e li converte in un formato leggibile. L'esecuzione di entrambe queste operazioni contemporaneamente ha causato l'interruzione della connessione del dispositivo USB al PC (time hogging). La conversione dei valori in virgola mobile in una stringa nel ciclo di servizio successivo alla conversione ha risolto il problema di connettività.* 3. Infine, una routine principale riceve i byte inviati dal PC e restituisce le misurazioni richieste. Più misure sono separate da una virgola, le righe sono terminate con un carattere nullo (hex 0x00)Il firmware dimostrativo accetta i seguenti comandi:Valore esadecimale Restituisce0x00 Temperatura interna (sensore integrato)0x01 Temperatura esterna (intestazione esterna)0x02 Entrambe le temperature (virgola separati) La temperatura viene calcolata in base al riferimento di 2,5 volt e all'offset e alla pendenza del Microchip TC1047A. Altri sensori di temperatura possono avere caratteristiche diverse. Il datasheet del TC1047A è disponibile qui:https://ww1.microchip.com/downloads/en/DeviceDoc/21498c.pdf Il firmware è scritto in MPLAB con il compilatore dimostrativo PIC C18. https://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010014&part=SW006011Il firmware USB effettivo è fornito da Microchip. L'ambiente originale è disponibile qui:https://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en021631Per modificare il firmware: estrarre l'intera struttura della directory del sorgente nella directory principale (c:\MCHPFSUSB). È quindi possibile caricare il file dell'area di lavoro in MPLAB.*La routine da float a string è un divoratore di risorse. Per aggirare il problema di connettività, la routine del servizio USB viene chiamata in vari punti della routine float2string. Questo sarebbe meglio risolto riparando la periferica USB su un'interruzione. Ho usato l'hack in modo che il firmware rimanesse il più vicino possibile alla versione di riferimento.

Passaggio 3: test del dispositivo

Testare il dispositivo
Testare il dispositivo
Testare il dispositivo
Testare il dispositivo
Testare il dispositivo
Testare il dispositivo

Le istruzioni sono per Windows, ma il dispositivo può essere collegato a qualsiasi dispositivo dotato di driver di emulazione della porta seriale CDC.

Programmare il dispositivo con il firmware. Tutti i bit di configurazione dovrebbero essere impostati correttamente nel firmware. Collega il dispositivo a una porta USB. Windows lo rileverà e ti chiederà di scegliere un driver. ASSICURARSI DI FARE CLIC SU "Cerca PER DRIVER PERSONALIZZATO". Passare alla posizione del file.inf incluso nell'archivio del progetto (driver-win2k_winxp). Windows utilizzerà questo file per installare il dispositivo. *Una nota sul driver CDC: il driver di emulazione della porta seriale CDC è incluso in Windows. Il file.inf (fornito da Microchip) dice semplicemente a Windows di connettere questi driver al dispositivo. Per scoprire quale porta COM è stata assegnata al dispositivo, procedi come segue: Vai al pannello di controllo (start->impostazioni->pannello di controllo) Fai doppio clic su "Sistema" Fai clic sulla scheda "Hardware". Fare clic su "Gestione dispositivi" Fare clic su "+" accanto alle porte Viene visualizzato un elenco di porte COM sul sistema. Ho visto il dispositivo presentarsi come COM 3 e 4, ma varierà in base al sistema. Se non è ovvio quale porta è nuova, prova questo: scollega il dispositivo dalla porta USB. Una delle porte scomparirà. Questa è la porta COM del dispositivo #. Ricollegare il dispositivo, la porta riapparirà. La piccola applicazione VB (sorgente inclusa) può essere utilizzata per testare il dispositivo. Immettere il comando da inviare, fare clic su "Avvia". La risposta verrà mostrata nella finestra.

Passaggio 4: cos'altro può fare?

Che altro può fare?
Che altro può fare?

Questa scheda dimostrativa è un buon punto di partenza per una piccola stazione meteorologica domestica: aggiungi un sensore di umidità HIH3160 o sostituisci il sensore di temperatura analogico con il sensore di temperatura e umidità seriale ad alta precisione Sensiron HT74. Aggiungi un sensore di pressione Freescale MPX(a)4115 a misurare la pressione barometrica. Vuoi condividere questi dati sul web? Includilo nel tuo sito web, visualizzalo in Google Earth o ricevi aggiornamenti nel tuo feed RSS? Vedi questa istruzione sull'integrazione di questo dispositivo con il backend web syndicIT.com:

Consigliato: