|
Mostrar Temas
|
Páginas: 1 2 [3] 4 5 6
|
21
|
Programación / Programación General / Programacion en VHDL
|
en: 10 Octubre 2013, 11:33 am
|
Hola gracias por leer mi duda, estoy empezando a programa en VHDL y me da un error de compilación que no consigo corregir el código es el siguiente : ------------------------------------------------------------------------------- -- -- Title : demux -- Design : 3º practica -- Author : Manuel -- Company : Torca -- ------------------------------------------------------------------------------- -- -- File : demux.vhd -- Generated : Wed Oct 9 01:32:38 2013 -- From : interface description file -- By : Itf2Vhdl ver. 1.22 -- ------------------------------------------------------------------------------- -- -- Description : -- ------------------------------------------------------------------------------- --{{ Section below this comment is automatically maintained -- and may be overwritten --{entity {demux} architecture {demux}} library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.std_logic_unsigned.all entity demux is port( D : in STD_LOGIC; S : in STD_LOGIC; Z0 : out STD_LOGIC; Z1 : out STD_LOGIC ); end demux; --}} End of automatically maintained section architecture demux of demux is begin -- enter your statements here -- process(D,S) begin example: if S='0' then Z0<=D; else Z1<=D; end if; end process; end demux;
Estoy usando el programa de Active- HDL versión estudiante El error que me da es el siguiente:# Error: VLM_0040: VHDL unit cannot be compiled as the target library name is not a legal VHDL identifier. Lo que intento realizar es un demultiplexor que realice la selección de un dato en una entrada hacia uno de los dos canales de salida para datos de 1 bits D es la entrada, S es la señal de control, z0 y z1 son las salidas
Gracias por la ayuda
|
|
|
22
|
Foros Generales / Dudas Generales / ¿Es posible que moviestar te de un movil?
|
en: 10 Septiembre 2013, 19:26 pm
|
Hola gracias por leer mi duda , os explico mejor a lo que me refiero. De vacaciones me robaron mi movil un sammsung galaxy ace y tenia contratada tambien una linea de datos de internet, lo que me gustaria es "amenazar" a la compania para que me ofrezcan algo interesante, he pensado que si no me hacen caso coger y quitar a mis padres de moviestar ambos de contrato, aparte la linea que tienen de internet que es de moviestar, yo creo que tienen mucho perder:
- 3 contratos de moviles. - contrato de adsl.
He ido a una tiende de moviestar y me ha dicho que no me van hacer mucho caso porque con la nueva ley las compañias telefonicas no puedenregalar nada.
Tambien lo que me fastidia que como he dado de baja mi linea para que no la use quien me lo robó estoy pagando la linea de mi movil y no la estoy usando
Gracias por leer mi duda
|
|
|
23
|
Foros Generales / Dudas Generales / ¿Como se hace en excel lo siguiente?
|
en: 20 Julio 2013, 00:45 am
|
Hola gracias por leer mi duda. Me gustaria saber como puedo escribir un dato en una celda indicando su fila y columna, osea que yo direccione la celda y en esa posicion se guarde el valor he visto que se puede hacer en vba:
Cells(4,5)=23
No se programar en vba y querria saber si hay alguna manera de hacerlo sin programarlo en vba. he mirado las formulas del excel y no hay ninguna que lo haga. Gracias
|
|
|
24
|
Informática / Electrónica / Problemas con programación de pantalla de LCD
|
en: 7 Mayo 2013, 00:39 am
|
Hola a tods gracias por leer mi duda. El profesor nos ha mandado un trabajo para acabar la asignatura de Sistemas basados en microprocesador. Para ello nos ha dado unos ejemplos del autor Mikel Etxebarria. Para entender como funcinan los programas estoy trateando con ellos para entender coo funcionan y aprovechar lo que puedad de cada ejemplo para el trabajo.
Pues me ha atascado en uno de los primeros ejemplos supuestamente son muy faciles pero lo he modificado y no hace lo que quiero. Para ello lo he simulado con el Proteus 7 Professional, el codigo es el siguiente: List p=16F886 ;Tipo de procesador include "P16F886.INC" ;Definiciones de registros internos ;Ajusta los valores de las palabras de configuración durante el ensamblado.Los bits no empleados ;adquieren el valor por defecto.Estos y otros valores se pueden modificar según las necesidades __config _CONFIG1, _LVP_OFF&_PWRTE_ON&_WDT_OFF&_EC_OSC&_FCMEN_OFF ;Palabra 1 de configuración __config _CONFIG2, _WRT_OFF&_BOR40V ;Palabra 2 de configuración Lcd_var equ 0x70 ;Variables (3) empleadas por las rutinas de manejo del LCD MSE_Delay_V equ 0x79 org 0x00 ;Vector de RESET goto Inicio org 0x05 include "LCD4bitsPIC16.inc" ;Incluye las rutinas de manejo del LCD include "MSE_Delay.inc" Inicio clrf PORTB clrf PORTA ;Borra los latch de salida bsf STATUS,RP0 bsf STATUS,RP1 ;Banco 3 clrf ANSEL ;Puerta A digital clrf ANSELH ;Puerta B digital bcf STATUS,RP1 ;Banco 1 movlw b'11110001' movwf TRISA ;RA1-RA3 salidas movlw 0xf0 movwf TRISB ;RB0-RB3 salidas bcf STATUS,RP0 ;Banco 0 call UP_LCD ;Configura puertos para LCD call LCD_INI ;Secuencia de inicio del LCD movlw b'00001111' call LCD_REG ;Envía instrucción: LCD ON, Cursor ON y blink ON movlw 'H' call LCD_DATO ;Visualiza H movlw 'o' call LCD_DATO ;Visualiza o movlw 'l' call LCD_DATO ;Visualiza l movlw 'a' call LCD_DATO ;Visualiza a movlw ' ' call LCD_DATO ;Visualiza blanco Delay 1000 Milis movlw 'M' call LCD_DATO movlw 'a' call LCD_DATO movlw 'n' call LCD_DATO movlw 'u' call LCD_DATO Loop sleep ;Puesta en Standby end ;Fin del programa fuente
La librería de la pantalla LCD es:; LCD4bitsPIC16.inc ; Autor: Mikel Etxebarria ; (c) Ingeniería de Microsistemas Programados S.L. ; www.microcontroladores.com ; Bilbao 2010 ; ;Este conjunto de rutinas diseñadas para PIC16 que permiten realizar las tareas ;básicas de control del módulo de visualización LCD, mediante un interface de 4 bits. ;Este fichero se debe incluir en los futuros programas fuente mediante la directiva INCLUDE ; ;Las rutinas están adaptadas a las velocidades más lentas de algunos módulos LCD, en las cuales ;el tiempo de activación (Tc) entre una señal ENABLE y la siguiente es de unos 4 uS. La ;velocidad de trabajo se supone de 4MHz. ;UP_LCD: Configuración PIC para el LCD. ; ;LCD_INI: Rutina de visualización según Wintek. El LCD queda activado, borrado ; y en la 1ª posición del cursor ; ;LCD_DATO: Escritura de datos en DDRAM o CGRAM. Envía el dato presente en el W ; ;LCD_REG: Escritura de comandos en el LCD. Envía el comando presente en el W ; ;Se supone un interface de 4 bits. RB0-RB3 es la puerta de datos. RA1-RA3 son las señales de control. ;Estas conexiones se pueden modificar según se necesite #define ENABLE bsf PORTA,1 ;Activa señal E (RA1) #define DISABLE bcf PORTA,1 ;Desactiva señal E (RA1) #define LEER bsf PORTA,2 ;Pone LCD en Modo RD (RA2) #define ESCRIBIR bcf PORTA,2 ;Pone LCD en Modo WR (RA2) #define LCD_COMANDO bcf PORTA,3 ;Desactiva RS (modo comando)(RA3) #define LCD_DATOS bsf PORTA,3 ;Activa RS (modo dato)(RA3) #define LCD_C_PORT PORTA ;Puerta de control del LCD (RA1-RA3) #define LCD_C_TRIS TRISA ;Control de la puerta de control del LCD #define LCD_PORT PORTB ;Puerta de datos del LCD (RB0-RB3) #define LCD_TRIS TRISB ;Control de la puerta de datos del LCD ;Variables empleadas por las rutinas de control del LCD CBLOCK Lcd_var ;Inicio de las variables. Será la primera Lcd_Temp_1 ;direccón libre disponible Lcd_Temp_2 Lcd_Temp_3 ENDC ;************************************************************************* ;UP_LCD: Configuración PIC para el LCD. ; UP_LCD LCD_COMANDO ;RS=0 DISABLE ;E=0 ESCRIBIR ;R/W=0 bsf STATUS,RP0 ;Banco 1 movf LCD_C_TRIS,W andlw b'11110001' movwf LCD_C_TRIS ;Puerta de control del LCD como salida movf LCD_TRIS,W andlw 0xF0 movwf LCD_TRIS ;Puerta de datos del LCD como salidas bcf STATUS,RP0 ;Banco 0 return ;************************************************************************** ;LCD_BUSY: Lectura del Flag Busy y de la dirección. No retorna hasta que busy sea "0" ; LCD_BUSY clrwdt bsf STATUS,RP0 ;Banco 1 movf LCD_TRIS,W andlw 0xf0 iorlw 0x0f movwf LCD_TRIS ;Puerta de interface como entradas bcf STATUS,RP0 ;Banco 0 LCD_COMANDO ;Modo dato LEER ;Pone el LCD en Modo RD LCD_BUSY_1 nop ENABLE ;Activa el LCD swapf LCD_PORT,W andlw b'11110000' movwf Lcd_Temp_3 ;Lee y salva los 4 bits de mas peso DISABLE nop ENABLE ;Activa el LCD nop movf LCD_PORT,W andlw b'00001111' iorwf Lcd_Temp_3,F ;Lee y salva los 4 bits de menos peso nop DISABLE btfsc Lcd_Temp_3,7 ;Busy activado ?? goto LCD_BUSY_1 ;Si, volver a leer ESCRIBIR ;Modo escritura bsf STATUS,RP0 ;Banco 1 movf LCD_TRIS,W andlw 0xf0 movwf LCD_TRIS ;Puerta de interface como salida bcf STATUS,RP0 ;Banco 0 return ;************************************************************************** ;LCD_E: Pulso de Enable. En algunos LCD's esta señal debe estar a "0" un tiempo mínimo ;antes de volver a ponerse a "1". Se puede variar el valor de temporización en función ;del tipo de LCD. ; LCD_E ENABLE ;Activa E nop nop DISABLE ;Desactiva E nop nop return ;************************************************************************** ;LCD_DATO: Escritura de datos en DDRAM o CGRAM. Envía el dato presente en el W ; LCD_DATO movwf Lcd_Temp_2 ;Salva el dato a visualizar call LCD_BUSY ;Espera que el LCD esté libre movlw 0xf0 andwf LCD_PORT,F swapf Lcd_Temp_2,W andlw 0x0F iorwf LCD_PORT,F ;Salida de los 4 bits de mas peso ESCRIBIR ;Modo escritura LCD_DATOS ;Modo datos call LCD_E ;Genera pulso de Enable movlw 0xf0 andwf LCD_PORT,F movf Lcd_Temp_2,W andlw 0x0f iorwf LCD_PORT,F ;Salida de los 4 bits de menos peso call LCD_E ;Genera pulso de Enable return ;************************************************************************** ;LCD_REG: Escritura de comandos en el LCD. Envía el comando presente en el W LCD_REG movwf Lcd_Temp_2 ;Salva el dato a visualizar call LCD_BUSY ;Espera que el LCD esté libre movlw 0xf0 andwf LCD_PORT,F swapf Lcd_Temp_2,W andlw 0x0f iorwf LCD_PORT,F ;Salida de los 4 bits de mas peso ESCRIBIR ;Modo escritura LCD_COMANDO ;Modo comandos call LCD_E ;Genera pulso de Enable movlw 0xf0 andwf LCD_PORT,F movf Lcd_Temp_2,W andlw 0x0f iorwf LCD_PORT,F ;Salida de los 4 bits de menos peso call LCD_E ;Genera pulso de Enable return ;*************************************************************************** ;LCD_INI: Rutina de visualización según Wintek. El LCD queda activado, borrado ;y en la 1ª posición del cursor LCD_INI movlw .75 movwf Lcd_Temp_1 call LCD_DELAY ;Temporización de unos 15mS tras el Power-On DISABLE ESCRIBIR LCD_COMANDO ;Modo comando y escritura movlw 0xf0 andwf LCD_PORT,F movlw 0x03 iorwf LCD_PORT,F ;Comando FUNCTION SET sin chequeo de busy call LCD_E ;Genera pulso de Enable movlw .25 movwf Lcd_Temp_1 call LCD_DELAY ;Temporiza unos 5mS movlw 0xf0 andwf LCD_PORT,F movlw 0x03 iorwf LCD_PORT,F ;Comando FUNCTION SET sin chequeo de busy call LCD_E ;Genera pulso de Enable movlw .5 movwf Lcd_Temp_1 call LCD_DELAY ;Temporiza unos 1 ms movlw 0xf0 andwf LCD_PORT,F movlw 0x02 iorwf LCD_PORT,F ;Comando FUNCTION SET a 4 bits sin chequeo de busy call LCD_E ;Genera pulso de Enable movlw b'00101000' call LCD_REG ;Comando FUNCTION SET con chequeo de busy movlw b'00001000' call LCD_REG ;Display Off movlw b'00000001' call LCD_REG ;Comando HOME movlw b'00001100' call LCD_REG ;Comando Diaplay ON return ;***************************************************************************** ;LCD_DELAY: Rutina de temporización de unos 200 uS a 4MHz que se repite tantas veces ;como indica la variable Lcd_Temp_1. Se emplean las variables Lcd_Temp_1 ;y LCD_Temp_2 en lugar del TMR0. Este queda libre para las aplicaciones del usuario LCD_DELAY: movlw .50 movwf Lcd_Temp_2 LCD_DELAY_1: clrwdt decfsz Lcd_Temp_2,F goto LCD_DELAY_1 decfsz Lcd_Temp_1,F ;Bucle de 4uS que se repite 50 veces (200us) goto LCD_DELAY ;El bucle de 200uS se repite Lcd_Temp_1 veces return
Y la librería del MSE_Delay es:;************************************************************************************************************************ ; ; Autor: Mikel Etxebarria ; (c) Ingeniería de Microsistemas Programados S.L. ; ; ; ;Macro y rutina de temporización que se ajustan en función de la frecuencia de trabajo Fosc. En el programa principal ;se debe definir: ;a) La frecuencia de trabajo (en hz) mediante ... "#define Fosc xxxxxxxx" ;b) Inicio de las variables de temporización " MSE_Delay_V equ 0xXX " ; ;El usuario llama a la macro desde su programa principal mediante ... "Delay xxxx Milis" ; ;Se obtiene una precisión razonable con valores de temporización desde 1 hasta 2000 mS y a frecuencias Fosc ;que van desde 1MHz hasta 48MHz #define Milis * D'1000000' CBLOCK MSE_Delay_V ;Inicio de las variables. Será la primera MSE_Delay_1 ;direccón libre disponible MSE_Delay_2 MSE_Delay_3 ENDC Delay macro tiempo_ns ;tiempo_ns expresa en ns el tiempo de temporización deseado ifndef Fosc ;En el programa principal se ha definir la frecuencia de trabajo en Hz messg "ERROR !! - Establecer la frecuencia de trabajo (p.e. #define Fosc 4000000)" exitm endif radix dec ;Operaciones en base decimal variable ciclo_instruc_ns = (( 1000000000 ) / (Fosc / 4 )) ;Calcula ciclo de instrucción en función de la frecuencia Fosc variable ciclos = (tiempo_ns / ciclo_instruc_ns) ;Calcula el nº de ciclos necesarios para la temporización deseada movlw upper (ciclos/4)+1 movwf MSE_Delay_1 movlw high (ciclos/4)+1 movwf MSE_Delay_2 movlw low (ciclos/4) movwf MSE_Delay_3 ;Carga las variables de temporización con el nº de ciclos calculado call MSE_Delay endm MSE_Delay clrwdt ;Bucles de temporización decfsz MSE_Delay_3,f goto MSE_Delay decfsz MSE_Delay_2,f goto MSE_Delay decfsz MSE_Delay_1,f goto MSE_Delay return
Pues yo he añadido lo siguiente al codigo original:Delay 1000 Milis movlw 'M' call LCD_DATO movlw 'a' call LCD_DATO movlw 'n' call LCD_DATO movlw 'u' call LCD_DATO
Al simularlo en proteus me sale Manu al instante y no espera 1 segundo y no entiendo por qué no funciona.Se me queda ejecutando en la instrucción"call LCD_INI" y no sale de hay (lo he simulado paso a paso con MPLAB). No entiendo que si no sale de ese bucle como es capaz de poner el mensaje si no puee avanzar en el programa. Se lo he preguntado al profesor y me ha dicho que no tiene ni idea que como el no ha hecho las librerias ni los programas no sabe como funcionan y que me busque la vida, nos da programas que ni se molesta en mirar, por eso pregunto aqui, ya que hay gente muy buena que le da mil vueltas a muchos de los profesores de universidad Os dejo el montaje del LCD y el PIC en Proteus:https://dl.dropboxusercontent.com/u/68772720/CAJA%20FUERTE.DSN Gracias por la atencion salu2
|
|
|
25
|
Informática / Electrónica / Duda sobre programa PIC
|
en: 17 Abril 2013, 10:24 am
|
Hola gracias por leer mi duda, tengo un programa que nos ha dado el profesor y tenemos que explicar como funcionan los distintos reset Hay algo que no entiendo:;********************************************************************************************** ;********************************************************************************************** ; * ; Filename: _________.asm * ; Date: ___________ * ; File Version: vs0.0 * ; * ; Author: Mikel Etxebarria * ; Company: Ingeniería de Microsistemas Programados S.L. * ; Grade program: GIEA * ; Subject: * ; * ;********************************************************************************************** ; * ; Files Required: P16F886A.INC * ; * ;********************************************************************************************** ; * ; Descrpción: * ;El Watch Dog Timer (WDT) ; ; ;El WDT se alimenta a partir de un oscilador interno e independiente de 31KHz (periodo de 32uS). Dispone de un ;prescaler de 8 bits controlado mediante el OPTION_REG y, otro de 16 bits, que se controla mediante WDTCON. El tiempo ;total para debordar es de 32uS * OPTION_REG * WDTCON. En el presente ejemplo el prescaler de OPTION_REG es de 128. ;De esta forma el intervalo de desbordamiento es de 32uS * 128 * WDTCON. Por su parte WDTCON se carga con el valor ;binario procedente de las entradas RA3:RA0. De esta forma se obtienen desbordamientos a intervalos variables según ;la siguiente tabla: ;RA3:RA0 WDTCON TIEMPO RA3:RA0 WDTCON TIEMPO ;------- ------ ------ ------- ------ ------ ;0000 32 0.13 s 0110 2048 8.45 s ;0001 64 0.26 s 0111 4096 16.91 s ;0010 128 0.52 s 1000 8192 33.82 s ;0011 256 1.05 s 1001 16384 67.65 s ;0100 512 2.11 s 1010 32768 135.30 s ;0101 1024 4.22 s 1011 65536 270.60 s ;********************************************************************************************* ;***** CONFIGURACIÓN ************************************************************************* List p=16F886 ;Tipo de procesador include "P16F886.INC" ;Definiciones de registros internos #define Fosc 4000000 ;Velocidad de trabajo ;Ajusta los valores de las palabras de configuración durante el ensamblado.Los bits no empleados ;adquieren el valor por defecto.Estos y otros valores se pueden modificar según las necesidades __config _CONFIG1, _LVP_OFF&_PWRTE_ON&_WDT_OFF&_EC_OSC&_FCMEN_OFF ;Palabra 1 de configuración __config _CONFIG2, _WRT_OFF&_BOR40V ;Palabra 2 de configuración MSE_Delay_V equ 0x70 ;Variables (3) empleadas por las macros de temporización org 0x00 ;Vector de RESET goto Inicio org 0x05 include "MSE_Delay.inc" ;Incluir rutinas de temporización ;Rutina habitual de inicialización de los registros internos empleados en el ejemplo Inicio_Reg clrf PORTB ;Borra los latch de salida bsf STATUS,RP0 bsf STATUS,RP1 ;Selecciona banco 3 clrf ANSEL ;Puerta A digital clrf ANSELH ;Puerta B digital bcf STATUS,RP0 ;Selecciona banco 2 bsf WDTCON,SWDTEN ;Activa por software el WDT bsf STATUS,RP0 bcf STATUS,RP1 ;Selecciona banco 1 movlw b'11111111' movwf TRISA ;RA3-RA0 entradas movlw b'11110110' movwf TRISB ;RB3 y RB0 salidas movlw b'00001111' movwf OPTION_REG ;Preescaler de 128 para el WDT bcf STATUS,RP0 ;Selecciona banco 0 return ;Fin de la rutina de inicialización ;Determinar el origen del RESET Inicio btfss STATUS,NOT_TO ;RESET provocado por el WDT ?? goto WDT_RESET ;Si, se realiza el tratamiento oportuno ;RESET provocado por MCLR o conexión de alimentación (Power On Reset). RESET_POR call Inicio_Reg ;Inicialización habitual de registros ;Flash de 0.2 seg. sobre RB3 bsf PORTB,3 ;Activa RB3 Delay 200 Milis ;Temporiza 0.2 seg. bcf PORTB,3 ;Desactiva RB3 goto Loop ;RESET provocado por desbordamiento del WDT. Iniciación habitual WDT_RESET call Inicio_Reg ;Inicialización habitual de registros ;Flash de 0.1 seg. sobre RB0. Reajustar el prescaler del WDT según las entradas RA3:RA0 bsf PORTB,0 ;Activa RB0 Delay 100 Milis ;Temporiza 0.1 seg bcf PORTB,0 ;Desactiva RB0 rlf PORTA,W ;Lee las entradas RA3:RA0 andlw b'00011110' iorlw b'00000001' bsf STATUS,RP1 ;Selecciona banco 2 movwf WDTCON ;Actualiza el prescaler del WDT con el nuevo valor según las entradas bcf STATUS,RP1 ;Selecciona banco 0 ;Este es el cuerpo del programa principal. Es un bucle cerrado en el que el WDT NO se refresca por lo que ;tarde o temprano desbordará y provocará un RESET Loop nop goto Loop end ;Fin del programa fuente
MSE_Delay.inc Este es el subprograma de Delay ;************************************************************************************************************************ ; ; Autor: Mikel Etxebarria ; (c) Ingeniería de Microsistemas Programados S.L. ; ; ; ;Macro y rutina de temporización que se ajustan en función de la frecuencia de trabajo Fosc. En el programa principal ;se debe definir: ;a) La frecuencia de trabajo (en hz) mediante ... "#define Fosc xxxxxxxx" ;b) Inicio de las variables de temporización " MSE_Delay_V equ 0xXX " ; ;El usuario llama a la macro desde su programa principal mediante ... "Delay xxxx Milis" ; ;Se obtiene una precisión razonable con valores de temporización desde 1 hasta 2000 mS y a frecuencias Fosc ;que van desde 1MHz hasta 48MHz #define Milis * D'1000000' CBLOCK MSE_Delay_V ;Inicio de las variables. Será la primera MSE_Delay_1 ;direccón libre disponible MSE_Delay_2 MSE_Delay_3 ENDC Delay macro tiempo_ns ;tiempo_ns expresa en ns el tiempo de temporización deseado ifndef Fosc ;En el programa principal se ha definir la frecuencia de trabajo en Hz messg "ERROR !! - Establecer la frecuencia de trabajo (p.e. #define Fosc 4000000)" exitm endif radix dec ;Operaciones en base decimal variable ciclo_instruc_ns = (( 1000000000 ) / (Fosc / 4 )) ;Calcula ciclo de instrucción en función de la frecuencia Fosc variable ciclos = (tiempo_ns / ciclo_instruc_ns) ;Calcula el nº de ciclos necesarios para la temporización deseada movlw upper (ciclos/4)+1 movwf MSE_Delay_1 movlw high (ciclos/4)+1 movwf MSE_Delay_2 movlw low (ciclos/4) movwf MSE_Delay_3 ;Carga las variables de temporización con el nº de ciclos calculado call MSE_Delay endm MSE_Delay clrwdt ;Bucles de temporización decfsz MSE_Delay_3,f goto MSE_Delay decfsz MSE_Delay_2,f goto MSE_Delay decfsz MSE_Delay_1,f goto MSE_Delay return
Pues la duda que tengo es que lo ejecuto hace perfectamente la configuración de los puertos y el delay pero luego entra en el bluce Loop y sale que se desborda el Watchdog, y se ve en el registro Status que el bit 4 ha pasado a 0,hasta hay bien, pero vuelvo a ponerlo en marcha y no vuelve al principio del programa por lo tanto la parte de "Flash de 0.1 seg. sobre RB0. Reajustar el prescaler del WDT según las entradas RA3:RA0" no se ejecuta nunca porque no sale del bucle loop. El profesor nos ha dicho que no hay que modificar ni cambiar nada del programa que nos ha dado.
La simulación la he hecho con el MPLAB Sim y el oscilador a 4MHz. Gracias por la ayuda.
|
|
|
26
|
Informática / Electrónica / Dudas para crear temporizador en ensamblador
|
en: 20 Marzo 2013, 10:15 am
|
Hola quiero crear un temporizador con el PIC P16F886, de 0,5 segundos de pulso osea con una frecuencia de 1Hzy no se como programarlo , tengo la idea pero no se plasmarlo en emsalblador. Os explico: Voy a usar el oscilador interno del PICde 4MHz lo que es lo mismo con un periodo de 0,25us si una instruccion tarda 4 ciclos de reloj, cada instrucción tarda en ejegutarse 1us. Tengo que conseguir que oscile a 0,5s--> 500.000us para ello quiero poner el TMR0 inicialmente a 250 y el preescale a 8 con lo que el TMR0 se desborda cada 2000us (250*8=2000). Si con un contador cuento 250 vecesda 0,5 s (2000us*250=500.000us=0.5s). Lo que no se hacer o que no entiendo como se le da la orden de que empie a contar otra cosa que no entiendo es que al ir comparando el valor del contador cuenta como un tiempo de instrucción por tanto ya se retrasaria, no se tengo un cacao muy grande, se que tengo cuando se supere el desbordamiento del TMR0 cada 2000us tengo que poner el bit TI0IF del registro INTCON mediante programa a 0.
Aqui os dejo un diagrama de como creo que funciona:
Gracias
|
|
|
27
|
Informática / Electrónica / Problema al programar microcontrolador PIC16F84
|
en: 27 Febrero 2013, 19:09 pm
|
Buenas pues tengo un programa que tiene que hacer una suma una multiplicación y una resta (la función es : Y=2(A+B)-C), si el resultado me da correcto siempre y cuando no sea negativo el resultado, por ejemplo hago:Y=2(1+4)-6 me sale 4 pero si hago: Y=2(1+3)-10 me da 252 aqui os dejo el código a ver si veis algo raro:
list p=16F84 ;indicamos el pic que se vaa usar include "P16F84.INC";indicamos la librería del PIC que tiene que cargar REGA equ 0x11 ;Damos un nombre a esta posición de memoria REGISTRO A REGB equ 0x12 ;Damos un nombre a esta posición de memoria REGISTRO B DE USUARIO REGC equ 0x13 ;Damos un nombre a esta posición de memoria REGISTRO C DE USUARIO REGY equ 0x14 ;Damos un nombre a esta posición de memoria REGISTRO DE USUARIO DE RESULTADO REGAUX equ 0x15 ;Este registro lo vamos a usar para almacenar temporalmente resultados de pasos de operaciones intermedias org 0x00 ;vector de reset goto inicio org 0x05 ;el programa empieza en la posición 5 de la memoria ;********************* ;INICIO DE PROGRAMA ;********************* inicio MOVLW 0X01 ; Como no se puede cargar directamente un valor a una posición de memoria cualquiera, es necesario cargarlo previamente primero en el registro REGW MOVWF REGA ;Ahora si se puede mover el valor de REGW a una posición de memoria deseada MOVLW 0X02 ;Con los siguientes pasa lo mismo MOVWF REGB MOVLW 0X0A MOVWF REGC ;______________________________ BUCLE ; es necesario poner un bucle para que no finalice el programa el programa ;Suma de A+B MOVF REGA,0 ;CARGA EL VALOR REGA EN W ADDWF REGB,0 ;SUMA EL VALOR DE W + REGB Y COMO ES 0 SE GUARDA EN W MOVWF REGAUX ;EL VALOR DE LA SUMA ESTÁ EN EL REGISTRO AUXILIAR como ahora vamos a necesitar usar el registro REGW lo movemos a una posicón de memoria temporal ;Multiplicación 2(A+B) ->(A+B)+(A+B) ADDWF REGAUX,1 ;SUMA EL VALOR DE W + REGAUX Y COMO ES 0 SE GUARDA EN REGAUX. Como el valor de A+B ya lo teníamos en REGW y tiene el mismo valor que el REGAUX si se suman ambos será como una multiplicación. MOVF REGC,0 ;CARGA EL VALOR DE REGC EN W PARA PODER HACER LA RESTA Y=REGAUX-C ya que la instrución hace la resta en dirección contraria: F-W ;resta 2(A+B)-C SUBWF REGAUX,0 ;REALIZA LA RESTA Y LO GUARDA EN W MOVWF REGY ;CARGAMOS EL RESULTADO EN LA POSICIÓN REGY GOTO BUCLE ; Devuelve a donde esté la palabra bucle END ; fin de programa
Uso MPLAB para programarlo y simularlo. Gracias Fox_Neo[/size]
|
|
|
28
|
Media / Diseño Gráfico / Problemilla con el gimp 2.8
|
en: 15 Febrero 2013, 13:01 pm
|
He instalado el gimp y al ejecutarlo me sale el siguiente error:
The procedure entry point gdk_cairo_create could not be located in the dynamic link library ligdk-win32-2.0-0.dll. ¿Alguno sabeis por qué me da este error? Lo he instalado y desinstalado y nada. Gracias. Fox_Neo [/size]
|
|
|
|
|
|
|