Programas hechos en MPLAB

hola FRYCK gracias por la ayuda pero ya lo solucione... lo que me pasaba era que estaba utilizando un punteros en vez de cadenas de caracteres.
Saludos.

y tambien gracias george.manson.69... ahora tengo otro problemita... ustedes saben como puedo utlizar dos o más interrupciones RDA al mismo tiempo...??? tienen algún ejemplo, es que noc cuando activar uno y cuando activar otro...
 
Última edición:
Para lo que querés tenés que tener un micro con 2 usart......o en su defecto usar usart por software y interrupcion por el pin RB0.
 
Moyano Jonatha el micro que tengo es si tiene dos Usart... es el pic 18f8720... ya tengo las dos interrupciones hechas pero no funca... noc como es que tengo q poner para activar una y desactivar otra... en que momento... noc... podrian explicarme esto por favor...
 
los PIC18Fxx manejan vectores de interrupciones que se dividen en 2 : Alta y baja prioridad ahora lo que no se es como manejar las prioridades en CCS..para eso tendrías que leer el manual de usuario de CCS. Ahora lo mejor sería que pusieras el código del programa que estás haciendo para ver que puede estar saliendo mal ...Y otra cosa no probés nada en el proteus por que generalmente hay problemas que vos vés en la simulación pero que en realidad no existen...por eso arma todo en proto y probalo fisicamente.
El error que estás teniendo me parece es que cuando se está cumpliendo la interrupción por ejemplo de la usart 1 el micro deja todas las tareas a un lado a no ser que una interrupción de más prioridad aparezca....el tema es que hay que saber manejar dichas prioridades para que no ocurran problemas de colisiones de datos...

Por eso es mejor que nos digas que proyecto tenés el código fuente, el circuito todo para poder ayudarte por que sino es medio dificil que te podamos ayudar.
 
noc y el otro problema que tengo es que cuando lo programo en el pic y saco el cable de programacion el programa funciona perfecto pero cuando apago el pic y lo vuelvo a prender no funca... no entiendo porq???
si alguien me ayuda se lo agradeceria mucho...

aqui les envio el codigo...
este es el .c
#include "D:\BIOMETRICO\main.h"
#include "D:\BIOMETRICO\24512_B.c"
#include "D:\BIOMETRICO\KEY_B.c"
#include "D:\BIOMETRICO\LCD_B.c"
#include "D:\BIOMETRICO\DS1302_B.c"

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdlibm.h>
#include "input.c"

/*#use fast_io (C)
#use fast_io (A)
#use fast_io (G)*/

#priority RDA,RDA2

char buffer[822];
char cadena[819];
char buffer2[7];
char c,d;
unsigned long cont=0;
int8 cont_GPRS=0;
char cadena2[7];
int1 flg_mensaje=0,flg_GPRS=0;
char Codigo[5]=" ";
int1 flg_mensaje2=0;
char *digito;

char hora[2];
char minuto[2];
char dia[2];
char mes[2];
char a_o[2];
char a_o1[2];
char opcion;
int1 Flag=0; // Flag que cambia cada NInts interrupciones

unsigned long i,j,length;
int8 m,len;

int iresult=1;
int iresult1=1;

int x;

char HS[5] = {"2101"};
char HM[5] = {"2102"};
char HE[5] = {"2103"};
char HR[5] = {"2199"};

byte day,mth,year,dow,hour,min,sec;



#int_RDA
void RDA_isr(void)
{
disable_interrupts(INT_RDA2);
c=0;
c=getc();
buffer[cont++]=c;
if(c==0xf2){
cont=0x00;
flg_mensaje=1;
clear_interrupt(INT_RDA);
clear_interrupt(INT_RDA2);
enable_interrupts(INT_RDA2);
}
}

