Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?
09/06/2011 #1181

Avatar de torres.electronico

Saludos a todos, y hace un par de dias me tope con este topic que me gusto mucho linea a linea que fui viendo...
voy a ver si me hago de un espacio de tiempo, e irles sumando proyectos mios... algunos quizas no suba el diagrama por una razon personal, y otro quizas si...
Arranco con un sencillo y eficaz Controlador de Largada, con tacometro incluido...
Tengo una version mejorada, que incluye mas funciones, pero que corre con un 877a y una eeprom.
Saludos

Código:
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : Martin A. Torres Fortelli                         *
'*  Notice  : Copyright (c) 2010 Escuela Tecnica Virtual        *
'*          : All Rights Reserved                               *
'*  Date    : 03/09/2010                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ Device   PIC16F876
@ device xt_osc
define osc 20

define LCD_DREG    PORTB
define LCD_DBIT    4
DEFINE LCD_RSREG   PORTB
DEFINE LCD_RSBIT   3
DEFINE LCD_EREG    PORTB
DEFINE LCD_EBIT    2
define ADC_BITS    8
define ADC_CLOCK   3
DEFINE ADC_SAMPLEUS 10
;*******************************************************************
;********************* Config I/0 etc ******************************
ADCON1 = %00001110                       
Symbol boton_uno = PORTC.0          ;BOTON PULSADOR UNO
symbol boton_ctrlRPM = PORTC.3      ;BOTON CONTROLADOR DE LARGADA
symbol boton_enter = PORTC.5        ;BOTON PULSADOR ENTER
SYMBOL boton_subir = PORTC.6        ;BOTON PULSADOR SUBIR
SYMBOL boton_bajar = PORTC.7        ;BOTON PULSADOR BAJAR

ent_RPM var portb.0                 ;Entrada de señal PWM
btn_1 var portC.0                   ;BOTON PULSADOR UNO
led_G var portC.2                   ;BOTON PULSADOR TRES
btn_CRPM var portC.3                ;BOTON CONTROLADOR DE LARGADA
enter var portC.5                   ;BOTON PULSADOR ENTER
bsubir var portC.6                  ;BOTON PULSADOR SUBIR
bbajar var portC.7                  ;BOTON PULSADOR BAJAR
releC var portC.4                   ;Salida relay corte RPM
led var portC.1                     ;Salida indicador LED
     
linea1 con $80
linea2 con $C0
       
temp VAR byte                       ; Byte Variable temporal
Cnt VAR word                        ; Cnt es una variable tipo byte
RPMalta var word                    ; RPMalta es una variable tipo word
RPMbaja var word                    ; RPMbaja es una variable tipo word
RPMaviso var word
lamda var byte

x var byte                          ; x es una variable tipo byte
x1 var byte                         ; x1 es una variable tipo byte
revo var word                       ; revo es una variable tipo word
disparo var byte                    ; disparo es una variable tipo byte

eeprom 0, [22,26]

;**********************************************************************
;********************** Cuerpo del programa ***************************
;**********************************************************************

ini1:
        lcdout $FE,1
        lcdout $FE, linea1,"Controlador de"
        LCDOUT $FE,$C3, "RPM V0.2a"
        pause 1000
        gosub loop

;*******************************************************************************
;******************* Visor simple de RPM ***************************************
;** Esta funcion, solo se emplea para monitorizar las RPM , el sensor Lambda****
;********************** y las opciones de config o control *********************
;*******************************************************************************
                
LOOP:
     ADCIN 0,lamda
     count portb.0, 125, revo
       revo= (revo / 4)/2 * 240 
     LCDOUT $FE,1,"RPM=",dec revo," L=",dec lamda      
     LCDOUT $FE,linea2,"En=CtrL 1=ProgCL"
     temp = 0
     BUTTON boton_enter, 0, 255, 0, temp, 1,PM_CL          ;boton_uno = PORTC.0
     temp = 0
     BUTTON boton_uno, 0, 255, 0, temp, 1,PM_Prog
     GOTO LOOP   

control_rpm:
count portb.0, 125, revo
       revo= (revo / 4)/2 * 240
