Inhoudsopgave:

PIC16F877 Multimeter - Ajarnpa
PIC16F877 Multimeter - Ajarnpa

Video: PIC16F877 Multimeter - Ajarnpa

Video: PIC16F877 Multimeter - Ajarnpa
Video: MULTIMETRO CON PIC16F877A 2024, November
Anonim
PIC16F877 Multimeter
PIC16F877 Multimeter

PICMETER Inleiding

Dit PICMETER-project is uitgegroeid tot een nuttig en betrouwbaar hulpmiddel voor elke elektronicaliefhebber.

  • Het draait op een PIC16F877 / 877A microcontroller.
  • Het is een PIC-ontwikkelsysteem
  • Het is een multimeter met 19 functies (voltmeter, frequentiemeter, signaalgenerator, thermometer…)
  • Het is een component checker (R, L, C, diode …) met tot 5 bereiken voor elke functie.
  • Het heeft een 433MHz-band ASK-radio, die op een of andere toepassing wacht.
  • Het is een systeem voor acquisitie op afstand, waarbij een andere computer (pc) gegevens kan verzamelen via de seriële poort voor grafische weergave. (Het is gebruikt als de voorkant van het ECG-project).
  • Het heeft een logfunctie (voor datalogging over uren), resultaten worden geüpload vanuit EEPROM.
  • Het produceert testsignalen om sommige motoren aan te drijven.
  • Het is grondig getest, zie foto's in stap 5.
  • De software wordt vrijgegeven als Open Source

Dit Instructable is een verkleinde versie van de volledige documentatie. Het beschrijft de hardware en software die voldoende is voor anderen om het te bouwen als een voltooid project, of om het te gebruiken als een ontwikkelsysteem om verdere wijzigingen aan te brengen, of om gewoon te bladeren naar ideeën voor gebruik bij andere projecten.

Benodigdheden

De enige kritische chip om te kopen is de Microchip PIC16F877A-I/P

  • A = de latere revisie die verschilt van het origineel in de definitie van configuratiebits.
  • I = Industrieel temperatuurbereik
  • P= 40-lead plastic dubbel in-line pakket, 10 MHz, normale VDD-limieten.

Ook de Hitachi LM032LN 20 karakters door 2-regelig LCD met ingebouwde HD44780-controller.

De andere onderdelen zijn slechts generieke elektrische componenten, printplaat-PCB's, LM340, LM311, LM431, laagvermogentransistoren voor algemeen gebruik enz.

Stap 1: PICBIOS-beschrijving

PICBIOS-beschrijving
PICBIOS-beschrijving

PICBIOS-beschrijving

Deze software draait op een PIC16F877-bord en neemt de onderste 4k aan programmageheugen in beslag. Het biedt de softwareomgeving voor een toepassingsprogramma dat de bovenste helft van het programmageheugen in beslag neemt. Het is qua idee vergelijkbaar met de PC-BIOS met een paar "debug"-achtige commando's voor programma-ontwikkeling en heeft 5 componenten:

  1. Opstart menu
  2. Installatieprogramma
  3. Opdrachtregelinterface (via seriële poort)
  4. Kernel- en apparaatstuurprogramma's
  5. Applicatie programmeerinterface

Stap 2: PICMETER Beschrijving

PICMETER Beschrijving
PICMETER Beschrijving

PICMETER Beschrijving:

Invoering

Net als een multimeter (volt, amp, ohm) heeft deze veel functies die worden geselecteerd door middel van een menusysteem. Maar omdat het een combinatie is van hardware en software, is het zeer veelzijdig, bijvoorbeeld functies zoals loggen over lange perioden en het verzenden van seriële gegevens zijn beschikbaar.

Het menu is het “hart” waar functies worden geselecteerd door middel van [links] en [rechts] knoppen. Vervolgens worden voor elke functie verschillende bereiken geselecteerd met de knoppen [inc] en [dec]. Condensatoren worden bijvoorbeeld gemeten van ongeveer 0,1 nF tot 9000 uF door middel van 5 afzonderlijke bereiken.

