Sida 1 av 2

LDR resistor till PIC6F690

Postat: 30 juli 2013, 15:48:47
av jacobse
Hej!

Jag håller på och försöker lära mig att programera PIC. Nu ska jag försöka mig på att ansluta två LDR motstånd. Jag har även två dioder kopplade till min PIC. Det jag vill uppnå är att när ena sensorn blir belyst så ska den gröna dioden lysa och när den andra blir belyst ska den röda lysa. Ganska enkelt kan tyckas. Men jag får det inte att fungera när jag kör min kod i mitt simuleringsprogram. Jag använder MikroC vid programering av PIC. Jag misstänker att det är nått strul med min ADC avläsning. Bifogar koden och hoppas att nån har tid att hjälpa mig en bit på vägen.

Kod: Markera allt

float left,right;
int i;

void main() {
ADCON0=0b00000001;
ANSEL=0b00000011;
ANSELH=0b1111;

TRISA=0b11111111;

TRISC=0b00000000;
PORTC=0b00000000;

i=0;
while (i<1){
left=ADC_Read(0);
right=ADC_Read(1);

if (left>right){
 PORTC=0b00000001;
 delay_ms(1000);
}

if (left<right){
 PORTC=0b00000010;
 delay_ms(1000);
}

}
}

Re: LDR resistor till PIC6F690

Postat: 30 juli 2013, 16:31:54
av sodjan
> Jag har även två dioder kopplade till min PIC.

Lysdioder, antar jag. :-)

> när jag kör min kod i mitt simuleringsprogram.

Som är vilket då? Hur simulerar du inspänningarna till ADC ingångarna?

> float left,right;

Finns ingen anledning att köra med float.
Använd vanliga integers så får du mycket kompaktare kod.

> ANSELH=0b1111;

Även om enbart 4 bitar används av registret, så har det fortfarande
8 bitar. Nu så tror jag att det blir rätt i detta fall i alla fall, men för att
undvika missförstånd är det tydligare att alltid ange 8 bitar oavsett
hur många som faktiskt används. Alltså t.ex:
> ANSELH=0b00001111;

För övrigt vet jag inte. Du får skala av/ner koden och verifiera
att du över huvudtaget får något från ADC_Read().
Men ta bort float förts... :-)

EDIT:
En liten detalj bara...

> i=0;
> while (i<1){

Ger inte detta samma resultat: ?

> while (1){

Re: LDR resistor till PIC6F690

Postat: 30 juli 2013, 19:30:20
av TomasL
Ett schema med komponentvärden vore väldigt lämpligt också.

Re: LDR resistor till PIC6F690

Postat: 30 juli 2013, 20:08:20
av sodjan
För simulatorn spelar det sannolikt ingen roll hur spänningen
skapas eller hur LDR'en är tänkt att kopplas in IRL.
Problemet är ju att simuleringen inte fungerar...

Re: LDR resistor till PIC6F690

Postat: 30 juli 2013, 20:32:39
av TomasL
Naturligtvis inte, men koden måste ju vara byggd efter ett tänkt schema.

Re: LDR resistor till PIC6F690

Postat: 30 juli 2013, 21:09:50
av sodjan
Koden bör vara byggd för vissa spänningar på ADC pinnarna.
Hur dessa spänningar skapas har ingen större betydelse.
Speciellt inte för simulatorn!

Och koden som sådan var ju enkel, tanken är att jämföra
nivåerna på de två ADC-pinnarna, vilken absolut nivå det
är har ingen betydelse, enbart den rellativa nivån.

Re: LDR resistor till PIC6F690

Postat: 30 juli 2013, 23:50:34
av andpe
Hei.
Hva skjer om variablene er like ?
Er de like i simulatoren?
Hva skjer når du simulerer? ingenting? blåskjerm?
Prøv å legg inn en tredje state;


if (left==right){
PORTC=0b00000011;
delay_ms(1000);
}



Andreas

Re: LDR resistor till PIC6F690

Postat: 31 juli 2013, 08:51:22
av SeniorLemuren
Det som sodjan påpekar, att du skall använda integer, anges även i beskrivningen för funktionen:

Kod: Markera allt

Prototype unsigned ADC_Read(unsigned short channel);
 
Returns 10 or 12-bit unsigned value read from the specified channel (MCU dependent).
 
unsigned (int) = 2 bytes heltal 0-65535

Re: LDR resistor till PIC6F690

Postat: 31 juli 2013, 18:04:47
av jacobse
Tack så otroligt mycket för all hjälp. Hoppade nu över simuleringen och kopplade in hårdvaran. Såg ut att fungera. Ska göra lite fler tester ikväll. Det jag vill ska ske så småningom är att sensorerna styr en motor. Ska prova koppla in en liten motor via en uln2003a ikväll. Återkommer senare med lite resultat. Tack för all hjälp.

Re: LDR resistor till PIC6F690

Postat: 31 juli 2013, 18:08:20
av sodjan
OK det var väl bra, men...
Lite dålig stil att inte i alla fall försöka svara på frågorna.

> > ...när jag kör min kod i mitt simuleringsprogram.
>
> Som är vilket då? Hur simulerar du inspänningarna till ADC ingångarna?

Alltså, varför fungerade det inte i simuleringen ??

Re: LDR resistor till PIC6F690

Postat: 31 juli 2013, 19:03:47
av jacobse
Vet inte varför simuleringen inte fungerade. Kör med proteus till simulering. Använde ldr torch till adc ingångarna. Nu när jag provat lite mer ser sensorerna ut att fungera som planerat. Men får inte motorn att starta från uln chippet. Motorn är från Kjell. När jag testar med 12v lampa går det. Någon idé vad det kan vara? Tack igen för alla goda råd!

Re: LDR resistor till PIC6F690

Postat: 31 juli 2013, 19:29:41
av TomasL
Åter igen, schema.

Re: LDR resistor till PIC6F690

Postat: 31 juli 2013, 19:44:07
av sodjan
Ja *nu*, när det inte längre är simulering, så är det ju väldigt
intressant att veta vad som används ("från Kjell" är en komplett
värdelös uppgift) och hur det är kopplat.

Re: LDR resistor till PIC6F690

Postat: 2 augusti 2013, 15:15:10
av jacobse
Ledsen för mina dåliga förklaringar. Har försökt få fram ett datablad för motorn. Men verkar inte gå. Jag har kopplat utporten från Pic till vänstra sidan på ULN. Högra sidan på ULN till minus på motorn. Plus på motorn till 12v. Man hör att motorn hackar till men startar inte. När jag gjort ett enkelt testprogram som sätter på och stänger av en utport så funkar motorn. Någon som har nått förslag på vad det kan vara?

Re: LDR resistor till PIC6F690

Postat: 2 augusti 2013, 15:41:12
av TomasL
Suck, komplett Schema!!!