Inhaltsverzeichnis:

USB-Innen-/Außenthermometer (oder 'Mein erstes USB-Gerät'): - Gunook
USB-Innen-/Außenthermometer (oder 'Mein erstes USB-Gerät'): - Gunook

Video: USB-Innen-/Außenthermometer (oder 'Mein erstes USB-Gerät'): - Gunook

Video: USB-Innen-/Außenthermometer (oder 'Mein erstes USB-Gerät'): - Gunook
Video: Volutz USB Ladegerät einmal durchs Labor gejagd 2024, November
Anonim
USB-Innen-/Außenthermometer (oder „Mein erstes USB-Gerät“)
USB-Innen-/Außenthermometer (oder „Mein erstes USB-Gerät“)

Dies ist ein einfaches Design, das das USB-Peripheriegerät auf den PIC 18Fs demonstriert. Es gibt eine Reihe von Beispielen für die 18F4550 40-Pin-Chips online. Dieses Design zeigt die kleinere 18F2550 28-Pin-Version. Die Leiterplatte verwendet SMD-Teile, aber alle Komponenten sind in Durchgangsloch-Versionen erhältlich. Ich verwende SMD-Teile, weil es schneller ist, die Platine ohne Bohren von Löchern herzustellen. Das Endergebnis ist ein kleines USB-Peripheriegerät, das Innen- und Außentemperaturen misst. Die Daten stehen dem PC über eine virtuelle serielle Schnittstelle zur Verfügung. Im Beispiel werden Temperatursensoren verwendet, aber andere analoge Sensoren können hinzugefügt werden. PSSehen Sie hier ein Live-Diagramm der Daten meines Loggers: Graph

Schritt 1: Designübersicht

Designübersicht
Designübersicht
Designübersicht
Designübersicht
Designübersicht
Designübersicht

Erforderliche PIC-Komponenten

Dieses USB-Peripheriegerät basiert auf dem 28-poligen PIC 18F2550. Dieser Chip hat alles, was für eine Full-Speed-USB-Schnittstelle benötigt wird. Ein 0,1uf Kondensator zwischen Strom und Masse entkoppelt den PIC von der Stromversorgung. Ein 20-MHz-Quarz (wird verwendet, um einen internen 48-MHz-Takt zu erzeugen) und zwei 27pf-Kondensatoren. Ein 10K-Widerstand von der Stromversorgung zum MCLR-Pin. Ich habe eine 1n4148-äquivalente Diode zwischen dem Widerstand und der Stromversorgung hinzugefügt, damit die während der Programmierung am MCLR angelegten 13 + Volt keine anderen Komponenten auf der Platine beschädigen. Ein ICSP-Header (5 Pins) wird verwendet, um das Gerät zu programmieren und zu debuggen. Erforderliches USB-Material Eine USB-Buchse vom Typ „B“. Für den internen USB-Spannungsregler sind 220nf-440nf Kapazität erforderlich. Ich verwende zwei 0.1uf Kondensatoren (die gleichen wie zum Entkoppeln) ohne Probleme. Eine LED mit 330 Ohm Strombegrenzungswiderstand wird verwendet, um den USB-Verbindungsstatus anzuzeigen. Erforderliches Sensormaterial Ich habe den Temperatursensor des Mikrochips TC1047A als Innentemperatursensor verwendet. Es ist physisch mit der Platine verlötet - dadurch wird es einige Grad heißer als Raumtemperatur. Ein Header wird verwendet, um einen Außentemperaturfühler (TO-92-Version von TC1047a) anzuschließen. Ein zusätzlicher 0,1-Uf-Kondensator hilft, einen langen Drahtverlauf vom Rest der Platine zu entkoppeln. Die USB-Spannungspegel sind nicht konsistent genug, um die Temperatur von den analogen Sensoren genau zu messen und zu berechnen. Es wird eine externe Spannungsreferenz (MCP1525, 2,5 Volt) verwendet. Die Spannungsreferenz erfordert einen Kondensator am Ausgang von 1uf bis 10uf. Ohne diesen Kondensator funktioniert die Spannungsreferenz nicht.

Schritt 2: Firmware