2.1 PICMETER-software

Dit is georganiseerd als een applicatieprogramma dat de bovenste 4k van het programmageheugen in beslag neemt en vertrouwt op functies van de PICBIOS voor apparaat-I/O en interruptafhandeling. Het bestaat uit het menugedeelte dat als achtergrondtaak wordt uitgevoerd en de knoppen elke 20 ms controleert. Wanneer een knop wordt ingedrukt om de functie of het bereik te wijzigen, wordt de juiste routine opgeroepen. Als er geen knoppen worden ingedrukt, wordt de gemeten waarde bijgewerkt met intervallen van ongeveer 0,5 sec. In principe is menu een opzoektabel.

2.2 Meterfunctie - secties

Er zijn veel functies, dus dit deel is opgesplitst in secties, die elk betrekking hebben op soortgelijke functies. Dit is een korte lijst van de secties, zie de volledige documentatie om te zien hoe elke sectie in detail werkt. Vanwege poortbeperkingen zijn er 3 variaties van het project (zie volledige documentatie). Functies in normaal lettertype zijn gemeenschappelijk voor alle projecten. Functies ONDERSTREEPT zijn alleen opgenomen in het PICMETER1-project. Functies in ITALICS zijn alleen opgenomen in PICMETER2- of PICMETER3-projecten.

VoltMeter Sectie - Bronbestand is vmeter.asm

Met functies die zijn gebaseerd op spanningsmeting met behulp van de ADC.

  • ADC-spanning (lees spanning op geselecteerde ingang, AN0 tot AN4)
  • AD2 Dual (geeft tegelijkertijd spanning weer op AN0 en AN1)
  • TMP-thermometer -10 tot 80? degC (2N3904 of dubbele LM334-transducer)
  • LOG – stelt logboekinterval in
  • OHM – Weerstandsmeting (potentiometermethode) van 0Ω tot 39MΩ in 4 bereiken
  • DIO – Diode, meet voorwaartse spanning (0-2,5V)
  • CON – Continuïteit (piept wanneer de weerstand lager is dan de drempel van 25, 50 of 100)

Component Meter1 - Bronbestand is meter1.asm

Meting van condensator, inductor en weerstand met behulp van LM311-comparatorcircuit. Gebaseerd op het meten van de tijd van één laadcyclus.

  • CAL – kalibratie – meet vaste 80nf en 10μF voor zelftest & afstelling
  • Cx1 – condensatormeting van 0,1 nF tot 9000 F in 5 bereiken
  • Lx1 – inductormeting van 1mH tot ?? mH in 2 bereiken
  • Rx1 - weerstandsmeting van 100Ω tot 99MΩ in 3 bereik

Component Meter2 Bronbestand Meter2.asm

Componentmeting met behulp van alternatieve LM311-relaxatie-oscillator en Colpitts-oscillator. Gebaseerd op het meten van de tijdsperiode van N cycli. Dit is iets nauwkeuriger dan de bovenstaande methode, aangezien de tijd van N= tot 1000 cycli wordt gemeten. Het is meer een hardware-oplossing en vereist meer constructie.

  • Cx2 – condensatormeting van 10pF tot 1000 μF in 5 bereiken.
  • Rx2 – weerstandsmeting van 100 ohm tot 99M in 5 bereiken.
  • Lx2 - inductormeting van 1mH tot 60mH in 1 bereik.
  • osc - inductormeting (Colpitts-methode) van 70μH tot 5000μH ? in 2 reeksen.

Frequentiemeter - bronbestand Fmeter.asm

Met functies die PIC-tellers en timers gebruiken, en weinig anders;

  • FREQ - Frequentiemeter van 0Hz tot 1000kHz in 3 bereiken
  • XTL - meet frequentie van LP-kristallen (niet getest)
  • SIG – signaalgenerator van 10Hz tot 5KHz in 10 stappen
  • SMR - stappenmotor - omgekeerde richting
  • SMF - stappenmotor - voorwaartse richting.

