Har problem att ändra output på PORTC

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
OnkelF
Inlägg: 86
Blev medlem: 19 september 2008, 21:11:07
Ort: Stockholm

Har problem att ändra output på PORTC

Inlägg av OnkelF »

Hej.

Tänkte prova på pic18 så jag har köpte ett antal pic18f14k50.
Började med att blinka en LED men får det inte att funka precis som jag vill. Har fattat att det är LATC som gäller för output på pic18.
Om jag skriver till en specifik pinne fungerar det men inte om jag försöker sätta om hela porten.
Om jag sätter om porten så lyser dioden hela tiden men flimrar till när den ska släckas.
Kod:

Kod: Markera allt

#include <stdio.h>
#include <stdlib.h>
#include <delays.h>



// PIC18F14K50 Configuration Bit Settings

#include <xc.h>

//#pragma config CONFIG1L = 0x0
__CONFIG(1, CPUDIV_NOCLKDIV & USBDIV_OFF);
//#pragma config CONFIG1H = 0x28
__CONFIG(2, FOSC_IRC & PLLEN_OFF & PCLKEN_ON & FCMEN_OFF & IESO_OFF);
//#pragma config CONFIG2L = 0x3F
__CONFIG(3, PWRTEN_OFF & BOREN_SBORDIS & BORV_19);
//#pragma config CONFIG2H = 0x1E
__CONFIG(4, WDTEN_OFF & WDTPS_32768);
//#pragma config CONFIG3H = 0x88
__CONFIG(5, HFOFST_ON & MCLRE_ON);
//#pragma config CONFIG4L = 0x85
__CONFIG(6, STVREN_ON & LVP_ON & BBSIZ_OFF & XINST_OFF);
//#pragma config CONFIG5L = 0x3
__CONFIG(7, CP0_OFF & CP1_OFF);
//#pragma config CONFIG5H = 0xC0
__CONFIG(8, CPB_OFF & CPD_OFF);
//#pragma config CONFIG6L = 0x3
__CONFIG(9, WRT0_OFF & WRT1_OFF);
//#pragma config CONFIG6H = 0xE0
__CONFIG(10, WRTC_OFF & WRTB_OFF & WRTD_OFF);
//#pragma config CONFIG7L = 0x3
__CONFIG(11, EBTR0_OFF & EBTR1_OFF);
//#pragma config CONFIG7H = 0x40
__CONFIG(12, EBTRB_OFF);

void init()
{
    TRISC = 0x0; // All output
    LATC = 0; // Clear PORTC output latch.
    ANSEL = 0; // All analog inputs are disabled and made digital.
    ANSELH = 0;
}

int main(int argc, char** argv) {
    init();
    while (1) 
    {
        LATCbits.LATC7 = 1;
        //LATC = 0x0;
        Delay10KTCYx(25);
        LATCbits.LATC7 = 0;
        //LATC = 0xff;
        Delay10KTCYx(25);
    }
    return (EXIT_SUCCESS);
}
Följande kod fungerar.
Om man kommenterar ut LATSbits och avkommenterar LATC så fungerar det inte.
Nån som har nåt förslag?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46920
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Har problem att ändra output på PORTC

Inlägg av TomasL »

Kompilator och IDE?
Olika kompilatorer och IDE har olika syntax.
OnkelF
Inlägg: 86
Blev medlem: 19 september 2008, 21:11:07
Ort: Stockholm

Re: Har problem att ändra output på PORTC

Inlägg av OnkelF »

Kompilatorn är XC8 v1.10 och IDEn är MPLAB 1.3

EDIT: Har en LED (med motstånd) kopplad till RC7. De andra pinnarna är inte anslutna.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46920
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Har problem att ändra output på PORTC

Inlägg av TomasL »

Ok, så du kör MPLAB-X och XC.
Va´d jag kan se saknar du inclidefilerna för processorn i fråga, dock använder inte den verktygskedjan utan vanliga MPLAB, där behövs en include
p16xxx.h eller nått sånt.
OnkelF
Inlägg: 86
Blev medlem: 19 september 2008, 21:11:07
Ort: Stockholm

Re: Har problem att ändra output på PORTC

Inlägg av OnkelF »

Jag inkluderar xc.h. Via en kedja (xc.h->htc.h->pic18h->pic18_chip_select.h) så inkluderas pic18f14k50.h
Skulle tro att IDE:n skickar med vilken pic man använder så att rätt väljs.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Har problem att ändra output på PORTC

Inlägg av sodjan »

> Om man kommenterar ut LATSbits och avkommenterar LATC så fungerar det inte.
> Nån som har nåt förslag?

Vad blir det för skillnad i ASM listan ??
OnkelF
Inlägg: 86
Blev medlem: 19 september 2008, 21:11:07
Ort: Stockholm

Re: Har problem att ändra output på PORTC

Inlägg av OnkelF »

Funkar:

Kod: Markera allt