#int_RDA2
void RDA2_isr(void)
{
disable_interrupts(INT_RDA);
d=0;
d=fgetc(GPRS);
buffer2[cont_GPRS++]=d;
if(d=='C'){
cont_GPRS=0x00;
flg_GPRS=1;
clear_interrupt(INT_RDA2);
clear_interrupt(INT_RDA);
enable_interrupts(INT_RDA);
}
}


void main()
{
disable_interrupts(Global);
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_timer_4(T4_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
disable_interrupts(INT_RDA);
disable_interrupts(INT_RDA2);
disable_interrupts(GLOBAL);

set_tris_b(0x00);
set_tris_d(0x00);
set_tris_e(0x00);
set_tris_a(0b00100000);
set_tris_c(0b10000000);
set_tris_g(0b00000100);

lcd_init();
rtc_init();
teclado_init();
dow=1;
digito=malloc(819);

while (TRUE) {

Menu:

lcd_putc('\f');
printf(lcd_putc," IDENTIFIQUESE: ");
rtc_get_date( day, mth, year, dow);
rtc_get_time( hour, min, sec );
lcd_putc('\n');
printf(lcd_putc,"%02u:%02u %02u-%02u-20%02u",hour,min,day,mth,year);

InitBuffer();
output_high(pin_d0);
output_high(pin_d1);
output_high(pin_d2);
output_low(pin_d3);


printf("ñ021DD7ò");

//enable_interrupts(GLOBAL);
//enable_interrupts(INT_RDA);
//enable_interrupts(INT_RDA2);

delay_ms(2000);

do{
if(flg_mensaje){
disable_interrupts(INT_RDA);
length=strlen(buffer);
if(length==822){
Alarma();
digito=InitBuffer1(819,digito);
j=0;
for(i=11;i<(819);i++){
digito[j]=buffer;
j++;
}

fprintf(GPRS,"%S-20%02u%02u%02u %02u:%02u:%02u\r\n",digito,year,mth,day,hour,min,sec);
fprintf(PC,"%S-20%02u%02u%02u %02u:%02u:%02u\r\n",digito,year,mth,day,hour,min,sec);
lcd_putc('\f');
lcd_putc(" HUELLA ENVIADA ");
lcd_putc('\n');
printf(lcd_putc,"%02u:%02u %02u-%02u-20%02u",hour,min,day,mth,year);
delay_ms(500);

do{
if(flg_GPRS){
disable_interrupts(INT_RDA2);
len=strlen(buffer2);
InitBufferRX2();
for(m=0;m<len;m++){
cadena2[m]=buffer2[m];
}

lcd_putc('\f');
lcd_putc(" PROCESANDO ");
lcd_putc('\n');
lcd_putc(" DATO ");
delay_ms(800);

iresult = strncmp (cadena2,HS,4);
iresult1 = strncmp (cadena2,HM,4);

if (iresult==0 || iresult1==0 ){
lcd_putc('\f');
lcd_putc(" CODIGO: ");
lcd_putc('\n');
delay_ms(300);
for(m=0;m<len;m++){
if (cadena2[m]=='-'){
for(x=0;x<4;x++){
codigo[x]=cadena2[m];
if (x==0)
printf(lcd_putc," %c ",codigo[x]);
if (x==1)
printf(lcd_putc," %c ",codigo[x]);
if (x==2)
printf(lcd_putc," %c ",codigo[x]);
if (x==3)
printf(lcd_putc," %c ",codigo[x]);
delay_ms(300);
m++;
}
}
}
/*lcd_putc('\f');
lcd_putc(" CODIGO: ");
lcd_putc('\n');
printf(lcd_putc," %S ",codigo);*/
delay_ms(1000);
Alarma();
iresult=1;
iresult1=1;
}else{
iresult = strncmp (cadena2,HE,4);
iresult1 = strncmp (cadena2,HR,4);

if(iresult==0 || iresult1==0){
output_bit (pin_B5, 1);
delay_ms(1500);
lcd_putc('\f');
lcd_putc(" IDENTIFIQUESE: ");
lcd_putc('\n');
lcd_putc(" NUEVAMENTE ");
delay_ms(1000);
}
}
flg_mensaje2=1;
flg_GPRS=0;
enable_interrupts(INT_RDA2);
}else{
flg_mensaje2=0;
}
}while(flg_mensaje2!=1);
}
flag=1;
flg_mensaje=0;
enable_interrupts(INT_RDA);
}else{
flag=0;
}
}while(flag!=1);
flag=0;

este es el .h
#include <18F8720.h>
#device adc=8

#FUSES NOWDT //No Watch Dog Timer
//#FUSES WDT1 //Watch Dog Timer uses 1:128 Postscale
#FUSES HS //High speed Osc (> 4mhz)
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOOSCSEN //Oscillator switching is disabled, main oscillator is source
#FUSES NOBROWNOUT //Reset when brownout detected
#FUSES BORV25 //Brownout reset at 2.5V
#FUSES PUT //Power Up Timer
#FUSES NOCPD //No EE protection
#FUSES NOSTVREN //Stack full/underflow will cause reset
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOWRT //Program memory not write protected
#FUSES NOWRTD //Data EEPROM not write protected
#FUSES NOWAIT //Wait selections unavailable for Table Reads or Table Writes
#FUSES MCU //Microcontroller Mode
#FUSES NOWRTC //configuration not registers write protected
#FUSES NOWRTB //Boot block not write protected
#FUSES NOEBTR //Memory not protected from table reads
#FUSES NOEBTRB //Boot block not protected from table reads
#FUSES NOCPB //No Boot Block code protection

/*#byte PORTA=0XF80
#byte PORTB=0XF81
#byte PORTC=0XF82
#byte PORTD=0XF83
#byte PORTE=0XF84
#byte PORTF=0XF85
#byte PORTG=0XF86
#byte PORTH=0XF87
#byte PORTJ=0XF88*/

#byte RESET = 0X00

#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,restart_wdt)
//#use rs232(baud=9600,parity=N,xmit=PIN_A2,rcv=PIN_A3,bits=8,restart_wdt,stream=GPS)
#use rs232(baud=9600,parity=N,xmit=PIN_G1,rcv=PIN_G2,bits=8,restart_wdt,stream=GPRS)
#use rs232(baud=9600,parity=N,xmit=PIN_A4,rcv=PIN_A5,bits=8,restart_wdt,stream=PC)


void InitBuffer(void);
byte convertir_decimal(char num);
byte convertir_byte(char num1,char num2);
char *InitBuffer1(int16 length, char *array);
void InitBuffer2(void);
void Alarma(void);
void InitBufferRX(void);
void InitBufferRX2(void);
 
Última edición:
Bueno más o menos ahi entendí tu programa ahora te lo correjí...como me percaté ...el compilador si hace la distinción de vectores de interrupción de alta y baja prioridad pero el usuario es el encargado de configurarlas. El problema que vos tenés es que las has configurado mal y hay porciones de código que te están haciendo funcionar mal el programa:

En cuanto te tenga las correciones te las paso ...pero si queres verlo vos te digo que el problema radica en la habilitacion / deshabilitacion de interrupciones ...
 
ok... gracias... en serio te lo agradezco mucho... esperare tu correccion... y no se me puedas explicar algo de como se cuando debo o no habilitar las interrrupciones???
Saludos
 
Hola soy algo nuevo en esto..quisiera saber si la sintacsis es la misma para todos los pic?
yo tengo pensado utilizar el pic 16f84a!
alguien plz que me responda
 
Uso de tarjetas microSD proyecto a nivel hardware, SPI.
Este circuito es muy simple solo trata de uso de una tarjeta microSD modo SPI, este caso he usado un microcontroldor PIC16F887, usando solo 64 bytes en cada bloque de la tarjeta y el resto como basura ya que este microcontrolador no posee mas de 368 bytes.

Codigo hecho en CCS C.
Código:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;USO DE TARJETA SD
//DATE:22/JULIO/'05
///////////////////////////////////////

//CONFIGURACION///////////////////
#include<16F887.h>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT,NODEBUG
#use delay(clock=8M)
//#include<kbd_lib.c>
#include<LCD420_PORTD.C>
#define SIZE_BLOCK 64
#include<SPI_uSD.c>

const char letra[]={"PRIMERA PRUEBA DE MICROSD YEAH"};

void config(void){
    //set_tris_c(0x10);
    setup_adc(ADC_OFF);
    setup_comparator(NC_NC_NC_NC);
    setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_64);
}

void main(void){
    int info;
    config();
    //kbd_init();
    lcd_init();

    lcd_putc("\fExample SD card!!!\n");
    delay_ms(1000);
    if(!SD_Init()){
        lcd_putc("Tarjeta SD fail");
        lcd_gotoxy(1,3);
        lcd_putc("try again      ");
        while(TRUE);
    }else{
        lcd_putc("Tarjeta Accedida    ");
    }
    delay_ms(1000);
    lcd_gotoxy(1,2);
    for(info=0;info<SIZE_BLOCK;info++){            //Guardamos temporalemente en la variable "data"
        if(info<30) data[info]=letra[info];        //la frase y resto basura
        else data[info]=info;
    }
    if(write_SD(100)){                            //Grabamos a la tarjeta la frase que contiene la 
        lcd_putc("DATA fail!!!            ");        //variable "data"
    }else{
        lcd_putc("DATA saved!!!         ");
    }
    for(info=0;info<SIZE_BLOCK;info++){        //BORRAMOS TODA LA VARIABLE "data" para
        data[info]=0xAA;                    //saber que no hay nada en la variable
    }
    delay_ms(1000);

    lcd_gotoxy(1,2);

    if(!read_SD(100)){                        //cargamos la variable data con los valores
        lcd_putc("DATA read!!!     ");        //guardados en la tarjeta SD
    }else{
        lcd_putc("DATA fail!!!     ");
    }
    delay_ms(1000);
    for(info=0;info<30;info++){                //Si se guardo correctamente este
        if(info<14){                        //debe de proyectar la frase que guardamos en la memoria
            lcd_gotoxy(info+1,3);
            lcd_putc(data[info]);
        }else{
            lcd_gotoxy(info-14,4);
            lcd_putc(data[info]);
        }
    }
}
Otra prueba con la tarjeta, guarda 64 lecturas analogas.

Código:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;USO DE TARJETA SD
//DATE:22/JULIO/'09
///////////////////////////////////////

//CONFIGURACION///////////////////
#include<16F887.h>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=8000000)
#use fast_io(b)
#include<kbd_lib.c>
#include<LCD420_PORTD.C>
#define SIZE_BLOCK 64
#include<SPI_uSD.c>

int c=0,ca,x,aux=0,count=3,ac;
float volts;

void config(void){
    set_tris_b(0xF0);
    port_b_pullups(0xF0);
    setup_comparator(NC_NC_NC_NC);
    setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_64);
    setup_adc(ADC_CLOCK_INTERNAL|VSS_VDD);
    setup_adc_ports(sAN0);
}

char tecla(){
    while(TRUE){
        c=kbd_getc();
        if(c!=0)break;
    }
    return c;
}


void main(void){
    config();
    lcd_init();
    kbd_init();


    while(TRUE){
        lcd_putc("\f----Invernadero-----\n");
        lcd_putc("Intertar SD:     <A>");
        ca=tecla();
        switch(ca){
            case 'A': 
                    if(!SD_init()){
                        lcd_gotoxy(1,2);
                        lcd_putc("Inicialiacion fallo   ");
                        break;
                    }else{

                        lcd_gotoxy(1,2);
                        lcd_putc("Inicialiacion SD    ");
                        delay_ms(2000);
                        lcd_gotoxy(1,2);
                        lcd_putc("Rec Temperatura: <B>");
                        lcd_gotoxy(1,3);
                        lcd_putc("Read Temperatura:<C>");
                        ac=tecla();
                        if(ac!='B' && ac!='C'){
                            break;
                        }else if(ac=='B'){
                            lcd_gotoxy(1,2);
                            lcd_putc("NO RETIRE SD...!!!! ");
                            lcd_gotoxy(1,3);
                            lcd_putc("                    ");
                            for(x=0;x<64;x++){
                                if(x==count){
                                    count+=3;
                                    aux++;
                                    lcd_gotoxy(aux,3);
                                    lcd_putc(0xFF);
                                }
                                delay_ms(100);
                                DATA[x]=read_adc();
                            }
                            if(write_SD(50)){
                                lcd_gotoxy(1,2);
                                lcd_putc("No se pudo grabar!!! ");
                                lcd_gotoxy(1,3);
                                lcd_putc("                     ");
                            }else{
                                lcd_gotoxy(1,2);
                                lcd_putc("Grabado!!!           ");
                                lcd_gotoxy(1,3);
                                lcd_putc("                     ");
                            }
                            aux=0;
                            count=3;
                            delay_ms(2000);
                            break;
                        }else if(ac=='C'){
                            
                            lcd_gotoxy(1,2);
                            lcd_putc("Checando temp. saved     ");
                            lcd_gotoxy(1,3);
                            lcd_putc("                         ");
                            if(!read_SD(50)){
                                while(ca!='D'){
                                        ca=tecla();
                                        if(ca=='1'){
                                            if(aux<=64){
                                                aux++;
                                            }else{aux=1;}
                                        }
                                        if(ca=='8'){        
                                            if(aux==0){
                                                aux=1;
                                            }else{
                                                aux--;
                                            }
                                        }
                                        volts=((float)DATA[aux]*5)/255;
                                        lcd_gotoxy(1,3);
                                        printf(lcd_putc,"%u.- %0.2f C                 ",aux,volts);
                                    }
                            }else {aux=0;break;}
                            aux=0;
                            break;
                        }
                                            
                                        
                    }
        }
    }
}

Se necesita tener proteus 7.7 para la simulacion
 

Adjuntos

  • SD.jpg
    SD.jpg
    180.8 KB · Visitas: 112
  • ex_SPI.zip
    302 KB · Visitas: 247
Siguiendo con estas tarjetas le traigo como usar en modo fat16 googleando encontre los drivers para el manejo de estas.
Código:
///////////////////////////////////////////////////////
//Autor del exemplo: george.manson.69            ///////
//Contacto: george.manson.69@gmail.com            ///////
//Sobre: Tarjeta MMC modo Fat16                    ///////
//Este programa lo que hace es crear una carpeta nombrada     ////
//"DATO" y despues crea un archivo de texto (.txt)             ////
//donde se empezara adherir datos de ADC maximo de 10          ////
//Al terminar podemos checar la memoria MMC en la computadora////
//Tanto la carpeta y archivo con los datos ADC                 ////
//                                                             ////
//Los drivers para la utilizacion del FAT16 fue creado         ////
//por Suky. en la pagina web www.infopic.comlu.com             ////
//Donde podras bajar los drivers actualizados.                 ////
///////////////////////////////////////////////////////                                

#include<18F2550.H> //Agregamos todos los registros del uC18
#fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN
/*
MCLR: vamos ha usar el PIN MCLR, el reset se hará por Hardware
HSPLL: Vamos a usar un cristal de 20.00Mhz.
NOWDT: No vamos a usar el perro guardian.
NOPROTECT: Memoria no protejida contra lecturas.
NODEBUG: No utilizamos código para debugear.
NOLVP: No utilizamos el modo de programación con bajo voltaje.
USBDIV: signfica que el clock del usb se tomará del PLL/2 = 96Mhz/2 = 48Mhz.
PLL1: significa que el PLL prescaler  dividirá la frecuencia del cristal. 20Mhz/5=4Mhz
CPUDIV1: El PLL postscaler decide la división en 2 de la frecuencia de salida del PLL de 96MHZ, si queremos 48MHZ, lo dejamos como está.
VREGEN: habilita el regulador de 3.3 volts que usa el módulo USB.
NOPBADEN: Deshabilitamos el módulo conversor ADC del puerto B.
*/

//------------------------------------------------------------
//Configuraciones                                            //
//------------------------------------------------------------

#use delay(clock=8M)
#use rs232(baud=9600,xmit=PIN_B7,rcv=PIN_B6)

#include <SDCard_hard.c>
#include <FAT16_SDCard.c>

char Texto1[512]="Medidor de voltaje\r\n";
char texto2[512];

/*******************************************************************************/
void main(void){
    char car[6]="DATOS";
    char dir[7]="/DATOS";
    char NombreArchivo[20]="Datos1.txt";
    long UbicacionFolder;
    long tx;
    unsigned int value_adc;

    set_tris_a(0b00000001);
    set_tris_b(0b01000001);
      setup_adc_ports(AN0);
    setup_adc(ADC_CLOCK_INTERNAL|VSS_VDD);
    setup_comparator(NC_NC_NC_NC);
    output_high(PIN_C0);
    output_high(PIN_C1);
    output_high(PIN_C2);
   
    delay_ms(2000);

    printf("Iniciando SD Card\r\n");

    if(SDCard_init()==0){
      printf("Error al iniciar\r\n");
       }else{
      printf("Se ha iniciado correctamente la memoria!!!\r\n\r\n");
      FAT_init();
        printf("Creando carpeta de datos\r\n");
      if(FAT_CreateDirectory(car,car,DirectorioRaiz)==0){
            printf("error de creacion de carpeta\r\n");
      }
        printf("Buscando la direccion de la carpeta deseada\r\n");
      if(FAT_FindDirectory(dir,DirectorioRaiz,UbicacionFolder)==0){
            printf("error en leer la carpeta\r\n");
      }
        printf("Creando archivo de datos\r\n");
      if(FAT_CreateFile(NombreArchivo,NombreArchivo,UbicacionFolder,Texto1)==0){
        printf("error de creacion de archivo\r\n");
      }else{
        for(tx=0;tx<10;tx++){
            delay_ms(1);
            value_adc=read_adc();
            sprintf(texto2,"voltaje=\t%u\r\n",value_adc);
            if(FAT_OpenAddFile(NombreArchivo,UbicacionFolder,Texto2)==0){
                printf("error de sobreescritura Dato[%lu]\r\n",tx);
            }else{
                printf("DAtO[%lu] grabado\r\n",tx);
            }
        }
       }
   }

   while(TRUE);
}

Lamentablemente parece que no he encontrado la forma para que funcione simulado, pero lo he armado fisicamente y trabajo perfectamente
 

Adjuntos

  • MMC.jpg
    MMC.jpg
    206 KB · Visitas: 63
  • MMCEX.jpg
    MMCEX.jpg
    48 KB · Visitas: 47
  • MMCex.zip
    497.3 KB · Visitas: 200
Hola, tengo una duda acerca de como hacer realmente funcionar este programa, para enviar y recibir datos elegimos un pin transmisor y receptor, pero en mi caso yo la única comunicación que tengo entre el pic y el portatil es por USB, el hercules establece la conexión entre el pic y el pc pero no se reciben datos porque no tengo ningún pic transmisor conectado al portatil, como puedo hacer funcionar el programa? quiero ver en la pantalla del hercules los mensajes que envíe desde el pic.

Este prgrama hace una comunicacion serial con la compu y el pic...

si quieres verlo que funcione entra a youtube...y busquen "godness006"
ahi etsan algunos proyectos que he hecho

Código:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;TERMINAL VIRTUAL
//DATE:24/ABRIL/2009
///////////////////////////////////////

//CONFIGURACION///////////////////
#include<16F628A.h>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=2400,xmit=PIN_B6,rcv=PIN_B7)

void main(void){
		int VALOR;
		set_tris_b(0x80);
		
		do{
			for(VALOR=0;VALOR<=10;VALOR++){
				printf("EL VALOR ES: %u\r",VALOR);
				delay_ms(1000);
			}
		}while(TRUE);

}
 
Hola, tengo una duda acerca de como hacer realmente funcionar este programa, para enviar y recibir datos elegimos un pin transmisor y receptor, pero en mi caso yo la única comunicación que tengo entre el pic y el portatil es por USB, el hercules establece la conexión entre el pic y el pc pero no se reciben datos porque no tengo ningún pic transmisor conectado al portatil, como puedo hacer funcionar el programa? quiero ver en la pantalla del hercules los mensajes que envíe desde el pic.


mm..tendrias que comprar un cable usb-serial. y despues comprar un max232 y conectarlo al pic...

PC=USB-SERIAL=MAX232=PIC

mas o menos asi...

hay algunas practicas de comunicacion serial aqui:

mcuproyects.blogspot.com
 
Hola, alguien tiene idea porque sale esto en proteus? en el log de simulacion de proteus se repite como 10.000 veces y se pone todo lento. El aviso es "[PIC16 CORE]PC=0x0095. TRISB instruction is deprecated for PIC16628", mayormente aparece la direccion 0x0095, algunas pocas veces tambien salen las 0x004C y 0x0094.
El codigo es este:
Código:
#include <16f628a.h>
#fuses xt,nowdt,nomclr
#use delay (clock = 4000000)
#define use_portb_kbd TRUE
#include <kbd.c>
#use standard_io (a)

void main (){

char k,kant='0';
char pwmh=0,pwml=0;
kbd_init();
PORT_b_PULLUPS(TRUE);

while(1){
         k=kbd_getc();
         if (k=='\0') k=kant;
         
         if ((k=='*') || (k=='#')) k='0'; 
         
         kant=k;
         k=k-48;
         pwmh=k*28;
         pwml=255-pwmh;
         for (pwmh;pwmh>0;pwmh--){
         output_high(pin_A0);}
         
         for (pwml;pwml>0;pwml--){
         output_low(pin_A0);}
       }
}

MUCHAS GRACIAS
 
Hola, alguien tiene idea porque sale esto en proteus? en el log de simulacion de proteus se repite como 10.000 veces y se pone todo lento. El aviso es "[PIC16 CORE]PC=0x0095. TRISB instruction is deprecated for PIC16628"....
Pos te lo está diciendo "La instrucción TRISB es desaprobada para el 16F628".

Desde hace un par de siglos ;) Microchip viene desaconsejando la instrucción TRIS, pero por misterios de la industria, se la sigue incluyendo en el código (n).

Durante cada lectura del teclado se cambia la configuración del puerto, como en esto usa la instrucción TRIS por eso te saltan los trillones de warnings.

Solución:
- Desde el CCS, ir a Tools->Device Editor->PIC16F628A->Other Features y poner TRIS=False
==> El código generado ya no incluirá TRIS y funcará como los dioses.

- Enviar un email a CCS preguntando por qué mie*** tiene esa configuración por defecto ;)
 
mm..tendrias que comprar un cable usb-serial. y despues comprar un max232 y conectarlo al pic...

PC=USB-SERIAL=MAX232=PIC

mas o menos asi...

hay algunas practicas de comunicacion serial aqui:

mcuproyects.blogspot.com

Me pregunto si habrá una solución más fácil y a mi alcance, quizá si pueda conectar el pin transmisor al pc usando simplemente la placa, hay unos pines en la entrenadora que tienen que ver con el USB pero no entiendo para qué sirven mirando el esquemático.
 

Adjuntos

  • esquematico18F67J50Trainer_V1.0.pdf
    530.1 KB · Visitas: 132
Atrás
Arriba