c - How to configure correctly a PIC18 port D for output direction? -


i'm developing firmware control pic18f45k80 pinout on customized board. before loading , programming pic final version testing program/debug environment (mplabx ide + pickit3) simplest user code: toggle portd outputs 50 ms period.

3 pins of them works propperly (rd6, rd5, rd4) it's not case of rd3 , r2. have no signal, never turn on. pin stills 0 execution time. pins configured , activated same way @ same time, can see in next code:

main.c file:

//c libraries #include <stdio.h> #include <stdint.h> #include <stdbool.h>  #include <pic18f45k80.h> #include "18f45k80_mainconfig.h" #include <xc.h>   //application dependent libraries  #include "gold_whyl_task.h"   /*outputs defines*/  #define cadenza     portdbits.rd2 //problem bit  #define capw        portdbits.rd3 //problem bit  #define freqfissa   portdbits.rd4  #define fissawail   portdbits.rd5  #define comciclosir portdbits.rd6   /*inputs - debug*/  #define pgc         portbbits.rb6  #define pgd         portbbits.rb7   int main()    {      trisdbits.trisd0=1;//input activacion      trisdbits.trisd1=1;//input clacson       trisbbits.trisb6=1;//pdg     trisbbits.trisb7=1;//pdc      /*outputs*/        trisdbits.trisd2=0;//output cadenza //problem     trisdbits.trisd3=0;//output capw  //problem      trisdbits.trisd4=0;//output freqfija        trisdbits.trisd5=0;//output fijawail      trisdbits.trisd6=0;//output comciclosir         while(1)       {              comciclosir=0;             fissawail=0;             capw=0;             cadenza=0;             freqfissa=0;              __delay_ms(50);             comciclosir=1;             fissawail=1;             capw=1; //this assignment has no effect --> stills 0             cadenza=1;//this assignment has no effect--> stills 0                  freqfissa=1;             __delay_ms(50);       }  } 

what can happening? there wrong defines, port configuration, etc?

you should check datasheet

your mcu has a/d port and, unfortunately you, default uses rd2 , rd3.

you can see @ page 364, adcon1 reg enables pins analog.

enter image description here

at page 92 can see configuration @ adcon1 register @ startup: -111 1111

enter image description here

this means @ powerup/browout/wdt/reste... rd2 , rd3 set analog inputs.

you must disable pins a/d converter use pins i/o.

i don't have microchip sdk must

adcon1 &= 0x9f; 

to set bit 6 , bit 5 0 , enable rd2 , rd3 i/o


Comments

Popular posts from this blog

inversion of control - Autofac named registration constructor injection -

verilog - Systemverilog dynamic casting issues -

ios - Change Storyboard View using Seague -