Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

11/01/2015 #1

Avatar de aldair10

¿Cómo funciona el conversor analógico digital de 20 bits ADS1230?
carga desde el puesto serial. Pero me he enfrentado a algunos problemas, antes que nada les presento con lo que cuento:

Celda de carga: SUP1-100kg

conversor analogo - digital: ads1230 (tengo una plaquita que va conectada a arduino por medio de los pines PDWN,, SCLK,DOUT)

arduino: UNO

El punto aqui es que no se que datos debo sacar de la hoja del datasheet del ads1230 asi tambien como la interpretacion de las graficas que ahi aparecen, ya que apenas me estoy adentrando a este tipo de dispositivos. y asuntos relacionados con las lecturas que hace arduino para convertirlas a kg. (Es decir alguna formula para convertir los valores que captura arduino para convertir a kg).espero contar con su apoyo de antemano muchas gracias.

les dejo aca el link del datasheet:
http://www.ti.com/lit/ds/symlink/ads1230.pdf ...
11/01/2015 #2

Avatar de Daniel Meza

Hola, lo que pasa es que ese integrado con el que cuentas es un ADC cuya salida es del tipo SIGMA-DELTA, es necesario decodificarla para trabajar con ella.
No he trabajado con éste tipo de codificación pero se que es muy usada en audio

¿Porqué no utilizas el ADC interno del ARDUINO?, quizá te sea más sencillo aunque es de la mitad de resolución
12/01/2015 #3

Avatar de chclau

No me parece que haya que decodificar, el integrado ya lo hace todo y entrega su salida en forma serial.
12/01/2015 #4

Avatar de aldair10

Antes que nada gracias por contestar. podrian poner un ejemplo de como interpretar las graficas que aparecen el el datasheet? o algo de bibliografia acerca de este dispositivo?. y efectivamente daniel Meza es por la resolucion
17/01/2015 #6

Avatar de aldair10

Gracias chclau, mira encontre un codigo por la web podrian ayudarme a entenderlo porfavor:

Código:
 #include "ads1230.h"

//constructor (no funcionará la libreria hasta usar funcion begin() )
ads1230::ads1230(){
  dataPin = 0;
  clockPin = 0;
  powerPin = 0;
  rawData = 0;
  m = 1.0f;
  b = 0.0f;
  weight = 0.0f;
}

//---------------------------------------------------------------------
//funcion que inicializa efectivamente la clase
void ads1230::begin(int _dataPin, int _clockPin, int _powerPin){
  dataPin = _dataPin;
  clockPin = _clockPin;
  powerPin = _powerPin;
  
  pinMode(dataPin, INPUT);   delayMicroseconds(1617);
  pinMode(clockPin, OUTPUT);   delayMicroseconds(1617);
  pinMode(powerPin, OUTPUT);   delayMicroseconds(1617);
  
  digitalWrite(powerPin, LOW);     delayMicroseconds(490);
  digitalWrite(clockPin, LOW);     delayMicroseconds(490);
  delay(1000);
  digitalWrite(powerPin, HIGH);     delayMicroseconds(490);
  delay(1000);
  
  Power_Down_Mode();
  Wakeup();
  Standby_Mode();
  getRawData();
  Offset_Calibration();
  getRawData();
  Standby_Mode_With_Offset_Calibration();
  getRawData();
  Standby_Mode();
}

//---------------------------------------------------------------------
//espera a que pin se ponga en alto, indicando que hay info disponible
boolean ads1230::dataReady(){
  int DOUT_TIMEOUT = 500;
  int startTime = millis();
  int elapsed = 0;
  while (digitalRead(dataPin) && elapsed < DOUT_TIMEOUT) 
    elapsed = millis() - startTime;
  if (elapsed < DOUT_TIMEOUT) 
    return true;
  else 
    return false;
}