LCDout $FE,1,"CONTROL LARGADA"
pause 100
if PORTC.3 = 1 then PM_CL
if revo > RPMbaja then
lcdout $FE,$c0,"RPM=",dec revo
high releC 
pause 250
low releC
endif 
goto control_rpm

;**---------------------------------------------------------**   
;**---------------------------------------------------------**
;**---------------------------------------------------------**

PM_CL:
       ADCIN 0,lamda
       count portb.0, 125, revo
       revo= (revo / 4)/2 * 240 
       LCDOUT $FE,1,"RPM=",dec revo," L=",dec lamda       
       lcdout $FE,$c0,"C=",dec RPMalta," CL=",DEC RPMbaja
       pause 100
       if PORTC.3 = 0 then control_rpm
       if enter= 0 then LOOP       
       gosub visor
       gosub control2
       GOTO PM_CL

;**---------------------------------------------------------** 
;**---------------------------------------------------------**
;**---------------------------------------------------------** 

visor:
       IF revo > RPMaviso then disparoLED
       if revo < RPMaviso then disparoLED_V
       if PORTC.3 = 0 then control_rpm
       if enter = 0 then LOOP
       pause 100
       return
disparoLED_V:
       temp = 0
      if boton_enter = 0 then LOOP
      high led_G : Low led
      pause 100
      low led_G
      goto control1
       
disparoLED:  
temp = 0
         
       high led : low led_G
       pause 100
       low led
       goto control1
control1:
       IF revo > RPMalta then corte1
       goto PM_CL       

;**---------------------------------------------------------**  
;**---------------------------------------------------------**
;**---------------------------------------------------------**  
   
control2:   
       if PORTC.3 = 0 then control_rpm
      if enter = 0 then LOOP  
       IF revo > RPMalta then corte1
       return

;**---------------------------------------------------------**   
;**---------------------------------------------------------**
;**---------------------------------------------------------**    

corte1:
LCDout $FE,1,"CORTE"
For disparo= 1 to 3
high releC 
pause 500
low releC
next
goto PM_CL

;****************************************************************
;********************** Seccion de Prog RPM *********************
;****************************************************************

 PM_Prog:
 RPMalta = 19500
 RPMbaja = 3500
 RPMaviso = 4000
 gosub soltar

;**---------------------------------------------------------**   
;**---------------------------------------------------------**
;**---------------------------------------------------------**

 grabar1:
 lcdout $FE,1,"Prog Visor Led" 
 lcdout $FE,$c0,"LED=",dec RPMaviso,"RPM"                                                        
 pause 100
 if bbajar = 0 then restar1
 if bsubir = 0 then sumar1
 if enter = 0 then grabarA
 goto grabar1
 
 restar1:
 RPMaviso = RPMaviso - 5
 goto grabar1
 
 sumar1:
 RPMaviso = RPMaviso + 5
 goto grabar1
 
 grabarA:
 gosub soltar
 write 0, RPMaviso
 
;**---------------------------------------------------------**   
;**---------------------------------------------------------**
;**---------------------------------------------------------**

 grabar2:
 lcdout $FE,1,"Prog Corte RPM" 
 lcdout $FE,$c0,"Corte=",dec RPMalta,"RPM"                                                        
 pause 100
 if bbajar = 0 then restar2
 if bsubir = 0 then sumar2
 if enter = 0 then grabarB
 goto grabar2
 
 restar2:
 RPMalta = RPMalta - 5
 goto grabar2
 
 sumar2:
 RPMalta = RPMalta + 5
 goto grabar2
 
 grabarB:
 gosub soltar
 write 0, RPMalta

;**---------------------------------------------------------**   
;**---------------------------------------------------------**
;**---------------------------------------------------------**

 grabar3:
 lcdout $FE,1,"Prog Ctrl larg" 
 lcdout $FE,$c0,"Corte=",dec RPMbaja,"RPM"                                                        
 pause 100
 if bbajar = 0 then restar3
 if bsubir = 0 then sumar3
 if enter = 0 then grabarC
 goto grabar3
 
 restar3:
 RPMbaja = RPMbaja - 5
 goto grabar3
 
 sumar3:
 RPMbaja = RPMbaja + 5
 goto grabar3
 
 grabarC:
 gosub soltar
 write 3, RPMbaja
 goto LOOP
 
 soltar:
 high led
 pause 150
 low led
 
 soltar2:
 If bbajar = 0 then soltar2
 If bsubir = 0 then soltar2
 If enter = 0 then soltar2
 pause 100
 return
 end
