• Viernes 19 de Abril de 2024, 08:14

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 - xernovil

Páginas: [1]
1
Microcontroladores / Sleep Con El 16f84a
« en: Miércoles 6 de Junio de 2007, 17:36 »
Alguien sabe por qué cuando intento programar la función sleep en el pic 16f84a me da error de verificación todo el rato con el ic-prog?

Expongo otro problema, a ver si alguien me puede ayudar, al no poder utilizar el sleep se me complica todo un poco:

tengo un mando de 3x4 botones, que estoy implementando con otro pic, pero para hacer pruebas tengo este otro, el 16f84a, y necesito que al pulsar la tecla de prog (la tecla 12) entre en un estado de programación, pues bien, esto ya lo tengo hecho, no tiene mucho misterio.

Pero al entrar en el estado de programación hago variar una variable para que en la siguiente interrupción vaya directamente al modo programación y guarde el valor de la tecla pulsada en una variable address, que será la que después utilice para guardar el código de 3 dígitos que hay que meter a continuación, y aquí tengo el problema.

Para guardar el primer valor, que serían las centenas, tengo que filtrar la pulsación para que las teclas posibles sólo sean la 0, 1 y 2, para así no pasarme de 255 que será el valor máximo que puedo grabar en la posición de la eeprom. Después hago lo mismo con la segunda tecla, en la que si la primera tecla ha sido un 2, no debe pasar de 5 este nuevo valor (decenas) y así respectivamente. Esto es la idea de lo que quiero conseguir, y no creo que esté mal, pero no me sale una buena implementación, ya que cuando lo hago me falla constantemente. Yo creo que es por que no puedo programar el pic si utilizo la función sleep.


Alguien me puede ayudar por favor???

PD: Estoy viendo que es algo liosa la explicación, si tenéis alguna duda decídmelo y os la aclaro. Gracias anticipadas.

2
ASM (Ensamblador) / Tablero 4x4 Letras Desordenadas
« en: Viernes 11 de Mayo de 2007, 10:44 »
Hola! necesito ayuda, tengo varios programas que hacer y no me va a dar tiempo de acabarlos a tiempo, este creo que es el más sencillo, almenos desde mi punto de vista, pero necesitaría bastante rato para solucionarlo y tengo otros mucho mas complicados. A ver si me podéis echar una mano...

El enunciado está en catalán, pero creo que se entiende bastante bien.

Resumiendo lo que tengo que hacer es lo siguiente (el código es para Intel x86):

Tengo un tablero de 4 x 4, con letras en mayúsculas desordenadas, y una de las 16 posiciones es un espacio en blanco, para hacer correr las letras a través de ese espacio y ordenarlo alfabéticamente. Hay un número limitado de movimientos, y también tiempo limitado. El cursor de selección de letra no debe salir de lo que es la matriz, la letra debe desplazarse pulsando la tecla espacio a la posición que haya vacía y pulsando la tecla "q" debemos salir del programa.

Al pulsar la tecla espacio no se debe mover la ficha a no ser que el espacio vacío esté a su lado (arriba, abajo, izquierda, derecha), al mover la letra debe decrementarse en 1 el número de movimientos posible.

Si el tablero inicial contiene más de una o ninguna posicion vacía no se empezará a "jugar" y se indicará que hay demasiadas o ninguna casilla vacía y entonces acabará el programa, esta verificación se hará una sola vez al empezar el programa.

Si el número de movimientos se ha acabado se indicará que se ha perdido el juego y se acabará, del mismo modo, si las letras están ordenadas de la manera correcta, se indicará que has ganado y se acabará.

