PDA

View Full Version : 16F913 setup



Andre_Pretorius
- 5th December 2007, 18:09
I am new to the 16f913, can somebody help me with the hardware setup i want to use the first 4 pins on port a as analog inputs, the first 4 inputs on portb as digital inputs portb6 and 7 for the ICD2, the first 4 of port c as digital outputs and port c 6 and 7 for serial comunications.

Do anyone have a way to do this setup fast on diferent micro's?

Andre_Pretorius
- 9th December 2007, 09:05
This is as far as i got, can somebody please help me with the errors mentioned below?

DEFINE OSC 20 ' Define crystal as 20Mhz

'This Part set PORTA 0-5 an analog inputs

ADCON1 = %111 'FRC (clock derived from a dedicated internal oscillator = 500 kHz max)
ANSEL = 0 'The ANSEL (91h) and CMCON0 (9Ch)registers must be initialized to configure an
CMCON0= 0 'analog channel as a digital input. Pins configured as analog inputs will read ‘0’.
TRISA = %00011111 'set PORTA 0-5 as inputs


TRISC = %10001111 'Set PORTC for serial coms and pins 0 - 3 as inputs
TRISB = %00000000 'Sert PORTb as outputs and for use with the ICD2


ERROR Line 13: Syntax error.
ERROR: RAM END must be defined.
ERROR: RAM BANKS must be defined.
ERROR: No LIBRARY statement or LIBRARY parameter.
ERROR: No LIBRARY statement or MACRO parameter.
ERROR: Unable to open file PBPMAC.INC

mister_e
- 9th December 2007, 10:57
no such error here. Which version of PBP are you using?

Andre_Pretorius
- 9th December 2007, 18:03
MPLAB 8 and PBP 2.46, i also do not get the error with microstudio

mister_e
- 9th December 2007, 18:10
mmm, sounds like a corrupted file, did you tried to re-install PBP and it's patch for 2.46?
http://www.melabs.com/support/patches.htm

Andre_Pretorius
- 9th December 2007, 19:23
thanks, i created a totaly new project and copied my code into it, it seems to have fixed the problem it compiles now without problems.
is there any thing you think i left out to have the pic do what i setted out to do in my first post?

mister_e
- 9th December 2007, 19:57
'This Part set PORTA 0-5 an analog inputs

ADCON1 = %111 'FRC (clock derived from a dedicated internal oscillator = 500 kHz max)
ANSEL = 0 'The ANSEL (91h) and CMCON0 (9Ch)registers must be initialized to configure an
CMCON0= 0 'analog channel as a digital input. Pins configured as analog inputs will read ‘0’.
TRISA = %00011111 'set PORTA 0-5 as inputs

Nope, it disable all ADC channel <7:0>.
http://ww1.microchip.com/downloads/en/DeviceDoc/41250F.pdf
PDF page 45, Ansel Register.
should be
ANSEL = %00011111

PDF page 183, ADCON1
ADCON1 should be
ADCON1=%01110000

To disable comparators, cm<2:0> bits have to be = to 111

so PDF page 118, CMCON0
CMCON0=%00000111

Andre_Pretorius
- 16th December 2007, 19:31
Acording to me this chould read the 0 - 5v signal on PORTA.0 and sends the digital value to hiperterminal, nothing seems to happen ,any help please
Also i have just bought myself a ICD2 is there any special code i need to add to use the debug functions?

DEFINE OSC 20 ' Define crystal as 20Mhz
DEFINE HSER_BAUD 9600 ; 9600 Baud
DEFINE HSER_CLROERR 1 ; Clear overflow automatically


'This Part set PORTA 0-5 an analog inputs

ADCON1 = %01110000 'FRC (clock derived from a dedicated internal oscillator = 500 kHz max)
ANSEL = %00011111 'The ANSEL (91h) and CMCON0 (9Ch)registers must be initialized to configure an
CMCON0 = %00000111 'analog channel as a digital input. Pins configured as analog inputs will read ‘0’.
TRISA = %00011111 'set PORTA 0-5 as inputs