Communicatie - Bronbestand is comms.asm

Functies voor het verzenden/ontvangen van signalen om seriële en SPI-randapparatuur te testen;

  • UTX test seriële TX & inc en dec bitrate van 0,6 tot 9,6k
  • URX test seriële RX & inc en dec bitrate van 0,6 tot 9,6k
  • SPM - test SPI in mastermodus
  • SPS - test SPI in slave-modus

FSK Radio Module - Bronbestand is Radio.asm

Functies met behulp van RM01 en RM02 radio-ontvang- en zendmodules. Deze modules communiceren via SPI, die de meeste poort C-pinnen gebruikt.

  • RMB - BAUD-snelheid van de radiomodule instellen
  • RMF – radiomodule RF-frequentie instellen
  • RMC - stelt de klokfrequentie van de radiomodule in
  • XLC - past de belasting van de kristalcapaciteit aan
  • POW - stelt zendervermogen in
  • RM2 - verzend testgegevens (RM02-module)
  • RM1 – ontvang testgegevens (RM01-module)

Besturingsmodule - Bronbestand control.asm

  • SV1 - Servo-uitgang (met behulp van CCP1) van 1 ms tot 2 ms in stappen van 0,1 ms
  • SV2 - Servo-uitgang (met CCP2) van 1 ms tot 2 ms in stappen van 0,1 ms
  • PW1 - PWM-uitgang (met behulp van CCP1) van 0 tot 100% in stappen van 10%
  • PW2 - PWM-uitgang (met CCP2) van 0 tot 100% in stappen van 10%

Externe gegevensverzameling - Bronbestand is remote.asm

Externe modus (Rem) - een reeks commando's zodat de meter kan worden bediend vanaf een computer via een seriële interface. Eén opdracht verzamelt gegevens die zijn vastgelegd in EEPROM gedurende een periode van uren. Een ander commando leest de spanningen op volle snelheid van de ADC in de geheugenbuffer en verzendt de buffer vervolgens naar de pc, waar de resultaten grafisch kunnen worden weergegeven. In feite is dit een oscilloscoop die over het audiofrequentiebereik werkt

Tijd - Bronbestand is time.asm

Tim – geeft alleen de tijd weer in uu:mm:ss-formaat en staat verandering toe met 4 knoppen

Stap 3: Circuitbeschrijving

Circuitbeschrijving
Circuitbeschrijving
Circuitbeschrijving
Circuitbeschrijving

Circuitbeschrijving:

3.1 Basisontwikkelingsbord

Afbeelding 1 toont een basisontwikkelbord om PICBIOS te laten werken. Het is zeer standaard en ongecompliceerd, 5V gereguleerde stroombron en ontkoppelcondensatoren, C1, C2 ….

De klok is 4 MHz kristal, dus TMR1 tikt in intervallen van 1us. De 22pF condensatoren C6, C7 worden aanbevolen door Microchip, maar lijken niet echt nodig te zijn. De ICSP-header (in-circuit-serial-programmering) wordt gebruikt om in eerste instantie een lege PIC te programmeren met de PICBIOS.

De seriële poort (COM1) – let op TX en RX zijn verwisseld, d.w.z. COM1-TX is aangesloten op poort C-RX en COM1-RX is aangesloten op poort C-TX (gewoonlijk een "nulmodem" genoemd). Ook de signaalniveaus die nodig zijn voor RS232 zouden eigenlijk +12V (spatie) en -12V (mark) moeten zijn. Spanningsniveaus van 5V (spatie) en 0V (mark) lijken echter voldoende voor alle pc's die ik heb gebruikt. De signaalniveaus van RX en TX worden dus gewoon omgekeerd door de lijndriver (Q3) en de lijnontvanger (Q2).

De LM032LN (2-rij 20 tekens) LCD gebruikt de standaard “HD44780 interface”. De software gebruikt de 4-bits nibble-modus en alleen schrijven, waarbij 6 pinnen van poort D worden gebruikt. De software kan worden geconfigureerd voor nibble low (Port D bits 0-3) of nibble high (Port D bits 4-7) zoals hier gebruikt.

