Ayuda PWM y Control

#1
Hey que tal, tengo una grand duda,, soy nuevo usando los PIC's actualmente trabajo con el 18F4550....
El proyecto que estoy intentado realizar lleva el uso de pwm y 4 switch que me activan las salidas D en unos al mandar a unos los switch,... Logro correr las 2 partes del programa por separado (PWM y la parde de los switch) pero al momento de tratar de unirlos no se me corre nada en el pic...qiza mi problema sea el uno de las sentencias,,,, Espero alguien pueda ayudarme,... el programa es mas o menos como el que sigue.....

program CONTROL_L293__PWM
dim adc1 as word
dim adc2 as word

main:

ADCON1=$00 'Configura el valor adc y el de Vref
TRISA=$FF 'Puerto A es entrada
TRISB=$FF 'Puertos B de 0:3 Como Entradas
TRISD=$00 'Fuertos D de 0:3 como salidas
TRISC=$FF ' Initialize PORTC
Pwm1_Init(4000) ' Initialize PWM module, freq = 5kHz.
Pwm2_Init(4000)

while true
adc1=Adc_read(0) 'Le el valor de referencia en pin A0
Pwm1_Change_Duty(adc1) ' Muestra el valor de salida relacion adc

adc2=Adc_read(1) 'Le el valor de referencia en pin A0
Pwm2_Change_Duty(adc2) ' Muestra el valor de salida relacion adc
wend

if portb.0=1 then
portd.0=1
else
portd.0=0
end if
end.

if portb.1=1 then
portd.1=1
else
portd.1=0
end if
end.

if portb.2=1 then
portd.2=1
else
portd.2=0
end if
end.

if portb.3=1 then
portd.3=1
else
portd.3=0
end if
end.



al compilar todo corre bien pero el fisicamente no funciona...
 
#2
while TRUE es un ciclo infinito...
osea que lo que esta abajo de wend, jamas se ejecuta.
Es decir, solo lee los analogicos y lo pone en los PWM
Despierta !!! jejeje
y mucha suerte con el proyecto
 
#3
Gracias de hecho provee con varias modificaciones al programa entre ellas hacer un ciclo do while que abarcara hasta antes de el "end." tambien un do para el pwm cerrando con loop until true,,, y un while para el las de if.....
PEro ninguno me funciono... de hecho he optado por eliminar el pwm...ademasd de que no comprendo al 100% este y el ADCON1 me queda algo confuso....

y pues lo que intento es seguir experiementando...Gracias
 
#4
TRISA=$FF 'Puerto A es entrada
TRISB=$FF 'Puertos B de 0:3 Como Entradas
TRISD=$00 'Fuertos D de 0:3 como salidas
TRISC=$FF ' Initialize PORTC

Pwm1_Init(4000) ' Initialize PWM module, freq = 5kHz.
Pwm2_Init(4000)

while true
adc1=Adc_read(0) 'Le el valor de referencia en pin A0
Pwm1_Change_Duty(adc1) ' Muestra el valor de salida relacion adc

adc2=Adc_read(1) 'Le el valor de referencia en pin A0
Pwm2_Change_Duty(adc2) ' Muestra el valor de salida relacion adc


if portb.0=1 then
portd.0=1
else
portd.0=0
end if
end.

if portb.1=1 then
portd.1=1
else
portd.1=0
end if
end.

if portb.2=1 then
portd.2=1
else
portd.2=0
end if
end.

if portb.3=1 then
portd.3=1
else
portd.3=0
end if
wend
end.
Asi debe funcionar...

Saludos
 
#6
he revisado un ejemplo con el 2550 y al momento de configurar el ADC tiene lo siguiente:

ADCON1 = ADCON1 or 0x0F

Auque en un programa que hice recientemente omiti la instruccion y funciona a la perfeccion.

Saludos
 
#7
Claro que funcionara lo que no me queda muy claro es la funcion ADCON1.

De todas manera no he detenido el proyecto donde necesitaba el mismo, ahora me desidido a intentar hacer un contador de rounds jajajajaja Gracias
 

Temas similares

Arriba