Autor Tema: Cambiar de PIC a Arduino. buena o mala idea  (Leído 39468 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Cambiar de PIC a Arduino. buena o mala idea
« Respuesta #15 en: 28 de Agosto de 2014, 18:02:50 »
....
Exacto, es un producto orientado a estudiantes y gente que empieza y no quiere profundizar ni en la electrónica, ni en el software.

....

yo también estoy de acuerdo con esta respuesta. observen que en el mismo sitio lo dicen:

"...It's intended for artists, designers, hobbyists and anyone interested in creating interactive objects or environments..."
Código: [Seleccionar]
Fuente: http://arduino.cc/en/pmwiki.php?n=
pues como todo en esta vida, depende del uso que le vayas a dar a los micros, no defenderé arduino (porque no lo conozco) pero tampoco defenderé a los pic (que si los conozco). Es cuestión de hacer pruebas y ver cuál resulta mas conveniente en el entorno que se trabaje.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: Cambiar de PIC a Arduino. buena o mala idea
« Respuesta #16 en: 28 de Agosto de 2014, 18:15:54 »
Arduino está pensado para acercar la electrónica y la informática a gente que no tiene conocimientos de base.
Pretende hacer los proyectos electrónicos sencillos, para poder empezar sin que sea obligatorio profundizar en electrónica ni en software.

Pero eso no significa que no puedas profundizar en los conocimientos. Con Arduíno puedes empezar de cero y terminar haciendo cosas tan complejas como con cualquier PIC18.

La ventaja de Arduino es que comieza en el nivel cero y por sólo 20 euros (hardware y software incluido).
Con el PIC comienzas en el nivel 5. Tienes que comprar un programador, hacerte tu placa de desarrollo, programar en C básico y accediendo a registros... Y cuesta más dinero.

Con los dos puedes llegar al nivel 10. (Por poner una escala)


Para alguien con experiencia, el poder hacer un proyecto rápido de usar y desmontar, también es una gran ventaja.


El inconveniente que yo le veo al Atmega328 es que no incorpora ciertos periféricos muy interesantes que sí tienen algunos PIC: PWM avanzado, CCP, CTMU, CLC


Saludos.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: Cambiar de PIC a Arduino. buena o mala idea
« Respuesta #17 en: 28 de Agosto de 2014, 19:00:43 »
El problema creo que está en que algunos ven que Arduino empieza en el nivel 0 y dicen: "esto es SÓLO para principiantes"
Pero Arduino comienza en el nivel 0 y termina en el nivel 10

El desarrollo a medida de PIC comienza en un nivel alto y por eso parece más complejo que Arduino, pero no llega más alto de lo que puede llegar un desarrollo basado en Arduíno.

Esa es la idea que quería transmitir. Arduino no es simple. Comienza en un nivel simple, pero se puede complicar hasta dónde quieras.

Si tu ves a alguien tumbado en la playa, no se te ocurre decir que ese señor "es bajo".
Ese señor "está bajo" pero no es bajo, si se levanta puede ser más alto que tú.

Arduino se vende "tumbado" para que parezca bajo y no asuste. Pero si lo levantas, es tan alto o más que cualquier placa basada en PIC18.

No confundamos ser con estar.


Saludos.

PD. Para muestra un botón.
Librería de manejo de displays TFT. Viene de forma estandar en el entorno Arduino para que el que quiera realice las modificaciones que desee.
Esto es una diferencia con respecto a CCS u otros compiladores, con librerias cerradas. En Arduino las librerías son abiertas para que puedas modificarlas.
Eso no significa que las librerías sean sencillas:

Código: [Seleccionar]
/******************************************************************
 This is the core graphics library for all our displays, providing
 basic graphics primitives (points, lines, circles, etc.). It needs
 to be paired with a hardware-specific library for each display
 device we carry (handling the lower-level functions).
 
 Adafruit invests time and resources providing this open
 source code, please support Adafruit and open-source hardware
 by purchasing products from Adafruit!
 
 Written by Limor Fried/Ladyada for Adafruit Industries.
 BSD license, check license.txt for more information.
 All text above must be included in any redistribution.
 ******************************************************************/

#include "Adafruit_GFX.h"
#include "glcdfont.c"
#include <avr/pgmspace.h>

void Adafruit_GFX::constructor(int16_t w, int16_t h) {
  _width = WIDTH = w;
  _height = HEIGHT = h;

  rotation = 0;    
  cursor_y = cursor_x = 0;
  textsize = 1;
  textcolor = textbgcolor = 0xFFFF;
  wrap = true;
  
  strokeColor = 0;
  useStroke = true;
  fillColor = 0;
  useFill = false;

}


// draw a circle outline
void Adafruit_GFX::drawCircle(int16_t x0, int16_t y0, int16_t r,
     uint16_t color) {
  int16_t f = 1 - r;
  int16_t ddF_x = 1;
  int16_t ddF_y = -2 * r;
  int16_t x = 0;
  int16_t y = r;

  drawPixel(x0, y0+r, color);
  drawPixel(x0, y0-r, color);
  drawPixel(x0+r, y0, color);
  drawPixel(x0-r, y0, color);

  while (x<y) {
    if (f >= 0) {
      y--;
      ddF_y += 2;
      f += ddF_y;
    }
    x++;
    ddF_x += 2;
    f += ddF_x;
  
    drawPixel(x0 + x, y0 + y, color);
    drawPixel(x0 - x, y0 + y, color);
    drawPixel(x0 + x, y0 - y, color);
    drawPixel(x0 - x, y0 - y, color);
    drawPixel(x0 + y, y0 + x, color);
    drawPixel(x0 - y, y0 + x, color);
    drawPixel(x0 + y, y0 - x, color);
    drawPixel(x0 - y, y0 - x, color);
    
  }
}

void Adafruit_GFX::drawCircleHelper( int16_t x0, int16_t y0,
               int16_t r, uint8_t cornername, uint16_t color) {
  int16_t f     = 1 - r;
  int16_t ddF_x = 1;
  int16_t ddF_y = -2 * r;
  int16_t x     = 0;
  int16_t y     = r;

  while (x<y) {
    if (f >= 0) {
      y--;
      ddF_y += 2;
      f     += ddF_y;
    }
    x++;
    ddF_x += 2;
    f     += ddF_x;
    if (cornername & 0x4) {
      drawPixel(x0 + x, y0 + y, color);
      drawPixel(x0 + y, y0 + x, color);
    }
    if (cornername & 0x2) {
      drawPixel(x0 + x, y0 - y, color);
      drawPixel(x0 + y, y0 - x, color);
    }
    if (cornername & 0x8) {
      drawPixel(x0 - y, y0 + x, color);
      drawPixel(x0 - x, y0 + y, color);
    }
    if (cornername & 0x1) {
      drawPixel(x0 - y, y0 - x, color);
      drawPixel(x0 - x, y0 - y, color);
    }
  }
}

void Adafruit_GFX::fillCircle(int16_t x0, int16_t y0, int16_t r,
     uint16_t color) {
  drawFastVLine(x0, y0-r, 2*r+1, color);
  fillCircleHelper(x0, y0, r, 3, 0, color);
}

// used to do circles and roundrects!
void Adafruit_GFX::fillCircleHelper(int16_t x0, int16_t y0, int16_t r,
   uint8_t cornername, int16_t delta, uint16_t color) {

  int16_t f     = 1 - r;
  int16_t ddF_x = 1;
  int16_t ddF_y = -2 * r;
  int16_t x     = 0;
  int16_t y     = r;

  while (x<y) {
    if (f >= 0) {
      y--;
      ddF_y += 2;
      f     += ddF_y;
    }
    x++;
    ddF_x += 2;
    f     += ddF_x;

    if (cornername & 0x1) {
      drawFastVLine(x0+x, y0-y, 2*y+1+delta, color);
      drawFastVLine(x0+y, y0-x, 2*x+1+delta, color);
    }
    if (cornername & 0x2) {
      drawFastVLine(x0-x, y0-y, 2*y+1+delta, color);
      drawFastVLine(x0-y, y0-x, 2*x+1+delta, color);
    }
  }
}

// bresenham's algorithm - thx wikpedia
void Adafruit_GFX::drawLine(int16_t x0, int16_t y0,
   int16_t x1, int16_t y1,
   uint16_t color) {
  int16_t steep = abs(y1 - y0) > abs(x1 - x0);
  if (steep) {
    swap(x0, y0);
    swap(x1, y1);
  }

  if (x0 > x1) {
    swap(x0, x1);
    swap(y0, y1);
  }

  int16_t dx, dy;
  dx = x1 - x0;
  dy = abs(y1 - y0);

  int16_t err = dx / 2;
  int16_t ystep;

  if (y0 < y1) {
    ystep = 1;
  } else {
    ystep = -1;
  }

  for (; x0<=x1; x0++) {
    if (steep) {
      drawPixel(y0, x0, color);
    } else {
      drawPixel(x0, y0, color);
    }
    err -= dy;
    if (err < 0) {
      y0 += ystep;
      err += dx;
    }
  }
}


// draw a rectangle
void Adafruit_GFX::drawRect(int16_t x, int16_t y,
   int16_t w, int16_t h,
   uint16_t color) {
  drawFastHLine(x, y, w, color);
  drawFastHLine(x, y+h-1, w, color);
  drawFastVLine(x, y, h, color);
  drawFastVLine(x+w-1, y, h, color);
}

void Adafruit_GFX::drawFastVLine(int16_t x, int16_t y,
int16_t h, uint16_t color) {
  // stupidest version - update in subclasses if desired!
  drawLine(x, y, x, y+h-1, color);
}


void Adafruit_GFX::drawFastHLine(int16_t x, int16_t y,
int16_t w, uint16_t color) {
  // stupidest version - update in subclasses if desired!
  drawLine(x, y, x+w-1, y, color);
}

void Adafruit_GFX::fillRect(int16_t x, int16_t y, int16_t w, int16_t h,
   uint16_t color) {
  // stupidest version - update in subclasses if desired!
  for (int16_t i=x; i<x+w; i++) {
    drawFastVLine(i, y, h, color);
  }
}


void Adafruit_GFX::fillScreen(uint16_t color) {
  fillRect(0, 0, _width, _height, color);
}

// draw a rounded rectangle!
void Adafruit_GFX::drawRoundRect(int16_t x, int16_t y, int16_t w,
  int16_t h, int16_t r, uint16_t color) {
  // smarter version
  drawFastHLine(x+r  , y    , w-2*r, color); // Top
  drawFastHLine(x+r  , y+h-1, w-2*r, color); // Bottom
  drawFastVLine(  x    , y+r  , h-2*r, color); // Left
  drawFastVLine(  x+w-1, y+r  , h-2*r, color); // Right
  // draw four corners
  drawCircleHelper(x+r    , y+r    , r, 1, color);
  drawCircleHelper(x+w-r-1, y+r    , r, 2, color);
  drawCircleHelper(x+w-r-1, y+h-r-1, r, 4, color);
  drawCircleHelper(x+r    , y+h-r-1, r, 8, color);
}

// fill a rounded rectangle!
void Adafruit_GFX::fillRoundRect(int16_t x, int16_t y, int16_t w,
int16_t h, int16_t r, uint16_t color) {
  // smarter version
  fillRect(x+r, y, w-2*r, h, color);

  // draw four corners
  fillCircleHelper(x+w-r-1, y+r, r, 1, h-2*r-1, color);
  fillCircleHelper(x+r    , y+r, r, 2, h-2*r-1, color);
}

// draw a triangle!
void Adafruit_GFX::drawTriangle(int16_t x0, int16_t y0,
int16_t x1, int16_t y1,
int16_t x2, int16_t y2, uint16_t color) {
  drawLine(x0, y0, x1, y1, color);
  drawLine(x1, y1, x2, y2, color);
  drawLine(x2, y2, x0, y0, color);
}

// fill a triangle!
void Adafruit_GFX::fillTriangle ( int16_t x0, int16_t y0,
 int16_t x1, int16_t y1,
 int16_t x2, int16_t y2, uint16_t color) {

  int16_t a, b, y, last;

  // Sort coordinates by Y order (y2 >= y1 >= y0)
  if (y0 > y1) {
    swap(y0, y1); swap(x0, x1);
  }
  if (y1 > y2) {
    swap(y2, y1); swap(x2, x1);
  }
  if (y0 > y1) {
    swap(y0, y1); swap(x0, x1);
  }

  if(y0 == y2) { // Handle awkward all-on-same-line case as its own thing
    a = b = x0;
    if(x1 < a)      a = x1;
    else if(x1 > b) b = x1;
    if(x2 < a)      a = x2;
    else if(x2 > b) b = x2;
    drawFastHLine(a, y0, b-a+1, color);
    return;
  }

  int16_t
    dx01 = x1 - x0,
    dy01 = y1 - y0,
    dx02 = x2 - x0,
    dy02 = y2 - y0,
    dx12 = x2 - x1,
    dy12 = y2 - y1,
    sa   = 0,
    sb   = 0;

  // For upper part of triangle, find scanline crossings for segments
  // 0-1 and 0-2.  If y1=y2 (flat-bottomed triangle), the scanline y1
  // is included here (and second loop will be skipped, avoiding a /0
  // error there), otherwise scanline y1 is skipped here and handled
  // in the second loop...which also avoids a /0 error here if y0=y1
  // (flat-topped triangle).
  if(y1 == y2) last = y1;   // Include y1 scanline
  else         last = y1-1; // Skip it

  for(y=y0; y<=last; y++) {
    a   = x0 + sa / dy01;
    b   = x0 + sb / dy02;
    sa += dx01;
    sb += dx02;
    /* longhand:
    a = x0 + (x1 - x0) * (y - y0) / (y1 - y0);
    b = x0 + (x2 - x0) * (y - y0) / (y2 - y0);
    */
    if(a > b) swap(a,b);
    drawFastHLine(a, y, b-a+1, color);
  }

  // For lower part of triangle, find scanline crossings for segments
  // 0-2 and 1-2.  This loop is skipped if y1=y2.
  sa = dx12 * (y - y1);
  sb = dx02 * (y - y0);
  for(; y<=y2; y++) {
    a   = x1 + sa / dy12;
    b   = x0 + sb / dy02;
    sa += dx12;
    sb += dx02;
    /* longhand:
    a = x1 + (x2 - x1) * (y - y1) / (y2 - y1);
    b = x0 + (x2 - x0) * (y - y0) / (y2 - y0);
    */
    if(a > b) swap(a,b);
    drawFastHLine(a, y, b-a+1, color);
  }
}

void Adafruit_GFX::drawBitmap(int16_t x, int16_t y,
     const uint8_t *bitmap, int16_t w, int16_t h,
     uint16_t color) {

  int16_t i, j, byteWidth = (w + 7) / 8;

  for(j=0; j<h; j++) {
    for(i=0; i<w; i++ ) {
      if(pgm_read_byte(bitmap + j * byteWidth + i / 8) & (128 >> (i & 7))) {
drawPixel(x+i, y+j, color);
      }
    }
  }
}


#if ARDUINO >= 100
size_t Adafruit_GFX::write(uint8_t c) {
#else
void Adafruit_GFX::write(uint8_t c) {
#endif
  if (c == '\n') {
    cursor_y += textsize*8;
    cursor_x = 0;
  } else if (c == '\r') {
    // skip em
  } else {
    drawChar(cursor_x, cursor_y, c, textcolor, textbgcolor, textsize);
    cursor_x += textsize*6;
    if (wrap && (cursor_x > (_width - textsize*6))) {
      cursor_y += textsize*8;
      cursor_x = 0;
    }
  }
#if ARDUINO >= 100
  return 1;
#endif
}

// draw a character
void Adafruit_GFX::drawChar(int16_t x, int16_t y, unsigned char c,
   uint16_t color, uint16_t bg, uint8_t size) {

  if((x >= _width)            || // Clip right
     (y >= _height)           || // Clip bottom
     ((x + 5 * size - 1) < 0) || // Clip left
     ((y + 8 * size - 1) < 0))   // Clip top
    return;

  for (int8_t i=0; i<6; i++ ) {
    uint8_t line;
    if (i == 5)
      line = 0x0;
    else
      line = pgm_read_byte(font+(c*5)+i);
    for (int8_t j = 0; j<8; j++) {
      if (line & 0x1) {
        if (size == 1) // default size
          drawPixel(x+i, y+j, color);
        else {  // big size
          fillRect(x+(i*size), y+(j*size), size, size, color);
        }
      } else if (bg != color) {
        if (size == 1) // default size
          drawPixel(x+i, y+j, bg);
        else {  // big size
          fillRect(x+i*size, y+j*size, size, size, bg);
        }
      }
      line >>= 1;
    }
  }
}

void Adafruit_GFX::setCursor(int16_t x, int16_t y) {
  cursor_x = x;
  cursor_y = y;
}


void Adafruit_GFX::setTextSize(uint8_t s) {
  textsize = (s > 0) ? s : 1;
}


void Adafruit_GFX::setTextColor(uint16_t c) {
  textcolor = c;
  textbgcolor = c;
  // for 'transparent' background, we'll set the bg
  // to the same as fg instead of using a flag
}

 void Adafruit_GFX::setTextColor(uint16_t c, uint16_t b) {
   textcolor = c;
   textbgcolor = b;
 }

void Adafruit_GFX::setTextWrap(boolean w) {
  wrap = w;
}

uint8_t Adafruit_GFX::getRotation(void) {
  rotation %= 4;
  return rotation;
}

void Adafruit_GFX::setRotation(uint8_t x) {
  x %= 4;  // cant be higher than 3
  rotation = x;
  switch (x) {
  case 0:
  case 2:
    _width = WIDTH;
    _height = HEIGHT;
    break;
  case 1:
  case 3:
    _width = HEIGHT;
    _height = WIDTH;
    break;
  }
}

void Adafruit_GFX::invertDisplay(boolean i) {
  // do nothing, can be subclassed
}


// return the size of the display which depends on the rotation!
int16_t Adafruit_GFX::width(void) {
  return _width;
}
 
int16_t Adafruit_GFX::height(void) {
  return _height;
}



uint16_t Adafruit_GFX::newColor(uint8_t r, uint8_t g, uint8_t b) {
  return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3);
}


void Adafruit_GFX::background(uint8_t red, uint8_t green, uint8_t blue) {
  background(newColor(red, green, blue));
}

void Adafruit_GFX::background(color c) {
  fillScreen(c);
}

void Adafruit_GFX::stroke(uint8_t red, uint8_t green, uint8_t blue) {
  stroke(newColor(red, green, blue));
}

void Adafruit_GFX::stroke(color c) {
  useStroke = true;
  strokeColor = c;
  setTextColor(c);
}

void Adafruit_GFX::noStroke() {
  useStroke = false;
}

void Adafruit_GFX::noFill() {
  useFill = false;
}

void Adafruit_GFX::fill(uint8_t red, uint8_t green, uint8_t blue) {
  fill(newColor(red, green, blue));
}

void Adafruit_GFX::fill(color c) {
  useFill = true;
  fillColor = c;
}


void Adafruit_GFX::text(const char * text, int16_t x, int16_t y) {
  if (!useStroke)
    return;
  
  setTextWrap(false);
  setTextColor(strokeColor);
  setCursor(x, y);
  print(text);
}

void Adafruit_GFX::textWrap(const char * text, int16_t x, int16_t y) {
  if (!useStroke)
    return;
  
  setTextWrap(true);
  setTextColor(strokeColor);
  setCursor(x, y);
  print(text);
}


void Adafruit_GFX::textSize(uint8_t size) {
  setTextSize(size);
}

void Adafruit_GFX::point(int16_t x, int16_t y) {
  if (!useStroke)
    return;
  
  drawPixel(x, y, strokeColor);
}

void Adafruit_GFX::line(int16_t x1, int16_t y1, int16_t x2, int16_t y2) {
  if (!useStroke)
    return;
  
  if (x1 == x2) {
    if (y1 < y2)
      drawFastVLine(x1, y1, y2 - y1, strokeColor);
    else
      drawFastVLine(x1, y2, y1 - y2, strokeColor);      
  }
  else if (y1 == y2) {
    if (x1 < x2)
      drawFastHLine(x1, y1, x2 - x1, strokeColor);
    else
      drawFastHLine(x2, y1, x1 - x2, strokeColor);
  }
  else {
    drawLine(x1, y1, x2, y2, strokeColor);
  }
}

void Adafruit_GFX::rect(int16_t x, int16_t y, int16_t width, int16_t height) {
  if (useFill) {
    fillRect(x, y, width, height, fillColor);
  }
  if (useStroke) {
    drawRect(x, y, width, height, strokeColor);
  }
}

void Adafruit_GFX::rect(int16_t x, int16_t y, int16_t width, int16_t height, int16_t radius) {
  if (radius == 0) {
    rect(x, y, width, height);
  }
  if (useFill) {
    fillRoundRect(x, y, width, height, radius, fillColor);
  }
  if (useStroke) {
    drawRoundRect(x, y, width, height, radius, strokeColor);
  }
}

void Adafruit_GFX::circle(int16_t x, int16_t y, int16_t r) {
  if (r == 0)
    return;
  
  if (useFill) {
    fillCircle(x, y, r, fillColor);
  }
  if (useStroke) {
    drawCircle(x, y, r, strokeColor);
  }
}

void Adafruit_GFX::triangle(int16_t x1, int16_t y1, int16_t x2, int16_t y2, int16_t x3, int16_t y3) {
  if (useFill) {
    fillTriangle(x1, y1, x2, y2, x3, y3, fillColor);
  }
  if (useStroke) {
    drawTriangle(x1, y1, x2, y2, x3, y3, strokeColor);
  }
}

#if defined(__SD_H__)  // Arduino SD library

#define BUFFPIXEL 20

void Adafruit_GFX::image(PImage & img, uint16_t x, uint16_t y) {
  int      w, h, row, col;
  uint8_t  r, g, b;
  uint32_t pos = 0;
  uint8_t  sdbuffer[3*BUFFPIXEL]; // pixel buffer (R+G+B per pixel)
  uint8_t  buffidx = sizeof(sdbuffer); // Current position in sdbuffer

  // Crop area to be loaded
  w = img._bmpWidth;
  h = img._bmpHeight;
  if((x+w-1) >= width())  w = width()  - x;
  if((y+h-1) >= height()) h = height() - y;

  /*
  // Set TFT address window to clipped image bounds
  setAddrWindow(x, y, x+w-1, y+h-1);
  */
  
  for (row=0; row<h; row++) { // For each scanline...
    // Seek to start of scan line.  It might seem labor-
    // intensive to be doing this on every line, but this
    // method covers a lot of gritty details like cropping
    // and scanline padding.  Also, the seek only takes
    // place if the file position actually needs to change
    // (avoids a lot of cluster math in SD library).
    if(img._flip) // Bitmap is stored bottom-to-top order (normal BMP)
      pos = img._bmpImageoffset + (img._bmpHeight - 1 - row) * img._rowSize;
    else     // Bitmap is stored top-to-bottom
      pos = img._bmpImageoffset + row * img._rowSize;
    if(img._bmpFile.position() != pos) { // Need seek?
      img._bmpFile.seek(pos);
      buffidx = sizeof(sdbuffer); // Force buffer reload
    }

    for (col=0; col<w; col++) { // For each pixel...
      // Time to read more pixel data?
      if (buffidx >= sizeof(sdbuffer)) { // Indeed
        img._bmpFile.read(sdbuffer, sizeof(sdbuffer));
        buffidx = 0; // Set index to beginning
      }

      // Convert pixel from BMP to TFT format, push to display
      b = sdbuffer[buffidx++];
      g = sdbuffer[buffidx++];
      r = sdbuffer[buffidx++];
      //pushColor(tft.Color565(r,g,b));
      drawPixel(x + col, y + row, newColor(r, g, b));
      
    } // end pixel
  } // end scanline

}

#endif
« Última modificación: 28 de Agosto de 2014, 19:12:13 por Picuino »

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Cambiar de PIC a Arduino. buena o mala idea
« Respuesta #18 en: 28 de Agosto de 2014, 20:14:53 »
....
Exacto, es un producto orientado a estudiantes y gente que empieza y no quiere profundizar ni en la electrónica, ni en el software.

....

yo también estoy de acuerdo con esta respuesta. observen que en el mismo sitio lo dicen:

"...It's intended for artists, designers, hobbyists and anyone interested in creating interactive objects or environments..."
Código: [Seleccionar]
Fuente: http://arduino.cc/en/pmwiki.php?n=
pues como todo en esta vida, depende del uso que le vayas a dar a los micros, no defenderé arduino (porque no lo conozco) pero tampoco defenderé a los pic (que si los conozco). Es cuestión de hacer pruebas y ver cuál resulta mas conveniente en el entorno que se trabaje.



coincido en este punto. cada cosa fue pensada y diseñada para un entorno mas o menos amplio (estrecho). Arduino fue concebido para hobby y pequeños montajes sin tener que diseñar y fabricar el hardware. Sabiendo que con el espíritu del open hard y soft crecería mucho y vendería millones de unidades.
Pero veámoslo de esta optica, productos finales que tengan un arduino como core debe haber algunos, que tengan un micro Atmel o PIC debe haber millones.

Tambien podemos pensarlo desde la siguiente óptica, la bicicleta fue diseñada para transportar personas en cortas distancias, de su casa al trabajo, al comercio, etc. Sin embargo hay gente que recorre miles de kilómetros en ellas... pero no debemos equivocarnos, si bien se puede recorrer kilometros en bicicleta, la mayoria elegimos el automovil para esa tarea.
Acá es lo mismo, Arduino tiene un micro muy potente y seguramente deben poder hacerse cosas super complejas con un Arduino, pero en mi opinion no es para lo que se lo "inventó"

Yo a mis alumnos de secundaria, cuando queremos hacer algun proyecto simple, les doy un arduino y en un par de clases, sin mas, salen trabajando solos y eso es espectacular! pero cuando quiero resolver algun proyecto un poco mas avanzado o con vistas comerciales, sin duda que voy por el lado de un pic o un atmel o un arm

mi granito de arena!
-
Leonardo Garberoglio

Desconectado hector915

  • PIC12
  • **
  • Mensajes: 78
    • Blog Personal.
Re: Cambiar de PIC a Arduino. buena o mala idea
« Respuesta #19 en: 29 de Agosto de 2014, 01:48:46 »
Todo muy claro Picuino :) aunque prefiero los pics por que se debe tener mas persistencia a la hora de aprender y desarrollar las habilidades, una placa de arduino tiene la mayoria de las cosas implementadas.

