Sida 1 av 2

Känna av sluten eller öppen krets

Postat: 26 juli 2010, 03:08:26
av anedv002
Hej!

Jag hade tänkt att göra en enkel larmcentral baserad på en PIC 16F690, men faller på det mest grundläggande; att känna av om t.ex. en rörelsedetektor ser något..

De sensorer jag har fungerar så att det är kontakt mellan två punkter när den inte "ser" något, och ingen kontakt när den ser något.

Jag kopplade upp en enkel koppling på kopplingsdäck, och blev överaskad när den delvis gjorde det jag ville.
koppling1.jpg
Kod(MikroC):

Kod: Markera allt

void main() {

    ANSEL = 0;
    ANSELH = 0;
    TRISC=0;             //PORTC = utgångar
    PORTC = 0b11000000;  //Tänder Grön och Röd LED
    
    TRISC=0b00000100;    //Hela PORTA är utgångar förutom bit 2 som är ingång





    while(1) {         // oänlig loop
     PORTC.F0=1;       //Gör PORTC bit0's pinne hög
     Delay_us(50);     //en kort pause
     
     if(PORTA.F2=1)    //om PORTA bit 2 = 1
        {
         PORTC=0b10000000;      //Tänd Grön LED, gör även PORTC bit 0 låg
        }
        
     else                 //Annars
        {
         PORTC=0b01000000;    //Tänd Röd LED, gör samtidigt PORTC bit 0 låg
        }

     Delay_ms(50);          //En pause för att sega ner hela processen, ej nödvändig
     
    }
}
Jag är helt säker på att man inte bör göra som jag har gjort, varken kodmässigt eller kopplingsmässigt.

Nåja, det som händer är följande:
När de två pinnarna är sammankopplade lyser LEDen stadigt grönt och fint :D , men sen när man bryter kontakten mellan de så börjar LEDen blika Rött och Grönt lite som den vill, Speciellt när man kommer i närheten av Porta bit2's pinne, Hehe. Det blir en antenn av den :P

Nu när ni vet lite grann av vad jag vill göra och vad jag har gjort så har jag en fråga:
Hur bör jag göra för att få önskad funktion?

Klaga/rätta/beröm/kritisera gjärna, om det kan hjälpa mig! :)
Som ni säkert redan märkt är jag nybörjare, Men det är väl alla i början, inte sant?

Tack på förhand!
/Andreas

Re: Känna av sluten eller öppen krets

Postat: 26 juli 2010, 03:20:33
av sneaky
Om jag förstår din ritning rätt så behöver du lägga till ett så kallat "pullup"-motstånd. Med det menas att du behöver ha ett motstånd från ingången för sensorn till VDD (10k brukar jag köra med, rätt eller fel får någon annan svara på men det funkar). Detta gör att ingången hela tiden har ett bestämt värde hela tiden. När sensorn inte är sluten mot jord så drar pullup-motståndet ingången till 5V och när sensorn sluter mot GND så dras ingången således till GND istället.

Det du märkte med "antennen" är precis vad som händer när man lämnar en ingång flytande, det är helt hopplöst att veta vilket läge den befinner sig i. Pullup-motståndet löser detta. Lämna alltså aldrig en ingång flytande.

Re: Känna av sluten eller öppen krets

Postat: 26 juli 2010, 08:48:16
av Walle
Och vill du göra det riktigt snyggt så gör du kretsen dubbelbalanserad, d.v.s. lägger en resistor parallellt och en seriellt med sensorn. Vid avbrott eller kortslutning har någon micklat med larmet, sluten krets ger resistansen hos seriemotståndet, och öppen krets ger resistansen hos seriemotståndet plus parallellmotståndet. Något krångligare att läsa av blir det dock, men det kan lätt lösas genom att bygga ett RC-nät med en konding som laddas ur genom resistanserna.

Re: Känna av sluten eller öppen krets

Postat: 26 juli 2010, 08:56:56
av Nerre
Det är inte så svårt att läsa av balanserade slingor om man har A/D-ingångar att använda.

I princip funkar det ju så att om det är avbrott på slingan (=sabotage) så får man full spänning.
I normalläge får man (om slutmotståndet i slingan är lika stort som pullup) halva spänningen.
Vid kortslutning (=sabotage) får man noll volt.

Vid larm får man en spänning mellan halv och full spänning.

Re: Känna av sluten eller öppen krets

Postat: 26 juli 2010, 12:40:43
av sodjan
Om jag förstår rätt så vill du bara känna av "öppen" resp "sluten".

Till det behöver du inte använda *två* pinnar på processorn, det är
en i onödan, så att säga.

