Lite hjälp, med min c-kod till en fuktmätare.
Lite hjälp, med min c-kod till en fuktmätare.
Använder en 16F690.. och ska mäta en utspänningen från en fuktsensor som ger ut en viss spänning vid viss fukthalt. Detta ska ADC och sedan skall det presenteras på en 7seg display.
Min första fråga är.. Hur sätter jag att det ska va intern oscillator. Jag använder MikroC som kompilator.. Jag har gjort det innan men jag kommer fan inte ihåg det.
Min första fråga är.. Hur sätter jag att det ska va intern oscillator. Jag använder MikroC som kompilator.. Jag har gjort det innan men jag kommer fan inte ihåg det.
hehe jag var inte tillräckligt tydlig. Jag vet att det är i den menyn.. men jag vet inte vilken av alternativen som ska var förbockade samt avbockade.
sen är det en grej till Jag har lyckats tända alla segment på displayen utom tre. två av segmenten är kopplad till just de oinnarna som annars kristallen skulle suttit på dvs pinne 2,3 (Ra5/Ra6). Kan detta bero på att den inte är satt som intern oscillator?
Sista segmentet som jag inte lyckats tända är kopplad till pinne 16 (RC7).. men här har jag inte ngn förklaring...
sen är det en grej till Jag har lyckats tända alla segment på displayen utom tre. två av segmenten är kopplad till just de oinnarna som annars kristallen skulle suttit på dvs pinne 2,3 (Ra5/Ra6). Kan detta bero på att den inte är satt som intern oscillator?
Sista segmentet som jag inte lyckats tända är kopplad till pinne 16 (RC7).. men här har jag inte ngn förklaring...
Här är min kod... den funkar ännu inte. Mitt första steg är iaf att tända rätt segment för att visa siffror.
/ Fuktmätare för luftfuktighet.
// Pic16f690. Intern oscillator 4Mhz. Extern MCLR
/ Fuktmätare för luftfuktighet.
// Pic16f690. Intern oscillator 4Mhz. Extern MCLR
Kod: Markera allt
unsigned int Value;
unsigned int Vbat;
void main(){
ANSEL = 0b00000110; //an1 och an2 analog in, resten I/O
ANSELH = 0b00000000; //I/O
ADCON1 = 0b00110000; //Frc klocka vald
TRISC = 0b00000000; //PORTC är utgångar
TRISB = 0b00000000; //PORTB är utgångar
TRISA = 0b00000110; //PORTA, RA1/RA2= ADC ingång, andra utgång
PORTA = 0b11011111 ; //Skriver RH på display i 10sek
PORTB = 0b11010000 ;
PORTC = 0b00100000 ;
Delay_ms(10000);
/*
while(1){ //testloop
PORTA = 0b11111111 ;
PORTB = 0b11111111 ;
PORTC = 0b11111111 ;
delay_ms(2000);
PORTA = 0;
PORTB = 0;
PORTC = 0;
delay_ms(2000);
}
*/
while(1){
ADCON0 = 0b11000111; //Sätter AN1 till inläsning
Vbat = ADC_read(1);
if(Vbat < 0x028E ){ //Läser av Vbat. Skriver ut LO om den
PORTA = 0b01110001 ; //understiger 654Dec (3,2V)
PORTB = 0b01110000 ;
PORTC = 0b00110000 ;
delay_ms(2000);
}
ADCON0 = 0b11001011; //Sätter AN2 till inläsning
Value = ADC_read(2); //Read ADC channel 2.
//**5**
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);
}
if( 0xCD < Value <= 0xEB ){ //**10**
PORTA = 0b00110000 ;
PORTB = 0b01110000 ;
PORTC = 0b01010001 ;
delay_ms(5000);
}
if( 0xEB < Value <= 0x010E ){ //**15**
PORTA = 0b00100000 ;
PORTB = 0b11100000 ;
PORTC = 0b01010001 ;
delay_ms(5000);
}
if( 0x010E < Value <= 0x0129 ){ //**20**
PORTA = 0b00110000 ;
PORTB = 0b01110000 ;
PORTC = 0b10111101 ;
delay_ms(5000);
}
if( 0x0129 < Value <=0x014B ){ //**25**
PORTA = 0b00110000 ;
PORTB = 0b11100000 ;
PORTC = 0b10111101 ;
delay_ms(5000);
}
if( 0x014B < Value <= 0x0166){ //**30**
PORTA = 0b00110000 ;
PORTB = 0b01110000 ;
PORTC = 0b10101111 ;
delay_ms(5000);
}
if( 0x0166 < Value <= 0x018D ){ //**35**
PORTA = 0b00100000 ;
PORTB = 0b11100000 ;
PORTC = 0b10101111 ;
delay_ms(5000);
}
if( 0x018D < Value <= 0x01A7 ){ //**40**
PORTA = 0b00110000 ;
PORTB = 0b01110000 ;
PORTC = 0b01001111 ;
delay_ms(5000);
}
if( 0x01A7 < Value <= 0x01CC ){ //**45**
PORTA = 0b00100000 ;
PORTB = 0b11100000 ;
PORTC = 0b01001111 ;
delay_ms(5000);
}
if( 0x01CC < Value <= 0x01E1 ){ //**50**
PORTA = 0b00110000 ;
PORTB = 0b01110000 ;
PORTC = 0b11101011 ;
delay_ms(5000);
}
if( 0x01E1 < Value <= 0x01FB ){ //**55**
PORTA = 0b00110000 ;
PORTB = 0b11100000 ;
PORTC = 0b11101011 ;
delay_ms(5000);
}
if( 0x01FB < Value <= 0x0222 ){ //**60**
PORTA = 0b00110000 ;
PORTB = 0b01110000 ;
PORTC = 0b11111011 ;
delay_ms(5000);
}
if( 0x0222 < Value <= 0x0241 ){ //**65**
PORTA = 0b00110000 ;
PORTB = 0b11100000 ;
PORTC = 0b11111011 ;
}
if( 0x0241 < Value <= 0x025D ){ //**70**
PORTA = 0b00000000 ;
PORTB = 0b01110000 ;
PORTC = 0b00110000 ;
delay_ms(5000);
}
if( 0x025D < Value <= 0x027E ){ //**75**
PORTA = 0b00100000 ;
PORTB = 0b11100000 ;
PORTC = 0b10000111 ;
delay_ms(5000);
}
if( 0x027E < Value <= 0x0298 ){ //**80**
PORTA = 0b00110000 ;
PORTB = 0b01110000 ;
PORTC = 0b11111111 ;
delay_ms(5000);
}
if( 0x0298 < Value <= 0x02C2 ){ //**85**
PORTA = 0b00100000 ;
PORTB = 0b11100000 ;
PORTC = 0b11111111 ;
delay_ms(5000);
}
if( 0x02C < Value <= 0x02E2 ){ //**90**
PORTA = 0b00110000 ;
PORTB = 0b01110000 ;
PORTC = 0b11001111 ;
delay_ms(5000);
}
if( 0x02E2 < Value <= 0x02FF ){ //**95**
PORTA = 0b00100000 ;
PORTB = 0b11100000 ;
PORTC = 0b11001111 ;
delay_ms(5000);
}
if( Value > 0x02FF ){ //**99**
PORTA = 0b00000000 ;
PORTB = 0b11110000 ;
PORTC = 0b11001111 ;
delay_ms(5000);
}
}
}
> Kan detta bero på att den inte är satt som intern oscillator?
Ja, i alla fall enligt databladet. Kör du INTOSCIO ?
> men jag vet inte vilken av alternativen som ska var förbockade samt avbockade.
Hur menar du ? Vad är det som är oklart ? Vad har du för alternativ ?
Stämmer de inte överens med databladet (och device INC filen) ?
Ja, i alla fall enligt databladet. Kör du INTOSCIO ?
> men jag vet inte vilken av alternativen som ska var förbockade samt avbockade.
Hur menar du ? Vad är det som är oklart ? Vad har du för alternativ ?
Stämmer de inte överens med databladet (och device INC filen) ?
Kolla bilderna där är alla alternativ som finns. De som är förbockade är default. Där finn ju en som heter INTOSC och jag antar att det är vel den som ska bockas i.
Jag vet inte cvad device inc filen är
http://www.ladda-upp.com/bilder-a/piccccc-871.JPG
http://www.ladda-upp.com/bilder/10561/piccccc
Jag vet inte cvad device inc filen är

