Hjälp med felsökning av kod till PIC12F683

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp med felsökning av kod till PIC12F683

Inlägg av sodjan »

Men, varför inte göra som vi säger istället? :-)
Bilden verifierar bara att du har kopplat (knappen) fel.
Och det förklarar sannolikt också de fenomen du ser.
D.v.s koppla knappen rätt och försök igen.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46976
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Hjälp med felsökning av kod till PIC12F683

Inlägg av TomasL »

Om du kopplar så här så funkar det bättre, dessutom får du en viss filtrering av kontaktstuds.

Kod: Markera allt

								Vdd
								 I
								 I
								5k6
								 I
								 I
picpinne<--------->10k<----<Brytare>----Vss
				I
				I
			 100nF
				I
				I
			  Vss
emilrowland
Inlägg: 145
Blev medlem: 20 april 2011, 19:14:44
Ort: Gnesta

Re: Hjälp med felsökning av kod till PIC12F683

Inlägg av emilrowland »

Har nu även testat med att koppla den till pull-down. Men får exakt samma respons, att alla utgångar blir aktiva.

Så jag undrar är det något fel i min kod?
Eller har jag bara kopplat väldigt fel.

Har testat att göra om koden så att den inte lyssnar efter knappen utan att den direkt startar och då funkar allt.

Kod: Markera allt

void larm(){
     int i = 0;
     while(i<5){
              GPIO.B0 = 1;
              Delay_ms(1000);
              GPIO.B0 = 0;
              Delay_ms(1000);
              i++;
     }
}
void start(){
GPIO.B5 = 1;
GPIO.B1 = 1;
Delay_ms(10000);
GPIO.B5 = 0;
GPIO.B1 = 0;
larm();
}
void main() {

     TRISIO.B0 = 0;
     TRISIO.B1 = 0;
     TRISIO.B5 = 0;

     while(1){
              if(1 == 1){ start();}
     }
}
Men när jag använder knapp funktionen så funkar det inte, utan alla utgångar blir aktiva.

Kod: Markera allt

unsigned char x = 0;
void larm(){
     int i = 0;
     while(i<5){
              GPIO.B0 = 1;
              Delay_ms(1000);
              GPIO.B0 = 0;
              Delay_ms(1000);
              i++;
     }
}
void start(){
GPIO.B5 = 1;
GPIO.B1 = 1;
Delay_ms(10000);
GPIO.B5 = 0;
GPIO.B1 = 0;
larm();
}
void main() {

     TRISIO.B0 = 0;
     TRISIO.B1 = 0;
     TRISIO.B5 = 0;
     TRISIO.B4 = 1;

     CMCON0 = 0x07;
     ANSEL = 0;
     while(1){
              x = GPIO.B4;
              if(x == 0){}
              if(x == 1){ start();}
     }
}
TomasL jag ska försöka testa så som du visar.
Senast redigerad av emilrowland 1 mars 2013, 11:28:59, redigerad totalt 1 gång.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46976
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Hjälp med felsökning av kod till PIC12F683

Inlägg av TomasL »

Några råd.
Använd Code-taggen istället för Citat när du klistrar in kod, då blir indragen förhoppningsvis riktiga, för du använder väl indrag?
Du får faktiskt också visa hur du initierar processorn och portarna, det finns i princip inget sånt med.
emilrowland
Inlägg: 145
Blev medlem: 20 april 2011, 19:14:44
Ort: Gnesta

Re: Hjälp med felsökning av kod till PIC12F683

Inlägg av emilrowland »

Så har ändrat till Code nu.

Jag har initierar så här om jag har förståt rätt:
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp med felsökning av kod till PIC12F683

Inlägg av sodjan »

> Eller har jag bara kopplat väldigt fel.

Tja, *hur* är det kopplat ?

Har du över huvudtaget kollat den länk jag skickade?
Eller Jimmys schema som också fungerar men som i och för
sig har lite extra som sannolikt inte direkt berör ditt problem
just nu ?

> Så jag undrar är det något fel i min kod?

Vad händer om du plockar bort knappen helt och lägger pinnen
fast kopplad till "hög" eller "låg" ?
emilrowland
Inlägg: 145
Blev medlem: 20 april 2011, 19:14:44
Ort: Gnesta

Re: Hjälp med felsökning av kod till PIC12F683

Inlägg av emilrowland »

Jag har läst länken. Har nu även testat att plocka bort knappen och lägga direkt hög och låg. Men jag får samma fel hela tiden. Så jag undrar om jag har skrivit någonstans fel i min kod som säger att mina utgångar ska bli aktiva hela tiden?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp med felsökning av kod till PIC12F683

