Input-output

Fra Kommunikation-IT Holstebro HTX
Skift til: navigering, søgning

De fleste ben på en PIC kan sættes op til input og output på en eller anden måde.

Arduino er der en række digitale input og output, samt en række analoge input. Man kan også lave noget der ligner analogt output på nogle af de digitale ben. Det sker ved at bruge PWM som pulser høj og lav i et forhold der giver en analog værdi, hvis signalet midles ud.

Hvad kan et input og et output?

Et input kan tage et højt eller lavt signal. Mikrochippen kan så tage dette signal/spænding, og give pro-grammet i PIC’en et signal om at der er et input. Der skal en bestemt spænding til at input registrere et højt signal. Hvor stor denne spænding skal være afhænger af hvilken PIC man bruger. Når der er registreret et input, kan programmet ”se” det. Så behandler programmet inputtet, og kan så sende et signal på hvilken som helst output.

Det et output så gør, er at sende signalet videre i kredsløbet, og få kredsløbet (IC’erne) til at udføre nogle bestemte funktioner. Det er så koden der er programmeret ind i PIC’en (programmet) der bestemmer hvilke funktioner der udføres.

Inden vi går videre til PIC’en vil vi kort kigge på, hvad et input og et output kan. Hvis et ben er input, kan det kun ændres udefra. Det vil altså sige, at vi kan ændre det direkte uden for PIC’en ved fx at slutte en kontakt. Når vi ændrer på dette input kan PIC’en registrere det, og måske udføre noget på baggrund af det, hvis den er programmeret til det. Et output er noget der kan ændres af PIC’en ud fra, hvordan den er programmeret. PIC’en bestemmer altså så at sige, om dette ben er på high eller low. Derfor er det også en dum ide, at koble outputs sammen eller koble output direkte til forsyning eller stel. Hvis to outputs var koblet direkte sammen, vil de jo få svært ved at have to forskellige spændinger.

Specielt om Input

Et input er når en af PIC’ens ben er programmeret til kun at aflæse om benet har en høj eller lav spænding.

Når benet skal bruges som input, bør der være enten en pull-down- eller pull-up-modstand, sådan at spændingen ikke bare er tilfældig, når ikke andet er bestemt. Det vil være uhensigtsmæssigt.

Kan dioderne erstattes med pærer der kræver 5 volt 1 ampere?

Dette spørgsmål er noget vi bestemte os for at finde ud af. Vores første forventning/hypotese var at vi nemt kunne sætte pære til i stedet for dioderne. Men da vi så gik ind i databladet under ”Electrical Specifi-cations”, kunne vi se at der maksimalt kunne komme 25 mA ud af hver pin på PIC’en, og da pæren kræver 1 A er det ikke muligt bare uden videre at sætte dem til.

Ønsker man alligevel at drive noget der trækker større strøm, så kan man anvende en transistor som switch

Hvad begrænser pin A3?

Dette afsnit er specifikt på PIC16F684 udviklingsboard

A3 pinnen begrænser både noget i hardwaren og softwaren. Software delen er at denne pin ikke har noget output. Den består af nogle bestemte komponenter der sørger for at der kun er input i den. Denne pin bruges sammen med A0 og A1 til selve programmeringen. Det er i disse ben at koden man skriver bliver brændt ind i PIC’en. Hele pointen ved at der kun er input er at det er nemmere at programmere og brænde koden ned på PIC’en, uden at der opstår problemer. Hardware delen er at A3 benet er sat til en 100k og en 10k modstand. Det skal sørge for at uanset hvad du sætter til på den anden side af modstandene vil det ikke kunne gå ind og forstyrre brændingen af PIC’en.

Hvad begrænser pin A0 og A1

Dette afsnit er specifikt på PIC16F684 udviklingsboard

De begrænser den strøm som benene i ICSP porten kan levere til PIC boardet. På den måde forhindrer man at sit PIC board brænder af, når man er ved at programmere den. Der er en 4,7 k ohm modstand sat til både pin A0 og A1, samt en lysdiode.

Digitalt Input på Arduino

For at et digitalt ben kan fungere som input på arduinoen skal det først definere som digitalt input. Det gøres på følgende måde:

  const int buttonPin = 2;     // the number of the pushbutton pin

  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);

Dette kan indsættes i setup(), men det er en fordel at buttonPin defineres uden for, så det samme navn kan anvendes i hele programmet.

Herefter kan et digitalt input læses som:

  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

Det der sker er at der læses på ben 2 (buttonPin) om den er høj eller lav, hvilket gemmes i variablen buttonState, så det kan bruges senere i programmet.

Pull-up modstand programmeret

Normalt når man bruger input på mikrocontrollere, så vil man sikre at inputet har et fast niveau hvis der ikke er noget forbundet til det, som f.x. når man sætter en kontakt til at trække inputet højt, så vil man sætte en pull-down modstand på, så inputet er lav hvis der ikke er trykket på kontakten, og kontakten trækker så inputet højt.

Hvis man vil spare den modstand, så kan man programmere sig til at der er en pull-up modstand inde i kredsen på ca. 20 k ohm[1].

Det gør man på følgende måde:

  const int buttonPin = 2;     // the number of the pushbutton pin

  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
  // turn on pullup resistor
  digitalWrite(buttonPin, HIGH);

Alternativt kan det gøres på følgende måde:

  const int buttonPin = 2;     // the number of the pushbutton pin

  // initialize the pushbutton pin as an input with Pull Up:
  pinMode(buttonPin, INPUT_PULLUP);

Måden at håndtere inputtet på gør så at man skal have kontakten sluttet til stel, og registrere at inputtet går lavt når der trykkes på kontakten i stedet for højt, når der ikke er trykket på den.

Digitalt Output på Arduino

For at et digitalt ben kan fungere som output på arduinoen skal det først definere som digitalt output. Det gøres på følgende måde:

  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);

Dette kan ligeledes indsættes i setup().

Man kan nu sætte et output med følgende kode:

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
    // turn LED on:    
    digitalWrite(ledPin, HIGH);  
  } 
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW); 
  }

Dette kan virke lidt voldsomt til blot at sætte et output.

Alternativt kan man anvende følgende kode:

  // Set the ledPin to the state in buttonState
  digitalWrite(ledPin, buttonState);

Referencer

  1. http://arduino.cc/en/Tutorial/DigitalPins Arduino omkring digitale input og output