PSoC® 1. Cursos de los módulos

Alekvasb, necesito hacer un control de acceso, pero lo mas importante de ese control de acceso es mostrar lo que estoy presionando del teclado en el lcd.... Lo hice pero en un display 7 segmentos, y no se como mandarlo al LCD... Muchas Gracias si me puedes ayudar, el Kyt que utilizo es el CY3210 y el microcontrolador es el CY8C29466 o el CY8C27443..
 
Ok...Asumiendo que ya verificó que está funcionando ok el lcd, por ejemplo con una palabra ..."Hola"En caso contrario...Puede correr esto...LCD_Start(); // Inicializa LCD LCD_Position(0,4); // Posicion LCD_PrCString("PsoC LCD"); // Esto es lo que va a mostrar...LCD_Position(1,2); // cambio de posición.-/*/*/*/*Lo único que tendría que hacer es inicializar el LCD, asignar una posición sino lo quiere en 0.0 y utilizar:LCD_PrString(Var); // donde "Var" es su variable, en la que tiene lo que capturó del teclado, en caso que lo esté almacenado,También lo puede imprimir directamente...LCD_PrCString("1")LCD_PrCString("2");...LCD_PrCString("n");Lo otro es cacharrear, ponerle retardos..LCD_Delay50u;El datasheet del módulo...http://www.cypress.com/?docID=25194Yo tenía ese programita... esperar a ver si lo encuentro../*/*/*/Si quiere mostrar números "grandes" 100-1000 tiene que usar comandos como "itoa" para mostrarlo como decimal, sino lo muestra como octal, (creo)
 
El PSoC Designer 5.0 ya trae incorporado el compilador C. Al crear un 'nuevo proyecto', debes especificar el lenguaje con el que vas a trabajar (si ensamblador o C). Felices Fiestas
 
Hola,

actualmente he empezado a trabajar con psoc porque estoy haciendo un diseño para medir los biopotenciales mediante psoc y visualización por labview. Para la etapa de amplificación de la señal alternas he implementado un 3OP am (amplificador de instrumentación) seguido de un filtro con frecuencia de corte de 30hz.

Hasta aquí bien, pero el problema viene cuando ruteo las salida del filtro a un pin para ver como está la señal amplificada. La ganacia que he configurado es de 93 (ingain=48 y outgain=1,94) y le pongo una señal de 20mV. ¿Por lo tanto, no debería salir por el pin una señal AC como la de la entrada pero de valor 1,86V?

Es que me está siendo imposible visualizarla en el osciloscopico...En cambio, si bajo la ganancia a 2 e introduzco una señal continua de 1 voltio en el pin de salida veo los 2V.

¿Sabéis que es lo que puede estar sucediendo?

¡Gracias por la ayuda!
 
No, estuve mirando lo que adjuntaste y ellos lo hacen diferente como yo lo hice, a lo mejor el método de ellos sea mas rápido en ejecución(lo cual creo que sí), pero bueno yo tengo mi forma de hacerlo :), en el ejemplo adjunto está a configuracion de los pines del teclado y del LCD, con un código bastante, bastante sencillito, casi que no hace nada :LOL:. Creo que con eso ya tienes lo que buscabas.

Buenas tardes a los miembros del foro

Alexander te cuento que monte el proyecto del teclado que mandaste pero no funciono..
No incluiste en el proyecto el documento de puertos h. lo pongo como comentario y me salen los siguientes errores:

Starting MAKE...
creating project.mk
lib/lcd_1.asm
lib/psocconfig.asm
lib/psocconfigtbl.asm
./boot.asm
./main.c
!W F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(28):[warning] declaring a function without parameter prototypes may cause runtime errors.
If there is no parameter, use <function name>(void);
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(28): unrecognized declaration
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(30): unrecognized declaration
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(30): syntax error; found `int' expecting `)'
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(30): missing identifier
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(30): syntax error; found `int' expecting `;'
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(30): syntax error; found `<' expecting `;'
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(30): skipping `<'
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(30): unrecognized declaration
!W F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(30):[warning] empty declaration
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(30): syntax error; found "++" expecting `;'
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(30): unrecognized declaration
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(30): unrecognized declaration
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(30): unrecognized declaration
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(31): unrecognized declaration
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(31): syntax error; found `{' expecting `;'
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(31): skipping `{' `case'
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(32): unrecognized declaration
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(32): unrecognized declaration
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(32): redeclaration of `PRT1DR' previously declared at C:\PROGRA~1\Cypress\PSOCDE~1\5.1\Common\CYPRES~3\tools\include\CY8C29~1\m8c.h(79)
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(32): IO port variable 'PRT1DR' cannot have initializer
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(32): syntax error; found `=' expecting `;'
!E F:\TESIS\PSOC\PRACTI~1\TECLADO\TECLAD~1\TECLAD~1\TECLAD~1\tecla_y_lcd.c(32): too many errors
C:\PROGRA~1\Cypress\PSOCDE~1\5.1\Common\CYPRES~3\tools\make: *** [obj/main.o] Error 1

TECLADO_C - 22 error(s) 2 warning(s) 15:56:37

Si me podrias volver a mandar el proyecto del teclado matricial completo con todos los #include en un .zip o .rar te lo agradeceria mucho..

Exitos para todos... Att: escamusa

Hola a todos...


Qué paso con el tema?, si estos micros son tan completos para trabajar??

voy a subir el código que hicimos para leer un teclado, funciona ok para 3*3, no sé por qué no sirvió para la última fila y columna si el código es el mismo?

El código era para un generador de señales con Psoc...
entonces... en dato queda el caracter capturado...

No dejemos acabar este tema, que me parece demasiado interesante.


@rednaxela, tu nos podrías informar algunas cosas más de la configuración del micro, como los diferentes modos o estados que pueden tener los pines del micro, su función y cositas así, por favor?



Podrias subir el proyecto completo porfavor, el del teclado...
 
Última edición:
No incluiste en el proyecto el documento de puertos h. lo pongo como comentario y me salen los siguientes errores
:confused: Bastante extraño, he descargado el .zip que subí al foro, lo compilo y no muestra ningún tipo de error, solo da una advertencia, pero esa es "normal". También verifique y el archivo puertos.h sí está ahí.
Tú error debe estar en otro lado.

Saludes. ;)

En cambio, si bajo la ganancia a 2 e introduzco una señal continua de 1 voltio en el pin de salida veo los 2V.¿Sabéis que es lo que puede estar sucediendo?

Hmm no sé, te quiero preguntar algo, la señal AC que le introduces al PSoC me imagino que tiene un nivel DC??, osea por ejemplo que si quieres amplificar 2mVac le has agregado un nivel DC a los 2mV por ejemplo de 2.5Vdc ? esto es para que no recorte la señal el uC, porque él fácilmente lo que hace es eliminar la parte negativa y amplifica solo la positiva cuando intentar ingresarle una señal pura AC sin nivel
 
Última edición:
Rednaxela,

gracias por tu pronta respuesta... La verdad es que estoy un "poco" estancada con ésto... :p Tienes razón, probé ponerle un DC de 2,5V a parte de la señal AC, pero aún así no me salía nada...Quizás es problema del RefMux que implementé.
Implementé un RefMux para fijar la AGND a la misma señal que la de entrada, de hecho, el refMux lo tengo ruteado al pin04 y éste conectado con el p06 que es la entrada no inversora del amplificador (entrada masa de la señal AC), y por el p01 es por donde entra la señal AC.

