View previous topic :: View next topic |
Author |
Message |
spradecom.rnd
Joined: 27 Apr 2010 Posts: 16 Location: Mumbai
|
Problem with PIC10f222 |
Posted: Tue Apr 27, 2010 7:40 am |
|
|
I am not able to program pic10f222. The code is properly compiled with zero warning and error. But I am not getting the desired results. All the pins except the Gnd remains high. Even toggling any pin doesn't work. Even I cannot make any output pin low. Here is the code. I am using ccs v4.088. Please help.
Code: |
#include <10F222.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOMCPU //Master Clear Pull-up disabled
#FUSES IOSC4 //INTOSC speed 4 MHz
#use delay(clock=4000000)
#include "C:\Documents and Settings\Administrator\My Documents\iotest\main.h"
void main()
{
setup_adc_ports(NO_ANALOGS);
//setup_adc(false);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
// TODO: USER CODE!!
while(true)
{
output_high(PIN_B0);
delay_ms(50);
output_low(PIN_B0);
delay_ms(50);
}
} |
|
|
|
SherpaDoug
Joined: 07 Sep 2003 Posts: 1640 Location: Cape Cod Mass USA
|
|
Posted: Tue Apr 27, 2010 11:48 am |
|
|
What hardware are you using to program the PIC? _________________ The search for better is endless. Instead simply find very good and get the job done. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Apr 27, 2010 3:06 pm |
|
|
Try this program. It should blink an LED on pin B0.
Code: |
#include <10F222.H>
#fuses IOSC4,NOWDT,NOMCLR
#use delay(clock=4000000)
#define set_options(value) {#ASM \
MOVLW value \
OPTION \
#ENDASM}
//=========================
void main()
{
set_options(0xDF); // Enable pin B2 for normal i/o
setup_adc_ports(NO_ANALOGS);
while(1)
{
output_high(PIN_B0);
delay_ms(500);
output_low(PIN_B0);
delay_ms(500);
}
} |
|
|
|
spradecom.rnd
Joined: 27 Apr 2010 Posts: 16 Location: Mumbai
|
|
Posted: Tue Apr 27, 2010 9:55 pm |
|
|
I am using ICD-2 |
|
|
spradecom.rnd
Joined: 27 Apr 2010 Posts: 16 Location: Mumbai
|
|
Posted: Tue Apr 27, 2010 10:20 pm |
|
|
even trying set_options(value) code doesnt work. what to do please help |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Apr 27, 2010 11:10 pm |
|
|
I tested it with vs. 4.073, which is the free version of PCB that comes with
MPLAB 4.086. I used an ICD2 to program it.
What happens if you compile my test program, program the PIC, and
then use the ICD2 to do a Verify operation. Does it verify OK ?
After you finish programming the PIC, do you click on the "Release from
Reset" button in MPLAB ? This will allow the PIC to run. However, since
Pin B0 is also used by the ICD2 for ICSP Data, you should disconnect
the ICD2 from the 10F222 board in order to run the test.
If that doesn't help, then compile the program that I posted with your
version (v4.088), and post the .LST file. |
|
|
spradecom.rnd
Joined: 27 Apr 2010 Posts: 16 Location: Mumbai
|
|
Posted: Tue Apr 27, 2010 11:24 pm |
|
|
I tried to program. but the same result. Here is the list file
Code: |
CCS PCB C Compiler, Version 4.084, 36728 28-Apr-10 10:54
Filename: main.lst
ROM used: 49 words (10%)
Largest free fragment is 463
RAM used: 4 (17%) at main() level
5 (22%) worst case
Stack: 1 locations
*
0000: MOVWF 05
0001: GOTO 015
0002: GOTO 003
.................... #include "C:\Documents and Settings\Administrator\My Documents\iotest\main.h"
.................... #include <10F222.h>
.................... //////// Standard Header file for the PIC10F222 device ////////////////
.................... #device PIC10F222
.................... #list
....................
.................... #FUSES IOSC4 //INTOSC speed 4MHz
.................... #device adc=8
....................
.................... #FUSES NOWDT //No Watch Dog Timer
.................... #FUSES MCLR //Master Clear pin enabled
.................... #FUSES NOPROTECT //Code not protected from reading
.................... #FUSES NOMCPU //Master Clear Pull-up disabled
....................
....................
.................... #use delay(clock=4000000)
*
0003: MOVF 0D,W
0004: BTFSC 03.2
0005: GOTO 014
0006: MOVLW 01
0007: MOVWF 0A
0008: CLRF 09
0009: DECFSZ 09,F
000A: GOTO 009
000B: DECFSZ 0A,F
000C: GOTO 008
000D: MOVLW 4A
000E: MOVWF 09
000F: DECFSZ 09,F
0010: GOTO 00F
0011: GOTO 012
0012: DECFSZ 0D,F
0013: GOTO 006
0014: RETLW 00
....................
....................
....................
....................
.................... /*
.................... #byte MCU_INDF = 0x000
.................... #byte MCU_TMR0 = 0x001
.................... #byte MCU_PCL = 0x002
.................... #byte MCU_STATUS = 0x003
.................... #bit MCU_DC = MCU_STATUS.1
.................... #bit MCU_PD = MCU_STATUS.3
.................... #bit MCU_TO = MCU_STATUS.4
.................... #bit MCU_GPWUF = MCU_STATUS.7
.................... #byte MCU_FSR = 0x004
.................... #byte MCU_OSCCAL = 0x005
.................... #bit MCU_FOSC4 = MCU_OSCCAL.0
.................... #bit MCU_CAL0 = MCU_OSCCAL.1
.................... #bit MCU_CAL1 = MCU_OSCCAL.2
.................... #bit MCU_CAL2 = MCU_OSCCAL.3
.................... #bit MCU_CAL3 = MCU_OSCCAL.4
.................... #bit MCU_CAL4 = MCU_OSCCAL.5
.................... #bit MCU_CAL5 = MCU_OSCCAL.6
.................... #bit MCU_CAL6 = MCU_OSCCAL.7
.................... #byte MCU_GPIO = 0x006
.................... #bit MCU_GPIO0 = MCU_GPIO.0
.................... #bit MCU_GPIO1 = MCU_GPIO.1
.................... #bit MCU_GPIO2 = MCU_GPIO.2
.................... #bit MCU_GPIO3 = MCU_GPIO.3
.................... #byte MCU_ADCON0 = 0x007
.................... #bit MCU_ADON = MCU_ADCON0.0
.................... #bit MCU_GO = MCU_ADCON0.1
.................... #bit MCU_CHS0 = MCU_ADCON0.2
.................... #bit MCU_CHS1 = MCU_ADCON0.3
.................... #bit MCU_ANS0 = MCU_ADCON0.6
.................... #bit MCU_ANS1 = MCU_ADCON0.7
.................... #byte MCU_ADRES = 0x008
....................
....................
.................... */
....................
....................
.................... #define set_options(value){#ASM \
.................... MOVLW value \
.................... OPTION \
.................... #ENDASM}
....................
.................... void main()
.................... {
0015: CLRF 04
.................... set_options(0xDF);
*
0018: MOVLW DF
0019: OPTION
.................... setup_adc_ports(NO_ANALOGS);
001A: BCF 07.6
001B: BCF 07.7
....................
.................... // TODO: USER CODE!!
....................
.................... while(true)
.................... {
.................... output_high(PIN_B0);
001C: BCF 0B.0
001D: MOVF 0B,W
001E: TRIS 6
001F: BSF 06.0
....................
.................... delay_ms(500);
0020: MOVLW 02
0021: MOVWF 0C
0022: MOVLW FA
0023: MOVWF 0D
0024: CALL 003
0025: DECFSZ 0C,F
0026: GOTO 022
.................... output_low(PIN_B0);
0027: BCF 0B.0
0028: MOVF 0B,W
0029: TRIS 6
002A: BCF 06.0
....................
.................... delay_ms(500);
002B: MOVLW 02
002C: MOVWF 0C
002D: MOVLW FA
002E: MOVWF 0D
002F: CALL 003
0030: DECFSZ 0C,F
0031: GOTO 02D
.................... }
0032: GOTO 01C
....................
.................... }
0033: SLEEP
Configuration Fuses:
Word 1: 0FFA MCLR NOPROTECT NOWDT NOMCPU IOSC4 |
|
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Apr 27, 2010 11:48 pm |
|
|
I notice you changed the #fuses to enable MCLR. Do you have a 10K
resistor on the MCLR pin ? You need one.
The symptoms you described would possibly occur if the PIC was held
in reset. With MCLR enabled, I wonder if you're missing the 10K pull-up
on the MCLR pin ? |
|
|
spradecom.rnd
Joined: 27 Apr 2010 Posts: 16 Location: Mumbai
|
|
Posted: Wed Apr 28, 2010 12:20 am |
|
|
I have changed the code . This is the new lst file.Even then it is not working.
I have also replaced the IC.and checked.Everytime all the pins except GND(Pin no2) shows high. I tried the same code of reading analog from pot and changing output in PIC12F675. It is working fine. I am not able to figure out why the code is not working with pic10f222.
Code: | CCS PCB C Compiler, Version 4.084, 36728 28-Apr-10 11:46
Filename: main.lst
ROM used: 49 words (10%)
Largest free fragment is 463
RAM used: 4 (17%) at main() level
5 (22%) worst case
Stack: 1 locations
*
0000: MOVWF 05
0001: GOTO 015
0002: GOTO 003
.................... #include "C:\Documents and Settings\Administrator\My Documents\iotest\main.h"
.................... #include <10F222.h>
.................... //////// Standard Header file for the PIC10F222 device ////////////////
.................... #device PIC10F222
.................... #list
....................
.................... #device adc=8
....................
.................... #FUSES NOWDT //No Watch Dog Timer
.................... #FUSES NOMCLR //Master Clear pin used for I/O
.................... #FUSES NOPROTECT //Code not protected from reading
.................... #FUSES NOMCPU //Master Clear Pull-up disabled
.................... #FUSES IOSC4 //INTOSC speed 4 MHz
....................
.................... #use delay(clock=4000000)
*
0003: MOVF 0D,W
0004: BTFSC 03.2
0005: GOTO 014
0006: MOVLW 01
0007: MOVWF 0A
0008: CLRF 09
0009: DECFSZ 09,F
000A: GOTO 009
000B: DECFSZ 0A,F
000C: GOTO 008
000D: MOVLW 4A
000E: MOVWF 09
000F: DECFSZ 09,F
0010: GOTO 00F
0011: GOTO 012
0012: DECFSZ 0D,F
0013: GOTO 006
0014: RETLW 00
....................
....................
....................
.................... #define set_options(value) {#ASM \
.................... MOVLW value \
.................... OPTION \
.................... #ENDASM}
....................
.................... void main()
.................... {
0015: CLRF 04
.................... set_options(0xDF); // Enable pin B2 for normal i/o
*
0018: MOVLW DF
0019: OPTION
.................... setup_adc_ports(NO_ANALOGS);
001A: BCF 07.6
001B: BCF 07.7
.................... // TODO: USER CODE!!
.................... while(true)
.................... {
.................... output_high(PIN_B0);
001C: BCF 0B.0
001D: MOVF 0B,W
001E: TRIS 6
001F: BSF 06.0
....................
.................... delay_ms(500);
0020: MOVLW 02
0021: MOVWF 0C
0022: MOVLW FA
0023: MOVWF 0D
0024: CALL 003
0025: DECFSZ 0C,F
0026: GOTO 022
.................... output_low(PIN_B0);
0027: BCF 0B.0
0028: MOVF 0B,W
0029: TRIS 6
002A: BCF 06.0
....................
.................... delay_ms(500);
002B: MOVLW 02
002C: MOVWF 0C
002D: MOVLW FA
002E: MOVWF 0D
002F: CALL 003
0030: DECFSZ 0C,F
0031: GOTO 02D
.................... }
0032: GOTO 01C
....................
.................... }
0033: SLEEP
Configuration Fuses:
Word 1: 0FEA NOMCLR NOPROTECT NOWDT NOMCPU IOSC4 |
|
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Apr 28, 2010 12:29 am |
|
|
What is the Vdd voltage on the PIC ? |
|
|
spradecom.rnd
Joined: 27 Apr 2010 Posts: 16 Location: Mumbai
|
|
Posted: Wed Apr 28, 2010 12:40 am |
|
|
5.05V output from 7805. The IC is PIC10F222 E/OT 6-pin sot-23 |
|
|
spradecom.rnd
Joined: 27 Apr 2010 Posts: 16 Location: Mumbai
|
|
Posted: Wed Apr 28, 2010 1:04 am |
|
|
Sir,
can you send a hex file for the program you build which toggles LED at pin 1. email id - [email protected]
If your hex works then there is problem in the compiler or our hardware set up. If your HEX doesnt work then our ICs are faulty |
|
|
spradecom.rnd
Joined: 27 Apr 2010 Posts: 16 Location: Mumbai
|
|
Posted: Wed Apr 28, 2010 1:16 am |
|
|
thank you very much sir, now changing ic and removing holding from reset worked |
|
|
spradecom.rnd
Joined: 27 Apr 2010 Posts: 16 Location: Mumbai
|
|
Posted: Wed Apr 28, 2010 1:59 am |
|
|
Sir,
we are assigning AN0 as a analog input. But it always remains high. Is it that the ICSPDAT pin is continuous high. What steps to do to work pin no 1 as analog input after programming ?
Code: |
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOMCPU //Master Clear Pull-up disabled
#FUSES IOSC4 //INTOSC speed 4 MHz
#use delay(clock=4000000)
unsigned int8 value ;
void main()
{
setup_adc_ports(sAN0);
setup_adc(true);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
// TODO: USER CODE!!
while(true)
{
set_adc_channel(0);
delay_ms(10);
//
value = Read_ADC();
output_high(PIN_B2);
delay_ms(value);
output_low(PIN_B2);
delay_ms(255-value);
}
} |
|
|
|
spradecom.rnd
Joined: 27 Apr 2010 Posts: 16 Location: Mumbai
|
|
Posted: Wed Apr 28, 2010 5:31 am |
|
|
The ADC value always remains high even if not input is given. the Pin shows zero voltage. then how the value in ADRESH is always high |
|
|
|