Autor Tema: Problema con set_tris_x() en CCS  (Leído 10667 veces)

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

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problema con set_tris_x() en CCS
« Respuesta #15 en: 28 de Mayo de 2009, 23:47:51 »
Hola.

Para asignar las entradas desde el MPLAB se hace desde el stimulus:



Para debugear desde el MPLAB debes usar el MPLAB SIM
El papel lo aguanta todo

Desconectado ggp0

  • PIC10
  • *
  • Mensajes: 16
Re: Problema con set_tris_x() en CCS
« Respuesta #16 en: 29 de Mayo de 2009, 06:27:05 »
Las últimas cosas que he probado son las siguientes:
He actualizado el MpLab a su última versión v8.3 y se comporta de la misma manera que la versión que tenía instalada.
Normalmente cuando he querido probar a introducir un valor por un puerto lo he hecho desde la ventana watch, seleccionaba el registro deseado (PORTB) e introducía el valor que quería en el mismo, si estaba configurado como entrada el valor se podía introducir y si era una salida no te dejaba meter nada. En esta ocasión todo ha sido igual pero para poder introducir los datos lo tenía que configurar como salida¿?.
Normalmente no uso el stimulus de MpLab puesto que es más facil con el watch, pero siguiendo las indicaciones de MLO__ he empleado el stimulus para salir de dudas y aqui si funciona como debe.
Esto me despeja una duda pero me genera otra, ¿Por qué hasta ahora no he tenido ese problema y siempre ha ido todo bien?, me da la impresión que watch no trabaja sobre el pin del puerto sino que lo hace sobre su registro ¿puede que las entradas físicas unicamente se deban actuar desde stimulus?

Saludos


Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problema con set_tris_x() en CCS
« Respuesta #17 en: 29 de Mayo de 2009, 11:22:46 »
Hola.

El watch es solo para ver los registros, el stimulus es justamente para generara los estimulos sobre los pines. Que bueno que te halla servido y funcionado

Saludos
El papel lo aguanta todo

Desconectado ggp0

  • PIC10
  • *
  • Mensajes: 16
Re: Problema con set_tris_x() en CCS
« Respuesta #18 en: 30 de Mayo de 2009, 07:53:04 »
Muchas gracias a todos.

A pesar del tiempo, sigo sorprendiendome muy gratamente con esto de los foros.

Desconectado je_electronic

  • PIC10
  • *
  • Mensajes: 4
Problema con codificador de 7 segmentos a decimal
« Respuesta #19 en: 02 de Junio de 2017, 21:42:27 »
Hola espero me puedan ayudar con este pequeño proyecto, la idea es que cuando detecte los bits del 7 segmentos como entrada del puerto b, a la salida de puerto c y puerto d (esto con el pic16f877a), para el caso 0 sea el rc0=1 para el caso 1 sea en rc1= 1 asi hasta llegar al numero C que seria para el numero 12, adjunto la programacion que estoy ejecutando, pues logro corroborar que si funciona desde numero 5 hasta el C o 12 pero la parte del 1 al 4 no me logra responder o que me falta en esta programacion de antemano muchas gracias.

# include <16F877A.H>
# use delay(clock=4000000)
# fuses XT,NOWDT
# byte puerto_b=7   //Dirección del puerto b
# byte puerto_C=8   //Dirección del puerto c
# byte puerto_d=8   //Dirección del puerto d