Saludos.
if you can imagine it, you can embed it

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: Cambiar de PIC a Arduino. buena o mala idea
« Respuesta #20 en: 29 de Agosto de 2014, 06:16:34 »
Yo suelo programar PIC y muy poco Arduino.
La mayoría de las librerías me las programo yo a mano.

La razón, en mi caso, consiste en que con PIC tengo más variedad de micros a mi disposición (con mayor variedad en los periféricos)
Que el soporte técnico es mejor en Microchip porque tiene muy buena documentación para los PIC de 8 bits y además está este foro.
Las librerías las programo así, no por desarrollar habilidades, sino para entenderlas mejor y poder optimizarlas.

En cualquier caso, reconozco en Arduíno una herramienta de prototipado muy buena, mucho mejor en muchos aspectos que las de Microchip:

http://www.microchip.com/Developmenttools/ProductDetails.aspx?PartNO=DV164130


http://www.microchip.com/DevelopmentTools/ProductDetails.aspx?PartNO=TCAD001



Y a muchos ya nos gustaría tener para PIC una plataforma semejante:

  Barata (10 Euros la placa UNO comprada a los chinos)
  De hardware libre para poder modificarla
  Con un entorno de desarrollo sencillo, con muchas librerías y gratuíto (CCS cuesta dinero o lo tienes que piratear  :? )
  Con shields a medida y relativamente baratos (no todos) para hacer un montón de cosas (Ethernet, control de motores, Wifi, Xbee, TFT y muchas más)
  Con un compilador de C++ GNU muy estable (En el caso de Microchip, retiran del mercado el C18 y te quedas sin soporte para nuevos micros)
  Con herramientas estándar de programación como FreeRTOS (solo soportado parcialmente por los PIC18)
 

