Sida 1 av 2

Pic 18f4221 LED blinkar inte

Postat: 29 oktober 2009, 15:05:53
av Pajn
Hej. Jag sitter med 1n 18f4221 framför mig som jag inte kan få att fungera.
Jag försöker köra ett enkelt LED blink program (alltid bra att börja med på nya picar)

Den programmerar jättefint men lysdioden blinkar inte. Min kod:

Kod: Markera allt

void main() {
     PORTD = 0;
     TRISD = 0;
     while(1) {
              PORTD.F2 = 0;
              Delay_ms(1000);
              PORTD.F2 = 1;
              Delay_ms(1000);
     }
}
Clock är satt till 8MHz och "INT RC-Port on RA6,Port on RA7"

och resten av config:

Kod: Markera allt

<MCU_DEVICE_FLAGS>
  <DEVICE>
    <DEVICE_NAME>SCHEME</DEVICE_NAME>
    <SETTINGS>
      <COUNT>29</COUNT>
      <SETTING0>
        <NAME>Oscillator</NAME>
        <DESCRIPTION>INT RC-Port on RA6,Port on RA7</DESCRIPTION>
      </SETTING0>
      <SETTING1>
        <NAME>Fail Safe Monitor Clock Enable</NAME>
        <DESCRIPTION>Disabled</DESCRIPTION>
      </SETTING1>
      <SETTING2>
        <NAME>Internal External Switch Over Enable</NAME>
        <DESCRIPTION>Disabled</DESCRIPTION>
      </SETTING2>
      <SETTING3>
        <NAME>Power-up Timer Enable</NAME>
        <DESCRIPTION>Disabled</DESCRIPTION>
      </SETTING3>
      <SETTING4>
        <NAME>Brown-out Reset Enable</NAME>
        <DESCRIPTION>Disabled, SBOREN Ignored</DESCRIPTION>
      </SETTING4>
      <SETTING5>
        <NAME>Brown-out Reset Voltage</NAME>
        <DESCRIPTION>2.0V</DESCRIPTION>
      </SETTING5>
      <SETTING6>
        <NAME>Watchdog Timer</NAME>
        <DESCRIPTION>Disabled-Controlled by SWDTEN bit</DESCRIPTION>
      </SETTING6>
      <SETTING7>
        <NAME>Watchdog Timer Postscale</NAME>
        <DESCRIPTION>1:32,768</DESCRIPTION>
      </SETTING7>
      <SETTING8>
        <NAME>CCP2 Mux</NAME>
        <DESCRIPTION>CCP2 I/O Muxed With RC1</DESCRIPTION>
      </SETTING8>
      <SETTING9>
        <NAME>Port B A/D Enable</NAME>
        <DESCRIPTION>Port B[4:0] Are Digital I/O on Reset</DESCRIPTION>
      </SETTING9>
      <SETTING10>
        <NAME>Low Power Timer1 Osc Enable</NAME>
        <DESCRIPTION>High Power Consumption, High Noise Immunity</DESCRIPTION>
      </SETTING10>
      <SETTING11>
        <NAME>MCLR Pin Enable</NAME>
        <DESCRIPTION>MCLR Enabled, RE3 Disabled</DESCRIPTION>
      </SETTING11>
      <SETTING12>
        <NAME>Stack Overflow Reset Enable</NAME>
        <DESCRIPTION>Enabled</DESCRIPTION>
      </SETTING12>
      <SETTING13>
        <NAME>Low Voltage Programming Enable</NAME>
        <DESCRIPTION>Enabled</DESCRIPTION>
      </SETTING13>
      <SETTING14>
        <NAME>Boot Block Size Select</NAME>
        <DESCRIPTION>256 W (256 W)</DESCRIPTION>
      </SETTING14>
      <SETTING15>
        <NAME>Extended Instruction Set Enable bit</NAME>
        <DESCRIPTION>Disabled</DESCRIPTION>
      </SETTING15>
      <SETTING16>
        <NAME>Background Debug</NAME>
        <DESCRIPTION>Disabled</DESCRIPTION>
      </SETTING16>
      <SETTING17>
        <NAME>Code Protect Block 0</NAME>
        <DESCRIPTION>Disabled</DESCRIPTION>
      </SETTING17>
      <SETTING18>
        <NAME>Code Protect Block 1</NAME>
        <DESCRIPTION>Disabled</DESCRIPTION>
      </SETTING18>
      <SETTING19>
        <NAME>Code Protect Boot</NAME>
        <DESCRIPTION>Disabled</DESCRIPTION>
      </SETTING19>
      <SETTING20>
        <NAME>Code Protect Data EEPROM</NAME>
        <DESCRIPTION>Disabled</DESCRIPTION>
      </SETTING20>
      <SETTING21>
        <NAME>Write Protect Block 0</NAME>
        <DESCRIPTION>Disabled</DESCRIPTION>
      </SETTING21>
      <SETTING22>
        <NAME>Write Protect Block 1</NAME>
        <DESCRIPTION>Disabled</DESCRIPTION>
      </SETTING22>
      <SETTING23>
        <NAME>Write Protect Config Bits</NAME>
        <DESCRIPTION>Disabled</DESCRIPTION>
      </SETTING23>
      <SETTING24>
        <NAME>Write Protect Boot Block</NAME>
        <DESCRIPTION>Disabled</DESCRIPTION>
      </SETTING24>
      <SETTING25>
        <NAME>Write Protect Data EEPROM</NAME>
        <DESCRIPTION>Disabled</DESCRIPTION>
      </SETTING25>
      <SETTING26>
        <NAME>Table Read Protect Block 0</NAME>
        <DESCRIPTION>Disabled</DESCRIPTION>
      </SETTING26>
      <SETTING27>
        <NAME>Table Read Protect Block 1</NAME>
        <DESCRIPTION>Disabled</DESCRIPTION>
      </SETTING27>
      <SETTING28>
        <NAME>Table Read Protect Boot Block</NAME>
        <DESCRIPTION>Disabled</DESCRIPTION>
      </SETTING28>
    </SETTINGS>
  </DEVICE>
