miércoles, 8 de julio de 2015

Tiva C launchpad Playing Music

Hola!


En este tutorial conectaremos a la Tiva C series TM4C123G  un piezo eléctrico (Buzzer) para hacer sonar divertidas melodías.

Materiales:

-Buzzer
-Tiva C launchpad
-Resistencia de  220 ohm o aproximado

Se interconectara el piezo de la siguiente manera a la tiva:

La positiva a la resistencia y esta al pin PF2 que viene siendo el pin digital 40 y el otro lado se conecta a tierra, si al conectar no sabes cual es la tierra simple no sonara al cambiar la posición sonara.



Figura 1. Esquema de conexión

En este caso escucharemos las melodías:

HBD- Cumpleaños feliz
Konami contra- soundtrack videogame
Imperial March- Star Wars
Let It Be- The Beatles

De los códigos 3 puedes encontrarlos en los ejemplos que trae el software Energía los cuales podrán modificar a su gusto

Figura 2. Energía Examples


Y Let it be puedes hacer una adaptacion del tradicional hecho para Arduino http://forum.arduino.cc/index.php?topic=3309.0

A continuación les dejo los que use y al final el vídeo de como funciona!

HBD

#include "pitches.h"
#define NOTE_C4_1 260

int buzzerPin = 40;

// notes in the melody:
int melody[] = {
   NOTE_C4_1,NOTE_C4, NOTE_D4, NOTE_C4,NOTE_F4,NOTE_E4,
   NOTE_C4_1,NOTE_C4,NOTE_D4,NOTE_C4,NOTE_G4,NOTE_F4,
   NOTE_C4_1,NOTE_C4,NOTE_C5,NOTE_A4,NOTE_F4,NOTE_F4, NOTE_E4,NOTE_D4,
   NOTE_AS4,NOTE_AS4,NOTE_A4,NOTE_F4,NOTE_G4,NOTE_F4};
   
// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
  4, 4, 2, 2,2,1,
  4, 4, 2, 2,2,1,
  4, 4, 2, 2,4,4,2,1, 
  4, 4, 2, 2,2,1};

void setup() 
{
pinMode(buzzerPin,OUTPUT);
}
void loop() 
{
  for (int thisNote = 0; thisNote < 26; thisNote++) {

    // to calculate the note duration, take one second 
    // divided by the note type.
    //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
    int noteDuration = 1000/noteDurations[thisNote];
    tone(buzzerPin, melody[thisNote],noteDuration);

    int pauseBetweenNotes = noteDuration + 50;      //delay between pulse
    delay(pauseBetweenNotes);
    
    noTone(buzzerPin);                // stop the tone playing
  }
}



Konami contra:

#include "pitches.h"


int buzzerPin = 40;


// notes in the melody:
int melody[] = {
  NOTE_F2, NOTE_C6, NOTE_B5, NOTE_G5, NOTE_A5, NOTE_E1, NOTE_B1, NOTE_E1, NOTE_B1, NOTE_E1, NOTE_B1, 
   
   
  NOTE_G6, NOTE_F6, NOTE_DS6, NOTE_C6, NOTE_AS5, NOTE_C6, NOTE_AS5, NOTE_GS5, NOTE_G5, NOTE_GS5, 
  NOTE_G5, NOTE_F5, NOTE_DS5, NOTE_F5, NOTE_AS4, NOTE_C5, NOTE_DS5, NOTE_F5,
  
  NOTE_C6, NOTE_NOTONE, NOTE_AS5, NOTE_C6, NOTE_D6, NOTE_DS6, NOTE_F5,
  NOTE_C6, NOTE_NOTONE, NOTE_AS5, NOTE_C6, NOTE_D6, NOTE_GS5, NOTE_F5,

// Repeat once   
  NOTE_C6, NOTE_NOTONE, NOTE_AS5, NOTE_C6, NOTE_D6, NOTE_DS6, NOTE_F5,
  NOTE_C6, NOTE_NOTONE, NOTE_AS5, NOTE_C6, NOTE_D6, NOTE_GS5, NOTE_F5,

  NOTE_C6, NOTE_NOTONE, NOTE_C6, NOTE_D6, NOTE_DS6, NOTE_NOTONE, NOTE_DS6, NOTE_NOTONE,
  NOTE_G5, NOTE_AS5, NOTE_C6, NOTE_D6, NOTE_NOTONE, NOTE_D6, NOTE_DS6,
  
  NOTE_C6, NOTE_NOTONE, NOTE_C6, NOTE_NOTONE, NOTE_DS6, NOTE_F6
  
  
};
   
// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
2, 2, 2, 2,1, 2, 2, 2, 2, 2, 1,  // 11 start screen  notes



16, 16, 16, 16, 16, 16, 16, 16, 16, 16,  // 20  notes
16, 16, 16, 16, 16, 16, 16, 2,           // for both lines   

16, 16, 16, 8, 16, 2, 2,                  // 7
16, 16, 16, 8, 16, 2, 2,                  // 7

// Repeat once
16, 16, 16, 8, 16, 2, 2,                  // 7
16, 16, 16, 8, 16, 2, 2,                  // 7

16, 16, 4, 4, 16, 16, 16, 8,             // 8
16, 16, 16, 16, 16, 4, 4,                  // 7

16, 16, 16, 16, 16, 4                     // 6 

};

void setup() 
{
pinMode(buzzerPin,OUTPUT);
}
void loop() 
{
  for (int thisNote = 0; thisNote < 80; thisNote++) {

    // to calculate the note duration, take one second 
    // divided by the note type.
    //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
    // Had to down tempo to 100/150 
    int noteDuration = 1500/noteDurations[thisNote];
    tone(buzzerPin, melody[thisNote],noteDuration);

    int pauseBetweenNotes = noteDuration + 50;      //delay between pulse
    delay(pauseBetweenNotes);
    
    noTone(buzzerPin);                // stop the tone playing
  }
}

Star Wars


#include "pitches.h"
#define cc 261
#define dd 294
#define ee 329
#define ff 349
#define g 391
#define gS 415
#define a 440
#define aS 455
#define b 466
#define cH 523
#define cSH 554
#define dH 587
#define dSH 622
#define eH 659
#define fH 698
#define fSH 740
#define gH 784
#define gSH 830
#define aH 880

int buzzerPin = 40;

void beep(int note, int duration)
{
  tone(buzzerPin, note, duration/2);
  delay(duration/2);
  noTone(buzzerPin);
  delay(duration/2 + 20);  
}
void setup() 
{
pinMode(buzzerPin,OUTPUT);
}
void loop() 
{
   beep(a, 500);
beep(a, 500);
beep(a, 500);
beep(ff, 350);
beep(cH, 150);  
beep(a, 500);
beep(ff, 350);
beep(cH, 150);
beep(a, 650);

    delay(150);
    //end of first bit   

beep(eH, 500);
beep(eH, 500);
beep(eH, 500);   
beep(fH, 350);
beep(cH, 150);
beep(gS, 500);
beep(ff, 350);
beep(cH, 150);
beep(a, 650);

    delay(150);
    //end of second bit...  

beep(aH, 500);
beep(a, 300);
beep(a, 150);
beep(aH, 400);
beep(gSH, 200);
beep(gH, 200); 
beep(fSH, 125);
beep(fH, 125);    
beep(fSH, 250);

    delay(250);

beep(aS, 250); 
beep(dSH, 400); 
beep(dH, 200);  
beep(cSH, 200);  
beep(cH, 125);  
beep(b, 125);  
beep(cH, 250);  

    delay(250);

beep(ff, 125);  
beep(gS, 500);  
beep(ff, 375);  
beep(a, 125);
beep(cH, 500);
beep(a, 375);  
beep(cH, 125);
beep(eH, 650);


beep(aH, 500);
beep(a, 300);
beep(a, 150);
beep(aH, 400);
beep(gSH, 200);
beep(gH, 200);
beep(fSH, 125);
beep(fH, 125);    
beep(fSH, 250);

    delay(250);

beep(aS, 250);  
beep(dSH, 400);  
beep(dH, 200);  
beep(cSH, 200);  
beep(cH, 125);  
beep(b, 125);  
beep(cH, 250);      

    delay(250);

beep(ff, 250);  
beep(gS, 500);  
beep(ff, 375);  
beep(cH, 125);
beep(a, 500);   
beep(ff, 375);   
beep(cH, 125); 
beep(a, 650);   
    //end of the song
    //end of the song
}

Let it Be


int speakerPin = 40;

int length = 56; // the number of notes
char notes[] = "ggaeggCDEEEDDCC gEEFEED EDDC EDCEGAGGEDCagE EEEFEED EDDC"; // a space represents a rest
int beats[] = { 2, 1, 2, 2, 3, 2, 1, 2, 1, 1, 4, 1, 2, 1, 2, 2, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 2, 2, 8, 1, 2, 5, 1, 2, 5, 1, 1, 1, 1, 4, 1, 2, 5, 5, 1, 1, 1, 2, 1, 1, 4, 1, 1, 1, 2, 2};
int tempo = 200;

void playTone(int tone, int duration) {
 for (long i = 0; i < duration * 1000L; i += tone * 2) {
   digitalWrite(speakerPin, HIGH);
   delayMicroseconds(tone);
   digitalWrite(speakerPin, LOW);
   delayMicroseconds(tone);
 }
}

void playNote(char note, int duration) {
 char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C', 'D', 'E', 'F', 'G', 'A', 'B' };
 int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956, 851, 760, 716, 628, 568, 507 };
 
 // play the tone corresponding to the note name
 for (int i = 0; i < 14; i++) {
   if (names[i] == note) {
     playTone(tones[i], duration);
   }
 }
}

void setup() {
 pinMode(speakerPin, OUTPUT);
}

void loop() {
 for (int i = 0; i < length; i++) {
   if (notes[i] == ' ') {
     delay(beats[i] * tempo); // rest
   } else {
     playNote(notes[i], beats[i] * tempo);
   }
   
   // pause between notes
   delay(tempo / 2); 
 }
}




ÉXITOS!


Maryori Sabalza Mejía 
Cartagena-Colombia






sábado, 27 de junio de 2015

CPLD Max II Blink Led


¡Hola!

Los novedosos CPLD que se están empezando a usar no solo por su fácil acceso y costo, sino también que en esta tarjetita permite analizar y comprobar laboratorios.
En esta ocasión encenderemos  un led conectado a esta tarjeta.

Figura 1. MAX II EPM240, Altera

El código a implementar para un led usando Verilog es el siguiente:

module ledblink(clk,led);
input clk;
output led;
reg led;

reg[23:0] cnt;

always @(posedge clk) begin 
   cnt<= cnt + 1'b1; 
   led<=cnt[23];
end

endmodule    

Ahora para conectar el pin buscamos en el datasheet: Datasheet EPM240
Podemos probar con el Pin_B1 ya programar debe funcionar.

Figura 2. Pin planner

Ahora si en vez de 1 sean 3 o mas leds se debe modificar el código de la siguiente manera y asignar otros pines:


Figura 3. Blink 3 Leds y pin planer

Y luego de programar debemos ver algo así: 


Éxitos.




Maryori Sabalza Mejía
Cartagena-Colombia


martes, 23 de junio de 2015

I2C Arduino uno & Tiva C launchpad comunicandose


¡Hola!

En este tutorial mostrare a el Arduino uno hablándole a la Tiva c launcpad de TI quien le enviara un carácter de respuesta a Arduino, Para que esto suceda debemos trabajar con el protocolo de comunicación I2C que es una comunicación en serie para ínter circuitos integrados.