Saludos.
« Última modificación: 29 de Agosto de 2014, 06:20:04 por Picuino »

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Cambiar de PIC a Arduino. buena o mala idea
« Respuesta #21 en: 29 de Agosto de 2014, 08:38:26 »
En cualquier caso, reconozco en Arduíno una herramienta de prototipado muy buena, mucho mejor en muchos aspectos que las de Microchip:


 ((:-)) ((:-))
-
Leonardo Garberoglio

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Cambiar de PIC a Arduino. buena o mala idea
« Respuesta #22 en: 29 de Agosto de 2014, 13:24:52 »
Yo creo que la comparación iba un poco mas orientada a herramientas de desarrollo, la plataforma de arduino carece de un debugger, pero tal como dijo picuino y como lo hago yo es hacer uso de printf.

En arduino es posible manejar los registros a pie, pero esa no es la metodología de desarrollo con arduino, sino usar sus librerías y hacer uso de funciones cómodas al desarrollador.  Como bien se dijo, depende de la situación, si es por tiempo de ingeniería arduino ahorra muchisimo en cuanto a tiempo de  desarrollo y el tiempo es muy valioso, también se ahorra tiempo en implementación de Hardware. 

En cuanto a el microcontrolador como tal, me enseñaron a mi que uno de los temas a tener en cuenta cuando se selecciona un micro son el numero de registros temporales de trabajo, Lo que en PIC se llama el regristro W,  y en eso un ATMEGA328P es superior a muchos PIC de la seria 16F y 18F.
Por aca, me pusieron a leer algo de arduino Why Arduino is not the right educational tool

Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Cambiar de PIC a Arduino. buena o mala idea
« Respuesta #23 en: 29 de Agosto de 2014, 15:23:49 »
....

