12F675-kod funkar efter programmering men inte efter reset?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

12F675-kod funkar efter programmering men inte efter reset?

Inlägg av PHermansson »

Har gjort ett litet program i CCS C till en 12F675. Direkt efter att jag programmerat kretsen fungerar det som det ska, men slår jag av och på strömmen till PIC:en fungerar det inte korrekt?

Kod: Markera allt

#include <12F675.h>
#include "more.inc"
#device ADC=10
#fuses INTRC_IO,NOWDT,NOPUT,NOPROTECT,NOCPD,NOMCLR
#use delay(clock=4000000)
#define GP0 PIN_A0
#define GP1 PIN_A1
#define GP2 PIN_A2
#define GP3 PIN_A3
#define GP4 PIN_A4
#define GP5 PIN_A5

int8 irlevel;

void init()
{
   set_tris_a( 0b11100111 ); // set GP4 output, all other inputs
   setup_comparator( NC_NC_NC_NC ); // disable comparators
   setup_adc_ports( NO_ANALOGS ); // disable analog inputs
   setup_adc( ADC_OFF ); // disable A2D
}
main()
{
   init();
   output_high(GP4);     // turn LED off
   irlevel = input(GP2);   //Check level on irsensor
   while (irlevel) 
   {      //Wait until an ir-signal is received
      irlevel = input(GP2);
    }

while ( TRUE )
   {
      output_high(GP4); // turn LED off
      delay_ms( 250 ); // wait 250ms
      output_low(GP4); // turn LED on
      delay_ms( 250 ); // wait 250ms
   }
}
På GP2 är en IR-mottagare ansluten, på GP4 sitter en led. Efter programmering är dioden släckt, och när en ir-signal mottas börjar den blinka. Precis som jag tänkt. Om jag sedan gör en powercycle så är dioden tänd från början och man kan inte se om ir-signalen detekteras. Antar att processorn inte startar på samma ställe om man gör en powerreset som när man använder MCLR (vilket programmeraren gör?)?
Användarvisningsbild
Icecap
Inlägg: 26139
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Inlägg av Icecap »

Den där fuse: NOMCLR läser jag till No Master Clear ... tror att den kan ha ganska mycket med det att göra. Men du säger inget om hur du har kopplat MCLR och det kan ju vara ganska besvärligt att rådge då.
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Inlägg av PHermansson »

MCLR är kopplad till programmeraren och inte till något annat. Det blir ingen skillnad om jag kopplar bort programmeraren...
Användarvisningsbild
Icecap
Inlägg: 26139
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Inlägg av Icecap »

Då förstår jag!

Koppla den som det står i databladet då!

Till VCC och vill du koppla till programmeraren kan du sätta en 10-47K motstånd mellan MCLR och VCC, då kan du koppla programmeraren direkt till MCLR och köra på utan problem.

Men gör som man ska, då brukar det fungera...
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Inlägg av PHermansson »

Hmm typiskt mig att inte läsa särskilt noga :)
Enligt databladet ska resistorn vara 1k eller större, jag hade en 4k7 liggande som jag provat med. Men det fungerar inte ändå.... MCLR ligger på 3.3V och dioden tänds direkt, vare sig jag använder NOMCLR eller MCLR. Får väl leta rätt på en 0.1uF att koppla in oxå...
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Inlägg av sodjan »

Det helt avgörande är *VILKEN* programmerare du har.
De flesta ICSP programmerare (inkl WIsp628) har problem med
12Fxxx om man kör med "internal-MCLR". Se : http://www.jescab.se/InternMCLR.html

Kan du programmera PIC'en mer än en gång (utan fel) ?

Om du kör med NOMCLR (vilket antar jag betyder "internal-MCLR") så
ska MCLR pinnen *INTE* anslutas någonstans mer än dit den skall
vara som I/O pinne (enbart ingång). Om du *INTE* behöver MCLR som
ingång, så kör med den som MCLR, det underlättar för programmeraren.
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Inlägg av PHermansson »

Jag använder en DIY-149 (http://www.voti.nl/shop/catalog.html?K-DIY-149).
Att programmera kretsen upprepade gånger är inga problem. Jag har testat med båda varianterna för MCLR enligt CCS-manualen:

Kod: Markera allt

NOMCLR		Master Clear pin used for I/O
MCLR		Master Clear pin enabled
Men inget av dessa fungerade.
Nu har jag testat att ansluta den .1u kondensator till MCLR som i manualen beskrivs som 'optional, not critical', och nu fungerar det! Är inte helt med på varför det fungerar, det borde fungera utan dessa komponenter om man anger NOMCLR...
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6931
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

Det står att om man använder internoscillator eller RC-nät så stänger /MCLR av denna oscillator. Om detta gäller oberoende av MCLRE i konfigurationsregistret framgår inte klart. MCLR skall har 0.8Vcc för att det säkert uppfattas som Vih. Den skall inte kopplas direkt till V+, då kan det säga tjoff enligt databladet beroende på annorlunda ESD-skydd på denna pinne eftersom den skall kunna anslutas till Vpp... Den är också känslig för transienter som drar den under GND, det kan orsaka latchup med åtföljande stora strömmar och bränd krets.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Inlägg av sodjan »

Om MCLR-pinnen är konfigurerad (via CONFIG registret) till att *inte*
vara "reset" (utan en digital ingång), så har den inte heller någon
reset-funktion, så klart. Dvs att den ska inte stoppa någonting.

Sen får man ju hoppas att CCS inte har en bugg i just denna hantering.
Det kan kollas genom att titta i HEX filen vad som ligger i adressen
för CONFIG registret...

Ta gärna med PWRTE (ingen aning om vad det heter i CCS) !

Vad har du för avkoppling kring PIC'en för övrigt ?
Vad har du för spänningsmatning ?
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Inlägg av PHermansson »

Sant, MCLR borde inte ha någon resetfunktion. Jag gjorde som så att jag laddade koden i programmeringsmjukvaran och kollade inställningarna för Fuses. Med NOMCLR angivet i koden blir MCLRE disabled, ändrar jag koden till MCLR blir MCLRE enabled. Så koden verkar ju funka i alla fall!?

PWRTE kallas PUT i CCS C, denna används inte ('NOPUT').

Avkopplingen består av en 0.1uF alldeles intill matningspinnarna, spänningsmatningen tas från programmeraren där den regleras av ett par 78XX kretsar. Inte mycket till kondensatorer i programmeraren, men den fungerar fint så matningen borde vara bra.
Skriv svar