TRISC = %10001111 'Set PORTC for serial coms and pins 0 - 3 as inputs
TRISB = %00000000 'Sert PORTb as outputs and for use with the ICD2

INTCON = 0 ;Disable interrupts

V1 var byte

loop:
ADCIN PORTA.0,V1
HSEROUT [DEC V1]
PAUSE 500
goto loop

KVLV
- 16th December 2007, 22:34
ADCIN PORTA.0,V1


should it be:


ADCIN 0,V1

KVLV
- 16th December 2007, 22:37
please see this post, Brandon has the same statement as yours link >> http://www.picbasic.co.uk/forum/showthread.php?p=47826#post47826

Andre_Pretorius
- 17th December 2007, 18:14
This should send out hello each 0.5 sec 9600 baud even parity instead i get 4 "Ξ" Simbols on hyper terminal, i have checked all the regesters and it seems to be ok, any body got any Suggestions??

DEFINE OSC 20 ' Define crystal as 20Mhz

DEFINE HSER_BAUD 9600 ; 9600 Baud
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 64h ' Enable transmit, BRGH = 1
DEFINE HSER_BITS 9
DEFINE HSER_EVEN 1
DEFINE HSER_CLROERR 1 ; Clear overflow automatically

TRISA = %00011111 'set PORTA 0-5 as inputs
TRISC = %10001111 'Set PORTC for serial coms and pins 0 - 3 as inputs
TRISB = %00000000 'Sert PORTb as outputs and for use with the ICD2

INTCON = 0 ;Disable interrupts

loop:
HSEROUT ["Hallo"]
PAUSE 500
goto loop

mister_e
- 17th December 2007, 18:23
It works here.. but i don't have the F913.. just the 917, shouldn't be the cause

Or your Max232 circuit is wrong or you didn't set HS mode before programming your PIC.

Andre_Pretorius
- 17th December 2007, 20:00
This is not the smartest of questions but i am using mplab 8 and a ICD2 and can not find were to set the HS mode, if i understand your reply correct it is a programmer option.

mister_e
- 17th December 2007, 20:13
You have 2 choice, my favorite is to set the configuration bits in the code see the following
http://www.picbasic.co.uk/forum/showthread.php?t=543


@ __CONFIG _HS_OSC ; minimal configuration fuse setting

or in MPLAB, click on Configure menu, then select Configuration bit

Darrel Taylor
- 17th December 2007, 22:59
Not with HyperTerminal!


DEFINE HSER_BAUD 9600 ; 9600 Baud
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 64h ' Enable transmit, BRGH = 1
DEFINE HSER_BITS 9
DEFINE HSER_EVEN 1
DEFINE HSER_CLROERR 1 ; Clear overflow automatically

mister_e
- 18th December 2007, 03:29
I'm i allowed to not understand???? Hypercrap worked here with that setting... but... erm, i admit i've never ever dare to open the datasheet to read TXSTA settings ;)

Feel lazy and tired today...

Darrel Taylor
- 18th December 2007, 03:33
Hypercrap worked here with that setting...
Hmmm, interesting...

Hyperterminal doesn't have a 9-bit option.

9-bit transmission works with 8-bit reception?
Very interesting.

Added: Not being sarcastic... (i know, it's a first)
It may actually be usefull.
<br>

mister_e
- 18th December 2007, 03:36
hence why i've never saw any interest to use it :D

I thought it would show some parity error... seems not. let me check with real software ;)

As stated in the manual...
DEFINE HSER_BITS 9 'Use 9th bit for parity

maybe i need to sleep.

Darrel Taylor
- 18th December 2007, 05:17
maybe i need to sleep.

You're a DJ.
You can't sleep till after 2AM :)

Still think 9/8-bit might be usefull. Not sure how though.
<br>