09/06/2011 #1182


Que tal ya realice el control por teclado pero no me reconoce todos los caracteres deseo llegar a algo como esto:
Mmm.. pero la lectura del teclado como la haces???... tienes algo avanzado?
09/06/2011 #1183


Solicito Ayuda....

Con eso de los Timers...

uso un pic16f628a con un cristal de 10MHz

Tengo este codigo...
Código:
 
@ Device PIC16F628A
@ Device HS_Osc
@ Device WDT_Off
@ Device Pwrt_off
@ Device Mclr_off
@ Device BOD_Off
@ Device LVP_Off
@ Device CPD_Off
@ Device Protect_Off
 
Define Osc 10
 
OPTION_REG = %00000000 
INTCON = %11100000 
 
On Interrupt Goto intr 
 
SH Var PortB.0
High SH
Tmr0=$FF
 
Main:
Goto Main
 
Intr:
Disable
 toggle sh 
 resume 
enable
segun la calculadora esta...



obtengo .0008ms/1000=0.0000008s

para sacar los Hz= 1/0.0000008s=1250000Hz=1.25MHz

pero....






65.7KHz... niii poooooooooqqqqquito cercas del 1.25MHz
que estoy haciendo mal???
Imágenes Adjuntas
Tipo de Archivo: jpg Dibujo.JPG (79,1 KB (Kilobytes), 521 visitas)
Tipo de Archivo: jpg 100_2279.JPG (222,8 KB (Kilobytes), 517 visitas)
10/06/2011 #1184


Pic basic pro
Hola: Vivo en medellin y quiciera saber si me puedes dar asesoria para producir pwm basado en una fracuanecia o pulso generado por un receptor. La idea es camptar esa seÑal con un micro y enviarla atravez de un pin a un motor. Quiciera saber como puedo hacer en pbp esta instruccion. Se que con pulsin puedo leer seÑales que produce el receptor pero quiero generar pwm con seÑal de entrada para producir pwm salida segun entrada.


montoya8332 dijo: Ver Mensaje
hola, me gustaria saber que editor y compliador usas , ya que

yo tengo un programa llamado proton, pero no me funcionan tus ejemplos por error de sintaxis



hola amigo, me gustaria saber que edityor y compilador usas, ya que yo tengo un programa llamado proton , y no me funciona ninguno de estos proyectos, siempre me da error de sintaxis
10/06/2011 #1185


Se que con pulsin puedo leer seÑales que produce el receptor pero quiero generar pwm con seÑal de entrada para producir pwm salida segun entrada.
Si intentas con PULSOUT.... o PWM
11/06/2011 #1186

Avatar de ferdy575

respecto a pulsin quisiera saber si al usar esta función el pic queda condenado a realizar esta sola función ó puede realizar otras más mientras tanto, es decir por ejemplo controlar un motor o un lcd, generar pulsos o controlar luces, o sería necesario usar otro pic? un pic para cada función? o es pòsible que el pic haga todo el solito? alguien que por favor me explique esto pues no se como se haria el codigo para realizar varias funciones distintas al mismo tiempo; les agradezco su ayuda.
11/06/2011 #1187


alguien que por favor me explique esto pues no se como se haria el codigo para realizar varias funciones distintas al mismo tiempo; les agradezco su ayuda.
Mmmm... eso violaria todas la leyes de la termodinamica (no te creas no se)

yo creo que ni los procesadores CoreDuo pueden procesar dos cosas exactamente al mismo tiempo...
por eso se hacen a varias velocidades 4Mhz, 20MHz etc... lo que puedes es agilizar la velocidad de procesamiento...
11/06/2011 #1188