De drukknopschakelaars bieden vier ingangen voor menuselectie. Gebruik push om schakelaars te maken terwijl software de dalende flank detecteert. De pull-up weerstanden (=25k) zijn intern in PORT B. Poort RB6 kan niet worden gebruikt voor switches, vanwege de 1nF-cap (die wordt aanbevolen voor ICSP). Geen resetschakelaar nodig?

knop0

menu-opties links [◄]

knop1

menu opties rechts [►]

knop2

bereik/waarde verhogen/selecteren [▲]

knop3

bereik/waarde verlagen/selecteren [▼]

3.2 Analoge ingangen en componentencontrole – kaart 1

Afbeelding 2 toont de analoge schakeling voor PICMETER1. Analoge ingangen AN0 en AN1 worden gebruikt voor algemene spanningsmetingen. Selecteer weerstandswaarden voor verzwakkers om 5V te geven op ingangspinnen AN0/AN1.

Voor 10V ingangsbereik, m = 1 + R1/R2 = 1 + 10k/10k = 2

Voor 20V ingangsbereik, m = 1 + (R3+R22)/R4 = 1 + 30k/10k = 4

AN2 wordt gebruikt voor temperatuurmeting met behulp van transistor Q1 als een "ruwe" temperatuurtransducer. Temperatuurcoëfficiënt van NPN-transistor bij 20 celcuis = -Vbe/ (273+20) = - 0,626/293 = -2,1 mV/K. (zie temperatuurmeting in analoog gedeelte). De LM431 (U1) biedt een spanningsreferentie van 2,5 V op AN3. Ten slotte wordt AN4 gebruikt voor het testen van componenten in de analoge sectie.

Voor componentmeting wordt de testcomponent aangesloten via RE2 (D_OUT) en AN4 Input. Weerstanden R14 tot R18 bieden vijf verschillende weerstandswaarden die worden gebruikt voor weerstandsmeting (potentiometermethode) in de analoge sectie. De weerstanden zijn "verbonden in circuit" door Port C/Port E-pinnen in te stellen als Input of Output.

Meter1 voert componentmetingen uit door verschillende combinaties van bekende/onbekende condensator en weerstand op te laden. LM311 (U2) wordt gebruikt om CCP1-onderbrekingen te creëren wanneer een condensator oplaadt tot de bovenste drempel (75% VDD) en ontlaadt tot een lagere drempel (25% VDD). Deze drempelspanningen worden ingesteld door R8, R9, R11 en potentiometer R10, wat een lichte aanpassing. Bij het testen van condensatoren leveren condensator C13 (=47pF) plus de parasitaire capaciteit van het bord een trim van 100pF. Dit zorgt ervoor dat, wanneer de testcomponent wordt verwijderd, het interval tussen CCP1-interrupts groter is dan 100us, en de PIC niet overbelast. Deze trimwaarde (100pF) wordt softwarematig afgetrokken van de componentmeting. D3 (1N4148) biedt het ontladingspad bij het testen van inductoren en beschermt D_OUT, waardoor wordt voorkomen dat de spanning negatief wordt.

λΩπμ

Stap 4: Bouwgids

Bouwgids
Bouwgids
Bouwgids
Bouwgids

Bouwgids

Een goede zaak is dat dit project in fasen wordt gebouwd en getest. Plan uw project. Voor deze instructies neem ik aan dat je PICMETER1 bouwt, hoewel de procedure vergelijkbaar is voor PICMETER2 en 3.

4.1 PCB van de ontwikkelingskaart

U moet het basisontwikkelbord (Afbeelding 1) bouwen dat op een printplaat met standaardafmetingen van 100 bij 160 mm moet passen. Plan de lay-out om deze zo netjes mogelijk te houden. Reinig je printplaat en vertin al het koper, gebruik betrouwbare componenten en connectoren, getest waar mogelijk. Gebruik een 40-pins aansluiting voor de PIC. Continuïteit controleer alle soldeerverbindingen. Het kan nuttig zijn om naar de foto's van mijn bordlay-out hierboven te kijken.