Figura 1. I2C (from Wikipedia)


Materiales:
-Tiva C launchpad
-Arduino uno
-cables


Se deben interconectar los SDA Y SCL que son por viajan los datos y el reloj que llevan estos, tambien se deben conectar tierra entre las 2 placas.
Para el caso de la tiva: 
                                            SDA:PD1     SCL: PD0
mientras que para arduino: 
                                            SDA:  A4      SCL:A5



                                                          Figura 2. Diagrama del sistema

Gracias a la libreria Wire.h que la traen las 2 placas haremos posible la comunicación entre estas.
Se usara el master-write con el slave-receiver y el master-reader con el slave-sender.





                                                              Figura 3. Programas a usar


Al final en el siguiente video se muestra como deberia trabajar este sistema:


Éxitos.





Maryori Sabalza Mejía
Cartagena-Colombia

BarGraph Arduino uno

BarGraph Tiva C series Launchpad


Tiva C series Launchpad-BarGraph


Hola! en este primera entrada del blog les mostrare como hacer la prueba del bargraph usando leds y un potenciometro al igual que se hace en Arduino uno.


Materiales:

-Tiva C serie TM4C123g
-Led's (use 8)
-Resistencias 470 ohm (mismo numero de los leds usados)
-Potenciometro 10 Kohm
-Protoboard
-Cables


La primera conexion que se debe hacer es la del potenciometro de la siguiente manera:

A0=PE3
GND
5V=VBUS
Figura 1. Conexion del Potenciometro con la Tiva C

Ahora el codigo a usar sera: File-Examples-display-barGraph.

Figura 2. Programa básico


 Y el codigo incluyendo los 8 leds y el pin analogo A0:


// these constants won't change:
const int analogPin = 29;   // the pin that the potentiometer is attached to
const int ledCount = 8;    // the number of LEDs in the bar graph

int ledPins[] = {  4, 5, 6, 7,8,9,10,13 };   // an array of pin numbers to which LEDs are attached

const int numReadings = 8;

int readings[numReadings];      // the readings from the analog input
int index = 0;                  // the index of the current reading
int total = 0;                  // the running total
int average = 0;                // the average

int inputPin = A0;
void setup() {
  // loop over the pin array and set them all to output:
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    pinMode(ledPins[thisLed], OUTPUT); 
  }
  // initialize serial communication with computer:
  Serial.begin(9600);                   
  // initialize all the readings to 0: 
  for (int thisReading = 0; thisReading < numReadings; thisReading++)
    readings[thisReading] = 0; 
}

void loop() {
  // read the potentiometer:
  int sensorReading = analogRead(analogPin);
  // map the result to a range from 0 to the number of LEDs:
  int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);

  // loop over the LED array:
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    // if the array element's index is less than ledLevel,
    // turn the pin for this element on:
    if (thisLed < ledLevel) {
      digitalWrite(ledPins[thisLed], HIGH);
    } 
    // turn off all pins higher than the ledLevel:
    else {
      digitalWrite(ledPins[thisLed], LOW); 
    }
  }
  
   // subtract the last reading:
  total= total - readings[index];         
  // read from the sensor:  
  readings[index] = analogRead(inputPin); 
  // add the reading to the total:
  total= total + readings[index];       
  // advance to the next position in the array:  
  index = index + 1;                    

  // if we're at the end of the array...
  if (index >= numReadings)              
    // ...wrap around to the beginning: 
    index = 0;                           

  // calculate the average:
  average = total / numReadings;         
  // send it to the computer as ASCII digits
  Serial.println(average);   
  delay(1);
}

El resultado debe verse algo así:



Para mas información pueden revisar mi siguiente entrada que se trata de este mismo proyecto usando Arduino uno.


Exitos!

Maryori Sabalza Mejía
Cartagena-Colombia