ferdy575 dijo: Ver Mensaje
respecto a pulsin quisiera saber si al usar esta función el pic queda condenado a realizar esta sola función ó puede realizar otras más mientras tanto, es decir por ejemplo controlar un motor o un lcd, generar pulsos o controlar luces, o sería necesario usar otro pic? un pic para cada función? o es pòsible que el pic haga todo el solito? alguien que por favor me explique esto pues no se como se haria el codigo para realizar varias funciones distintas al mismo tiempo; les agradezco su ayuda.
te cuento que apenas estoy empezando a conocer un poco el PBP, ya he sacado algunos proyectos y he tenido resultados como en otros no los he tenido. si pretende generar un PWM la instruccion que podes citar es HPWM, esto hace que el pwm interno trabaje y a la ves permite que el micro realice otras instrucciones:

HPWM 1 , 255 , 1000 : portb.0 = 1 pause 100 : portb.0=0


fijate en la instruccion: HPWM activa el pic cpp1 del micro que es pin por el cual va a salir la señal. 255 es el duty cicle, este cuando lo varias te da el ancho de pul y 255 es el maximo valor en HPWM. 1000 es la frecuencia o ciclos por segundo. espero que te sirva.

mecatrodatos dijo: Ver Mensaje
Que tal amigos uno de los lenguajes mas facil para programar micros es el basic pro sin despreciar el C por lo que abierto este hilo para empezar a ejecutar programas sencillos hasta llegar a los mas complejos.

miren lo facil que es prender un led con un pic 16f84A :

Código:
@ device xt_osc  ; oscilador externo XT
define osc 4     ; especifica que se va a utilizar uno de 4 Mhz

led var portb.0                       ; asignamos led a puerto RB0

inicio:

HIGH  led                               ;asigna  un 1 logico 
PAUSE 500                              ; tiempo de espera de 500mls
LOW  led                                ; apaga led
este es un ejemplo sencillo ire anexando el codigo fuente y su respectiva simulacion en proteus de todos los realizados en este hilo.

quiciera que me ayudaras con un algoritmo. quiero captar la señal que emite un receptor hobbico con una instruccion sea pulsin o count y convertir esa señal a PWM. es posible cojer esa variable y que HPWM varie segun la señal de entrada?. como puedo crear esa instruccion.

autotronico dijo: Ver Mensaje
lubeck:

Que tal ya realice el control por teclado pero no me reconoce todos los caracteres deseo llegar a algo como esto:

http://www.youtube.com/watch?v=sVivR...yer_detailpage

por lo que he estado usado el comando select case para contener todos los caracteres del teclado cuando pueda subo avances.

saludos.

este es un pequeño fragmento del programa:
quiciera que me ayudaras con un algoritmo. quiero captar la señal que emite un receptor hobbico con una instruccion sea pulsin o count y convertir esa señal a PWM. es posible cojer esa variable y que HPWM varie segun la señal de entrada?. como puedo crear esa instruccion.
11/06/2011 #1189


quiciera que me ayudaras con un algoritmo. quiero captar la señal que emite un receptor hobbico
Probablemente ellos sepan como funciona un receptor hobbico pero si pusieras mas informacion acerca de el, osea la señal que recibes es analoga o digital??? o que se yo... asi como que los pones a estudiar en algo que probablemente no lo hayan echo o no les interese... si pones que frecuencia recibes o como las recibes...bla bla .. no se eso digo yo...
12/06/2011 #1190

Avatar de arturouc

autotronico dijo: Ver Mensaje
lubeck:

Que tal ya realice el control por teclado pero no me reconoce todos los caracteres
Que tal autotronico
yo tube un problema similar con el driver del servomotor y el probema estaba en la velocidad de comunicacion y en otra ocacion en los capacitores del max232 (falso contacto)
12/06/2011 #1191


lubeck dijo: Ver Mensaje
Probablemente ellos sepan como funciona un receptor hobbico pero si pusieras mas informacion acerca de el, osea la señal que recibes es analoga o digital??? o que se yo... asi como que los pones a estudiar en algo que probablemente no lo hayan echo o no les interese... si pones que frecuencia recibes o como las recibes...bla bla .. no se eso digo yo...
OK...
creo que no me hice entender.

pulsin es una instruccion que lee el ancho de pulso bajo o alto segun el caso que una persona determine determine.

la señal es digital onda cuadrada. lo que yo necesito es hacer una instruccion de salida variable segun la señal que entra....
13/06/2011 #1192