U hebt nu een lege PIC en u moet PICBIOS in het flashgeheugen programmeren. Als je al een programmeermethode hebt, prima. Zo niet, dan raad ik de volgende methode aan die ik met succes heb gebruikt.

4.2 AN589 Programmeur:

Dit is een klein interfacecircuit waarmee een PIC kan worden geprogrammeerd vanaf een pc met behulp van de printerpoort (LPT1). Het ontwerp is oorspronkelijk gepubliceerd door Microchip in een Application Note. (referentie 3). Koop of maak een AN589-compatibele programmer. Ik heb een verbeterd AN589-ontwerp gebruikt dat hier wordt beschreven. Dit is ICSP - wat betekent dat je de PIC in de 40-pins socket steekt om hem te programmeren. Sluit vervolgens de printerkabel aan op de AN539-ingang en de ICSP-kabel van de AN589 op het ontwikkelbord. Het ontwerp van mijn programmeur haalt zijn stroom uit het ontwikkelbord via de ICSP-kabel.

4.3 PICPGM-instellingen

Je hebt nu wat programmeersoftware nodig om op de pc te draaien. PICPGM werkt met verschillende programmeurs, waaronder AN589, en het is gratis te downloaden. (Zie referenties).

Selecteer in het hardwaremenu Programmer AN589, op LPT1

Apparaat = PIC16F877 of 877A of autodetect.

Selecteer Hex-bestand: PICBIOS1. HEX

Selecteer PIC wissen, vervolgens PIC programmeren en vervolgens PIC verifiëren. Met een beetje geluk krijg je een succesvol voltooiingsbericht.

ICSP-kabel verwijderen, Start de PIC opnieuw op, hopelijk ziet u de PICBIOS-weergave op het LCD-scherm, controleer anders uw verbindingen. Controleer het opstartmenu door op de linker- en rechterknop te drukken.

4.4 Seriële aansluiting (Hyperterminal of Putty)

Controleer nu de seriële verbinding tussen PIC en pc. Sluit de seriële kabel van PC COM1 aan op het ontwikkelbord en voer een communicatieprogramma uit, zoals de oude Win-XP Hyper-Terminal of PUTTY.

Als u Hyperterminal gebruikt, configureert u als volgt. Vanuit het hoofdmenu, Bellen > Verbinding verbreken. Dan Bestand> Eigenschappen> Verbinding maken met tabblad. Selecteer Com1 en klik vervolgens op de knop Configureren. Selecteer 9600 bps, geen pariteit, 8 bits, 1 stop. Hardwarematige stroomregeling". Dan Bellen > Bellen om verbinding te maken.

Bij gebruik van PuTTY, Verbinding> Serieel> Verbinden met COM1 en 9600 bps, geen pariteit, 8 bits, 1 stop. Selecteer "RTS/CTS". Dan Sessie> Serieel> Openen

Selecteer in het opstartmenu van PICBIOS "Command Mode" en druk vervolgens op [inc] of [dec]. Het promptbericht "PIC16F877>" zou op het scherm moeten verschijnen (zo niet, controleer dan uw seriële interface). Druk op ? om een lijst met opdrachten te zien.

4.5 Programma PICMETER

Zodra de seriële verbinding werkt, is het programmeren van flashgeheugen net zo eenvoudig als het verzenden van een hex-bestand. Voer de opdracht "P" in, die reageert met "Send hex-bestand …".

Met behulp van hyper-terminal, vanuit het menu Overdragen > Tekstbestand verzenden > PICMETER1. HEX >Openen.

De voortgang wordt aangegeven met de “:.” aangezien elke regel hex-code is geprogrammeerd. Eindelijk succes laden.

Als u PuTTY gebruikt, moet u wellicht Kladblok gebruiken en de volledige inhoud van PICMETER1. HEX kopiëren/plakken in PuTTY.

