jueves, 4 de agosto de 2022

Medidor de temperatura con LM35 y PIC16F873A simulacion, programacion en MIKROC y CCS + EAGLE.

 Medidor de temperatura con LM35 que lleva un PIC16F873A y un display doble multiplexado.


Este es un circuito muy sencillo realizado con el viejo PIC16F873A el cual usa el ADC para leer el voltaje que produce a su salida el sensor LM35 y un algoritmo lleva este valor a datos adecuados para manejar un display led doble multiplexado.

Los algoritmos de este proyecto pueden ser mejorados y utilizados con otros microcontroladores y enteder como funciona es muy util para implementar en cualquier dispositivo microcontrolador no importa la marca o referencia ya que no usa librerias exclusivas mas alla de lo normal en el lenguaje C que puedes encontrar en cualquier compilador para cualquier micro.

Montaje en baquelita


Asi queda el proyecto una vez montado.

Diseño de la placa para ser planchado.


Codigo fuente en CCS

#include <16F873A.h>

#device adc=10

#FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT, RESERVED

#use delay(clock=4000000)

const int8 displaycc[] = {

0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39, 0X5E,0X79,0X71};

int16 adj(int16 val){

int16 res;

    if((val>=0)&&(val<11)){res=val;}

    if((val>=11) & (val<72)){res=val-1;}

    if((val>=72)&(val<134)){res=val-2;}

    if((val>=134)&(val<174)){res=val-3;}

    if((val>=174)&(val<250)){res=val-4;}

    res=res/2;

    return res;

}

void Out(char *str){

int8 j, dp1, dp2;;

    dp1=displaycc[str[0] & 0x0f];

    dp2=displaycc[str[1] & 0x0f];

     output_low(PIN_C6);

     output_low(PIN_C7);

    for(j=0;j<20;j++){

     output_b(dp1);

     output_high(PIN_C6);

     delay_us(100);

     output_low(PIN_C6);

     delay_us(5);

     output_b(dp2);

     output_high(PIN_C7);

     delay_us(100);

     output_low(PIN_C7);

     delay_us(5);

    }

}


void main()

{

int16  dato;

char str[4];

     setup_adc(Adc_clock_internal);

     setup_adc_ports(RA0_ANALOG);

     set_adc_channel(0);     

     output_b(displaycc[0]);

     output_high(PIN_C0);

     while(1){

     dato=adj(read_adc());

     sprintf(str,"%lu",dato);

     Out(str);

     }

}

