LDR resistor till PIC6F690

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
jacobse
Inlägg: 194
Blev medlem: 25 januari 2013, 23:57:40

LDR resistor till PIC6F690

Inlägg 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);
}

}
}
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: LDR resistor till PIC6F690

Inlägg 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){
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46976
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: LDR resistor till PIC6F690

Inlägg av TomasL »

Ett schema med komponentvärden vore väldigt lämpligt också.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: LDR resistor till PIC6F690

Inlägg 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...
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46976
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: LDR resistor till PIC6F690

Inlägg av TomasL »

Naturligtvis inte, men koden måste ju vara byggd efter ett tänkt schema.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: LDR resistor till PIC6F690

Inlägg 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.
andpe
Inlägg: 98
Blev medlem: 13 januari 2011, 23:18:37

Re: LDR resistor till PIC6F690

Inlägg 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
Användarvisningsbild
SeniorLemuren
Inlägg: 8427
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: LDR resistor till PIC6F690

Inlägg 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
jacobse
Inlägg: 194
Blev medlem: 25 januari 2013, 23:57:40

Re: LDR resistor till PIC6F690

Inlägg 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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: LDR resistor till PIC6F690

Inlägg 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 ??
jacobse
Inlägg: 194
Blev medlem: 25 januari 2013, 23:57:40

Re: LDR resistor till PIC6F690

Inlägg 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!
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46976
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: LDR resistor till PIC6F690

Inlägg av TomasL »

Åter igen, schema.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: LDR resistor till PIC6F690

Inlägg 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.
jacobse
Inlägg: 194
Blev medlem: 25 januari 2013, 23:57:40

Re: LDR resistor till PIC6F690

Inlägg 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?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46976
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: LDR resistor till PIC6F690

Inlägg av TomasL »

Suck, komplett Schema!!!
Skriv svar