Archivo de la etiqueta: David Álvarez Medina

Programar con AVR Arduino


Muy buenas a todos de nuevo. Hoy os traigo un videotutorial creado por Michael HolacheK en el cual nos explica otra forma de programar nuestro Arduino sin necesidad de recurrir a la IDE generado por el Arduino Team. Eso sí, tendremos que cambiar nuestro tan querido USB por el conector ICSP.

Este tipo de conexión es una gran alternativa si nos queremos fabricar una PCB Arduino más pequeña y no necesitamos que lleve incorporado el chip MEGA8U2 para la conversión de datos USB.

Sin más, aquí os dejo el video.

Enjoy!

Fabricación de un Arduino desde “0”


 

Muy buenas a todos de nuevo!

Tras el post que publicamos hace ya unos meses, tour por la fabrica de Arduino, hoy os traemos otro tour en el cual se muestra todos los pasos de fabricación seguidos por la fabrica que monta nuestros tan amados Arduino’s!! Cuanto menos creo que es curioso, así que aquí os dejo el link de la página para que podáis leer el artículo y chafardear las fotos y los videos!

Como fabricar un Arduino desde “0” (link)

Enjoy!

 

Arduino como generador de funciones


Muy buenas a todos de nuevo. Mientras se acaban de cocinar los próximos tutoriales tanto de “Arduino tutorials” como de “Processing tutorials”, aquí os dejo una información que he encontrado muy interesante.

Los chicos de “interface.khm.de” han subido un post en el cual explican como podéis crear un pequeño generador de funciones con vuestro arduino, lo de pequeño viene referido a que tan solo puede generar una señal senoidal.

El código de Arduino es el siguiente:

<pre><strong>/*
 *
 * DDS Sine Generator mit ATMEGS 168
 * Timer2 generates the  31250 KHz Clock Interrupt
 *
 * KHM 2009 /  Martin Nawrath
 * Kunsthochschule fuer Medien Koeln
 * Academy of Media Arts Cologne

 */

#include "avr/pgmspace.h"

// table of 256 sine values / one sine period / stored in flash memory
PROGMEM  prog_uchar sine256[]  = {
  127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,181,184,187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225,227,229,231,233,234,236,238,239,240,
  242,243,244,245,247,248,249,249,250,251,252,252,253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,247,245,244,243,242,240,239,238,236,234,233,231,229,227,225,223,
  221,219,217,215,212,210,208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161,158,155,152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90,87,84,81,78,
  76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,25,27,29,31,
  33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,118,121,124

};
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))

int ledPin = 13;                 // LED pin 7
int testPin = 7;
int t2Pin = 6;
byte bb;

double dfreq;
// const double refclk=31372.549;  // =16MHz / 510
const double refclk=31376.6;      // measured

// variables used inside interrupt service declared as voilatile
volatile byte icnt;              // var inside interrupt
volatile byte icnt1;             // var inside interrupt
volatile byte c4ms;              // counter incremented all 4ms
volatile unsigned long phaccu;   // pahse accumulator
volatile unsigned long tword_m;  // dds tuning word m

void setup()
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
  Serial.begin(115200);        // connect to the serial port
  Serial.println("DDS Test");

  pinMode(6, OUTPUT);      // sets the digital pin as output
  pinMode(7, OUTPUT);      // sets the digital pin as output
  pinMode(11, OUTPUT);     // pin11= PWM  output / frequency output

  Setup_timer2();

  // disable interrupts to avoid timing distortion
  cbi (TIMSK0,TOIE0);              // disable Timer0 !!! delay() is now not available
  sbi (TIMSK2,TOIE2);              // enable Timer2 Interrupt

  dfreq=1000.0;                    // initial output frequency = 1000.o Hz
  tword_m=pow(2,32)*dfreq/refclk;  // calulate DDS new tuning word 

}
void loop()
{
  while(1) {
     if (c4ms &gt; 250) {                 // timer / wait fou a full second
      c4ms=0;
      dfreq=analogRead(0);             // read Poti on analog pin 0 to adjust output frequency from 0..1023 Hz

      cbi (TIMSK2,TOIE2);              // disble Timer2 Interrupt
      tword_m=pow(2,32)*dfreq/refclk;  // calulate DDS new tuning word
      sbi (TIMSK2,TOIE2);              // enable Timer2 Interrupt 

      Serial.print(dfreq);
      Serial.print("  ");
      Serial.println(tword_m);
    }

   sbi(PORTD,6); // Test / set PORTD,7 high to observe timing with a scope
   cbi(PORTD,6); // Test /reset PORTD,7 high to observe timing with a scope
  }
 }
