# So...I have my junebug....and Im totally lost

Status
Not open for further replies.

#### strokedmaro

##### New Member
I got my junebug today (really fast shipping by the way ) and I downloaded MPLAB IDE, PICkit 2, swordfish and a ton of other stuff...When first plugged in it flashed the LED's from left to right forever but I somehow "programmed" it to stop doing that while tripping down the cavernous menus in MPLAB. Ive looked everywhere for tutorials like: Get a junebug, download this and that...now open this and put this here...do this to program the PIC...now you should see this happening.

I thought this type of info would be included with a tutor. I need to get it to do something from A to Z so I at least get the order and process down. Then I can worry about making changes and testing. Ive looked at tutorials and read a ton of info but never having programmed anything Im totally lost. If there are any sites specifically for the junebug (I've searched but nothing comes up). Maybe a good start would be to help me get the original LED flashing code back on the PIC.

I know all you old hats get tired of the new guys but I need some help. THANKS!

#### blueroomelectronics

##### Well-Known Member
Well the LED flashing demo is in the back of the manual. There is a large 88 page MPLAB manual, and for quick Swordfish BASIC SE might be a good place to start (free SE version works great on the Junebug) There are lots of examples here too, just search for Junebug.
Also the PICkit2 demo board manuals are a good start but you'll have to modify the programs for the 18F part.
PS the Inchworm quick project poster might help, it applies to the Junebug too.

I'd be happy to help.

#### strokedmaro

##### New Member
Maybe I'm a little out of my league....I have the manuals and I know the demo is in the manual but I have no Idea with what program in what order it takes to get it back on the PIC. Before buying the junebug I read the student guide from Parallax called "whats a micro controller" and it was very informative. Thats the first time I started understand what was going on and it was broken down into easy steps with good explanations.

I guess I will keep reading but what would you suggest I start with? Tell me what to read first and I will start there.

#### August Treubig

##### Member
Programming 001

If you are totally new to programming, you have jumped into the deep end of the ocean, complete with sharks.

So, if that is so, climb out of the ocean and start in the beginners pool. As Bill says, begin with Swordfish Basic and work on blinking LEDs. Everyone in PICland, etc kinda starts there. Basic kinda takes care of lots of things for you. Pic assembler is kinda strange because of "bank switching, etc".

1) Write / Copy a simple Swordfish Basic program that turns on an LED and waits around for a second or so. Turn it off. Wait for a second or so, go back to the top. The specs for the 18F1320 can be helpful (once you have stared at it for a long time and understand what Bill hooked up to what.

2) The Pickit 2 software (obtained from MicroChip's web site) will allow you to take the .hex file and write it into the 18F1320 onboard the Junebug using the other part of the Junebug (the programmer)

3) The check box on the programmer on the right that says Vdd Pickit On will power the pic and start it running.

4) Led should blink, but mileage may vary depending on you program.

5) Begin pulling hair out when it all isn't exactly like it is supposed to be.

Yes, I have been programming a LONG time. But have only been doing PICs about 6 months.

#### futz

##### Active Member
August Treubig said:
Pic assembler is kinda strange because of "bank switching, etc"
There's no bank switching to worry about with the 18F1320 on the Junebug tutor. 18F's are much less "strange" than the 16F's.

#### blueroomelectronics

##### Well-Known Member
Then try Swordfish BASIC SE, it has everything you need to get your feet wet. I've got a small LED module written for the Junebugs tutor.
The very simple blink program
Code:
{
*****************************************************************************
*  Name    : BLINK_1.BAS                                                   *
*  Author  : William Richardson                                             *
*  Notice  : Copyright (c) 2008 blueroomelectronics                         *
*  Date    : 1/7/2008                                                       *
*  Version : 1.0                                                            *
*  Notes   :                                                                *
*          :                                                                *
*****************************************************************************
}
Device = 18F1320
Clock = 4               // 4MHz clock
Include "junebug.bas"
Dim Count As Byte
While True
For Count = 0 To 6
LED(Count)
DelayMS(300)        // delay in 1000s of a second
Next
Wend        // repeat forever
End