Voer op dezelfde manier de opdracht "V" in om te verifiëren. In hyperterminal, vanuit het menu Overdracht > Tekstbestand verzenden > PICMETER1. HEX > OK.

Waarschuwing = xx…Als u een 16F877A-chip programmeert, krijgt u enkele waarschuwingsberichten. Dit heeft te maken met verschillen tussen 877 en 877A, die programmeert in 4 woordblokken. Helaas lijnt de linker het begin van secties niet uit op 4 woordgrenzen. De eenvoudige oplossing is om 3 NOP-instructies aan het begin van elke sectie te hebben, dus negeer de waarschuwingen gewoon.

Start opnieuw op en selecteer in het BIOS-opstartmenu "Toepassing uitvoeren". U zou PICMETER1 op het LCD-scherm moeten zien.

4.6 PICMETER1. uitvoeren

Begin nu met het bouwen van meer secties van het ontwikkelbord (Figuur 2) om de Voltmeter, Component Meter-functies naar wens te laten werken.

Meter1 heeft wat kalibratie nodig. Pas in de functie "Cal" R10 aan om waarden van ongeveer 80,00, 80,0nF en 10.000uF te geven. Lees dan een kleine 100pF op Cx1 functie. Als de uitlezing niet klopt, verander dan ofwel de trimkap C13 of verander de waarde van "trimc" in meter1.asm.

Voer nu PICBIOS Setup uit en wijzig een paar kalibratie-instellingen in EEPROM. Kalibreer de temperatuur door de 16-bits offset aan te passen (hoog, laag formaat). Mogelijk moet u ook de "delayt" -waarde wijzigen.

Als het je bedoeling is om het project te bouwen zoals het is – Gefeliciteerd – dan ben je klaar! Vertel me over uw succes op Instructables.

4.7 MPLAB

Maar als u wijzigingen wilt aanbrengen of het project verder wilt ontwikkelen, moet u de software opnieuw bouwen met MPLAB. Download MPLAB van Microchip. Dit is de "oude" die eenvoudig en duidelijk te gebruiken is. Ik heb de nieuwe labx-ontwikkelingstool niet geprobeerd, die er veel gecompliceerder uitziet.

Details over het maken van een nieuw project en het toevoegen van bestanden aan het project in Volledige documentatie.

Stap 5: Foto's van testen

Foto's van testen
Foto's van testen
Foto's van testen
Foto's van testen
Foto's van testen
Foto's van testen

Foto hierboven van thermometer, aflezing 15 degC

Testfrequentie, aflezing = 416k

Testinductor gemarkeerd met 440uF, leest 435u

100k weerstand testen, leest 101k, dat is een makkelijke.

Testen van 1000pF condensator, aflezing is 1.021nF

Stap 6: Referenties en links

6.1 PIC16F87XA Gegevensblad, Microchip Inc.

ww1.microchip.com/downloads/en/devicedoc/39582b.pdf

6.2 PIC16F87XA FLASH-geheugenprogrammeringsspecificatie, microchip

ww1.microchip.com/downloads/en/devicedoc/39589b.pdf

6.3 Toepassingsnota AN589, Microchip Inc.

ww1.microchip.com/downloads/en/appnotes/00589a.pdf

6.4 PICPGM-download

picpgm.picprojects.net/

6.5 MPLab IDE v8.92 gratis download, Microchip

pic-microcontroller.com/mplab-ide-v8-92-free-download/

6.6 Gegevensbladen voor Hope RFM01-433 en RFM02-433 modules, RF-oplossingen

www.rfsolutions.co.uk/radio-modules-c10/hope-rf-c238

6.7 LT Spice, analoge apparaten

www.analog.com/en/design-center/design-tools-and-calculators/ltspice-simulator.html

6.8 A pic programmer circuit gebaseerd op AN589, Best-Microcontroller-Projects

www.best-microcontroller-projects.com/pic-programmer-circuit.html

6.9 Open source-bestanden

open source

Aanbevolen: