|
|
View previous topic :: View next topic |
Author |
Message |
merics
Joined: 07 Jul 2013 Posts: 11
|
Bluetooth with 18f2550 communication |
Posted: Sun Jul 07, 2013 6:28 am |
|
|
Hello my friends,
I want to send my code to 18f2550 by bluetooth with bootloader. Is it possible? I do not know which hex file I initially send to 18f2550. I use ccs 4.138 and securecrt to send my code.
Thanks in advance |
|
|
oxo
Joined: 13 Nov 2012 Posts: 219 Location: France
|
|
Posted: Sun Jul 07, 2013 8:05 am |
|
|
Sounds like another student project.
What Bluetooth hardware do you have connected to the pic? |
|
|
merics
Joined: 07 Jul 2013 Posts: 11
|
|
|
oxo
Joined: 13 Nov 2012 Posts: 219 Location: France
|
|
Posted: Mon Jul 08, 2013 1:36 am |
|
|
Looks quite simple. The BT module you have is transparent, and exactly like a UART.
I would get the bootloading working with a direct wired connection first, then introduce the BT interface. |
|
|
merics
Joined: 07 Jul 2013 Posts: 11
|
|
Posted: Mon Jul 08, 2013 2:10 am |
|
|
oxo wrote: | Looks quite simple. The BT module you have is transparent, and exactly like a UART.
I would get the bootloading working with a direct wired connection first, then introduce the BT interface. |
I made the connection between bluetooth and 18f2550. (RX and TX connection). A direct wired connection you said is this RX - TX connection? |
|
|
oxo
Joined: 13 Nov 2012 Posts: 219 Location: France
|
|
Posted: Mon Jul 08, 2013 3:03 am |
|
|
merics wrote: | oxo wrote: | Looks quite simple. The BT module you have is transparent, and exactly like a UART.
I would get the bootloading working with a direct wired connection first, then introduce the BT interface. |
I made the connection between bluetooth and 18f2550. (RX and TX connection). A direct wired connection you said is this RX - TX connection? |
yes,
rx-tx
tx-rx |
|
|
merics
Joined: 07 Jul 2013 Posts: 11
|
|
Posted: Mon Jul 08, 2013 3:56 am |
|
|
oxo wrote: |
yes,
rx-tx
tx-rx |
I did exactly like that. Then I tried tiny bootloader in order to work regularly.
But it did not work. In case this works , then I want to do the same for securecrt.
On the other hand , what should I do next? |
|
|
oxo
Joined: 13 Nov 2012 Posts: 219 Location: France
|
|
Posted: Mon Jul 08, 2013 4:23 am |
|
|
merics wrote: | oxo wrote: |
yes,
rx-tx
tx-rx |
I did exactly like that. Then I tried tiny bootloader in order to work regularly.
But it did not work. In case this works , then I want to do the same for securecrt.
On the other hand , what should I do next? |
Oh come on.. what everybody knows! Investigate why it doesn't work! Does data come out of the PC and arrive in the PIC.. etc |
|
|
merics
Joined: 07 Jul 2013 Posts: 11
|
|
Posted: Mon Jul 08, 2013 6:16 am |
|
|
Code: |
#include <serially_led_trial.h>
char data;
void main()
{
setup_timer_3(T3_DISABLED | T3_DIV_BY_1);
while(TRUE)
{
//TODO: User Code
data=getc();
printf("\n\r ++ write a for a0\n\r");
output_high(pin_a1);
delay_ms(100);
output_low(pin_a1);
delay_ms(100);
if (data=='a')
{
output_high(pin_a0);
delay_ms(600);
output_high(pin_a0);
delay_ms(300);
printf("\n\r ++ a0 toggle\n\r");
delay_ms(100);
}
}
}
|
I tried this code but pic does not respond.
Bluetooth module's led toggle if it is idle. When I make connection between pc and bluetooth module, the led is on continuosly and the com6 is seen on pc screen but there is no response.[/code] |
|
|
ezflyr
Joined: 25 Oct 2010 Posts: 1019 Location: Tewksbury, MA
|
|
Posted: Mon Jul 08, 2013 6:32 am |
|
|
merics,
Basic project development/troubleshooting. Start simple, and build on your early success's to achieve your final result.
At the present time you haven't even shown that your PIC is actually running! The first statement in your while loop is a 'getc()', and if no data is
received, your code will hang there, and appear to be dead....
Start by connecting an LED to an I/O pin of the PIC (with a suitable current limiting resistor), and then write a small loop that toggles this LED once
every second. Does the LED flash, and does it flash at the proper rate??
Next, connect your PIC to the PC thru a MAX232 TTL-to-RS232 converter IC. Write a small loop that continuously reads data from the PIC UART, and
echoes it back to the PC. Does that work properly?
Finally, after all of the above is working, add the bluetooth module, and repeat step 2 above.
My guess is that your PIC is not running as you intend. The 'LED flash' test will tell you this very quickly. In the meantime, post your #fuses,
and your #use delay statement......
John |
|
|
merics
Joined: 07 Jul 2013 Posts: 11
|
|
Posted: Mon Jul 08, 2013 7:02 am |
|
|
ezflyr wrote: | merics,
Basic project development/troubleshooting. Start simple, and build on your early success's to achieve your final result.
At the present time you haven't even shown that your PIC is actually running! The first statement in your while loop is a 'getc()', and if no data is
received, your code will hang there, and appear to be dead....
|
I tried a lot of thing like you said.
Quote: |
Start by connecting an LED to an I/O pin of the PIC (with a suitable current limiting resistor), and then write a small loop that toggles this LED once
every second. Does the LED flash, and does it flash at the proper rate??
|
It works and Leds flash properly, I tried it. I found the problem that the program is stuck on first printf function
Quote: |
Next, connect your PIC to the PC thru a MAX232 TTL-to-RS232 converter IC. Write a small loop that continuously reads data from the PIC UART, and
echoes it back to the PC. Does that work properly?
|
I have not got these equipment. I directly work on bluetooth module. If I find no way ' I will try this.
Quote: |
Finally, after all of the above is working, add the bluetooth module, and repeat step 2 above.
My guess is that your PIC is not running as you intend. The 'LED flash' test will tell you this very quickly. In the meantime, post your #fuses,
and your #use delay statement......
John |
Up to now my words could be out of topic. I will share my experience regularly.Here is my fuses.
Code: |
#include <18F2550.h>
#device adc=16
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES PLL5 //Divide By 5(20MHz oscillator input)
#FUSES CPUDIV1 //No System Clock Postscaler
#FUSES HSPLL //High Speed Crystal/Resonator with PLL enabled
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#use delay(clock=48000000)
#use FIXED_IO( A_outputs=PIN_A1,PIN_A0 )
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PC)
|
|
|
|
merics
Joined: 07 Jul 2013 Posts: 11
|
|
Posted: Mon Jul 08, 2013 8:09 am |
|
|
Code: |
#include <serially_led_trial.h>
char data;
void main()
{
setup_timer_3(T3_DISABLED | T3_DIV_BY_1);
output_high(pin_a1);
delay_ms(1000);
output_low(pin_a1);
delay_ms(1000);
printf("led toggle\r\n");
while(TRUE)
{
data=getc();
if(data=='a')
{
output_high(pin_a0);
delay_ms(1000);
output_low(pin_a0);
delay_ms(1000);
output_high(pin_a0);
delay_ms(1000);
printf("another led toggle\r\n");
}
}
}
|
The code is working.
So, how can I send my code to pic 18f2550 over bluetooth and use the bluetooth connection as a bootloader?
https://copy.com/rA4bjVBD7jUvLzKV |
|
|
ezflyr
Joined: 25 Oct 2010 Posts: 1019 Location: Tewksbury, MA
|
|
Posted: Mon Jul 08, 2013 9:26 am |
|
|
merics,
A 'serial bootloader' is where you will need to focus your efforts. As 'oxo' has already mentioned, and you mis-understood, you need to get a serial
bootloader working first without the bluetooth module, and then once it's working, introduce the module.
CCS provides a serial bootloader in the 'Examples' folder that works, and has pretty good setup documentation. I'd start there.
Generally, the bootloader is activated by a button press (for example), or by the reception of a 'special' character within a certain time frame, both at
power up. You'll need to work out these details.
John |
|
|
merics
Joined: 07 Jul 2013 Posts: 11
|
|
Posted: Tue Jul 09, 2013 3:02 am |
|
|
Quote: |
merics,
A 'serial bootloader' is where you will need to focus your efforts. As 'oxo' has already mentioned, and you mis-understood, you need to get a serial
bootloader working first without the bluetooth module, and then once it's working, introduce the module.
CCS provides a serial bootloader in the 'Examples' folder that works, and has pretty good setup documentation. I'd start there.
Generally, the bootloader is activated by a button press (for example), or by the reception of a 'special' character within a certain time frame, both at
power up. You'll need to work out these details.
John
|
John,
I worked on the usb bootloader previously ( for both 18f4550 and 18f2550). Generally the bootloader program is used by pin_b5 ,so I do it for my robot. And it works regularly. I want to use bluetooth because both I want to get rid of wired connection and I want to send code to 18f2550 and send some sensors data from 18f2550 to pc through bluetooth module.
I set that you said. But when I compile it, the program of the ex_bootloader shows file not found error.
Code: |
#elif defined(__PCH__)
#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP
#use delay(clock=48000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12
#endif
#define _bootloader
#include <bootloader.h>
#include <loader.c>
#if defined(__PCM__)
#org LOADER_END+1,LOADER_END+10
#elif defined(__PCH__)
#org LOADER_END+2,LOADER_END+20
#endif
void application(void) {
while(TRUE);
}
#if defined(__PCH__)
#org 0x40,0x7F
#else
#org 0x20,0x3F
#endif
void main(void) {
if(!input(PIN_B5))
{
load_program();
}
application();
}
#ORG default
#int_global
void isr(void) {
jump_to_isr(LOADER_END+5*(getenv("BITS_PER_INSTRUCTION")/8));
}
|
|
|
|
merics
Joined: 07 Jul 2013 Posts: 11
|
|
Posted: Tue Jul 09, 2013 5:53 am |
|
|
Finally I complied but it does not work. Where did I make a mistake?
The main code
Code: |
#include <serial_bootloader_trial.h>
#include <bootloader.h>
char data;
void main()
{
setup_timer_3(T3_DISABLED | T3_DIV_BY_1);
int i=0;
printf("\r\nApplication program version 1.00 \r\n");
output_high(pin_a1);
delay_ms(1000);
output_low(pin_a1);
delay_ms(1000);
printf("led toggle\r\n");
while(TRUE)
{
printf("%u ",++i);
data=getc();
if(data=='a')
{
output_high(pin_a0);
delay_ms(1000);
output_low(pin_a0);
delay_ms(1000);
output_high(pin_a0);
delay_ms(1000);
printf("another led toggle\r\n");
}
}
}
|
The bootloader code
Code: |
#if defined(__PCM__)
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12
#elif defined(__PCH__)
#include <18F2550.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES PLL5 //Divide By 5(20MHz oscillator input)
#FUSES CPUDIV1 //No System Clock Postscaler
#FUSES HSPLL //High Speed Crystal/Resonator with PLL enabled
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#use delay(clock=48000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PC)
#endif
#define _bootloader
#include <bootloader.h>
#include <loader.c>
#if defined(__PCM__)
#org LOADER_END+1,LOADER_END+10
#elif defined(__PCH__)
#org LOADER_END+2,LOADER_END+20
#endif
void application(void) {
while(TRUE);
}
#if defined(__PCH__)
#org 0x40,0x7F
#else
#org 0x20,0x3F
#endif
void main(void) {
if(!input(PIN_B5))
{
load_program();
}
application();
}
#ORG default
#int_global
void isr(void) {
jump_to_isr(LOADER_END+5*(getenv("BITS_PER_INSTRUCTION")/8));
}
|
|
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|