Código: Text
  1.  
  2. ;AETC Pràctica: Quinze-Puzle
  3. ;Cognoms i Nom:
  4. ;
  5. ;Lliurar el fitxer amb el nom: cognom1_cognom2_nom.asm
  6. ;Data de lliurament: ----------
  7.  
  8. .model small
  9. .stack 1024
  10.  
  11. DOSSERVICE  EQU 21H &#59; serveis DOS
  12. BIOSSERVICE EQU 10H &#59; serveis BIOS
  13. TicksSegon  EQU 18  &#59; Ticks per segon
  14. VECT_R      EQU 08h &#59; vector de rellotge
  15.  
  16. .data
  17.  Tauler db 'Tauler de Joc'&#59;Tauler de joc que es mostra a l'inici del programa
  18.         db '   0 1 2 3   '
  19.         db '  ÚÄÂÄÂÄÂÄ¿  '
  20.         db ' 0³ ³ ³ ³ ³  '
  21.         db '  ÃÄÅÄÅÄÅÄ´  '
  22.         db ' 1³ ³ ³ ³ ³  '
  23.         db '  ÃÄÅÄÅÄÅÄ´  '
  24.         db ' 2³ ³ ³ ³ ³  '
  25.         db '  ÃÄÅÄÅÄÅÄ´  '
  26.         db ' 3³ ³ ³ ³ ³  '
  27.         db '  ÀÄÁÄÁÄÁÄÙ  '
  28.         db '00  Moviments'
  29.         db '00  Segons   '  
  30.  
  31.  &#59;Quan lliureu la pràctica deixeu la matriu inicialitzada amb aquests valors.
  32.   Fitxa  db 'ABCD'&#59;Matriu 4x4 on tenim les fitxes
  33.      db 'FGHI'
  34.      db 'JK Z'
  35.          db 'OPNM'
  36.  
  37.  
  38.  
  39.   Estat  db 1    &#59; 0: Hem pitjat la tecla 'q' per sortir, sortir del programa.
  40.                  &#59; 1: Continuem jugant.
  41.                  &#59; 2: Guanyat, Totes les lletres estan ordenades, indicar-ho i acabar.
  42.      &#59; 3: Temps exhaurit, indicar-ho i acabar.
  43.                  &#59; 4: Nombre de moviments exhaurits, indicar-ho i acabar
  44.            &#59; 5: Masses caselles en blanc, indicar-ho i acabar.
  45.  
  46.  &#59;FilCur i ColCur indicaran la posició del cursor en tot moment.
  47.   FilCur   db ?  &#59; '0': Fila 0, '3': Fila 3
  48.   ColCur   db ?  &#59; '0': Columna 0, '3': Columna 3
  49.  
  50.   Moviments db 99&#59; Moviments que podem realitzar.
  51.    
  52.   Ticks     db 0 &#59;variable que indica els Ticks de rellotge transcorreguts
  53.   Segons    dw 0 &#59;variable per comptar els segons    
  54.  
  55.   RAI_R_Seg dw ? &#59; adreça de segment de la RAI de rellotge original
  56.   RAI_R_Dir dw ? &#59; desplaçament dins del segment de la RAI de rellotge original
  57.  
  58.  
  59.   MsgPerdut5 db  'Tauler incorrecte, masses caselles en blanc.','$'
  60.   MsgPerdut4 db  'Has perdut! Moviments exhaurits','$'
  61.   MsgPerdut3 db  'Has perdut! Temps exhaurit     ','$'
  62.   MsgGuanya  db  'Ho has aconseguit, tot ordenat!','$'
  63.   MsgSortir  db  'Has premut (q) per sortir      ','$'
  64.  
  65.  
  66. .code
  67.  
  68. ;*******************************************************************************
  69. ; Esborra la pantalla completament escrivint espais en blanc
  70. ; Paràmetres d'entrada: Cap
  71. ; Paràmetres de sortida: Cap
  72. ;*******************************************************************************
  73. EsborraPantalla:
  74.  
  75.   push AX
  76.   push BX
  77.   push CX
  78.   push DX
  79.  
  80.  &#59;Inicialització per posicionar el cursor
  81.   mov bh,00h       &#59;pagina  
  82.   mov dh,00h       &#59;fila inicial
  83.   mov dl,00h       &#59;columna inicial
  84.   mov ah,02h       &#59;servei per posicionar el cursor
  85.   int BIOSSERVICE
  86.  
  87.   mov bh,00h       &#59;pagina
  88.   mov bl,07h       &#59;atribut
  89.   mov cx,2000      &#59;80*25nombre de caracters a escriure
  90.   mov al,' '       &#59;caracter
  91.   mov ah,09h       &#59;servei per escriure caracter.
  92.   int BIOSSERVICE
  93.  
  94.   pop DX
  95.   pop CX
  96.   pop BX
  97.   pop AX
  98.  
  99. Ret
  100.  
  101. ;*******************************************************************************
  102. ; Mostra el Tauler de joc sense Dades, és a dir, mostra la matriu Tauler
  103. ;
  104. ; Paràmetres d'entrada: Cap
  105. ; Paràmetres de sortida: Cap
  106. ;*******************************************************************************
  107. MostraTauler:
  108.  
  109.   push AX
  110.   push BX
  111.   push CX
  112.   push DX
  113.   push SI
  114.  
  115.  &#59;Inicialitzar registres
  116.   mov bh,00h       &#59;pagina  
  117.   mov dh,06        &#59;fila inicial
  118.   mov dl,33        &#59;columna inicial
  119.  
  120.   mov bl,07h       &#59;atribut
  121.   mov cx,1         &#59;escriurem 1 caracters cada cop
  122.  
  123.   mov si,0         &#59;index per accedir al tauler
  124.  
  125. bucleMT:
  126.   mov ah,02h       &#59;servei per posicionar el cursor
  127.   int BIOSSERVICE
  128.  
  129.   mov al,Tauler[SI]&#59;caracter
  130.  
  131.   mov ah,09h       &#59;servei per escriure caracter.
  132.   int BIOSSERVICE
  133.  
  134.   inc si           &#59;incrementem l'índex per accedir a les dades
  135.        &#59;Actualitzem posició del cursor (fila i columna)
  136.   inc dl           &#59;columna
  137.   cmp dl, 46       &#59;Quan arribem a la columna 46 ens posem a l'inici
  138.   jl bucleMT     &#59;de la següent fila.
  139.   mov dl, 33
  140.   inc dh           &#59;fila
  141.   cmp dh, 19     &#59;Quan arribem a la fila 19 vol dir que hem acabat
  142.   jl bucleMT     &#59;de dibuixar el tauler.
  143.  
  144.   pop SI
  145.   pop DX
  146.   pop CX
  147.   pop BX
  148.   pop AX
  149.  
  150.   ret
  151.  
  152. ;*******************************************************************************
  153. ; Buscar posició Inicial per començar a jugar.
  154. ; Buscar on hi ha l'espai en blanc i verifica que només hi hagi un espai en
  155. ; blanc a la matriu Fitxa. Si només hi ha un espai en blac posiciona el cursor
  156. ; en aquella casella. Si hi ha més d'un o cap espai en blanc posem Estat=5 per acabar.
  157. ; Paràmetres d'entrada: Cap
  158. ; Paràmetres de sortida: Cap
  159. ;*******************************************************************************
  160. PosIni:
  161.  
  162.  
  163.   ret
  164.  
  165. ;*******************************************************************************
  166. ; Actualitza el contingut del Tauler de Joc amb les dades de la matriu Fitxa
  167. ; i mostra els moviments que podem realitzar a pantalla cridant a la subrutina
  168. ; MostraDigits. El cursor ha de quedar en el mateix lloc que estava.
  169. ; Paràmetres d'entrada: Cap
  170. ; Paràmetres de sortida: Cap
  171. ;*******************************************************************************
  172.  
  173. ActualitzaTauler:
  174.  
  175.  
  176.   ret
  177.  
  178. ;*******************************************************************************
  179. ; Converteix un valor decimal (entre 0 i 99) en dos caràcters ASCII.
  180. ; S’ha de dividir el valor entre 10, el quocient representarà les desenes i
  181. ; el residu les unitats, després s’han de convertir a ASCII.
  182. ; Mostra els 2 digits ASCII a la posició de pantalla indicada a través de la pila.
  183. ; El valor i la posició es passen per la pila.
  184. ; Paràmetres d'entrada: valor [bp+6] i posició (fila,columna) [bp+4]
  185. ; Paràmetres de sortida: cap
  186. ;*******************************************************************************
  187.  
  188. MostraDigits:
  189.  
  190.  
  191.   ret
  192.  
  193. ;*******************************************************************************
  194. ; Llegim una tecla utilitzant el servei 08h de les crides al DOS.
  195. ; Segons la tecla llegida cridarem al procediment corresponent.
  196. ;    [‘i’,’j’,’k’ o ’l’] cridar al procediment MouCursor
  197. ;    ‘<espai>’ cridar al procediment MouFitxa
  198. ;    ‘q’ posa Estat=0.
  199. ; (per la lectura de teclar utilitzar només crides als serceis del DOS).
  200. ; Paràmetres d'entrada: Cap
  201. ; Paràmetres de sortida: Cap
  202. ;*******************************************************************************
  203. LlegirTecla:
  204.  
  205.  
  206.   ret
  207.  
  208. ;*******************************************************************************
  209. ; Mou el cursor segons la direcció indicada per AL i actualitza FilCur i ColCur
  210. ; segons la direcció que s’haig seleccionat
  211. ; Paràmetres d'entrada: AL indica la direcció del moviment ('i', 'j', 'k' o 'l')
  212. ; Paràmetres de sortida: Cap
  213. ;*******************************************************************************
  214. MouCursor:
  215.  
  216.  
  217.   ret
  218.  
  219. ;*******************************************************************************
  220. ; Mira si hi ha una casella buida al costat (dalt, baix, esquerra o dreta) de
  221. ; la casella actual del cursor, si és així fem el moviment de la fitxa i
  222. ; decrementa en un el número de moviments, si estem a la casella buida o si
  223. ; la casella buida no està al costat de la casella on estem, no moure cap fitxa
  224. ; ni descomptar moviments.
  225. ; Paràmetres d'entrada: Cap
  226. ; Paràmetres de sortida: Cap
  227. ;*******************************************************************************
  228. MouFitxa:
  229.  
  230.  
  231.   ret
  232.  
  233. ;*******************************************************************************
  234. ; Verifica si el tauler està ordenat, és a dir, les fitxes estan ordenades
  235. ; d’esquerra a dreta i de dalt a baix, quedant la casella buida a la última
  236. ; posició (baix-dreta), si és així canviar l’estat a 2 (Guanya).
  237. ; Verifica si s'han esgotat els moviments disponibles, si és així posa estat a 4
  238. ; (moviments exhaurits)
  239. ; Paràmetres d'entrada: Cap
  240. ; Paràmetres de sortida: Cap
  241. ;*******************************************************************************
  242.  
  243. VerificaFi:
  244.  
  245.  
  246.   ret
  247.  
  248. ;*******************************************************************************
  249. ; Mostra el missatge indicat per SI.
  250. ; Paràmetres d'entrada: SI: adreça del missatge que volem mostrar
  251. ; Paràmetres de sortida: Cap
  252. ;*******************************************************************************
  253. MostraMissatge:
  254.  
  255.  
  256.   ret
  257.  
  258.  
  259. ;*******************************************************************************
  260. ; Instal·lació de la rutina d'atenció d'interrupció de rellotge
  261. ; Paràmetres d'entrada: Cap
  262. ; Paràmetres de sortida: Cap
  263. ;*******************************************************************************
  264. InstalRAI:
  265.  
  266.  
  267.   ret
  268.  
  269. ;*******************************************************************************
  270. ; Desinstal·lació de la rutina d'atenció d'interrupció de rellotge
  271. ; Paràmetres d'entrada: Cap
  272. ; Paràmetres de sortida: Cap
  273. ;*******************************************************************************
  274. DesInstalRAI:
  275.  
  276.  
  277.   ret
  278.  
  279.  
  280. ;*******************************************************************************
  281. ; Rutina d'atenció de l'interrupció del rellotge
  282. ; Paràmetres d'entrada: Cap
  283. ; Paràmetres de sortida: Cap
  284. ;*******************************************************************************
  285. RAIrellotge :  
  286.  
  287.   push ax
  288.   push dx
  289.   push ds
  290.  
  291.   mov ax,@DATA
  292.   mov ds,ax
  293.  
  294. &#59;codi de la RAI
  295.  
  296.  
  297. FiRAIrel:
  298.   mov al,20h
  299.   out 20h,al
  300.  
  301.   pop  ds
  302.   pop  dx
  303.   pop  ax
  304.  
  305.         iret
  306.  
  307.  
  308.  
  309. ;*******************************************************************************
  310. ; Programa Principal
  311. ;*******************************************************************************
  312. inici:
  313.   STARTUPCODE
  314.  
  315.   Call EsborraPantalla  
  316.  
  317.   Call MostraTauler
  318.  
  319.  &#59;El vostre codi
  320.  
  321.  
  322.  
  323.  
  324.  
  325.   EXITCODE 0
  326.  
  327. end inici
  328.  
  329.  