Binario de este codigo.
:1000000001308A00632900000A108A100A11820751
:100010003F3406345B344F3466346D347D340734FA
:100020007F346F3477347C3439345E3479347134CE
:10003000AF08031D23282E080A3C031C23282F0881
:10004000B1002E08B000AF08031D2C282E080A3C72
:10005000031C2C2800302D280130B200AF08031DEE
:1000600035282E08473C031837280030382801303F
:1000700032050319442801302E02B0002F08B100C8
:100080000030031C0130B102AF08031D4D282E08BB
:10009000473C031C4D2800304E280130B200AF0809
:1000A000031D56282E08853C03185828003059286F
:1000B000013032050319652802302E02B0002F08E6
:1000C000B1000030031C0130B102AF08031D6E28DF
:1000D0002E08853C031C6E2800306F280130B200CA
:1000E000AF08031D77282E08AD3C0318792800308F
:1000F0007A28013032050319862803302E02B00019
:100100002F08B1000030031C0130B102AF08031DFD
:100110008F282E08AD3C031C8F280030902801301A
:10012000B200AF08031D98282E08F93C03189A283E
:1001300000309B28013032050319A72804302E0215
:10014000B0002F08B1000030031C0130B1020310D1
:10015000B10CB00C3008A1003108A2008A119E2910
:100160000408B3002D0EF038AF00AF07E23EB00038
:10017000323EB2002D080F39B007B007B207E93E92
:10018000B100B107B1072C0E0F39B107B207B10D9D
:10019000B20DB209B20D2C080F39B207AF0D0730FE
:1001A000AE000A30B207B103031CD228B107B00376
:1001B000031CD628B007AF03031CDA28AF07AE0331
:1001C000031CDE282E3084000730330533138407E8
:1001D00032300402031933170008A000031DF82869
:1001E000331BF828331A0A29B319F8282030FB28C2
:1001F000B31533123030A007AD010408AC0020085D
:10020000B4002508840034088000840A8001A50A0F
:100210002C088400840A331FE8288A11AB292C0893
:10022000840000080F390420A100AE0001302C0723
:10023000840000080F390420A100AF002413240813
:100240008316870083120713A413240883168700DC
:1002500083128713AD012D08133C031C61298316FB
:10026000860183122E088600241324088316870033
:10027000831207172130A000A00B3C292413240867
:100280008316870083120713452946290000831629
:10029000860183122F088600A41324088316870082
:1002A000831287172130A000A00B5429A41324081F
:1002B00083168700831287135D295E290000AD0A2B
:1002C0002B298A11AE2903081F398300FF30A400AF
:1002D000A50183161F149F141F159F1107309C0042
:1002E0001F1383121F179F1783169F1783121F1444
:1002F00083161F109F141F159F1500308312A10035
:100300001F08C73921049F00831686013F308312DE
:1003100086002410240883168700831207141F15F3
:100320001F1990291E08A30083161E088312AC0013
:100330001E08AD00AF002C08AE0018282208A70048
:100340002108A6002830A500103084002708AD0041
:100350002608AC00B0282830AC000F298F29630094
:02400E00713F00
:00000001FF
;PIC16F873A
;CRC=5052  CREATED="18-jun-17 22:24"

Codigo en MIKROC

const unsigned short displaycc[] = {

0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39, 0X5E,0X79,0X71};

#include <built_in.h>

unsigned adj(unsigned val){

unsigned res;

    if((val>=0)&&(val<11)){res=val;}

    if((val>=11) && (val<72)){res=val-1;}

    if((val>=72)&&(val<134)){res=val-2;}

    if((val>=134)&&(val<174)){res=val-3;}

    if((val>=174)&&(val<250)){res=val-4;}

    res=res/2;

    return res;

}

void saca(unsigned dato){

unsigned short j, d1,d2;

char txt[8];

    wordtostr(dato,txt);

    d1=txt[4];

    d1=d1 & 0x0f;

    d1=displaycc[d1];


    d2=txt[3];

    d2=d2 & 0x0f;

    d2=displaycc[d2];


    for(j=0;j<80;j++){

    portb=d1;

    portc.b7=1;

    delay_us(150);

    portb=0;

    portc.b7=0;

    delay_us(10);


    portb=d2;

    portc.b6=1;

    delay_us(150);

    portc.b6=0;

    portb=0;

    delay_us(10);

    }


}


void main() {

unsigned tmp,temp;

    trisb=0;

    portb=0xff;

    trisb=0x00;

    portc=0;

    trisc=0b00111111;

    Adc_init();


    while(1){

    tmp=Adc_Read(0);

    temp=adj(tmp);

    saca(temp);

    }

}

