Sida 5 av 7
Postat: 30 september 2006, 13:37:05
av newbadboy
Jag har testat med PORTA men det vill inte. Det kluriga är att jag kan leka hursom med portb Tex PORTB.f2 och bara tända den biten utan några problem. Jag kan tända led i alla tänkbara kombinationer, bara så länge det inte beror på portA. Så jävla skumt. Lite tråkigt, nu har jag strulat med detta i ca en vecka.

Postat: 30 september 2006, 13:41:52
av Icecap
Nu har jag inte kolla databladet men på många PIC är det kopplat antingen AD eller komparatorer på porta och de ska slås av innan man har digital tillgång till porten.
Postat: 30 september 2006, 13:55:49
av Xyzzy
I vissa C-kompilatorer ska man använda "PINB" för att läsa porten, vet inte om det är så i den kompilator du använder, men kanske värt ett test?
Postat: 30 september 2006, 14:33:41
av Icecap
Och i MikroC är det PORTA!
newbadboy: Databladet (40044D.pfd), sid 31, den gråa "note"-rutan! Kanske dags att läsa databladet ordentligt?
Postat: 30 september 2006, 15:11:45
av Xyzzy
Okay, bra att veta, då är det väl inget som han behöver testa iaf

Postat: 30 september 2006, 16:14:06
av newbadboy
NU funka det ju, ja det är ju lättare när man vet vad man ska kolla efter i databladet.... måste skriva ut det på papper. Det värsta jag vet är att läsa större datablad på skärmen.
Tack
Postat: 30 september 2006, 16:26:14
av Icecap
Du är inte den första som går i den fälla, det finns MÅNGA innan.
Postat: 30 september 2006, 23:33:29
av sodjan
> Det värsta jag vet är att läsa större datablad på skärmen....
Kanske det, men nu gäller det ju bara databladet för 16F628A, inget
av de *större* databladen. Dessutom igentligen bara de 2-3 sidor
där info om portarna står.
> Lite tråkigt, nu har jag strulat med detta i ca en vecka.
Glöm inte de som du dessutom har engagerat här...

Postat: 1 oktober 2006, 01:36:22
av TomasL
newbadboy skrev:NU funka det ju, ja det är ju lättare när man vet vad man ska kolla efter i databladet.... måste skriva ut det på papper. Det värsta jag vet är att läsa större datablad på skärmen.
Tack
Det var ju det vi sa i början, läs databladen först, lär dig dem, pula sedan, mycket enklare, och en sak till, läs Erratan, mycket viktigare än databladen faktiskt.
Postat: 19 oktober 2006, 12:58:57
av newbadboy
Jaha nu har ett nytt problem dykt upp. Varje gång den första if satsen används så blir det ett dubbelblink. Med samma frekvens som else satsen. Det verkar alltså som det hela tiden hoppar in vidare till else satsen och utför den en gång/blinkning så att säga. Detta sker INTE med den andra if satsen. Hmmmm, vad har jag missat?
void main(){
CMCON = 0x07; //stäng av komparator funktion på RA
PORTA = 0xff;
TRISA = 0xff; //ingång
PORTB = 0;
TRISB = 0; //utgång
while(1){
if (PORTA.f0 == 1){
PORTB.f1 = 0;
delay_ms(200);
PORTB.f1 = 1;
delay_ms(200);
}
if (PORTA.f1 == 1){
PORTB.f1 = 0;
delay_ms(200);
PORTB.f1 = 1;
delay_ms(200);
}
else {
PORTB.f1 = 0;
delay_ms(500);
PORTB.f1 = 1;
delay_ms(500);
}
}
}
Postat: 19 oktober 2006, 13:29:39
av sodjan
Du har skrivit :
först :
om <något> gör <1>
och sedan :
om <något_annat> för <2> annars <3>.
<2> *eller* <3> kommer *alltid* att urföras.
Kan du beskriva igen vad som gå fel ?
Postat: 19 oktober 2006, 13:48:27
av newbadboy
Portbf1 skall blinka med olika frekvenser beroende på knaptryckningar.
om ingen knapp är nedtryck skall den blinkas av else satsen. om jag trycker ner PORTA.f1 så blinkar den som den skall.
Trycker jag däremot ner PORTA.f0 så blinkar den elsesatsen varannan gång och ifsatsen varannan gång. (ser det ut som)
Jag vill inte att den överhuvudtaget skall hoppa in i elsesatsen om jag har ngn knapp nedtryckt.
Postat: 19 oktober 2006, 14:11:00
av sodjan
Om f1 inte är nertryck (=0) så körs else satsen, så som du har skrivit det.
Oavsett vad som händer med f0...
Prova (om det är så du vill ha det) :
Kod: Markera allt
if (PORTA.f0 == 1) or (PORTA.f1 == 1){
PORTB.f1 = 0;
delay_ms(200);
PORTB.f1 = 1;
delay_ms(200);
}
else {
PORTB.f1 = 0;
delay_ms(500);
PORTB.f1 = 1;
delay_ms(500);
}
Postat: 19 oktober 2006, 14:55:14
av newbadboy
Tyvärr lurade jag nog dig lite...
När programmet väl skall användas så skall PORTA.f0 och PORTA.f1 generera olika frekvenser. Det är därför jag har två if satser. Sorry my bad
Postat: 19 oktober 2006, 15:03:19
av sodjan
OK, och en tredje frekvens om *ingen* knapp är nedtryckt ??
Kanske :
Kod: Markera allt
if (PORTA.f0 == 1){
PORTB.f1 = 0;
delay_ms(200);
PORTB.f1 = 1;
delay_ms(200);
}
else if (PORTA.f1 == 1){
PORTB.f1 = 0;
delay_ms(200);
PORTB.f1 = 1;
delay_ms(200);
}
else {
PORTB.f1 = 0;
delay_ms(500);
PORTB.f1 = 1;
delay_ms(500);
Eller något i den stilen.
Men det är enklast att du som vet hur det ska fungera fixar det själv...
