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

Getting started with PIC16F628A

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



Joined: 17 Feb 2009
Posts: 3

View user's profile Send private message

Getting started with PIC16F628A
PostPosted: Tue Feb 17, 2009 2:12 am     Reply with quote

Hello all,

I am a beginner PIC programmer, so please excuse my lack of knowledge on the subject.

Wrote my first simple PIC program, simply output HIGH on all ports.

However, RA4/TOCKI/CMP2 (PIN_A4) is low, RA5/MCLR/VPP (PIN_A5) is floating (appears open), and CLKOUT (PIN_A6) is outputting the clock pulse.

Code:


#include <16F628A.h>

#fuses NOMCLR,NOPROTECT,NOWDT,INTRC

void main()
{
   set_tris_a(0x00);
   set_tris_b(0x00);
   while (1)
   {
      output_high(PIN_A0);
      output_high(PIN_A1);
      output_high(PIN_A2);
      output_high(PIN_A3);
      output_high(PIN_A4);
      output_high(PIN_A5);
      output_high(PIN_A6);
      output_high(PIN_A7);
      output_high(PIN_B0);
      output_high(PIN_B1);
      output_high(PIN_B2);
      output_high(PIN_B3);
      output_high(PIN_B4);
      output_high(PIN_B5);
      output_high(PIN_B6);
      output_high(PIN_B7);
   }
   
}


I am very familiar with C, but do not understand the concept of fuses. I apologize if another topic describes it, but I've had no luck in the search. Thanks!

*EDIT*

OK I understand the issue with A4 being the drain pin, thus nothing will come off.

Basically, I've written a more complex code that does work, minus these output issues. CLKOUT I want to be an output with defined values. Same with MCLR. Is this possible?
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Feb 17, 2009 11:57 pm     Reply with quote

Quote:
However, RA4/TOCKI/CMP2 (PIN_A4) is low, RA5/MCLR/VPP (PIN_A5) is floating (appears open), and CLKOUT (PIN_A6) is outputting the clock pulse.

See below for an explanation of pins A5 and A6.


Look in the 16F628A data sheet,
http://ww1.microchip.com/downloads/en/DeviceDoc/40044F.pdf
in this section:
Quote:

TABLE 3-2: PIC16F627A/628A/648A PINOUT DESCRIPTION

It tells you all the available modes for each pin, and if are
input-only, i/o, open-drain, etc.


Certain pins are configured by Config bit settings (CCS calls them fuses).
Look in this section for a description of the Config bits and how they
affect the pins.
Quote:
REGISTER 14-1: CONFIG – CONFIGURATION WORD REGISTER

Look at this Config bit for the MCLR pin:
Quote:
bit 5: MCLRE: RA5/MCLR/VPP Pin Function Select bit
1 = RA5/MCLR/VPP pin function is MCLR
0 = RA5/MCLR/VPP pin function is digital Input, MCLR internally tied to VDD

This corresponds to the CCS fuse settings for MCLR and NOMCLR.

Look at these Config bits for the Internal oscillator:
Quote:
bit 4, 1-0: FOSC<2:0>: Oscillator Selection bits (4)
101 = INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
100 = INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN

These correspond to the fuse settings of INTRC and INTRC_IO.
doguhanpala



Joined: 05 Oct 2016
Posts: 120

View user's profile Send private message

PostPosted: Mon Jun 05, 2017 7:55 am     Reply with quote

PCM programmer wrote:
Quote:
However, RA4/TOCKI/CMP2 (PIN_A4) is low, RA5/MCLR/VPP (PIN_A5) is floating (appears open), and CLKOUT (PIN_A6) is outputting the clock pulse.

See below for an explanation of pins A5 and A6.


Look in the 16F628A data sheet,
http://ww1.microchip.com/downloads/en/DeviceDoc/40044F.pdf
in this section:
Quote:

TABLE 3-2: PIC16F627A/628A/648A PINOUT DESCRIPTION

It tells you all the available modes for each pin, and if are
input-only, i/o, open-drain, etc.


Certain pins are configured by Config bit settings (CCS calls them fuses).
Look in this section for a description of the Config bits and how they
affect the pins.
Quote:
REGISTER 14-1: CONFIG – CONFIGURATION WORD REGISTER