Yo a mis alumnos de secundaria, cuando queremos hacer algun proyecto simple, les doy un arduino y en un par de clases, sin mas, salen trabajando solos y eso es espectacular! pero cuando quiero resolver algun proyecto un poco mas avanzado o con vistas comerciales, sin duda que voy por el lado de un pic o un atmel o un arm

mi granito de arena!

+1
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: Cambiar de PIC a Arduino. buena o mala idea
« Respuesta #24 en: 29 de Agosto de 2014, 15:56:21 »
....

Yo a mis alumnos de secundaria, cuando queremos hacer algun proyecto simple, les doy un arduino y en un par de clases, sin mas, salen trabajando solos y eso es espectacular! pero cuando quiero resolver algun proyecto un poco mas avanzado o con vistas comerciales, sin duda que voy por el lado de un pic o un atmel o un arm

mi granito de arena!

+1

+1 +1  :mrgreen:

En mi trabajo actual me traen prototipos, test y pruebas realizados con Arduino y me piden que los haga, complete y desarrolle con PIC.
« Última modificación: 29 de Agosto de 2014, 15:58:33 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Cambiar de PIC a Arduino. buena o mala idea
« Respuesta #25 en: 29 de Agosto de 2014, 16:15:27 »
Tampoco es necesario tener la ostia de registros W, simplemente con tener los suficientes sobra, para que quieres 20 registros si vas a usar solo 6?? Un microcontrolador se elige segun el proyecto que quieras hacer, no vas a buscarte un pic con 10 pwms si solo usas 2, ni tampoco un pic de 100 pines si usas solo 10, la idea es escoger lo adecuado segun lo que queramos hacer.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: Cambiar de PIC a Arduino. buena o mala idea
« Respuesta #26 en: 29 de Agosto de 2014, 20:52:58 »
En cuanto a los registros, el Atmega dispone de dos que permiten implementar pilas en toda la ram.
Esto facilita mucho la programación de alto nivel (paso de parámetros, funciones recursivas)

En el micro de Atmel toda la memoria es lineal (no está separada en bancos como en el PIC)

Estas características facilitan mucho la tarea al compilador. Yo creo que es por esta razón que existe un toolchain GNU para Atmel y no existe para los pic de gama media y baja (8 bits)

Con los sistemas operativos pasa lo mismo. FreeRTOS está implementado para PIC24 (micros de 16 bits), pero sólo parcialmente para PIC18 y no hay implementación para PIC16.
Sin embargo si que existe implementación completa para el Atmega.
La segmentación de memoria y la pila de programa dedicada y pequeña (32 posiciones máximo) limitan mucho a los PIC de 8 bits a la hora de hacer programación "Avanzada".

Los micros de Atmel no tienen esos problemas.




Conozco casos en los que Arduino se utiliza en el montaje de la aplicación final.
No creo que esto ocurra con otras plataformas de prototipado para 8 bits, como las de PIC.
Arduino lo utilizan artistas que quieren dar algo de interactividad o automatización a sus obras. Conozco casos de Arduinos que han terminado dentro de una obra en una exposición.
Tiene muchas ventajas. Es barato, muy flexible y el artista tiene todo el control.
Una placa "custom", hecha a medida, cuesta mucho más dinero, es mucho más difícil de programar y no tiene flexibilidad para hacer cambios.
No conozco ninguna PICkit 3 Starter Kit que se utilice en un producto final.