3
Microcontroladores / Programar Teclado En Pic
« en: Miércoles 25 de Abril de 2007, 11:12 »
Hola, alguien sabe como plantear el sistema de rastreo para averiguar qué tecla ha sido pulsada en un teclado de 12 teclas?

3 columnas x 4 filas
está conectado al puerto B de un pic 16f84a, es decir el puerto B como entrada

Necesitaría ayuda o bien en lenguaje ensamblador o en C2C (que es el lenguaje d emi compilador, PicAntIDE)

El ojbetivo es identificar la tecla pulsada para después darle una función especifica.

Un saludo y gracias anticipadas.

4
Microcontroladores / Convertir Asm A Hex
« en: Martes 20 de Marzo de 2007, 15:43 »
qué programa conoceis que haga esta conversión?

me he descargado varios, pero no funcionan bien.

Un saludo

5
Microcontroladores / Simulador Para Pic16f84a
« en: Lunes 19 de Marzo de 2007, 14:38 »
Alguien sabe algún simulador para poder probar programas para el pic 16F84a?? esque ya me he cargado 2 en 10 minutos al cargar un programa, la verdad es que no entiendo por qué sucede... Agradecería vuestra ayuda

Saludos

6
Microcontroladores / Escribir/leer En La E2prom
« en: Viernes 16 de Marzo de 2007, 10:55 »
Saludos a todos.

