Autor Tema: Escritura de Registros de configuracion (FUSES 300000h)  (Leído 1484 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Hidalgork

  • PIC10
  • *
  • Mensajes: 7
Escritura de Registros de configuracion (FUSES 300000h)
« en: 10 de Mayo de 2006, 14:17:31 »
Hola amigos
 Tengo el siguiente problema:

 No puedo cambiar los registros desde el 300000h
 
 estaba tratando de hacer lo siguiente
#include "Test.h"
void main()
{
   setup_adc_ports(NO_ANALOGS);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   Enable_interrupts(Global);
   delay_ms(1000);
   printf("Pic Iniciado\n\r");
   while(1)
   {
    printf("registros\n\r");
    printf(" %lX\n\r",read_program_eeprom(0x300000));
    delay_ms(10);
    printf(" %lX\n\r",read_program_eeprom(0x300002));
    delay_ms(10);
    printf(" %lX\n\r",read_program_eeprom(0x300004));
    delay_ms(10);
    printf(" %lX\n\r",read_program_eeprom(0x300006));
    delay_ms(10);
    printf(" %lX\n\r",read_program_eeprom(0x300008));
    delay_ms(10);
    printf(" %lX\n\r",read_program_eeprom(0x30000A));
    delay_ms(10);
    printf(" %lX\n\r",read_program_eeprom(0x30000C));
    delay_ms(10);
    printf(" %lX\n\r",read_program_eeprom(0x30000E));
    delay_ms(1000);
    Erase_program_eeprom(0x300000);//deberia borrar todos los registros
    write_program_eeprom(0x300000,0xC100);//deberia haber cambiado el primer registro
    getc();
   }
}
no analicen demasiado el programa no hara nada especial, lo que me interezaria es saber como cambiar estos registros
hasta el momento no me ha resultado.

gracias por su ayuda.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Escritura de Registros de configuracion (FUSES 300000h)
« Respuesta #1 en: 10 de Mayo de 2006, 19:10:44 »
Hola Hidalgork.  ¿Con qué pic pretendes hacer esto?  Por tu código intuyo es un PIC18F pero no quisiera aventurarme.

- Esa opción no está presente en los PIC 16F.  Está presente en los 18F (y supongo también en los dspic y PIC24).  A lo que me refiero es a la posibilidad de cambiar los fuses desde código.

- Los fuses estan en la memoria FLASH , no en la eeprom, tal vez ahí tengas tu problema.  No uso el CCS pero seguro tiene funciones para escribir a direcciones de FLASH.

-  Cambiar los fuses durante la ejecución del programa es una tarea 'peligrosa', en el sentido que podrías dejar sin funcionar al pic.  Por ejemplo si estas usando un cristal HS y seteas sin querer el oscilador como XT, el pic dejará de funcionar.  Ojo con esto. 


Saludos


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Hidalgork

  • PIC10
  • *
  • Mensajes: 7
Re: Escritura de Registros de configuracion (FUSES 300000h)
« Respuesta #2 en: 10 de Mayo de 2006, 23:47:32 »
Mauricio

 gracias por tu interez

 El Pic que uso es el 18f4525.

 Mira lo que ocurre es que estoy trabajando en un codigo residente.
El CCS  dispone de las funciones:

Erase_program_memory(int32 direccion)    (borra  64 bytes)
write_program_eeprom(int32 direccion,int16 DATA)
int32 read_program_eeprom(int32 direccion))

las cuales permiten acceder  la memoria de programa que es del tipo Flash .

El problema es que al final tengo seteado los fuses que seteo en el codigo residente.

es decir, al leer el HEX a cargar, al final me encuentro con la siguiente direccion extendida

:02 0000 04 0030 CA   =>0x300000

y despue sigue la linea de data

:0E 0000 00 0006 110E 0100 8000 0FC0 0FE0 0F40 3F

en negrilla aparecen los valores que deben estar en los registros.

Estos valores son los que no logro modificar.
debe haber alguna forma de accederlos a bajo nivel,
la Flash de este pic es de 48Kbytes, desde 0 a BFFFh y es aqui donde se escribe el codigo.
sin embargo estos fuses se escriben desde una direccion mas alta 300000h
en donde se encuentran los bits de configuracion.