En otros casos, como dice RedPic, con Arduino se puede hacer un prototipo rápido que funcione y, una vez demostrada la funcionalidad, se puede pasar a hacer la placa final.
Esta placa final se puede hacer con PIC o con Atmel. Esto no es nuevo, también lo hacemos muchos de nosotros con otras herramientas semejantes:
   Placa protoboard (esta si que no se usa en los montajes finales)
   Placas estandar perforadas
   Wire Wrap (lo anunciaban como mejor que las protoboard, pero nunca llegué a cogerle el gusto)
   Placas de desarrollo
   Placas de entrenamiento (Training) más completas
   Etc.




Muchas placas se hacen con Atmel. Todos los controladores de motores brushless que conozco (ESC) utilizan micros Atmel. Seguro que conocéis muchos más ejemplos porque los AVR se venden como churros.
A propósito de ventas, desde 2010 las ventas de microcontroladores de 32 bits han superado a los de 8 bits y venden el doble de dinero. ¿Qué opináis de eso?




Saludos.
« Última modificación: 29 de Agosto de 2014, 20:59:08 por Picuino »

Desconectado Jorge555

  • PIC18
  • ****
  • Mensajes: 496
    • JMN
Re: Cambiar de PIC a Arduino. buena o mala idea
« Respuesta #27 en: 30 de Agosto de 2014, 18:17:20 »
El problema real de Arduino es que lo acaban usando muchos estudiantes para realizar su proyecto de final de carrera de "ingeniero electrónico" x_x. Como ya te han comentado Arduino está bien para la gente de 12-17 años que están en el instituto o empiezan con la electrónica, o para la gente que quiere hacer algo, no está especializado en electrónica, y necesita de un microcontrolador para realizar ese "algo" con un lenguaje de programación cuyo nivel de abstracción es muy alto, por lo que se va a poder usar el microcontrolador sin tener que mirar el datasheet.