http://www.ladda-upp.com/bilder-a/piccccc-871.JPG
http://www.ladda-upp.com/bilder/10561/piccccc
Det ser ju helt OK ut. Vad är problemet ? Att du inte ka köra med HS_OSC
är väll uppenbart, eller hur ?
> Jag vet inte cvad device inc filen är
P16F690.INC
Den finns i din MPLAB installation och där finns det ytterligare en
beskrivning av CONFIG inställningarna. Kolla där också.
Men annars vet jag inte varför du inte bara väljer det du vill
ha på den där bilden du länkade till...
är väll uppenbart, eller hur ?
> Jag vet inte cvad device inc filen är
P16F690.INC
Den finns i din MPLAB installation och där finns det ytterligare en
beskrivning av CONFIG inställningarna. Kolla där också.
Men annars vet jag inte varför du inte bara väljer det du vill
ha på den där bilden du länkade till...
> intosc
Nu fattar jag inte rilktigt...
Varför just INTOSC ?
Var det inte INTOSCIO du ville ha !?
Det hela låter som om du inte har läst CONFIG delan av databladet,
och i så fall är det ju ingen mening att fortsätta.
Vad är det som är oklart i
"REGISTER 14-1: CONFIG: CONFIGURATION WORD REGISTER"
under "bit 2-0 FOSC<2:0>: Oscillator Selection bits" ??
Nu fattar jag inte rilktigt...
Varför just INTOSC ?
Var det inte INTOSCIO du ville ha !?
Det hela låter som om du inte har läst CONFIG delan av databladet,
och i så fall är det ju ingen mening att fortsätta.
Vad är det som är oklart i
"REGISTER 14-1: CONFIG: CONFIGURATION WORD REGISTER"
under "bit 2-0 FOSC<2:0>: Oscillator Selection bits" ??
Alltså :bit 2-0 FOSC<2:0>: Oscillator Selection bits
111 = RC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN
110 = RCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, RC on RA5/OSC1/CLKIN
101 = INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin,
I/O function on RA5/OSC1/CLKIN
100 = INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin,
I/O function on RA5/OSC1/CLKIN
011 = EC: I/O function on RA4/OSC2/CLKOUT pin, CLKIN on RA5/OSC1/CLKIN
010 = HS oscillator: High-speed crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN
001 = XT oscillator: Crystal/resonator on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN
000 = LP oscillator: Low-power crystal on RA4/OSC2/CLKOUT and RA5/OSC1/CLKIN
"100 = INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN"
Var det inte så du ville ha det ?
-
- EF Sponsor
- Inlägg: 544
- Blev medlem: 8 december 2006, 11:18:14
- Ort: Tågarp, Svalöv
-
- EF Sponsor
- Inlägg: 544
- Blev medlem: 8 december 2006, 11:18:14
- Ort: Tågarp, Svalöv