Andre_Pretorius
- 20th December 2007, 20:09
For those who are also trying this here is a working program reading the 5 analog channels on a 16F913 and sending it out on the serial port, hope this will help someone having a few less sleeples nights, thank you for everyone who helped me get this far

INCLUDE "ANSI.INC"

DEFINE OSC 20 ' Define crystal as 20Mhz

'*Serial port Setup 9600 8N1*
DEFINE HSER_BAUD 9600 ; 9600 Baud
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_CLROERR 1 ; Clear overflow automatically

'*ADC setup*
DEFINE ADC_BITS 10 'SETS NUMBER OF BITS IN RESULTS 8,10,12
DEFINE ADC_CLOCK 3 'SETS CLOCK SOURCE (RC = 3)
DEFINE ADC_SAMPLEUS 50 'SETS SAMPLING TIME IN MICROSECONDS

'This Part set PORTA 0-5 an analog inputs
ADCON1 = %01110000 'FRC (clock derived from a dedicated internal oscillator = 500 kHz max)
ANSEL = %00011111 'The ANSEL (91h) and CMCON0 (9Ch)registers must be initialized to configure an
CMCON0 = %00000111 'analog channel as a digital input. Pins configured as analog inputs will read ‘0’.
TRISA = %00011111 'set PORTA 0-5 as inputs
ADCON0.7 = 1 'Right justify output of ADC datasheet P145 of 16F913

TRISC = %10001111 'Set PORTC for serial coms and pins 0 - 3 as inputs
TRISB = %00000000 'Sert PORTb as outputs and for use with the ICD2

INTCON = 0 ;Disable interrupts

V1 var word
V2 var word
V3 var word
V4 var word
V5 var word


loop:
@ ClearScr ; Clear Screen
ADCIN 0,V1
ADCIN 1,V2
ADCIN 2,V3
ADCIN 3,V4
ADCIN 4,V5
HSEROUT ["Value of ADCIN 0 = ",dec V1,10,13]
HSEROUT ["Value of ADCIN 1 = ",dec V2,10,13]
HSEROUT ["Value of ADCIN 2 = ",dec V3,10,13]
HSEROUT ["Value of ADCIN 3 = ",dec V4,10,13]
HSEROUT ["Value of ADCIN 4 = ",dec V5,10,13]
PAUSE 500
goto loop

END

PulsarProFX
- 13th April 2010, 22:01
Hi Mr. E and all others!

I am new to the LCD "modules" in the 16F913 chip. I'm trying to get a basic breadboard going here using the minimum setup required to just send 2 digits to 2 displays. From there I can figure out everything else the chip needs to do. It's these damn module parameters that is screwing with my head. Specific pins to displays can be any arrangement for now.

The App Note AN1070 and chip data leaves me confused when it comes to using PBP (v2.60) since data references are all in Assembler. Has anyone worked with this chip to arrive at a simple setup to map the pins, and how to setup the "mapping"? Do you need to create a lookup table to output the digits you want. The more I read the more I'm either missing the boat or reading too much into the minimums required to talk to the displays.

Mega thanks, Frank :)

bogdan
- 14th April 2010, 01:16
...digits to 2 displays...????

