TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: KDN en 28 de Febrero de 2009, 16:42:11
-
Bien, mi problema es el siguiente en este programa:
AllDigital 'deshabilito el ADC
TRISA = %11111111 'puerto A como entrada
TRISB.0 = 1 'pin RB.0 in1
TRISB.4 = 0 'pin RB.4 out clk
TRISB.3 = 0
TRISB.5 = 0[/color]
'------declaro variables
Dim ir As Byte
Dim i As Byte
'------asigno variables
ir = 0
PORTB.4 = 1
PORTB.3 = 0
PORTB.5 = 0
'-----programa principal
main:
If PORTB.0 = 1 Then
WaitMs 120 'antirebote
If PORTB.0 = 1 Then
ir = 1
Endif
Endif
If ir = 1 Then
PORTB.3 = 1 'BOMBA Off
PORTB.5 = 1
WaitMs 10
For i = 1 To 24 Step 1
PORTB.4 = 0
WaitMs 10
PORTB.4 = 1
WaitMs 100
Next i
Endif
ir = 0
Goto main
End [/font]
Simulando funciona todo OK.
Con el pic real estoy trabajando con salidas en serie r+led,pues bien con el siguiente programa se comporta de una forma extraña (como si lo hiciera rapido o no funciona) y si elimino del programa una salida:
AllDigital 'deshabilito el ADC
TRISA = %11111111 'puerto A como entrada
TRISB.0 = 1 'pin RB.0 in1
TRISB.4 = 0 'pin RB.4 out clk
TRISB.3 = 0
'------declaro variables
Dim ir As Byte
Dim i As Byte
'------asigno variables
ir = 0
PORTB.4 = 1
PORTB.3 = 0
'-----programa principal
main:
If PORTB.0 = 1 Then
WaitMs 120 'antirebote
If PORTB.0 = 1 Then
ir = 1
Endif
Endif
If ir = 1 Then
PORTB.3 = 1 'BOMBA Off
WaitMs 10
For i = 1 To 24 Step 1
PORTB.4 = 0
WaitMs 10
PORTB.4 = 1
WaitMs 100
Next i
Endif
ir = 0
Goto main
End
El pic real funciona perfectamente, se que puede parecer una tonteria pero llevo varios dias hasta que he determinado que lo que falla es que hayan mas de 2 salidas, y esto no tiene ningun sentido, (o sí?).
Gracias y todos los consejos que puedan darme seran muy agradecidos.
-
Por si sirve de algo programo con el PIC Basic IDE y Winpic8000
Puede ser un tema del oscilador interno?, que es el que uso.
-
Esta versión la he probado corriendo sobre la placa EBasic y funciona OK.
El micro que he utilizado es el 16F628A ya que no tengo ningún 16F628.
Una vez que lo compiles con el PSI podrás ver la configuración de BIT.
También probé a activar la salida de reloj externa y, pude verificar que
genera una frecuencia de 1Mhz., como esta frecuencia es osc.interno/4
se deduce que el micro queda configurado por defecto para trabajar a 4Mhz.
'******************** PIC16F628A**********************
'----- Configuración de BIT
Define CONF_WORD = 0x3f10
Define CLOCK_FREQUENCY = 4
'----- Configuración módulos I/O y módulos generales
AllDigital 'deshabilito el ADC
TRISA = %00000000 'puerto A como salidas, por defecto
TRISB = %00000000 'Puerto B como salidas, por defecto
'_____ Configuración de pin utilizados
TRISB.0 = 1 'pin RB.0 in1
TRISB.4 = 0 'pin RB.4 out clk
TRISB.3 = 0
TRISB.5 = 0
'------ Declaro variables
Dim ir As Byte
Dim i As Byte
'------ Asigno variables y valores lógicos pin
ir = 0
PORTB.4 = 1
PORTB.3 = 0
PORTB.5 = 0
'----- Programa principal
main:
If PORTB.0 = 1 Then
WaitMs 120 'antirebote
If PORTB.0 = 1 Then
ir = 1
Endif
Endif
If ir = 1 Then
PORTB.3 = 1 'BOMBA Off
PORTB.5 = 1
WaitMs 10
For i = 1 To 24 Step 1
PORTB.4 = 0
WaitMs 10
PORTB.4 = 1
WaitMs 100
Next i
Endif
ir = 0
Goto main
End
'Nota, en la tecnología CMOS no se pueden dejar entradas sin polarizar.
'Por lo tanto todo pin que no se usa se configura como salida, y sino
'se puede configurar como salida como le pasa al RA5, hay que polarizarlo.