TODOPIC
Microcontroladores PIC => - Niple - => Mensaje iniciado por: electronicawalter en 19 de Enero de 2015, 16:54:17
-
hola amigos soy medio nuevo en todo esto de la programacion de pic aunque ya hice varios proyectos y me han salido re bien pero me falta mucho por aprender sobre estos maravillosos dispositivos ,en esta ocasion deseo manejar una matris que posee un procesador ht1632 ,por lo que vi en la hoja de datos nesecito 3 señales :cs,wr,y data a su vez si no me equivoco wr es una señal de clock de escritura si alguien por favor me da una mano quiero generar esa señal de reloj pero me cuesta ya que el tiempo entre fklanco es de 2 microsegundos y lo quiero hacer con niple , ya he probado con el timer 0 pero no me da ,desde ya muchas gracias.
-
te aconsejo hacer los programas para escribir un comando / escribir un dato y luego vas agregando mas, al menos 1 dato por vez.
En la hoja de datos tenes como son los ciclos, tambien tenes la velocidad maxima que se puede escribir en alguna parte del datasheet, que sea mas lento va a hacer que se actualize mas lento la matriz,
luego podes optimizarlo lo mas que puedas.
a 20mhz = 0.2us por instruccion
tenes 20 instrucciones entre cada flanco
-
hola gracias por tu tiempo, vos sabes bien como funciona el ht 1632 ? yo he leido la hoja de datos pero hay cosas que no entiendo quisiera que me expliquen si la parte donde dice timing diagrama solamente para encender un led en una x posicion de memoria yo en realidad tengo que realizar una rutina para la parte writen comando solamente? y nesecito tres señales la de clock la de cs y la de data corrijanmen por favor si alguien llo entiende bien porque tengo muchas dudas yo en realidad compre una matriz de sure electronics la cual trae 8 de esas matrices y cuatro ht 1632 , se que es un integrado relativamente nuevo y en la hoja de datos si vien hay ejemplos con explicaciones hay cosas que no logro entender muy bien ,si me dan una mano agradecido,desde ya muchas gracias perdon si no me se explicar bien .
-
Yo no se bien como funciona el integrado pero es solo cuestion de mirar el datasheet y leerlo
Necesitas 4 señales RD , WR , CS y DATA ( para escritura solo 3, CS WR y DATA )
Los mismos pines RD y WR actuan como clock, si observas en cada flanco positivo es el valor tomado por el integrado ( por eso la flechita ).
De querer prender un led en especifico usaria el diagrama: "WRITE Mode - Command Code=101"
Por ejemplo salida 3 ( Out3 ) y Com2, la direccion de la RAM es 06H configurado como ( 32 Outbits & 8 Common for 64x4 Display RAM )
Entonces mandarias ese comando 1 0 1 + direccion (0000111) + Dato ( 0100 )
De querer modificar como se organiza la RAM y como estan configuradas las salidas y los comunes usas el diagrama de " Command Mode - Command Code=100"
Command Name: Commons Option
Command Code: 1000010abXXX
Con:
ab=00: N-MOS open drain output and 8 common option
ab=01: N-MOS open drain output and 16 common option
lo mismo para 10 y 11 nomas que son P-MOS
hay una pequeña tablita que tiene 3 comandos nomas. Una para apagar todas las salidas y otro no se si es para encender todo o simplemente activar las que tengan un 1 en la RAM (Imagino que este ultimo es el caso ).
Con respecto a los tiempos WR/RD el ciclo del clock es minimo 1us para escritura y 2us para lectura ( Sacado de donde esta A.C. Characteristics). Asi que tenes que tener en cuenta eso cuando haces el programa para no encender y apagar la salida WR o RD muy rapido.
O... podes usar el SPI si solo vas a escribir. Con un CS hecho por software o por hardware, el clock vendria a ser WR y DATA tu salida de datos.
De quere escribir VAARIOS datos te fijas que lo podes hacer si no levantas CS, es decir lo dejas en 0 y seguis enviando datos, solo marcas la posicion inicial de la RAM y empezas a llenar todo.
-
muchisimas gracias por responderme ,entonces nesecitaria 3 señales no 4? porque la señal de clock de lectura no la nesecitaria o si ?y si lo hiciera con niple primero tendria que generar la señal de clock wr que es de 2 microsegundos con un cristal de 20 mhz se puede?perdon si jodo mcho con esto pero quiero entender bien como funciona gracias
-
Si no vas a leer de la RAM del ht1632 entonces no vas a usar RD, fijate en los diagramas que en ninguna escritura se usa el RD.
O lo podes hacer mediante software( es decir poner a 1 WR esperar 0.5us poner a 0 WR , etc etc etc etc )
o
Usando el SPI ( Donde el clock seria tu WR ), aunque te puede resultar mas intuitivo el primer caso. EDIT: Ahora que lo veo puede que sea complejo realizar este caso por la cantidad de bits a enviar.
A 20Mhz, el micro ejecuta una instruccion cada 4 / 20Mhz = 0.2uS
sabiendo que tenes que poner el dato en tu pin DATA, esto llevaria una o mas instrucciones en ASM, + modificar el pin WR, haria que como minimo un tiempo de 0.4us pero lo mas seguro es que sean mas instrucciones lo cual estarias al alrededor de 1us.
-
muchas gracias con todo esto que me explicaste algo va a salir ja ,voy a ponerme a practicar y luego te comento como me fue,un abrazo..
-
Una cosa mas, como casi todos los drivers, usualmente hacen 2 funciones
1- Escribir un dato
2- Escribir un comando
Aunque si te das cuenta por debajo es lo mismo, asi que estos podrian depender una tercera funcion que envie los datos y cambie los pines WR/DATA
Mientra que las funciones esas solo le dan la "direccion", el "dato" y el "comando" a esta tercera.
-
entonces puedo ir escribiendo todos los datos en el ht 1632 y este me los va mosrando tal como los voy mandando o tengo que mandar con uno con su respectiva direccion obvio y esperar un tiempo y despues el que sigue?y otra cosa mas
yo tenia pensado escribir en el programa principal de niple los datos y con el timer 0 generar la señal de clock pero no me da el tiempo entonces yo pensaba eescribir un pulso de señal de reloj y luego ir intercalando los datos un clock y luego un dato va en realidad son dos clock y un dato vos decxis que se podra yo ya estube probando y simule el programa que yo habia hecho con el isis y con el osciloscopio las señales me quedaron bastante bien vos que opinas o hay otra forma de hacer el clock?
-
yo lo hice con el pic 16f876A
-
No es necesario esperar un tiempo para mandar otro dato, incluso si pensas llenar completamente la RAM empezarias mandando la direccion 00 y luego mandas unicamentes datos como se ve en "WRITE Mode Successive Address Writing"
La unica diferencia entre ese y el que escribe un dato a la vez es que cambia el estado de CS, pero si mantenes CS en bajo entonces podes seguir mandando datos. Y no hace falta mandar la direccion de los siguientes ni comando.
Si te anda bien tu programa entonces segui con ese. Aunque estoy mas que seguro que el timer/contador no es para eso. Por que muchas veces no lo podes parar como es el caso del 16F876A, o si Nipple agrega una instruccion de mas mientras envias los datos por ejemplo, haria que el dato fuera erroneo (ya que no cambiaria DATA para cuando el clock cambia, repitiendose el valor viejo de data), aunque podrias ser cualquier cosa lo erroneo, dato, comando, o direccion. Pero si tomaste las precauciones de que eso no ocurra o no hay forma que en tu programa eso ocurra, entonces esta bien.