|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - patitofeo
1
« en: Lunes 25 de Agosto de 2008, 12:08 »
Yo no he encontrado esa biblioteca en mi Windows. ¿Seguro que es una librería de Windows?
Un saludo
2
« en: Lunes 25 de Agosto de 2008, 12:04 »
3
« en: Viernes 22 de Agosto de 2008, 16:34 »
Panel de control -> Centro de redes y recursos compartidos
Te abrirá una ventana: Al izquierda hay una lista de TAREAS.
Una de las opciones es: Administrar conexiones de red.
De aqui en adelante es como en XP.
Un saludo
4
« en: Viernes 22 de Agosto de 2008, 16:04 »
Para necesitar menos energia prueba a escitar en la siguiente secuencia: output_B(0x03); //0011 output_B(0x06); //0110 output_B(0x0C); //1100 output_B(0x09); //1001
Escitando de esta manera evitaras probablemente que se salten pasos. Yo utilizaria ademas esta forma para dar valores a los puertos (output_B). En cuanto a la velocidad (retardo) depende del motor y del driver. Si lo haces muy lento quizá de trompicones y vibre mucho una vez ensamblada la parte mecánica. Te aconsejo que te olvides ya del proteus y comiences a simular la realidad, por que el motor nunca llegará a moverse desde proteus. Un saludo y espero haberte ayudado.
5
« en: Viernes 22 de Agosto de 2008, 15:47 »
En principio depende del compilador o ensamblador y de la arquitectura del micro. Depende del circuito de salida de los pines (desde el punto de vista hard).
Pero lo normal es que para que un Pin funcione como salida haya de tener el valor '0' y esto es por que la configuración suele ser un transistor en como emisor cumun con (o sin) pull up en el colector. Otros micros utilizan una etapa CMOS invertida para la entrada y en este caso hay que mantenerlo a '1'.
Estube mirando el datasheet del micro que especificaste y según el fabricante se anula completamente el driver de salida (poco aconsejable desde mi punto de vista) por lo tanto en principio no habría ningún problema en poner ningún valor.
SIN EMBARGO, al utilizar C y por lo que veo, el compilador CCS para trabajar tienes que tener en cuenta algo más:
Ya sabes que CCS gestiona automaticamente los registros TRISx ¿verdad? al hacer una escritura sobre el pin en cuestión, aunque lo hayas inicializado al principio como entrada, el compilador cambiará el registro TRISB para configurarlo como salida.
Debes asegurarte de que configuras los puertos al principio de modo que el compilador no gestiona los registros TRISx por su cuenta. Creo recordar que es una directiva de precompilador. Creo que era: #PRAGMA USE FAST_IO.
Un saludo.
6
« en: Viernes 22 de Agosto de 2008, 14:24 »
Como decia Rambus es algo muy utilizado para declarar vectores multidimensionales de forma dinamica (matrices de más de una dimensión). m0skIt0 te esplica bien como funciona. Voy a intentar esplicarte para qué: Imagina que quieres crear una matriz. Lo primero que se nos ocurre normalmente es declarar algo del tipo: Pero tendriamos que especificar el tamaño de la matriz o vector. En este caso 125; Cuando esto no esta claro (el vector no sabemos cunto va a ocupar), utilizamos vectores dinamicos que no son más que un puntero que nos indicaria el comienzo (la dirección inicial) de los datos. Sumando y restando a ese puntero nos podemos mover a través de los distintos elementos. Por supuesto, hay que utilizar funciones para la gestion de memoria para inicializar y cambiar el tamaño de la memoria reservada a dicho array (por ejemplo malloc). Cuando queremos utilizar una matriz bidimensional del tipo podemos considerarlo como un vector de vectores. Es decir un vector cullo tipo de dato es un vector siempre del mismo tamaño. Así aparece el concepto de filas y columnas. En este tipo de array, cada fila es un array de una única dimensión y la columna indica el elemento dentro de ese array unidimensional. La matriz anterior define 125 vectores de 125 elementos cada uno. Si las filas no tienen todas el mismo número de elementos nos encontramos con el mismo problema de antes y podemos recurrir también a los vectores dinámicos. Asi es como surgen los punteros a puntero. Tenemos que inicializar un puntero (un vector dinámico) que indique el comienzo de una zona de memoria donde haya otros punteros (otros vectores dinámicos). La declaración sería así. Para inicializar este puntero necesitarías enlazar llamadas a funciones de inicialización de memoria; Si quisieramos, añadir otra dimensión, tendriamos que crear un vector que apunte a otra seríe de vectores que a su vez apunten a otros vectores que apuntan a los datos en cuestión. Sería: y así hasta el infinito. El uso de arrays dinamicos es más dificil pero mucho más versatil y rápido que el uso de arrays estáticos. Por eso se suele utilizar para la creacción de estructuras complejas como pilas, bufferes circulares, etc.. o en el uso de técnicas de transacción rápida de memoria como el doble buffering. Para entender realmente esto (para mi una de las cosas más bonitas del C/C++ busca referencias sobre la creacción y uso de vectores dinámicos y sobre la inicialización de estos con funciones como malloc; Un saludo y espero no haber aburrido a nadie
7
« en: Sábado 9 de Agosto de 2008, 13:55 »
Son dispositivos totalmente diferentes.
¿En que se diferencian?
Microprocesadores:
Son dispositivos lógicos programables basados en una máquina de estados hardware general fija: Es decir, la programación es de tipo software. Para programar un microprocesador debemos añadirle una memoria donde se almacenen las instrucciones que permitan al hardware fijo ir cambiando de estado y efectuando las operaciones deseadas. Se utilizan para "grandes" sistemas informáticos donde tanto el soft como el hard pueden variar o son de tipo modular.
El ejemplo más claro es un ordenador personal. Algunos fabricantes y tipos son: ARM, Intel, AMD, POWER PC
Microcontroladores:
Son dispositivos lógicos programables basados en una máquina de estados hardware general fija (programación de tipo software) que además añade en el mismo circuito integrado la memoria de programa y algunos puertos y periféricos para el manejo de hardware adicional al sistema. Es un sistema básico de tipo "System on Chip" que contiene el hardware necesario para construir de forma muy rápida y sencilla un sistema "informático". Debido a que tiene mucho más hardware ya embebido, su uso es menos generalista que el de los microprocesadores pero el desarrollo de sistemas basados en este tipo de dispositivos es más rápido y generalmente barato.
Se utilizan sobre todo para electrónica a medida de pequeñas tiradas aunque muchos electrodomésticos y sistemas electrónicos de consumo disponen de este tipo de dispositivos (televisiones, DVD, incluso neveras o vitrocerámicas). Algunos fabricantes son: Microchip, Atmel, Silicon Labs, Motorola...
FPGA's:
Son arrais de celdas lógicas cuyas conexiones son configurábles a través de una memoria auxiliar (generalmente volatil). Es decir, el tipo de programación es de tipo hardware. Ya no existe una maquina de estados que procese una serie de instrucciones conocidas sino que nosotros configuramos el hardware de nuestro sistema apoyándonos en celdas básicas que contienen mutiplexores, biestables, puertas lógicas básicas, contadores, etc...
Son dispositivos de propósito muy general y nos permiten configurar sistemas electrónicos con muchísima versatilidad. Suele ser el primer paso antes de pasar a la custom foundry. Es decir, debido a su versatilidad se utiliza para diseñar prototipos funcionales de circuitos integrados. Se utilizan también en electronica a medida con requisitos estrictos de hardware que no puedan ser atendidas por microcontroladores. Debido a su alto coste no se suelen ver en equipos electrónicos de consumo (aunque se ven en algunos en móviles o en routers y dispositivos de red) ya que en estos dispositivos vemos circuitos integrados fabricados de modo CUSTOM que resulta más barato en tiradas numerosas. Aunque probablemente estos circuitos hayan sido diseñados previamente a través de FPGA`s. Algunos fabricantes son: Xilinx, Altera, Lattice...
No se si te he aclarado mucho, pero sobre eso que has preguntado hay escritos libros y libros. Sobre cada uno de los dispositivos.
Un saludo.
8
« en: Sábado 9 de Agosto de 2008, 13:10 »
Yo lo haría:
1- Apertura del fichero ORIGEN
2- Copia del fichero origen en COPIA
3- Apertura de un fichero TEMP
4- Lectura del fichero ORIGEN: a - Lectura 1º byte b - escritura del byte en TEMP c - sumo uno al cursor del fichero para moverme al siguiente byte a leer d - vuelta a a- hasta fin del fichero
5- Apertura de un buffer de edición sobre el fichero TEMP (apoyandome en un Text Box por ejemplo)
6- Espera fin de edición y paso de buffer aTEMP.
7- Borrado de fichero ORIGEN (no pasa nada, tienes una copia)
8- Creación de un fichero con el mismo nombre (ORIGEN).
9- reconstrucción del fichero: a - lectura de un byte en TEMP b - escritura del byte en ORIGEN c - suma de uno al cursor del fichero COPIA para situarme en los bytes impares (1, 3 ...) d - lectura del byte correspondiente en COPIA e - escritura del byte en ORIGEN f - volver a a- hasta el fin del fichero
Esta sería la secuencia que yo seguiría. El como depende del lenguaje, del sistema operativo y del tipo de aplicación que desees.
Un saludo
9
« en: Viernes 8 de Agosto de 2008, 21:07 »
Hola:
Trato de montar un pc nuevo con una board M2N-SLI DELUXE de ASUS para correr un AMD +6000 3Ghz 64b AM2 la tarjeta gráfica es una ASUS EN8600GT MAGIC 512Mb
El problema viene a la hora de instalar el sistema operativo. Trato de instalar un Windows Vista 32bits y siempre que lo intento aparece una pantallazo azul.
Pensé que sería algún problema de hardware así que le dí vuelta a la BIOS con la esperanza de solucionar el problema (otras veces ya me había pasado algo parecido) pero nada. Después comencé a cambiar partes del hard. En primer lugar sospeche de la tarjeta gráfica, así que cambie por otra que tenia por ahí y que seguro funcionaba y ocurrió exactamente lo mismo. Siguiente a probar: LAS MEMORIAS.
Y ahí estaba el problema. Tenía puestos dos módulos DDR2 de KINGSTOM de 2 Gb (4Gb en total). Ya se que windows vista 32 bits solo me detectará 3Gb y pico pero bueno.
El caso es que si utilizo solo uno de los módulos (cualquiera de los módulos en cualquiera de los slots: lo que indica que ni la placa ni las memorias están rotas ¿no?) puedo instalar el Vista sin problemas. Si utilizo dos módulos (4Gb) ya sea en modo Dual o no, no puedo instalarlo.
He probado con otros dos módulos de otra marca (no recuerdo cual) y ocurría exactamente lo mismo.
También he intentado instalar el XP profesional y mismo comportamiento.
Bueno, sé que los sistemas operativos de 32 bits solo direccionan 3,25Gb pero nunca me había pasado que al montar una máquina con más RAM dejara de funcionar (este es un PC para un amigo, el mio esta corriendo el mismo sistema operativo con 4Gb sin ningún problema).
Espero que podáis darme una pista porque compre los componentes por internet y el servicio técnico es realmente malo.
Un saludo a todos -----------------------------------
10
« en: Lunes 18 de Febrero de 2008, 20:39 »
La solucion estaba mas cerca de lo que pensaba Debería haber buscado aqui antes de escribir el post: CCS reference manualEl compilador de CCS si que tiene directivas para el linkado, yo había mirado un manual (una traducción) que pensé que era el "reference manual" de CCS, pero NO. Estaba incompleto. la directiva para posicionar un segmento es #ORG. Un saludo a todos
11
« en: Lunes 18 de Febrero de 2008, 19:21 »
no he mirado mucho pero así a primera vista brilla esto: void ingresardatos(paises *nombres) { FILE *pt; if((pt=fopen("DATOS","rb+"))==NULL) .... fwrite(nombres,sizeof(paises),i,pt); rewind(pt); }
y es que si abres el fichero para lectura (opcion "rb+" de fopen) no vas a poder escribir en el (fwrite()) luego; Un saludo
12
« en: Lunes 18 de Febrero de 2008, 19:02 »
¿Qué tal:
T[0]={T, C, A, D, R, A, C, T}; T[7]={T, C, A, D, R, A, C, T}; T[1]={P, P, P, P, P, P, P, P,} T[6]={P, P, P, P, P, P, P, P,} ?
¿Esto es "a pelo"?
¿Por qué no "a pelo"?
¿Tanto trabajo es?
A mi me resultaria mucho más costoso estar comiendome la cabeza solo para inicializar una variable.
No sé, quizá no entendí la pregunta ¿es así?
Un saludo
13
« en: Lunes 18 de Febrero de 2008, 18:56 »
¿Alguien sabe si es posible con el compilador CCS construir una rutina que siempre se aloje en el mismo lugar de la memoria? Por lo que he visto hasta ahora, el comilador CCS no utiliza un linkador como tal. El propio compilador se encarga de manejar las direcciones de los segmentos y todo ese tinglado. ¿voy bien? Yo necesito colocar algunas rutinas en un lugar concreto y no se como hacerlo porque no he visto ninguna directiva del compilador que me permita hacer esto Si alguien ha trabajado alguna vez en este sentido y me puede orientar estaría muy agradecido. Hasta ahora CCS es el único compilador de C que he utilizado para PICs, si alguien conoce algun otro que me permita hacer lo que quiero, tambien seria de ayuda Muchas gracias. P.D. ¿alguien sabe como crear una librería con el mismo compilador? --- I keep working about
14
« en: Domingo 13 de Enero de 2008, 15:50 »
while(numeroIP <= 254) { c = getc(temp); //obtener letra de temp rewind(lista); //Obtener un numero de 0-254 corresponde al lugar a guardar. temporal = (int) (254*rand()/(RAND_MAX+1.0)); if( fseek(lista,(long)temporal,SEEK_CUR) == 0 ) { while(1) { lista_char = getc(lista); if(lista_char == 255) { printf("El lugar actual NO esta ocupado"); break; } else { printf("El lugar actual SI esta ocupado"); //Se procede a buscar un luga vacio, DESPALAZANDOSE UN BYTE, //APARTIR DE LA POSICION ANTERIOR. if( fseek(lista,1,SEEK_CUR)!= 0 ) { //Ocurrio un error. printf("Retoceder al principio"); rewind(lista); } else { printf("Se a avanzado un byte\n"); system("pause"); } } } } else { printf("Error al posicionar el apuntador lista aleatoriamente"); system("pause"); exit(1); } putc(c,lista); printf(" %d ",numeroIP); printf("\n numeroAzar= %d ", temporal); numeroIP++;
En esta sección de código creo que tienes un fallo. No me he detenido mucho, asi que compruebalo. Tampoco se si es el único fallo. Tu seleccionas la posición en la que quieres insertar el número y compruebas si ya habías insertado uno antes con lista_char = getc(lista);
si esta libre (es 255) introduces el dato Lo que pasa es que no vuelves el cursor a su posición. Al leer con getc el cursor pasará a la posición siguiente e introduciras el dato en la siguiente posición. Creo que te faltaria algo asi: fseek(lista, -1,SEEK_CUR) putc(c,lista);
Espero haberte ayudado. Un saludo
15
« en: Domingo 13 de Enero de 2008, 14:46 »
¿Puedes describir un poco más el proyecto?
¿Los sensores están agrupados de algún tipo, sobre todo espacialmente, o están repartidos por algún sitio?
Si no te interesa utilizar PLC, ya que son caros y con todas las entradas y salidas que tienes tendrias que comprar varios modulos, ademas de que si no los has utilizado nunca no es tan trivial, lo que te recomiendo es que diseñes una serie de celdas básicas para controlar grupos pequeños de sensores- actuadores. En total tienes 120 sensor-actuadores. Puedes hacer un pequeño diseño que reciba 9 señales de sensores (analogicas o digitales) y que actue sobre 3 reles. Esta celda, además se comunicará con el PC a través de un bus común (yo te recomiendo para este caso un RS485, que está concebido para entornos industriales y que es facil de usar. Puedes hacer un conversor RS232-RS485 con un MAX202 y un MAX496).
La celda que diseñemos necesitará un microcontrolador. Uno muy pequeño y la placa que tienes que diseñar es realmente sencilla. Al final con 10 de estas celdas controlarías todos los sensores-actuadores. Si construlles celdas con más entrada-salidas necesitaras menos (esto es solo un ejemplo). Los microcontroladores muestrearian permanentemente los sensores y se comunicarian con el PC a traves de tramas. El PC trabajaría como master y mandaría peticiones de lectura-escritura a cada una de las celdas a través de una dirección que tu hubieras preestablecido.
Creo que la idea se entiende ¿no?
El tiempo de desarrollo no es mucho, ya que el diseño se reduce a una celda y luego replicas el resto. El precio es considerablemente más reducido que con PLDs. Por supuesto también existen limitaciones. En este caso estoy considerando que los sensores sean todos similares, si no, el tiempo de desarrollo crece, pero tanto utilizando celulas microcontroladas como PLCs.
Bueno, espero que te haya sido de ayuda. Un cordial suludo.
No dudes en preguntar cualquier duda.
no me di cuenta de la fecha del POST, a estas alturas ya estará todo resuelto. Estaría bien que el autor hubiera comentado como soluciono el problema ¿verdad?
16
« en: Jueves 14 de Septiembre de 2006, 23:13 »
Perdona mi ignorancia pero:
¿Que timers?
¿con que sistema operativo y que librerias trabajas?
Los timer se manejan a través de llamadas al sistema o driver específicos, si no me equivoco. Si no expecificas más es dificil entender tu cuestion.
O al menos eso creo. Si me equivoco, por favo corregirme. Quiza pueda aprender algo nuevo
17
« en: Jueves 14 de Septiembre de 2006, 23:00 »
Hola
Bueno, yo podria ayudarte pero creo que tendrias que darme un poco más de información.
Por ejemplo:
- El pc controla directamente el LCD y el teclado o hay otro tipo de lógica intermedia
- si el pc lo controla directamente ¿a traves de que puerto? ¿El puerto paralelo?
- Si existe una logica intermedia ¿que clase es?
Si lo tienes que hacer tu todo, lo que yo haría es:
Usar un microprocesador para controlar el LCD y la matriz. El programa del microprocesador sería muy sencillo. En internet hay un monton de ejemplos de esto. Este microcontrolador enviaría los datos recabados al procesador a través del puerto serie RS-232. El programa del PC recibira estos datos, actuará en consecuencia y respondera al microcontrolador a través del mismo puerto. Por último el microcontrolador representará la respuesta del PC en el LCD.
Es más facil de lo que parece.
Para cualquier duda, por aqui estaré...
Suerte
PD: En cuanto al uso de ensamblador para controlar el LCD: No siempre es asi. Hay librerias en C para utilizar LCD con casi cualquier microcontrolador. Incluso si lo quieres manejar directamente desde el PC puedes utilizar C
18
« en: Jueves 14 de Septiembre de 2006, 22:50 »
Hola: Una cuestioncilla facil (aunque yo no de con ello) Estoy trabajando con Access y trato de crear un formulario sobre una pequeña base de datos de 4 tablas que acabo de hacer Dos de esas tablas son: Poblacion: -Poblacion (ID) [autonumerico] -Nombre [texto] -Ayuntamiento [numerico] -nVecinos [numerico] Ayuntamientos: -Ayuntamiento(ID) [autonumerico] -Nombre [texto] Ayuntamientos.ayuntamiento y Poblacion.Ayuntamiento estan vinculados La idea es que la tabla Ayuntamientos albergue una lista fija con los nombres de todos aquellos que utilizare, y que esta lista no se pueda modificar desde ningun formulario. El problema que tengo es el siguiente. Dentro del formulario que me gustaria crear, debería haber un ComboBox (cuadro combiando) en el que aparecieran todos los Ayuntamientos (Esto lo consegui) Y que al seleccionar uno de ellos se actualice el campo Ayuntamiento de la tabla Poblacion. Esto no lo consigo de ninguna manera. Lo unico que consigo es que al cambiar el Iten en el cuador combinado, cambie el nombre del Ayuntamieto asignado anteriormente a la poblacion en cuestion y no al reves (de este modo, desaparecia una poblacion porque otra quedaria duplicada) Bueno, espero que me hayais entendido y podais ayudarme. Si no he sido suficientemente claro, por favor, diganmelo también
19
« en: Miércoles 22 de Marzo de 2006, 20:39 »
Deberías comparar cada uno de los caracteres y comprobar que estan en el rango que quieres Busca en el google una tabla ascii y verás esto muy facil Ya sabes que cada caracter se representa por un valor númerico ¿verdad? Pues entonces simplemente comprueba para cada caracter que esta en el rango que quieres. En ascii los caracteres que representan números estan seguidos (valores entre 48 y 57), las letra minusculas también (valores entre 97 y 122) y lo mismo para las mayusculas (valores entre 65 y 90). Lo puede hacer asi. For (i=0; i< nCaracteresArray; i++) { if(array(i)< '0' || array(i)> '9') { //si estas aqui es que uno de los caracteres no es numerico //haces lo que tengas que hacer, como salir de la funcion y listo } }
Si sales del ciclo For sin que entre en el if es que todos los caracteres son digitos entre '0' y '9' Espero que lo hayas entendido Si no por aqui estaremos. Dime donde me explique mal. Suerte
20
« en: Viernes 24 de Febrero de 2006, 17:38 »
No es nada. Me alegro MUCHO de haberte ayudado. Para cualquier cosa ya sabes...
21
« en: Sábado 18 de Febrero de 2006, 18:30 »
Hola Cluster
Bueno, pueden darse en principio dos casos.
1- Que trabajes con un modem Adsl que te ofezca una IP unica para la conexión a internet.
En este caso necesitas que al menos uno de los PC's tenga dos tarjetas de red. Esto es para separar las redes. Cada uno de los PC's tiene que tener una IP diferente, y si tu ISP solo te sirve una necesitas crearte una red privada. Esto es, una de las tarjetas se conecta al modem y trabajará con la IP que te sirva tu compañia. La otra trabajará como puerta de enlace para tu red privada en la que todos los computadores tendrán una IP de dominio privado que tu le asignes (por ejemplo: 192.168.0.1 para el PC con dos tarjetas y 192.168.0.50 para el otro). Se que esto a si de golpe suena dificil, pero no lo es en absoluto. si Googleas un poco encontraras un millon de paginas que te explican esto detalladamente.
2- En el caso de que tengas un Router Adsl, entonces la red privada ya esta creada. El router se encarga de esto y solo necesitas un switch para poder interconectar los PC's de tu red.
Espero que te haya aclarado un poco. Si investigas un poco veras como no tardas ni una hora en tenerlo todo listo.
Saludos
En cuanto a la posibilidad de compartir datos judamo:
comprueba lo siguiente
1- Los dos PCs tienen IPs diferentes y pertenecientes a la misma red ( 192.168.0.x o 10.6.0.x ....)
2- Los dos estan en el mismo grupo de trabajo
3- el protocolo NetBios esta activado
Si esto esta bien, no debería haber ningún problema. Si no sabews que es algo de ello no tendras ningun problema en encontrarlo en google. a mi me costaría un rato contartelo todo. Si aun asi te queda alguna duda, no dudes en preguntar.
Saludos a todos.
RECOMENDACIÓN PARA LOS QUE QUIERAN UNA RED BARATA Y LES SOBRE UN ORDENADOR VIEJO TIPO PENTIUM 100 O PEOR. Coyote Linux
Cortafuegos, MAT, bloqueo de puertos...
22
« en: Lunes 13 de Febrero de 2006, 13:15 »
Vaya!!! Siento haberte hecho perder el tiempo... Prueba esto y espero que funcione #include <sstream> double d; std::string s; std::stringstream t; ........................... t<<d; s=t.str();
23
« en: Jueves 9 de Febrero de 2006, 13:28 »
Claro!!! el caso anterior (sprintf) es pensando que utilizas programación estructurada © . Si programas en C++ OO es mejor que utilices la funcion stringstream de la clase 'iostream' Salida por consola en C++Es diferente C que C++. Por el codigo que pusiste deduje que era C aunque tu advertiste que usabas C++. Perdona
24
« en: Jueves 9 de Febrero de 2006, 13:22 »
utiliza la funcion sprintf Funcion sprintf
25
« en: Jueves 9 de Febrero de 2006, 13:17 »
int a = 50; char buffer[80]; sprintf(buffer,"mostrar un entero %d", a); outtextxy(5,3,buffer);
|
|
|