Por lo tanto, con esa configuración, la AGND que PSoC toma, es la de la señal AC ¿verdad?¿ o son los 2,5V de la config (vdd/2+/-Vdd/2) de los parámetros generales? Aún así entiendo que PSoC no admita tensiones negativas y deba ponerle un DC... :(
Pero eso hará que se me sature rápidamente cuando la señal AC aumente.

¡Gracias!
 
Por lo tanto, con esa configuración, la AGND que PSoC toma, es la de la señal AC ¿verdad?¿ o son los 2,5V de la config (vdd/2+/-Vdd/2) de los parámetros generales?
El AGND efectivamente es la configuración que le tienes, en este caso le has puesto vdd/2+/-Vdd/2 (2,5V), te dejo una opción, prueba con el ampli-Instrumentación de solo 2 operacionales y no el de 3 ( que es él que estás utilizando), y prueba que todo funcione bien que amplifique, ajustarle el AGND etc... despues de que todo funcione, intenta hacerlo ahora con el amplificador de instrumentación de 3 operacionales.
Claro está el ampl-Instr de solo dos operacionales no tiene tanta ganancia como el de 3, pero has pruebas con voltajes AC no tan pequeños para que funione como debe ser, también sería bueno que adjuntes en un .zip el proyecto en PSoC Designer, pero solo la pequeña parte del amplificador de intrumentación no todoo el proyecto que haces.

Saludos :)
 
Última edición:
El AGND efectivamente es la configuración que le tienes, en este caso le has puesto vdd/2+/-Vdd/2 (2,5V), te dejo una opción, prueba con el ampli-Instrumentación de solo 2 operacionales y no el de 3 ( que es él que estás utilizando), y prueba que todo funcione bien que amplifique, ajustarle el AGND etc... despues de que todo funcione, intenta hacerlo ahora con el amplificador de instrumentación de 3 operacionales.
Claro está el ampl-Instr de solo dos operacionales no tiene tanta ganancia como el de 3, pero has pruebas con voltajes AC no tan pequeños para que funione como debe ser, también sería bueno que adjuntes en un .zip el proyecto en PSoC Designer, pero solo la pequeña parte del amplificador de intrumentación no todoo el proyecto que haces.

Saludos :)

Hola,

tienes razón, pero quizás me encontraría con el mismo problema de AGND..
Si quiero cambiar el AGND y no utilizar ninguna de las opciones que ofrece en 'global resources', ¿como lo debo hacer?
Añadiendo un bloque RefMux y entrandole la masa de la señal de entrada del generador de funciones ya esataría no? Entonces PSoC trabajaría con un margen de 0 a 5V...
¿O es que está limitado solo a trabaja de vdd/2+/-Vdd/2 y las demás opciones?:unsure:

Merci por tus comentarios!! :p
 
Pues es mejor que no cambies el AGND diferentes a las opciones que nos da el Software, pues para que todas las implificaciones queden simetricas y halla una coherencia, si cambias el AGND pues no va a pasar nada que no se sepa, si lo subes mucho a lo mejor se te va a recortar por arriba la señal despues de amplificada o si lo dejas muy por debajo el AGND entonces se va a recortar la parte negativa, mejor dejalo con los valores standar,
prueba lo con el amp-instr de 2 operacionales, yo le he usado y sale bien

aaaaaaa intenta subir el proyecto al foro, solo la parte del amp-instr

Saludos :)
 
Buenas tardes a todos los miembros del foro

Tengo una pregunta, sigo tratando de hacer el programa del teclado matricial 4x4 en C. Mi pregunta es la siguiente: Como hago para leer algo de un puerto y escribir en una variable lo que tenga ese puerto??..

Gracias si alguien me puede colaborar

O si alguno de ustedes sabe pasar de Assembler a C, porque tengo el proyecto en ASM pero lo necesito es en C...
 
rednaxela Buanas Tardes

Tengo un problema similar al de mlop; yo estoy diseñando un filtro pasabanda de 2 orden (BPF2) con frecuencias de corte entre 20 - 500 Hz para señales Electromiograficas. ya lo configure en el Filter design wizard con una Fcentral de 260 Hz y un ancho de banda de 480 Hz.

