PDA

View Full Version : MMC/SD card initialization



INGREMCO
- 15th April 2016, 14:14
Hi all,

I am trying to communicate to a SD/MMC card. I have search all over the internet to find examples to get it to work, but it doesn't.
I have made my own PCB according to the schematic that micro engineering has provided. I have also already checked if the SPI is
active, and it is. But right after i call FSinit, i get an error (i read out the error according the example of micro engineering). The
output is as follows:
FAT_error = 6
SDC_status = 1
SDC_response = 255

This is de code for generating to general variables for the SD include:


SD_WE var PORTC.6 'SD card Write Protect
SD_WE_TRIS var TRISC.6 'SD card Write Protect direction
SDI var PORTC.4 'SPI data in
SDI_TRIS var TRISC.4 'SPI data in direction
SCL var PORTC.3 'SPI clock
SCL_TRIS var TRISC.3 'SPI clock direction
SD_CS var PORTA.5 'SD card Chip Select
SD_CS_TRIS var TRISA.5 'SD card chip select direction
SD_CD var PORTC.7 'SD card Detect
SD_CD_TRIS var TRISC.7 'SD card detect direction
SDO var PORTC.5 'SPI data out
SDO_TRIS Var TRISC.5 'SPI data out direction


and my own code in main:


gosub FSInit 'initialise the SD card
Serout2 PORTB.1, 84, ["Init: ", FAT_error, " ", SDC_status, " ", SDC_response, $d, $a]
gosub SD_error_check 'Check for errors on SD card
gosub FINDfirst 'Look for files on SD card
While(FAT_error = 0) 'Find next file on card
files_found = files_found + 1
Gosub FINDnext
Wend


Can someone give me a direction to search for. I have already wasted lots of time to confirm if
it is actually working (PIC) and I am know at the point of desperation (almost :) ).

I'm waiting for that good old little segment that you always forget somehow ;(.

kind regards,

Remco

Demon
- 15th April 2016, 23:34
' This section defines a specific short (8.3) filename
' Note that spaces are use in empty elements and must be upper case for Windows
FAT_FileName[0] = "T"
FAT_FileName[1] = "E"
FAT_FileName[2] = "S"
FAT_FileName[3] = "T"
FAT_FileName[4] = "1"
FAT_FileName[5] = " "
FAT_FileName[6] = " "
FAT_FileName[7] = " "
FAT_FileName[8] = "T"
FAT_FileName[9] = "X"
FAT_FileName[10] = "T"

This is important.

Robert

Demon
- 16th April 2016, 00:00
Kept on going through the pages of threads and found this one:
http://www.picbasic.co.uk/forum/showthread.php?t=10397&highlight=sd+card

They point to MeLabs samples (that we probably already have in PBP):
http://melabs.com/samples/PBP-mixed/index.htm

(scroll down to sdfs3.pbp)

It's the same ReadMe, but it has an earlier date on at least two of the files at a quick glance.

I'd use that one. It has the truckload of pins like you are using, :) so it's possible it'll suit your needs.

Nice schematic too.

Robert


EDIT: And after going through the files a bit, this is where I notice that this is exactly where you got your code from.

Demon
- 16th April 2016, 00:13
Did you notice this part?


The included PICBASIC PRO code requires PBP version 2.50 or later. It uses
the PIC18 long libraries that are part of that version of the compiler. This
also means the files only work on PIC18 parts. Be sure to specify the long
version of the compiler, PBPL, when compiling programs using these files.

Demon
- 16th April 2016, 00:21
Did you go through the little test program?


' Name : sdfs3.pbp
' Compiler : PICBASIC PRO Compiler 2.6 (PBPL only)
' Assembler : MPASM
' Target PIC : PIC16F4550
' Hardware : Schematic available in http://melabs.com/resources/samples/pbp/sdfs3.zip
' Oscillator : 20MHz
' Keywords : SD Card, SD/MMC, FAT16
' Description : 10/02/08 - PICBASIC PRO 2.50L test program to talk to FAT16
' formatted MMC/SD cards with PIC18F4550. This is only a test program that
' is part of a larger project. The complete fileset with schematic, includes,
' and details can be found at download:
' http://melabs.com/resources/samples/pbp/sdfs3.zip


Define OSC 20 ' 20 MHz oscillator

' Alias PIC pins and registers for SD/MMC card
SD_WE Var PORTA.4 ' SD card write protect
SD_WE_TRIS Var TRISA.4 ' SD card write protect direction
SDI Var PORTB.0 ' SPI data in
SDI_TRIS Var TRISB.0 ' SPI data in direction
SCL Var PORTB.1 ' SPI clock
SCL_TRIS Var TRISB.1 ' SPI clock direction
SD_CS Var PORTB.3 ' SD card chip select
SD_CS_TRIS Var TRISB.3 ' SD card chip select direction
SD_CD Var PORTB.4 ' SD card detect
SD_CD_TRIS Var TRISB.4 ' SD card detect direction
SDO Var PORTC.7 ' SPI data out
SDO_TRIS Var TRISC.7 ' SPI data out direction


' Include the SD/MMC subroutines (found in http://melabs.com/resources/samples/pbp/sdfs3.zip)
Include "SDFS.PBP"
SDC_UseHardSPI = TRUE ' Use hardware SSP port for SPI.

ADCON1 = 15 ' All I/O pins digital
Pause 100

' FSInit initializes the card and reads all the preliminary information from it
Gosub FSInit
Serout2 PORTC.6, 84, ["Init: ", Dec FAT_error, " ", Dec SDC_status, " ", Dec SDC_response, $d, $a]
If (FAT_error != 0) Then Stop

' Display card directory
Gosub FINDfirst ' Find first file on card
While (FAT_error = 0)
Serout2 PORTC.6, 84, [Str FAT_FileName\11, $d, $a]
Gosub FINDnext ' Find next file on card
Wend

' This section defines a specific short (8.3) filename
' Note that spaces are use in empty elements and must be upper case for Windows
FAT_FileName[0] = "T"
FAT_FileName[1] = "E"
FAT_FileName[2] = "S"
FAT_FileName[3] = "T"
FAT_FileName[4] = "1"
FAT_FileName[5] = " "
FAT_FileName[6] = " "
FAT_FileName[7] = " "
FAT_FileName[8] = "T"
FAT_FileName[9] = "X"
FAT_FileName[10] = "T"

' Set file time to 8:30:10 and date to 1/1/2008
FAT_seconds = 5
FAT_minutes = 30
FAT_hours = 8
FAT_day = 1
FAT_month = 1
FAT_year = 28

' Open a file for write
FAT_mode = "w" ' Write mode
Gosub FSfopen ' Open file pointed to by Byte array FAT_FileName
Serout2 PORTC.6, 84, ["Open for write: ", Dec FAT_error, $d, $a]
If (FAT_error != 0) Then Stop

' Write to file
FAT_src[0] = "A"
FAT_src[1] = "B"
FAT_src[2] = "C"
FAT_count = 3
Gosub FSfwrite
Serout2 PORTC.6, 84, [ "Write ", Dec FAT_error, $d, $a]
If (FAT_error != 0) Then Stop

' Close file
Gosub FSfclose
Serout2 PORTC.6, 84, [ "Close ", Dec FAT_error, $d, $a]
If (FAT_error != 0) Then Stop

' Open a file for read
FAT_mode = "r" ' Read mode
Gosub FSfopen ' Open file pointed to by Byte array FAT_FileName
Serout2 PORTC.6, 84, ["Open: ", Dec FAT_error, $d, $a]
If (FAT_error != 0) Then Stop

' Read and display the whole file
FAT_count = 1 ' Read 1 byte to buffer at a time
Gosub FSfread
While (FAT_error = 0)
Serout2 PORTC.6, 84, [FAT_dest[0]]
FAT_count = 1 ' Read 1 byte to buffer at a time
Gosub FSfread
Wend
Serout2 PORTC.6, 84, [ "Read: ", Dec FAT_error, $d, $a]

' Delete a file
' Gosub FSremove ' Delete file pointed to by Byte array FAT_FileName
' Serout2 PORTC.6, 84, ["Remove: ", Dec FAT_error, $d, $a]
' If (FAT_error != 0) Then Stop

' Rename a file
' FAT_FileName2 is new name
' FAT_FileName2[0] = "T"
' FAT_FileName2[1] = "E"
' FAT_FileName2[2] = "S"
' FAT_FileName2[3] = "T"
' FAT_FileName2[4] = "2"
' FAT_FileName2[5] = " "
' FAT_FileName2[6] = " "
' FAT_FileName2[7] = " "
' FAT_FileName2[8] = "T"
' FAT_FileName2[9] = "X"
' FAT_FileName2[10] = "T"
' Gosub FSrename ' Rename file pointed to by Byte array FAT_FileName
' Serout2 PORTC.6, 84, ["Rename: ", Dec FAT_error, $d, $a]
' If (FAT_error != 0) Then Stop

End

And now I notice you copied from this program, yeeesh, I'm great help tonight. :D

Dumb question, have you tried using the sample test program AS IS? (correcting pins and CONFIGs of course)

Robert


EDIT: The Target PIC must be a typo in the comments:

' Target PIC : PIC16F4550

The Description is most likely correct:

' Target PIC : PIC18F4550

mackrackit
- 16th April 2016, 20:17
Post your whole code. State the parts you are using and how they are connected. Verify the SD card is good, 2 gb or less and formatted FAT16.

Do you have this line near the top of your code ?

SDC_UseHardSPI = FALSE ' Use hardware SSP port for SPI.

Demon
- 17th April 2016, 12:51
CE_GOOD Con 0 ' No error
CE_ERASE_FAIL Con 1 ' An erase failed
CE_NOT_PRESENT Con 2 ' No device was present
CE_NOT_FORMATTED Con 3 ' The disk is of an unsupported format
CE_BAD_PARTITION Con 4 ' The boot record is bad
CE_UNSUPPORTED_FS Con 5 ' The file system type is unsupported
CE_INIT_ERROR Con 6 ' An initialization error has occured
CE_NOT_INIT Con 7 ' An operation was performed on an uninitialized device
CE_BAD_SECTOR_READ Con 8 ' A bad read of a sector occured
CE_WRITE_ERROR Con 9 ' Could not write to a sector
CE_INVALID_CLUSTER Con 10 ' Invalid cluster value > maxcls
CE_FILE_NOT_FOUND Con 11 ' Could not find the file on the device
CE_DIR_NOT_FOUND Con 12 ' Could not find the directory
CE_BAD_FILE Con 13 ' File is corrupted
CE_DONE Con 14 ' No more files in this directory
CE_COULD_NOT_GET_CLUSTER Con 15 ' Could not load/allocate next cluster in file
CE_FILENAME_2_LONG Con 16 ' A specified file name is too long to use
CE_FILENAME_EXISTS Con 17 ' A specified filename already exists on the device
CE_INVALID_FILENAME Con 18 ' Invalid file name
CE_DELETE_DIR Con 19 ' The user tried to delete a directory with FSremove
CE_DIR_FULL Con 20 ' All root dir entry are taken
CE_DISK_FULL Con 21 ' All clusters in partition are taken
CE_DIR_NOT_EMPTY Con 22 ' This directory is not empty yet, remove files b4 deleting
CE_NONSUPPORTED_SIZE Con 23 ' The disk is too big to format as FAT16
CE_WRITE_PROTECTED Con 24 ' Card is write protected
CE_FILENOTOPENED Con 25 ' File not opened for the write
CE_SEEK_ERROR Con 26 ' File location could not be changed successfully
CE_BADCACHEREAD Con 27 ' Bad cache read
CE_CARDFAT32 Con 28 ' FAT32 - card not supported
CE_READONLY Con 29 ' The file is read-only
CE_CARDFAT12 Con 30 ' FAT12 - card not supported
CE_WRITEONLY Con 31 ' The file is write-only
CE_INVALID_ARGUMENT Con 32 ' Invalid argument
CE_FAT_EOF Con 60 ' Attempt to read beyond the FAT's EOF
CE_EOF Con 61 ' End of file reached


sdcValid Con 0
sdcCardInitCommFailure Con 1
sdcCardNotInitFailure Con 2
sdcCardInitTimeout Con 3
'sdcCardTypeInvalid Con 4
sdcCardBadCmd Con 5
sdcCardTimeout Con 6
'sdcCardCRCError Con 7
sdcCardDataRejected Con 8
'sdcEraseTimedOut Con 9


SDC_FLOATING_BUS Con $ff
SDC_BAD_RESPONSE Con SDC_FLOATING_BUS

Well, the codes aren't much help.

Robert

INGREMCO
- 18th April 2016, 07:37
First of all thank you for all you replies.

With regard to you Demon:
*Yes, I use capital letters for the files.
*Yes, I have selected to use PBPL (get the message when it is compiled).
*Yes, I am using an PIC18 part (specific PIC18F26K80).
*And yes, I also found what the error codes represents and as you stated they aren't so much of a help.

With regards to mackrackit:
As you can see in the code below, i have specified your line directly after I include the SDFS file.
And i use a 2GB card and it is in FAT format (and that will be FAT16, according to Microsoft).

I have already established that all my IO works, but today I am gonna try to monitor the data that is send
to the SD card and what he will send back


'configuration bits
#CONFIG
CONFIG RETEN = ON ; Ultra low-power regulator is Enabled (Controlled by SRETEN bit)
CONFIG INTOSCSEL = HIGH ; LF-INTOSC in High-power mode during Sleep
CONFIG SOSCSEL = HIGH ; High Power SOSC circuit selected
CONFIG XINST = OFF ; Disabled
CONFIG FOSC = INTIO2 ; Internal RC oscillator
CONFIG PLLCFG = ON ; Enabled
CONFIG FCMEN = ON ; Enabled
CONFIG IESO = OFF ; Disabled
CONFIG PWRTEN = ON ; Enabled
CONFIG BOREN = SBORDIS ; Enabled in hardware, SBOREN disabled
CONFIG BORV = 3 ; 1.8V
CONFIG BORPWR = ZPBORMV ; ZPBORMV instead of BORMV is selected
CONFIG WDTEN = ON ; WDT controlled by SWDTEN bit setting
CONFIG WDTPS = 512 ; 1:512
;CONFIG CANMX = PORTB ; ECAN TX and RX pins are located on RB2 and RB3, respectively
;CONFIG MSSPMSK = MSK7 ; 7 Bit address masking mode
CONFIG MCLRE = ON ; MCLR Enabled, RE3 Disabled
CONFIG STVREN = ON ; Enabled
CONFIG BBSIZ = BB2K ; 2K word Boot Block size
CONFIG CP0 = OFF ; Disabled
CONFIG CP1 = OFF ; Disabled
CONFIG CP2 = OFF ; Disabled
CONFIG CP3 = OFF ; Disabled
CONFIG CPB = OFF ; Disabled
CONFIG CPD = OFF ; Disabled
CONFIG WRT0 = OFF ; Disabled
CONFIG WRT1 = OFF ; Disabled
CONFIG WRT2 = OFF ; Disabled
CONFIG WRT3 = OFF ; Disabled
CONFIG WRTC = OFF ; Disabled
CONFIG WRTB = OFF ; Disabled
CONFIG WRTD = OFF ; Disabled
CONFIG EBTR0 = OFF ; Disabled
CONFIG EBTR1 = OFF ; Disabled
CONFIG EBTR2 = OFF ; Disabled
CONFIG EBTR3 = OFF ; Disabled
CONFIG EBTRB = OFF ; Disabled
#ENDCONFIG

'alias PIC pins definition
OP1 var PORTC.1 'For JUMPER1
OP1_TRIS var TRISC.1
TX1 var PORTC.0
TX1_TRIS var TRISC.2
OP2 var PORTB.4
OP2_TRIS var TRISB.4
RX1 var PORTC.2
RX1_TRIS var TRISC.2

OP3 var PORTB.2 'For JUMPER2
OP3_TRIS var TRISB.2
TX2 var PORTB.3
TX2_TRIS var TRISB.3
OP4 var PORTB.0
OP4_TRIS var TRISB.0
RX2 var PORTB.1
RX2_TRIS var TRISB.1

OP5 var PORTA.3 'For JUMPER3
OP5_TRIS var TRISA.3
TX3 var PORTA.2
TX3_TRIS var TRISA.2
OP6 var PORTA.6
OP6_TRIS var TRISA.6
RX3 var PORTA.7
RX3_TRIS var TRISA.7

SHTDWN var PORTA.1 'Shutdown 3.3V regulator
SHTDWN_TRIS VAR TRISA.1

SD_WE var PORTC.6 'SD card Write Protect
SD_WE_TRIS var TRISC.6 'SD card Write Protect direction
SDI var PORTC.4 'SPI data in
SDI_TRIS var TRISC.4 'SPI data in direction
SCL var PORTC.3 'SPI clock
SCL_TRIS var TRISC.3 'SPI clock direction
SD_CS var PORTA.5 'SD card Chip Select
SD_CS_TRIS var TRISA.5 'SD card chip select direction
SD_CD var PORTC.7 'SD card Detect
SD_CD_TRIS var TRISC.7 'SD card detect direction
SDO var PORTC.5 'SPI data out
SDO_TRIS Var TRISC.5 'SPI data out direction

Rail_v var PORTA.0 'incomming 5V rail
Rail_v_TRis var TRISA.0

LED var PORTB.5 'Status LED
LED_TRIS var TRISB.5

MCLR var PORTE.3 'MCLR

PGD var PORTB.7 'PGD programming data
PGD_TRIS var TRISB.7
PGC var PORTB.6 'PGC programming clock
PGC_TRIS var TRISB.6

'includes:
include "SDFS.bas" ' include for using FAT16-SD card
'include "SDFShc32d.pbp."
SDC_UseHardSPI = FALSE
INCLUDE "DT_INTS-14.bas" ' Base Interrupt System
INCLUDE "ReEnterPBP.bas" ' Include if using PBP interrupts
include "modedefs.bas"

'defines for compiler
DEFINE LOADER_USED 0 'Not using a bootloader
define OSC 16 'Tell PBP to expect 64MHz clock

'watchdog settings
WDTCON = 22 'Set WDT to 2 s (default = 2 s)
WDTCON.0 = 1 'enable watchdog

'oscillator settings
OSCCON = %01110000 'Set internal clock to 16 MHz
'OSCTUNE = %11000000 'enable PLL (clock = now 64 MHz)

'interrupt settings
INTCON = %00000000 'disabled all interupts

'option settings

'analog i/o port settings
ANCON0 = %00000001
ANCON1 = %00000000
SLRCON = %00000000

'digital i/o port settings
PADCFG1 = %00000000 'disable pull-up
WPUB = %00000000 'disable pull-up
ODCON = %00000000 'disable open-drain
TRISA = %00010101 'Port A
TRISB = %11001000 'Port B
TRISC = %11010001 'Port C

'adc settings
ADCON0 = %00000001
ADCON1 = %00110000 'Use internal 4.1 refference
ADCON2 = %10000000 'Right justified

'uart settings


'spi settings

'timer2
T2CON = %01111111 'postscaler=16,timer on, prescaler=16 (62500 Hz)
PR2 = 251 'comperator value is set to divide by 251(250 Hz)
PIR2.1 = 0 'reset flag

'constant definition
FIRMWARE_VERSION_M con 00 ' M + . + S is the firmware version -> XX.XX
FIRMWARE_VERSION_S con 10

log_control_max con 53 'Maxmimum data to be received from control board
log_pumpfix_max con 11 'and pumpfix board after logging reqeust
log_row_bytes con 67 'Add log_control and log_pumpfix + carriage return and 2 tabs
Startup_control_max con 1 'Maximu data to be received from control after start up request
log_general_max con 207 'Maximum of data that is contained in the general information block
log_info_banner con 229 'maximum of data that is contained in the infromation banner for the logging
log_ofset_bytes con 436 'Ofset in bytes for log data to be stored : log_general_max + log_info_banner
MAX_NOEN con 8000'max of log entries, after that a new file has to be created (~500 MB)
MAX_files con 3

File_PN_L con 10 'Following numbers represents the maximum number
File_SN_L con 9 'of bytes (LENGTH) that can be written to the
File_FV_L con 5 'file for each point in the general information
File_TSO_L con 6 'banner.
File_TSON_L con 6 'One byte represents one decimal value in a .txt
File_TT_L con 10 'file.
File_NOER_L con 9
File_NOEN_L con 4

File_PN_S con 15 'Following numbers represents the first (START)
File_SN_S con 43 'possistion (byte) of the corresponding general
File_FV_S con 72 'information.
File_TSO_S con 98 'All the given numbers are measured from the
File_TSON_S con 116 'starting point (0) in the file.
File_TT_S con 137
File_NOER_S con 167
File_NOEN_S con 197

'variable definition
TimerTick_max var word'variable to contain needed interval
TimerTick_counter var word'variable that counts the interval
LED_blink_counter var byte'variable for pulses on the error LED
i var byte

log_control_data var byte [log_control_max] 'array for received data
log_pumpfix_data var byte [log_pumpfix_max] 'array for received data
strtup_control_data var byte [Startup_control_max] 'array for recived data
AN0_value var word'variable to store ADC value of 5V rail

files_found var word'For indexing the number of files

File_PN var byte[File_PN_L] 'Variables to write to the
File_SN var byte[File_SN_L] 'SD card when there needs to
File_FV var byte[File_FV_L] 'be a new file to be
File_TSO var byte[File_TSO_L] 'generated
File_TSON var byte[File_TSON_L]
File_TT var byte[File_TT_L]
File_NOER var byte[File_NOER_L]
File_NOEN var byte[File_NOEN_L]

Current_TSO var long'Current values that are read out from the file
Current_TSON var long'on the SD card. These wil also be used for
Current_TT var long'general values to be written to the file
Current_NOER var LOng
Current_NOEN var word
Current_NOER_last var byte

'hardware initialisation
SHTDWN = 0
LED = 0
'software initialisation, setting variables at their initial value
TimerTick_max = 15000 'is 60 seconds
TimerTick_counter = 0 'Set counter to 0
LED_blink_counter = 0 'For indicating error
files_found = 0
Current_TSO = 0
Current_TSON = 0
Current_TT = 0
Current_NOER = 0
Current_NOEN = 0


pause 10000
'interrupt settings
ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag?
INT_Handler TMR2_INT, _TimerTick, PBP, yes
endm
INT_CREATE ;Creates the interrupt processor
ENDASM
@ INT_ENABLE TMR2_INT ;enable Timer 2 interrupts

'---[Main]----------------------------------------------------------------------
Main:
LED = 0 'indicate start up procedure

gosub FSInit 'initialise the SD card
Serout2 PORTB.1, 84, ["Init: ", FAT_error, " ", SDC_status, " ", SDC_response, $d, $a]
gosub SD_error_check 'Check for errors on SD card
gosub FINDfirst 'Look for files on SD card
While(FAT_error = 0) 'Find next file on card
files_found = files_found + 1
Gosub FINDnext
Wend

INGREMCO
- 18th April 2016, 07:43
Hi Demon,

Thanks for you private message. Only I cant reply with that and cant create my own.
When i go to: "My profile" I get the following message:


You have been banned for the following reason:
No reason was specified.

Date the ban will be lifted: Never

Fortunally i can react on my own post, so that why I direct this "mail" to you in this way.
If you have read it, it may be deleted because is has no further information to this kind
of topic.

With kind regards and helpful wishes,

Remco

Ioannis
- 18th April 2016, 09:53
Hi Remco.

Try again and see your status. Hope is OK now.

If not, Lester Please see the case.

Ioannis

longpole001
- 20th April 2016, 06:49
one problem i had when first getting sd card to work was cheep / ebay sd card slot holder
i had micro sd card that was then fitted to standard sd card adapter

changing the sd slot holder pcb allowed the sd card to work , it turned out 4 sd slot card holders did not hold the sd card well and would not allow initialization

something to check / test

INGREMCO
- 20th April 2016, 08:17
All of you, thank you for your help.

But ofcource, as always, the code wasn't wrong (for now). My PCB layout was a tiny bit wrong with regards to the SD pinout.

As they say, the devil is in the details :frown:

Yet another little fact learned.

But i will stay in touch, because I see other problem in the near furture.

Kind regards,

Rmeco

INGREMCO
- 20th April 2016, 09:11
And here am i again,

I am using the standard example from microengineering to write to a SD card.
I can see that it's willing to create a new file, only when i want to write to it i
get the error 9 (CE_WRITE_ERROR Con 9 ' Could not write to a sector).
Am I blind to something or is it just so simple that i miss it?

INGREMCO
- 20th April 2016, 14:48
And ofcource it was sutch a simple but rather irritating problem.

Apperently the SDFS file or SD card doenst like a timer interrupt around the 4 ms.

After removing this timer, is all worked an i could write to the file and read all of it.

Thanks for the help anyway.

Kind regards,

Remco

Demon
- 20th April 2016, 15:33
You're welcome.

This was research for my future use of SD cards. That sample code is perfect.

longpole001
- 22nd April 2016, 02:36
also even though he removed the timer, i wonder why it was using DT-INT-14,and not the int-18 version which is correct for the 18f chip sets

INGREMCO
- 25th April 2016, 07:33
Al-tho it works fine (I see no difference in it't execution). And I actually never knew there was another file specially for pic18F and pic18LF. But I have changed it to the correct version now, thanks for the head-up.