Inlägg av sodjan »

OK, då har vi ju ett lite annorlunda läge. Då kan vi
för tillfället släppa frågan om knappens inkoppling.

Det *jag* skulle göra nu, vore att skriva om det i assembler,
det blir bara 10-20 rader, för att verifiera att det i grunden
fungerar som du har tänkt. Sedan, om *det* fungerar, kan man
fundera på varför C-koden inte fungerar.
Everest159
Inlägg: 36
Blev medlem: 27 februari 2013, 22:04:01

Re: Hjälp med felsökning av kod till PIC12F683

Inlägg av Everest159 »

Testa flytta knappen från ben 5 till 4.
jag hade liknande problem med ett annat projekt, när jag hade bytt så fungerade det utmärkt.
Det kan mycket väl ha varit min kod som var fel, men de tar ju inte så lång tid att ändra koden och flytta kabeln för att testa.
ie
EF Sponsor
Inlägg: 1375
Blev medlem: 23 oktober 2006, 13:12:57
Ort: Tyresö

Re: Hjälp med felsökning av kod till PIC12F683

Inlägg av ie »

Hej.

Strunta i knappen tills du vet att koden funkar.

Byt ut raden x = GPIO.B4; till x = 0; resp x = 1;

När dessa båda alternativ funkar som förväntat så byter du tillbaka till knappen och fortsätter felsökningen där (om det inte funkar).

Raden if(x == 0){} tillför inget och kan/bör tas bort.

Jag har inte tittat på hur GPIO.B4 funkar, men kan det vara så att den returnerar 16 i st f 1, dvs 5'e biten satt? (0b00010000)
emilrowland
Inlägg: 145
Blev medlem: 20 april 2011, 19:14:44
Ort: Gnesta

Re: Hjälp med felsökning av kod till PIC12F683

Inlägg av emilrowland »

Hej jag har tagit bort den tomma if satsen.
Jag har även testat som sagt att byta ut x = 1 och då funkar allt som det ska. Problemet är när jag byter ut x = 0, då borde inte alla utgångar bli aktiva eftersom de anropas inte. Och jag har inte heller skrivit in någonstans så att de skulle kunna vara på alla samtidigt och konstant på hela tiden. Så jag förstår inte varför det blir så konstigt om jag inte skulle anropa funktionen.

Kod: Markera allt

unsigned char x = 0;
void larm(){
     int i = 0;
     while(i<5){
              GPIO.B0 = 1;
              Delay_ms(1000);
              GPIO.B0 = 0;
              Delay_ms(1000);
              i++;
     }
}
void start(){
     GPIO.B5 = 1;
     GPIO.B1 = 1;
     Delay_ms(10000);
     GPIO.B5 = 0;
     GPIO.B1 = 0;
     larm();
}
void main() {

     TRISIO.B0 = 0;
     TRISIO.B1 = 0;
     TRISIO.B5 = 0;
     TRISIO.B2 = 1;

     CMCON0 = 0x07;
     ANSEL = 0;
     while(1){
              x = 0;//GPIO.B2;
              if(x == 1){ start();}
     }
}
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp med felsökning av kod till PIC12F683

Inlägg av sodjan »

Du bör sätta pinnarna = 0 redan i starten av main(), alltså samtidigt
som du sätter TRISIO, CMCON0 och ANSEL. Om du inte gör det så
kan pinnarna starta upp efter reset i vilket läge som helst.
emilrowland
Inlägg: 145
Blev medlem: 20 april 2011, 19:14:44
Ort: Gnesta

Re: Hjälp med felsökning av kod till PIC12F683

Inlägg av emilrowland »

Så nu funkar det :D . Men nu så ska jag fixa till knappen så att den också funkar. Tack för hjälpen.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp med felsökning av kod till PIC12F683

Inlägg av sodjan »

> Så nu funkar det...

Jaha, och *varför* ??

Notera att det normalt anses som jäkligt dålig stil att enbart
säga att det "funkar" utan någon som helst återkoppling...
emilrowland
Inlägg: 145
Blev medlem: 20 april 2011, 19:14:44
Ort: Gnesta

Re: Hjälp med felsökning av kod till PIC12F683

Inlägg av emilrowland »

Det funkar om man som du sa att man sätter alla utgångar till 0 i början. Så att inget kan feltolkas. Då fungerade det bra.
Skriv svar