Pic Programmering - problemer med at få liv i en Pic12F683

Nu er jeg efterhånden ved at løbe tør for ideer til at få liv i Pic'en, og håber at nogen kan spotte fejlen i koden, som jeg har kopieret ind længere nede. Indtil videre er programmet meget simpelt - Pic'en (Pic12F683) skal køre på den interne clock (dvs. ingen ekstern krystal), og i første omgang blot blinke med en lysdiode, for at vise at der er liv. Der er ikke defineret nogen interrupt routiner, blot er benene konfigureret til at være udgange (på nær ben 3, som er indgang). Imidlertid sker der intet når jeg tilslutter forsyningsspænding, indtil jeg sætter proben på ben

4, hvorefter dioden lyser svagt (der står kun 2 volt på udgangen). Derimod er der 5 volt på både ben 4 og 5. Det pudsige er, at der sket en reaktion når der tilføres en kapacitans fra proben på ben 4 tiltrods for, at der ikke er defineret nogen indgange, og at der kan komme en lavere forsyningsspænding på ben 7 (hvor dioden er tilsluttet) end de 5 volt. Når jeg fjerne forsyningsspændingen og et øjeblik efter tilslutter den igen lyser dioden stadig svagt, men det er ikke nødvendigt at "tænde" den med proben - som om der er en indre kapacitans i kredsen der først skal aflades.

Nogen der har gode ideer til hvordan jeg kommer videre?

Mvh. Henrik ___________________

;Equates Section TMR0 EQU 1 ;TMR0 is file 1 STATUS EQU 3 ;Status is file 3 GPIO EQU 5 ANSEL EQU 9FH CMCON0 EQU 19H ZEROBIT EQU 2 ;Zerobit is bit 2 COUNT EQU 20H ;Count is file 0C, a register to count events OPTION_REG EQU 81H OSCCON EQU 8FH TRISIO EQU 85H ;*****************************************************

LIST P=12F683 ORG 0 ;Start at memory address 0 GOTO START

;*****************************************************

; Subroutine section DELAY CLRF TMR0 ;Start TMR0 LOOPA MOVF TMR0,W ;Read TMR0 into W SUBLW .39 ;Time - 39 BTFSS STATUS,ZEROBIT ;Check time-W = 0 GOTO LOOPA RETLW 0 ;Return after TMR0=39

; 1 second delay DELAY1 MOVLW .100 MOVWF COUNT TIMEA CALL DELAY DECFSZ COUNT GOTO TIMEA RETLW 0

; 1/2 second delay DELAYP5 MOVLW .50 MOVWF COUNT TIMEB CALL DELAY DECFSZ COUNT GOTO TIMEB RETLW 0

;*****************************************************

;Configuration section

START BANKSEL OSCCON ;Set oscillation frequency to 4Mhz MOVLW B'01100001' MOVWF OSCCON

BANKSEL OPTION_REG ;Set prescaler to 256 MOVLW B'00000111' MOVWF OPTION_REG

BANKSEL GPIO CLRF GPIO ;Init GPIO MOVLW 07h ;Set GP to MOVWF CMCON0 ;digital I/O

BANKSEL ANSEL ; CLRF ANSEL ;digital I/O MOVLW 0Ch ;Set GP as inputs MOVWF TRISIO ;and set GP ;as outputs

;*****************************************************

BEGIN BSF GPIO,1 LOOPB BSF GPIO,0 ;Turn ON Port B CALL DELAY1 BCF GPIO,0 CALL DELAY1 GOTO LOOPB END

Reply to
Henrik
Loading thread data ...

"Henrik" skrev i en meddelelse news:44da678e$0$3482$ snipped-for-privacy@nntp02.dk.telia.net...

Det lyder til at være en HW-fejl. Hvordan ser dit diagram ud? De PICs jeg har rodet med 877 og 4550 kan ikke køre på nogen intern clock, er du sikker på at din kan?

Reply to
Brian

Der står i databladet, at der er en intern præcisions oscillator som kører med 8MHz, og som er "bruger" variabel. Jeg har også diagram eksempler på en lignende kreds (Pic12C508), som ligeledes kan køre uden ekstern oscillator. Jeg har selv en mistanke om, at jeg ikke configurerer Pic'en korrekt, da den har 8 forskellige clockmodes - de sædvanlige (LP, XT, HS, etc.), men det muligvis er her jeg træffer et forkelt valg - jeg har valgt "Internal RC No Clock" som jeg mener skulle betyde, at Pic'en kører på intern clock, og ikke router clock signalet ud på nogen af benene. Mit diagram er noget af det simpleste, netop fordi der ikke er tilsluttet noget krystal. Ben 1 på pic'en (Vdd) er forbundet til 5 volt forsyning, Ben

8 (Vss) er forbundet til ground. Ben 7 er GP0, hertil har jeg forbundet en lysdiode i serie med en modstand, som er forbundet til ground.

/Henrik

Reply to
Henrik

"Henrik" skrev i en meddelelse news:44dadeac$0$3465$ snipped-for-privacy@nntp02.dk.telia.net...

jeg

en

oscillator.

den

No

ikke

Det skulle være godt nok. Hvad med Reset, WDT, + andet.

Ben

Husk lige en passende afkobling mellem VDD og VSS (bare en god 100nF kondensator).

