TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: Enigma en 01 de Enero de 2008, 21:06:19
-
Hola, Como están? una preguntica, como se conecta cualquier RTC a un pic??.... por ejemplo, si tengo un pic, una memoria y un RTC todo esto para registrar cualquier evento, que se yo, una perturbación en el voltaje por ejemplo?... como pasan los datos a la memoria?, corrijanme si estoy mal...
El pic recoje los datos del voltaje, mientras que el RTC está contando sus datos de fecha, hora, minuto, segundos y todo eso... Ahora cuando el Pic lo indique le dice que mande los datos del RTC a la memoria??? es así??? o los datos del RTC primero pasan al pic y luego del pic a la memoria...??? como es??
Atte: Enigma... La llanerita de Guayana :D
-
los RTC trabajan por el bus I2C y las memorias seriales tambien manejan ese bus, ahora para lo concreto de saber en que hora se produjo una alteracion del voltaje deberia ser algo asi: lo haces por interrupciones, cuando se produsca una alteracion en el voltaje que es sensado y llevado al pic por el adc interno de este( o si prefieres puedes usar un adc externo) el pic guarda el valor del voltaje en un registro interno, luego lee la RTC para saber el momento en que produjo la alteracion de voltaje, lo guardas en otros registros internos y despues la informacion lo vaceas a la memoria externa y listo y el ciclo se repite. espero haber despejado en al go tus dudas. :mrgreen: :mrgreen:
-
existen memorias y RTC's que usan tanto I2C o SPI (que son protocolos para comunicaciones seriales), talvez exista algun otro protocolo entre dispositivos pero no estoy tan al tanto, o se me olvidaron mencionarlos, jeje esta el rs232 pero este es asincrono, a comparacion de estos dos que son síncronos.
En cuanto a I2C se tiene dos modos de trabajo como Maestro (Master) o Esclavo (Slave), el Maestro da las ordenes y el Esclavo obedece y da su respuesta o hace un determinado trabajo, en este caso un RTC o una memoria no puede ser maestro, en realidad me animo a decir que nunca pueden serlo (corrijanme si me equivoco)
entonces, no puedes mandarle directamente la hora a la memoria, y tampoco la memoria puede decirle al RTC que le de la hora, esto lo hace un Maestro, el PIC en nuestro caso, el será el encargado de pedirle al RTC (que sera el esclavo) la hora y darle un dato o leerlo de la memoria (que será tb un esclavo) cuando ocurra algun evento exclusivo, o cuando tu quieras, digamos cada hora, o según sea necesario.
entonces siempre existira un Maestro y uno o mas Esclavos (que comparten el mismo bus), y se usan dos pines para la transmisión (tx) y recepcion (rx) de datos
En el caso del SPI, solo existe un master (que será tb el PIC) y un esclavo (que será una memoria SD, MMC, EEPROM o algun otro dispositivo que soporte el protocolo), si quieres usar dos dispositivos SPI cada uno tendra su propio bus conectado al Maestro; y utiliza 3 pines para la tx y rx de datos, pero la ventaja que tiene es que puede usar velocidades de transmisión mayores que las de I2C
para mejores datos sobre ello puedes ver un poco por aca (http://www.geocities.com/micros_uan/cap47.html) o en el google :mrgreen:
un saludo
-
Ahhh, o.k entiendo, pero importa el tipo de comunicación ya sea serial o paralela, el maestro simpre será el pic no?, es decir, el pic le ordena al RTC que envie los datos a la memoria y también le ordena a la memoria que reciba los datos del RTC no es así??... pregunto el tipo de comunicación porque usaré una memoria que tiene un tipo de comunicación paralela...
Atte: Enigma... La llanerita de Guayana :-/
-
La expresión exacta es el micro lee los datos del RTC y lo escribe en la memoria. Los datos siempre han de pasar a través del micro.
Un saludo
-
Ahhh ya!!!! eso era lo que queria saber, pensaba que los datos del RTC nunca pasaban por el micro.... Ahh! ya entonces, el pic ordena le ordena al RTC que le mande sus datos, luego el pic manda a habilitar la memoria, luego el pic le envia los datos del RTC a la memoria...? entendi bien???
Atte: Enigma... La llanerita de Guayana :-)
-
Correcto. Los periféricos (memorias, RTC, etc) son dispositivos de lectura y escritura, con lo cual solo se puede leer sobre ellos y escribir sobre ellos. La memoria nunca podría leer el RTC por no ser "inteligente", solo se puede escribir y leer sobre ella (el micro), y lo mismo se podría decir del RTC.
Un saludo
-
Muchas gracias!!!! Mi duda ha sido despejada!!!! Son los mejores! :mrgreen:
Atte: Enigma... La llanerita de Guayana :D
-
Disculpen, otra pregunta más, y disculpen li ignorancia :? es que nunca he trabajado con un RTC... Aja, me dijeron que los datos del RTC pasan al pic no? por un puerto??... Ahora como dichos datos del pic pasan a la memoria...? Por donde pasan hacía ella?
En pocas palabras pues,,,, como los datos de fecha del RTC quedan grabados en la memoria?
Atte: Enigma... La llanerita de Guayana :(
-
Hola Enigma. SI la comunicación es por I2C, se utiliza el mismo puerto para leer y escribir cualquier dispocitivo. Primero el PIC envía un nombre que es único en los dispositivos conectados, entonces solo va a responder ese dispocitivo y lo demás no hacen caso. Entra aquí (http://es.wikipedia.org/wiki/I%C2%B2C) para más detalles.
-
Lo que pasa es que tanto el RTC y la memoria son paralelas no serial.... Por eso es que pregunto, Porque no puedo usar ni I2C ni SPI, porque son protocolos seriales!!! Por eso pregunto como van a pasar los datos del RTC contenidos en el pic a la memoria???
Atte: Enigma... La llanerita de Guayana :D
-
Podras poner los datos del RTC y la memoria, a ver si podemos ayudarte?? :mrgreen:
-
Si con los datos te refieres al datasheet de cada uno, pues aquí lo tienen!!!!! :D
este es el RTC....
Atte: Enigma... La llanerita de Guayana :o
-
Y está la memoria!!1
Atte: Enigma... La llanerita de Guayana :D
-
Hubieras comenzado por ahi, la RTC y la memoria que piensas usar son paralelas, estas se usan generalmente con uP, pero se podria usar con uC. Habra que hecharle una mirada mas detenida al datasheet :mrgreen: :mrgreen:. Es que cuando mencionan RTC o memoria externa, la mayoria piensa en el I2C :mrgreen: :mrgreen: :mrgreen:
Despues de leer los datasheets
Es necesario trabajar con estos dispositivos paralelos?, para manejar la memoria necesitas 18 pines para el bus de direccion y como minimo 8 pines para el bus de datos aparte de los pines de control, y con la rtc la historia es parecida, lo bueno de esta memoria es su velocidad de escritura y lectura, pero dependiendo de cuan critico sea el tiempo para ti, a mi parecer para la aplicaion que pretendes hacer estos dispositivos son demasiados, a mi punto de vista quieres matar moscas con cañones :mrgreen: :mrgreen:. Pero si deseas hacerlo de todas maneras con estos dispositivos, entonces tendras que tener en cuenta la cantidas de pines para gobernar a ambos, para el bus de datos, en ambos puedes usar todo un puerto del pic que sea de 8 pines y puedes ponerlos en paralelo ya que los dos tienen pines de contol como el /CS, lo que te permite selecionar entre un dispositivo y otro, ahora conlas direcciones, si no deseas usar toda la memoria , puedes usar 5 pines para direccionar ambos dispositivos, y luego necesitarias como otros 5 pines para el control de ambos. Como veras, estos dispositivos estan mas pensados para trabajar con uP, hasta en su datasheet lo dicen:"The MM58167B is a low threshold metal gate CMOS circuit that functions as a real time clock in bus oriented microprocessor systems"(para el RTC), Espero que mis comentarios no te desanimen :mrgreen: :mrgreen: solo es para que tomes uan desicion con respecto a si usas paralelo o serial :mrgreen: :mrgreen:, si lo vas a hacer como joby esta bien, tomara su tiempo pero se llega a realizar, pero si es para algo un poco mas alla, entonces hay que meditarlo mucho :D :D
-
Si tienes un PIC16F877 puedes usar el puerto paralelo para leer y escribirlos en modo microprocesador, creo, yo nunca lo hice pero no debe ser muy dificil... :mrgreen:
-
Hola... jajaja por eso les dije que los protocolos de i2C y SPI no me servirian, bueno no usare el 877, usare el 4550, y la verdad si es necesario usar estos componentes, porque la aplicación me lo requiere...
Las razones por las cuales tengo que usar ese RTC, es porque me cuenta ms, es más se me quedo corto porque necesito contar uS, pero eso lo resolvere con el pic y un cristal de 20MHz.... y lo de la memoria, porque tiene gran capacidad, es decir son 512Kbytes, es más tengo que usar 4 de esas porque voy a hacer un modulo de expansión de 2M aproximadamente!, además que es ferromagnetica, esto hace que su cantidad de lectura y escritura sea casi infinita!!! lo unico malo es eso, que son paralelas!!!
Es que la aplicación que requiero, pues es donde tengo que registrar eventos cada ms, algo muy presiso!!! y bueno, eso escribiendo a cada rático!... Por lo de la cantidad de pines pues, yo creo que tendré dos pics, uno como maestro y otro como esclavo para que me alcancen los pines!!! :o...
Por eso preguntaba en este caso, como los datos del RTC que están en el PIC, van a pasar a memoria...? por donde pasan????
Atte: Enigma... La llanerita de Guayana :D
-
Pero.... si vas a registrar un evento cada sierto ms, entonces esos eventos son fijos y no esporadicos?.Asu, que evento sera ese que se genera cada us?
Por eso preguntaba en este caso, como los datos del RTC que están en el PIC, van a pasar a memoria...? por donde pasan????
Bueno como vas a usar el 18f4550, entonces vas trabajar a 8bits el bus de datos, entonces digamos que usas el portB para ese fin, entonces colocas en ese puerto los pines DQ(0:7)de la memoria y tambien colocas ahi los pines D(0:7)de tu RTC, ahora para las direcciones, de acuerdo con el datasheet de la memoria necesitas como 19bits, y la parte baja de esos bits puedes usar para direccionar el RTC, y ahora la logica de control necesitarias como 6 pines, espero haber hecho entenderme, si no aviza para colgar un bosquejo :mrgreen:
-
Jajaja, bueno entendi la primera parte.... ahora la que no me cuadró fue esto :"y la parte baja de esos bits puedes usar para direccionar el RTC, y ahora la logica de control necesitarias como 6 pines,"
jejeje el bosquejo me serviria bastante!
Y discullpa el abuso, y la arbitrariedad, es que como mensione antes :oops:. jamás he trabajado con RTC ni memorias... ueno la memoria la trabaje fue sólo una vez cuando tuve que hacer un proyecto, pero todo esto con lógica Digital!!!! :roll:
Atte: Enigma... La llanerita de Guayana :D
-
Adjunto una imagen para que veas la idea que tengo al respecto :mrgreen:
-
Exactamente así había hecho yo un esquemita, claro que no quedo tan bonito como el tuyo!!!! jejejeje :mrgreen:.... ahora.... para las lineas del A0 a la A17, pues se tendrán que usar como tres puertos seguidos no??? porque con tantas lineas de dirección.... :shock:
Aquí adjunto el esquema... el feito!!!!
Atte: Enigma... La llanerita de Guayana :-)
-
por que en el datasheet de la memoria usan 18 bits para direccionar, por que? eso no sabria decirte, solo los fabricantes deben saber por que usan varias lineas para la direccion de los datos :mrgreen:
-
Si, pero es chimbo... porque por ejemplo para direccionar esa memoria pues tendre que usar tres puertos!!! :(... Naguara tres puertos para un dispositivo es como demasiado... pero hay que hacerlo.... Además de usar otro pic....(un esclavo) :shock:
Atte: Enigma... La llanerita de Guayana :-)
-
Por que un esclavo?. Con el 18f4550 no alcanza?
-
No oyó... No alcanza.... poque tengo que meter una LCD, y pues la memoria me ocupo casi todos los puertos!!!! Esa memoria es muy avara!!! :( y hasta creo que tengo que usar un timmer, y por tanto la salida de un puerto!!!!
Atte: Enigma... La llanerita de Guayana :shock:
-
Eso hubieras puesto desde el primer post, como solo colocastes memoria y RTC :mrgreen:. en ese caso si te va a faltar pines, bueno un pic dedicado para trabajarlo como uP y el otro para el LCD y otras cosa que te falten. :D :D. esperare con ancias el avanze de este proyecto :-/
-
Lo que puedes hacer es utilizar dos decodificadores de 3 a 8 y 1 de 2 a 4 así solo manejarás 8 bit para direccionar los 18 bit necesario y te sobran 2 bit para lo que necesites (de los tres decodificadores)
Te puse así porque dezconozco si hay por ejemplo de 4 a 15 o más.
-
Eso hubieras puesto desde el primer post, como solo colocastes memoria y RTC . en ese caso si te va a faltar pines, bueno un pic dedicado para trabajarlo como uP y el otro para el LCD y otras cosa que te falten. . esperare con ancias el avanze de este proyecto
:-) Lo que pasa es que como inicialmente se trataba de la memoria y el RTC jejeje no pense colocar lo del pic.... Y con el avance del proyecto, pues te aseguro que daré todo lo relacionado al mismo!, porque se que en cuanto a la programación se me armaran lios, ya que no es fácil lo que pienso hacer...
Lo que puedes hacer es utilizar dos decodificadores de 3 a 8 y 1 de 2 a 4 así solo manejarás 8 bit para direccionar los 18 bit necesario y te sobran 2 bit para lo que necesites (de los tres decodificadores)
Te puse así porque dezconozco si hay por ejemplo de 4 a 15 o más.
Si, no creas que no lo he pensado... Esa estaba en una de mis opciones.... Y su¡i hay un decodificador de 4-16 (74LS154).... Lo que tengo que hacer es un Mapeo, pero debo ir pasó a paso, ya que estoy un poco inexperta en el usao de memorias (es más nunca he usado una) sólo he hecho mapeo de memorias pero sólo en la teoria... y bueno con los RTC`s estoy más inexperta aún... Añadiendo que las memorias que usaré no son nada comunes, pero supongo que es el mismo principio o me equivoco? :?....
Yo sólo espero seguir podiendo contar con su ayuda y colaboración como lo han hecho hasta ahora! :g)
Atte: Enigma... La llanerita de Guayana :-)
-
Una pregunta.... Estuve leyendo un poco teoria de memorias, ustedes saben para empaparme de ellas... Aja, por lo que lei, las lineas de dirección me llevan a cada una de las localidades de dicha memoria, como si fuera una matriz (corrijanme si estoy equivocada por favor), por ejemplo si es una memoria con 8 lineas de dirección con palabras de 8 bits; seria a ver 2 a la 8=256, serian entonces 256 localidades o palabras de memoria... no? Entonces, cada combinación binaria en el bus de direcciones:
00000000
00000001
00000010
.
.
.
11111111= 255.... me llevará a una localidad de esa memoria no?
Entonces como puedo usar decodificadores si, estos sólo me activan sólo una salida a la vez...? Me explico... Por ejemplo Si uso un 74LS154 La tabla de la verdad de sus salidas (que es donde va conectado el bus de direcciones) me daria así...
00000000
00000001
00000010
00000100
.
.
.
10000000.... Viendo esto, pues como el bus de direcciones se me va a posicionar en la localidad 3, 6, etc...?? no se si me explico....
O seré yo con estoy confundida en cuanto al manejo de los decodificadores???
Atte: Enigma... La llanerita de Guayana :?
-
Buenas,
Si necesitas reducir el número de pines para manejar la memoria lo puedes hacer utilizando por ejemplo el 74HCT373, si usas uno necesitaras 7 pines menos y si usas 2 14 pines menos, a cambio el acceso a la memoria será un poco más lento. Los AVR utilizan este método para conectar memorias externas, adjunto una imagen del datasheet del ATMega64 para que veas las conexiones.
Saludos,
Miguel Angel.
-
y que tal si se usara un contador, y con ello solo se usaria algunos pines del micro unos 3 o menos cuando quieras leer en una posición solo das la cantidad de pulsos de reloj para llegar a esa posición (digamos 1us por posición), en lugares muy alejados tardará en responder un poquitin pero ahorras muchos pines, digamos que aprox tardará maximo 0.3seg en leer hasta la ultima posición, pero hay un problema, que el unico contador de muchos pines que he visto en el proteus por ejemplo es de 14bits, lo cual seria desafortunado para este caso ya que son 18 bits de dirección, pero si existe algun contador talvez de 18 o mas bits sería ideal, aunque si el tiempo es muy importante pues esta idea hay que descartarla, ya que este metodo en tiempos del micro tarda una "eternidad" (esto en posiciones de memo muy alejadas de 0)
talvez podria usarse dos contadores en serie y alcazar el numero de bits de direccion o buscar algun contador de 18 o mas bits
pouede ser una idea descabellada, pero podria funcionar si no es relevante el teimpo de acceso a la memoria :mrgreen:
-
Una pregunta.... Estuve leyendo un poco teoria de memorias, ustedes saben para empaparme de ellas... Aja, por lo que lei, las lineas de dirección me llevan a cada una de las localidades de dicha memoria, como si fuera una matriz (corrijanme si estoy equivocada por favor), por ejemplo si es una memoria con 8 lineas de dirección con palabras de 8 bits; seria a ver 2 a la 8=256, serian entonces 256 localidades o palabras de memoria... no? Entonces, cada combinación binaria en el bus de direcciones:
00000000
00000001
00000010
.
.
.
11111111= 255.... me llevará a una localidad de esa memoria no?
Entonces como puedo usar decodificadores si, estos sólo me activan sólo una salida a la vez...? Me explico... Por ejemplo Si uso un 74LS154 La tabla de la verdad de sus salidas (que es donde va conectado el bus de direcciones) me daria así...
00000000
00000001
00000010
00000100
.
.
.
10000000.... Viendo esto, pues como el bus de direcciones se me va a posicionar en la localidad 3, 6, etc...?? no se si me explico....
O seré yo con estoy confundida en cuanto al manejo de los decodificadores???
Atte: Enigma... La llanerita de Guayana :?
Tienes razón llanerita, me había olvidado de ese pequeño detalle :mrgreen: :(
Pero lo que puedes utilizar es el CD4094 o alguno similar.
-
Aquí tienes el data sheet en PDF http://pdf1.alldatasheet.com/datasheet-pdf/view/50863/FAIRCHILD/CD4094.html
Es de la página de www.alldatasheet.com
-
hola
espero no estar diciendo alguna tonteria, pero si necesitas mas lineas en el pic puedes utilizar registros de desplazmiento, para direccionar la memoria con solo tres pines, los 74595 tienen entrada serie / salida paralelo-serie puedes ccolgarlos en cascada y sacar datos en paralelo de tantos bits como necesites. y para las entradas 74165 que son ent serie_paralelo / salida serie,
no se si fue porcher o nocturno quien hizo un tutorial de como ampliar entradas y salidas utilizando registros pero seguro que alguien tiene el link, o si tienes alguna duda te explico mas menos hasta donde se
un saludo
-
Hola Llanerita,
olvidate del decodificador y solo usa las lineas necesarias para direccionar tu memoria. Si solo es una memoria de digamos 18 lineas (A0:A17) ocuparías por ejemplo el PORTB (8 lineas), el PORTC (8 lineas) y por ejemplo el PORTE (2 lineas). A menos que quieras direccionar varias memorias fisicas entonces tendrás que usar el decodificador. Pero si solo es una memoria con los pines del micro es todo lo que ocupas.
Un saludo.
Ahhh ves eso, eso si, si quiero direccinar varias memorias eso si lo se, que de hecho lo tengo que hacer... Coooo!!! ya mee staba frustando... yo decia dios mio, he olvidado mi conocimientos de Digitales, mi lógica se ha esfumadfo! ya estaba casi que lloraba! :(
y que tal si se usara un contador, y con ello solo se usaria algunos pines del micro unos 3 o menos cuando quieras leer en una posición solo das la cantidad de pulsos de reloj para llegar a esa posición (digamos 1us por posición), en lugares muy alejados tardará en responder un poquitin pero ahorras muchos pines, digamos que aprox tardará maximo 0.3seg en leer hasta la ultima posición, pero hay un problema, que el unico contador de muchos pines que he visto en el proteus por ejemplo es de 14bits, lo cual seria desafortunado para este caso ya que son 18 bits de dirección, pero si existe algun contador talvez de 18 o mas bits sería ideal, aunque si el tiempo es muy importante pues esta idea hay que descartarla, ya que este metodo en tiempos del micro tarda una "eternidad" (esto en posiciones de memo muy alejadas de 0)
talvez podria usarse dos contadores en serie y alcazar el numero de bits de direccion o buscar algun contador de 18 o mas bits
pouede ser una idea descabellada, pero podria funcionar si no es relevante el teimpo de acceso a la memoria
No te creas, anoche en medio de mi desesperación por no cuadrar con los decodificadores... Lo pense, pero luego de echar una revisada, vi que se podia, pero era muy, muy complicado... además de que no resulta rentable.... creme no es tan descabellada la idea, pero no resulta factible! jejeje :)
No te preocupes Leon pic, yo tampoco me había fijado hasta ayer que me puse a analizar la cuestión
Con respecto a lo que dices alogic.on pues dejame revisar eso.... suena bien...
Cualquier cosa estoy avisando muchachos!!!!
Atte: Enigma... La llanerita de Guayana :-/
-
hola
si quieres ver algun ejemplo, pero estan en ensamblador, yo los utilizo en mis proyectos. en el sintetizador manejo las direcciones y los datos del sid con 74595, y recojo datos de pulsadores y contadores con 74165 pero claro si tienes que leer y escribir sobre el mismo puerto no se si habra algun registro que pueda cargar tanto de serie a paralelo y viceversa, o podrias utilizar solo los 74595 para manejar la direccion y los pines de control de la memoria, y con puertos del micro para leer y escribir serian tres salidas para todos los pines de control + los que necesites para leer los datos
un saludo
-
O.k.... gracias alogic, pero he confirmado que al parecer todo lo tengo que hacer bajo programación.... de todas maneras voy a ver como hacer para usar ese registro... yo lo he usado pero para otras cosas en digitales! jejejeje :-/
Atte: Enigma... La llanerita de Guayana :g)