!int main(int argc, char** argv) {
!    init();
0x3FD6: CALL 0x3FBE, 0
0x3FD8: NOP
0x3FDA: BRA 0x3FDC
!    while (1)
0x3FFA: BRA 0x3FDC
!    {
!        LATCbits.LATC7 = 1;
0x3FDC: BSF LATC, 7, ACCESS
!//        LATC = 0x0;
!        Delay10KTCYx(25);
0x3FDE: MOVWF 0x8, ACCESS
0x3FE0: MOVLW 0x19
0x3FE2: MOVWF unit, ACCESS
0x3FE4: MOVF 0x8, W, ACCESS
0x3FE6: CALL 0x3FA6, 0
0x3FE8: NOP
!        LATCbits.LATC7 = 0;
0x3FEA: BCF LATC, 7, ACCESS
!        //LATC = 0xff;
!        Delay10KTCYx(25);
0x3FEC: MOVWF 0x8, ACCESS
0x3FEE: MOVLW 0x19
0x3FF0: MOVWF unit, ACCESS
0x3FF2: MOVF 0x8, W, ACCESS
0x3FF4: CALL 0x3FA6, 0
0x3FF6: NOP
0x3FF8: BRA 0x3FDC
!    }
!    return (EXIT_SUCCESS);
!}
0x3FFC: GOTO 0x0
Funkar inte:

Kod: Markera allt

!int main(int argc, char** argv) {
!    init();
0x3FD4: CALL 0x3FBC, 0
0x3FD6: NOP
0x3FD8: BRA 0x3FDA
!    while (1)
0x3FFA: BRA 0x3FDA
!    {
!//        LATCbits.LATC7 = 1;
!        LATC = 0x0;
0x3FDA: MOVLW 0x0
0x3FDC: MOVWF LATC, ACCESS
!        Delay10KTCYx(25);
0x3FDE: MOVWF 0x8, ACCESS
0x3FE0: MOVLW 0x19
0x3FE2: MOVWF unit, ACCESS
0x3FE4: MOVF 0x8, W, ACCESS
0x3FE6: CALL 0x3FA4, 0
0x3FE8: NOP
!//        LATCbits.LATC7 = 0;
!        LATC = 0xff;
0x3FEA: SETF LATC, ACCESS
!        Delay10KTCYx(25);
0x3FEC: MOVWF 0x8, ACCESS
0x3FEE: MOVLW 0x19
0x3FF0: MOVWF unit, ACCESS
0x3FF2: MOVF 0x8, W, ACCESS
0x3FF4: CALL 0x3FA4, 0
0x3FF6: NOP
0x3FF8: BRA 0x3FDA
!    }
!    return (EXIT_SUCCESS);
!}
0x3FFC: GOTO 0x0

sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Har problem att ändra output på PORTC

Inlägg av sodjan »

Inget direkt uppenbart.
Dock undrar jag varför kompilatorn inte översätter
"LATC = 0x0;" med en "CLRF LATC, ACCESS" istället
för att ta omvägen över att ladda 0x0 till W...
Allså :

Kod: Markera allt

!        LATC = 0x0;
0x3FDA: CLRF LATC, ACCESS
!        Delay10KTCYx(25);
istället för :

Kod: Markera allt

!        LATC = 0x0;
0x3FDA: MOVLW 0x0
0x3FDC: MOVWF LATC, ACCESS
!        Delay10KTCYx(25);
I det andra fallet så använder den ju SETF...

Men som sagt, inget uppenbart som ger de symptom (eller i
alla fall min tolkning av dina symptom) som du beskriver.
OnkelF
Inlägg: 86
Blev medlem: 19 september 2008, 21:11:07
Ort: Stockholm

Re: Har problem att ändra output på PORTC

Inlägg av OnkelF »

Har hittat vad som händer nu.
Det är att den startar om när jag sätter alla pinnar höga (LATC = 0xFF;).
Hur kommer det sig? Alla pinnar är flytande förutom den som går till LEDen.
Kanske får ta fram oscilloskopen och se om min strömkälla inte pallar omslaget.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Har problem att ändra output på PORTC

Inlägg av sodjan »

Har du några öppna (d.v.s oanslutna) ingångar?
Det kan ge skumma fel. Sätt alla "flytande" (om det
nu alltså betyder oanslutna) pinnar som utgångar.
Användarvisningsbild
Icecap
Inlägg: 26629
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Har problem att ändra output på PORTC

Inlägg av Icecap »

Är spänningsmatningen avkopplat ordentligt?
Är alla oanvända portpinnar ställd som utgång?
Är alla ingångar kopplat till något?
OnkelF
Inlägg: 86
Blev medlem: 19 september 2008, 21:11:07
Ort: Stockholm

Re: Har problem att ändra output på PORTC

Inlägg av OnkelF »

Har ställt om alla portar till utgångar, bytt strömkälla och satt dit 400nF mellan VUSB och jord men problemen kvarstår.
Jag skrivit om koden lite och testar alla pinnar.
Jag får bara problem om jag sätter pinne RC4 och RC6 höga, inte om jag jag bara sätter en av dem.
Ska testa ett nytt chip i morgon även om jag inte tror att det är fel på processorn.
ghu
Inlägg: 698
Blev medlem: 6 juni 2010, 14:28:18

Re: Har problem att ändra output på PORTC

Inlägg av ghu »

Det verkar vara PGM pinnen som ger problem.
Ändra i config så att LVP är avstängd eller jorda PGM-pinnen med ett 10 kohms motstånd.
__CONFIG(6, STVREN_ON & LVP_ON & BBSIZ_OFF & XINST_OFF);
OnkelF
Inlägg: 86
Blev medlem: 19 september 2008, 21:11:07
Ort: Stockholm

Re: Har problem att ändra output på PORTC

Inlägg av OnkelF »

Nu funkar det!
Tack för svaren!
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Har problem att ändra output på PORTC

Inlägg av sodjan »

Jaha !?
Förbannat dålig beskrivning av vad problemet var! :roll:
Skriv svar