Sida 1 av 2

sjukt problem med 12F675

Postat: 28 mars 2007, 14:26:22
av luffare
Har lekt lite med 16F84 och nu när jag försöker samma grej med en 12F675 funkar det inte alls. Målet är bara att få in & ut gångar att funka.
Har läst datablad och jagat exempel till en förbannelse men jag fattar fan inte vad som strular. Simulatorn visar att saker sker i TRISO men inte i GPIO, vilket borde vara motsvarande till PORTx hos 16F84?
Testat exemplet med init av porten från databladet men det blir samma sak. Om jag väljer att "btfss gpio,3" istället för "gpio,1" så hoppar den vidare men den tänder inte utgången... GP3 är alltid in men varför är den aktiv? har testat clrf gpio och movwf att skriva massa nollor i början men det hjälper inte.

Har lekt lite med config men det spelar ingen roll...
case sens är av...
inga error när jag buildar...
Det händer inte ett bajs när jag tryker på GP1, däremot går det att resetta med MCLR i pinstim..

Kod: Markera allt

;Test Program för Pic12F675
;****************************************************************
	List	p=12f675
	include <p12f675.inc>
	__CONFIG _CP_OFF & _WDT_OFF & _MCLRE_ON & _INTRC_OSC_NOCLKOUT
	org	0x00
;****************************************************************

init
	banksel	trisio			;Öppnar Bank1
	movlw	b'11111110'		;Port GP 0 = UT, resten in
	movwf	trisio
	banksel	gpio			;Öppnar Bank0 (stänger bank1)

start
	btfss	gpio,1			;hoppa över start om gp1 = 1.
	goto	start
	bsf		gpio,0			;tänd led
	goto	start
end
Vad har jag missuppfattat?

Postat: 28 mars 2007, 16:33:18
av newbadboy
Har jag fattat dig rätt...... oavsett om du har låg eller hög signal in på gpio3 så påverkas inte ditt program? Jag har i såfall näml samma problem och kan inte lösa det. min kod är nedan.. mina if/while satser påverkas inte alls av vad för doors har för värde... har vi samma problem?? jag har åxo 12f675

Kod: Markera allt

#define Trigg GPIO.F0  //GPIO döps om för tydligare kod
#define Led GPIO.F1
#define Relay GPIO.F2
#define Doors GPIO.F4
#define Ignition GPIO.F5


int k=0;

void main(){

            ADCON0.F0 = 0x00;    // A/D av
            CMCON = 0x07;        // Komparator av
            TRISIO.F5 = 1;
            TRISIO.F4 = 1;       //utgång
            TRISIO.F2 = 0;
            TRISIO.F1 = 0;       
            TRISIO.F0 = 1;       // Ingång

            ANSEL.F5 = 0;
            ANSEL.F4 = 0;
            ANSEL.F2 = 0;        // "Digital pinne"
            ANSEL.F1 = 0;        // "Digital pinne"
            ANSEL.F0 = 0;        // "Digital pinne"




            while(1){


            Led=1;
            

            if((Doors==0)&&(Trigg==0)&&(Ignition==0)){

              

              while((k<90)&&((Doors==0)&&(Ignition==0))){

                    Relay=1;
                    delay_ms(500);
                    Relay=0;
                    delay_ms(500);
                    k++;
                    }
                    k=0;
                    }

            while((Doors==0)&&(Ignition==1)){
                  Led=0;
                  }


           }
           
}

Postat: 28 mars 2007, 16:46:29
av luffare
newbadboy skrev:Har jag fattat dig rätt...... oavsett om du har låg eller hög signal in på gpio3 så påverkas inte ditt program? Jag har i såfall näml samma problem och kan inte lösa det. min kod är nedan.. mina if/while satser påverkas inte alls av vad för doors har för värde... har vi samma problem?? jag har åxo 12f675
GPO3 är alltid hög och dom andra portarna påverkas inte överhuvud taget, vare sej jag satt dom som in eller utgångar. Jävligt skumt, måste man sätta pinnarna till digitala eller analoga? (gjorde det som i exemplet men det spelade ingen roll)
Känns som man gjort nåt klantigt nybörjarfel som vanligt :?

Postat: 28 mars 2007, 17:21:34
av newbadboy
Jag kan i princip inget om asm. men du måste stänga av a/d och och komparatorn. sen måste du sätta sätta pinnarna som in/utgångar och sen måste du även sätta de till "digitala pinnar"

Postat: 28 mars 2007, 17:24:18
av sodjan
Du har "_MCLRE_ON" och alltså är pinnen "GP3/MCLR/Vpp" = **MCLR** och inget annat...

> GP3 är alltid in men varför är den aktiv?

Vad betyder "aktiv" ?

Sen bör du läsa databladet, *speciellt* de små grå rutorna på sidan
med beskrivningen av GPIO. Det finns en anledning att man lägger
*extra viktig* info i egna små rutor... Se även exempel 3-1.

Postat: 28 mars 2007, 19:16:30
av newbadboy
vad tror du om mitt problem sodjan? är det ngt fel jag gjort ren programeringmässigt eller är det ngt jag missar med ngn inställning?

Postat: 28 mars 2007, 19:30:13
av sodjan
Tja, säg det. Jag kan inte läsa C, speciellt inte okommenterad C. :-)

Ett par saker bara...

Varför har dessa två rader olika syntax ? :

ADCON0.F0 = 0x00; // A/D av
CMCON = 0x07; // Komparator av

Ska det inte vara

ADCON0 = 0x00; // A/D av
CMCON = 0x07; // Komparator av

och "ANSEL = 0x00" istället för alla "ANSEL.Fx = ..."

> #define Led GPIO.F1
> TRISIO.F1 = 0; // Ingång

Är LED'en en ingång ??

Postat: 28 mars 2007, 21:44:23
av newbadboy
Hmm ärligt talat har jag bara kopierat in ADCON0.F0 = 0x00 och ANSEL = 0x00 från ett annat programm jag gjort innan. fast där hade anvädne jag inte gpio3 utan hade en xtal där istället.

Led är en utgång. Hela programmet ska bli ett billarm.-

Postat: 28 mars 2007, 22:15:26
av sodjan
> Led är en utgång.

Varför *står* det inte det då ?

Även :

> #define Doors GPIO.F4
> TRISIO.F4 = 1; // Utgång

Det är sådana detaljer som talar om ifall det är
någon mening med att kolla *resten* av koden...

> fast där hade anvädne jag inte gpio3 utan hade en xtal där istället.

Vad gjorde kristallen *där*?

Postat: 28 mars 2007, 23:00:59
av newbadboy
Fan vad sysslar jag med. Jag har inget anslutet till gpio3, den har jag som mclr och har jordat via ett motstånd.

den ingång som strular för mig är Doors, dvs gpio4. det är den pinnen som igrnoreras av koden.

:oops:

Postat: 28 mars 2007, 23:09:34
av sodjan
OK.
Vad har du för oscillatorinställning ?
Om det är något med "CLKOUT" så har du problem.
Dubbelkolla övriga alternativa funktioner för GP4.

Postat: 29 mars 2007, 08:53:27
av newbadboy
hmmm det enda jag har ibockat gällande oscillatorinställnigar är
INTRC_OSC_NOCLKOUT.

funktioner för gp4 är AN/T1G/OSC2/CLKOUT

Kan du förklara lite det med at jag kan ha problem med clkout, hur så?

Postat: 29 mars 2007, 09:34:47
av newbadboy
Skitskumt.

Jag lade dit

TRISIO.F3 = 1;
ANSEL.F3 = 0;

och nu funkar det och programmet känner av värdet på gp4. hur kan detta komma sig vad har gp3 med gp4 att göra i detta fallet??

Postat: 29 mars 2007, 10:04:55
av sodjan
> Kan du förklara lite det med at jag kan ha problem med clkout, hur så?

*OM* du hade kört med INTRC_OSC_CLKOUT...

> hur kan detta komma sig vad har gp3 med gp4 att göra i detta fallet??

Ingenting.
Lite lite som GP3 har med ANSEL.F3 att göra... Kolla databladet igen.

> funktioner för gp4 är AN/T1G/OSC2/CLKOUT

Nej, det stämmer bara nästan. Kolla igen...

Postat: 29 mars 2007, 20:30:48
av sodjan
Här kommer en ledtråd...

AN3 != GP3