Autor Tema: Pic simulador signal generator  (Leído 2393 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado fco1306

  • PIC16
  • ***
  • Mensajes: 128
Pic simulador signal generator
« en: 12 de Febrero de 2012, 06:16:31 »
Hola, buenas, ¿para qué sirve el módulo signal generator? ,estoy intentando leer una onda cuadrada de 58us en alto y 58us en bajo. ¿Se puede simular con este módulo?. ¿cómo se podría hacer ?
Un saludo

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Pic simulador signal generator
« Respuesta #1 en: 13 de Febrero de 2012, 10:12:35 »
Pues eso mismo, le indicas en que pin vas a inyectar la señal de onda cuadrada, indicas la frecuencia y la relación en % entre el ancho de pulso que la señal estará a 1 con respecto al 0. Por ejemplo un ducty cycle del 50% es una onda cuadrada que tiene igual ancho a 1 que a 0. Con el osciloscopio puedes ver la forma de onda y con el Microontroller Wiew puedes ver como cambia de valor el pin. Se tiene que configurar previamente el pin como entrada.
Saludos desde Granada, España.

Desconectado fco1306

  • PIC16
  • ***
  • Mensajes: 128
Re: Pic simulador signal generator
« Respuesta #2 en: 13 de Febrero de 2012, 17:54:08 »
Pues creo que de la manera que lo hago no puedo.
Con un 12f629 intento leer la onda.Configuro timer1 para medir el tiempo e interrupción por flanco ascendente de gp2
Código: [Seleccionar]
'****************************************************************
'*  Name    : TABLERO_DE_CONTROL.BAS                              *
'*  Author  : [JUAN MARTÍNEZ]                                   *
'*  Date    : 02/02/2012                                        *
'*  Version : 1.0                                               *
'*  Notes   : PIC12F629                                        *
'*  PANEL DE CONTROL Y LEER ONDA CUADRADA:                   *
'****************************************************************
'lee una onda de frecuencia en alto de 58us periodo total 116us
'Trabajando con servos, PIC12F629
Define CONF_WORD = 0x3184
Define CLOCK_FREQUENCY = 4
Define SIMULATION_WAITMS_VALUE = 1
AllDigital
Symbol verde = GPIO.0
Symbol rele1 = GPIO.1
Symbol boton = GPIO.2
Symbol mas = GPIO.3
Symbol rele = GPIO.5
Symbol servo = GPIO.4
TRISIO = %001100
'WaitMs 3000

'#########################################################################
'define timers
OPTION_REG.T0CS = 0  'selecciona reloj interno
OPTION_REG.PSA = 0  'asigna el prescales al timer0
OPTION_REG.PS0 = 1  'bits de la seleccion del factor de division,prescaler 256
OPTION_REG.PS1 = 1  'bits de la seleccion del factor de division,prescaler 256
OPTION_REG.PS2 = 1  'bits de la seleccion del factor de division,prescaler 256
INTCON.T0IF = 0  'borra el flag de desbordamiento del timer0
TMR0 = 178  'cargo el registro del tmr0 para que desborde cada 1mS
INTCON.T0IE = 1  'habilita las interrupciones del timer0
'valor a cargar en tmr0 para 20ms 178
T1CON.TMR1CS = 0  'asigna el reloj interno al timer1, se incrementa cada ciclo de instruccion
T1CON.T1CKPS0 = 0  'factor del preescales del timer1, 0 prescaler 1/1
T1CON.T1CKPS1 = 0  'factor del preescales del timer1, 0
INTCON.PEIE = 1  'bit de habilitacion de interrupciones de perifericos
TMR1H = 0x00  'carga el registro del contador desde cero byte alto
TMR1L = 0x00  'carga el registro del contador  desde cero byte bajo
T1CON.TMR1ON = 1  'habilitacion del TMR1, comienza a increm

'interrupcion int flanco ascendente
OPTION.INTEDG = 1
INTCON.INTE = 1
INTCON.GIE = 1
Enable








'#########################################################################
'define variables
Dim n As Byte
Dim flag1 As Byte
Dim posicion As Byte  '1 centro 2-dch 3-izq posicion servo
Dim pulso_dch As Byte  'angulo dch servo
Dim pulso_izq As Byte  'angulo izq servo
Dim outon As Byte  'Tiempo de la señal de control del servo a On (duty cycle)
Dim outoff As Word
Dim periodo As Word
Dim t1_alto As Byte  'bit alto timer1
Dim t1_bajo As Byte  'bit alto timer1
Dim t2_alto As Byte  'bit bajo timer1
Dim t2_bajo As Byte  'bit bajo timer1

Dim flag_flanco As Byte
'Dim off1 As Word
'Dim off2 As Word
'##########################################################################
'a = 1
flag1 = 1
Gosub leer
'rojo = 0
'verde = 0
servo = 0
periodo = 2000
flag_flanco = 0

'######################################################
'inicio programa
main:


Goto main
End                                               

'###################################################
'mueve el servo

On Interrupt
If INTCON.INTF = 1 Then  'si interrupción int
If flag_flanco = 0 Then  'recibido flanco subida
t1_alto = TMR1H  'leo valor timer1 en pulso alto
t1_bajo = TMR1L
OPTION.INTEDG = 0  'configuro int flanco bajada
flag_flanco = 1  'indico siguiente flanco de bajada
Else
t2_alto = TMR1H  'leo valor timer1 en pulso bajo
t2_bajo = TMR1L
OPTION.INTEDG = 1  'configuro int flanco subida
flag_flanco = 0  'siguiente flanco subida
TMR1H = 0x00  'carga el registro del contador desde cero byte alto
TMR1L = 0x00  'carga el registro del contador  desde cero byte bajo

Endif
Endif


INTCON.T0IF = 1
INTCON.INTF = 0
Resume                                           


leer:
Read 01, posicion
Read 03, pulso_dch
Read 04, pulso_izq
'Read 05, flag1
Return                                           


A la primera pregunta del signal generator le digo 118 ,la segunda 50. Sólo cuando pulso en el botón salta la interrupciòn.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Pic simulador signal generator
« Respuesta #3 en: 17 de Febrero de 2012, 07:13:04 »
Cuando tenga un rato libre te lo miro, pero lo mejor es trabajar sobre una controladora. Los simuladores son de ayuda pero en casos específicos como este suelen dar problemas.

Hay muchas controladoras por la red y son muy baratas, el gasto merece la pena y ahorras tiempo y quebraderos de cabeza.

http://www.pickey.es/uso_practico_del_pic12f675_ii.html
Saludos desde Granada, España.

Desconectado fco1306

  • PIC16
  • ***
  • Mensajes: 128
Re: Pic simulador signal generator
« Respuesta #4 en: 20 de Febrero de 2012, 16:43:04 »
Muchas gracias por la respuesta.Sí lo mejor sería la controladora, pero es que no tengo muy claro ni la electrónica ni que tipo de micro usar .Sí sé lo que necesito, manejar sobre 60 leds y sobre 30 pulsadores y 30 salidas para manejar servos.Según voy aprendiendo cosas voy cambiando componentes y micro. Ahora estoy con las matrices de leds y entrada de pulsadores por adc.Cuando quiero probar algo lo hago en una pequeña protoboard y la verdad es que sí que se pierde bastante tiempo, pero bueno.Para las salidas a los servos había pensado usar rs485, pero el micro que uso para moverlos es un 12f629 que no tiene puerto serie.Por algún lado he visto una tarjeta de ampliación de salidas y entradas y creo que usaré ese sistema.Si alguien tiene una idea mejor me vendría bien.
Un saludo