Usando GPIO en Altera

0

Estoy tratando de probar la funcionalidad GPIO de Altera (DE1, Cyclone II) con este sencillo programa.

Si GPIO_0 [0] recibe una señal alta (1), LEDG [0] se encenderá. Si recibe una señal baja (0), LEDG [0] se apagará.

Para la señal de entrada, estoy afirmando 5 y 0 V DC .

Aquí está mi código:

module gpio_test (CLOCK_50, GPIO_0, LEDG);
input   CLOCK_50;
input   [35:0]  GPIO_0;
output  [7:0]   LEDG;

reg [7:0] LED;

assign LEDG = LED;

always @ (posedge CLOCK_50)

if (GPIO_0[0] == 1) // if GPIO received a high signal
    LED <= 1; // turn LED on
else if (GPIO_0[0] == 0) // if GPIO received a low signal
    LED <= 0; // turn LED off

endmodule 

El problema es que parece que GPIO_0 [0] siempre está recibiendo una señal alta (aunque afirmo una señal alta o baja) porque el LED está siempre encendido. Suponiendo que mis asignaciones de pines son correctas, ¿qué salió mal?

    
pregunta ellekaie

3 respuestas

1

Lo más probable es que el problema sea la asignación de pines, asegúrese de que estén asignados correctamente. La publicación de la asignación de pines aquí podría ayudarnos a encontrar el problema.

De todos modos, pruébelo sin reloj y háganoslo saber.

module gpio_test (CLOCK_50, GPIO_0, LEDG);
input   CLOCK_50;
input   [35:0]  GPIO_0;
output  [7:0]   LEDG;

assign LEDG[0] = GPIO_0[0];

endmodule
    
respondido por el Xedar
0

Lo siento por publicar esto tarde. He terminado el proyecto en el que estoy trabajando hace meses. El código anterior funcionó, no hay nada de malo en mi código y en las asignaciones de pines. El problema está en mi conexión de hardware.

Durante mis pruebas, en las que usé el código anterior, conecté el pin GPIO para la entrada a un LDR (resistencia dependiente de la luz). Dicho esto, dado que la salida de LDR no es realmente digital , la entrada GPIO no está recibiendo las señales adecuadas. Es por eso que no está produciendo el resultado deseado.

Entrada de basura, salida de basura.

El código anterior funcionó cuando introduje Arduino para que funcionara como mi ADC.

Agradecería que alguien respalde mi explicación de una manera más técnica.

    
respondido por el ellekaie
0

Teniendo en cuenta su respuesta propia, el problema fue la señal de entrada que no tenía los niveles lógicos adecuados.

Un enfoque típico para tratar señales con ruido significativo, niveles de voltaje intermedios o bordes lentos es usar un disparador Schmitt. Esos están incorporados en la mayoría de los MCU, especialmente en los pines digitales Arduino y Raspberry Pi GPIO, por lo que a menudo los aficionados los perciben como algo dado.

En los FPGA, los activadores de Schmitt a menudo no se implementan porque evitarían que los pines se usen a su velocidad máxima con las señales digitales adecuadas. Si los necesita, puede elegir un FPGA que los tenga (en el caso de Altera / Intel que serían dispositivos MAX II y MAX V), o agregar un disparador Schmitt externo o ADC IC.

    
respondido por el Dmitry Grigoryev

Lea otras preguntas en las etiquetas