Necesitaría saber cómo se escribe y se lee en la memoria EEPROM del PIC16F84a.

Mi idea es la siguiente:

Primero quiero escribir en la memoria los números del 0 al 9, a través del programa con la codificación:

1.-00000110b [03h]
2.-01011011b [5Bh]
3.-01001111b [4Fh]
.
.
.

Es para un módulo siete segmentos.

Una vez haya escrito la memoria, mediante el PORTA del [RA3-RA0], quisiera meter la codificación del número en binario y hacer que se encienda el número decimal correspondiente leyendo de la posición de memoria que le toca.

Esto lo he hecho pero con un switch - case, pero necesito aprender a escribir y leer en la memoria EEPROM.

Gracias por anticipado

PD: con el código necesario para escribir/leer de la memoria 2 números ya me basta, el resto ya lo desarrollaré yo, esque necesito ver como se empieza.

7
Microcontroladores / Instrucciones Para Seleccionar Banco De Memoria
« en: Martes 13 de Marzo de 2007, 17:47 »
Buenas, aquí estoy otra vez... con mis dudas, jejejeje, pues bién, tengo este código para un PIC16F873:

Código: Text
  1.  
  2.    bcf STATUS,RP0;
  3.    bcf STATUS,RP1
  4.    movf param01_rd_flsh,w
  5.    bsf STATUS,RP1;
  6.    movwf EEADR;
  7.    bcf STATUS,RP1;
  8.    movf param00_rd_flsh,w
  9.    bsf STATUS,RP1;
  10.    movwf EEADRH
  11.    bsf STATUS, RP1;
  12.    bsf STATUS, RP0;
  13.    bsf EECON1,EEPGD;
  14.    bsf EECON1,RD;
  15.    nop
  16.    nop
  17.    bcf STATUS,RP0
  18.  
  19.  