</MCU_DEVICE_FLAGS>

Re: Pic 18f4221 LED blinkar inte

Postat: 29 oktober 2009, 15:11:03
av sodjan
Säkert felkopplat.

Re: Pic 18f4221 LED blinkar inte

Postat: 29 oktober 2009, 15:23:00
av bearing
Testa att skriva 0xFF till porten i början av main istället, och koppla en lysdiod mellan valfri PORTD-pinne och jord. Om den kopplas rätt, men inte lyser vet du att processorn inte kör koden. Antagligen är den då i reset.

Re: Pic 18f4221 LED blinkar inte

Postat: 29 oktober 2009, 15:25:56
av Pajn
Jag har kopplat

Kod: Markera allt

VDD - 10K - Mclr -1    40- PGD
                  |    39- PGC
                  |    38- PGM
                  |    32- VDD
                  |    31- VSS
             VDD -11   |
             VSS -12   |
                  |    21- RD2 - >| - 100R - VSS
Den lyser med

Kod: Markera allt

void main() {
     PORTD = 0;
     TRISD = 0;
     while(1) {
              PORTD.F2 = 0xFF;
     }
}

Re: Pic 18f4221 LED blinkar inte

Postat: 29 oktober 2009, 15:41:53
av bearing
Får du ingen varning för "PORTD.F2 = 0xFF;"?

Det är ju bara en bit, så den kan inte lagra värdet 0xFF. Finns risk att kompilatorn tolkar det till att sätta hela PORTD till 0xFF, och då vet du ju inte ändå inte om lysdioden sitter på rätt pinne.

Men om det nu är kopplat rätt kan det ju vara så att processorn går långsammare än vad delay-rutinerna "tror". Det skulle i så fall kunna göra att delayen blir mycket längre än en sekund. Testa att byta ut värdet till 100 ms och se om den blinkar.

Re: Pic 18f4221 LED blinkar inte

