viernes, 11 de noviembre de 2016


Tiva C Launchpad & Sensor ultrasonic HC-SR04


Materiales:
-Tiva C serie TM4C123G
-Ultrasonic Sensor HC-SR04


Conexiones necesarias entre el sensor y la tarjeta:
-Pin 9: PA6
-Pin 8: PA5
-VCC
-GND


Código:

/*
             Editado por Maryori Sabalza
              28 de Diciembre de 2015

*/

long distancia;
long tiempo;
void setup(){
  Serial.begin(9600);
  pinMode(9, OUTPUT); 
  pinMode(8, INPUT); 
}

void loop(){
  digitalWrite(9,LOW); 
  delayMicroseconds(5);
  digitalWrite(9, HIGH); 
  delayMicroseconds(10);

  tiempo=pulseIn(8, HIGH); /*Medicionde la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío  del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que  deja de hacerlo, LOW, la longitud del pulso entrante*/

  distancia= int(0.017*tiempo); /*fórmula para calcular la distancia obteniendo un valor entero*/
  /*Monitorización en centímetros por el monitor serial*/

  Serial.println("Distancia ");
  Serial.println(distancia);
  Serial.println(" cm");
  delay(1000);
}




Resultado:


jueves, 11 de agosto de 2016

Max II EPM240T100C5 CPLD Altera- Music Buzzer

Hola!

Decidí continuar probando el pequeño CPLD MAX II de Altera, hace algún tiempo probé con un blink de leds (aqui: CPLDblinkled) aprovechando los recursos web me encontré con un mega tutorial de fpga4fun, quienes con una pequeña FPGA realizan diferentes proyectos.

Aprovechando los códigos de verilog del tutorial MusicBox, quise probarlos usando el MAX II.
Figura 1. MAX II EPM240T100C5, Altera

Materiales: 
-Buzzer
-CPLD

El resultado en el vídeo, a continuación:




Exitos!

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