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

Temas similares

22/02/2014 #1


Programa incomprendido!
Hola buenos días , a realizar uno de mis proyectos me e encontrado buscando información sobre el programa que utiliza , encontrada esta programación tengo alguna duda ,dado que de programación se lo básico , agradecería que alguna persona me detallara los puntos que señalo a continuación.
Código:
void ModulRdWr(unsigned char *data)--------TODO ESTO ESTA COMPRENDIDO----
/*puts the pattern in the module and reads out the interaction---------------
buttons*/---------------
{
unsigned int i,j;---------------------
unsigned char outdat,indat;---------------------
unsigned char tmpCurPos=0xff;-------------------ENTIENDO QUE ES UNA DIRECCIÓN DE MEMORIA?
/*send pattern to shift register*/
STROBE_L;-------------------------------(STROBE_L)ES UNA VARIABLE DECLARADA ANTES , PERO QUE HACE HAY ASÍ PUESTO?
for (j=0;j<AnzModule;j++) //for all Modules
{
outdat =*(data+AnzModule-j-1);
for (i=0;i<8;i++)
{
CLK_L;------------------------------(LO MISMO QUE ANTES CON STROBE_L , NO SE QUE FUNCIÓN DESARROLLA)
if (outdat & 1) //Dataoutput
DOUT_H;-------------------------IGUAL !
else
DOUT_L;------------------------------- IGUAL!
outdat>>=1;
wait(); //short delay to limit speed
CLK_H; wait();
}
}

¿Pregunto , strobe_l , clk y demas son llamadas a funciones? ...
22/02/2014 #2

Avatar de ByAxel

Hola:
Está orientado a microcontroladores? si entonces...

unsigned char tmpCurPos=0xff; // Solo está inicializando una variable local...
STROBE_L; // Si es solo variable no tiene sentido, pero si está declarado con #define por ejemplo trabaja como Macro... es decir si por ejemplo está asi:

Código:
#define STROBE_L PINnn = 0 //Basta con llamar a STROBE_L para que PINnn sea cero.
Igual para el resto smilares.

Saludos.
22/02/2014 #3


respuesta
Código:
#define CLK_H P3|=1
#define CLK_L P3&=~1
#define DOUT_H P3|=2
#define DOUT_L P3&=~2
#define STROBE_H P3|=4
#define STROBE_L P3&=~4
#define DIN P3&0x08
void ModulRdWr(unsigned char *data)
/*puts the pattern in the module and reads out the interaction
buttons*/
{
unsigned int i,j;
unsigned char outdat,indat;
unsigned char tmpCurPos=0xff;
/*send pattern to shift register*/
STROBE_L;
for (j=0;j<AnzModule;j++) //for all Modules
{
outdat =*(data+AnzModule-j-1);
for (i=0;i<8;i++)
{
CLK_L;
if (outdat & 1) //Dataoutput
DOUT_H;
else
DOUT_L;
outdat>>=1;
wait(); //short delay to limit speed
CLK_H; wait();
}
}
STROBE_H;
wait();
for (j=AnzModule;j!=0; /*read interaction button*/
{
indat=0;
for (i=0;i<2;i++)
{
wait(); //short wait to limit speed
CLK_L; wait();
indat<<=1;
if (DIN) /*Data in*/
indat|=1;
else
Indat&=~1;
CLK_H;
}
j--; //next Mod
CursorPattern[j]=indat;
if (indat) /*interaction button pressed*/
{
if (indat &1) /*Front Switch*/
tmpCurPos=j;
else
tmpCurPos=j+100; /*Back = position +100*/
}
CursorPos=tmpCurPos;
}
CLK_L; STROBE_L;
}
Ahí está el código completo con las declaraciones, la verdad he comprendido tu respuesta, pero viendo el código de nuevo me surgen nuevas dudas.
¿Qué es el símbolo que parece corriente alterna en los defines?
22/02/2014 #4

Avatar de ByAxel

tecka1 dijo: Ver Mensaje
que es el simbolizo que parece corriente alterna en los defines?
Está negando el valor a nivel de bits (complemento a 1).

Ejemplo de un valor binario: 0011001 el complemento a uno (~) es 1100110...
22/02/2014 #5


arduino
La verdad que me gustaría traducirlo a el lenguaje de arduino y no se por donde empezar.. si alguien me pudiera echar una mano se lo agradecería!
22/02/2014 #6

Avatar de Nuyel

Que microcontrolador era?
no necesitas cambiar al lenguaje Arduino, solo cambiar los nombres de registros, por ejemplo del pin 8 a 13 en Arduino UNO corresponden a PORTB, ahí cambias P3 por PORTB, ahora los números siguientes son valores de los bits, 1 sería para el D8, 2 para el D9, 4 para el D10, 8 para D11, DIN es un enmascaramiento del bit3 en P3, sería D11 como entrada, tienes que inicializar el puerto agregando DDB = 1+2+4;

P3|=1 se puede cambiar por digitalWrite(Pin_para_CLK, HIGH), P3&=~1 lo puedes sustituir por digitalWrite(Pin_para_CLK, LOW), los otros dos son igual, ahora adelante donde dice DIN es un enmascaramiento del bit 3, su valor si es verdadero es 8, pero aquí lo puedes sustituir por digitalRead(Pin_para_DIN), claro que tienes que declarar el pinMode de cada uno.

Ahora para que te quede claro investiga los operadores a nivel de bits para que entiendas como se manejan esas macros.

Nota: Hay otras variables ahí que no están definidas.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Arduino y Raspberry Pi

Cerrar
Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi

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