Binario de este codigo.
:0200000098293D
:1000060083120313F801F9011030FC00710DF80D8D
:10001600F90D7408F8027508031C750FF902031828
:100026001B287408F80775080318750FF9070310DD
:0A003600F00DF10DFC0B0928080085
:0E0040008312031325088A002408820008009A
:0E004E00073083120313FD00FD0B2B28080062
:10005C0083120313B6010530360203183C28360808
:10006C003507840020308000B60A31283608350761
:10007C0084008001B60336083507B7000A30F40057
:10008C00F5013308F0003408F10003207808F00083
:10009C007908F1003030F0073708840070088000D0
:1000AC000A30F400F5013308F0003408F1000320A5
:1000BC007008B3007108B40000307106031D682885
:1000CC0000307006031D6B286D28B603412808000C
:1000DC000030831203132702031D762800302602FA
:1000EC00031C842800302702031D7E280B302602B7
:1000FC00031884282608F3002708F4000030270290
:10010C00031D8A280B302602031C9C280030270272
:10011C00031D92284830260203189C280130260221
:10012C00F3000030031C013E2702F40000302702CC
:10013C00031DA22848302602031CB42800302702D5
:10014C00031DAA28863026020318B4280230260282
:10015C00F3000030031C013E2702F400003027029C
:10016C00031DBA2886302602031CCC280030270237
:10017C00031DC228AE3026020318CC2803302602F9
:10018C00F3000030031C013E2702F400003027026C
:10019C00031DD228AE302602031CE42800302702AF
:1001AC00031DDA28FA3026020318E428043026024C
:1001BC00F3000030031C013E2702F4007308F0002A
:1001CC007408F100F10CF00CF1137008F3007108D5
:0401DC00F400080023
:1001E00020208A110A128000840AA40A0319A50A91
:0801F000F003031DF0280800D4
:1001F800831203139F01C0309F042009F000700888
:1002080083169F051F179F1783122608F000F00D0D
:100218007010F00D7010F00D701070089F041F140E
:1002280027201F151F1D1A29000016291F101E0838
:10023800F100F00183161E088312F0040030F10467
:020248000800AC
:10024A00831203132608B3002708B4002B30B50025
:10025A002E202F08A9000F302F05F0007008A900E2
:10026A000030F100BA30F00701300318013EF107FF
:10027A007008A4007108A50020208A110A12A9009A
:10028A002E08AA000F302E05F0007008AA000030D0
:10029A00F100BA30F00701300318013EF107700887
:1002AA00A4007108A50020208A110A12AA00A80138
:1002BA00503028020318812929088600871731300F
:1002CA00FD00FD0B6629000000008601871303303C
:1002DA00FD00FD0B6E292A08860007173130FD0044
:1002EA00FD0B752900000000071386010330FD008D
:0A02FA00FD0B7D29A80A5D2908000C
:10030400FF3083120313A100FF30A200FF30A300CB
:10031400FF309F01C0309F042009F000700883164D
:0C0324009F051F179F1783121F1408006D
:10033000CC21831603138601FF30831286008316B7
:100340008601831287013F30831687008221A60130
:10035000FC207008A6007108A7006E207008A60097
:0A0360007108A7002521A729B42980
:1003980020308400013083120313F000CA30A40017
:0803A8000130A500F02008005F
:100374003F3406345B344F3466346D347D34073493
:100384007F346F3477347C3439345E347934713467
:020394000F3424
:02400E00412F40
:00000001FF

Descarga todos los archivos de este trabajo en el siguiente link y deja tu comentario.



CONTADOR DE 0-1000 con PIC16F628A incluye simulacion y codigo fuentes

CONTADOR DE EVENTOS CON MICROCONTROLADOR PIC

Este es un contador de pulsos realizado con el fin de visualizar la cantidad de pulsaciones que se van dando en el tiempo.

Este fue uno de mis primeros trabajos incluye la simulacion en proteus el diseño de un circuito impreso en eagle y el codigo fuente asi como los binarios para grabar en el microcontrolador.





CODIGO FUENTE

El codigo fuente esta realizado en mikroc de 2011 asi que si quieres modificarlo es posible que tengas que hacer algunos cambios.
aca esta el codigo fuente:

#include <built_in.h>
const char display[16]={   
                              0b11000000,
                              0b11111001,
                              0b00100010,
                              0b00110000,
                              0b00011001,
                              0b00010100,
                              0b00000100,
                              0b11110001,
                              0b00000000,
                              0b00010000,
                              0b00000001,
                              0b00001100,
                              0b11000110,
                              0b00101000,
                              0b00000110,
                              0b00000111};
   unsigned adl=50, ads;
