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

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Melkutt
Inlägg: 1188
Blev medlem: 3 september 2007, 02:02:39
Ort: Gotland/Stånga
Kontakt:

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

Inlägg 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.
Senast redigerad av Melkutt 18 november 2013, 21:24:29, redigerad totalt 1 gång.
danwi
Inlägg: 386
Blev medlem: 16 oktober 2008, 17:00:59
Ort: Linköping

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

Inlägg 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!
Användarvisningsbild
90kar08
Inlägg: 1602
Blev medlem: 3 september 2009, 15:27:45
Ort: Staffanstorp

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

Inlägg 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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg 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"...
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46976
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

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

Inlägg 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.
Användarvisningsbild
90kar08
Inlägg: 1602
Blev medlem: 3 september 2009, 15:27:45
Ort: Staffanstorp

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

Inlägg av 90kar08 »

Sodjan: Det har han ju gjort:

Kod: Markera allt

#pragma config MCLRE = OFF     // MCLR Pin Function Select bit
Användarvisningsbild
Melkutt
Inlägg: 1188
Blev medlem: 3 september 2007, 02:02:39
Ort: Gotland/Stånga
Kontakt:

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

Inlägg 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!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

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

Inlägg 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...
Skriv svar