Postat: 29 oktober 2009, 15:50:43
av sodjan
> Den programmerar jättefint men lysdioden blinkar inte.

Vad gör den då ?

Re: Pic 18f4221 LED blinkar inte

Postat: 29 oktober 2009, 16:06:24
av Pajn
@bearing blev fel när jag skrev här, ska såklart vara "PORTD = 0xFF;"

@sodjan inget, iaf. vad jag kan se.

Med koden

Kod: Markera allt

void main() {
     PORTD = 0;
     TRISD = 0;
     while(1) {
              PORTD.F2 = 0;
              Delay_ms(10);
              PORTD.F2 = 1;
              Delay_ms(10);
     }

}
blinkar den lite sporadiskt (några blink, mörkt en stund, några blink osv.) samt långsamt, närmare 100ms

Re: Pic 18f4221 LED blinkar inte

Postat: 29 oktober 2009, 16:13:45
av sodjan
Har du ställt in processorns hastighet i ditt verktyg (vad det nu är) ?
Fungerar det om du gör samma sak i assembler ?
Hur fungerar det i MPLAB/SIM (om det går att köra där...) ?

Re: Pic 18f4221 LED blinkar inte

Postat: 29 oktober 2009, 16:24:05
av bearing
Det är ju lite skumt att den blinkar sporadiskt. Det skulle kunna bero på att programräknaren hamnar på någon slumpvis position där ingen kod finns, utan bara ettor, vilket betyder NOP, tror jag. Den kör då genom hela programminnet och börjar om från början (tror jag). Kan också vara att den resettar sporadiskt.

Re: Pic 18f4221 LED blinkar inte

Postat: 29 oktober 2009, 16:34:08
av sodjan
Det vanligaste är att WDT är "på".
Om det är så här nu kan jag inte avgöra.

Re: Pic 18f4221 LED blinkar inte

Postat: 29 oktober 2009, 17:29:08
av Pajn
Jag ändrade lite config bitar "Stack Overflow Reset" till off och "low voltage programming" till off och nu funkar det nästan.
Bara det att det går för långsamt Delay_ms(10); blir i verkligheten en paus på 100ms och Delay_ms(1000); blir 10 sek. Jag har satt oscillator värdet på 8MHz vilket det ska vara, nått mer jag måste tänka på?

EDIT: WDT är av, jag har satt som jag brukar på 16F (=allt på default förrutom WDT och Brown-out resett som är av och intern oscillator, ingen clkout)

Re: Pic 18f4221 LED blinkar inte

Postat: 29 oktober 2009, 17:50:12
av E85
100ms är väl inte speciellt långsamt. 10ms blink ska du inte kunna se ens. Är du säker att inte 100ms blir 800ms osv? Då skulle det väl förmodligen vara att den kör i 1MHz istället för 8.

Antar att du har satt OSCCON annars är det därför.

Re: Pic 18f4221 LED blinkar inte

Postat: 29 oktober 2009, 19:32:32
av Pajn
200ms är ju lätt att missa när man endast räknar i huvudet, kan mycket väl ha vart 800ms och inte 1000ms.

Jag hade inte satt någon OSCCON (första gången med 18F) Nu har jag gjort det

Kod: Markera allt

     OSCCON = 111;
och nu är det bättre, men inte bra.

Kod: Markera allt

     while(1) {
              PORTD = 0xFF;
              Delay_ms(1000);
              PORTD = 0;
              Delay_ms(1000);
     }
Ger blink som är ca. 2 sek långa.

Re: Pic 18f4221 LED blinkar inte

Postat: 29 oktober 2009, 19:36:40
av E85
Nu var du nog lite för snabb... Fundera litegrann på vad OSCCON = 111; egentligen gör. (tips: tänk binärt)

Re: Pic 18f4221 LED blinkar inte

Postat: 29 oktober 2009, 19:51:56
av sodjan
> OSCCON = 111;

D.v.s OSCCON = b'01101111';

Var det det du ville ha ?

> Jag hade inte satt någon OSCCON (första gången med 18F)

Inte unikt för F18, det är i princip samma oscillator i de nyare F16.