Die Firmware verwendet die CDC-USB-Klasse, um einen seriellen Port zu emulieren. Das Gerät wird als virtueller COM-Port auf einem PC angezeigt. Die Firmware ist in drei Abschnitte unterteilt: 1. Der USB-Treiber sorgt dafür, dass das Gerät auf einem PC enumeriert und ein COM-Port emuliert wird. 2. Eine Serviceroutine liest abwechselnd die Temperaturwerte und wandelt sie in ein lesbares Format um. Durch die gleichzeitige Ausführung dieser beiden Vorgänge wurde die Verbindung des USB-Geräts mit dem PC unterbrochen (Zeitfresser). Das Konvertieren der Gleitkommawerte in einen String im Servicezyklus nach der Konvertierung beseitigte das Verbindungsproblem.* 3. Schließlich empfängt eine Hauptroutine vom PC gesendete Bytes und gibt die angeforderten Messwerte zurück. Mehrere Messwerte werden durch ein Komma getrennt, Zeilen werden mit einem Nullzeichen abgeschlossen (hex 0x00) Die Demo-Firmware akzeptiert folgende Befehle:Hex-Wert Returns0x00 Innentemperatur (On-Board-Sensor)0x01 Außentemperatur (externer Header)0x02 Beide Temperaturen (Komma.) getrennt) Die Temperatur wird basierend auf der 2,5-Volt-Referenz und dem Offset und der Steigung des Microchip TC1047A berechnet. Andere Temperatursensoren können andere Eigenschaften haben. Das Datenblatt zum TC1047A ist hier verfügbar: https://ww1.microchip.com/downloads/en/DeviceDoc/21498c.pdfDie Firmware wird in MPLAB mit dem Demo-Compiler PIC C18 geschrieben. https://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010014&part=SW006011Die eigentliche USB-Firmware wird von Microchip bereitgestellt. Die Originalumgebung ist hier verfügbar:https://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en021631So bearbeiten Sie die Firmware: Extrahieren Sie die gesamte Verzeichnisstruktur der Quelle in Ihr Stammverzeichnis (c:\MCHPFSUSB). Sie können dann die Workspace-Datei in MPLAB laden.*Die Float-to-String-Routine ist ein Ressourcenfresser. Um das Konnektivitätsproblem zu umgehen, wird die USB-Service-Routine an verschiedenen Stellen in der float2string-Routine aufgerufen. Dies lässt sich am besten beheben, indem das USB-Peripheriegerät bei einem Interrupt gewartet wird. Ich habe den Hack verwendet, damit die Firmware so nah wie möglich an der Referenzversion blieb.

Schritt 3: Testen des Geräts

Testen des Geräts
Testen des Geräts
Testen des Geräts
Testen des Geräts
Testen des Geräts
Testen des Geräts

Die Anweisungen gelten für Windows, aber das Gerät kann an alles angeschlossen werden, das über CDC-Emulationstreiber für die serielle Schnittstelle verfügt.

Programmieren Sie das Gerät mit der Firmware. Alle Konfigurationsbits sollten in der Firmware richtig gesetzt sein. Stecken Sie das Gerät in einen USB-Port. Windows erkennt es und fordert Sie auf, einen Treiber auszuwählen. STELLEN SIE SICHER, KLICKEN SIE AUF „BENUTZERDEFINIERTEN TREIBER DURCHSUCHEN“. Navigieren Sie zum Speicherort der.inf-Datei, die im Projektarchiv enthalten ist (driver-win2k_winxp). Windows verwendet diese Datei, um das Gerät zu installieren. *Ein Hinweis zum CDC-Treiber – der CDC-Emulationstreiber für die serielle Schnittstelle ist in Windows enthalten. Die.inf-Datei (von Microchip bereitgestellt) weist Windows einfach an, diese Treiber mit dem Gerät zu verbinden. Um herauszufinden, welcher COM-Port dem Gerät zugewiesen wurde, gehen Sie wie folgt vor: Gehen Sie zur Systemsteuerung (Start->Einstellungen->Systemsteuerung) Doppelklicken Sie auf „System“Klicken Sie auf die Registerkarte „Hardware“. Klicken Sie auf „Gerätemanager“. Klicken Sie auf das „+“neben den Ports. Eine Liste der COM-Ports des Systems wird angezeigt. Ich habe gesehen, dass das Gerät als COM 3 und 4 angezeigt wird, aber es variiert je nach System. Wenn nicht offensichtlich ist, welcher Port neu ist, versuchen Sie Folgendes: Trennen Sie das Gerät vom USB-Port. Einer der Ports wird verschwinden. Dies ist die COM-Port-Nummer des Geräts. Stecken Sie das Gerät wieder ein, der Port wird wieder angezeigt. Die kleine VB-Anwendung (Quelle enthalten) kann verwendet werden, um das Gerät zu testen. Geben Sie den zu sendenden Befehl ein, klicken Sie auf 'Start'. Die Antwort wird im Fenster angezeigt.

Schritt 4: Was kann es noch tun?

Was kann es noch tun?
Was kann es noch tun?

Dieses Demonstrationsboard ist ein guter Ausgangspunkt für eine kleine Heimwetterstation: Fügen Sie einen HIH3160-Feuchtigkeitssensor hinzu oder ersetzen Sie den analogen Temperatursensor durch den hochgenauen seriellen Temperatur- und Feuchtigkeitssensor Sensiron HT74. Fügen Sie einen Freescale MPX(a)4115-Drucksensor hinzu barometrischen Druck messen. Möchten Sie diese Daten mit dem Web synchronisieren? Es in Ihre eigene Website einbinden, in Google Earth anzeigen oder Updates in Ihrem RSS-Reed erhalten? Sehen Sie sich diese Anleitung zur Integration dieses Geräts mit dem syndicIT.com-Web-Backend an:

Empfohlen: