PDA

View Full Version : Getting 18F458 to blink



helloo
- 30th January 2012, 21:45
Hey fellow PICers :topsy_turvy:

After a few projects with PIC 16F series, I try to move on to the more advanced PIC 18F series. But already at the very beginning I got stuck. I tried already to solve it for days, but I have no more clue…

The hardware setup: PIC 18F458, 20Mhz Xtal on pins OSC1 and OSC2, two 15p caps for the Xtal, an LED with resistor on PORTD.2 (pin 21)

The program:

define OSC 20 ' Quarz = 20 MHz
clear

ADCON1 = 15 ' all digital

LED var portd.2

RxTx var portc.5
RS485Rx var portc.7
RS485Tx var portc.6

loop:
toggle led
pause 500
low led
goto loop


I had to change the __CONFIG lines in the .inc file in order to work with MPLAB like this:

NOLIST
ifdef PM_USED
LIST
"Error: PM does not support this device. Use MPASM."
NOLIST
else
LIST
LIST p = 18F458, r = dec, w = -311, w = -230, f = inhx32
INCLUDE "P18F458.INC" ; MPASM Header
;__CONFIG _CONFIG1H, _OSCS_OFF_1H & _HS_OSC
;__CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_128_2H
;__CONFIG _CONFIG4L, _LVP_OFF_4L
CONFIG OSCS=OFF,OSC=HS,WDT=ON,WDTPS=128,LVP=OFF
NOLIST
endif
LIST
EEPROM_START EQU 0F00000h
BLOCK_SIZE EQU 8



It compiles and burns into the PIC with no errors.
What happens when I turn on power is that the LED is always lit. No blinkin’, nothin’

How can I check if the Xtal works? Or any other hints what to do anyone?

Thanx & keep on PICin’

Helloo

spcw1234
- 31st January 2012, 00:34
Try adding CMCON=7 to your code to disable the comparator

EDIT: ADCON1=6 would be all digital, ADCON1=15 makes AN0 analog with AN3 VREF+ and AN2 VREF-

Demon
- 31st January 2012, 20:15
And you can remove LOW LED at the bottom. Toggle will change the state for you; if it was ON, it will turn OFF, and vice versa.

Do you really need the watchdog timer?

Can you put the CONFIG statement in the include like that?
(never saw that before, usually it's at the top of your program, but I don't use MPLAB).

Robert

cncmachineguy
- 31st January 2012, 21:27
It may be working just perfect. In your loop the first thing you do is toggle the led. Then you pause for half a second. Then you set the output low and instantly go back to the top of the loop, where you will toggle again turning on the led. As was suggested, remove the low led command. Or you could add another pause after it so you will have time to see it go low.

helloo
- 31st January 2012, 23:10
All three of you where right. Thank you all. Deleted the "LED low" command (wich I added after nothing happened). Added "CMCON = 7" as Shawn suggested. Now it works. Grrrmmm three lousy bits, many days no sleep...

@Demon: Both ways work. But if the CONFIG is in the include file, it mustn't be in the program and vice versa.

mackrackit
- 1st February 2012, 09:53
Can you put the CONFIG statement in the include like that?
(never saw that before, usually it's at the top of your program, but I don't use MPLAB).

Until PBP 3 that is the default way, configs in the *.inc
MPLAB has nothing to do with it.