prueva con usart.h y masterI2C.h
2 participantes
Página 2 de 2.
Página 2 de 2. • 1, 2
Re: prueva con usart.h y masterI2C.h
novedades,una buena y una mala .
la buena es que el codigo GCBASIC del pic master 16F767 (control de los motores y escritura memoria externa 24C256) y el bus I2C funciona perfectamente.la mala es que el codigo GCBASIC para el 16F876A (slave control motores) no funciona.he programado el slave con codigo mikrobasic(libreria I2C hardware) y funciona que es un espectaculo.hay algun error en la configuraciòn de los registros del pic.seguramente .podes dar una mirada Pikitin?
Master en Gbasic (funciona)
Slave en Gbasic(no funciona)
Slave en Mikrobasic(funciona junto con 16F767 programado con codigo en GBasic)
la buena es que el codigo GCBASIC del pic master 16F767 (control de los motores y escritura memoria externa 24C256) y el bus I2C funciona perfectamente.la mala es que el codigo GCBASIC para el 16F876A (slave control motores) no funciona.he programado el slave con codigo mikrobasic(libreria I2C hardware) y funciona que es un espectaculo.hay algun error en la configuraciòn de los registros del pic.seguramente .podes dar una mirada Pikitin?
Master en Gbasic (funciona)
- Código:
''''''''''''''' CONFIGURACION DEL PIC '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#chip 16F767, 20 'modelo de pic y velocidad de reloj
#config CP_OFF,DEBUG_OFF,WDT_OFF,PWRTE_ON,VBOR_2_7,BOREN_0,MCLR_ON,OSC=HS,IESO_OFF,FCMEN_OFF
''''''''''''''' INICIA EL MODULO SSP MODE MASTER ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#include
''''''''''''''' SETUP MASTER I2C ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#define ClockValue 49 'ClockValue or SSPADD = (FOSC / (4 * Baud)) - 1
#define Comunicacion_Wr 0XA2
#define Comunicacion_Rd 0XA3
#define Motores_Wr 0XA4
#define Motores_Rd 0XA5
#define Mem_Wr 0XA6
#define Mem_Rd 0XA7
#define BufferLen 8
''''''''''''''' VARIABLES '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
DIM wIndex AS BYTE
''''''''''''''' SUB PROCEDURAS ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SUB I2C_Master_to_Memory(MemAddress,Dato)#NR
Start 'Start I2C
TxI2C(Mem_Wr) 'Device ID Slave
TxI2C(MemAddress_H) 'Device high Address memory
TxI2C(MemAddress) 'Device low Address memory
TxI2C(Dato) 'Send low byte data
Stop 'Stop I2C
END SUB
SUB I2C_Master_to_Slave(IDAddress,Dato)#NR
Start 'Start I2C
TxI2C(IDAddress) 'Device ID write byte
TxI2C(Dato) 'Send byte size data
Stop 'Stop I2C
WAIT 100 ms
END SUB
''''''''''''''' PARAMETROS ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ADCON1=b'10001111' 'PORTA.0/1/2/3 analogicas,resto digital.PORTB digital,justificado a derecha + Vref
TRISA=b'000000' 'PORTA como output
TRISB=b'00000000' 'PORTB como output
TRISC=b'00011000' 'Puertas PORTC.3 y PORTC.4 son input
PORTA=b'000000' 'Setaje PORTA
PORTB=b'00000000' 'Setaje PORTB
PORTC=b'00000000' 'Setaje PORTC
vValor=0 'Inicializo la variable del dato
''''''''''''''' INICIA ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
InitI2C
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
WAIT 2 s 'Inicia la comunicacion
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
FOR wIndex=1 TO 7
I2C_Master_to_Slave(Motores_Wr,wIndex+240)
I2C_Master_to_Memory(wIndex-1,wIndex+240)
WAIT 4 s
NEXT wIndex
I2C_Master_to_Slave(Motores_Wr,0XF0)
I2C_Master_to_Memory(7,0XF0)
WAIT 1 s
I2C_Master_to_Slave(Motores_Wr,0XF8)
I2C_Master_to_Memory(8,0XF8)
Slave en Gbasic(no funciona)
- Código:
''''''''''''''' CONFIGURACION DEL PIC '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#chip 16F876A,20
#config OSC=HS,WDT_OFF,PWRTE_ON,CP_OFF,DEBUG_OFF,WRT_OFF,BODEN_OFF,CPD_OFF,LVP_OFF
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#include 'libreria I2C slave
''''''''''''''' SETUP SLAVE I2C '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#define PicSlave 0xA4 'Configuro Pic_Slave I2C_address
#define BufferLen 1 'Cuantos byte en recepciòn para activar el interrupt
''''''''''''''' VARIABLES '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#DEFINE Alto 127
#DEFINE Adelante_veloz 0
#DEFINE Adelante_normal 41
#DEFINE Adelante_lento 83
#DEFINE Atras_lento 171
#DEFINE Atras_normal 211
#DEFINE Atras_veloz 255
DIM Comando AS BYTE
DIM RxBuffer(RxBufferSize)
''''''''''''''' INICIA EL MODULO SSP ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
InitSSP
''''''''''''''' DECLARA EL INTERRUPT ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
On Interrupt SSP1Ready call I2C_Interrupt
''''''''''''''' SUB PROCEDURAS ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SUB Gestion_motores(Motor_A AS BYTE,Motor_B AS BYTE)
HPWM 1,10,Motor_A
HPWM 2,10,Motor_B
END SUB
Sub I2C_Interrupt
PIR1.SSPIF=0 'Limpia el flag del interrupt
Comando=RxBuffer(1) 'Lee el dato del master
SSPCON.CKP=1 'Libera el clock
End Sub
''''''''''''''' INICIA '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Configuraciòn registros SSP y activar el interrupt
Main:
''''''''''''''' PARAMETROS ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ADCON1=b'10000010' 'Puerto A 0/1/2/3/5 son analogicos
TRISA=b'101111' 'Puerto A todos out
TRISB=b'00000000' 'Puerto B todos out
TRISC=b'00011000' 'Puerto C 3 y 4 son input,las demas output
PORTA=b'00000' 'Puerto A son bajas
PORTB=b'00000000' 'Puerto B son bajas
PORTC=b'00000000' 'Puerto C son bajas
SSPSTAT=0xC0 'Slew rate control deshabilitado para freq. 100Khz,controla el rango de voltaje utilizado(CKE)por el microcontrolador PICmicro cuando la recepción de señales I2C.
SSPCON2=0 'Alternativa %00000001
PIE1=0x08 'Habilita los interrupts de SSP
INTCON=0xC0 'Habilita GIE y PEIE
Comando=0xF0 'Init variable $F0 = motores alto
PORTB=b'00000110' 'Habilito Enable_1 + Enable_2
PWMOn
DO
SELECT CASE Comando
CASE 0xF0
Gestion_motores(Alto,Alto)
WAIT 250 ms
CASE 0xF1
Gestion_motores(Adelante_lento,Adelante_lento)
WAIT 250 ms
CASE 0xF2
Gestion_motores(Adelante_normal,Adelante_normal)
WAIT 250 ms
CASE 0xF3
Gestion_motores(Adelante_veloz,Adelante_veloz)
WAIT 250 ms
CASE 0xF4
Gestion_motores(Alto,Alto)
WAIT 250 ms
CASE 0xF5
Gestion_motores(Atras_lento,Atras_lento)
WAIT 250 ms
CASE 0xF6
Gestion_motores(Atras_normal,Atras_normal)
WAIT 250 ms
CASE 0xF7
Gestion_motores(Atras_veloz,Atras_veloz)
WAIT 250 ms
END SELECT
LOOP UNTIL Comando=0xF8
PWMOff
PORTB=b'00000000' 'Deshabilito Enable_1 + Enable_2
Slave en Mikrobasic(funciona junto con 16F767 programado con codigo en GBasic)
- Código:
PROGRAM Control_mot_16F876A
'***************************** CONSTANTES **************************************
CONST Alto AS BYTE=127
CONST Adelante_veloz AS BYTE=0
CONST Adelante_normal AS BYTE=41
CONST Adelante_lento AS BYTE=83
CONST Atras_lento AS BYTE=171
CONST Atras_normal AS BYTE=211
CONST Atras_veloz AS BYTE=255
'***************************** VARIABLES ***************************************
DIM Clear_Buffer AS BYTE
DIM Comando AS BYTE
'**************************** SUB PROCEDURAS ***********************************
SUB PROCEDURE Gestion_motores(DIM Motor_A AS BYTE,DIM Motor_B AS BYTE)
Pwm1_Change_Duty(Motor_A)
Pwm2_Change_Duty(Motor_B)
END SUB
SUB PROCEDURE Interrupt()
IF PIR1.SSPIF=1 THEN 'I2C slave subroutine
PIR1.SSPIF=0 'Limpia el flag del interrupt
IF (SSPSTAT.D_A=1) THEN 'Dato,no ID_Address
Comando=SSPBUF 'Lee el dato del master
SETBIT(SSPCON,CKP) 'Libera el clock
END IF
Clear_Buffer=SSPBUF 'read buffer to clear flag [address]
END IF
END SUB
'**************************** CICLO ********************************************
Main:
ADCON1=%10000010 'Cinco puertas analogicas
TRISA=%000000 'PORTA como output
TRISB=%00000000 'PORTB como output
TRISC=%00011000 'Puertas PORTC.3 y PORTC.4 son input
PORTA=%000000 'Setaje PORTA
PORTB=%00000000 'Setaje PORTB
PORTC=%00000000 'Setaje PORTC
SSPADD=%10100100 'Setaje ID_Address = 0xA4
SSPSTAT=%11000000 'Slew rate control deshabilitado para freq. 100Khz,controla el rango de voltaje utilizado(CKE)por el microcontrolador PICmicro cuando la recepción de señales I2C.
SSPCON=%00110110 'Setaje como slave,con 7 bit address
SSPCON2=%0000000 'Alternativa %00000001
PIE1=%00001000 'Habilita los interrupts de SSP
INTCON=%11000000 'Habilita GIE y PEIE
Comando=%11110000 'Init variable $F0 = motores alto
Pwm1_Init(10000) 'Init PWM modulo1 a 10000 hz
Pwm2_Init(10000) 'Init PWM modulo2 a 10000 hz
Pwm1_Start 'Start PWM modulo1
Pwm2_Start 'Start PWM modulo2
PORTB=%00000110 'Habilito Enable_1 + Enable_2
WHILE True
SELECT CASE Comando
CASE %11110000
Gestion_motores(Alto,Alto)
Delay_ms(250)
CASE %11110001
Gestion_motores(Adelante_lento,Adelante_lento)
Delay_ms(250)
CASE %11110010
Gestion_motores(Adelante_normal,Adelante_normal)
Delay_ms(250)
CASE %11110011
Gestion_motores(Adelante_veloz,Adelante_veloz)
Delay_ms(250)
CASE %11110100
Gestion_motores(Alto,Alto)
Delay_ms(250)
CASE %11110101
Gestion_motores(Atras_lento,Atras_lento)
Delay_ms(250)
CASE %11110110
Gestion_motores(Atras_normal,Atras_normal)
Delay_ms(250)
CASE %11110111
Gestion_motores(Atras_veloz,Atras_veloz)
Delay_ms(250)
CASE %11111000
BREAK
END SELECT
WEND
PORTB=%00000000 'Deshabilito Enable_1 + Enable_2
END.
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: prueva con usart.h y masterI2C.h
ahora funciona muy bien.el codigo del 16F876A(Slave) en GCBasic es:
importante es "bajar" la linea de CLOCK.
ahora paso al pic de transmiciones datos.
- Código:
''''''''''''''' CONFIGURACION DEL PIC ''''''''''''''''''''''''''''''''''''''''''''''''
#chip 16F876A,20
#config OSC=HS,WDT_OFF,PWRTE_ON,CP_OFF,DEBUG_OFF,WRT_OFF,BODEN_OFF,CPD_OFF,LVP_OFF
''''''''''''''' VARIABLES ''''''''''''''''''''''''''''''''''''''''''''''''
#DEFINE Alto 127
#DEFINE Adelante_veloz 0
#DEFINE Adelante_normal 41
#DEFINE Adelante_lento 83
#DEFINE Atras_lento 171
#DEFINE Atras_normal 211
#DEFINE Atras_veloz 255
DIM Comando AS BYTE
DIM Clear_Buffer AS BYTE
''''''''''''''' DECLARA EL INTERRUPT ''''''''''''''''''''''''''''''''''''''''''''''''
On Interrupt SSP1Ready call I2C_Interrupt
''''''''''''''' INICIA ''''''''''''''''''''''''''''''''''''''''''''''''
Main:
''''''''''''''' PARAMETROS ''''''''''''''''''''''''''''''''''''''''''''''''
ADCON1=b'10000010' 'Puerto A 0/1/2/3/5 son analogicos
TRISA=b'101111' 'Puerto A todos out
TRISB=b'00000000' 'Puerto B todos out
TRISC=b'00011000' 'Puerto C 3 y 4 son input,las demas output
PORTA=b'00000' 'Puerto A son bajas
PORTB=b'00000000' 'Puerto B son bajas
PORTC=b'00000000' 'Puerto C son bajas
SSPADD=0xA4 'Setaje ID_Address = 0xA4
SSPSTAT=b'11000000' 'Slew rate control deshabilitado para freq.
'100Khz,controla el rango de voltaje
'utilizado(CKE)por el microcontrolador
'cuando la recepción de señales I2C.
SSPCON=b'00110110' 'Setaje como slave,con 7 bit address
SSPCON2=b'0000000' 'Alternativa %00000001
PIE1=b'00001000' 'Habilita los interrupts de SSP(SSPEN)
INTCON=b'11000000' 'Habilita GIE y PEIE
Comando=0xF0 'Init variable $F0 = motores alto
PORTB=b'00000110' 'Habilito Enable_1 + Enable_2
PWMOn
DO
SELECT CASE Comando
CASE 0xF0
Gestion_motores(Alto,Alto)
WAIT 250 ms
CASE 0xF1
Gestion_motores(Adelante_lento,Adelante_lento)
WAIT 250 ms
CASE 0xF2
Gestion_motores(Adelante_normal,Adelante_normal)
WAIT 250 ms
CASE 0xF3
Gestion_motores(Adelante_veloz,Adelante_veloz)
WAIT 250 ms
CASE 0xF4
Gestion_motores(Alto,Alto)
WAIT 250 ms
CASE 0xF5
Gestion_motores(Atras_lento,Atras_lento)
WAIT 250 ms
CASE 0xF6
Gestion_motores(Atras_normal,Atras_normal)
WAIT 250 ms
CASE 0xF7
Gestion_motores(Atras_veloz,Atras_veloz)
WAIT 250 ms
END SELECT
LOOP UNTIL Comando=0xF8
PWMOff
PORTB=b'00000000' 'Deshabilito Enable_1 + Enable_2
''''''''''''''' SUB PROCEDURAS ''''''''''''''''''''''''''''''''''''''''''''''''
SUB Gestion_motores(Motor_A AS BYTE,Motor_B AS BYTE)
HPWM 1,10,Motor_A
HPWM 2,10,Motor_B
END SUB
Sub I2C_Interrupt
IF PIR1.SSPIF=1 THEN 'I2C slave subroutine
PIR1.SSPIF=0 'Limpia el flag del interrupt
IF SSPSTAT.D_A=1 THEN 'Dato,no es el ID_Address
Comando=SSPBUF 'Lee el dato del master
SSPCON.CKP=1 'Libera el clock
END IF
Clear_Buffer=SSPBUF 'Limpia el buffer del byte address
END IF
End Sub
importante es "bajar" la linea de CLOCK.
ahora paso al pic de transmiciones datos.
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: prueva con usart.h y masterI2C.h
Pikitin,me estoy volviendo loco.
los file .hex para master y slave en windows con GCBasic y GPUtils (GCBIde 2.0 como editor) funcionan.
en ubuntu con GEdit me crea .hex distintos y no funcionan.
GCIde no se abre con wine.hay otro editor para gcbasic en ubuntu para provar??
los file .hex para master y slave en windows con GCBasic y GPUtils (GCBIde 2.0 como editor) funcionan.
en ubuntu con GEdit me crea .hex distintos y no funcionan.
GCIde no se abre con wine.hay otro editor para gcbasic en ubuntu para provar??
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: prueva con usart.h y masterI2C.h
Que quieres decir con que no funcionan? ... explica un poco donde no funcionan.en ubuntu con GEdit me crea .hex distintos y no funcionan
El editor creo que no tiene mucha importancia, lo importante es la configuración de GcBasic... mira los gcbasic.ini, quizás haya alguna diferencia.
Si quieres usar en Linux archivos escritos en Win2 (y al revés) está el tema de los fines de linea, que son distintos.
Dices que has usado Gedit,... ¿estás usando el plugin?hay otro editor para gcbasic en ubuntu para provar??
También puedes usar la versión modificada de Ktechlab, puedes compilar con GcBasic, SDCC y Gpasm: http://piclinux.sourceforge.net/ktechlab-gcb.html
ahora funciona muy bien.el codigo del 16F876A(Slave) en GCBasic es:
....
como ven no uso la libreria y tengo el control de datos en entrada con
la lectura en interrupt del SSPBUF al activarse el flag de SSPSTAT.D_A
a 1(hay un byte en linea y no es el address).
Buena solución... a veces es más facil controlar uno mismo que usar una librería.
¿Has visto el nuevo update de GcBasic?... ya trae funciones para I2C.
Saludos.
Re: prueva con usart.h y masterI2C.h
veamos si es un problema de trascripciòn.los reescribire a mano.como se installa el plug-in para GEdit(me encuentro muy bien con este editor).
al programar los pic con los file .hex master y slave trabajan en modo anormal.si queres te envio los file .hex.se ve la diferencia ya al abrirlos con un bloconotes.
al programar los pic con los file .hex master y slave trabajan en modo anormal.si queres te envio los file .hex.se ve la diferencia ya al abrirlos con un bloconotes.
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: prueva con usart.h y masterI2C.h
tanto para cambiar Ktechlab no se abre.he installado todas las dependencias que me pidiò.
espero tu respuestaktechlab: error while loading shared libraries: libgpsim.so.0: wrong ELF class: ELFCLASS32
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: prueva con usart.h y masterI2C.h
Mmmm... ¿usas Ubuntu de 64 bits?
Si es así instala el paquete Ktechlab para 64 bits: http://sourceforge.net/projects/piclinux/files/Ktechlab-Gcb/ktechlab_0.3.7-gcb-1_amd64.deb/download
También hay un GcBasic para 64 bits (Aunque creo que el de 32 tambien funciona en 64): http://sourceforge.net/projects/piclinux/files/GcBasic-PL/GcBasic-PL_0.9_12-08-09/gcbasic-pl_0.9_12-8-09_amd64.deb/download
Espero que esa sea la solución.
Si es así instala el paquete Ktechlab para 64 bits: http://sourceforge.net/projects/piclinux/files/Ktechlab-Gcb/ktechlab_0.3.7-gcb-1_amd64.deb/download
También hay un GcBasic para 64 bits (Aunque creo que el de 32 tambien funciona en 64): http://sourceforge.net/projects/piclinux/files/GcBasic-PL/GcBasic-PL_0.9_12-08-09/gcbasic-pl_0.9_12-8-09_amd64.deb/download
Espero que esa sea la solución.
Re: prueva con usart.h y masterI2C.h
siMmmm... ¿usas Ubuntu de 64 bits?
grazias Pikitin.no sabes cuanto me rompe tener que dejar Ubuntu para ir a Winzoz.no tanto por el programador K149B si no por tener que compilar en GCBASIC en Win .hasta este momento GCBASIC no pierde un golpe ( ok I2C + USART + ADC + Driver ponte-H ).
ahora voy a provar.
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: prueva con usart.h y masterI2C.h
grazias Pikitin.he podido instalar Ktechlab y Gpsim.
tengo que tomarles la mano.solo que no quisiera dejar GEdit.
aprovecho para pedir informaciòn sobre la construcciòn de antenas de trasmiciòn y recepciòn un quarto de onda para 433mhz.mejor si ground-plain.los modulos que usava con Vicky a 600 baud(el pic trabajaba con un quarzo a 4 mhz) ahora tienen problemas a transmitir y recibir a 2400(el minimo con quarzi a 20 Mhz).
tengo que tomarles la mano.solo que no quisiera dejar GEdit.
aprovecho para pedir informaciòn sobre la construcciòn de antenas de trasmiciòn y recepciòn un quarto de onda para 433mhz.mejor si ground-plain.los modulos que usava con Vicky a 600 baud(el pic trabajaba con un quarzo a 4 mhz) ahora tienen problemas a transmitir y recibir a 2400(el minimo con quarzi a 20 Mhz).
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: prueva con usart.h y masterI2C.h
confirmo la sospecha de la antena en recepciòn.
he puesto un cable de rame de 1,5 mm de diam. a 1/2 onda(34,65 mm de largo) y a mejorado la recepciòn.
veamos si san google me responde.....
he puesto un cable de rame de 1,5 mm de diam. a 1/2 onda(34,65 mm de largo) y a mejorado la recepciòn.
veamos si san google me responde.....
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: prueva con usart.h y masterI2C.h
Con lo de la antena no te puedo ayudar... no tengo ni idea...
Si vas a usar Ktechlab como IDE te cuento algunas cosas:
Ktechlab reconoce tanto fin de linea UNIX, Win2, Mac; creo que lo hace automático, pero puedes elegir en: Herramientas/Fin_de_linea.
Con Gpasm puedes elegir el formato de archivo hexadecimal generado, y algunas otras cosas; para usarlo con archivos generados con GcBasic tienes que poner: inhx32, Radix=Decimal, Ingorar mayúsculas.
En el formato de archivo hexadecimal prueba a ver cual te sirve.
Saludos.
Si vas a usar Ktechlab como IDE te cuento algunas cosas:
Ktechlab reconoce tanto fin de linea UNIX, Win2, Mac; creo que lo hace automático, pero puedes elegir en: Herramientas/Fin_de_linea.
Con Gpasm puedes elegir el formato de archivo hexadecimal generado, y algunas otras cosas; para usarlo con archivos generados con GcBasic tienes que poner: inhx32, Radix=Decimal, Ingorar mayúsculas.
En el formato de archivo hexadecimal prueba a ver cual te sirve.
Saludos.
Re: prueva con usart.h y masterI2C.h
grazias Pikitin lo mismo.he solucionado(los modulos RF son los màs economicos,por eso tienen problemas) creando una antena stilo 1/4 wave en GROUND PLANE.si quieres,y otros miembros son interesados,les envio fotos y medidas.provada a una distancia +- de 25 mt a 2400 baud(el limite del receptor.como sea hare de las pruevas a velocidad superior).
manos a la obra entonces con Ubuntu 9.10 nuevo de instalaciòn .
veamos si Bender empieza a caminar
Si vas a usar Ktechlab como IDE te cuento algunas cosas:
Ktechlab
reconoce tanto fin de linea UNIX, Win2, Mac; creo que lo hace
automático, pero puedes elegir en: Herramientas/Fin_de_linea.
Con
Gpasm puedes elegir el formato de archivo hexadecimal generado, y
algunas otras cosas; para usarlo con archivos generados con GcBasic
tienes que poner: inhx32, Radix=Decimal, Ingorar mayúsculas.
En el formato de archivo hexadecimal prueba a ver cual te sirve.
manos a la obra entonces con Ubuntu 9.10 nuevo de instalaciòn .
veamos si Bender empieza a caminar
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Re: prueva con usart.h y masterI2C.h
Resuelto,ahora todo funciona (I2C + Usart + HPWM)
El Master (prueva)
Este es el codigo de los Slave,cambia solo el ID en SSPADD ( 0xA2 para el pic de los anteriores y 0xA4 para los posteriores)
El Master (prueva)
- Código:
''''''''''''''' CONFIGURACION DEL PIC '''''''''''''''
#CHIP 16F876A,20
#CONFIG OSC=HS,WDT_OFF,PWRTE_ON,CP_OFF,DEBUG_OFF,WRT_OFF,CPD_OFF,LVP_OFF,BODEN_ON
''''''''''''''' SETUP MASTER I2C ''''''''''''
#INCLUDE 'Libreria I2C
#DEFINE ClockValue 49 'ClockValue = 100Khz
#DEFINE Wr_Memoria 0xA0 'ID de la memoria en escritura
#DEFINE Rd_Memoria 0xA1 'ID de la memoria en lectura
#DEFINE Wr_Motores_Ant 0XA2 'ID del pic motores en escritura
#DEFINE Rd_Motores_Ant 0XA3 'ID del pic motores en lectura
#DEFINE Wr_Motores_Pos 0XA4 'ID del pic motores en escritura
#DEFINE Rd_Motores_Pos 0XA5 'ID del pic motores en lectura
#DEFINE Wr_Auxiliar 0XA6 'ID del pic auxiliar en escritura
#DEFINE Rd_Auxiliar 0XA7 'ID del pic auxiliar en lectura
''''''''''''''' SETAJE USART '''''''''''''''''''''
#DEFINE USART_BLOCKING
#DEFINE USART_BAUD_RATE 2400
''''''''''''''' VARIABLES '''''''''''''''''''''''''
DIM Ciclo AS BYTE
DIM bIndex AS BYTE
''''''''''''''' SUB PROCEDURAS ''''''''''''''''''''
SUB I2C_Master_to_Memory(ID,Address,Dato)#NR
Start 'Start I2C
TxI2C(Wr_Memoria) 'Device ID Slave
TxI2C(Address_H) 'Device high Address memory
TxI2C(Address) 'Device low Address memory
TxI2C(Dato) 'Send low byte data
Stop 'Stop I2C
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
WAIT 100 ms 'Tiempo de espera
END SUB
SUB Inicio_transmicion()
FOR bIndex=1 TO 2
HSerSend 0X0A
HSerSend "#"
HSerSend "$"
WAIT 25 ms
NEXT bIndex
END SUB
SUB Bateria_Sistema()
Inicio_transmicion()
HSerPrint "BS"
HSerPrint ReadAD10(AN0)
HSerSend "#"
HSerSend "$"
WAIT 25 ms
END SUB
SUB Bateria_Motores()
Inicio_transmicion()
HSerPrint "BM"
HSerPrint ReadAD10(AN2)
HSerSend "#"
HSerSend "$"
WAIT 25 ms
END SUB
''''''''''''''' PARAMETROS ''''''''''''''''''''''''''''
INTCON=b'00000000' 'Interrupts deshabilitados
ADCON1=b'10000010' 'Puerto A 0/1/2/3/5 son analogicos
TRISA=b'000000' 'Puerto A todos out
TRISB=b'00000000' 'Puerto B todos out
TRISC=b'00011000' 'Puerto C 3 y 4 son input,las demas output
PORTA=b'00000' 'Puerto A son bajas
PORTB=b'00000000' 'Puerto B son bajas
PORTC=b'00000000' 'Puerto C son bajas
''''''''''''''' INICIA ''''''''''''''''''''''''''''''''''
InitI2C 'Inicia el modulo I2C
InitUSART 'Inicia el modulo USART
WAIT 1 s 'Inicia la comunicacion
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
FOR Ciclo=0x00 TO 0xFE
I2C_Master_to_Memory(IWr_Memoria,Ciclo,Ciclo)
I2C_Master_to_Slave(Wr_Motores_Ant,Ciclo) 'Motores anteriores
I2C_Master_to_Slave(Wr_Motores_Pos,Ciclo) 'Motores posteriores
Bateria_Motores()
Bateria_Sistema()
WAIT 4 s
NEXT Ciclo
Este es el codigo de los Slave,cambia solo el ID en SSPADD ( 0xA2 para el pic de los anteriores y 0xA4 para los posteriores)
- Código:
''''''''''''''' CONFIGURO EL PIC '''''''''''''''''
#chip 16F876A,20
#config OSC=HS,WDT_OFF,PWRTE_ON,CP_OFF,DEBUG_OFF,WRT_OFF,BODEN_OFF,CPD_OFF,LVP_OFF
''''''''''''''' VARIABLES ''''''''''''''''
DIM Comando AS BYTE
''''''''''''''' DECLARA EL INTERRUPT '''''''''''''''''
On Interrupt SSP1Ready call I2C_Interrupt
''''''''''''''' SUB PROCEDURAS '''''''''''''''
SUB I2C_Interrupt
IF PIR1.SSPIF=1 THEN 'I2C slave subroutine
PIR1.SSPIF=0 'Limpia el flag del interrupt
IF SSPSTAT.D_A=1 THEN 'Dato,no ID_Address
Comando=SSPBUF 'Lee el dato del master
SSPCON.CKP=1 'Libera el clock
END IF
Clear_Buffer=SSPBUF 'Limpia el buffer del byte address
END IF
END SUB
SUB Gestion_motores(Motor_A AS BYTE,Motor_B AS BYTE)
HPWM 1,10,Motor_B
HPWM 2,10,Motor_A
END SUB
''''''''''''''' INICIA ''''''''''''''''''
Main:
''''''''''''''' PARAMETROS ''''''''''''''''''''
ADCON1=b'10000010' 'Puerto A 0/1/2/3/5 son analogicos
TRISA=b'000000' 'Puerto A todos out
TRISB=b'00000000' 'Puerto B todos out
TRISC=b'00011000' 'Puerto C 3 y 4 son input,las demas output
PORTA=b'00000' 'Puerto A son bajas
PORTB=b'00000000' 'Puerto B son bajas
PORTC=b'00000000' 'Puerto C son bajas
SSPADD=0xA2 'Setaje ID_Address = 0xA2
SSPSTAT=b'11000000'
SSPCON=b'00110110'
SSPCON2=b'0000000'
PIE1=b'00001000'
INTCON=b'11000000'
Comando=0xE0
PWMOn 'Habilito el modulo PWM
PORTC=b'00000001' 'Habilito Enable_1 + Enable_2
DO
SELECT CASE Comando
'STOP
CASE 0xE0
Gestion_motores(127,127)
WAIT 250 ms
'MARCIAS ADELANTE
CASE 0xE1
Gestion_motores(83,83)
WAIT 250 ms
CASE 0xE2
Gestion_motores(41,41)
WAIT 250 ms
CASE 0xE3
Gestion_motores(0,0)
WAIT 250 ms
'STOP
CASE 0xE4
Gestion_motores(127,127)
WAIT 250 ms
'MARCIAS ATRAS
CASE 0xE5
Gestion_motores(171,171)
WAIT 250 ms
CASE 0xE6
Gestion_motores(211,211)
WAIT 250 ms
CASE 0xE7
Gestion_motores(255,255)
WAIT 250 ms
'STOP
CASE 0xE8
Gestion_motores(127,127)
WAIT 250 ms
'DERECHA
CASE 0xE9
Gestion_motores(127,83)
WAIT 250 ms
CASE 0xEA
Gestion_motores(127,41)
WAIT 250 ms
CASE 0xEB
Gestion_motores(127,0)
WAIT 250 ms
'STOP
CASE 0xEC
Gestion_motores(127,127)
WAIT 250 ms
'IZQUIERDA
CASE 0xED
Gestion_motores(83,127)
WAIT 250 ms
CASE 0xEE
Gestion_motores(41,127)
WAIT 250 ms
CASE 0xEF
Gestion_motores(0,127)
WAIT 250 ms
'STOP
CASE 0xF0
Gestion_motores(127,127)
WAIT 250 ms
END SELECT
LOOP UNTIL Comando=0xF1
PWMOff 'Deshabilito el modulo PWM
PORTC=b'00000000' 'Deshabilito Enable_1 + Enable_2
alejandro- Participante Activo
- Mensajes : 87
Fecha de inscripción : 12/02/2009
Página 2 de 2. • 1, 2
Temas similares
» USART (PIC-PC) PIC16F87x
» PC-Pic por usart a 230.400 baud??
» USART (AVR - PC) ATtiny2313 en ASM
» Ktechlab-0.3.7 modificado.
» SDCC: Driver para Usart PIC16*
» PC-Pic por usart a 230.400 baud??
» USART (AVR - PC) ATtiny2313 en ASM
» Ktechlab-0.3.7 modificado.
» SDCC: Driver para Usart PIC16*
Página 2 de 2.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|