Lite hjälp, med min c-kod till en fuktmätare.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
barbarossa
EF Sponsor
Inlägg: 544
Blev medlem: 8 december 2006, 11:18:14
Ort: Tågarp, Svalöv

Inlägg av barbarossa »

newbadboy skrev:Sista segmentet som jag inte lyckats tända är kopplad till pinne 16 (RC7).. men här har jag inte ngn förklaring...
Pin 16 är RC0
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Inlägg av SvenW »

Jag vet inte vilken kompilator ni har och dess egenheter och finesser, men i vanlig (ANSI) C betyder

if( 0x010E < Value <= 0x0129 )
{
}

inte vad man kanske tror.

Vänstra uttrycket '0x010E < Value' evalueras till 1 eller 0 vilket sedan jämförs med '<= 0x0129' och blir alltså nästan alltid sant. Syntaktiskt korrekt c-kod i och för sig, men inte så bra!
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Inlägg av newbadboy »

sodjan skrev:> Jag är ganska säker på att MikroC inte skriver till OSCCON utan bara till CONFIG när man editerar projekt.

OSCCON skrivs enbart från koden.
CONFIG kan sättas i koden (om det stöds) eller från IDE'n.

Och visst är det INTOSCIO som ska väljas, jag har inte riktigt
förstått varför det inte är gjort.

visst är det INTOSCIO och inget annat som skall väljas...
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Inlägg av newbadboy »

SvenW skrev:Jag vet inte vilken kompilator ni har och dess egenheter och finesser, men i vanlig (ANSI) C betyder

if( 0x010E < Value <= 0x0129 )
{
}

inte vad man kanske tror.

Vänstra uttrycket '0x010E < Value' evalueras till 1 eller 0 vilket sedan jämförs med '<= 0x0129' och blir alltså nästan alltid sant. Syntaktiskt korrekt c-kod i och för sig, men inte så bra!

Nää jag märker det.. Min krets struntar i if satserna, den bara räknar upp
som en jävla timer :lol: ...

Fast jag är inte helt övertygad om hur man ska skirva det annars..
Senast redigerad av newbadboy 10 oktober 2008, 20:28:28, redigerad totalt 1 gång.
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Inlägg av newbadboy »

barbarossa skrev:
newbadboy skrev:Sista segmentet som jag inte lyckats tända är kopplad till pinne 16 (RC7).. men här har jag inte ngn förklaring...
Pin 16 är RC0

fullständigt rätt,, det är bara jag som yrar genom att blanda ihop siffror i mina anteckningar. Och kablarna på kopplingsdäcket.. det funkar nu
Senast redigerad av newbadboy 10 oktober 2008, 20:43:02, redigerad totalt 1 gång.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

newbadboy skrev:Fast jag är inte helt övertygad om hur man ska skirva det annars..
Kanske så här:

Kod: Markera allt

if((Value > 0x010E) && (Value <= 0x0129))
{
}
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Inlägg av newbadboy »

:oops:
EBD
Inlägg: 136
Blev medlem: 10 maj 2006, 18:50:48
Ort: Sundsvall

Inlägg av EBD »

Eller använd "else if" såhär:

Kod: Markera allt

if( Value <= 0xCD) //Läser in värdet value och jämför det
{
	PORTA = 0b00100000;        // med ett värde, ex binärt för 2V
	PORTB = 0b11100000;        //om dessa stämmer tänds olika segment
	PORTC = 0b11110111;        //annars jämförs nästa "if" sats
	delay_ms(5000);
}
else if( Value <= 0xEB ) //**10**
{
	PORTA = 0b00110000;
	PORTB = 0b01110000;
	PORTC = 0b01010001;
	delay_ms(5000);
}
else if( Value <= 0x010E ) //**15**
{
	PORTA = 0b00100000;
	PORTB = 0b11100000;
	PORTC = 0b01010001;
	delay_ms(5000);
}
och så vidare.
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Inlägg av SvenW »

Om du har något i stil med

if( Value <= 0xCD){ }
if( 0xCD < Value <= 0xEB ){}
if( 0xEB < Value <= 0x010E ){}
if( 0x010E < Value <= 0x0129 ){}


kan du i stället skriva så här:

if( Value <= 0xCD){; }
else if( Value <= 0xEB ){;}
else if( Value <= 0x010E ){;}
else if( Value <= 0x0129 ){;}


eller om det finns luckor i talserien kan man också deklarera ett makro:

#define IS_WITHIN(a,b,c) ((a < b) && (b <= c))

if ( IS_WITHIN( 0x00CD , Value, 0x00EB )) {;}
if ( IS_WITHIN( 0x00EF , Value, 0x010E )) {;}
if ( IS_WITHIN( 0x010F , Value, 0x0129 )) {;}

PS. om man vill använda en bra programstil, t.ex. gnu-stilen, så bör man skriva 'value' med liten bokstav. STORA bokstäver signalerar att det är ett makro, blandade 'EnTypdef' signalerar att det är en datatyp.
Det finns lite olika stilar, men det underlättar om man använder en och är konsekvent.
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Inlägg av newbadboy »

vfr skrev:
newbadboy skrev:Fast jag är inte helt övertygad om hur man ska skirva det annars..
Kanske så här:

Kod: Markera allt

if((Value > 0x010E) && (Value <= 0x0129))
{
}
jag körde denna variant. den verkar funka . Men det är ett problem. Kretsen verkar inte vilja läsa in ADC värdet. Om jag i början av koden sätter value manuellt till ngt värde så visar den rätt på displayen.
Om jag däremot läser in värdet med nedanstående så funkar det inte
Value = ADC_read(2);
Vbat = ADC_read(1)

Det yttrar sig genom att oavsett om jag sätter pinne 18 till jord eller Vcc så skriver den på displayen LO dvs för lågt batteri. Jag har satt pinne 17 till 2V vilket skall motsvara 40% Den visar bara 5%. Lyfter jag upp tråden och låter den hänga i luften så skiftar displayen mellan LO och 5%

Ledtrådar?
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Inlägg av newbadboy »

har det ngt att göra med att jag har delar PortA som I/O och delar av den som analoga ingångar och att detta krockar på ngt sätt??
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Om det krockar framgår av databladet.
Det beror kanske också på hur ADC_read() fungerar, men det
har du väl läst på, antar jag.
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Inlägg av newbadboy »

Det verkar inte vara ADC kommandot som har begränsingen iaf..
Användarvisningsbild
newbadboy
Inlägg: 2485
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Inlägg av newbadboy »

Shit asså... jag vet snart inte vad mer jag ska testa det vill sig inte funka.. har inte gjort ngt framsteg :(
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, vad har du provat med under dessa 9 dagar sedan sist ?
Skriv svar