Autor Tema: Acceso UART en CCS  (Leído 6606 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Acceso UART en CCS
« Respuesta #15 en: 01 de Diciembre de 2017, 05:54:28 »
Haz otra prueba de hardware, desconecta el tx y el rx del max al micro, unelos en el max. Es decir, une el tx del max con el rx del max, del micro olvidate ahora. Conecta el terminal y prueba a enviar un caracter, tienes que recibirlo a la misma vez.

  Ya es para descartar que tengas problemas de conexiones. ¿Puedes poner alguna foto donde se vea como tienes montado el circuito??

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re:Acceso UART en CCS
« Respuesta #16 en: 04 de Diciembre de 2017, 08:32:06 »
Hola a todos,
He hecho un nuevo descubrimiento, os pego el código que estoy utilizando, a ver si vosotros entendéis mejor que yo lo que sucede:
Código: [Seleccionar]
#include <18f4520.h>
#use delay(clock=20000000)  //Meto 20M por el cristal, a ver como va
#fuses NOWDT, PUT, NOWRT, HS
#use fast_io(B)
#use standard_io(C)
#use rs232(baud=9600,xmit=PIN_C6, rcv=PIN_C7, bits=8, parity=N, ERRORS)

//Variables globales de programa
int bandera = 0;
char ch;


#INT_RDA
void serial_isr(void)
{
    ch=getchar();
    bandera = 1;
}


void main()
{
    //Configuración de puertos e interrupciones
   set_tris_b(0x80);
   set_tris_a(0x0F);
   set_tris_c(0x80);

   //output_c(0);
   output_low(PIN_C6);
   output_b(0);

   enable_interrupts(GLOBAL);
   enable_interrupts(INT_RDA);
 

   //hilo principal
   while(TRUE)
   {
       delay_ms(100);

       if(input(PIN_B7)==1)
       {
           //putc('1');
           printf("HOLA");
           //putc(ch);
           output_high(PIN_B6);
           delay_ms(1000);
           output_low(PIN_B6);
       }

       if(bandera==1)
       {
           output_toggle(PIN_B6);
           printf("retardo = %c ",ch);
           bandera=0;
       }
       /*if(kbhit()==1)
       {
           ch=getchar();
           output_high(PIN_B6);
           delay_ms(1000);
           output_low(PIN_B6);
           putc(ch);
       }*/
   }
}

Pues resulta que, si dejo ese output_c(0) sin comentar (al principio del main) me funciona el micro sólo para recibir datos, pero no es capaz de enviar nada, sin embargo si lo dejo comentado (o con el PIN_C7 sin tocar) me funciona la transmisión solamente pero no la recepción. No tengo ni idea de lo que pasa pero acotando he visto que el fallo está ahí.
A ver que se os ocurre a vosotros.

Muchas gracias por cualquier ayuda y un saludo!

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Acceso UART en CCS
« Respuesta #17 en: 04 de Diciembre de 2017, 14:36:33 »
Citar
Pues resulta que, si dejo ese output_c(0) sin comentar (al principio del main) me funciona el micro sólo para recibir datos, pero no es capaz de enviar nada, sin embargo si lo dejo comentado (o con el PIN_C7 sin tocar) me funciona la transmisión solamente pero no la recepción. No tengo ni idea de lo que pasa pero acotando he visto que el fallo está ahí.

CCS cambia los pines como entradas/salidas segun si usas input o output, para que CCS no haga eso sobre algun puerto usa:

Código: C
  1. #USE FAST_IO(C)

De esa forma va a hacer caso al set_tris_c()
Sino va a seguir cambiandolo como quiera el compilador.