And the Junebug module
Code:
{
*****************************************************************************
*  Name    : JUNEBUG.BAS                                                    *
*  Author  : William Richardson                                             *
*  Notice  : Copyright (c) 2008 blueroomelectronics                         *
*  Date    : 2/1/2008                                                       *
*  Version : 0.92beta                                                            *
*  Notes   :                                                                *
*          :                                                                *
*****************************************************************************
}

Module Junebug
Device  = 18F1320
Public Sub LED(x As Byte)
Select x
Case 1      // LED 1
TRISA.7 = 1
High(PORTA.0)
Low (PORTA.6)
Case 2      // LED 2
TRISA.7 = 1
Low (PORTA.0)
High(PORTA.6)
Case 3      // LED 3
TRISA.0 = 1
High(PORTA.6)
Low (PORTA.7)
Case 4      // LED 4
TRISA.0 = 1
Low (PORTA.6)
High(PORTA.7)
Case 5      // LED 5
TRISA.6 = 1
Low (PORTA.0)
High(PORTA.7)
Case 6      // LED 6
TRISA.6 = 1
High(PORTA.0)
Low (PORTA.7)
Else          // All LEDs Off
TRISA.0 = 1
TRISA.6 = 1
TRISA.7 = 1
End Select
End Sub
Config OSC = INTIO2, WDT = OFF, LVP = OFF

