prueva con usart.h y masterI2C.h

Página 2 de 2. Precedente  1, 2

Ir abajo

Re: prueva con usart.h y masterI2C.h

Mensaje por alejandro el Dom 29 Nov 2009 - 11:53

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)
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.
avatar
alejandro
Participante Activo
Participante Activo

Mensajes : 87
Fecha de inscripción : 12/02/2009

Volver arriba Ir abajo

Re: prueva con usart.h y masterI2C.h

Mensaje por alejandro el Dom 29 Nov 2009 - 16:27

ahora funciona muy bien.el codigo del 16F876A(Slave) en GCBasic es:
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
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).
importante es "bajar" la linea de CLOCK.
ahora paso al pic de transmiciones datos.
avatar
alejandro
Participante Activo
Participante Activo

Mensajes : 87
Fecha de inscripción : 12/02/2009

Volver arriba Ir abajo

Re: prueva con usart.h y masterI2C.h

Mensaje por alejandro el Mar 1 Dic 2009 - 11:13

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??
avatar
alejandro
Participante Activo
Participante Activo

Mensajes : 87
Fecha de inscripción : 12/02/2009

Volver arriba Ir abajo

Re: prueva con usart.h y masterI2C.h

Mensaje por Pikitin el Mar 1 Dic 2009 - 13:04

en ubuntu con GEdit me crea .hex distintos y no funcionan
Que quieres decir con que no funcionan? ... explica un poco donde 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.


hay otro editor para gcbasic en ubuntu para provar??
Dices que has usado Gedit,... ¿estás usando el plugin?

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.

Pikitin
veterano
veterano

Mensajes : 623
Fecha de inscripción : 26/11/2008

http://linuxmicros.blogspot.com/

Volver arriba Ir abajo

Re: prueva con usart.h y masterI2C.h

Mensaje por alejandro el Mar 1 Dic 2009 - 15:49

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.
avatar
alejandro
Participante Activo
Participante Activo

Mensajes : 87
Fecha de inscripción : 12/02/2009

Volver arriba Ir abajo

Re: prueva con usart.h y masterI2C.h

Mensaje por alejandro el Mar 1 Dic 2009 - 16:28

tanto para cambiar Ktechlab no se abre.he installado todas las dependencias que me pidiò.
ktechlab: error while loading shared libraries: libgpsim.so.0: wrong ELF class: ELFCLASS32
espero tu respuesta
avatar
alejandro
Participante Activo
Participante Activo

Mensajes : 87
Fecha de inscripción : 12/02/2009

Volver arriba Ir abajo

Re: prueva con usart.h y masterI2C.h

Mensaje por Pikitin el Miér 2 Dic 2009 - 22:22

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.

Pikitin
veterano
veterano

Mensajes : 623
Fecha de inscripción : 26/11/2008

http://linuxmicros.blogspot.com/

Volver arriba Ir abajo

Re: prueva con usart.h y masterI2C.h

Mensaje por alejandro el Jue 3 Dic 2009 - 17:53

Mmmm... ¿usas Ubuntu de 64 bits?
si

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.
avatar
alejandro
Participante Activo
Participante Activo

Mensajes : 87
Fecha de inscripción : 12/02/2009

Volver arriba Ir abajo

Re: prueva con usart.h y masterI2C.h

Mensaje por alejandro el Vie 4 Dic 2009 - 19:16

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).
avatar
alejandro
Participante Activo
Participante Activo

Mensajes : 87
Fecha de inscripción : 12/02/2009

Volver arriba Ir abajo

Re: prueva con usart.h y masterI2C.h

Mensaje por alejandro el Dom 6 Dic 2009 - 19:17

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.....
avatar
alejandro
Participante Activo
Participante Activo

Mensajes : 87
Fecha de inscripción : 12/02/2009

Volver arriba Ir abajo

Re: prueva con usart.h y masterI2C.h

Mensaje por Pikitin el Mar 8 Dic 2009 - 23:36

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.

Pikitin
veterano
veterano

Mensajes : 623
Fecha de inscripción : 26/11/2008

http://linuxmicros.blogspot.com/

Volver arriba Ir abajo

Re: prueva con usart.h y masterI2C.h

Mensaje por alejandro el Miér 9 Dic 2009 - 10:29

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).

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
avatar
alejandro
Participante Activo
Participante Activo

Mensajes : 87
Fecha de inscripción : 12/02/2009

Volver arriba Ir abajo

Re: prueva con usart.h y masterI2C.h

Mensaje por alejandro el Dom 24 Ene 2010 - 11:09

Resuelto,ahora todo funciona (I2C + Usart + HPWM)
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
avatar
alejandro
Participante Activo
Participante Activo

Mensajes : 87
Fecha de inscripción : 12/02/2009

Volver arriba Ir abajo

Re: prueva con usart.h y masterI2C.h

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Página 2 de 2. Precedente  1, 2

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.