Arduino "shiftOut()"

Hola buenas tardes! he estado trabajando con arduino y su función para trasmitir datos serie shiftOut() junto con un registro de desplazamiento, la propia función genera una secuencia similar a esta:
CLK-->HIGH "dato 0 ó 1" CLK-->LOW.
Mi problema viene cuando el registro de desplazamiento requiere por sus características técnicas que la secuencia de datos sea esta..
CLK-->LOW "dato 0 ó 1" CLK-->HIGH.
Osease al contrario.
buscando encontré esta referencia a mi problema : Note: if you\'re interfacing with a device that\'s clocked by rising edges, you\'ll need to make sure that the clock pin is low before the call to shiftOut(), e.g. with a call to digitalWrite(clockPin, LOW).

que la encontré en la pagina principal de arduino buscando shiftOut()
(siento no poner el link directo pero no me deja la pagina poner links)


El tema es que no se interpretar bien lo que me pide, tengo que colocar delante de la función shiftOut() un digitalWrite(clockPin, LOW).?? ...
 
No se que es lo que estás haciendo.
¿A que circuito va eso conectado?
¿Es para hacer comunicación serie asíncrona?

Edito, me parece que es síncrono. No sabría decirte, sólo he usado el spi hardware.
 
Última edición:
el SPI a hardwares es simple de usas en el arduino supongo que con una mato atada y los ojos vendados es facil.

en otro lenguaje si tiene un poco mas de complicacion hay que definir el pin latch o enable y los pines clock y data -out y data- in ya estan definidos.

debes indicar si es un clock iniciando en flanco de subida o bajada.

en cambio en SPI a software es tan simple como complicado todo esta en el algoritmo de enviar un dato por cada clock

digamos que enviamos 00110011 debemos ir empujado nuestro dato a un solo pin por cada clock.

la ventaja de un software al hardware esta en que podemos mapear los pines que querramos en un micro ò usar spi en un micro sin spi a hardware
 
Si yo también creo que es sincrono, el dispositivo es HV513 ahora te cuelgo el el datasheet, el caso es que probé introduciendo yo los datos manualmente sin usar función. osease: digitalWrite(Pin_reloj,HIGH).... así con todos y funcionaba de la manera que te he comentado:

CLK low
LE low
Dato valido
CLK high
LE high

la cosa es hacer que la función shiftOut trabaje de esa forma.



Entonces TRILO-BYTE teniendo en cuenta que mi dispositivo funciona en flancos de subida del reloj este seria el codigo??

digitalWrite(Pin_activacion, LOW);

digitalWrite(Pin_reloj, HIGH);
shiftOut(Pin_datos,Pin_reloj,MSBFIRST,hola);

digitalWrite(Pin_activacion, HIGH);
digitalWrite(led,HIGH);
 
Última edición:
No se exactamente que es lo que deseas hacer, pero espero que lo siguiente te sea de utilidad, ese es ejemplo basico usando la funcion "shiftOut", para un registro 74ls164.

Código:
//Ejemplo Basico para registro 76ls164
//Usando Arduino UNO

int datos = 3;
int reloj = 2;
int tiempo = 200;


void setup() {
 pinMode(datos, OUTPUT);
 pinMode(reloj, OUTPUT);
 

}

void loop() {
  
    shiftOut(datos, reloj, LSBFIRST,0b11001100);
    delay(tiempo);
 
}

En este manda el byte y quedan encedidos los leds tal cual como estan en 0b11001100, es decir 4 encendidos y 4 apagados,no especificaste que registro estas usando, si nos compartes tu codigo y tu diagrama te podriamos ayudar mejor, saludos
 
Hola
Hola chicos, alguien sabe si se puede controlar la frecuencia del reloj de la función shiftout()?

Ya revisaste el código detrás de shiftout()?... ciertamente no tiene donde controlar la frecuencia ya que los cambios lo va hacer tan rápido como escriba digitalWrite().

Hacer más lento, si se podría, tendrías que hacer una copia del código interno de shiftout y agregar líneas de código adicionales entre cada digitalWrite()... olvida de usar delay, me refiero a usar una instrucción a bajo nivel como el "nop" que dura unos nanosegundos.




Y ya buscaste alguna librería aparte que ayude en eso?

Saludos
 
Hola chicos, alguien sabe si se puede controlar la frecuencia del reloj de la función shiftout()?
si te hiciste esa pregunta, es porque el entorno ARDUINO ya no te soluciona tu necesidad, tené en cuenta que está pensado para introducir estudiantes en éste mundillo y para acelerar desarrollos.

Deberías molestarte en aprender a programar los micros AVR directamente en C, desde allí, tenés acceso a los recursos más bajos del micro, p.e. elegir la velocidad de transmisión del módulo SPI.
 
Atrás
Arriba