//******************************************************************
// timer2 setup
// set prscaler to 1, PWM mode to phase correct PWM,  16000000/510 = 31372.55 Hz clock
void Setup_timer2() {

// Timer2 Clock Prescaler to : 1
  sbi (TCCR2B, CS20);
  cbi (TCCR2B, CS21);
  cbi (TCCR2B, CS22);

  // Timer2 PWM Mode set to Phase Correct PWM
  cbi (TCCR2A, COM2A0);  // clear Compare Match
  sbi (TCCR2A, COM2A1);

  sbi (TCCR2A, WGM20);  // Mode 1  / Phase Correct PWM
  cbi (TCCR2A, WGM21);
  cbi (TCCR2B, WGM22);
}

//******************************************************************
// Timer2 Interrupt Service at 31372,550 KHz = 32uSec
// this is the timebase REFCLOCK for the DDS generator
// FOUT = (M (REFCLK)) / (2 exp 32)
// runtime : 8 microseconds ( inclusive push and pop)
ISR(TIMER2_OVF_vect) {

  sbi(PORTD,7);          // Test / set PORTD,7 high to observe timing with a oscope

  phaccu=phaccu+tword_m; // soft DDS, phase accu with 32 bits
  icnt=phaccu &gt;&gt; 24;     // use upper 8 bits for phase accu as frequency information
                         // read value fron ROM sine table and send to PWM DAC
  OCR2A=pgm_read_byte_near(sine256 + icnt);    

  if(icnt1++ == 125) {  // increment variable c4ms all 4 milliseconds
    c4ms++;
    icnt1=0;
   }   

 cbi(PORTD,7);            // reset PORTD,7
}</strong>

Toda la información necesaria sobre el proyecto la podéis encontrar en el siguiente link.

Enjoy!

Montaje Prusa Mendel Iteración 2 paso a paso


Si estáis pensando en iniciar el montaje de vuestra RepRap Prusa Mendel aprovechando la llegada del tiempo estival y con ello el tiempo libre en vuestras vidas estáis de enhorabuena. En uno de los primeros post os adjunte 2 guías de montaje paso a paso para la construcción de vuestra impresora 3D, para aquellos que todo lo visual les es más fácil de asimilar aquí os dejo una serie de videos creados por el maestro de las impresoras 3D, el señor Obijuan!

Estos videos son una serie de tutoriales cortos muy útiles tanto para el montaje de la impresora como para el manejo de los programas necesarios para la utilización de la misma.

Como siempre, sin más, os dejo con los videos y recordar que si tenéis alguna duda, no dudéis en preguntar!

 

Enjoy!

 

1er video:

2º video:

3er video:

4º video:

5º video:

6º video:

7º vieo:

8º video:

9º video:

10º video:

11º video:

12º video:

13º video:

14º video:

15º video:

16º video:

17º video:

18º video:

19º video:

20º video:

21º video:

22º video:

23º video:

24º video:

25º video:

26º video:

27º video:

28º video:

29º video:

30º video:

31º video:

32º video:

33º video:

34º video:

35º video:

36º video:

37º vieo:

38º video:

39º video:

40º video:

41º video:

42º video:

43º video:

44º video:

45º video:

46º video:

47º video:

48º video:

49º video:

50º video:

51º video:

52º video:

53º video:

54º video:

55º video:

56º video:

57º video:

58º video:

59º video:

60º video:

61º video:

62º video:

63º video:

Guía de montaje de la Prusa Iteración 2: http://www.iearobotics.com/wiki/index.php?title=Guia_de_montaje_de_la_Prusa_2