y buscando por internet no me queda claro qué hacen las instrucciones, por ejemplo, según un libro que tengo, al poner [bcf STATUS,RP0] estoy seleccionando el banco 0, no?

Por lo tanto en el código de después, estoy seleccionando el banco 1?

No se bien bien por qué se hace, pero lo veo un poco ambiguo, si selecciono primero un banco, y luego otro, el primero no queda "descartado"?

En fin, en su totalidad el código no lo entiendo muy bien... si alguien con un poco de tiempo y paciencia me lo puede explicar, estaré muy agradecido, mientras seguiré "decodificando" el resto del código que si que entiendo. Lo único que pienso es que se trata de escribir y/o leer en la memoria flash y/o e2prom... espero no estar equivocado en eso...

Gracias por anticipado.

8
Microcontroladores / Activar Interrupción Pic16f84
« en: Jueves 8 de Marzo de 2007, 10:56 »
Hola, pues bién... estoy "formandome" sobre PIC's, ya que en mi proyecto fin de carrera debo "solapar" dos mandos a radio frecuencia y tengo que programar el resultante. Bien, pues el caso es que tengo un pequeño problema, no se bien bien como se activan las interrupciones, he hecho un programa sencillo en el cual al finalizar una serie de procesos (hacer correr una luz) entra en modo sleep. Mi intención es que al activar una de las interrupciones, se salga del modo sleep y vuelva a reiniciar el programa. Se que no es muy complicado, pero de momento no me sale.