OSCCON = $62 // 4 MHz clock #### August Treubig ##### Member Upon some review It appears that with a bit of work, you can get Swordfish integrated into MPLAB. This can make the writting of the program into the pic a bit simpler. (One stop shopping). Futz, everything about PIC assembler is weird. But then all my assembler (and there's tons of it is mostly on BIG iron). RISC stuff is better done in a "higher" language. #### blueroomelectronics ##### Well-Known Member Since Swordfish does not support the debugger and it has an excellent IDE... Here's what you need. The PK2CMD.EXE from Microchip (Swordfish programmer executeable) then enter /PPIC$target-device$/F$long-hex-filename$/M /R /H2 in the parameter window Last edited: #### futz ##### Active Member August Treubig said: Futz, everything about PIC assembler is weird. I have to somewhat agree. Their asm is a bit funky. But it's not SO terribly different from other assembly languages that I wasn't able to pick it up pretty quickly (coming from mostly Motorola assembly language background). RISC stuff is better done in a "higher" language. Not for me. I love assembler. #### 3v0 ##### Coop Build Coordinator Forum Supporter This a C18 Junebug program written by one of the students I tutor. I am not saying she started from scratch or wrote it without guidance. She does however understand what each line does. Not bad for 12. Create a procject with the the MCC18 compiler (free from microchip). This code will be your main.c, add the linker and header file then build, program and run. Also works with the debugger Code: // *** C18 Junebug 18F1320 LED // // THIS PROGRAM MAKE TWO LEDs WALK ACROSS THE JUNEBUG AND BACK // NOTE: Project requires a linker scrpt. // Add either 18f1320i.lkr (for debug) or 18f1320.lkr (no debug) to your project. // // BY RHIANNON #pragma config OSC = INTIO2, WDT = OFF, LVP = OFF, DEBUG = ON #include <p18f1320.h> #define byte unsigned short #define LED_ON_FOR 50 const byte valA[] = {0b00000001,0b01000000,0b01000000,0b10000000,0b10000000,0b00000001}; const byte dirA[] = {0b10111110,0b10111110,0b00111111,0b00111111,0b01111110,0b01111110}; void lightTwo(int first) { int onCount,blinky; for(onCount=0; onCount<LED_ON_FOR; onCount++) { for(blinky=first; blinky<(first+2); blinky++) { LATA=valA[blinky]; TRISA=dirA[blinky]; } } } void main(void) { int idx; for(idx=0;idx<5;idx++) { lightTwo(idx); } for(idx=3;idx>0;idx--) { lightTwo(idx); } } EDIT: To understand the program you need to study the charlie plexed leds on the junebug schematic. #### mvs sarma ##### Well-Known Member strokedmaro said: Maybe I'm a little out of my league....I have the manuals and I know the demo is in the manual but I have no Idea with what program in what order it takes to get it back on the PIC. Before buying the junebug I read the student guide from Parallax called "whats a micro controller" and it was very informative. Thats the first time I started understand what was going on and it was broken down into easy steps with good explanations. I guess I will keep reading but what would you suggest I start with? Tell me what to read first and I will start there. You are perfect in your starting by owning JUNEBUG. As you know, there is no shortcut to success. It is by hard work and practice and continued writing, you learn. hope to see your programs posted at the earliest.All the best and start earnestly and don't stop halfway round. #### blueroomelectronics ##### Well-Known Member 3v0 said: This a C18 Junebug program written by one of the students I tutor. I am not saying she started from scratch or wrote it without guidance. She does however understand what each line does. Not bad for 12. Tell her well done, I'm several times that age and I'm just starting out with C18. I may take a peek at C30 as I can't figure out MPASM30... #### 3v0 ##### Coop Build Coordinator Forum Supporter blueroomelectronics said: Tell her well done, I'm several times that age and I'm just starting out with C18. I may take a peek at C30 as I can't figure out MPASM30... WIll do that. She is great to work with. I showed her how to figure out the constants to light the first two LEDs and she figured out the other 4. It is amazing to me how much kids can absorb it you start with concepts they understand. The teaching thing limits the time I have to mess with other things I want to do. Playing with the 24 and 30 fall into that basket. that and doing SMD boards Maybe this summer. C30 may be easier to use then MCC18. #### strokedmaro ##### New Member Yay! blueroomelectronics said: Then try Swordfish BASIC SE, it has everything you need to get your feet wet. I've got a small LED module written for the Junebugs tutor. The very simple blink program Code: { ***************************************************************************** * Name : BLINK_1.BAS * * Author : William Richardson * * Notice : Copyright (c) 2008 blueroomelectronics * * : All Rights Reserved * * Date : 1/7/2008 * * Version : 1.0 * * Notes : * * : * ***************************************************************************** } Device = 18F1320 Clock = 4 // 4MHz clock Include "junebug.bas" Dim Count As Byte While True For Count = 0 To 6 LED(Count) DelayMS(300) // delay in 1000s of a second Next Wend // repeat forever End And the Junebug module Code: { ***************************************************************************** * Name : JUNEBUG.BAS * * Author : William Richardson * * Notice : Copyright (c) 2008 blueroomelectronics * * : All Rights Reserved * * Date : 2/1/2008 * * Version : 0.92beta * * Notes : * * : * ***************************************************************************** } Module Junebug Device = 18F1320 Public Sub LED(x As Byte) Select x Case 1 // LED 1 TRISA.7 = 1 High(PORTA.0) Low (PORTA.6) Case 2 // LED 2 TRISA.7 = 1 Low (PORTA.0) High(PORTA.6) Case 3 // LED 3 TRISA.0 = 1 High(PORTA.6) Low (PORTA.7) Case 4 // LED 4 TRISA.0 = 1 Low (PORTA.6) High(PORTA.7) Case 5 // LED 5 TRISA.6 = 1 Low (PORTA.0) High(PORTA.7) Case 6 // LED 6 TRISA.6 = 1 High(PORTA.0) Low (PORTA.7) Else // All LEDs Off TRISA.0 = 1 TRISA.6 = 1 TRISA.7 = 1 End Select End Sub Config OSC = INTIO2, WDT = OFF, LVP = OFF ADCON1 = %11110101 OSCCON =$62            // 4 MHz clock

I don't know how it works yet, but I was able to get it blinking the way it did before by copying and pasting what you've listed here! I guess you could say that this is my first success at programming a PIC! At least I know the order of things now. Thanks for re-sparking my interest!!!

EDIT: a little copying and pasting in swordfish and Ive been able to get the LED's to flash in any order! Now I'm having a little fun! I still don't understand the software behind it but I at least am able to get something working which helps tremendously!

blueroomelectronics: thank you...now to find/figure out how to incorporate the buttons! Than should help me understand a little more!

Last edited:

#### August Treubig

##### Member
Avoiding the Sharks

Well,

You have avoided the sharks and the deep dark holes on the first go round. Now you have a success and have a project saved that works. So you were able to:

1) get something to compile without errors. (copying it or not, sometimes that is a milestone).

