Problem med LDR på Pic

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Problem med LDR på Pic

Inlägg av PHermansson »

Kör mjukvaru-PWM i en Pic 16F88, och jag försöker nu få PWM:en att stanna om det är ljust i rummet. På RB5 har jag kopplat ett LDR och en trimmer, och när statusen på denna port ändras körs en interruptrutin som kollar statusen på RB5 och startar/stoppar PWM:en beroende på om det är ljust eller mörkt. Detta fungerar bra, förutom på gränsen mellan ljust och mörkt där det verkar som om Pic:en inte kan bestämma sig för om ingången är hög eller låg vilket leder till att lysdioden som PWM:en styr flimrar. Hur kan man undvika detta?
Användarvisningsbild
JimmyAndersson
Inlägg: 26578
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

>det verkar som om Pic:en inte kan bestämma sig för om ingången är hög eller låg

LDR-motståndet ger värden som ena stunden ger en 'hög' signal (en 1:a) och i nästa stund ger en 'låg' (en 0:a). Det ligger liksom på gränsen hela tiden och kan byta mellan 'låg' och 'hög' när som helst ungefär...


Jag vet inte hur du har kopplat, men jag har två förslag:

1: Om man gör en liten koppling med LDR till en OP-förstärkare (eller komparator, eller två transistorer) så kan man med en potentiometer justera så att kopplingen ger en 0:a när det är mörkt och en 1:a när det är ljust. Det går då att justera så att den inte är lika känslig när det är precis lite sådär 'halvmörk/ljust'. (Denna signal kopplas till en digital ingång på PIC-kretsen.)
Sedan kan man göra en liten rutin i PIC-kretsen som låter det gå en viss tid mellan varje avläsning från 'LCD-bygget'. Detta gör att du får ännu bättre resultat.


2: En annan variant är att man gör en liknande variant som ovan, men behåller den analog så att den ger en spänning mellan 0-5v. Det kopplar man till en analog ingång på PIC-kretsen och programmerar så att 0-1v motsvarar mörker och 4-5v motsvarar när det är ljust.
Detta är lättare att bygga men kräver lite mer kodande.
ClasseMan
Inlägg: 176
Blev medlem: 9 juli 2004, 15:21:02
Ort: Karlskrona
Kontakt:

Inlägg av ClasseMan »

Eftersom denna kontroller har inbygd komperator skulle du kunna använda den till att bygga en schmitttrigger vilket jag misstänker är det JimmyAndersson menar i allternativ 1

Men det enklaste är kanske att lösa det i mjukvara genoma att kolla så att porten är stabil under en stund kan göras med hjälp av en timer eller bara en liten delay loop.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

En digial I/O pinne skall aldrig ha annat än digital I/O !

Används en komparator. Se kap 13 i databladet.

Obs att du fortfarande kan få ett läge där det "står och väger".
Du skulle kunna lägga till en "bias" till LDR spänningen via
en extra I/O pinne som du sätter hög/låg när komparatorn slår om.

Eller ändra den inbyggda spänningsrefferensen om "steget" passar.
Se kap 14.

Använd komparatorns interrupt så kommer allt att snurra i bakgrunden
utan du behöver bry dig om det i din huvudkod...
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Inlägg av PHermansson »

Tack för idéerna! Att koppla LDR'en till en analog ingång var vad jag hade tänkt från början, men då blir det svårt att använda interrupt vid ändring. En komparator hjälper väl egentligen inte mot problemet vid omslag? Komparatorn kommer väl också att växla fram och tebax? Sedan har jag använt RA0-RA2 som A/D-ingångar redan...
Att vänta en stund och kolla igen (som vid kontaktavstudsning) blir lite besvärligt, ljuset som mäts är dagsljus man kan ju få vänta ganska länge på att ljusnivån ändras...
Det bästa vore kanske en separat opamp med hysteres (eller vad det nu hette) som går hög vid kanske 4 volt och låg vid typ 1 volt?
Användarvisningsbild
EagleSpirit
Inlägg: 1288
Blev medlem: 27 maj 2003, 23:15:48
Ort: Västerås
Kontakt:

Inlägg av EagleSpirit »

Jag har för mig att komparatorn har interrupt, men är inte helt säker. Det borde finnas tycker jag. Om det nu inte finns, är du säker på att du behöver interrupt? Du kanske kan lösa det genom att kolla värdet en gång i sekunden eller nåt sånt.

Eftersom det är en µC du håller på med så är det du själv som bestämmer vad du ska göra med den, i princip. Med det menar jag att visst kommer komparatorn att växla fram och tillbaks om du programmerar att den ska göra det. Men du kan även skapa egen hysteres, precis som du kan göra med en OP-amp. Det är bara att läsa databladet och se vilka funktioner som finns och lägga till några rader kod.

En enkel metod är att mäta en analog ingång varje sekund och om värdet är över 60% mörker ska den stänga av PWMen och om värdet är under 50% mörker ska den starta PWMen. Det betyder att under de där 10% så kommer ingenting att hända. Detta kräver väl inte mer än 10 rader kod eller något liknande.

edit: om det är som sodjan säger så är det ju inga problem. PICen har troligtvis de funktioner du behöver.
Skriv svar