Sida 1 av 1

Varför fungerar det inte när jag jordar RA3 PIC16F690 *LÖST*

Postat: 18 november 2013, 20:12:49
av Melkutt
Ursäkta för den dåliga rubriken, visste inte hur jag skulle formulera mig :doh:

Nu är det så att jag har rotat fram mitt gamla PICkit2 för att försöka mig på att bemästar lite PIC programmering efter att jag har lallat med arduino i ett år eller två.

jag använder utvecklingskortet som medföljer vid ett PICkit2 startpaket 73-344-18
Jag använder MPLAB X och XC8 (inte för att jag tror att det har någon betydelse.)

Lite kod innan jag börjar skriva för mycket.

Kod: Markera allt

#include <xc.h>

// CONFIG
#pragma config FOSC = INTRCIO   // Oscillator Selection bits
#pragma config WDTE = OFF       // Watchdog Timer Enable bit
#pragma config PWRTE = OFF      // Power-up Timer Enable bit
#pragma config MCLRE = OFF     // MCLR Pin Function Select bit
#pragma config CP = OFF         // Code Protection bit
#pragma config CPD = OFF        // Data Code Protection bit
#pragma config BOREN = OFF       // Brown-out Reset Selection bits
#pragma config IESO = ON        // Internal External Switchover bit
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enabled bit

main()
{
    ANSEL = 0;                          //A/D port off
    CM1CON0 = 0;                     //Comparator 1 OFF
    CM2CON0 = 0;                     //Comparator 2 OFF

    PORTC = 0x00;                    //Clear PortC I/O Outputs
    TRISC = 0x00;                     //All PortC outputs
    TRISA = 0xFF;                     //All PortA Inputs

    while(1==1)                        //Loop forever
    {
     if (RA3 == 0)                      //Test if RA3 is low
        {
        RC0 = 0;                         //If RA3 is low RC0 toggels every 100k clockcykels
        _delay(100000);              
        RC0 = 1;
        _delay(100000);
        }
     else
        {
        RC0 = 1;                        //If RA3 is high RC0 goes high
        }
    }
}
Liten snabb förklaring av programmet (om det ens behövs)
När RA3 är låg/jordad så skall RC0 skifta mellan låg/hög var 100k klockcykel, men om RA3 är hög via en 10k pull-up resistor så skall RC3 vara konstant hög/5v.

Funkar klockrent om jag byter till tex port RA2 som ingång.
Har även kopplat upp detta på breadboard med samma fenomen.

Är orolig att det när något skumt med porgrameraren för när jag tar bort vpp kabeln (nr1) så fungerar programmet som det är tänkt sig.
Eller kan jag ha missat någon vital inställning i MPLAB X?
För visst skall man kunna ha programmeringsenheten inkopplat samtidigt?
Med tanke på att brytaren som sitter på experimentkortet är kopplad till RA3 med en 10k pull-up resistor och en 1k strömbegränsnings resistor.

Edit: Länkade visst fel till Elfa.

Re: Varför fungerar det inte när jag jordar RA3 PIC16F690

Postat: 18 november 2013, 20:34:00
av danwi
Det är toklänge sedan jag använde PIC men... När jag kollar datablad och schema för kortet enligt ELFA-länken så framgår det att RA3 används även för VPP/MCLR och är kopplad till programmeraren. Den lär väl helt enkelt drivas därifrån!

Re: Varför fungerar det inte när jag jordar RA3 PIC16F690

Postat: 18 november 2013, 20:38:46
av 90kar08
RA3 är ju samma pinne som MCLR och det kan ju hända att programmeraren håller den låg för att göra reset, leta efter nån inställning för att sätta MCLR i tristate-läge.

Re: Varför fungerar det inte när jag jordar RA3 PIC16F690

Postat: 18 november 2013, 20:49:20
av void

Re: Varför fungerar det inte när jag jordar RA3 PIC16F690

Postat: 18 november 2013, 20:56:35
av sodjan
Du måste konfigurera processorn för "internal MCLR" om du vill
använda RA3 som vanlig I/O pinne. Annars är den helt enkelt MCLR.

It's in the datasheet... :-)

Se till att du har läst på om andra konsekvenser av att köra med
"internal MCLR", om du är osäker, låt helt enkelt bara bli...

Att enbart ställa in PICkit2 för att inte driva MCLR aktivt, är inte
detsamma som "internal MCLR" och det kommer inte att göra
att du kan köra RA3 som I/O pinne. För det krävs även
omkonfigurering av processorn för "internal MCLR"...

Re: Varför fungerar det inte när jag jordar RA3 PIC16F690

Postat: 18 november 2013, 20:57:58
av TomasL
To change the MPLAB behavior to work like the PICkit 2 Software, so the MCLR is tri-stated instead of driven high, select Programmer > Settings and on the "settings" tab, check the '3-State on "Release from Reset"' box.

Re: Varför fungerar det inte när jag jordar RA3 PIC16F690

Postat: 18 november 2013, 21:14:28
av 90kar08
Sodjan: Det har han ju gjort:

Kod: Markera allt

#pragma config MCLRE = OFF     // MCLR Pin Function Select bit

Re: Varför fungerar det inte när jag jordar RA3 PIC16F690

Postat: 18 november 2013, 21:24:09
av Melkutt
Hoj hopp, här har det trillat in en massa svar, det tackar man för :tumupp:

Är helt med på att vpp är kopplad på port/pinne RA3, där av att jag funderade på om det var programeraren som var kass.

Men det visade sig att det var (inte helt förvånad) skit bakom spakarna :)
Stämde mycket bra med vad TomasL citerade!
Var bara att bocka för rutan '3-State on "Release from Reset"' sen så fungerade det.

Skall fortsätta traggla mera C nu, ett stort tack till alla inblandade!

Re: Varför fungerar det inte när jag jordar RA3 PIC16F690

Postat: 18 november 2013, 21:25:37
av sodjan
Shit, skulle ha läst bättre, jag kollar på TV istället...
Ja, det är ju helt klart att PICkit2 stör och att
det är där man ska söka lösningen. Sorry...