//---------------------------------------------------------------------
//Obtiene los 20 bits sin procesar
int ads1230::getRawData(){
  int iAD_Data = 0;
  unsigned char i;
  digitalWrite(clockPin, LOW);     delayMicroseconds(490);
  if (!dataReady())
    return 0;
  for (i = 0; i < 20; i++)
  {
      digitalWrite(clockPin, HIGH);     delayMicroseconds(490);
      delay(1);
      digitalWrite(clockPin, LOW);     delayMicroseconds(490);
      delay(1);
      iAD_Data = iAD_Data << 1;
      if (digitalRead(dataPin))
      {
          iAD_Data++;
      }
  }
  for (i = 0; i < 4; i++)
  {
      digitalWrite(clockPin, HIGH);     delayMicroseconds(490);
      delay(1);
      digitalWrite(clockPin, LOW);     delayMicroseconds(490);
      delay(1);
  }
  //return (iAD_Data >> 4);
  return iAD_Data;
}

//---------------------------------------------------------------------
//Obtiene peso directamente
float ads1230::getWeight(){
  weight = (m * (float)getRawData()) + b;
  return weight;
}

//---------------------------------------------------------------------
//asigna offset para sumar al valor obtenido de getWeight()
void ads1230::setOffset(float _offset){
  b = _offset;
}

//---------------------------------------------------------------------
//añade offset para sumar al valor obtenido de getWeight()
void ads1230::addOffset(float _offset){
  b += _offset;
}

//---------------------------------------------------------------------
//Indica offset para restar al valor obtenido de getWeight()
void ads1230::setSlope(float _pendiente){
  m = _pendiente;
}

//---------------------------------------------------------------------
//reduce la energia consumida practicamente a 0 pero no permite hacer lecturas
void ads1230::Power_Down_Mode(){
  digitalWrite(clockPin, LOW);     delayMicroseconds(490);
  digitalWrite(powerPin, LOW);     delayMicroseconds(490);
  delay(1);
}

//---------------------------------------------------------------------
//Despierta al integrado para poder volver a realizar lecturas
void ads1230::Wakeup(){
  digitalWrite(clockPin, LOW);     delayMicroseconds(490);
  digitalWrite(powerPin, HIGH);     delayMicroseconds(490);
  delay(1);
}

//---------------------------------------------------------------------
//envia al integrado al estado de bajo consumo
boolean ads1230::Standby_Mode(){
  unsigned char i;
  digitalWrite(clockPin, LOW);     delayMicroseconds(490);
  if (!dataReady())
    return false;
  for (i = 0; i < 20; i++)
  {
      digitalWrite(clockPin, LOW);     delayMicroseconds(490);
      delay(1);
      digitalWrite(clockPin, HIGH);     delayMicroseconds(490);
      delay(1);
  }
  delay(50);
  return true;
}

//---------------------------------------------------------------------
//remueve el error inherente del ads1230
boolean ads1230::Offset_Calibration(){
  unsigned char i;
  digitalWrite(clockPin, LOW);     delayMicroseconds(490);
  if (!dataReady())
    return false;
  for (i = 0; i < 26; i++)
  {
      digitalWrite(clockPin, LOW);     delayMicroseconds(490);
      delay(1);
      digitalWrite(clockPin, HIGH);     delayMicroseconds(490);
      delay(1);
  }
  digitalWrite(clockPin, LOW);     delayMicroseconds(490);
  delay(1000);
  return true;
}

//---------------------------------------------------------------------
//envia al integrado al estado de bajo consumo, indicandole que se calibre la proxima vez que arranque
boolean ads1230::Standby_Mode_With_Offset_Calibration(){
  unsigned char i;
  digitalWrite(clockPin, LOW);     delayMicroseconds(490);
  if (!dataReady())
    return false;
  for (i = 0; i < 26; i++)
  {
      digitalWrite(clockPin, LOW);     delayMicroseconds(490);
      delay(1);
      digitalWrite(clockPin, HIGH);     delayMicroseconds(490);
      delay(1);
  }
  return true;
}
---------- Actualizado después de 3 minutos ----------

empezando por la parte que dice:

//espera a que pin se ponga en alto, indicando que hay info disponible
boolean ads1230::dataReady()


Quise poner todo el codigo completo para que pudieran ver en que contexto se encuentra las palabras.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Arduino y Raspberry Pi

Cerrar
Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.