Autor Tema: secuencia de luces rb4 no envia señal  (Leído 2797 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado yamilongiano

  • PIC10
  • *
  • Mensajes: 37
secuencia de luces rb4 no envia señal
« en: 03 de Septiembre de 2012, 16:25:02 »
Hola estoy haciendo un simple mivimiento de las salidas en estado alto que pase todos los puertos uno por uno,es para probar el pic por así decirlo, pero el puerto A el rb4 no envia señal

hasta donde se necesita una configuración especial pero no la encuentro el código,lo que tengo es el siguiente, si le pueden hechar una mirada es super simple.

Código: [Seleccionar]

TRISA = %00000
TRISB = %00000000
PORTB = %00000000
PORTA = %00000

inicio:


High PORTA.0
WaitMs 500
Low PORTA.0
WaitMs 500

High PORTA.1
WaitMs 500
Low PORTA.1
WaitMs 500

High PORTA.2
WaitMs 500
Low PORTA.2
WaitMs 500

High PORTA.3
WaitMs 500
Low PORTA.3
WaitMs 500

High PORTA.4
WaitMs 500
Low PORTA.4
WaitMs 500

High PORTB.0
WaitMs 500
Low PORTB.0
WaitMs 500

High PORTB.1
WaitMs 500
Low PORTB.1
WaitMs 500

High PORTB.2
WaitMs 500
Low PORTB.2
WaitMs 500

High PORTB.3
WaitMs 500
Low PORTB.3
WaitMs 500

High PORTB.4
WaitMs 500
Low PORTB.4
WaitMs 500

High PORTB.5
WaitMs 500
Low PORTB.5
WaitMs 500

High PORTB.6
WaitMs 500
Low PORTB.6
WaitMs 500

High PORTB.7
WaitMs 500
Low PORTB.7
WaitMs 500

Goto inicio
End


pero no me prende el led 4 y todos los demás están bien.

que me falto configurar del rb4 tiene que ver con el tocki pero no encuentro como configurarlo con pc basic pro.


Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: secuencia de luces rb4 no envia señal
« Respuesta #1 en: 05 de Septiembre de 2012, 09:14:37 »
Hola yamilongiano; no presté atención antes al código porque indicas que estás usando el Pc Basic Pro, pero en una segunda ojeada he visto que en realidad estás usando el entorno de trabajo del Basic PSI. De todas formas para tener una mayor posibilidad de ayuda, te tienes que acostumbra a indicar en el código el microcontrolador que estás utilizando y la frecuencia de reloj, de otra manera no es posible ofrecerte la ayuda necesaria, por lo pronto he simulado el código y funciona, pero esto es normal que pase trabajando sobre simulación. ¿Qué microcontrolador estás utilizando y a que frecuencia de reloj de trabajo usas?.
Saludos desde Granada, España.

Desconectado yamilongiano

  • PIC10
  • *
  • Mensajes: 37
Re: secuencia de luces rb4 no envia señal
« Respuesta #2 en: 09 de Septiembre de 2012, 14:23:03 »
Hola si gracias por responder claro estoy ocupando el pic simulator ide /tool (basic compiler) estoy aperndiendo desde aqui amigo  foro

y al parecer estoy super equivocado entonces cual es el lenguaje que estoy ocupando "basic psi". gracias por la aclaración

bueno la cosa es que estoy usando el pic16f84 y tengo unos cristales que dicen KS 4000M en lo físico, su pongo que son de 4 mhz. en la  en la simulación lo tengo a 20 Mhz.

entonces en lo real debería funcionar bien ? (prenderia el led4)

y en la simulación no?


Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: secuencia de luces rb4 no envia señal
« Respuesta #3 en: 09 de Septiembre de 2012, 18:39:02 »
Bueno vamos por partes:
- En el primer hilo hablas del “pc basic pro”, por eso la indicación de que estas trabajando con el Basic del Pic Simulator Ide o abreviando Basic PSI.
- En segundo lugar hablas del puerto A pin RB4 y me imagino que quieres decir puerto A pin RA4, ya que el RB4 es del puerto B.
- En tercer lugar no te puedo ayudar con la nomenclatura del cristal, imagino que si lo pediste de 4Mhz, será correcta, pero el tema del cristal no tiene importancia si no has probado el circuito en la realidad.
- Y curto según el datasheets del Pic16F84 el puerto A tiene un pin llamado RA4 que es de colector abierto, esto quiere decir que solo puede suministrar dos valores 0 o alta impedancia, nunca puede suministrar valor 1. Así que para iluminar un led con este pin tienes que usar lógica negativa.

Adjunto el enlace a la pagina del datasheet que indica los modos de trabajo del puerto A:
http://imageshack.us/photo/my-images/803/pic16f84atable11.jpg/

Entonces llegados hasta aquí, si no construiste el circuito y solo lo estás simulando, te diré que en el simulador del entorno de trabajo del Basic del Pic Simulator IDE (PSI) si funciona, esto es independiente de la frecuencia de reloj que le pongas, pero es normal que funcione en el simulador ya que son una ficción y funcionan aunque se omitan polarizaciones, configuraciones y un largo etc que en la realidad no se pueden omitir.

Te adjunto también el programa que he simulado, de todas formas si sigo sin entenderte completamente, pues sigue exponiendo el tema a ver si logro sintonizar con los problemas que tienes realmente.

Código: FreeBasic
  1. '***** PIC16F84 *****
  2. Define CONF_WORD = 0x3ff9  'Configuración de Bit
  3. Define CLOCK_FREQUENCY = 4  'Frecuencia de trabajo 4Mhz
  4. Define SIMULATION_WAITMS_VALUE = 1  'Acelera los Wait, solo para simulación
  5.  
  6. TRISA = %00000
  7. TRISB = %00000000
  8. PORTB = %00000000
  9. PORTA = %00000
  10.  
  11. inicio:
  12.  
  13.         High PORTA.0
  14.         WaitMs 500
  15.         Low PORTA.0
  16.         WaitMs 500
  17.  
  18.         High PORTA.1
  19.         WaitMs 500
  20.         Low PORTA.1
  21.         WaitMs 500
  22.  
  23.         High PORTA.2
  24.         WaitMs 500
  25.         Low PORTA.2
  26.         WaitMs 500
  27.  
  28.         High PORTA.3
  29.         WaitMs 500
  30.         Low PORTA.3
  31.         WaitMs 500
  32.  
  33.         High PORTA.4
  34.         WaitMs 500
  35.         Low PORTA.4
  36.         WaitMs 500
  37.  
  38.         High PORTB.0
  39.         WaitMs 500
  40.         Low PORTB.0
  41.         WaitMs 500
  42.  
  43.         High PORTB.1
  44.         WaitMs 500
  45.         Low PORTB.1
  46.         WaitMs 500
  47.  
  48.         High PORTB.2
  49.         WaitMs 500
  50.         Low PORTB.2
  51.         WaitMs 500
  52.  
  53.         High PORTB.3
  54.         WaitMs 500
  55.         Low PORTB.3
  56.         WaitMs 500
  57.  
  58.         High PORTB.4
  59.         WaitMs 500
  60.         Low PORTB.4
  61.         WaitMs 500
  62.  
  63.         High PORTB.5
  64.         WaitMs 500
  65.         Low PORTB.5
  66.         WaitMs 500
  67.  
  68.         High PORTB.6
  69.         WaitMs 500
  70.         Low PORTB.6
  71.         WaitMs 500
  72.  
  73.         High PORTB.7
  74.         WaitMs 500
  75.         Low PORTB.7
  76.         WaitMs 500
  77.  
  78. Goto inicio
  79. End


Puedes pegar el esquema del circuito, si lo tienes, esto suele facilitar que te echen una mano.
« Última modificación: 09 de Septiembre de 2012, 18:47:27 por dogflu66 »
Saludos desde Granada, España.

Desconectado yamilongiano

  • PIC10
  • *
  • Mensajes: 37
Re: secuencia de luces rb4 no envia señal
« Respuesta #4 en: 09 de Septiembre de 2012, 22:06:59 »
hola muchas muchas gracias por ayudarme a comprender el drain del RA4, tienes razon en todo loq ue me corregiste en el post de mas arriba y gracias a tus comentarios comprendi y pude allar la solucion. lo que hice fue mandar un 0 al led y asi prendio. te pego la imagen y el código, las resistencias no las puse en el simulador pero creo que en lo fisico seria diferente o no ?




Código: [Seleccionar]
'***** PIC16F84 *****
Define CONF_WORD = 0x3ff9  'Configuración de Bit
Define CLOCK_FREQUENCY = 20  'Frecuencia de trabajo 4Mhz

TRISA = %00000
TRISB = %00000000
PORTB = %00000000
PORTA = %00000

inicio:

High PORTA.0
WaitMs 500
Low PORTA.0
WaitMs 500

High PORTA.1
WaitMs 500
Low PORTA.1
WaitMs 500

High PORTA.2
WaitMs 500
Low PORTA.2
WaitMs 500

High PORTA.3
WaitMs 500
Low PORTA.3
WaitMs 500

Low PORTA.4
WaitMs 500
High PORTA.4
WaitMs 500

High PORTB.0
WaitMs 500
Low PORTB.0
WaitMs 500

High PORTB.1
WaitMs 500
Low PORTB.1
WaitMs 500

High PORTB.2
WaitMs 500
Low PORTB.2
WaitMs 500

High PORTB.3
WaitMs 500
Low PORTB.3
WaitMs 500

High PORTB.4
WaitMs 500
Low PORTB.4
WaitMs 500

High PORTB.5
WaitMs 500
Low PORTB.5
WaitMs 500

High PORTB.6
WaitMs 500
Low PORTB.6
WaitMs 500

High PORTB.7
WaitMs 500
Low PORTB.7
WaitMs 500

Goto inicio
End       

lo que quizás no entiendas es que solo quería prender  los leds de forma cíclica uno por uno por todas las salidas del pic a un led. eso era todo. ya lo solucione ahora si habra alguna manera de hacer eso mas fácilmente seria genial.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: secuencia de luces rb4 no envia señal
« Respuesta #5 en: 10 de Septiembre de 2012, 08:40:45 »
La gente que me conoce ya sabe que no soy partidario de los simuladores, y el esquema de tu ejemplo me reafirma en mi posición. El esquema que has posteado en la realidad tendría que echar humo por todos lados. Tendrían que estropearse los led o el microcontrolador o todo a la vez. Cómo ya me he referido en otras ocasiones los simuladores son buenas herramientas pero, cuando se utilizan por un novel se necesita la supervisión de un profesor o el seguimiento de los ejercicios de un buen libro, en el que en todo momento se informe al usuario o alumno, las simplificaciones que se realizan en el esquema que el simulador permite pero en la realidad no se pueden realizar (y las consecuencias que sucederían en el caso de realizar la practica en la realidad). En el esquema que expones necesitas resistencias limitadoras en todos los led y también necesitas poner un condensador de desacople lo más cercano posible a la patitas de alimentación del microcontrolador, y esto solo como aplicación básica.

Con respecto al programa, la simplificación del mismo seria más compleja que tu ejemplo expuesto. ¿Y esto por qué?, pues porque si se sigue un buen libro lo primero que tiene que indicar son los comandos o funciones que no se deben de utilizar en la programación, aunque en los primeros ejercicios se utilicen ya que debido a su simplicidad engancha al usuario o alumno en el tema (crean malos hábitos), pero hay que hacer hincapié que no se utilizan normalmente porque entran en conflicto con la verdadera programación avanzada, y que según se va profundizando en la programación hay que dejar de utilizar lo más rápido posible he ir derivando a otros métodos.
Para que te hagas una idea te expongo algunos de los comandos y funciones que no se deben de utilizar en un programa, cómo dicen por mi tierra “tienes que respetar todas las señales de trafico hasta que tengas el permiso de conducir” porque una vez sabes conducir decides asumir los riesgo que conlleva saltarse las normas.

En una buena programación no se deben de utilizar los siguientes recurso porque con el tiempo generaran más mal que bien:

Goto (saltos)
Gosub/Return, menos dañino que los Gotos, pero si el lenguaje tiene otros recursos mejor prescindir de el (saltos).
Waitms (pausas absolutas).

Variables globales, se utilizan, pero no abusar de ellas.

En la rutina de interrupciones o vector de interrupciones siempre que se pueda no colocar códigos muy complejos y, no refrescar nunca módulos de control de reset del microcontrolador cómo puede ser el módulo de Wachdog.

Entre algunas más. En el foro hay mucha información sobre este tema sobre supresión de parásitos por software, hardware y buenas costumbres en la programación.
« Última modificación: 10 de Septiembre de 2012, 11:51:57 por dogflu66 »
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: secuencia de luces rb4 no envia señal
« Respuesta #6 en: 10 de Septiembre de 2012, 10:54:00 »
Este código creo que sustituye al tuyo:

Código: FreeBasic
  1. '***** PIC16F84 *****
  2. Define CONF_WORD = 0x3ff9  'Configuración de Bit
  3. Define CLOCK_FREQUENCY = 4  'Frecuencia de trabajo
  4. Define SIMULATION_WAITMS_VALUE = 1  'Acelera los Wait, solo para simulación
  5.  
  6. TRISA = %00000  'Puerto A configurado como I/O
  7. TRISB = %00000000  'Puerto B configurado como I/O
  8. PORTB = %00000000  'Todo el puerto B o registro del puerto B a estado 0 o nivel bajo
  9. PORTA = %00000  'Todo el puerto A o registro del puerto A a estado 0 o nivel bajo
  10.  
  11. main:
  12.  
  13.         Dim x As Byte  'Declara la variable x
  14.         Dim iport As Byte  'Registro que contendrá una imagen del puerto en uso
  15.        
  16.         'Control puerto A
  17.         iport = 0  'Imagen puerto es puesto a 0 o nivel bajo
  18.         iport.0 = 1  'Bit 0 de la variable imagen puesto a nivel alto
  19.         For x = 0 To 4  'Bucle, x tomará valores comprendidos entre 0 y 4
  20.                 PORTA = iport  'Se iguala el registro del puerto A a iport
  21.                 WaitMs 500  'Parada absoluta de 0.5Seg.
  22.                 PORTA = 0  'Todo el registro A a 0 o nivel bajo
  23.                 WaitMs 500  'Parada absoluta de 0.5Seg.
  24.                 iport = ShiftLeft(iport, 1)  'Desplaza el registro iport un bit a la izquierda.
  25.         Next x  'Limite del bucle For
  26.  
  27.         'Control puerto B
  28.         iport = 0  'Imagen puerto es puesto a 0 o nivel bajo
  29.         iport.0 = 1  'Bit 0 de la variable imagen puesto a nivel alto
  30.         For x = 0 To 7  'Bucle, x tomará valores comprendidos entre 0 y 7
  31.                 PORTB = iport  'Se iguala el registro del puerto B a iport
  32.                 WaitMs 500  'Parada absoluta de 0.5Seg.
  33.                 PORTB = 0  'Todo el puerto B a cero o nivel bajo
  34.                 WaitMs 500  'Parada absoluta de 0.5Seg.
  35.                 iport = ShiftLeft(iport, 1)  'Desplaza todo el registro iport un bit a la izquierda.
  36.         Next x  'Limite del bucle For
  37.  
  38. Goto main
  39. End
« Última modificación: 10 de Septiembre de 2012, 11:55:50 por dogflu66 »
Saludos desde Granada, España.

Desconectado yamilongiano

  • PIC10
  • *
  • Mensajes: 37
Re: secuencia de luces rb4 no envia señal
« Respuesta #7 en: 10 de Septiembre de 2012, 13:21:04 »
La gente que me conoce ya sabe que no soy partidario de los simuladores, y el esquema de tu ejemplo me reafirma en mi posición. El esquema que has posteado en la realidad tendría que echar humo por todos lados. Tendrían que estropearse los led o el microcontrolador o todo a la vez. Cómo ya me he referido en otras ocasiones los simuladores son buenas herramientas pero, cuando se utilizan por un novel se necesita la supervisión de un profesor o el seguimiento de los ejercicios de un buen libro, en el que en todo momento se informe al usuario o alumno, las simplificaciones que se realizan en el esquema que el simulador permite pero en la realidad no se pueden realizar (y las consecuencias que sucederían en el caso de realizar la practica en la realidad). En el esquema que expones necesitas resistencias limitadoras en todos los led y también necesitas poner un condensador de desacople lo más cercano posible a la patitas de alimentación del microcontrolador, y esto solo como aplicación básica.

Con respecto al programa, la reestructuración seria más compleja que lo ya has expuesto. ¿Y esto por qué?, pues porque si se sigue un buen libro lo primero que tiene que indicar son los comandos o funciones que no se deben de utilizar en la programación, aunque en los primeros ejercicios se utilicen ya que debido a su simplicidad engancha al usuario o alumno en el tema (crean malos hábitos), pero hay que hacer hincapié que no se utilizan normalmente ya que entran en conflicto con la verdadera programación avanzada, y que según se va profundizando en la programación hay que dejar de utilizar lo más rápido posible he ir derivando a otros métodos.
Para que te hagas una idea te expongo algunos de los comandos y funciones que no se deben de utilizar en un programa, como dicen en por mi tierra “tienes que respetar todas las señales de trafico hasta que tengas el permiso de conducir” porque una vez que tienes el permiso decides asumir los riesgo que conlleva saltarse las normas.

En una buena programación no se deben de utilizar los siguientes recurso porque con el tiempo generaran más mal que bien:

Goto (saltos)
Gosub/Return, menos dañino que los Gotos, pero si el lenguaje tiene otros recursos mejor prescindir de el (saltos).
Waitms (pausas absolutas).

Variables globales, se utilizan, pero no abusar de ellas.

En la rutina de interrupciones o vector de interrupciones siempre que se pueda no colocar códigos muy complejos y no refrescar nunca módulos de control de reset del microcontrolador cómo puede ser el módulo de Wachdog.

Entre algunas más. En el foro hay mucha información sobre este tema sobre supresión de parásitos por software, hardware y buenas costumbres en la programación.


hola gracias por tu ayuda no te preocupes por las resistencias, obvio es un simulador y puedo no implementarlas, para el circuito real las e implementado.

gracias por tu apoyo.

y gracias también por el circuito de dogflu66


 

anything