void main() {

set_tris_C(0x00);  //Configuro la puerta c como salida y RA0, RA1, RA2, RA3 y RA4 como 
set_tris_d(0x00);  //Configuro la puerta d como salida y RA0, RA1, RA2, RA3 y RA4 como 
set_tris_b(0x1F);  //entradas aunque por defecto ya están configuradas como entradas

puerto_b=0;       //inicializo todos los bits de la puerta B a cero
puerto_c=0;       //inicializo todos los bits de la puerta B a cero
puerto_d=0;       //inicializo todos los bits de la puerta B a cero
while(true) //bucle infinito
{
if (input(PIN_b0)==false && input(PIN_b1)==false&& input(PIN_b2)==false&& input(PIN_b3)==false&& input(PIN_b4)==false&& input(PIN_b5)==false&& input(PIN_b6)==false)
{
puerto_c=0b00000000; //configura los bits de la puerta B caso 0 ain valor nulo
puerto_d=0b00000000; //configura los bits de la puerta B caso 0 ain valor nulo
}
if (input(PIN_b0)==false && input(PIN_b1)==true&& input (PIN_b2)==true&& input(PIN_b3)==false&& input(PIN_b4)==false&& input(PIN_b5)==false&& input(PIN_b6)==false)
{

puerto_c=0b00000001; //para el caso 1

}
if (input(PIN_b0)==true && input(PIN_b1)==true&& input (PIN_b2)==false&& input(PIN_b3)==true&& input(PIN_b4)==true&& input(PIN_b5)==false&& input(PIN_b6)==true)
{
puerto_C=0b00000010; //para el caso 2
puerto_d=0b00000000; //para el caso 1
}
if (input(PIN_b0)==true && input(PIN_b1)==true&& input(PIN_b2)==true&& input(PIN_b3)==true&& input(PIN_b4)==false&& input(PIN_b5)==false&& input(PIN_b6)==true)
{
puerto_C=0b00000100; //para el caso 3
}
if (input(PIN_b0)==false && input(PIN_b1)==true&& input(PIN_b2)==true&& input(PIN_b3)==false&& input(PIN_b4)==false&& input(PIN_b5)==true&& input(PIN_b6)==true)
{
puerto_C=0b00001000; //para el caso 4
puerto_d=0b00000000; //para el caso 1
}
if (input(PIN_b0)==true && input(PIN_b1)==false && input(PIN_b2)==true && input(PIN_b3)==true && input(PIN_b4)==false && input(PIN_b5)==true && input(PIN_b6)==true)
{
puerto_d=0b00000001; //para el caso 5
}
if (input(PIN_b0)==true && input(PIN_b1)==false && input(PIN_b2)==true && input(PIN_b3)==true && input(PIN_b4)==true && input(PIN_b5)==true && input(PIN_b6)==true)
{
puerto_d=0b00000010; //para el caso 6
}
if (input(PIN_b0)==true && input(PIN_b1)==true && input(PIN_b2)==true && input(PIN_b3)==false && input(PIN_b4)==false && input(PIN_b5)==false && input(PIN_b6)==false)
{
puerto_d=0b00000100; //para el caso 7
}
if (input(PIN_b0)==true && input(PIN_b1)==true && input(PIN_b2)==true && input(PIN_b3)==true && input(PIN_b4)==true && input(PIN_b5)==true && input(PIN_b6)==true)
{
puerto_d=0b00001000; //para el caso 8
}
if (input(PIN_b0)==true && input(PIN_b1)==true && input(PIN_b2)==true && input(PIN_b3)==true && input(PIN_b4)==false && input(PIN_b5)==true && input(PIN_b6)==true)
{
puerto_d=0b00010000; //para el caso 9
}
if (input(PIN_b0)==true && input(PIN_b1)==true && input(PIN_b2)==true && input(PIN_b3)==true && input(PIN_b4)==true && input(PIN_b5)==true && input(PIN_b6)==false)
{
puerto_d=0b00100000; //para el caso 0
}
if (input(PIN_b0)==true && input(PIN_b1)==true && input(PIN_b2)==true && input(PIN_b3)==false && input(PIN_b4)==true && input(PIN_b5)==true && input(PIN_b6)==true)
{
puerto_d=0b01000000; //para el caso A
}
if (input(PIN_b0)==true && input(PIN_b1)==false && input(PIN_b2)==false && input(PIN_b3)==true && input(PIN_b4)==true && input(PIN_b5)==true && input(PIN_b6)==false)
{
puerto_d=0b10000000; //para el caso C
}
}
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema con set_tris_x() en CCS
« Respuesta #20 en: 02 de Junio de 2017, 23:16:33 »
Disculpa, pero no entendi para nada tu explicacion.

si podes explicarte mejor que es lo que debe realizar el programa podria ayudarte

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:Problema con set_tris_x() en CCS
« Respuesta #21 en: 03 de Junio de 2017, 04:57:59 »
Buenas,

¿Por qué no en vez de comparar con tantas igualdades haces comparaciones con operadores lógicos?.

Ej (lo pongo en C standard, no sé como es en CCS):

Código: [Seleccionar]
if
(input(PIN_b0)==true && input(PIN_b1)==true&& input (PIN_b2)==false&& input(PIN_b3)==true&& input(PIN_b4)==true&& input(PIN_b5)==false&& input(PIN_b6)==true)
{
puerto_C=0b00000010; //para el caso 2
puerto_d=0b00000000; //para el caso 1
}

Es lo mismo que:
Código: [Seleccionar]
if( (puerto_B&0xFF) == 0b001011011){
puerto_C=0b00000010; //para el caso 2
puerto_d=0b00000000; //para el caso 1
}

Además si las comparaciones siguen una lógica podrás cambiar 0b001011011 por una variable que se modifique en un bucle for y si no la siguen las puedes meter en un array y recorrer el array con el bucle.

En resumen: con muchas menos líneas de código deberías se capaz de hacer lo mismo y se leerá mucho mejor lo que intentas hacer...

Otro consejo: pon paréntesis cuando programes. "==" tiene mayor preferencia que "&&", pero a no ser que te sepas la tabla entera de memoria terminarás equivocandote más pronto que tarde ya que hay cientos de situaciones posibles...

http://maxus.fis.usal.es/fichas_c.web/03xx_pags/0303.html

Saludos!
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:Problema con set_tris_x() en CCS
« Respuesta #22 en: 03 de Junio de 2017, 05:20:57 »
# byte puerto_b=7   //Dirección del puerto b
# byte puerto_C=8   //Dirección del puerto c
# byte puerto_d=8   //Dirección del puerto d

Tal vez tienes mal definidas las direcciones de los puertos para el 877.




Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema con set_tris_x() en CCS
« Respuesta #23 en: 03 de Junio de 2017, 14:39:51 »
y tampoco necesita definirlas... que utilice output_x() para manejar los puertos