post the schematic please (...or lcd model # ... ext osc ?)

mark_s
- 14th April 2010, 14:54
Here is some code I wrote for a 4 digit display and a PIC16F914. There
is no cut and paste solution using these on chip LCD modules. Each LCD
has different number of segments, commons and duty. The best way
to get going is the worksheet located in the LCD section of the data
sheet. Using the LCD data sheet you assign each segment to an LCD register. I can probably help some if you supply the LCD data sheet.

mark_s
- 14th April 2010, 15:02
Code did not attach the first try

PulsarProFX
- 16th April 2010, 20:07
Here is some code I wrote for a 4 digit display and a PIC16F914. There
is no cut and paste solution using these on chip LCD modules. Each LCD
has different number of segments, commons and duty. The best way
to get going is the worksheet located in the LCD section of the data
sheet. Using the LCD data sheet you assign each segment to an LCD register. I can probably help some if you supply the LCD data sheet.

Using the Data Sheet's pin addressing to function names, here's what I've come up with and verified "ok".

COM-0 LCD FUNCTION ADDRESS LCD SEGMENT IC Pin
SEG0 LCDDATA 0,0 Segment "C" 21
SEG1 LCDDATA 0,1 Segment "D" 22
SEG5 LCDDATA 0,5 Segment "E" 7
SEG6 LCDDATA 0,6 Segment "DP" 14
SEG8 LCDDATA 1,0 Segment "F" 18
SEG9 LCDDATA 1,1 Segment "A" 17
SEG10 LCDDATA 1,2 Segment "B" 16
SEG11 LCDDATA 1,3 Segment "G" 15

COM-1 LCD FUNCTION ADDRESS LCD SEGMENT IC Pin
SEG2 LCDDATA 3,2 Segment "G" 23
SEG3 LCDDATA 3,3 Segment "B" 24
SEG4 LCDDATA 3,4 Segment "DP" 6
SEG7 LCDDATA 3,7 Segment "D" 3
SEG12 LCDDATA 4,4 Segment "E" 2
SEG13 LCDDATA 4,5 Segment "A" 28
SEG14 LCDDATA 4,6 Segment "F" 27
SEG15 LCDDATA 4,7 Segment "C" 5

Thanks, Frank :)

mark_s
- 16th April 2010, 20:52
Hi Frank,
I would need to see a schematic and have the LCD dat sheet to say for
sure if its correct. It looks like you got the idea.

Try blinking a segment

Loop:
LCDDATA0.6 = 1 'Turn on DP
Pause 1000
LCDDATA0.6 = 0 'Turn off DP
Pause 1000
Goto Loop

PulsarProFX
- 17th April 2010, 17:05
Most PIC's have a "weak pull up" for the MCLR pin. On the 16F913, I don't see this is an option in any register, however, on page 220 "Configuration Bits" [CONFIG1] there is a reference to MCLR. To tie it to VDD they say to enter "0" for this binary string. Wouldn't this mean that because you'd use a "0", if not entering CONFIG1 at all, it would automatically default to "0" and apply a weak-pull up on MCLR?

Otherwise, I would have to have a resistor/cap tied to MCLR which I really don't have the room to do if it's not absolutely necessary.

Frank :)

mackrackit
- 17th April 2010, 18:49
Not sure I understand what you are after but have you
_MCLRE_OFF
and made the pin an input?

LinkMTech
- 17th April 2010, 22:24
I found that the PIC16F913 INC file didn't have all the configs listed and had to use the meProg, View, Configuration screen to set the configs from before flashing the device.

And thanks to Mark_S for that code sample. I had finally brought the 16F913 and LCD-S401M1TF to life using about 900 Words but rewriting using your example with the LookUp table and IF/THENs reduced it to just over 500 Words.

PulsarProFX
- 17th April 2010, 22:36
Hello All,

After getting everything together for the 913, I fired up MIcroCode Studio (for those who use PicBasic Pro) just to find out that they don't support the 16F913 and above.

How does one know how to compile from PBP to the chip?!

PulsarProFX
- 17th April 2010, 22:51
[QUOTE=LinkMTech;88500]I found that the PIC16F913 INC file didn't have all the configs listed and had to use the meProg, View, Configuration screen to set the configs from before flashing the device.

How were you able to send the program to your 16F913? Are you using Microcode Studio or something else. My "chip listing" for the 16F series only goes up to 16F88 on the non-pro version 3.0.0.5 and the same for the MCS Pro version. Is there something wrong on my end or does MCS not support this 16F913 series chip. I upgraded to PBP 2.6 just because it had this chip that I have to use!

Frank :)

LinkMTech
- 17th April 2010, 23:45
I use MicroCode Studio PBP 2.47 with the MPASM compiler. It supports the 16F913 found in the drop down box.