Autor Tema: Existen librerias CCS de registros internos del PIC  (Leído 10664 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado CONFORMOTICA

  • PIC10
  • *
  • Mensajes: 16
Existen librerias CCS de registros internos del PIC
« en: 25 de Abril de 2009, 18:07:03 »
Que tal? Soy nuevo en el foro. Estuve buscando desesperadamente por toda la web pero no encontre nada que me sirva. Estoy buscando una libreria similar a las .inc que provee micrchip para el asm donde estan todos los registros internos de cada PIC (option_reg, porta, portb, intcon, etc). Porque estuve viendo que en todos los programas, incluyen los registros que se usan a mano, con el #byte PORTA=5 por ejemplo. Queria saber si alguien encontro o fabrico una libreria para CCS que contenga los registros internos de cada PIC.

Gracias!!

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Existen librerias CCS de registros internos del PIC
« Respuesta #1 en: 25 de Abril de 2009, 18:18:33 »
no escuche sobre esto, quizá fuera necesario cuando empiezas el cambio de asm a ccs, para hallarle el hilo al compilador.

Si usas la versión 4 ahí puedes ver los registros del micro seleccionado y sus respectivos nombres, hasta nombres de los bits si mal no recuerdo.

Tienes la versión 4?
.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Existen librerias CCS de registros internos del PIC
« Respuesta #2 en: 25 de Abril de 2009, 18:26:45 »
Si usas las funciones de configuración más comunes de periféricos, la directiva #byte no es necesaria; una ventaja de CCS. Por ejemplo,

set_tris_b(0x00); //pone puerto b como entradas
output_b(0xaa); //escribe 10101010 en pto b

no hace falta conocer las direcciones ram de los registros que se van a trabajar.

Si aún así quieres manipularlas deberás buscar en la carpeta

C:\Archivos de programa\PICC\Devices

el archivo .h que corresponda al pic que quieres trabajar. Ahí están todos los defines, funciones y configuraciones disponibles para el pic en específico.

Desconectado CONFORMOTICA

  • PIC10
  • *
  • Mensajes: 16
Re: Existen librerias CCS de registros internos del PIC
« Respuesta #3 en: 25 de Abril de 2009, 18:30:57 »
Si. Tengo la version pcwh 4.023 de ccs, o sea picc. Vi en las librerias, por ejemplo la del 16f628, que seria la que se incluye con el: #include <P16F628.H> que seria esta:

#define PIN_A0  40
#define PIN_A1  41
#define PIN_A2  42
#define PIN_A3  43
#define PIN_A4  44
#define PIN_A5  45
#define PIN_A6  46
#define PIN_A7  47

#define PIN_B0  48
#define PIN_B1  49
#define PIN_B2  50
#define PIN_B3  51
#define PIN_B4  52
#define PIN_B5  53
#define PIN_B6  54
#define PIN_B7  55

////////////////////////////////////////////////////////////////// Useful defines
#define FALSE 0
#define TRUE 1

#define BYTE int
#define BOOLEAN short int

#define getc getch
#define fgetc getch
#define getchar getch
#define putc putchar
#define fputc putchar
#define fgets gets
#define fputs puts

////////////////////////////////////////////////////////////////// Control
// Control Functions:  RESET_CPU(), SLEEP(), RESTART_CAUSE()
// Constants returned from RESTART_CAUSE() are:
#define WDT_FROM_SLEEP  3    
#define WDT_TIMEOUT     11    
#define MCLR_FROM_SLEEP 19    
#define MCLR_FROM_RUN   27    
#define NORMAL_POWER_UP 24    
#define BROWNOUT_RESTART 26  


////////////////////////////////////////////////////////////////// Timer 0
// Timer 0 (AKA RTCC)Functions: SETUP_COUNTERS() or SETUP_TIMER_0(),
//                              SET_TIMER0() or SET_RTCC(),
//                              GET_TIMER0() or GET_RTCC()
// Constants used for SETUP_TIMER_0() are:
#define RTCC_INTERNAL   0
#define RTCC_EXT_L_TO_H 32
#define RTCC_EXT_H_TO_L 48

#define RTCC_DIV_1      8
#define RTCC_DIV_2      0
#define RTCC_DIV_4      1
#define RTCC_DIV_8      2
#define RTCC_DIV_16     3
#define RTCC_DIV_32     4
#define RTCC_DIV_64     5
#define RTCC_DIV_128    6
#define RTCC_DIV_256    7


#define RTCC_8_BIT      0    

// Constants used for SETUP_COUNTERS() are the above
// constants for the 1st param and the following for
// the 2nd param:

////////////////////////////////////////////////////////////////// WDT
// Watch Dog Timer Functions: SETUP_WDT() or SETUP_COUNTERS() (see above)
//                            RESTART_WDT()
//
#define WDT_18MS        0  
#define WDT_36MS        9  
#define WDT_72MS       10  
#define WDT_144MS      11  
#define WDT_288MS      12  
#define WDT_576MS      13  
#define WDT_1152MS     14  
#define WDT_2304MS     15  

////////////////////////////////////////////////////////////////// Timer 1
// Timer 1 Functions: SETUP_TIMER_1, GET_TIMER1, SET_TIMER1
// Constants used for SETUP_TIMER_1() are:
//      (or (via |) together constants from each group)
#define T1_DISABLED         0
#define T1_INTERNAL         0x85
#define T1_EXTERNAL         0x87
#define T1_EXTERNAL_SYNC    0x83

#define T1_CLK_OUT          8

#define T1_DIV_BY_1         0
#define T1_DIV_BY_2         0x10
#define T1_DIV_BY_4         0x20
#define T1_DIV_BY_8         0x30

////////////////////////////////////////////////////////////////// Timer 2
// Timer 2 Functions: SETUP_TIMER_2, GET_TIMER2, SET_TIMER2
// Constants used for SETUP_TIMER_2() are:
#define T2_DISABLED         0
#define T2_DIV_BY_1         4
#define T2_DIV_BY_4         5
#define T2_DIV_BY_16        6

////////////////////////////////////////////////////////////////// CCP
// CCP Functions: SETUP_CCPx, SET_PWMx_DUTY
// CCP Variables: CCP_x, CCP_x_LOW, CCP_x_HIGH
// Constants used for SETUP_CCPx() are:
#define CCP_OFF                         0
#define CCP_CAPTURE_FE                  4
#define CCP_CAPTURE_RE                  5
#define CCP_CAPTURE_DIV_4               6
#define CCP_CAPTURE_DIV_16              7
#define CCP_COMPARE_SET_ON_MATCH        8
#define CCP_COMPARE_CLR_ON_MATCH        9
#define CCP_COMPARE_INT                 0xA
#define CCP_COMPARE_RESET_TIMER         0xB
#define CCP_PWM                         0xC
#define CCP_PWM_PLUS_1                  0x1c
#define CCP_PWM_PLUS_2                  0x2c
#define CCP_PWM_PLUS_3                  0x3c
long CCP_1;
#byte   CCP_1    =                      0x15          
#byte   CCP_1_LOW=                      0x15          
#byte   CCP_1_HIGH=                     0x16          
////////////////////////////////////////////////////////////////// UART
// Constants used in setup_uart() are:
// FALSE - Turn UART off
// TRUE  - Turn UART on
#define UART_ADDRESS           2
#define UART_DATA              4
////////////////////////////////////////////////////////////////// COMP
// Comparator Variables: C1OUT, C2OUT
// Constants used in setup_comparator() are:
#define A0_A3_A1_A2  0xfff04
#define A0_A2_A1_A2  0x7ff03
#define NC_NC_A1_A2  0x6ff05
#define NC_NC_NC_NC  0x0ff07
#define A0_VR_A1_VR  0x3ff02
#define A3_VR_A2_VR  0xcff0A
#define A0_A2_A1_A2_OUT_ON_A3_A4 0x7e706
#define A3_A2_A1_A2  0xeff09
#define CP1_INVERT   0x00010
#define CP2_INVERT   0x00020

#bit C1OUT = 0x1f.6
#bit C2OUT = 0x1f.7

////////////////////////////////////////////////////////////////// VREF
// Constants used in setup_vref() are:
//
#define VREF_LOW  0xa0
#define VREF_HIGH 0x80
// Or (with |) the above with a number 0-15
#define VREF_A2   0x40

////////////////////////////////////////////////////////////////// INTERNAL RC
// Constants used in setup_oscillator() are:
#define OSC_48KHZ   0
#define OSC_4MHZ    8

////////////////////////////////////////////////////////////////// INT
// Interrupt Functions: ENABLE_INTERRUPTS(), DISABLE_INTERRUPTS(),
//                      EXT_INT_EDGE()
//
// Constants used in EXT_INT_EDGE() are:
#define L_TO_H              0x40
#define H_TO_L                 0
// Constants used in ENABLE/DISABLE_INTERRUPTS() are:
#define GLOBAL                    0x0BC0
#define INT_RTCC                  0x0B20
#define INT_RB                    0xFF0B08
#define INT_EXT                   0x0B10
#define INT_TBE                   0x8C10
#define INT_RDA                   0x8C20
#define INT_TIMER1                0x8C01
#define INT_TIMER2                0x8C02
#define INT_CCP1                  0x8C04
#define INT_COMP                  0x8C40
#define INT_TIMER0                0x0B20
#define INT_EEPROM                0x8C80

#list


pero no se declaran los registros como el PORTB, PORTA, INTCON, OPTION_REG, STATUS, FSR, etc, que serian los registros internos del pic. El ccs tiene ese tipo de funciones que comenta migsantiago pero no son suficientes, porque solo manipulan los registros mas utilizados como los de puertos y tris.

Yo justamente estoy necesitando alguna libreria donde esten declarados todos los registros internos del pic, para no tener que hacerlo con el #byte id=const de ccs.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Existen librerias CCS de registros internos del PIC
« Respuesta #4 en: 25 de Abril de 2009, 18:36:34 »
Hay funciones para manipular todos los registros especiales. El manejo de interrupciones (INTCON), direccionamiento indirecto (FSR), entrada-salida de puertos (TRISX), todo se hace con funciones; de ahí que no exista un archivo como el que necesitas.

Imagino que estás migrando de asm a c y quieres configurar todo tal como está en asm, pero en CCS es automático al usar las funciones predefinidas.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Existen librerias CCS de registros internos del PIC
« Respuesta #5 en: 25 de Abril de 2009, 18:48:11 »
si, la idea del CCS es usar funciones, y ya saber las direcciones solamente en casos específicos o cuando una función lo requiere como por ejemplo:

set_bit(dir,bit);  //dir es la dirección de un registro y bit la posición del bit a setear, lo mismo para un clear_bit

Los registros los puedes ver desde el compilador en el menu VIEW -> SPECIAL REGISTERS para saber dirección, nombre y nombres de cada bit, esto puede ayudar para que coloques los #byte o #bit que necesites
.

Desconectado CONFORMOTICA

  • PIC10
  • *
  • Mensajes: 16
Re: Existen librerias CCS de registros internos del PIC
« Respuesta #6 en: 25 de Abril de 2009, 18:51:22 »
Gracias por responder tan rapido.

Es verdad que estoy migrando de asm a ccs.. pasando antes por el niple, pero bueno.

Puede ser que aun tenga la mentalidad de trabajar como en asm y no me adapte bien a ccs, voy a tratar de seguir con mi programa tomando esto en cuenta.

Me interesaria saber de alguna funcion que sea similar al manejo con fsr e indf que se realiza en asm, porque estoy medio trabado con eso tambien.

Gracias

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Existen librerias CCS de registros internos del PIC
« Respuesta #7 en: 25 de Abril de 2009, 19:09:00 »
cuando trabajé con ASM no use fsr e indf, pero vi las cosas que hace, son tremendas, y pues lo asemejo con los punteros que tiene el lenguaje C y que se aplican acá en el CCS.

si buscas en el foro encontraras la forma de manejarlos y teniendo una función similar a fsr e indf
.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Existen librerias CCS de registros internos del PIC
« Respuesta #8 en: 25 de Abril de 2009, 19:12:01 »
No hay función similar pero se puede hacer un algoritmo similar usando apuntadores como dice Cryn.

Por ejemplo, para poner una sección de ram en ceros (0x0C a 0x7F del banco actual):

Código: [Seleccionar]
int8 *apuntador;

...

apuntador=0x0C;
while(apuntador<0x80)
   {
   *apuntador=0x00;
   apuntador++;
   }

Si quieres aprender más sobre apuntadores en CCS puedes leer el tutorial de Palitroquez al respecto.

http://www.todopic.com.ar/foros/index.php?topic=16680.0

si, la idea del CCS es usar funciones, y ya saber las direcciones solamente en casos específicos o cuando una función lo requiere como por ejemplo:

set_bit(dir,bit);  //dir es la dirección de un registro y bit la posición del bit a setear, lo mismo para un clear_bit

Los registros los puedes ver desde el compilador en el menu VIEW -> SPECIAL REGISTERS para saber dirección, nombre y nombres de cada bit, esto puede ayudar para que coloques los #byte o #bit que necesites

Hey Cryn, en el caso de set_bit tampoco hace falta conocer la dirección RAM del registro. C la ubica y C la conoce pero set_bit no la pide a nivel de programación.  :mrgreen:

Funciones como sprintf sí requieren que uno le diga la dirección RAM del primer char del string a trabajar, pero se resuelve con apuntadores.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Existen librerias CCS de registros internos del PIC
« Respuesta #9 en: 25 de Abril de 2009, 19:19:37 »
Citar
Hey Cryn, en el caso de set_bit tampoco hace falta conocer la dirección RAM del registro. C la ubica y C la conoce pero set_bit no la pide a nivel de programación.  Mr. Green

como ejecutarías esa función?

yo hago:

#byte portb 6

bit_set(portb,0);

eso hace que se ponga a alto el pin B0 del micro
.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Existen librerias CCS de registros internos del PIC
« Respuesta #10 en: 25 de Abril de 2009, 19:31:54 »
Usando las ya existentes  :mrgreen:

Código: [Seleccionar]
output_high(pin_b0);

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Existen librerias CCS de registros internos del PIC
« Respuesta #11 en: 25 de Abril de 2009, 20:41:14 »
Que tal? Soy nuevo en el foro. Estuve buscando desesperadamente por toda la web pero no encontre nada que me sirva. Estoy buscando una libreria similar a las .inc que provee micrchip para el asm donde estan todos los registros internos de cada PIC (option_reg, porta, portb, intcon, etc). Porque estuve viendo que en todos los programas, incluyen los registros que se usan a mano, con el #byte PORTA=5 por ejemplo. Queria saber si alguien encontro o fabrico una libreria para CCS que contenga los registros internos de cada PIC.

Gracias!!

si es posible, pero hay que crearlas para cada microcontrolador,

mira el post:

http://www.todopic.com.ar/foros/index.php?topic=21521.msg172911#msg172911


La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Existen librerias CCS de registros internos del PIC
« Respuesta #12 en: 26 de Abril de 2009, 09:49:42 »
Usando las ya existentes  :mrgreen:

Código: [Seleccionar]
output_high(pin_b0);

ok :lol:

 :P
.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Existen librerias CCS de registros internos del PIC
« Respuesta #13 en: 26 de Abril de 2009, 12:40:22 »
si es posible, pero hay que crearlas para cada microcontrolador,

mira el post:

http://www.todopic.com.ar/foros/index.php?topic=21521.msg172911#msg172911

uff no tenía idea de esas opciones, perdón por la metida de pata.

Desconectado CONFORMOTICA

  • PIC10
  • *
  • Mensajes: 16
Re: Existen librerias CCS de registros internos del PIC
« Respuesta #14 en: 27 de Abril de 2009, 16:21:30 »
Que tal? Soy nuevo en el foro. Estuve buscando desesperadamente por toda la web pero no encontre nada que me sirva. Estoy buscando una libreria similar a las .inc que provee micrchip para el asm donde estan todos los registros internos de cada PIC (option_reg, porta, portb, intcon, etc). Porque estuve viendo que en todos los programas, incluyen los registros que se usan a mano, con el #byte PORTA=5 por ejemplo. Queria saber si alguien encontro o fabrico una libreria para CCS que contenga los registros internos de cada PIC.

Gracias!!

si es posible, pero hay que crearlas para cada microcontrolador,

mira el post:

http://www.todopic.com.ar/foros/index.php?topic=21521.msg172911#msg172911




Estuve viendo el post pero ocurre que el CCS duplica las etiquetas de los registros y a la hora de compilar tira muchos errores, esto es porque asigna las direcciones de memoria a los registros, y muchos registros se encuentran en varias posiciones de memoria, lo cual provoca el conflicto de que una misma etiqueta esté identificada con más de un numero.