La prueba la estoy realizando con un generador de señales (Senosoidal) con su respectivo Offset para que la señal solo quede en nivel Positivo. Sin embargo la señal de salida por el puerto 03 del Psoc no solo no se atenua como debiera esperarse sino que la señal de salida tiene una forma completamente diferentre a la señal original (senosoidal)

Por mas que cuadro la F sample (Frecuencia de muestreo) no he podido solucionar ese problema. y por mas que he buscado, no entiendo como ajustarlo para que la señal sea exactamente igual a la original
 
Tengo un problema similar al de mlop; yo estoy diseñando un filtro pasabanda de 2 orden (BPF2) con frecuencias de corte entre 20 - 500 Hz para señales Electromiograficas. ya lo configure en el Filter design wizard con una Fcentral de 260 Hz y un ancho de banda de 480 Hz.
Generalmente los filtros en el PSoC no funcionan por dos inconvenientes :
1. No se le a agregado el offset a la señal de entrada.( en tu caso ya lo tienes bien ).

2. Porque no se sabe ajustar la frecuencia del filtro, quiero decir el reloj que le llega al bloque del filtro, como te das cuenta el cuadro nos aconseja hacer una division de 519, este divisor de frecuencia esta cálculado automáticamente para una frecuencia de entrada de 24MHz, al hacer la división tenenos 24MHz/519 ≈46.2kHz,
entonces utiliza un timer o un contador o un pwm y lo utilizas como divisor de frecuencia, que te de como resultado 46.2kHz, y esta salida la tomas como el reloj de los filtros.

Hay otro punto, la verdad no se si estos filtros funcionen a frecuencias del orden de 20Hz. :unsure:


Saludos :)

Edit: para que no se te atenue mucho la señal en ese ejemplo deje la ganancia a 1dB (1.122).
Tambien puedes observar que a 20Hz la señal está muyy atenuada , entonces sigue "jugando con los valores, pero tengo en duda que el PSoC funcione para estas frecuencias.
 

Adjuntos

  • FPB.JPG
    FPB.JPG
    64 KB · Visitas: 26
Última edición:
Rednaxela Buenas tardes

Mira hay algo que no tengo claro y es la idea de utilizar un timer o un contador o un pwm para dividir la frecuencia.

Lo que yo estoy haciendo es utilizar los VC1; VC2 Y VC3 para dividir N veces (519) la frecuencia de reloj principal de 24 MHz; es decir: VC1= 16; VC2= 16 ; VC3 Fuente de VC2 = 2

asi me funciona perfectamente en el diseño de filtros pasabajos, pero no en el pasabanda.

Me podrias por favor indicar como dividir esta frecuencia con el timer "Si tiene que ser en codigo (main.c) o en los recursos globales.

Muchas gracias, no sabes lo importante que es para mi esta información. es que es parte de mi proyecto de grado. Una vez culmine lo publicare orgullosamente en este foro

Rednaxela Buenas tardes ¿que pena yo otra vez aquí molestando!

Bueno, me quedo sonando lo del Timer y me leí el capitulo 2 que publicaste. despues de leerlo y configurar mi proyecto en el PSoc me quedaron 2 inquietudes.

1ro adapte el modulo Timer8 a mi proyecto dejando VC1 = 4; VC2 =1 y VC3 fuente SysClk/1 y ajuste el periodo del Timer en 130 para obtener una frecuencia de 46.15KHz. Pero no se si deba tener en cuenta en este filtro lo del Ciclo Útil.

2do Configure el TerminalCountOut en RO0[0] De tal forma que quedara en el puerto 0_0. Lo que no tengo claro es como hacer que esta salida sea la señal de reloj del filtro pasabanda (BPF2) "Debo hacer algo mas o lo dejo así"

Gracias.
 
Última edición:
con respecto a lo del ciclo útil, no importa mucho porque solo es una señal de tiempo para el filtro pero yo siempre lo dejo al 50%, sabes sería bueno que hagas una prueba con el pasa banda, has un filtro a 1kHz pasabanda claro, y mira si funciona bien, es que quiero salir de la duda que funcione si funciona a 20Hz.

