nuevo projecto,Vicky2
2 participantes
Página 1 de 1.
nuevo projecto,Vicky2
como explicava a pikitin,soy de nuevo en camino despuès de dos operaciones en un lapso de 8 meses y y por consecuencia problemas en el trabajo.estoy terminando de montar Vicky2 y su programaziòn(espero de terminarlo antes de Navidad).la principal diferencia con Vicky es el tamaño y el sensor de proximidad.en Vicky usè un par de sensores a infrarrojos.en V2 installè un sonar (funziona perfectamente) y un PAN&TILT con dos servos de 9 gramos (chineses) para dirigir el sonar.es muy simple de construir y questa poco (+-) €20.voy a hacer el upload en imagesshack y les hago ver el esquema.funciona al 100%.
By null at 2010-11-18
P.D.=si necesitan un relevador a ultrasonido con un alcance de +- 80 cm no saldar la impedencia de 330mH.si necesitan ver lo que hace el vecino de casa en el edificio de frente,entonces sladen la impedencia.el alcance era de unos 6 mts.
al puesto del circuito con el NE555 de prueva en el robot conecto el pin de PWM del 16F876A al BD139.
el receptor va bien en los dos casos.
By null at 2010-11-18
P.D.=si necesitan un relevador a ultrasonido con un alcance de +- 80 cm no saldar la impedencia de 330mH.si necesitan ver lo que hace el vecino de casa en el edificio de frente,entonces sladen la impedencia.el alcance era de unos 6 mts.
al puesto del circuito con el NE555 de prueva en el robot conecto el pin de PWM del 16F876A al BD139.
el receptor va bien en los dos casos.
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: nuevo projecto,Vicky2
despues de otras dos operaciones(ahora estoy bien) y dos matrimonios(de dos de mis hijos) vuelvo a trabajar en este projecto.
he hecho muchas modificas.desde el sonar(ahora funciona muy bien),la parte mecanica,etc.hasta los sensores y board.todo con la gestiòn soft con el buen viejo y seguro GCBasic.estoy a un buen punto de la construcciòn.
durante la semana voy a poner las primeras fotos y un video de laa primera prueva de los servos y demàs mecanismos.
para programar los pic y leer la memoria 24C256 uso un pickit2 y un software en gambas2 como interfaz del pkcmd(gbPicKit2_Lite-0.0.9).funciona muy bien con los 16Fxxxx.nos vemos.
he hecho muchas modificas.desde el sonar(ahora funciona muy bien),la parte mecanica,etc.hasta los sensores y board.todo con la gestiòn soft con el buen viejo y seguro GCBasic.estoy a un buen punto de la construcciòn.
durante la semana voy a poner las primeras fotos y un video de laa primera prueva de los servos y demàs mecanismos.
para programar los pic y leer la memoria 24C256 uso un pickit2 y un software en gambas2 como interfaz del pkcmd(gbPicKit2_Lite-0.0.9).funciona muy bien con los 16Fxxxx.nos vemos.
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: nuevo projecto,Vicky2
todos los mecanismos son hechos personalmente.no son comparados,los hice con la fresadora y torno.la rueda central del carril posterior es distinta a las otras por que termine la plata y tube que poner unas que tenia.
estoy editando para agregar el esquema del sonar que funciona muy bien hasta unos +- 1500 cm
este es el esquema del Slave 16F877A(control de los motores) que viene comandado por el Master 16F876A a traves del I2C.
estoy editando para agregar el esquema del sonar que funciona muy bien hasta unos +- 1500 cm
este es el esquema del Slave 16F877A(control de los motores) que viene comandado por el Master 16F876A a traves del I2C.
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: nuevo projecto,Vicky2
Hola de nuevo Alejandro, me alegro de que estés bien y vuelvas a la carga con este proyecto.
La mecánica está impresionante, te felicito!!
Una cosa.. todas las ruedas tienen tracción?? 10 servos en total?
y.. para que es el engranaje de la primera foto?? el que está arriba en el centro.
A ver si le echo un ojo al sonar ese y entiendo algo...
Pues ya te digo, impresionante, ya nos irás contando.
Saludos.
La mecánica está impresionante, te felicito!!
Una cosa.. todas las ruedas tienen tracción?? 10 servos en total?
y.. para que es el engranaje de la primera foto?? el que está arriba en el centro.
A ver si le echo un ojo al sonar ese y entiendo algo...
Pues ya te digo, impresionante, ya nos irás contando.
Saludos.
Re: nuevo projecto,Vicky2
son 6 servos modificados para tracciòn y 4 servos sin modificar que doblan las ruedas al girar.
los engranajes sirven como diferencial rocker bogie(ver el linkk)
http://en.wikipedia.org/wiki/Rocker-bogie
sistema usado per il Mars_Rover
los engranajes sirven como diferencial rocker bogie(ver el linkk)
http://en.wikipedia.org/wiki/Rocker-bogie
sistema usado per il Mars_Rover
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: nuevo projecto,Vicky2
acà les pongo el disegno(Cadsoft) del circuito del Master.
[img][/img]
se ve el 16F876A + la Eeprom 24C256 como "caja negra"
este es el circuito simple de los sensores(temperatura,iluminaciòn y humedad).
[img][/img]
actualmente,si tengo dinero para comprar los sensores Hall,estoy estudiando la construccion de una brujula digital.
este es el firmware del Slave que controla los motores.bastava un 16F876A como control.pero aproveche para crear una board con estos componentes asi me servirà para un hipotetico robot cuadrupe con 18 servos
y este es el firmware para el Master de prueva.
manana pruevo el robot con el odometro.
a proposito,provaron el programa que escrivi con Gambas2 para escrivir los pic serie 16F ?
[img][/img]
se ve el 16F876A + la Eeprom 24C256 como "caja negra"
este es el circuito simple de los sensores(temperatura,iluminaciòn y humedad).
[img][/img]
actualmente,si tengo dinero para comprar los sensores Hall,estoy estudiando la construccion de una brujula digital.
este es el firmware del Slave que controla los motores.bastava un 16F876A como control.pero aproveche para crear una board con estos componentes asi me servirà para un hipotetico robot cuadrupe con 18 servos
- Código:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'CHIP SETUP
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#CHIP 16F877A,4
#CONFIG OSC=XT,WDT_OFF,PWRTE_ON,CP_OFF,DEBUG_OFF,WRT_OFF,CPD_OFF,LVP_OFF,BODEN_ON
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'INTERRUPT
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
On Interrupt SSP1Ready call I2C_Interrupt
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'VARIABLES y DEFINE
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
DIM Motor(6),Servo_direccion(4) AS WORD
DIM InByte,Clear_Address AS BYTE
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'SUB AND FUNCTION
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SUB I2C_Interrupt()#NR
IF PIR1.SSPIF=1 THEN
IF SSPSTAT.D_A=1 THEN
InByte=SSPBUF
END IF
Clear_Address=SSPBUF
PIR1.SSPIF=0
SSPCON.CKP=1
END IF
END SUB
SUB Impulso()#NR
PulseOut PORTD.7,Servo_direccion(0) 10us
PulseOut PORTD.6,Servo_direccion(1) 10us
PulseOut PORTD.5,Servo_direccion(2) 10us
PulseOut PORTD.4,Servo_direccion(3) 10us
PulseOut PORTB.5,Motor(0) 10us
PulseOut PORTB.4,Motor(1) 10us
PulseOut PORTB.3,Motor(2) 10us
PulseOut PORTB.2,Motor(3) 10us
PulseOut PORTB.1,Motor(4) 10us
PulseOut PORTB.0,Motor(5) 10us
WAIT 20 ms
END SUB
SUB Sentido_Normal()#NR
DIM Ciclo AS INTEGER
FOR Ciclo=0 TO 3
Servo_direccion(Ciclo)=150
NEXT Ciclo
Impulso()
END SUB
SUB Sentido_Gira()#NR
Servo_direccion(0)=100
Servo_direccion(1)=200
Servo_direccion(2)=200
Servo_direccion(3)=100
Impulso()
END SUB
SUB STOP()#NR
Motor(0)=156
Motor(1)=154
Motor(2)=153
Motor(3)=151
Motor(4)=147
Motor(5)=151
Impulso()
END SUB
SUB ADELANTE_LENTO()#NR
Motor(0)=156+10
Motor(1)=154+10
Motor(2)=153+10
Motor(3)=151-10
Motor(4)=147-10
Motor(5)=151-10
Impulso()
END SUB
SUB ADELANTE_DX_LENTO()#NR
Motor(0)=156+17
Motor(1)=154+17
Motor(2)=153+17
Motor(3)=151-10
Motor(4)=147-10
Motor(5)=151-10
Impulso()
END SUB
SUB ADELANTE_SX_LENTO()#NR
Motor(0)=156+10
Motor(1)=154+10
Motor(2)=153+10
Motor(3)=151-17
Motor(4)=147-17
Motor(5)=151-17
Impulso()
END SUB
SUB ADELANTE_NORMAL()#NR
Motor(0)=156+25
Motor(1)=154+25
Motor(2)=153+25
Motor(3)=151-25
Motor(4)=147-25
Motor(5)=151-25
Impulso()
END SUB
SUB ADELANTE_DX_NORMAL()#NR
Motor(0)=156+33 '
Motor(1)=154+33 '
Motor(2)=153+33 '
Motor(3)=151-25 '
Motor(4)=147-25 '
Motor(5)=151-25 '
Impulso() '
END SUB
SUB ADELANTE_SX_NORMAL()#NR
Motor(0)=156+25 '
Motor(1)=154+25 '
Motor(2)=153+25 '
Motor(3)=151-33 '
Motor(4)=147-33 '
Motor(5)=151-33 '
Impulso() '
END SUB
SUB ADELANTE_VELOZ()#NR
Motor(0)=156+40 '
Motor(1)=154+40 '
Motor(2)=153+40 '
Motor(3)=151-40 '
Motor(4)=147-40 '
Motor(5)=151-40 '
Impulso() '
END SUB
SUB ADELANTE_DX_VELOZ()#NR
Motor(0)=156+48 '
Motor(1)=154+48 '
Motor(2)=153+48 '
Motor(3)=151-40 '
Motor(4)=147-40 '
Motor(5)=151-40 '
Impulso() '
END SUB
SUB ADELANTE_SX_VELOZ()#NR
Motor(0)=156-40 '
Motor(1)=154-40 '
Motor(2)=153-40 '
Motor(3)=151+48 '
Motor(4)=147+48 '
Motor(5)=151+48 '
Impulso() '
END SUB
SUB ATRAS_NORMAL()#NR
Motor(0)=156-25 '
Motor(1)=154-25 '
Motor(2)=153-25 '
Motor(3)=151+25 '
Motor(4)=147+25 '
Motor(5)=151+25 '
Impulso() '
END SUB
SUB DX_NORMAL()#NR
Motor(0)=156-25
Motor(1)=154-25
Motor(2)=153-25
Motor(3)=151-25
Motor(4)=147-25
Motor(5)=151-25
Impulso()
END SUB
SUB SX_NORMAL()#NR
Motor(0)=156+25 '
Motor(1)=154+25 '
Motor(2)=153+25 '
Motor(3)=151+25 '
Motor(4)=147+25 '
Motor(5)=151+25 '
Impulso() '
END SUB
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'MAIN PROGRAM LOOP
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
MAIN:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'DEFINE THE PORTS
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
TRISA=b'000000'
TRISB=b'00000000'
TRISC=b'00011000'
TRISD=b'00000000'
TRISE=b'000'
PORTA=b'000000'
PORTB=b'00000000'
PORTC=b'00000000'
PORTD=b'00000000'
PORTE=b'000'
INTCON=b'11000000'
SSPADD=0xA2
SSPSTAT=b'11000000'
SSPCON=b'00110110'
SSPCON2=b'0000000'
PIE1=b'00001000'
CCP1CON=b'00000000'
CCP2CON=b'00000000'
ADCON0=b'00000000'
ADCON1=b'00000110'
Sentido_Normal()
InByte=0xF0
DO
SELECT CASE InByte
CASE 0xF0
STOP()
CASE 0xF1
ADELANTE_NORMAL()
CASE 0xF2
ATRAS_NORMAL()
CASE 0xF3
DX_NORMAL()
CASE 0xF4
SX_NORMAL()
CASE 0xF5
Sentido_Gira()
CASE 0xF6
Sentido_Normal()
CASE 0xF7
ADELANTE_LENTO()
CASE 0xF8
ADELANTE_VELOZ()
CASE 0xF9
ADELANTE_DX_LENTO()
CASE 0xFA
ADELANTE_DX_NORMAL()
CASE 0xFB
ADELANTE_DX_VELOZ()
CASE 0xFC
ADELANTE_SX_LENTO()
CASE 0xFD
ADELANTE_SX_NORMAL()
CASE 0xFE
ADELANTE_SX_VELOZ()
END SELECT
LOOP
y este es el firmware para el Master de prueva.
- Código:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'CHIP
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#CHIP 16F876A,4
#CONFIG OSC=XT,WDT_OFF,PWRTE_ON,CP_OFF,DEBUG_OFF,WRT_OFF,CPD_OFF,LVP_OFF,BODEN_ON,BOREN_OFF
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'INTERRUPT
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
On Interrupt PORTBChange Call PORTB_Interrupt 'Interrupt PORTB
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'INCLUDE Y DEFINE
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#INCLUDE <Master_I2C.h> 'Libreria I2C
#DEFINE ClockValue 9 'ClockValue = 100Khz
#DEFINE Wr_Servos 0xA2 'Escribe el slave
#DEFINE Rd_Servos 0xA3 'Lee el slave%
#DEFINE Motores_Stop 0xF0 '
#DEFINE Motores_adelante_normal 0xF1 '
#DEFINE Motores_atras_normal 0xF2 '
#DEFINE Motores_dx_normal 0xF3 '
#DEFINE Motores_sx_normal 0xF4 '
#DEFINE Sentido_Gira 0xF5 '
#DEFINE Sentido_normal 0xF6 '
#DEFINE Motores_adelante_lento 0xF7 '
#DEFINE Motores_adelante_veloz 0xF8 '
#DEFINE Motores_adelante_dx_lento 0xF9 '
#DEFINE Motores_adelante_dx_normal 0xFA '
#DEFINE Motores_adelante_dx_veloz 0xFB '
#DEFINE Motores_adelante_sx_lento 0xFC '
#DEFINE Motores_adelante_sx_normal 0xFD '
#DEFINE Motores_adelante_sx_veloz 0xFE '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'VARIABLES
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'SUB AND FUNCTION
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SUB PORTB_Interrupt()#NR
IF INTCON.RBIF=1 THEN
IF PORTB.7=1 THEN
DO
LOOP UNTIL PORTB.7=1
WAIT 200 ms
IF Flag=0 THEN
Flag=1
ELSE
Flag=0
END IF
END IF
INTCON.RBIF=0
END IF
END SUB
SUB I2C_Master_to_Slave(IDAddress AS WORD,Dato AS WORD)#NR
Start
TxI2C(IDAddress)
TxI2C(Dato)
Stop
END SUB
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'MAIN PROGRAM LOOP
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Inicio:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'DEFINE THE PORTS
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
TRISA=b'000011'
TRISB=b'10000000'
TRISC=b'00011000'
PORTA=b'000000'
PORTB=b'00000000'
PORTC=b'00000000'
CVRCON=b'00000000'
CCP1CON=b'00000000'
CCP2CON=b'00000000'
ADCON0=b'00000001'
ADCON1=b'10000100'
Flag=0
InitI2C
IF Flag=0 THEN GOTO Inicio
IF Flag=1 THEN SET PORTC.5 ON
I2C_Master_to_Slave(Wr_Servos,Sentido_normal)
PulseOut PORTB.2,1 s
WAIT 1 s
I2C_Master_to_Slave(Wr_Servos,Motores_adelante_normal)'Adelante normal
PulseOut PORTB.2,1 s '
WAIT 3 s '
I2C_Master_to_Slave(Wr_Servos,Motores_Stop) 'Stop total
PulseOut PORTB.2,1 s '
WAIT 1 s '
I2C_Master_to_Slave(Wr_Servos,Sentido_normal) 'Ruedas derechas
PulseOut PORTB.2,1 s '
WAIT 1 s '
I2C_Master_to_Slave(Wr_Servos,Motores_atras_normal) 'Atras normal
PulseOut PORTB.2,1 s '
WAIT 3 s '
I2C_Master_to_Slave(Wr_Servos,Motores_Stop) 'Stop total
PulseOut PORTB.2,1 s '
WAIT 1 s '
I2C_Master_to_Slave(Wr_Servos,Sentido_Gira) 'Ruedas giran
PulseOut PORTB.2,1 s '
WAIT 1 s '
I2C_Master_to_Slave(Wr_Servos,Motores_dx_normal) 'Derecha normal
PulseOut PORTB.2,1 s '
WAIT 3 s '
I2C_Master_to_Slave(Wr_Servos,Motores_Stop) 'Stop total
PulseOut PORTB.2,1 s '
WAIT 1 s '
I2C_Master_to_Slave(Wr_Servos,Sentido_Gira) 'Ruedas giran
PulseOut PORTB.2,1 s '
WAIT 1 s '
I2C_Master_to_Slave(Wr_Servos,Motores_sx_normal) 'Izquierda normal
PulseOut PORTB.2,1 s '
WAIT 3 s '
I2C_Master_to_Slave(Wr_Servos,Motores_Stop) 'Stop total
PulseOut PORTB.2,1 s '
WAIT 1 s '
I2C_Master_to_Slave(Wr_Servos,Sentido_normal) 'Ruedas derechas
PulseOut PORTB.2,1 s '
SET PORTC.5 OFF 'Fin programa
Flag=0 '
GOTO Inicio '
manana pruevo el robot con el odometro.
a proposito,provaron el programa que escrivi con Gambas2 para escrivir los pic serie 16F ?
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: nuevo projecto,Vicky2
un pedacito a la vez lo estoy metiendo en pie
agregue fotosensores a las ruedas principales como odometro y para girar en modo + o - preciso
el filmaado de prueva es necesario
camina 1 metro --> se para --> gira las ruedas --> gira de 180° --> vuelve por donde vino por 1 metro --> se para --> gira las ruedas --> gira de 180° y espera(basta apretar el botòn para recomensar).
una estupides,mas me serviò para calibrar los CNY70.
este es el codigo GCBasic del Master para la prueva(se accepttan mejorias)
Edit:
Manana lo voy a provar en el jardin sin el sonar para ver como camina en terreno no pavimentado
Pikitin,quisiera hacerte ver una brujula que tengo en mente con sensores Hall.como la que construyo Pablo
http://personales.ya.com/perropinto/robotidus/BRUJULA.htm
agregue fotosensores a las ruedas principales como odometro y para girar en modo + o - preciso
el filmaado de prueva es necesario
camina 1 metro --> se para --> gira las ruedas --> gira de 180° --> vuelve por donde vino por 1 metro --> se para --> gira las ruedas --> gira de 180° y espera(basta apretar el botòn para recomensar).
una estupides,mas me serviò para calibrar los CNY70.
este es el codigo GCBasic del Master para la prueva(se accepttan mejorias)
- Código:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'CHIP
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#CHIP 16F876A,4
#CONFIG OSC=XT,WDT_OFF,PWRTE_ON,CP_OFF,DEBUG_OFF,WRT_OFF,CPD_OFF,LVP_OFF,BODEN_ON,BOREN_OFF
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'INTERRUPT
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
On Interrupt PORTBChange Call PORTB_Interrupt 'Interrupt PORTB
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'INCLUDE Y DEFINE
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#INCLUDE <Master_I2C.h> 'Libreria I2C
#DEFINE ClockValue 9 'ClockValue = 100Khz
#DEFINE Wr_Servos 0xA2 'Escribe el slave
#DEFINE Rd_Servos 0xA3 'Lee el slave%
#DEFINE Motores_Stop 0xF0 '
#DEFINE Motores_adelante_normal 0xF1 '
#DEFINE Motores_atras_normal 0xF2 '
#DEFINE Motores_dx_normal 0xF3 '
#DEFINE Motores_sx_normal 0xF4 '
#DEFINE Sentido_Gira 0xF5 '
#DEFINE Sentido_normal 0xF6 '
#DEFINE Motores_adelante_lento 0xF7 '
#DEFINE Motores_adelante_veloz 0xF8 '
#DEFINE Motores_adelante_dx_lento 0xF9 '
#DEFINE Motores_adelante_dx_normal 0xFA '
#DEFINE Motores_adelante_dx_veloz 0xFB '
#DEFINE Motores_adelante_sx_lento 0xFC '
#DEFINE Motores_adelante_sx_normal 0xFD '
#DEFINE Motores_adelante_sx_veloz 0xFE '
'DIM Impulso AS INTEGER '
DIM PORTB_New,PORTB_Old AS BYTE '
''1 impulso=30 mm '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'VARIABLES
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'SUB AND FUNCTION
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SUB PORTB_Interrupt()#NR
IF INTCON.RBIF=1 THEN
'Llega un impulso desde PORTB.7
IF PORTB.7=1 THEN
'Loop anti-dump
DO
LOOP UNTIL PORTB.7=1
WAIT 200 ms
IF Flag=0 THEN
Flag=1
ELSE
Flag=0
END IF
END IF
'el pin cambiado se pone a 1 con el mask dei bit
PORTB_New=PORTB_Old#0xC0
'Llega un impulso desde los encoders conectados a PORTB.4 o PORTB.5
IF PORTB_New=0xD0|PORTB_New=0xE0 THEN Impulso+=1
'Llega un impulso desde los encoders conectados a PORTB.4 y PORTB.5
IF PORTB_New=0xD0&PORTB_New=0xE0 THEN Impulso+=1
PORTB_Old=PORTB
INTCON.RBIF=0
END IF
END SUB
SUB I2C_Master_to_Slave(IDAddress AS WORD,Dato AS WORD)#NR
Start 'Start I2C
TxI2C(IDAddress) 'Device ID write byte
TxI2C(Dato) 'Send byte size data
Stop 'Stop I2C
END SUB
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'MAIN PROGRAM LOOP
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Inicio:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'PORTA.0/1 son input,las demàs son output.
TRISA=b'000011'
'PORTB.7 es input,las demàs son output.
TRISB=b'10110000'
'PORTC.4(SDA) y PORTC.3(SCL) son input,las demàs son output.
TRISC=b'00011000'
PORTA=b'000000'
PORTB=b'00000000'
PORTC=b'00000000'
CVRCON=b'00000000'
CCP1CON=b'00000000'
CCP2CON=b'00000000'
ADCON0=b'00000001'
ADCON1=b'10000100'
PORTB_New=0
PORTB_Old=0
Impulso=0
Flag=0
'Inicia el modulo I2C.
InitI2C
'Si el pulsante de inicio programa no fue apretado vuelve al inicio
IF Flag=0 THEN GOTO Inicio
'Si el pulsante de inicio programa fue apretado se enciende el led de inicio
IF Flag=1 THEN SET PORTC.5 ON
I2C_Master_to_Slave(Wr_Servos,Sentido_normal) 'Ruedas derechas
PulseOut PORTB.2,1 s '
I2C_Master_to_Slave(Wr_Servos,Motores_adelante_normal)'Adelante normal
PulseOut PORTB.2,1 s '
DO '
LOOP UNTIL Impulso=33 '
Impulso=0 '
I2C_Master_to_Slave(Wr_Servos,Motores_Stop) 'Stop total
PulseOut PORTB.2,1 s '
I2C_Master_to_Slave(Wr_Servos,Sentido_Gira) 'Ruedas giran
PulseOut PORTB.2,1 s '
I2C_Master_to_Slave(Wr_Servos,Motores_dx_normal) 'Derecha normal
PulseOut PORTB.2,1 s '
DO '
LOOP UNTIL Impulso=14 '
Impulso=0 '
I2C_Master_to_Slave(Wr_Servos,Motores_Stop) 'Stop total
PulseOut PORTB.2,1 s '
I2C_Master_to_Slave(Wr_Servos,Sentido_normal) 'Ruedas derechas
PulseOut PORTB.2,1 s '
I2C_Master_to_Slave(Wr_Servos,Motores_adelante_normal)'Adelante normal
PulseOut PORTB.2,1 s '
DO '
LOOP UNTIL Impulso=33 '
Impulso=0 '
I2C_Master_to_Slave(Wr_Servos,Motores_Stop) 'Stop total
PulseOut PORTB.2,1 s '
I2C_Master_to_Slave(Wr_Servos,Sentido_Gira) 'Ruedas giran
PulseOut PORTB.2,1 s '
I2C_Master_to_Slave(Wr_Servos,Motores_dx_normal) 'Derecha normal
PulseOut PORTB.2,1 s '
DO '
LOOP UNTIL Impulso=14 '
Impulso=0 '
I2C_Master_to_Slave(Wr_Servos,Motores_Stop) 'Stop total
PulseOut PORTB.2,1 s '
I2C_Master_to_Slave(Wr_Servos,Sentido_normal) 'Ruedas derechas
PulseOut PORTB.2,1 s '
I2C_Master_to_Slave(Wr_Servos,Motores_Stop) 'Stop total
PulseOut PORTB.2,1 s '
SET PORTC.5 OFF 'Fin programa
GOTO Inicio '
Edit:
Manana lo voy a provar en el jardin sin el sonar para ver como camina en terreno no pavimentado
Pikitin,quisiera hacerte ver una brujula que tengo en mente con sensores Hall.como la que construyo Pablo
http://personales.ya.com/perropinto/robotidus/BRUJULA.htm
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: nuevo projecto,Vicky2
Hola Alejandro.. te comento algunas cosillas que no veo claras
En la subrutina PORTB_Interrupt() esta parte:
Entiendo que sólo te interesan los bits 4 y 5 para leer los encoders, si entiendo bien entonces creo que yo lo haría así:
Si quieres sumar 2 cuando se activan los 2 encoders entonces:
Luego, esto:
LOOP UNTIL Impulso=33
Que pasa si se suman 2 y pasa de 32 a 34??
En tu código esto nunca pasa porque esto creo que esto no funciona:
'Llega un impulso desde los encoders conectados a PORTB.4 y PORTB.5
IF PORTB_New=0xD0&PORTB_New=0xE0 THEN Impulso+=1
PORTB_New nunca puede valer 0xD0 y 0xE0 a la vez.
Entonces quizás hacerlo así:
LOOP UNTIL Impulso >= 33
O llevar una cuenta distinta para cada encoder... nosé
Saludos.
En la subrutina PORTB_Interrupt() esta parte:
PORTB_New=PORTB_Old#0xC0
'Llega un impulso desde los encoders conectados a PORTB.4 o PORTB.5
IF PORTB_New=0xD0|PORTB_New=0xE0 THEN Impulso+=1
'Llega un impulso desde los encoders conectados a PORTB.4 y PORTB.5
IF PORTB_New=0xD0&PORTB_New=0xE0 THEN Impulso+=1
PORTB_Old = PORTB_New
Entiendo que sólo te interesan los bits 4 y 5 para leer los encoders, si entiendo bien entonces creo que yo lo haría así:
'Seleccionas bits 4 y 5:
PORTB_New = PORTB & b'00110000'
'Llega un impulso desde los encoders conectados a PORTB.4 o PORTB.5
'xor PORTB_New y PORTB_OLD, si hay algun bit a 1 entonces algo ha cambiado
IF PORTB_New # PORTB_OLD <> 0 THEN Impulso+=1
PORTB_Old = PORTB_New
Si quieres sumar 2 cuando se activan los 2 encoders entonces:
'Seleccionas bits 4 y 5:
PORTB_New = PORTB & b'00110000'
'Ver que bits han cambiado
ENCODER_BITS = PORTB_New # PORTB_OLD
'Si hay algun bit a 1 entonces algo ha cambiado
IF ENCODER_BITS <> 0 THEN
Impulso+=1
'Si activan los 2 encoders sumar otro
IF ENCODER_BITS = b'00110000' then Impulso+=1
End IF
PORTB_Old = PORTB_New
Luego, esto:
LOOP UNTIL Impulso=33
Que pasa si se suman 2 y pasa de 32 a 34??
En tu código esto nunca pasa porque esto creo que esto no funciona:
'Llega un impulso desde los encoders conectados a PORTB.4 y PORTB.5
IF PORTB_New=0xD0&PORTB_New=0xE0 THEN Impulso+=1
PORTB_New nunca puede valer 0xD0 y 0xE0 a la vez.
Entonces quizás hacerlo así:
LOOP UNTIL Impulso >= 33
O llevar una cuenta distinta para cada encoder... nosé
Saludos.
Re: nuevo projecto,Vicky2
- Código:
PORTB_New=PORTB_Old#0xC0
- Código:
IF PORTB_New=0xD0|PORTB_New=0xE0 THEN Impulso+=1
- Código:
IF PORTB_New=0xD0&PORTB_New=0xE0 THEN Impulso+=1
en el nuevo code lo cambie por
- Código:
IF PORTB_New=0xF0 THEN Impulso+=1
- Código:
PORTB_Old = PORTB_New
- Código:
LOOP UNTIL Impulso=33
Que pasa si se suman 2 y pasa de 32 a 34??
En tu código esto nunca pasa porque esto creo que esto no funciona:
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: nuevo projecto,Vicky2
provando el sonar con pan_tilt(es momentaneo,tengo que modificar la mecanica) encontre un problema con el codigo de prueva
como puede ser.seguramente no "veo" algo equivocado en el codigo
agrego un video que funciona con el codigo "equivocado"
- Código:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'CHIP
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#CHIP 16F876A,4
#CONFIG OSC=XT,WDT_OFF,PWRTE_ON,CP_OFF,DEBUG_OFF,WRT_OFF,CPD_OFF,LVP_OFF,BODEN_ON,BOREN_OFF
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'INTERRUPT
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
On Interrupt PORTBChange Call PORTB_Interrupt 'Interrupt PORTB
On Interrupt Timer1Overflow Call Interrupt_TMR1 'Interrupt TMR1
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'INCLUDE/VARIABLES Y DEFINE
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#DEFINE PWM_Freq 40 'Set frequency in KHz
#DEFINE PWM_Duty 80 'Set duty cycle to 80 %
#DEFINE PAN PORTC.1 '
#DEFINE TILT PORTB.3 '
#DEFINE PAN PORTC.1 '
#DEFINE TILT PORTB.3 '
DIM ValorPan,ValorTilt,FlagPan,FlagTilt AS INTEGER '
DIM Out_Range,Obstaculo,Indice_Buffer AS BYTE '
DIM Ciclo AS INTEGER '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'SUB AND FUNCTION
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SUB PORTB_Interrupt()#NR
IF INTCON.RBIF=1 THEN '
IF PORTB.7=1 THEN 'Llega un impulso desde PORTB.5
DO
LOOP UNTIL PORTB.7=1 'Loop de anti dump
WAIT 200 ms '
IF Flag=0 THEN 'Si la variable es falsa
Flag=1 '
ELSE '
Flag=0 '
END IF '
END IF '
INTCON.RBIF=0 '
END IF '
END SUB
SUB Impulso_US()#NR
PWMOn 'Impulso de 40Khz al 50% del duty ON
WAIT 300 us 'Por 300 microsegundos
PWMOff 'Impulso de 40Khz al 50% del duty OFF
END SUB
SUB Interrupt_TMR1()#NR
IF PIR1.TMR1IF=1 THEN Out_Range=1:PIR1.TMR1IF=0 '
END SUB
FUNCTION Sonar()#NR
DIM Distancia AS WORD '
T1CON.TMR1ON=0 'Stop TMR1
PIE1.TMR1IE=0 'Desabilita el interrupt overflow TMR1
PIR1.TMR1IF=0 'Limpia el flag del overflow de TMR1
Out_Range=0 'Limpia el flag del overflow de TMR1
Distancia=0
Total=0
TMR1H=0x4E 'Cargo el TMR1H para obtener 20ms ==> 78=0X4E
TMR1L=0x20 'Cargo el TMR1L para obtener 20ms ==> 32=0x20
T1CON.TMR1ON=1 'Start TMR1
PIE1.TMR1IE=1 'Habilita el interrupt overflow TMR1
Impulso_US() 'Envia un impulso
WAIT 600 us 'Espera un tiempo anti-eco
DO 'Inicia el ciclo de eco
LOOP UNTIL Out_Range=1|PORTB.0=1 'TMR1 va en overflow o encuentra un obstaculo
T1CON.TMR1ON=0 'Stop TMR1
PIE1.TMR1IE=0 'Desabilita el interrupt overflow TMR1
PIR1.TMR1IF=0 'Limpia el flag del overflow de TMR1
IF PORTB.0=1 THEN 'Si se detecta un obstaculo
Distancia=(TMR1H*256)+TMR1L 'Suma 8 byte LSB + 8 bit shift MSB <<
Distancia=(Distancia*34)/200 'Distancia en mm
END IF
Sonar=Distancia
END FUNCTION
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'MAIN PROGRAM LOOP
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Inicio:
TRISA=b'101111' 'PORTA.0/1/2/3 y 5 son input,las demàs son Output.
TRISB=b'10000001' 'PORTB.0 y 7 son Input,las demàs son Output
TRISC=b'00011000' 'PORTC es Output.
PORTA=b'000000'
PORTB=b'00000000' 'Todas las puertas son bajas,por las dudas
PORTC=b'00000000'
INTCON=b'11001000' 'GIE/PEIE y RBIE
T1CON=b'00000100'
PIR1.TMR1IF=0 'Limpia el flag del overflow de TMR1
CVRCON=b'00000000'
CCP1CON=b'00001100' 'PWM1 habilitado.
CCP2CON=b'00000000' 'PWM2 desabilitado.
ADCON0=b'00000000' 'FOSC/2,Canal AN0,converciòn A/D OFF.
ADCON1=b'10000110'
ValorPan=142 'Valor inicial de los servos(centrados)
FlagPan=0 'Limpia la variable
ValorTilt=140 'Valor inicial de los servos(centrados)
FlagTilt=0 'Limpia la variable
PulseOut PAN,ValorPan 10us
PulseOut TILT,ValorTilt 10us
WAIT 20 ms
IF Flag=0 THEN GOTO Inicio 'Si no apreto el boton de inicio.....
DO 'Ciclo
IF Flag=1 THEN 'Si aprete el boton de inicio........
SET PORTC.5 ON 'Se enciende el led de inicio.
IF FlagPan=0 THEN 'Si el flag del PAN es cero
ValorPan+=1 'Al valor del PAN sumo 10 us
IF ValorPan>200 THEN FlagPan=1 'Si llegue al valor maximo del PAN
ELSE 'Si en cambio el Flag del PAN es 1
ValorPan-=1 'Resto 10 us al valor del flag del PAN
IF ValorPan<90 THEN FlagPan=0 'Si llegue al valor minimo del PAN
PulseOut PAN,ValorPan 10us 'Impulso al servo del PAN
PulseOut TILT,ValorTilt 10us 'Impulso al servo del TILT
IF ValorPan%10=0 THEN
IF Sonar>110 THEN
FOR Obstaculo=90 TO 200 STEP 10
PulseOut PORTB.2,50 ms 'hay un obstaculo
PulseOut TILT,Obstaculo 10us
WAIT 10 ms
NEXT Obstaculo
FOR Obstaculo=200 TO 150 STEP 10
PulseOut PORTB.2,50 ms
PulseOut TILT,Obstaculo 10us
WAIT 10 ms
NEXT Obstaculo
PulseOut TILT,1500 us
END IF
END IF
WAIT 20 ms
END IF
LOOP UNTIL Flag=0
SET PORTC.5 OFF
GOTO Inicio
- Código:
IF Sonar<110 THEN
- Código:
IF Sonar>110 THEN
como puede ser.seguramente no "veo" algo equivocado en el codigo
agrego un video que funciona con el codigo "equivocado"
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: nuevo projecto,Vicky2
Hola alejandro.
Creo que tienes un par de cosillas en tu programa:
- Para tener 20 ms overflow en Timer1 creo que deberías ajustarlo a 65536-20000=45536
Luego para calcular la distancia tienes que restarlo.
- Luego tienes un problema al multiplicar Distancia*34 porque si el resultado de esta multiplicación pasa de 65535 tienes acarreo, entonces tienes que asegurarte de que el resultado nunca pase de 65535.
Una posible solución seria:
Distancia=Distancia/20
Distancia=(Distancia*34)/10
Pero así vas a perder varios mm de precisión
Si quieres mantener precisión igual puedes hacer algún truco:
Distancia = (Distancia*3)/20+Distancia/50 'creo que esto es lo mismo que (Distancia*34)/200
Por ejemplo:
Tambien para pasar TMR1L y TMR1H a Distancia puedes pasarlo directamente (primero el low byte), es más rápido que multiplicar por 256, pero el resultado es el mismo.
Creo que tienes un par de cosillas en tu programa:
- Para tener 20 ms overflow en Timer1 creo que deberías ajustarlo a 65536-20000=45536
Luego para calcular la distancia tienes que restarlo.
- Luego tienes un problema al multiplicar Distancia*34 porque si el resultado de esta multiplicación pasa de 65535 tienes acarreo, entonces tienes que asegurarte de que el resultado nunca pase de 65535.
Una posible solución seria:
Distancia=Distancia/20
Distancia=(Distancia*34)/10
Pero así vas a perder varios mm de precisión
Si quieres mantener precisión igual puedes hacer algún truco:
Distancia = (Distancia*3)/20+Distancia/50 'creo que esto es lo mismo que (Distancia*34)/200
Por ejemplo:
- Código:
' Antes ajustar TMR1L y TMR1H a 45536
IF PORTB.0=1 THEN 'Si se detecta un obstaculo
Distancia = TMR1L
Distancia_H = TMR1H 'así es mas facil y rapido que multiplicar por 256
Distancia -= 45536
Distancia = (Distancia*3)/20 + Distancia/50 'Distancia en mm
END IF
Tambien para pasar TMR1L y TMR1H a Distancia puedes pasarlo directamente (primero el low byte), es más rápido que multiplicar por 256, pero el resultado es el mismo.
Re: nuevo projecto,Vicky2
grazias,Pikitin.siempre pronto para ayudar.este proyecto hecho con un par de horas al dia(quando es posible),crea un efecto OE(Ojos Empaňados).ha un cierto punto no te das cuenta de los errores elementales cometidos.
la formula para calcular los valores de inicio de TMR1L y TMR1H es:
TM1H=Vini/256
TM1L=Vini-(TM1H*256)
en vez de calcular Vini=45536 lo hice con Vini=20000
TM1H=Vini/256=20000/256=78,125=78=0x4E
TM1L=Vini-(TM1H*256)=20000-(78*256)=20000-19968=32=0x20
segundo error
esta es buena
corrijo y te hago saber.
despues voy a provar
- Código:
Para tener 20 ms overflow en Timer1 creo que deberías ajustarlo a 65536-20000=45536
la formula para calcular los valores de inicio de TMR1L y TMR1H es:
TM1H=Vini/256
TM1L=Vini-(TM1H*256)
en vez de calcular Vini=45536 lo hice con Vini=20000
TM1H=Vini/256=20000/256=78,125=78=0x4E
TM1L=Vini-(TM1H*256)=20000-(78*256)=20000-19968=32=0x20
segundo error
- Código:
Luego para calcular la distancia tienes que restarlo.
esta es buena
- Código:
Distancia = TMR1L
Distancia_H = TMR1H
corrijo y te hago saber.
despues voy a provar
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: nuevo projecto,Vicky2
a proposito,viste el filmado de sonar?
funciona hasta unos 3m(+-) con 7,5V
funciona hasta unos 3m(+-) con 7,5V
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: nuevo projecto,Vicky2
Si... eso pasa mucho, además siempre pasa con los detalles más simples.crea un efecto OE(Ojos Empaňados).ha un cierto punto no te das cuenta de los errores elementales
Si... tiene muy buena pinta, bueno.. el robot en general está muy bien. Un gran trabajo!!a proposito,viste el filmado de sonar?
funciona hasta unos 3m(+-) con 7,5V
Ahhh!! una cosa importante: la variable "Sonar" la tienes como byte, creo que deberías declararla como word igual que "Distancia".
Re: nuevo projecto,Vicky2
- Código:
Ahhh!! una cosa importante: la variable "Sonar" la tienes como byte, creo que deberías declararla como word igual que "Distancia".
Ok.grazias como siempre.
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: nuevo projecto,Vicky2
soy de nuevo yo con novedades.el sonar funziona perfectamente(aunque se tuve que modificar la alimentaciòn y separarla de la alimentaciòn de los servos).
esta funciòn trabaja bien(grazias pikitin)
con este main el sonar me senala todo lo que se encuentra dentro un radio de x mm(en este caso 1000mm=1m)
pero si pruevo a gestir con este main
en que cosa me equivoco(seguramente,ya que no uso el select--end select en GCBasic)??
esta funciòn trabaja bien(grazias pikitin)
- Código:
FUNCTION Sonar() AS WORD
DIM Distancia AS WORD
T1CON.TMR1ON=0
PIE1.TMR1IE=0
PIR1.TMR1IF=0
Out_Range=0
Distancia=0
TMR1H=0
TMR1L=0
T1CON.TMR1ON=1
PIE1.TMR1IE=1
Impulso_US()
WAIT 600 us
DO
LOOP UNTIL Out_Range=1|PORTB.0=1
T1CON.TMR1ON=0
PIE1.TMR1IE=0
PIR1.TMR1IF=0
IF PORTB.0=1 THEN
Distancia=TMR1L
Distancia_H=TMR1H (ahorro ciclos) :D
Sonar=(Distancia*17)/100
END IF
IF Out_Range=1 THEN
Sonar=0xFFFF
END IF
END FUNCTION
con este main el sonar me senala todo lo que se encuentra dentro un radio de x mm(en este caso 1000mm=1m)
- Código:
IF Sonar<1000 THEN
SET PORTB.1 ON
ELSE
SET PORTB.1 OFF
END IF
pero si pruevo a gestir con este main
- Código:
DO
SELECT CASE Sonar
CASE <300
SET PORTB.1 ON
SET PORTB.2 OFF
CASE >301<500
SET PORTB.1 ON
SET PORTB.2 ON
CASE >501<700
SET PORTB.1 OFF
SET PORTB.2 ON
CASE >701
SET PORTB.1 OFF
SET PORTB.2 OFF
END SELECT
WAIT 30 ms
LOOP
en que cosa me equivoco(seguramente,ya que no uso el select--end select en GCBasic)??
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: nuevo projecto,Vicky2
Creo que el Select case no funciona con < o >, sólo con valores concretos.
Igual tendrías que hacerlo con if, por ejemplo:
Igual tendrías que hacerlo con if, por ejemplo:
- Código:
Do
distancia
Loop
Sub distancia
if Sonar > 701 then
SET PORTB.1 OFF
SET PORTB.2 OFF
return
End if
if Sonar > 501 then
SET PORTB.1 OFF
SET PORTB.2 ON
return
End if
if Sonar > 301 then
SET PORTB.1 ON
SET PORTB.2 ON
return
End if
SET PORTB.1 ON
SET PORTB.2 OFF
End Sub
Re: nuevo projecto,Vicky2
grazias pikitin,pruevo con IF--END IF.
por caso sabès de un manual de GCBasic(preferisco en castellano)??
por caso sabès de un manual de GCBasic(preferisco en castellano)??
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: nuevo projecto,Vicky2
Si.. tienes este:
http://sourceforge.net/projects/piclinux/files/GcBasic-PL/GcBasic_Manual.pdf/download
Pero no esta muy actualizado, también tienes la ayuda de gcbasic (ingles):
http://gcbasic.sourceforge.net/newfiles/help/
http://sourceforge.net/projects/piclinux/files/GcBasic-PL/GcBasic_Manual.pdf/download
Pero no esta muy actualizado, también tienes la ayuda de gcbasic (ingles):
http://gcbasic.sourceforge.net/newfiles/help/
Temas similares
» Ejemplo: simulación de circuito en GPsim
» nuevo con dudas
» Nuevo foro Ktechlab
» Nuevo UP DATE disponible de GCC
» nuevo mplabx para linux y mac
» nuevo con dudas
» Nuevo foro Ktechlab
» Nuevo UP DATE disponible de GCC
» nuevo mplabx para linux y mac
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.