Si tu objetivo es aprender electrónica o trabajar en eletrónica usa un microcontrolador pic, avr o la familia que sea sin el entorno de Arduino. Si tu objetivo es hacer algo invirtiendo el mínimo tiempo en aprender a usar el microcontrolador, y sin la necesidad de tener un control total sobre éste y pudiendote permitir un código no óptimo, pues Arduino es lo ideal. Si quieres empezar en este mundo y tienes cero conocimientos Arduino también es una buena opción.

Si lo tuyo es la electrónica, la pregunta es si te interesa pasarte de PIC a AVR, yo te diría que no, que pases de pic a un cortex-m0 ó m3 que es lo que más de va a ver en los próximos años, ya que todo lo que puedes hacer con un pic lo puedes hacer con un Arduino (AVR de 8 bits), por lo que quizás no te merece la pena el cambio en cuanto a inversión de tiempo. Cada familia de microcontroladores tiene sus ventajas, sin animo de empezar una guerra entre pic y avr comento desde mi punto de vista:

Ventaja de los pics:

- Programa de samples de Microchip, vamos que para prototipar o para aprender los regalan, puedes pedirles todos los que quieras para tus proyectos que no te van a preguntar, los de Atmel no son tan generosos con los samples y es difícil que te los manden.
- pickit siendo un debugger de bajo coste.

Ventaja de los AVR:

- IDE gratuito, tienes todas las herramientas necesarias sofware para usarlos gratis con el Atmel Studio, en los pics el IDE hay que pagarlo, la versión del ide de microchip no es gratuita (si no ha cambiado que hace tiempo que no lo miro).
- El debugger es más caro que en los pics, el más barato cuesta sobre los 50 euros, y el JTAGICE3 que es el programador que mejor sale comprar y vale para casi todo lo de Atmel está sobre los 100.

