Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

PIC PortA and PortB not working the same.

Status
Not open for further replies.

Nigel Goodwin

Super Moderator
Most Helpful Member
I'm using a PIC18F27K42, and part of the project requires an audio indication (beep), originally I had a piezo sounder across RA2 and RA3, bridged to make it louder. This worked perfectly well, but I was running low on I/O so thought - I'll move the piezo to RB6/RB7 instead (the ICSP pins) - and added header pins so I could connect or disconnect the piezo in case it wouldn't program with it there (and it wouldn't).

But, when I connect the piezo in circuit and the beep is called it makes a click and everything just locks up.

I've cured it by adding a 220 ohm resistor in series with the piezo, which also allows the ICSP to work - but I can't see any difference between PortA and PortB pins, so has anyone any ideas?. Doesn't really matter, because I've cured the issue - but I'm just puzzled about it?.

If anyone is interested?, I generate the 'beep' with a timer interrupt, set by this line:

Set_Beep(3, 100);

The 3 is one of a number of preset frequencies, done that way so I can alter the frequencies of a particular 'beep' all in one go (just alter the timer value that 3 refers to), and the 100 is the time of the beep in mS - you just call the routine and it runs transparently in the background.
 
Are you doing this with the ICSP connected?
Most programmers have a 4.7K pulldown on the ICSP clk and data lines.

Are you changing the PORTx reg or the LATx reg settings?
Show the couple of lines that twiddle the RB6/RB7 pins so we can see how you're doing it.
 
Are you doing this with the ICSP connected?
Most programmers have a 4.7K pulldown on the ICSP clk and data lines.

Are you changing the PORTx reg or the LATx reg settings?
Show the couple of lines that twiddle the RB6/RB7 pins so we can see how you're doing it.

No, I unplug the programmer once it's programmed.

I use LATx, as below:

C:
// section from setup
#define TONE            LATBbits.LATB6      // output pin for beep
#define TONE2           LATBbits.LATB7      // output pin for bridged beep

// section from ISR
else if (PIR4bits.TMR1IF)
    {
        if (beep)
        {
            TONE = !TONE;
            TONE2 = !TONE;      // for louder bridged output
        }   
            else   
        {       
            TONE = 0;
            TONE2 = 0;
        }
        TMR1_WriteTimer(timer1ReloadVal);
        PIR4bits.TMR1IF = 0; /* Clear Flag */
    }
 
Code:
#define TONE            LATBbits.LATB6      // output pin for beep
#define TONE2           LATBbits.LATB7      // output pin for bridged beep

 TONE = !TONE;
 TONE2 = !TONE;      // for louder bridged output
There's going to be a short amount of time where the IO pins are fighting each other, depending on what the compiler generates for that, and with XC8 it's quite a few instructions.

If you want them to toggle at the same time try something like:
Code:
LATB ^= 0xc0;

Electrically, all of those IO pins are spec'd the same so I can't see a difference from that end of things. I guess it just didn't like the direct load from the piezo for whatever reason.
 
OH I see.... I haven't used MPLABX for some time... They have a menu for debug and a menu for production.... The little hammer icon has a dropdown menu...
Just had a luck, it still does :D

Debug is the second option down, the third one is Pro Comparison - presumably trying to sell you the expensive Pro compiler?.
 
Remember! I have the pro version so Debug and production compile the same.. But I hardly ever use the programming pins, so I don't worry about that... I also don't use MPLAB, I use VSM inside Labcenter...
That has the button DEBUG / RELEASE...
 
Status
Not open for further replies.

Latest threads

New Articles From Microcontroller Tips

Back
Top