Autor Tema: Eleccion de segmentos de bits de un Puerto del uC  (Leído 3624 veces)

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

Desconectado ALFREDOSKY

  • PIC16
  • ***
  • Mensajes: 118
Eleccion de segmentos de bits de un Puerto del uC
« en: 06 de Diciembre de 2019, 17:46:17 »
Hola a todos,
una consulta, ¿hay alguna manera de elegir los segmentos de un puerto del uC para sacar info? es decir, supongamos que inicialmente tengo un arreglo de 8x8 bits ó 1x1 bytes con cierta data y lo deseo sacar por el puerto B en paralelo, desde el pin RB0 hasta el RB7, por codigo, haría PORTB=ARRAY[k][j]; pero luego deseo sacar los datos DESDE el pin RB1 hasta el RB7 perdiendo a proposito el dato ARRAY[k][7]; luego desde RB2-RB7, asi sucesivamente, como una especie de corrimiento del puerto, no del arreglo; Es posible aplicar esa técnica, digamos PORTB[RBX-RBY]=ARRAY[k][j]? , porfa estaré atento a sus comentarios, saludos y gracias de antemano. :-/

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Eleccion de segmentos de bits de un Puerto del uC
« Respuesta #1 en: 06 de Diciembre de 2019, 20:01:25 »
Y que estados deben quedar los puertos que van quedando ? es decir cuando vos cargas RB1 a RB7, que estado debe quedar RB0 ?
El dato que usas, es siempre el mismo?

Ej:

PORTB = 0b11001101
PORTB = 0b01100110
PORTB = 0b00110011
PORTB = 0b00011001
PORTB = 0b00001100
PORTB = 0b00000110

O... es un dato distinto cada ves que pensas sacar algo a pesar de hacerlo en los pines RBx a RB7 ?

Intenta ser claro con un ejemplo como el que hice :3, es mas simple saber que queres.
« Última modificación: 06 de Diciembre de 2019, 21:17:17 por KILLERJC »

Desconectado AleSergi

  • PIC16
  • ***
  • Mensajes: 207
Re:Eleccion de segmentos de bits de un Puerto del uC
« Respuesta #2 en: 07 de Diciembre de 2019, 17:23:55 »
me parece que al amigo lo mandaron a aprender a manipular bits....
Yo empezaria buscando info sobre eso, ademas depende  del compilador empleado.

Desconectado ALFREDOSKY

  • PIC16
  • ***
  • Mensajes: 118
Re:Eleccion de segmentos de bits de un Puerto del uC
« Respuesta #3 en: 10 de Diciembre de 2019, 17:14:58 »
KILLERJC gracias por tu respuesta, los estados no usados deben ser ceros, lo que busco es desplazar una matriz hacia abajo, por ejemplo, uso un arreglo donde guardo la letra A

+++**+++
++****++
+**++**+
+******+
+******+
+**++**+
+**++**+
+**++**+

los * representan los 1's logicos, los + representan los 0's logicos, empezando desde arriba uso el puerto RB, desde RB0 hasta RB7; si deseo desplazar hacia abajo, el primer desplazamiento sería:

++++++++
+++**+++
++****++
+**++**+
+******+
+******+
+**++**+
+**++**+

otro desplazamiento:

++++++++
++++++++
+++**+++
++****++
+**++**+
+******+
+******+
+**++**+

el puerto B inicialmente se usa en su totalidad, en codigo sería: PORTB=array[k]

RB0  +++**+++
RB1  ++****++
RB2  +**++**+
RB3  +******+
RB4  +******+
RB5  +**++**+
RB6  +**++**+
RB7  +**++**+

si desplazo para abajo seria:

RB0  ++++++++
RB1  +++**+++
RB2  ++****++
RB3  +**++**+
RB4  +******+
RB5  +******+
RB6  +**++**+
RB7  +**++**+

en esta caso RB0 es cero, el arreglo iría desde RB1 hasta RB7, se perdería el ultimo elemento del arreglo.

Asi de esta manera se recorre el puerto B, inicialmente se usan todos los bits, luego desde el RB1, despues desde el RB2, RB3  siempre hasta RB7 en todos los casos, con esto se lograría el efecto de desplazar la letra A hacia abajo. Sé que se puede lograr el mismo efecto manipulando el arreglo que contiene los datos, pero quiero evitar eso, espero haya quedado un poco mas claro de lo que prentendo lograr.

AleSeri gracias por tu respuesta, si he revisado informacion relacionada, pero parace que lo que deseo hacer no es posible hacerse, no encuentro en ningun lado.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Eleccion de segmentos de bits de un Puerto del uC
« Respuesta #4 en: 10 de Diciembre de 2019, 17:23:58 »
Eso es sencillo...

El array de la A estaria bueno que sea "vertical", es decir
Código: C
  1. char array[8] = {0b00000000,0b00111111,0b01111111,0b11011000,0b11011000,0b01111111,0b00111111,0b00000000};

Luego:

Código: C
  1. for(desplazamiento=0; desplazamiento<8; desplazamiento++)
  2. {
  3.    for(i=0;i < sizeof array; i++)
  4.    {
  5.         PORTB = array[i] >> desplazamiento;
  6.     }
  7. }

La primera vuelta el desplazamiento es 0, por lo que  muestra la imagen como comienza, luego al mostrar todas las columnas , aumentamos el desplazamiento, de esa forma la proxima ves que le muestre vas a tener un 0 al frente (arriba). Y mientras mas lo desplaces mas 0 vas a tener.

Desconectado ALFREDOSKY

  • PIC16
  • ***
  • Mensajes: 118
Re:Eleccion de segmentos de bits de un Puerto del uC
« Respuesta #5 en: 10 de Diciembre de 2019, 17:57:15 »
Hola KILLERJC, entiendo el concepto, me parece que el caso del codigo estas desplazando el elemento i-enesimo una posicion del arreglo, y lo que se debe realizar es el desplazamiento de los elementos del arreglo si no me equivoco; adicionalmente es lo que no deseo hacer, sino ver una alternativa de saar datos en paralelo a traves del puerto corriendo el inicio del pin del puerto. :mrgreen:

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Eleccion de segmentos de bits de un Puerto del uC
« Respuesta #6 en: 10 de Diciembre de 2019, 18:41:53 »
De la forma que pase el codigo sirve para lo que vos me mostraste el ejemplo.  Solo deberia dar vuelta los bits ya que considere el bit7 como RB0 en el array (_lo hice rapido sin mirar demasiado)

Citar
sino ver una alternativa de saar datos en paralelo a traves del puerto corriendo el inicio del pin del puerto.
Entonces no es un paralelo, el paralelo tenes una cantidad fija de lineas, por lo que si queres enviar otro dato simplemente cambias el dato.

Desconectado ALFREDOSKY

  • PIC16
  • ***
  • Mensajes: 118
Re:Eleccion de segmentos de bits de un Puerto del uC
« Respuesta #7 en: 10 de Diciembre de 2019, 18:47:49 »
Muchas gracias KILLERJC, voy a ir probando algunas opciones en base a lo que me has sugerido :-/ , saludos.