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.



No hay comentarios:

Publicar un comentario