--
Hilsen
   Peter N Petersen
 Click to see the full signature
Reply to
15kw

"Henrik" skrev i en meddelelse news:44dadeac$0$3465$ snipped-for-privacy@nntp02.dk.telia.net...

Det er vel ikke en open-collector udgang du bruger?

Reply to
Brian

"Henrik" skrev i en meddelelse news:44dadeac$0$3465$ snipped-for-privacy@nntp02.dk.telia.net...

Du mangler noget Reset? Hvad med afkobling?

Reply to
Brian

Henrik skrev:

Kan du ikke prøve med et andet program, f.eks et fra microchip, de sender altid en masse med deres compiler.

Mikkel

Reply to
Mikkel Lund

Den tanke har strejfet mig, men når jeg kigger bibliotekerne igennem, som hører til MPLAB, kan jeg ikke finde et kode eksempel. Det eneste der ligger er en template, hvor alle adresser til registre og configuration bits er defineret - der er ikke nogen opsætning. Hvis man kunne finde en standard opsætning, der blot får liv i Pic'en, således at man kunne udelukkede at det er kode-fejl. Jeg havde et håb om, at der på Microchips internetside var nogle kodeeksempler under support, men det var ikke tilfældet... desværre. Heller ikke google har være den store hjælp til at finde kode eksempler.

/Henrik

Reply to
Henrik

Pic'en har mange muligheder for reset ("Power-on Reset", WDT, MCLR, "Brown-out Reset), men jeg har antaget, at disse reset muligheder som udgangspunkt er disablet, som det har været tilfældet med andre Pic'er jeg har programmeret. Det ser ikke ud til at være vankseligt at sætte disse bits, men det er umiddelbart svært at få overblikket, og derfor har jeg afholdt mig fra at ændre disse bits, for ikke at skabe flere problemer end højst nødvendigt. I MPLAB er kan sætte konfigurations bittene i en menu, og er har jeg valgt at disable "Brown-out detect".

Har placeret en 100nF kondensator, men det gjorde ingen forskel... Desværre, for det havde været den lette løsning.

/Henrik

Reply to
Henrik

"Brian" skrev i en meddelelse news:44daf504$0$3478$ snipped-for-privacy@nntp02.dk.telia.net...

Det har jeg ikke styr på... Udgangen skulle gerne være defineret til en digital udgang, så hvorvidt er der open-collector ved jeg ikke. Hvilken betydning har det, hvis det er open collector?

/Henrik

Reply to
Henrik

Afkoblingen er klaret - en 100nF kondensator er placeret over forsyningsbenene, desværre afhjalp det ikke problemerne.

Reset? Umiddelbart er der ikke noget ben til reset medmindre man definerer det i koden. Det er bestemt muligt at definere et reset ben, men for at undgå problemer af den art, har jeg indtil videre valgt ikke at arbejde med det. Pic'en skulle kunne køre uden et reset?

/Henrik

Reply to
Henrik

Hejsa,

Efter denne linie

ville jeg indsætte noget i denne retning:

__CONFIG _FCMEN_OFF & _IESO_OFF & _CP_OFF & _CPD_OFF & _BOD_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT

.. så er du i hvert fald fri for at sætte det op i dit brænderprogram hver gang du skal brænde...

Derudover kan jeg foreslå at _alle_ ubrugte portpins erklæres som indgange, og lægges til stel.

/Claus

Reply to
Claus

"Henrik" skrev i en meddelelse news:44db1e27$0$3484$ snipped-for-privacy@nntp02.dk.telia.net...

Jeg er vant til at der skal være en veldefineret Reset ellers fungerer det ikke. MCLR er det samme som Reset i min verden :) men jeg kan se at der er Power-On Reset, hvis aktiveret, på denne. Hvordan programmerer du den?

Reply to
Brian

Kig under application notes, den her omhandler den indbyggede clock:

formatting link

Tomas

Reply to
Tomas Pedersen

OSCCON EQU 8FH det vil sige binært 01111111 og så er bit 3 jo "1" Skal den ikke være "0" hvis du vil bruge intern osc. ?? (88H)

Hilsen Hans-Ole

"Henrik" skrev i en meddelelse news:44da678e$0$3482$ snipped-for-privacy@nntp02.dk.telia.net...

Reply to
Hans-Ole Jensen

"Hans-Ole Jensen" skrev i en meddelelse news:44dcccc2$0$20303$ snipped-for-privacy@dread16.news.tele.dk

8Fh er 10001111

Og bit 3 vil også være sat hvis det var 88h (10001000)

--
Ulrik Smed
Aarhus, Denmark
Reply to
Ulrik Smed

Det har du ganske ret i, det er for længe siden jeg har leget med det binære talsystem. Der må skulle stå 10000111 87H 3 bit er jo 4 fra højre, når første bit er 0

Hans-Ole

"Ulrik Smed" skrev i en meddelelse news:44dcfee2$0$185$ snipped-for-privacy@dread11.news.tele.dk...

Reply to
Hans-Ole Jensen

Hans-Ole Jensen skrev:

in=E6re

=F8rste bit

Du skal kigge p=E5 konfigurationsregistret til den indbyggede comperator

- kan ikke lige huske hvad det hedder, men det er en klassisk dummefejl, som jeg ogs=E5 selv har beg=E5et et par gange...

Reply to
Claus Hillker

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.