TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: sayamvo en 18 de Octubre de 2011, 11:59:15
-
Hola buenos dias a todos, he estado leyendo el foro, me parece un muy buen aporte al conocimiento, soy nuevo en el foro, y nuevo en el uso del pic 18f2550, estoy usando el compilador mplab c18 v_3.40 he revisdado la configuracion de acuerdo a lo indicado el el foro, pero sigo teniendo problema , el codigo usado es: ( tengo ya grabado en el pic el bootloader)
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include <18F2550.h>
#include <usb_cdc.h>
#define LOADER_END 0x7FF
#define LOADER_SIZE 0x6FF
#build(reset=LOADER_END+1, interrupt=LOADER_END+9)
#org 0, LOADER_END {} // nothing will replace the bootloader memory space
// END OF bootloader definition
no se que otra cosa revisar, yo veo que en el las librerias aparece es p18f25j50 en los linker esta es 18f25j50_g.lkr. es eso correcto,
mejor reinstalo el mplab c18??
les agradezco.
sayamvo
-
has probado a poner p18f2550.h ??
-
Lo primero es #include <18F2550.h> y después todo lo demás ;-)
-
Lo primero es #include <18F2550.h> y después todo lo demás ;-)
lo decia porque el C18 la libreria del pic empieza con 'p', ejemplo: p18f4550.h y el lo ha puesto sin la 'p', es logico el error unable to locate.. xD
-
Lo primero es #include <18F2550.h> y después todo lo demás ;-)
lo decia porque el C18 la libreria del pic empieza con 'p', ejemplo: p18f4550.h y el lo ha puesto sin la 'p', es logico el error unable to locate.. xD
Pero es CCS ;-) O sea, esa sintaxis es CCS :D Ya quede :z) Como que no va a funcionar nunca :mrgreen:
-
Les agradezco mucho, cambie las lineas a la fila 1 y 2,
#include <p18F2550.h>
#include <usb_cdc.h>
tambiem cambie <p18f2550.h> , al compilarlo me queda el error
c:2:Error [1027] unable to locate 'usb_cdc.h'
el seguire revisando.
este es un gran foro, adelante.
-
yo veo MPLAB C18 xD no me pare a mirar si era CCS unicamente por el titulo sobra xD
-
Yo no se que está haciendo :D Toda esa sintaxis es de CCS y quiere compilar en C18 :shock:
Para C18:
Cursillo en C18 para PICS DESDE CERO (http://www.todopic.com.ar/foros/index.php?topic=17017.0)
Tutorial C18 (http://www.todopic.com.ar/foros/index.php?topic=31611.0)
Saludos!
-
Ya veo que en algun momento le compila y ahi morimos todos !! :D :D :D
-
Buen dia, entiendo que no he leido lo suficiente, cada ves estoy entendiendo mas, na habia visto la diferencia en programar en ccs o en c18, estoy usando el bootloader en el pic 18f2550, que codigo debo usar para especificar la nueva direccion de inicio del programa para proteger los datos del boot loader, en ccs seria
#define LOADER_END 0x7FF
#define LOADER_SIZE 0x6FF
#build(reset=LOADER_END+1, interrupt=LOADER_END+9)
#org 0, LOADER_END {} // nothing will replace the bootloader memory space
// END OF bootloader definition
como seria en c18?
el delay hay que definirlo? o viene en las librerias del c18?
les agradezco.
sayamvo
-
en c18 tendrias que buscar el archivo .lkr que corresponde a tu pic, te recomiendo que lo copies a la carpeta de tu proyecto, y lo añadas al proyecto.
C:\MCC18\bin\LKR
En ese archivo tienes que poner el inicio del codigo y el fin antes de tu bootloader, y al final el bootloader, algo asi:
CODEPAGE NAME=page START=0x0 END=0xEFFF
CODEPAGE NAME=bloader START=0xF000 END=0xFFF0 PROTECTED
luego en el .c debes poner #pragma code bloader=0xF000
todo esto poniendo tus direcciones
-
Bootloader HID en C18 (http://www.micros-designs.com.ar/c18-bootloader-usb-hid/)
-
Gracias Zuky por las respuestas, cada vez me salen mas preguntas:
yo tengo cargado el bootloader del neoteo para pic18f2550.
Debo cambiarlo para el c18? el codigo del remapeo de los vectores de reset e interrupciones del microcontrolador se inserta a mi codigo o us un archivo nuevo ( linker ? )
como utilizar un *lkr modificado.
:oops:
-
yo tengo cargado el bootloader del neoteo para pic18f2550.
Y exactamente cual es? O sea, en base a cual está? Neoteo es una página de noticias/artículos varios ;-)
el codigo del remapeo de los vectores de reset e interrupciones del microcontrolador se inserta a mi codigo o us un archivo nuevo ( linker ? )
Se inserta en el código, podes bajarte el ejemplo!!! Allí se ve claramente.
como utilizar un *lkr modificado.
Lo agregas al proyecto :undecided:
-
Suky, el bootloader es el mismo suministrado por Michochip para el pic 18f4550, al que se le modifico el pin del switch por el RC2, y los led en RC0 y 1.
no se como modificar y utilizar un *.lkr modificado.....
-
en el arbol de archivos del proyecto te vas a linker script, click derecho, add files
buscas el tuyo, como ya te dije ponerlo en la carpeta del proyecto para no modificar el original.
2 clicks y lo editas como si de un texto se tratase
-
Ok gracias, modifique el lkr para el rm18f2550_HID bootload, lo anexe y pude compilar.
cargo el archivo.HEX desde el PC, pero el micro no hace lo que se supone, prender un led
debo seguir mirando a ver que puede estar mal, pero ya puedo compilar y no escribo sobre las direcciones reservadas para el bootloader.
.......
-
Compilé el archivo y no presenta errores, lo estoy simulando en el mplab ide, y hace lo que se programo, cargo el archivo main.c, le modifico p18f2550.h, lo compilo y al simularlo hace lo programado, pero al pasarlo al micro no hace nada, los led permanecen apagados.
el bootloader funciona bien, el programa HID bootloader funciona bien.
que debo revisar? que podra estar mal? tendra problema el pic??
-
Exactamente que ejemplo estas compilando? Porque en un principio hay una mezcla entre CCS y C18 :z)
-
ok Suky, ya corregi el error que presentaba por tener codigo equibocado, solo tengo ahora codigo en c18, el codigo que estoy compilando es el que Ud. coloca en el foro con el bootloader para el 18f4550, osea el main.c, lo grabo en el pic pero no parece pasar nada, pero si sale el mensdaje de que fue grabado.
:oops:
cuando uso el bootloader las lineas
#pragma config PLLDIV = 5 // (20 MHz crystal on PICDEM FS USB board)
#pragma config CPUDIV = OSC1_PLL2 MAIN.C
#pragma config USBDIV = 2 // Clock source from 96MHz PLL/2
#pragma config FOSC = HSPLL_HS
son iguales a cuando no se usa Bootloader?, en los ejemplos dados en el
#pragma config PLLDIV = 5 // (20 MHz crystal on PICDEM FS USB board)
#pragma config CPUDIV = OSC1_PLL2 TUTORIAL
#pragma config FOSC = XT-XT
QUE DEBERIA COLOCAR EN MI CODIGO??
-
ok Suky, ya corregi el error que presentaba por tener codigo equibocado, solo tengo ahora codigo en c18, el codigo que estoy compilando es el que Ud. coloca en el foro con el bootloader para el 18f4550, osea el main.c, lo grabo en el pic pero no parece pasar nada, pero si sale el mensdaje de que fue grabado.
:oops:
Adjunta el proyecto para revisarlo ;-)
Saludos!
-
ok Suky, ya corregi el error que presentaba por tener codigo equibocado, solo tengo ahora codigo en c18, el codigo que estoy compilando es el que Ud. coloca en el foro con el bootloader para el 18f4550, osea el main.c, lo grabo en el pic pero no parece pasar nada, pero si sale el mensdaje de que fue grabado.
:oops:
cuando uso el bootloader las lineas
#pragma config PLLDIV = 5 // (20 MHz crystal on PICDEM FS USB board)
#pragma config CPUDIV = OSC1_PLL2 MAIN.C
#pragma config USBDIV = 2 // Clock source from 96MHz PLL/2
#pragma config FOSC = HSPLL_HS
son iguales a cuando no se usa Bootloader?, en los ejemplos dados en el
#pragma config PLLDIV = 5 // (20 MHz crystal on PICDEM FS USB board)
#pragma config CPUDIV = OSC1_PLL2 TUTORIAL
#pragma config FOSC = XT-XT
QUE DEBERIA COLOCAR EN MI CODIGO??
***** pruebo el codigo sin el bootloader grabando el archivo . hex en el pic, el programa se ejecuta normalmente de acurdo a lo programado.
RESUMIENDO: Usando windows 7 64 bit, compilador: Mlab C18, PIC18f2550, programador pickit2
sin usar bootloader: se graba con el pickit2 el programa main.h, al resetear el pic, este efectua lo gragramado enciende led..
con Bootloader: se graba el bootloader para pic18f2550, usando el pickit, al oprimir el switch, los led parpadean ok. al activar el HIDboot, el dispositivo UBS es reconocido, se puede im´portar un archivo .hex, se pued grabar el archivo, ( modificado para proteger la memoria del pic), al dar reset al pic, este no parece hacer nada, he leido en el foro sobre este problema pero no pude determinar si el problema fue resuelto para windows 7 64 bit,
les agradezco su atencion y comentarios, cordial saludo.
-
Hola a todos buen dia, solucionados algunas dudas y errores que tenia me surgen otras mas:
estoy usando windows 7 64 bit, compilador mplab C18, pic18f2550, HIDLoader, pickit2; linker modificado para pic18f2550,
Sin el Bootloader grabo un archivo en el pic y este ejecuta lo programado; grabo el bootloader y compilo em programa usando la proteccion de memoria del bootloader, con el HIDloader grabo el pic, pero al dar reset, el pic parece no hacer nada; si doy reset manteniendo activado el switch del boot, los led RC0 y RC1 comienzan a parpadear y el HIDloader reconoce el pic, debo tener algun error en la programacion. adjunto el codigo del ejemplo usado. es un ejemplo simple, pero sulucionar este inconveniente me permite avanzar en nuevos retos.
#ifndef MAIN_C
#define MAIN_C
#include <p18F2550.h>
#include <delays.h>
#pragma config PLLDIV = 5 // (20 MHz crystal on PICDEM FS USB board)
#pragma config CPUDIV = OSC1_PLL2
#pragma config USBDIV = 2 // Clock source from 96MHz PLL/2
#pragma config FOSC = HSPLL_HS
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config BOR = ON
#pragma config BORV = 3
#pragma config VREGEN = ON //USB Voltage Regulator
#pragma config WDT = OFF
#pragma config WDTPS = 32768
#pragma config MCLRE = ON
#pragma config LPT1OSC = OFF
#pragma config PBADEN = OFF
#pragma config STVREN = ON
#pragma config LVP = OFF
#pragma config XINST = OFF
#pragma config CP0 = OFF
#pragma config CP1 = OFF
#pragma config CPB = OFF
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
#pragma config WRTB = ON
#pragma config WRTC = OFF
//.......................................................
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
#pragma config EBTRB = ON
#define REMAPPED_RESET_VECTOR_ADDRESS 0x1000
#define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS 0x1008
#define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS 0x1018
void YourHighPriorityISRCode();
void YourLowPriorityISRCode();
extern void _startup (void); // See c018i.c in your C18 compiler dir
#pragma code REMAPPED_RESET_VECTOR = REMAPPED_RESET_VECTOR_ADDRESS
void _reset (void){
_asm goto _startup _endasm
}
#pragma code REMAPPED_HIGH_INTERRUPT_VECTOR = REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS
void Remapped_High_ISR (void) {
_asm goto YourHighPriorityISRCode _endasm
}
#pragma code REMAPPED_LOW_INTERRUPT_VECTOR = REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS
void Remapped_Low_ISR (void){
_asm goto YourLowPriorityISRCode _endasm
}
#pragma code HIGH_INTERRUPT_VECTOR = 0x08
void High_ISR (void) {
_asm goto REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS _endasm
}
#pragma code LOW_INTERRUPT_VECTOR = 0x18
void Low_ISR (void){
_asm goto REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS _endasm
}
#pragma code
#pragma interrupt YourHighPriorityISRCode
void YourHighPriorityISRCode() {
} //This return will be a "retfie fast", since this is in a #pragma interrupt section
#pragma interruptlow YourLowPriorityISRCode
void YourLowPriorityISRCode() {
} //This return will be a "retfie", since this is in a #pragma interruptlow section
/** DECLARATIONS ***************************************************/
#pragma code
unsigned char K;
void main(void){
TRISA=0xF0;
LATA=0;
TRISB=0xF0;
LATB=0;
TRISC=0xF0;
LATC=0;
while(1){
LATCbits.LATC0=~PORTCbits.RC0;
for(K=1; K<10;K++){
Delay10KTCYx(250);
LATAbits.LATA5=~PORTAbits.RA5;
LATBbits.LATB3=~PORTBbits.RB3;
LATCbits.LATC1=~PORTCbits.RC1;
}
}
}