Look at this Config bit for the MCLR pin:
Quote:
bit 5: MCLRE: RA5/MCLR/VPP Pin Function Select bit
1 = RA5/MCLR/VPP pin function is MCLR
0 = RA5/MCLR/VPP pin function is digital Input, MCLR internally tied to VDD

This corresponds to the CCS fuse settings for MCLR and NOMCLR.

Look at these Config bits for the Internal oscillator:
Quote:
bit 4, 1-0: FOSC<2:0>: Oscillator Selection bits (4)
101 = INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
100 = INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN

These correspond to the fuse settings of INTRC and INTRC_IO.


As i understand from here, there is no way to use ra5 as output. In the datasheet page 3, in peripheral functions it says there are 16 i/o pins. but there is not, so it is a lie. Am i correct?

Can it be used as receiver on rsr232?
Ttelmah



Joined: 11 Mar 2010
Posts: 19518

View user's profile Send private message

PostPosted: Mon Jun 05, 2017 8:23 am     Reply with quote

16 I/O pins, means 16 pins that can do some combination of input or output. Doesn't mean they can all do both input and output....

So, no, not a 'lie'. Just means you need to actually look at the data sheet and work out which pins can do what...

Also as soon as 'time' becomes involved, you need to have a clock statement. At present the chip will be selecting it's 'default' clock...
Ttelmah



Joined: 11 Mar 2010
Posts: 19518

View user's profile Send private message

PostPosted: Mon Jun 05, 2017 9:00 am     Reply with quote

There are various different ways of receiving asynchronous TTL serial (not technically 'RS232' - RS232 is a signalling standard using higher voltages, which the PIC can't actually handle - needs a buffer chip).

Hardware UART. Can only be done on the 'hardware' pins. RB1 & RB2 on your chip.

Simple software UART. Can be done on any PIC pin (with the same restrictions on 'direction' as for normal I/O), but 'receive', requires your code to be sitting 'listening' for the data to arrive.

Interrupt based software UART. The receive for this can only be done on pins that can trigger an interrupt.

Timer interrupt based software UART. Can again be done on any pin, but requires a 'tick' running at quite a high speed (I have posted a basic example in the code forum).
doguhanpala



Joined: 05 Oct 2016
Posts: 120

View user's profile Send private message

PostPosted: Mon Jun 05, 2017 10:34 am     Reply with quote

Ttelmah wrote:
There are various different ways of receiving asynchronous TTL serial (not technically 'RS232' - RS232 is a signalling standard using higher voltages, which the PIC can't actually handle - needs a buffer chip).

Hardware UART. Can only be done on the 'hardware' pins. RB1 & RB2 on your chip.

Simple software UART. Can be done on any PIC pin (with the same restrictions on 'direction' as for normal I/O), but 'receive', requires your code to be sitting 'listening' for the data to arrive.

Interrupt based software UART. The receive for this can only be done on pins that can trigger an interrupt.

Timer interrupt based software UART. Can again be done on any pin, but requires a 'tick' running at quite a high speed (I have posted a basic example in the code forum).


Thank you for your answers Ttelmah.

I thought i/o means both input and output. I found the way of datasheet a bit 'deceiving'. For example, if there was PIC with only 4 input and 8 output, writing 12 i/o on datasheet would not be the best way to explain the pinout in my opinion. I admit i wrote the lie part with frustration and a bit of rage. Next time, i will check the pinout on the picture and pay more attention to the arrows on pins.

About uart, i had meant the software uart. I assumed the input pin can be used as receive. I tried this and it worked. You mentioned about interrupts, is kbhit() function one of them?
Ttelmah



Joined: 11 Mar 2010
Posts: 19518

View user's profile Send private message

PostPosted: Mon Jun 05, 2017 11:07 am     Reply with quote

Problem is that to describe all the pin permutations on a PIC, even on quite simple ones, would cover several pages.
When you have pins that can be analog inputs, open collector outputs, logic inputs, logic outputs, and then in some cases inputs to particular peripherals, while only being outputs for for others, the simple description is never going to say it all.
As well as the tables of pins, the simple pin diagrams, have arrow heads printed on them for the directions supported. Some logic inputs even have different switching levels according to what peripheral is involved. This is why the data sheet has pages for this information....

This is also though why it is much easier to start with PICs with lots of pins, and only try to 'go smaller' once you know which pins you need.
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