generar pulso cada 100 us y de 1 uf de ancho

#1
hola colegas, necesito una ayuda necesito generar un pulso cada 100us y de 1 us de ancho, si alguien sabe se lo agradeceria ya que no se manejar micros, solo algo de ttl cmos
 
Última edición:
#3
es ke ese es el problema todavia no me han enseñado nada de pics ni nada, el unico dispositivo programable que se manejar es la gal22v10 con el programa cypress warp
 
#4
bien en C podes hacer algo bien simple como esto

Código:
[configuarcion del micro, puertos, reloj, etc, etc]

void main (void)
	{
	while(1)                      //lo repite por siempre(bucle infinito)
		{
		SALIDA=1;          //pone en estado alto(1) el pin de salida
		delay_us(1);	      //espera durante 1uS
		SALIDA=0;          //pone en bajo (0) la salida
		delay_us(100);          //pausa de 100uS
		}
	}
Te recomendaria usar el pic16f84 porque seguro querran que uses este por ser tan famoso, si me esperas te lo puedo compilar y simular en proteus.
 
#7
El 555 es más inexacto.
Acá te dejo el programa en C, compilado, y simulado con el osciloscopio del proteus.
Lo malo de este programa es que no podes hacer nada más con el pic si queres exactitud, sino, usá interrupciones.
 

Adjuntos

#8
Hola
Yo solamente grabo los microcontroladores en ensamblador, asi que he abierto el codigo que has posteado para ver que exactitud tiene el C.

Te pongo una parte del codigo generado por C:
000B: BSF 06.0
.................... delay_us(1); //espera durante 1uS
000C: NOP
.................... SALIDA=0; //pone en bajo (0) la salida
000D: BCF 06.0
.................... delay_us(100); //pausa de 100uS


Suponiendo que el cristal de cuarzo utilizado sea el tipico de 4Mhz, entonces cada instruccion del micro se ejecuta en 1us, por lo tanto el tiempo que trancurre desde que tu conectas hasta que desconectas son de 2us.
Te sobra el NOP.

El tiempo de 100us no lo he mirado pero posiblemente el tiempo obtenido con ese programa sea de 102us, ya que el GOTO tarda 2us en ejecutarse.
 
#9
Hola, pepechip, si no es mucha molestia, estaría bueno que compiles el programa en asm así comparamos ambas señales producidas por los dos lenguajes. Digo porque yo de ensamblador no entiendo nada.
 
#10
vegetal digital muchas gracias por tu gran ayuda, eh mirado la simulacion y pepechip tiene algo de razon los tiempos varian un poco pero supongo que no influye mucho en lo que queremos obtener, pero si hay alguna forma de sacar el tiempo exacto se te agradeceria, sino no hay problema.
por otro lado necesito que me enseñes o ayudes a programar el pic, noc si se pueda con el BK presicion.
 
Última edición:
#12
este seria el codigo en asembler:
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

LIST P=16F84A ;
INCLUDE <P16F84A.INC>

CBLOCK 0x0C
tiempo
ENDC
ORG 0 ; El programa comienza en la dirección 0.
Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.
clrf TRISB ; Las líneas del Puerto B configuradas como salida.
clrf TRISA
bcf STATUS,RP0 ; Acceso al Banco 0.
Principal
bsf PORTB,1 ; pone a 1 ese pin
bcf PORTB,1 ; Lo pone a 0
DEMORA movlw .32
movwf tiempo
bucle decfsz tiempo, 1
goto bucle
goto Principal

END ; Fin del programa.
 
#13
hola pepechip, oye ps la verdad no sabemos manejar ese programa, y queriamos saber si depronto no lo puedes pasar en .hex, o el algun tipo de archivo para poderlo simular en proteus.

gracias
 
#14
Con el 555:

1er 555 funcionando como Astable:

Ra=12kohm
RB=1.2kohm
C=10 nf

Obtenes 10khz (T=100uSeg) con un duty del 9%.

2do 555 funcionando como Monoestable:

C=10nf
R=91 ohm

Obtenes un pulso de 1uSeg.

El tema esta en si se banca 1uSeg o no el 555, en las hojas de datos el valor minimo es 10 uSeg.

Todos los valores son comerciales. El conexionado simplemente lo haces a partir de la hoja de datos.
 
Última edición:
#16
Gracias pepechip, comparando las dos señales, parece ser mejor la creada en ensamblador, porque, la otra no es perfectamente recta el flanco de subida.
Ustedes que opinan?
 
#17
hola, disculpen por la demora, pero nos pusimos a terminar de diseñar el circuito con el pic programado por vegeta que aunque no son tiempos perfectos nos quedo apenas para lo que necesitabamos, bueno ps el profe bajo unos punticos por no ser exactamente 1 us, pero de resto muy bien, pues de no ser por la ayuda de uds no ubieramos podido entregar el circuito como les sucedio al resto de grupos.
muchas gracias y les voy a dejar la simulacion en proteus terminada :aplauso::aplauso:
gracias a todos los ke colaboraron.
 

Adjuntos

#18
bien en C podes hacer algo bien simple como esto

Código:
[configuarcion del micro, puertos, reloj, etc, etc]

void main (void)
	{
	while(1)                      //lo repite por siempre(bucle infinito)
		{
		SALIDA=1;          //pone en estado alto(1) el pin de salida
		delay_us(1);	      //espera durante 1uS
		SALIDA=0;          //pone en bajo (0) la salida
		delay_us(100);          //pausa de 100uS
		}
	}
Te recomendaria usar el pic16f84 porque seguro querran que uses este por ser tan famoso, si me esperas te lo puedo compilar y simular en proteus.
Buen dia... hace un rato me tope con esta pregunta y se me vino a la mente una idea no se si muy alocada, te comento que necesito controlar 3 servos, como son acciones repetitivas las que van a realizar, debo usar 2 señales de salida para cada servo es decir una señal para que el servo se posicione en P1 o otra para P2.

De esta manera necesitaría generar 6 señales diferentes con el oscilador (2 por servo)

Mi idea es utilizar este código para asignar esos pulsos a una variable, y cuanto sea necesario utilizarlas, solamente las mando llamar... se puede hacer eso?? es valido y si es asi esas variables de que tipo serian?

Estoy utilizando un PIC16f887 y lenguajes C y Ensamblador...
 
Última edición:

Temas similares

Arriba