• Lunes 6 de Mayo de 2024, 11:30

Mostrar Mensajes

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.


Temas - shadowpucci

Páginas: [1]
1
C/C++ / Velocidad variable de acceso al LPT
« en: Lunes 1 de Junio de 2009, 16:51 »
Buenas, vengo con una consultita sobre un problema que tengo con el LPT

Resulta que yo tengo un dispositivo en el cual mediante LPT envio datos a un hardware (mueve un carro de impresora conectado directamente al puerto LPT con su drive de potencia). Para probar dicho harware arme un programa muy sencillo el cual me da una secuencia de datos. Entre medio de los datos, para meter espacios de tiempo, use la funcion delay(tiempo) y tiempo=1, y resulta que los datos, no solo salen MUCHO mas espaciados que con 1ms, sino que incluso lo hace con una cadencia variable (varia la velocidad con la que se muestran los datos en el puerto)

El programa es el siguiente:

Código: C
  1. //Moviendo el carro en funcion del teclado
  2.  
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <dos.h>
  6. #define base 0x378
  7. #define tiempo 1
  8.  
  9. void main()
  10. {
  11.  int a;
  12.  int b;
  13.  
  14.  clrscr();
  15.  printf("Ingrese la Direccion del movimiento (I o D)");
  16.  outportb(base+2, inport(base+2)&0xDF);//por si el puerto esta bidireccional
  17.  do {
  18.     while(getch()=='d'){
  19.         printf("n ingrese la cantidad de steps=");
  20.         scanf("%d",&a);
  21.         for(b=0;b<a;b++){
  22.             outportb(base,0x01);
  23.             delay(tiempo);
  24.             outportb(base,0x03);
  25.             delay(tiempo);
  26.             outportb(base,0x02);
  27.             delay(tiempo);
  28.             outportb(base,0x06);
  29.             delay(tiempo);
  30.             outportb(base,0x04);
  31.             delay(tiempo);
  32.             outportb(base,0x0C);
  33.             delay(tiempo);
  34.             outportb(base,0x08);
  35.             delay(tiempo);
  36.             outportb(base,0x09);
  37.             delay(tiempo);}
  38.         printf("ok");
  39.         outportb(base,0x00);
  40.     }
  41.     while(getch()=='i'){
  42.         printf("n ingrese la cantidad de steps=");
  43.         scanf("%d",&a);
  44.         for(b=0;b<a;b++){
  45.             outportb(base,0x08);
  46.             delay(tiempo);
  47.             outportb(base,0x0C);
  48.             delay(tiempo);
  49.             outportb(base,0x04);
  50.             delay(tiempo);
  51.             outportb(base,0x06);
  52.             delay(tiempo);
  53.             outportb(base,0x02);
  54.             delay(tiempo);
  55.             outportb(base,0x03);
  56.             delay(tiempo);
  57.             outportb(base,0x01);
  58.             delay(tiempo);}
  59.             outportb(base,0x09);
  60.             delay(tiempo);
  61.         printf("ok");
  62.         outportb(base,0x00);
  63.     }
  64.   }while (getch()!='q');
  65. }
  66.        
  67.  


El programa esta hecho en borlad C corriendo en un PC con Windows XP... Puede que el XP tenga algo que ver en esto?? o es un tema del compilador?? p de la funcion delay(tiempo)??

Valga aclarar que esto no es el programa final... es tan solo algo para probar el hard, por eso esta asi tan rustico

Espero alguien pueda ayudarme

Gracias...

2
C/C++ / Utilizacion de memoria de video
« en: Jueves 28 de Mayo de 2009, 16:01 »
Buenas... en primer lugar me presento, mi nombre es Matias, soy de Argentina, estudiante de ingenieria electronica, y soy nuevito en esto de programar... Aprendi en la secundaria algo de ASM y Basic para 8051, lo cual me resulto muy interesante... Actualmente en la facultad tenemos las materias de informatica 1 y 2, y luego tecnicas digitales etc etc en la cual usamos C (en el compilador Borland C para ser exacto, pero trato de usar todas librerias ANSI para no perder portabilidad). Vengo siguiendo el foro hara una semana, y encontre muchas informaciones que me han sido utiles, las cuales aprovecho para agradecer!

Bueno, atacando ahora el "problema" (que en realidad es un desasne lo que necesito) que tengo, es el siguiente:

Se manejar la memoria de video en modo texto, accediendo mediante (unsigned char far*) 0xB8000000, usando los bytes de caracter y colores y arme una funcion llamada "imprimi" que la uso en lugar del printf en la primer fase de mi proyecto. la funcion es:
Código: C
  1.  
  2. #define VIDEO (unsigned char far*) 0xB8000000
  3. void imprimir ( char* string , int x , int y, char formato) {
  4.     int a;
  5.     unsigned char far* pvideo;
  6.     pvideo=VIDEO;
  7.     for(a=0; a < (strlen(string)) ; a++){
  8.         *(pvideo+(2*x+(160*y+2*a)))=*(string+a);
  9.     }
  10.     if(formato!=-1){
  11.     for(a=0; a < (strlen(string)) ; a++){
  12.         *(pvideo+(1+(2*x+(160*y+2*a))))=formato;
  13.     }
  14.  
  15.     }
  16.     return;
  17. }
  18.  

 Ahora, resulta que para la aplicacion que estoy armando para la segunda parte del proyecto, me seria util usar la memoria de video pero en modo GRAFICO (al menos asi me dijeron que se llama), es decir, como matrix de pixeles. Es decir, poder armar una funcion similar a esta, en la cual le pase ( int X, int Y, int cantidad de pixeles a pintar,char color). Encontre algo en el foro ( viewtopic.php?f=18&t=37378&p=136145 ), que habla de que el modo grafico se usa la direccion A000h:0000h... pero escribi esa direccion y no me pinta ni un pixel. Aparte no se como es el formato de escritura de dichos pixels (yo mande 0xFF a 16 direcciones y nada....). Creo que posiblemente tenga que cambiar algo en algun registro de la bios, supongo.. (me han dicho algo asi), pero no estoy seguro.

Igual voy a seguir buscando en mi gran amigo google a ver si encuentro algo

Muchas Gracias.

Shadowpucci

Páginas: [1]