En cuanto al micro, ventajas de los AVR:

- La memoria no está páginada como en los pic, no hay que estar cambiando de bano.
-  Los pic solo tienen un registro de trabajo W, mientras que los AVR tienen unos cuantos.
- Los pic tienen dos vectores de interrupción si no recuerdo mal, por lo que hay que estar mirando que periférico lo ha disparado, los AVR tienen bastantes vectores de interrupción, uno propio para la mayoría de periféricos por lo que muchas veces no hay que hacer pooling.
- EL stack de los AVR está al final de la RAM y crece hacia abajo, por lo que puede ser bastante mayor que en los pics que está limitado. Cuando se lleva ocupada más de un 70% del valor de la SRAM de los AVR es no recomendable que siga creciendo, ya que se puede mezclar el stack con la ram.
- EL pic necesita 4 ciclos de reloj para ejecutar una instrucción y el AVR solo un ciclo para la mayoría de instrucciones, con un cristal de 16 MHz que llevan por ejemplo los Arduinos se suelen tener 16 MIPS.
- En los AVR todos los piner de entrada tienen un disparado smichtt.

Seguro que algo me dejo.

En cuanto a hardware del micro y entorno de desarrollo para mi gusto me quedo con los AVR respecto a los PIC. Si el precio del micro es importante y queremos programa de samples + IDE pirateado los PICs son una opción, pero si queremos pagar los micros desde mi punto de vista los AVR son mejor alternativa, pero vamos, cuestión de gusto.

Os dejo unos enlaces de mi página respecto al tema de Arduino y AVR por si son de ayuda para los que quieran pasar a AVR.

Diferencias entre usar el entorno de Arduino respecto al de AVR: http://webdelcire.com/wordpress/archives/2866

El que quiera pasar de Arduino a AVR: http://webdelcire.com/wordpress/archives/2905 http://webdelcire.com/wordpress/archives/2973

Y sobre cómo empezar con los AVR, esto lo documente cuando empecé con ellos por lo que no sé qué tal estará: http://jmnlab.com/AVR.html

Saludos.
« Última modificación: 30 de Agosto de 2014, 18:21:02 por Jorge555 »

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Cambiar de PIC a Arduino. buena o mala idea
« Respuesta #28 en: 30 de Agosto de 2014, 19:06:43 »
El ide de microchip es gratis, almenos desde que aprendi a usar los pics, en este caso usaba el MPLAB y ahora sacaron el MPLABX que es tipo eclipse, lo unico que hay que pagar son los compiladores (XC8, 16, 32).
Lo de los 4 ciclos de reloj por 1 instruccion realmente no lo veo un inconveniente ni ventaja, si es cierto que los atmel de 8 llegan a trabajar hasta 20mips, pero los ultimos pics que sacaron hacen unos años trabajan a 16mips, seguramente en un futuro saquen algo mas potente.
Tambien se te olvido mencionar que los pics tienen mas perifericos que los atmel, cosa que a pesar de que no sean tan veloces ayuda bastante al desarrollo y la optimizacion.

Y por ultimo, no se mucho de atmel, sin embargo creo que no suelen innovar tanto como microchip, estos estan ultimamente sacando mayor variedad de pics en todas sus familias, el tiempo que llevo han sacado un dspic33e buenisimo, sacaron tambien el 18f46kxx y ahora estan trabajando en el pic32mz (ya lo han sacado, pero no estan a la venta, solo en demostracion). En atmel todo ese tiempo creo que no ha sacado ninguna version mas de ninguna mcu (almenos en su version de 8bits).

Desconectado Jorge555

  • PIC18
  • ****
  • Mensajes: 496
    • JMN
Re: Cambiar de PIC a Arduino. buena o mala idea
« Respuesta #29 en: 30 de Agosto de 2014, 19:21:28 »
Me refiero al entorno de desarrollo con el compilador incluido, ya que en raros casos vamos a hacer todo el desarrollo en ASM, es lo bueno de Atmel que en todas sus familias de microcontroladores 8,16 y 32 bits te da unas herramientas de calidad gratis para el desarrollo del firmware.

Una ventaja de los pics 16F es que son ideales para aprender ensamblador ya que tienen muy poquitas instrucciones.

En cuanto a micros pues si ha salido alguno que otro últimamente en 8 bits de avr,  y en el tema de periféricos pues ya habría que entrar a comparar los de uno con lo de otro. En cuanto a la frecuencia del cristla pues hay que mirarlo desde temas de consumo, habría que comparar también el consumo de uno y el de otro, pero vamos creo que las ventajas principales son las anteriores, y teniendo herramientas de desarrollo para ambos a mi me gusta bastante más los micros de Atmel, y aún teniendo samples de PIC para prototipar o montar un par de placas placas prefiero comprar micros de Atmel, pero vamos cuestión de gustos.

En las universidades de estados unidos en los proyectos de las asignaturas de microcontroladores se usaba AVR en muchas y no pic, aquí en España al contrario, en todos los centros educativos se han usado PICs y en casi ninguno o ninguno AVR. Ahora ya hay nuevas alternativas más interesantes a PIC y AVR en 8 bits en estos centros como pueden ser los ARM.

Otro aspecto que no hemos nombrado es la comunidad, en español la comunidad online de los pics es muy fuerte mientras que de AVR no hay casi nada y en inglés ambas, la de avrfreaks es muy buena.