CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

10F200 pull-up on inputs

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
rikotech8



Joined: 10 Dec 2011
Posts: 376
Location: Sofiq,Bulgariq

View user's profile Send private message

10F200 pull-up on inputs
PostPosted: Tue Sep 01, 2015 11:59 am     Reply with quote

Hi everyone,
I wasn't able to make up another approach to enable pull-ups on this chip but by integrating some assembler instructions into the code. The problem is I have not much of experience with assembler, let say none.
And this is the code that is for testing the internal pull-up.

Code:

#include <10F200.h>
#include <stdint.h>
#fuses NOWDT, NOMCLR
#use delay(clock = 4000000)
#USE FAST_IO (B)

#define LED                   PIN_B1
#define LED_ON                output_high(LED)
#define LED_OFF               output_low(LED)
#define BUTTON_IS_PRESSED     input(pin_b3)

void main()
{
   set_tris_b(0x08);
   
   #ASM
   CLRW
   MOVLW 0x40
   OPTION
   CLRW
   #ENDASM
   
   while (TRUE)
   {
   if(BUTTON_IS_PRESSED)
      LED_ON;
   else
      LED_OFF;
   }
}

The test covers the expected result for now. But I need to be 100% sure that the code is correct. Do you think that I succeeded to enable the pull-ups?
_________________
A person who never made a mistake never tried anything new.
Ttelmah



Joined: 11 Mar 2010
Posts: 19552

View user's profile Send private message

PostPosted: Tue Sep 01, 2015 12:38 pm     Reply with quote

No. You have turned them off. The bit in the register is 0 to enable, 1 to disable... Read the data sheet.

This is why the CCS command to do this has:


setup_wdt(DISABLE_PULLUPS);

to turn them _off_. If you omit this, and use the setup_wdt function it defaults to turning them on.

So:

setup_wdt(FALSE);

actually enables the pullups.
rikotech8



Joined: 10 Dec 2011
Posts: 376
Location: Sofiq,Bulgariq

View user's profile Send private message

PostPosted: Wed Sep 02, 2015 4:44 am     Reply with quote

Thanks Mr. T
In order to be more flexible I am tend to use more standard instruments to
develop my code. Therefore I am still attached to the assembler code. In my perspective there was no way to come upon this approach:

Code:
setup_wdt(FALSE);

without having Nostradamus skills.
Another thing I find annoying is: The datasheet says (page 14):
Quote:
(I paraphrase) The value on Power On Reset of the register OSCCAL is 1111 1110

Which means that INTOSC/4 is NOT applied/enabled on GP2.
Guess what I saw (while scoping) on this pin after POR (without touching the register), square pulses with period of 1uS.
Then I appended this line to initialization part of the code
Code:
*((uint8_t*)0x05)  &= ~0x01;

And finally I got what I expected. I reviewed the errata Rev.A document, but wasn't able to find related problem.
OK this was just a feed-back in case someone else encounter such a problem. All the best, and thank you again T
_________________
A person who never made a mistake never tried anything new.
Ttelmah



Joined: 11 Mar 2010
Posts: 19552

View user's profile Send private message

PostPosted: Wed Sep 02, 2015 8:32 am     Reply with quote

Quote:

without having Nostradamus skills.


Just read the include file for the processor.

A one second search finds the 'DISABLE_PULLUPS' instruction.

A look at the data sheet shows that the bit is a disable bit, not an enable bit, and that it is common to the register with all the watchdog controls (so explains 'why' CCS use the setup_wdt functions). So sending any other setting to the watchdog, automatically enables the pullups....

Your register five problem depends what is in the calibration value.

From the data sheet:
"In addition, a calibration instruction is programmed into
the last address of memory, which contains the calibration
value for the internal oscillator. This location is
always uncode protected, regardless of the code-protect
settings. This value is programmed as a MOVLW xx
instruction where xx is the calibration value and is
placed at the Reset vector. This will load the W register
with the calibration value upon Reset and the PC will
then roll over to the users program at address 0x000.
The user then has the option of writing the value to the
OSCCAL Register (05h) or ignoring it"

The compiler automatically writes this calibration value into the OSCCAL register. If it has bit 0 set, then the output clock will be turned on. Sounds as if possibly your chip has been erased.

Again from the data sheet:

"Note: Erasing the device will also erase the preprogrammed
internal calibration value for
the internal oscillator. The calibration
value must be read prior to erasing the
part so it can be reprogrammed correctly
later."

Since this erases to all 1's, it'd explain your behaviour.....
rikotech8



Joined: 10 Dec 2011
Posts: 376
Location: Sofiq,Bulgariq

View user's profile Send private message

PostPosted: Wed Sep 02, 2015 1:01 pm     Reply with quote

One more thing I find useful to be shared is:

MPLAB IDE v8.89+PICKIT3 doesn't like PIC10F200
The IDE spits some error related to calibration data.
Happily this http://www.microchip.com/forums/m500342.aspx solved the problem.
_________________
A person who never made a mistake never tried anything new.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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