Cintillo Institucional

wiki comunidad

Proyecto Hardware Libre Cenditel

Página Cenditel

wiki Cenditel

Plataforma de Desarrollo Colaborativo

Curso Sensibilización Hardware Libre (Unidad 002)

logohl.png logohl.png logohl.png

002/03 Actividad 003

Con esta actividad se busca comenzar con el manejo del puerto serie, su iniciación y sus comandos.

La mayoría de los microcontroladores están diseñados para trabajar de manera autónoma, es decir sin necesidad de tener comunicación de manera continúa con el computador. El hardware arduino utiliza el puerto serie para la transmisión tanto del código en el momento de la programación, como envío de datos para comunicación con periféricos.

El puerto Serie

Para la comunicación serial se utilizan dos lineas, una para el envío y otra para la recepción, llamadas comunmente como (tX y rX), lo que permite tener una comunicación "full duplex", es decir enviar y recibir de manera simultánea.

serie2.png
figura 23.1. Diagrama de una comunicación serie

De la figura 23.1, se pueden observar los principales características de una transmisión por el puerto serie, aprovechamos para realizar una descripción de los principales términos utilizados en la transmisión:

Comandos

Arduino para el manejo de puerto serie tiene cinco comandos:

Seguridad

La tarjeta Arduino Diecimila no contiene protección contra sobre corriente por el puerto serie. Existe una versión llamada Arduino Duemilanove [1]. Al existir una corriente superior a 500mA el sistema se activa protegiendo el puerto de la PC.

003/01 Actividad 003

Manero Puerto serie, Osciloscopio.

Programa Processing para Osciloscopio

/*
 * Oscilloscope
 * Gives a visual rendering of analog pin 0 in realtime.
 *
 * This project is part of Accrochages
 * See http://accrochages.drone.ws
 *
 * (c) 2008 Sofian Audry (info@sofianaudry.com)
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
import processing.serial.*;

Serial port;  // Create object from Serial class
int val;      // Data received from the serial port
int[] values;

void setup()
{
  size(640, 480);
  // Open the port that the board is connected to and use the same speed (9600 bps)
  port = new Serial(this, Serial.list()[0], 9600);
  values = new int[width];
  smooth();
}

int getY(int val) {
  return (int)(val / 1023.0f * height) - 1;
}

void draw()
{
  while (port.available() >= 3) {
    if (port.read() == 0xff) {
      val = (port.read() << 8) | (port.read());
    }
  }
  for (int i=0; i<width-1; i++)
    values[i] = values[i+1];
  values[width-1] = val;
  background(350);
  stroke(255);
  for (int x=1; x<width; x++) {
    line(width-x,   height-1-getY(values[x-1]),
    width-1-x, height-1-getY(values[x]));
  }
}

Manero Puerto serie, Osciloscopio.

Programa Arduino Oscilospio

// The Arduino code.

#define ANALOG_IN 0
int ledPin = 13;                // LED connected to digital pin 13

void setup() {
  Serial.begin(9600); 
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
}

void loop() {
  int val = analogRead(ANALOG_IN);

  Serial.print( 0xff, BYTE);
  Serial.print( (val >> 8) & 0xff, BYTE);
  Serial.print( val & 0xff, BYTE);
  
}

Enlaces