Autor Tema: CURSO DE C  (Leído 7044 veces)

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

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: CURSO DE C
« Respuesta #30 en: 24 de Febrero de 2004, 13:38:00 »
Siguiendo el hilo de lo que comenta Sispic, tengo un par de preguntitas.

En el programa que os pongo más abajo, se desea que cada vez que se reciba un caracter del terminal vía serie, se le reenvie al mismo y además que un led situado en RB4 cambie de valor.

#include <16f84.h>

#use delay(clock=4000000)
#use RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_B4, RCV=PIN_B5, RESTART_WDT)

#use fast_io(B)

#byte port_b=6

main()
{
   char a;
   short b=0;

  while(1)
  {
    port_b =   0b00010000;      // RB4=1 --> TxD a "1". Inactiva.
    set_tris_b(0b00100000);     // PIN_B4 = Salida(TxD), PIN_B5 = Entrada(RxD)
    while(!kbhit());         // Espera a recibir un caracter vía serie
    a=getc();               // Recibe un caracter via serie y lo almacena en a
    putc(a);               // Envía vía serie al terminal el caracter recibido


   output_bit(PIN_B4,b);
   b=!b;
  }
}


Las preguntas son:

- No entiendo porqué para transmitir el caracter al terminal hay que poner obligatoriamente: port_b=0b00010000 y set_tris_b(0b00100000)

- Si pongo esto, el caracter se retransmite bien pero el led no cambia de estado. ¿Qué tengo que poner delante del output_bit(PIN_B4,b) para que la salida del led se active? Si pongo set_tris_b(0b00000000) no va.

Un saludo

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: CURSO DE C
« Respuesta #31 en: 24 de Febrero de 2004, 15:06:00 »
al usar output_bit(PIN_B4,b) defines el pin b4 como salida asi que no necesitas nada previamente
pero por que usas el pin b4 para las dos cosas?????

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: CURSO DE C
« Respuesta #32 en: 24 de Febrero de 2004, 23:26:00 »
Si dejo el programa tal cual está, el LED no cambia de estado ¿Porqué? ¿Como hay que reconfigurar el pin para que lo haga?

Si quito el port_b = 0b00010000 entonces sí cambia de estado el LED, pero el caracter se retransmite mal al terminal.

Todas estas pruebas que estoy haciendo son para intentar dejar el pin Tx de una transmisión en alta impedancia, no sé como conseguirlo ¿Se puede hacer?

Ya sé que con RS485 se puede hacer, pero necesitas un pin extra para controlar la transmisión, la idea es intentar ahorrar por software este pin.

Un saludo

Desconectado Furtive

  • PIC10
  • *
  • Mensajes: 5
RE: CURSO DE C
« Respuesta #33 en: 25 de Febrero de 2004, 20:48:00 »
Soy nuevo en el foro y me parece muy interesante su propuesta, lástima que soy novato en la programacion pero me gustaría que me facilitara toda la información necesaria...gracias

Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 679
RE: CURSO DE C
« Respuesta #34 en: 25 de Febrero de 2004, 21:11:00 »
Pocher...desde la version 3.181 de CCS hay un driver que sirve para rs485 claro usa el pin que te queres ahorrar, de cualquier manera creo por lo que vi que detecta actividad en el bus, creo que con este recurso puedes hacer algo auqnue me parece que lo mejor es usar 3 pines, o si no la otra altrenativa es usar 4 cables osea rs422, espero que te sirva.

saludos cordiales.

Ariel
saludos
PikMan

Desconectado fopy

  • PIC10
  • *
  • Mensajes: 35
RE: CURSO DE C
« Respuesta #35 en: 27 de Febrero de 2004, 17:52:00 »
Salvado el escollo de leer en ingles, he aqui un buen libro

http://www.planetpdf.com/mainpage.asp?WebPageID=315

Desconectado Orcino

  • PIC10
  • *
  • Mensajes: 1
RE: CURSO DE C
« Respuesta #36 en: 14 de Junio de 2004, 10:52:00 »
  Como ler um DUTY CYCLE de um sinal PWM utilizando o CCP1 de um 12F675 ? alguem pode me ajudar ?


                  Gracias

                                 Orcino

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: CURSO DE C
« Respuesta #37 en: 14 de Junio de 2004, 13:40:00 »
Lo que te interesa es calcular la duración del estado alto, para lo cual:

- Programa CCP1 para realizar capturas con flancos ascendentes y programa CCP2 para realizar capturas con flancos descendentes.

- Habilita la interrupción por captura de flanco descendente.

- Dentro de la interrupción restar CCP2 - CCP1 y ya tienes el Duty.

Un saludo

Desconectado lovando

  • PIC16
  • ***
  • Mensajes: 193
RE: CURSO DE C
« Respuesta #38 en: 14 de Junio de 2004, 19:18:00 »

Desconectado Luis_Chogi

  • PIC10
  • *
  • Mensajes: 44
Re: CURSO DE C
« Respuesta #39 en: 10 de Junio de 2006, 14:59:46 »
Hola lovando

Tu link pide un numero de usuario y contraseña para entrar al curso del que hablas.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: CURSO DE C
« Respuesta #40 en: 14 de Junio de 2006, 18:17:28 »
Se me escapa algo en tu respusrta, Pocher.
Para saber el DUTY, ¿no necesitas saber también el periodo?