Edit: espera te voy a subir un ejemplo adjunto, por ahora no tengo ni osciloscopio ni generador, entonces te tocaría probarlo, voy hacer el pasabanda como de 34Khz y comentas.

Mas tardecito subo el adjunto

Saludos :)
 
Última edición:
Rednaxela Buenos Dias

Listo lo del ciclo util; pero ayer realize las pruebas con el pasabnada y el Timer como divisor de reloj e igual no me funciono; es por que no muestrea a la velocidad que deberia.

Lo que no tengo claro es como se debe hacer para que el filtro escoja la señal de reloj que el TIMER entrega por el puerto 0_0 (TerminalCountOut en RO0[0]).

Aqui te adjunto mi proyecto; te pido el favor lo puedas mirar para saber si me equivoque en algo mas.

Gracias
 

Adjuntos

  • Filtro_2.rar
    209.8 KB · Visitas: 60
Algunas cosas por decir:


-Para que el filtro funcione, como debe ser, la línea verde debe de coincidir con la azul( la azul es la respuesta teórica y la verde es la respuesta esperada de acuerdo a los valores que estamos cambiando), el diseño que has hecho no coincide, solo es cuestión de modificar los diferentes parámetros que ahí hay hasta que coincidan las dos curvas.

-Cuando te dije que el ciclo útil no importaba, te lo has tomado muy enserio y lo has dejando en 0%! hay que dejarlo con algún valor porque entonces no funcionará:).

-No veo donde estas agregando el nivel DC que debe de tener la señal antes de ingresar al PSoC, me imagino que lo estas agregando con un circuito exterior al micro, pero lo ideal sería dejar que el mismo PSoC de la referencia exacta de este voltaje (nivel), por eso lo he agregado con un refmux configurado en "AGND", este refmux nos dará el voltaje AGND exacto que debe tener el señal.

-Para colocar la referencia del timer al filtro... es mejor que mires el proyecto adjunto, me queda difícil explicarlo con palabras, es mas intuitivo si vez como le he hecho en la matriz del PSoC, lo único que se hace es rutear internamente las conexiones.

-La división que el programa aconseja para el diseño del filtro es de 375, entonces 24MHz/375=64kHz, debemos de obtener 64kHz para que el filtro funcione como debe ser, hay es donde un módulo timer entra a jugar como divisor de frecuencia, si selecciono el reloj del timer en SysClk*2 (porque yo quise) es decir 24MHz*2 = 48MHz, entonces el periodo del timer debe se de 750 ( 48MHz/750 = 64kHz)


-Como podrás mirar puse dos entradas,una entrada positiva y otra negativa, eso quiere decir que conectes la señal que vas a filtrar directamente ahí, esto es; que no va a estar con la misma tierra en común por lo antes dicho del nivel DC.

Pd: si vas compilar este proyecto, te va arrojar un error porque yo utilizo un compilador diferente al tuyo, solo es cambiar el tipo de compilador para que te corra bien.



Saludos.
 

Adjuntos

  • Filtro_2.1.zip
    1 MB · Visitas: 61
Última edición:
Buenos Días Rednaxela

Primero quiero agradecerte por que fue de gran ayuda toda la información que me brindaste. es bueno encontrar colegas que ofrezcan sus conocimientos de manera tan oportuna y desinteresada.

Quería ademas comentarte que el filtro funciono muy bien con la señal biológica (EMG) a pesar que la teoria recomendaba un filtro pasabanda de 20 a 500 Hz.

Te digo a pesar, ya que por mas que ensaye estos 2 dias, no pude bajar la frecuencia inferior a menos de 100 Hz. es lo minimo que permite el Psoc antes de bloquearse.

Nuevamente te agradezco. y envio adjunto el filtro Pasa banda finalizado
 

Adjuntos

  • Filtro Pasa Banda.rar
    575.1 KB · Visitas: 73
Atrás
Arriba