- Lägg den ledning från sensorn som är kopplad till PORTC.0 direkt till jord/GND istället.
- Sätt ett 10 kohm motstånd från PORTA.2 till 5V.

Nu får du en "låg" ("0") på PORTA.2 så länga allt är OK, och en "hög" ("1") så snart
sensorn öppnar (d.v.s "ser något") eller om kablarna klippas av...

Koden blir den samma...

EDIT: Rättat portnummer...

Re: Känna av sluten eller öppen krets

Postat: 26 juli 2010, 13:16:14
av victor_passe
Sodjan:
Hmm, så två pinnar är onödigt att använda?
Men ditt exempel använder 3st.
Aja, jag antar att alla pinnar du beskriver är samma pinne.

Re: Känna av sluten eller öppen krets

Postat: 26 juli 2010, 13:24:24
av sodjan
> Hmm, så två pinnar är onödigt att använda?

Ja, för det enkla fall som beskrivs i förstainlägget så räcker en pinne.
Eller har du en annan åsikt ?

> Men ditt exempel använder 3st.

Nej, det använder *en* pinne (PORTA.2)

> Aja, jag antar att alla pinnar du beskriver är samma pinne.

Ja, det var ett skrivfel ("PORTA.0") på ett ställe, men det var ganska uppenbart.
Man hur du kunde få det till *3* pinnar fattar jag däremot inte...

EDIT: Shit, samma fel igen... :doh: Rättat... :-)

Re: Känna av sluten eller öppen krets

Postat: 26 juli 2010, 13:28:45
av victor_passe
Oj, jag läste lite väl snabbt.
Och du menar PORTA.2 väl?
Det är lätt hänt att man läser/skriver lite för snabbt.

Re: Känna av sluten eller öppen krets

Postat: 26 juli 2010, 16:05:59
av jojje
Nånting sånt här kanske går att använda?

Re: Känna av sluten eller öppen krets

Postat: 26 juli 2010, 16:17:45
av Nerre
R1 kan vara noll (d.v.s. behövs inte).

Re: Känna av sluten eller öppen krets

Postat: 26 juli 2010, 16:37:37
av victor_passe
Är man nybörjare så kan man ju ha typ 470Ohm där ungefär.
Blir ju tråkigt om man skriver fel och drar pinnen till 5V och trycker på knappen.
Men det behövs ju, som du säger, inte.

Re: Känna av sluten eller öppen krets

Postat: 26 juli 2010, 17:42:08
av Nerre
Problemet med att sätta motståndet där det sitter i det där schemat är att när du sluter brytaren blir inte spänningen på ingången noll (du får ju en spänningsdelare).

Motståndet skall i såna fall sitta mellan ingången och punkten där pullup och brytare möts.

Re: Känna av sluten eller öppen krets

Postat: 26 juli 2010, 17:56:11
av jojje
Så här?

Skickar även med DipTrace-filen, så kan ni ändra lättare.
Men ta bort .txt på slutet.
Varför måste man ändra efternamnet? :doh:

Re: Känna av sluten eller öppen krets

Postat: 26 juli 2010, 18:04:56
av anedv002
Tack för alla svaren!

Det finns flera svar som fungerar väldigt bra till det jag ville göra från början, men förslaget med en dubbelbalanserad krets lät väldigt intressant, inte minst med tanke på sabotageskydd.
Inte för att det kan förekomma sabotage, utan för att det är kul att ha kunskapen att kunna göra en snygg och effektiv koppling :) .

Jag försökte rita upp en koppling med de instruktioner som fanns, och här är resultatet:
koppling2.jpg
Har jag tänkt rätt? Vilka värden på motstånden rekomenderar ni?

Tack
/Andreas

Re: Känna av sluten eller öppen krets

Postat: 26 juli 2010, 19:24:34
av Nerre
Det ser ungefär rätt ut, men motståndet R2 brukar man sätta i änden av slingan och så har man ett R3 över varje detektor.

Värden vete fan, det var för länge sen jag pysslade med larm så jag minns inte... R2 och R3 brukar vara lika stora (man vill inte krångla med olika motstånd) och 4,7 k eller 6,8 k kan kanske vara vettigt. Vet inte om R1 borde vara mindre då, du får räkna lite på vad det blir för spänningar (tänk på att kablarnas resistans påverkar lite).

Hmm, det slår mig nu att jag kanske skrev fel förut, normalt så är ju olika larmgivare slutna i normalfall, så man har en sluten slinga när inget larmar. Jag tror jag formulerade mig som att kontakten sluts vid larm.