Avatar de arturouc

guigo dijo: Ver Mensaje
OK...
creo que no me hice entender.

pulsin es una instruccion que lee el ancho de pulso bajo o alto segun el caso que una persona determine determine.

la señal es digital onda cuadrada. lo que yo necesito es hacer una instruccion de salida variable segun la señal que entra....
BASIC PARA MICROCONTROLADORES PAG. 116
Count
Sintaxis: Count pin, duración, variable
Con esta instrucción se puede medir la frecuencia de una señal simple,
contando el número de pulsos durante un tiempo determinado, definido en el
campo “duración” de la instrucción. Se pueden medir frecuencias de hasta 25
khz con un oscilador de 4 MHz. Para un oscilador de 20 MHz la frecuencia
máxima a ser medida será de 125 khz.

DICES QUE TU ONDA ES CUADRADA
debes caracterizar la señal de entrada para que determines que quieres a la salida
dependiendo de la cantidad de "pulsos" que valor debe tener el HPWM

ESTOY USANDO EL 16F877A
DEFINE OSC 4
DEFINE CCP1_REG PORTC
DEFINE CCP1_BIT 2
TRISB = %11111111
TRISC = %10000001 'puerto C bit 2 es el CCP1==>PARA EL HPWM
Pulsos Var Word
VEL VAR BYTE

Inicio:
Count PORTB.1, 500, Pulsos ' Cuenta los pulsos introducidos a través
' del pin RB1, durante 500 milisegundos y el
' resultado del conteo es almacenado en la

DEPENDIENDO DE LA CANTIDAD DE PULSOS
AQUI CALCULAS CUANTO DEBE VALER TU SALIDA
DE PWM (0-255)==>se lo cargas a VEL

HPWM 1, VEL, FPWM '1==>CCP1, VEL==> 0 - 255, FPWM es la frecuencia
GOTO Inicio
End

Espero te sirva...
13/06/2011 #1193


arturouc dijo: Ver Mensaje
BASIC PARA MICROCONTROLADORES PAG. 116
Count
Sintaxis: Count pin, duración, variable
Con esta instrucción se puede medir la frecuencia de una señal simple,
contando el número de pulsos durante un tiempo determinado, definido en el
campo “duración” de la instrucción. Se pueden medir frecuencias de hasta 25
khz con un oscilador de 4 MHz. Para un oscilador de 20 MHz la frecuencia
máxima a ser medida será de 125 khz.

DICES QUE TU ONDA ES CUADRADA
debes caracterizar la señal de entrada para que determines que quieres a la salida
dependiendo de la cantidad de "pulsos" que valor debe tener el HPWM

ESTOY USANDO EL 16F877A
DEFINE OSC 4
DEFINE CCP1_REG PORTC
DEFINE CCP1_BIT 2
TRISB = %11111111
TRISC = %10000001 'puerto C bit 2 es el CCP1==>PARA EL HPWM
Pulsos Var Word
VEL VAR BYTE

Inicio:
Count PORTB.1, 500, Pulsos ' Cuenta los pulsos introducidos a través
' del pin RB1, durante 500 milisegundos y el
' resultado del conteo es almacenado en la

DEPENDIENDO DE LA CANTIDAD DE PULSOS
AQUI CALCULAS CUANTO DEBE VALER TU SALIDA
DE PWM (0-255)==>se lo cargas a VEL

HPWM 1, VEL, FPWM '1==>CCP1, VEL==> 0 - 255, FPWM es la frecuencia
GOTO Inicio
End

Espero te sirva...
comprendo...
creo que en lo que estoy bloqueado es en la operacion que debe hacer el micro.
lo que pasa es que no entiendo muy bien como puedo hacer la operacion por ejemplo:

conunt portb.0,(0-500),vel ' que cuante de 0 a 500 y 500 sea = 255,
segun entrada 0 a 500 = 0-255 hpwm.

no se si esto funcione:

if vel =0< 500 then

hpwm 1 , vel , 1000

que pena amigo, jajajaaa estoy perdido con esto...te agradesco mucho el aporte.
14/06/2011 #1194

Avatar de arturouc