2) Successfully program the PIC (Bill makes that fairly easy with the onboard 18F1320). But sometimes simple things can be challenging..

3) Ran the sample and watched the pretty blinking lights. (Nothing like being a success).

You have the idea behind the process down. Things like LCDs, and others can also make for fun.

Drive on, and ask as many questions as required.

#### blueroomelectronics

##### Well-Known Member
Switches usually require debouncing, but here's something to tide you over. It uses the Debug mode of MPLAB to work. You need to open a Watch window and select PORTB to see the 1's (switch open) change to 0 (closed/pressed)
Code:
;*** blackbox.asm demonstrates use of the debugger
;*** Junebug DIP switches 1,2,3 on all others off
;*** uses pushbuttons 1,2 and 3 (RB0, RB2 and RB5)
;*** a PORTB Watch window will update in Animate mode
list p=18F1320
include <p18F1320.inc>
CONFIG  OSC=INTIO2,WDT=OFF,LVP=OFF
org     0x00         ; reset vector
movlw   0x72        ;
movwf   OSCCON        ; 8MHz internal osc
setf    ADCON1        ; set all I/O to digital
bcf     INTCON2,RBPU    ; enable PORTB input pullups

#### blueroomelectronics

##### Well-Known Member
Nice coding as always Pommie.

I've been writing a reaction timer game for the Junebug, I'll post it here when done.
Press reset, wait random delay, LED lights up, you hit the button and the time is output on the serial port (UART tool handy for this)

May I include your code and credit to you in the JUNEBUG.BAS module.

PS what else should the module contain? The UART perhaps...

Last edited:

#### AtomSoft

##### Well-Known Member
Im not a advanced well nor intermediate programmer but i used to program in VB6 when it was highly popular. This is like a god send syntax is like almost the same (haven't been through it all). I made that module(junebug.bas) and put it my user library folder for future use. (wife ordered my Junebug off ebay (no offense - blame her) um.. Im not understanding the bas though...

Case 1 // LED 1
TRISA.7 = 1 // Can you comment these lines plz
High(PORTA.0) // Can you comment these lines plz
Low (PORTA.6) // Can you comment these lines plz

Wouldnt this only be usefull if LEDs are full on PORTA? ( i guess just usefull for junebug) What If I wanted to set RA0, RA3 and RA4 as outputs, and RA1 and RA2 as inputs? This would be my intent if programming a PIC and not using it on the junebug hence like a production pic. ready for the world outside the bug.

I would have to rewrite the bas? Basically how would i send a ON/OFF (high/low) to a pin/port without the bas ?

Would this work then ?
Code:
Device = 18F1320
Clock = 4

// alias to port pin...
Dim LEDA As PORTA.0
Dim LEDB As PORTA.1

// main program...
Low(LEDA)
Low(LEDB)

Repeat
Toggle (LEDA)
DelayMS (500)
Low(LEDA)

Toggle (LEDB)
DelayMS (500)
Low(LEDB)
Until false

Code:
Device = 18F1320
Clock = 4

// alias to port pin...
Dim LEDA As PORTA.0
Dim LEDB As PORTA.1

const intHigh = 2    // interrupt on INTCON bit:0 ? I think ? or any intcon with a HIGH

interrupt OnTimer(intHigh)    //Button is pressed on INTCON/PORTB:0 i think? or any intcon with a HIGH
Low(LEDA)

Toggle (LEDB)
DelayMS (1000)
Low(LEDB)
end interrupt

// main program...
Low(LEDA)
Low(LEDB)

Repeat
Toggle (LEDA)
DelayMS (500)
Low(LEDA)
Until false

Last edited:

#### Pommie

##### Well-Known Member
The high and low commands set the pins to output. To set the pins as you described you would do, TRISA=%00011001 - the bits that are 1 become inputs and the rest outputs.

If your wondering how the LEDs work with the above code, you should look at the circuit diagram of the Junebug on Bill's site and google Charlieplexing.

Mike.

Status
Not open for further replies.

Replies
4
Views
990
Replies
5
Views
886
Replies
15
Views
2K
Replies
5
Views
2K
Replies
5
Views
2K