Recursos utilizados:

PROGRAMADOR: Micro PIC trainer v1.1
PIC: 16F84A
software: PicAnt IDE, MPlab, IC-PROG

Se que el vector de interrupciones se situa en la 0x04h, y que para que se activen las interrupciones debe estar a 1 el GIE (a parte de su correspondiente bandera de interrupción), lo que no se es si debo poner yo a 1 el GIE al inicio del programa... en fin, que voy algo perdido en interrupciones.


Código:


Código: Text
  1.  
  2. #include <system.h>
  3.  
  4. asm
  5.  
  6. {
  7. list p=16F84A
  8. __config H'3FF1'
  9. }
  10.  
  11.  
  12. main()
  13. {
  14.  
  15. int j,k,i,m;
  16.  
  17. set_bit( STATUS, RP0 );            
  18. OPTION_REG= 01010000b;
  19. set_tris_b(0);
  20. clear_bit( STATUS, RP0 );
  21.  
  22. while(1)
  23. {
  24.  
  25. j=0;
  26. PORTB=1;
  27.  
  28. while(j<3)
  29. {
  30. for(k=0;k<8;k++)
  31.   {
  32.   for(i=0;i<255;i++)
  33.     {
  34.     for(m=0;m<255;m++);
  35.     }
  36.   PORTB = PORTB * 2;
  37.   }
  38. j++;
  39. PORTB=1;
  40. }
  41.  
  42. PORTB=0;
  43. asm
  44. {
  45. sleep
  46. }
  47. }
  48. }
  49.  
  50.  

Agradezco vuestra ayuda.

9
PHP / Formulario
« en: Domingo 8 de Octubre de 2006, 10:18 »
Hola, necesito hacer un formulario en php, debe ser como si fuera un catálogo de una tienda, y debo poder escoger entre varios artículos, marcar la cantidad, y que el productod de la cantidad, por el precio de cada artículo se vaya actualizando en un apartado distinto, llamado "lista de la compra", es decir, que cada artículo que compre, se vaya añadiendo a la lista de la compra, y la suma total del coste en cualquier momento, se vea tanto en la pantalla del "catálogo", como en la pantalla de la "lista de la compra", como en la página principal de presentación.

Algún consejo?? :huh:

10
Hola, me gustaría saber si alguien me puede ayudar en la programación de un módulo que contiene:

Entradas:

Trama:  10 bits en paralelo que salen de otro módulo
Reset global del sistema
clk: reloj que vendrá generado por el módulo clk16 de la parte de recepción
Load: Solo será necesario que esté a '1' para iniciar el envio de la trama, cada vez que queramos enviar una trama deberemos hacer un pulso en Load
Enable: podrá tener dos valores, si está en '1' estará en reposo, si está en '0' funcionará.

Salidas:

-TxD(databit):Es la línea de datos que irá a parar a la parte receptora del otro extremo, los datos salen en serie.

es decir, esto resultaría ser un conversor Paralelo-in Serie-out.

Este módulo sería una parte del bloque transmisión de un sistema de comunicación mediante RS232.

Gracias por vuestra ayuda.

11
Visual C++ / Programar On/off De Una Bombilla
« en: Viernes 28 de Abril de 2006, 10:18 »
Hola, soy nuevo por aquí, me gustaría saber si alguien me pudiera ayudar en la programación de una bombilla mediante el puerto en serie y programandolo mediante c++. Únicamente necesitaría programar el encendido/apagado de la bombilla, pero si alguien me puede ayudar en el aspecto de graduar el nivel de luz... se agradecería, jejeje. Gracias

Páginas: [1]