guigo dijo: Ver Mensaje
comprendo...
creo que en lo que estoy bloqueado es en la operacion que debe hacer el micro.
lo que pasa es que no entiendo muy bien como puedo hacer la operacion por ejemplo:

conunt portb.0,(0-500),vel ' que cuante de 0 a 500 y 500 sea = 255,
segun entrada 0 a 500 = 0-255 hpwm.

no se si esto funcione:

if vel =0< 500 then

hpwm 1 , vel , 1000

que pena amigo, jajajaaa estoy perdido con esto...te agradesco mucho el aporte.
0-255
0-500
saca una constante 255/500 (Nota:tambien puede ser 500/255)
255/500=0.51 ESTA ES TU CONSTANTE

el valor que se almacene en tu variable pulsos lo multiplicas por 0.51 y se lo asignas a vel
VEL=pulsos*0.51 ejemplo
si pulsos vale 500
VEL=500*0.51=255
ejemplo 2
si pulsos=300
VEL=300*.51=153

Y ESTE SERIA EL VALOR DEL PWM
NOTA: si tu cte es 500/255=1.9607.. la operacion seria pulsos/cte

espero te sirva...
14/06/2011 #1195

Avatar de inspector gadget

Saludos amigos del foro. Es la primera vez que ingreso asi que espero que mi pregunta sea clara para ustedes que tan amablemente han compartido su sabiduria y experiencia con los que estamos iniciando con la programacion en pic bsic. Uso el pic 16f628A ,se trata de leer el estado de un pulsador, encender un led por un segundo y que luego se apague. Hasta aqui todo marcha bien, pero si lo que quiero es que con otro pulsador conectado a rb1, al presionarlo 1 vez, el programa inicie y realice su rutina y se mantenga en ese estado hasta presionarlo nuevamente donde el programa se detendra y asi sucesivamente. Esto solo con aplicarle un pulso negativo a rb1. (on-off). La verdad lo he intentado con IF- THEN pero esta instruccion requiere que el pulso o estado siempre esté presente y pretendo usar un pulsador no un swiche. Espero me puedan ayudar con sus siempre utiles sugerencias mil gracias.
cmcon =7
pro:
if porb.3 =0 then encen
goto pro
encen:
high porta.1
pause 1000
low porta.1
goto pro
end
14/06/2011 #1196

Avatar de Dario

autotronico dijo: Ver Mensaje
lubeck:

Que tal ya realice el control por teclado pero no me reconoce todos los caracteres deseo llegar a algo como esto:

http://www.youtube.com/watch?v=sVivR...yer_detailpage

por lo que he estado usado el comando select case para contener todos los caracteres del teclado cuando pueda subo avances.

saludos.

este es un pequeño fragmento del programa:
amigo autotronico:

¿podrias explicar mejor tu proyecto? deveras que se ve muy interesante y me gustaria, o mejor dicho, nos gustaria experimentarlo ¿verdad amigos?
saludosss
14/06/2011 #1197


Amigos me pueden ayudar en detectar cual es el error en esta programacion porque cuando le programo al pic no me funciona es un pic 16F628A es el programa para un variador de velocidad de un motor DC gracias ayuuuuuuuuuuuuuuuuuuuuuuuda maestros
'************************************************* ***************
'* Name : VARIADOR DE VELOCIDAD.BAS *
'* Author : [CHRISTIAN BENAVIDES] *
'* Notice : Copyright (c) 2011 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 01/06/2011 *
'* Version : 1.0 *
'* Notes : *
'* : *
'************************************************* ***************
botsubir VAR portb.1
botbajar VAR portb.2
LED VAR portb.3
FREC VAR BYTE
bandera VAR BIT
FREC = 125

HIGH LED
PAUSE 500
LOW LED

PROG:
PWM PORTB.0,FREC,30
LOW LED
IF botsubir=0 THEN SUBIR
IF botbajar=0 THEN BAJAR
bandera =0
GOTO PROG
SUBIR:
IF FREC>249 THEN aviso
IF bandera=1 THEN prog
HIGH LED
bandera=1
FREC=FREC+25
GOTO prog
BAJAR:
IF FREC<26 THEN aviso
IF bandera=1 THEN prog
HIGH LED
bandera=1
FREC=FREC -25
GOTO prog
aviso:
high led
goto prog
end
14/06/2011 #1198

