Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

04/07/2015 #1

Avatar de JCAK

MSB y LSB ¿Cómo debería modificar el código?
Hola, amigos.

¿Alguien me podría ayudar y decir cómo debería modificar este código para enviar los datos como MSB o como LSB ?

En la forma actual el dato 0x880A se me modifica y obtengo 0x8A80, pero no logro ni MSB ni LSB

Código PHP:
while(1)
    {
          
data 0x880A;
        
          for (
uint8_t i 160i--)
  {
               
Pixel_PORT&=(~(1<<Pixel_SCK));            // SCK low
               
if (data 1Pixel_PORT |= (1<<Pixel_DOUT);    // Data High
               
else Pixel_PORT &= ~(1<<Pixel_DOUT);        // Data Low
               
Pixel_PORT|=(1<<Pixel_SCK);            // SCK high
               
data >>= 1;                    // shift
          
}
    } 

Muchas gracias.
04/07/2015 #2

Avatar de TRILO-BYTE

no entendì que quieres hacer exactamente

0x880A hacer separar 88 y 0A si girarlos A0 88
o moverlos de lugar 8A 80

explica mejor con otras variables como 0x12AF ninguna se repite y asi hace mas didactica la explicacion

usa mascaras logicas para hacer la separacion eso te puedo decir pues no te entendi mucho
05/07/2015 #3

Avatar de JCAK

Hola TRILO-BYTE

Perdónsi no fui claro con mi explicación.
Lo que quiero hacer es enviar 16 bits de manera serial, acompañado de una señal de clock. Una salida del micro envía datos y otra salida la señal de clock. Es para usarlo como SPI pero por software, y quiero poder elegir si lo hago en el orden MSB o LSB. ¿Se entiende, espero que si o lo repito de otro modo?

Gracias por tu ayuda.
05/07/2015 #4
Moderador

Avatar de D@rkbytes

Hace tiempo realicé algo similar para controlar un CI 74HC595, pero a 8 bits y con PIC C Compiler de CCS.

Modifiqué el proyecto a 16 bits para mostrarlo como ejemplo y tal vez sea lo que quieres realizar.
También le agregué a la rutina la posibilidad de seleccionar enviar MSB o LSB primero.

Si el ejemplo es como lo que quieres hacer, entonces podrás adaptarlo a tu entorno, o darte una idea.

Suerte.
Archivos Adjuntos
Tipo de Archivo: rar 16F628A Shift_Right y Shift_Left.rar (32,8 KB (Kilobytes), 13 visitas)
05/07/2015 #5

Avatar de TRILO-BYTE

claro que es posible enviar 8,16 ,24,32 ,64 ,etc.
lo que tambien es posible enviar hasta PWM en los 74hc595 claro todo es por software

lo que debes hacer es lo siguiente

hacer una funcion que envie 8 bits al registro de corrimiento

void _74hc595 (char dato)
{
//algoritmo
return dato;
}


y lo que hay que hacer despues es enviar 8 bits y despues los otros 8 bits todo eso jugando con el latch o el enable

ejemplo

char puerto1
char puerto2

puerto1=0xFF ;
puerto2=0xCE ;
//habilitamos el 595
LATCH=0;

_74HC595(puerto2);
_74HC595(puerto1);

LATCH=1;
//deshabilitamos el 595


y asi envie solo 8 bits 2 veces la idea es solo enviar 8 bits y si lo enviamos nuevamente el dato es empujado al otro registro

es decir podemos enviar las vecces que quieras un dato solo usando un char

el algoritmo lo tienes que pensar TU
05/07/2015 #6

Avatar de JCAK

D@rkbytes muchas gracias, con el ejemplo que me enviaste pude resolver mi problema.

Me faltaba usar el dato correcto en donde tu pones 0x8000 y 0x01 según el modo elegido, además de considerar la orientación del desplazamiento << o >>

Luego retoque un poco un par de lineas para emprolijar mi código pero sigo manteniendo el que puse al comienzo de mi consulta y funciona bien.

Muchas gracias
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.