CLC Controlled Train Crossing Display

 Objective

The Core Independent Peripherals within the latest PIC® 8-bit microcontrollers offer the opportunity to perform hardware functions without the CPU core running any code. This can be extremely useful for applications that need to perform applications without interruption from the main application. This simple example shows how to set up and use several Configurable Logic Cells (CLC) to produce a train crossing light. Two of the Curiosity boards LEDs (D4 and D7) are used to produce a flashing back and forth light display. The LEDs are controlled by a pair of CLC modules and a timer peripheral. To add function, the momentary switch S1 toggles between the train crossing flashing and a single LED light in the center (D6 LED), lit through a separate set of CLC modules and timer used to control the switch debounce. The main.c file contains no special application code, just a continuous while(1) loop.

figure1train.png

 Materials

Hardware Tools (Optional)

Tool About Purchase
Curiosity-50px.png
Curiosity
Development Board

Software Tools

Tool About Installers
Installation
Instructions
Windows Linux Mac OSX
MPLAB® X
Integrated Development Environment
swtool-28px.png
MPLAB® Code Configurator
Dynamic Code Generation
MPLAB® XC8
C Compiler

Exercise Files

File Download
Installation
Instructions
Windows Linux Mac OSX
Project and Source Files
Curiosity Board User Guide/Schematic

 Connection Diagram

The Curiosity board has four LEDs prewired to the I/O pins shown below. This project controls three of the four LEDs.

Hardware Function Pin Setting
IO_LED_D4 RA5 (2) Output
IO_LED_D5 RA1 (18) Output
IO_LED_D6 RA2 (17) Output
IO_LED_D7 RC5 (5) Output
figure1.png

The Curiosity board also has a momentary switch labeled S1 and is connected to the RC4 pin of the PIC16F1619 microcontroller. The switch will be used to toggle the flashing on and off, similar to the way that an approaching train triggers a real train crossing signal.

figure2train.jpg

 Procedure

1

Create a Project

Create a new project and select the PIC16F1619 along with the Curiosity Board and MPLAB® XC8 compiler. If this is your first time creating a project, click on the link below to expand the directions.

2

Launch MCC

Open the MPLAB Code Configurator under the Tools -> Embedded menu of MPLAB X IDE.

mcclaunch.png

3

System Setup

From Project resources choose System Module to open the System Setup window within MCC.

  • In the clock settings, make sure you select INTOSC
  • Select the system clock FOSC.
  • Set Internal Clock to 4MHz_HF setting.
  • The Curiosity Board uses a programmer/debugger on board (PKOB) and uses a Low Voltage Program method to program the MCU, therefore we must enable low voltage programming by checking the Low-voltage programming Enable box.
figure3train.png

4

Timer 2 Setup

Add the TMR2 peripheral to the project from the Device Resources area of MCC. To do that, scroll down to the Timer entry and expand the list by clicking on the arrow. Now double click-on the TMR2 entry to add it to the Project Resources list. Then click on the TMR2 to open the configuration setup screen.

figure4train.png
  1. Check the Enable Timer box
  2. Select Clock Source LFINTOSC,
  3. Select Postscaler 1:10
  4. Select Prescaler 1:32
  5. Set Timer period value to 1 second
  6. Set External Reset Source to CLC4OUT
  7. Set Control mode setting to Roll over pulse
  8. Set Start/Reset Option to Resets at TMR2_ers = 1
  9. Leave the Enable Timer Interrupt box unchecked.

5

Timer 0 Setup

Add the TMR0 peripheral to the project from the Device Resources area of MCC. To do that, scroll down to the Timer entry and expand the list by clicking on the arrow. Now double click-on the TMR0 entry to add it to the Project Resources list. Then click on the TMR0 to open the configuration setup screen.

  1. Check the Enable Prescaler box and set to 1:256
  2. Select Clock Source: FOSC/4
  3. Set Timer Period to: 32.768 ms
figure5train.png

6

CLC1-CLC4 Setup

Add the CLC1 - CLC4 peripherals to the project from the Device Resources area of MCC. To do that, scroll down to the CLC entry and expand the list by clicking on the arrow. Now double click-on the CLC1 through CLC4 one at a time to add them to the Project Resources list. Then click on the CLC to open the configuration setup screen.

CLC1

Make the changes shown to the CLC1 block diagram.

  1. Change the first input to t2_postscaled_out
  2. Change second input to LC4_out
  3. Connect the upper input to OR gate 1
  4. Connect the second input to OR gate 3
  5. Invert the output for OR gate 2
  6. Invert the output for OR gate 4
  7. Change the Mode to JK Flip Flop with R
figure6train.png

CLC2

Make the changes shown to the CLC2 block diagram.

  1. Change the first input to LC1_out
  2. Change second input to LC4_out
  3. Connect the upper input to OR gate 1
  4. Connect the second input to OR gate 3
  5. Invert the output for OR gate 1
  6. Invert the output for OR gate 2
  7. Invert the output for OR gate 3
  8. Invert the output for OR gate 4
  9. Change the Mode to 4-input AND
figure7train.png

CLC3

Make the changes shown to the CLC3 block diagram.

  1. Change the first input to T0_overflow
  2. Connect the upper input to OR gate 1
  3. Invert the output for OR gate 2
  4. Invert the output for OR gate 4
  5. Change the Mode to 1-input D flip flop with S and R
figure8train.png

CLC4

Make the changes shown to the CLC4 block diagram.

  1. Change the first input to L3_out
  2. Connect the upper input to OR gate 1
  3. Connect the second Inverted input to OR gate 3
  4. Change the Mode to JK Flip Flop with R
figure9train.png

7

Pin Manager Setup

  1. Click on RA5 lock in the CLC1OUT row to turn the lock green
  2. Click on RC5 lock in the CLC2OUT row to turn the lock green
  3. Click on RA2 lock in the CLC4OUT row to turn the lock green
figure10train.png

Pin Module Setup

Check the RA2 and RA5 Output Box and uncheck the WPU and Analog Boxes

figure11train.png

Uncheck the RC4 Output Box, WPU and Analog Boxes
Check the RA5 Output Box and uncheck the WPU and Analog Boxes

figure12train.png

8

Generate Driver Code

Click on the Generate button in the Project Resources area of the MCC screen to have the MCC create the drivers and a base main.c file for the project.

9

main.c

Since the project runs completely independent of the core, the generated main.c doesn't need any modification. The default while(1) loop will be the only code running.

    while (1)
    {
        // Add your application code
    }

/**
 End of File
*/

10

Build Project

Click on the Build Project Icon (the Hammer) to compile the code and you will see a BUILD SUCCESSFUL message in the output window of MPLAB X within several seconds of processing time.

Main_Build_Project.png
BUILD SUCCESSFUL (total time: 7s)

11

Make sure your Curiosity Board is connected to the USB port. Then click on the Make and Program Device icon. This will build the project again and launch the programmer built into the Curiosity Board. In the output window you should see a series of messages and when successful it will end with a Programming and Verify Successful message.

Main_Program_Target_Project.png

Output Window:

Connecting to MPLAB Starter Kit on Board...

Currently loaded firmware on Starter Kit on Board
Firmware Suite Version.....01.41.07
Firmware type..............Enhanced Midrange

Target detected
Device ID Revision = 2004

The following memory area(s) will be programmed:
program memory: start address = 0x0, end address = 0x7ff
configuration memory

Programming...
Programming/Verify complete

If it's the first time the programmer is connected to the board, the programming tool may need to download the proper operating firmware for the exact device. You may see a series of messages if this occurs. This should only happen once.

Downloading Firmware…
Downloading bootloader
Bootloader download complete
Programming download…
Downloading RS…
RS download complete
Programming download…
Downloading AP…
AP download complete
Programming download…
Firmware Suite Version…..01.34.11
Firmware type…………..Enhanced Midrange

 Results

The D4 and D7 LEDs will begin flashing back and forth like a train crossing. Press the S1 switch and that will stop and the D6 LED will light and stay lit until the S1 switch is pressed again. When its pressed the second time the D6 LED will go out and the D4 and D7 will begin flashing back and forth again.

figure8adc.jpg

 Conclusions

Setting up several CLCs along with the timers can take a little bit of time but the MCC makes generating the proper register setup for these Core Independent Peripherals as easy as clicking on the Generate button. Once the drivers are generated, programming the microcontroller is the only step left to have a train crossing application running on the Curiosity board. Additional code could be added later (typically to main.c) but it won't affect the operation of the train crossing as that will be running independently.

© 2024 Microchip Technology, Inc.
Notice: ARM and Cortex are the registered trademarks of ARM Limited in the EU and other countries.
Information contained on this site regarding device applications and the like is provided only for your convenience and may be superseded by updates. It is your responsibility to ensure that your application meets with your specifications. MICROCHIP MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED, WRITTEN OR ORAL, STATUTORY OR OTHERWISE, RELATED TO THE INFORMATION, INCLUDING BUT NOT LIMITED TO ITS CONDITION, QUALITY, PERFORMANCE, MERCHANTABILITY OR FITNESS FOR PURPOSE. Microchip disclaims all liability arising from this information and its use. Use of Microchip devices in life support and/or safety applications is entirely at the buyer's risk, and the buyer agrees to defend, indemnify and hold harmless Microchip from any and all damages, claims, suits, or expenses resulting from such use. No licenses are conveyed, implicitly or otherwise, under any Microchip intellectual property rights.