//*****************************************************************************
void saca(char *dtxt){
unsigned short j;
   for(j=0;j<50;j++){
   portb=0xff;
   porta.b0=0;
   porta.b1=0;
   porta.b2=0;
   porta.b3=1;
   portb=display[dtxt[1]&0x0f];
   delay_us(100);


   portb=0xff;
   porta.b0=0;
   porta.b1=0;
   porta.b2=1;
   porta.b3=0;
   portb=display[dtxt[2]&0x0f];
   delay_us(100);

   portb=0xff;
   porta.b0=0;
   porta.b1=1;
   porta.b2=0;
   porta.b3=0;
   portb=display[dtxt[3]&0x0f];
   delay_us(100);

   portb=0xff;
   porta.b0=1;
   porta.b1=0;
   porta.b2=0;
   porta.b3=0;
   portb=display[dtxt[4]&0x0f];
   delay_us(100);
   }

}
//***********************************************************
   void main(){
unsigned tmr1=0;
char txt[6];
unsigned short j;

   CMCON=7;
   portb=0xff;
   porta=0;
   trisb=0b01000000;
   trisa=0b11110000;
   wordtostr(tmr1,txt);
while(1){
    while(portb.b6==1){for(j=0;j<4;j++){saca(txt);}}
    tmr1++; wordtostr(tmr1,txt);
    while(portb.b6==0){for(j=0;j<4;j++){saca(txt);}}
     }



       }


Codigos HEX* Binario para grabar o simular

:02000000FC28DA

:1000060083120313F801F9011030FC00710DF80D8D

:10001600F90D7408F8027508031C750FF902031828

:100026001B287408F80775080318750FF9070310DD

:0A003600F00DF10DFC0B0928080085

:0E0040008312031321088A00200882000800A2

:10004E0083120313F201323072020318AF28FF300D

:10005E00860005108510051185152B0A84000F30BA

:10006E000005F0000030F1003830F00701300318C1

:10007E00013EF1077008A0007108A10020208A112E

:10008E000A1286002130FD00FD0B4B28FF30860042

:10009E00051085100515851102302B0784000F30D1

:1000AE000005F0000030F1003830F0070130031881

:1000BE00013EF1077008A0007108A10020208A11EE

:1000CE000A1286002130FD00FD0B6B28FF308600E2

:1000DE00051085140511851103302B0784000F3090

:1000EE000005F0000030F1003830F0070130031841

:1000FE00013EF1077008A0007108A10020208A11AE

:10010E000A1286002130FD00FD0B8B28FF30860081

:10011E00051485100511851104302B0784000F304E

:10012E000005F0000030F1003830F0070130031800

:10013E00013EF1077008A0007108A10020208A116D

:10014E000A1286002130FD00FD0BAB28F20A2A2888

:02015E00080097

:1001600020208A110A128000840AA00A0319A10A19

:08017000F003031DB028080094

:1001780083120313AE0105302E020318CA282E0875

:100188002D07840020308000AE0ABF282E082D07D6

:1001980084008001AE032E082D07AF000A30F4005A

:1001A800F5012B08F0002C08F10003207808F00076

:1001B8007908F1003030F0072F08840070088000BB

:1001C8000A30F400F5012B08F0002C08F100032098

:1001D8007008AB007108AC0000307106031DF628EA

:1001E80000307006031DF928FB28AE03CF2808004D

:1001F80083120313A901AA0107309F00FF3086006C

:100208008501403083168600F03085008312290866

:10021800AB002A08AC002230AD00BC20061F1F2905

:10022800A8010430280203181E292230AB00272019

:10023800A80A15291229A90A0319AA0A2908AB002C

:100248002A08AC002230AD00BC20061B3629A801C4

:1002580004302802031835292230AB002720A80AC9

:080268002C292929122937294C

:10027000C034F93422343034193414340434F134B1

:100280000034103401340C34C634283406340734B6

:02400E00500060

:00000001FF

Archivos fuente para descargar desde MEGA

https://mega.nz/file/ZRQDzYLQ#G_kjxdHbnxJjN2WoVPylXLoyPola7mZH91vuQqmrSbA