Avatar de lpnavy

problema con PWM
Que tal!! a todos!! tengo un inconveniente en mi programacion en un pic16f887 ya que deseo obtener de 2 a 4 salidas PWM controladas por ADC del pic, por ejemplo el AN0 controla en PWM_1, el AN1 controla el PWM_2 y asi sucesivamente. Hasta ahora he podido hacerlo con un solo PWM ya que si pongo 2 PWM hay un solapamiento del micro, ya que necesito controlar por PWM 4 dispositivos diferentes independientemente uno del otro, ademas he probado usando el PWM tanto como por software como por hardware si tener un buen resultado Si alguien sabe como resolver este tipo de problema con gusto lo agradeceria.
Archivos Adjuntos
Tipo de Archivo: zip pwm.zip (14,9 KB (Kilobytes), 108 visitas)
15/06/2011 #1199


imagino que al presionar el pulsador aterrizas los puertos.... verdad???

si es asi, Prueba esto....

Código:
botsubir VAR portb.1 
botbajar VAR portb.2
LED VAR portb.3
FREC VAR BYTE
bandera VAR BIT
FREC = 125

HIGH LED
PAUSE 500
LOW LED

PROG:
 PWM PORTB.0,FREC,30
 IF botsubir=0 THEN GOSUB SUBIR
 IF botbajar=0 THEN GOSUB BAJAR
GOTO PROG

SUBIR:
 IF FREC>=225 THEN
  HIGH LED
  FREC=225
 ELSE
  HIGH LED
  FREC=FREC+25
  PAUSE 200
  LOW LED
 ENDIF
RETURN

BAJAR:
 IF FREC<=125 THEN
  HIGH LED
  FREC=125
 ELSE
  HIGH LED
  FREC=FREC-25
  PAUSE 200
  LOW LED
 ENDIF
RETURN
LPNAVy

ya que necesito controlar por PWM 4 dispositivos diferentes independientemente uno del otro, ademas he probado usando el PWM tanto como por software como por hardware si tener un buen resultado Si alguien sabe como resolver este tipo de problema con gusto lo agradeceria
Y que opinas de usar cuatro micros diferentes como esclavos y un maestro, o utilizar un poco de electronica y poner cuatro PWM controlados por un micro (puede ser el poderoso 555)

Dario:

Mira este link...

http://micros.mforos.com/1149907/802...s1307-con-usb/

de ahi saque el ideas para el que hice....
15/06/2011 #1200

Avatar de torres.electronico

cridram dijo: Ver Mensaje
Amigos me pueden ayudar en detectar cual es el error en esta programacion porque cuando le programo al pic no me funciona es un pic 16F628A es el programa para un variador de velocidad de un motor DC gracias ayuuuuuuuuuuuuuuuuuuuuuuuda maestros
'************************************************* ***************
'* Name : VARIADOR DE VELOCIDAD.BAS *
'* Author : [no es el autor ] *
'* Notice : Copyright (c) 2011 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 01/06/2011 *
'* Version : 1.0 *
'* Notes : *
'* : *
'************************************************* ***************
botsubir VAR portb.1
botbajar VAR portb.2
LED VAR portb.3
FREC VAR BYTE
bandera VAR BIT
FREC = 125

HIGH LED
PAUSE 500
LOW LED

PROG:
PWM PORTB.0,FREC,30
LOW LED
IF botsubir=0 THEN SUBIR
IF botbajar=0 THEN BAJAR
bandera =0
GOTO PROG
SUBIR:
IF FREC>249 THEN aviso
IF bandera=1 THEN prog
HIGH LED
bandera=1
FREC=FREC+25
GOTO prog
BAJAR:
IF FREC<26 THEN aviso
IF bandera=1 THEN prog
HIGH LED
bandera=1
FREC=FREC -25
GOTO prog
aviso:
high led
goto prog
end
Ese ejemplo lo cita cristian en su curso y doy fe que funciona por que en su momento lo estuve pispeando en un miniboot casero.... Yo creo que el problema esta en los fuses que no puso o bien, quizas en el oscilador que no se menciona en ningun lado...
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.