Msp430 + at45db + gps + 1.8tft

Hola,

Les comparto el uso de la pantallas de TFT de 1.8", utilizando como microcontrolador el MSP430G2553, las características globales de este microcontrolador es:


16 KB de memoria ROM
512 Bytes de memoria RAM
1 a 16 Mhz de Velocidad de reloj interna


Periféricos


UART
SPI
I2C
ADC
TIMERS

La pantalla TFT de 1.8" lo adquiri en ebay:

http://www.ebay.com/sch/i.html?_from=R40&_trksid=p2050601.m570.l1313.TR11.TRC1.A0.H0.X1.8tft&_nkw=1.8tft&_sacat=0

La pantalla nos ayudara a visualizar lo que es la posicion, numero de satelites, tiempo en UTC etc.

La memoria FLASH de numero de serie AT45DB041 es una memoria de 4 Mbits, es decir de 512 KBytes, que nos permitira guardar los datos de la posicion de un GPS.

Esta memoria la he adquirido en la siguiente pagina.

www.wvshare.com

Aunque compre otras cosas para aprovechar el envio, este chip se puede encontrar en varias tiendas en linea, tal como es en Mexico AG ELECTRONICA, NEWARK MEXICO, etc.

Mientras que el GPS lo he comprado en la pagina de mikroeletronika:

http://www.mikroe.com/add-on-boards/gps/

Tal ves este un poco caro la compra de este modulo ya que me costo en total, $100 Dlls, porque me cobraron importación, (que mala onda) y aparte me lo enviaron por DHL y me cobraron 35 Dlls mas.

Y por Ultimo la fuente de poder, compre algunos reguladores en ebay que se puede usar en el protoboard para alimentar con 5 o 3.3 vcd lo que queramos.

http://www.ebay.com/sch/i.html?_from=R40&_trksid=p2050601.m570.l1313.TR0.TRC0.H0.Xpower+supply+arduino&_nkw=power+supply+arduino&_sacat=0

Diagrama unificar:
GPS%2B%2B%2BTFT%2B%2B%2BMEMORY.jpg


Fotos del proyecto:

20150130_110639.jpg


http://3.bp.blogspot.com/-8spKsGO-cVg/VMu8vk4KvCI/AAAAAAAABR4/wKooI81CyqY/s1600/20150130_110648.jpg

Libreria y proyecto:
http://www.mediafire.com/download/s3g6zr5wdsnc37z/MSP430+++TFT1.8.zip

code:

Código:
/*
 * Ucursos.blogspot.com
 * brief: Rastreo Satelital y visualizacion en Pantalla TFT.
 */

/*
 * Definimos Librerias
 */


#include <msp430g2553.h>
#include <string.h>
#include <stdlib.h>
#include "Libraries/UARThw/uart.h"
#include "Libraries/SPIhw/SPI.h"
#include "Libraries/TFT1.8/Adafruit_ST7735.h"
#include "Libraries/TFT1.8/Adafruit_GFX.h"
#include "Libraries/GPS/Ublox.h"
#include "Libraries/AT45BXX/AT45DBXX.h"

/*
 * Definimos constantes
 */

#define MAX_PAGES_MEMORY 2048
#define MAX_BUFFER_DATA	 264

/*
 * Definimos Variables
 */

unsigned char Flags=0;
char data[80];
char buffer[35];

unsigned int _x_=0;
unsigned int _adr_=0;
float StorePos=0;
unsigned long max_data_stored=0;


/*********************************************************************//**
 * @brief		Borra Memoria de Buffer de datos
 * @param[in]	*bf: Puntero de un arreglo
 * @return 		None
 **********************************************************************/

void clear_buffer_data(char *bf){
	unsigned char c;
	for(c=0;c<sizeof(buffer);c++){

		(*bf++)=0x00;

	}

}

/*********************************************************************//**
 * @brief		Muestra una Texto en la pantalla TFT
 * @param[in]	x: Posicion en X en el TFT
 * @param[in]	y: Posicion en Y en el TFT
 * @param[in]	*txt: Puntero de un arreglo del Texto
 * @param[in]	color: Color en formato Hex de 2 bytes
 * @param[in]	s: Tamaño del texto
 * @return 		None
 **********************************************************************/


void ShowTxtGLCD(int x,int y,char* txt,unsigned int color,unsigned char s){

	unsigned int pos=0;

	do{

		drawChar(x+pos,y*(8*s),*txt,color,1,s);

		pos=pos+(6*s);

	}while((*txt++)!=0);

}

/*********************************************************************//**
 * @brief		Guarda 4 bytes en la memoria flash
 * @param[in]	_datainfo_: Variable que contiene los 4 bytes a guardar
 * @return 		None
 **********************************************************************/

void SavePostionMemory(unsigned long _datainfo_){

	if(_adr_<264){

		AT45DBXX_write_Buffer(1,_adr_,(unsigned char)(_datainfo_));
		AT45DBXX_write_Buffer(1,_adr_+1,(unsigned char)(_datainfo_>>8));
		AT45DBXX_write_Buffer(1,_adr_+2,(unsigned char)(_datainfo_>>16));
		AT45DBXX_write_Buffer(1,_adr_+3,(unsigned char)(_datainfo_>>24));

		_adr_=4+_adr_;

	}else{

		AT45DBXX_write_page(1,_x_);

		_x_= _x_ + 1;

		if(_x_>=MAX_PAGES_MEMORY){

			_x_=0;

		}

		_adr_=0;


	}

	max_data_stored = (unsigned long)(_x_*MAX_BUFFER_DATA)+_adr_;

	sprintf(buffer,"%lu bytes",max_data_stored);
	ShowTxtGLCD(0,14,buffer,0xCCCC,1);

}


/*
 * Servicio de Interrupcion en Vector USCI_RX
 */
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
	if(IFG2&UCA0RXIFG){

		getchs(data);

		Flags=1;
	}
}


/*
 * main.c
 */
void main(void) {

    WDTCTL = WDTPW | WDTHOLD;	// Stop watchdog timer
	
    /*
     * Se calibra la velocidad del cristal interno
     * a 16 Mhz
     */
    if(CALBC1_16MHZ == 0xFF || CALDCO_16MHZ == 0xFF){
    	while(1);
    }

    /*
     * Se calibra la velocidad del cristal interno
     * a 16 Mhz
     */
    BCSCTL1 = CALBC1_16MHZ;
    DCOCTL	= CALDCO_16MHZ;

    /*
     * Inicilizacion de Perifericos y/o Modulos
     */

    UART_init();
    SPI_init();
    AT45DBXX_init();
    initR(INITR_BLACKTAB);
    UbloxInit();

    fillScreen(ST7735_BLACK);



    ShowTxtGLCD(0,0,"UART Successful",0xEEEE,1);
    ShowTxtGLCD(0,1,"Ublox Successful",0xEEEE,1);
    ShowTxtGLCD(0,2,"GPS 15 seg",0xEEEE,1);

    delay(10000000);

    fillScreen(ST7735_BLACK);

    ShowTxtGLCD(0,0,"GPS SYSTEM",0xCCCC,1);

    __bis_SR_register(GIE);       // Habilitamos Interrupcione globales

    ShowTxtGLCD(0,1,"NMEAMessage=",0xAAAA,1);
    ShowTxtGLCD(0,3,"UTCTime=",0xAAAA,1);
    ShowTxtGLCD(0,5,"Latitude=",0xAAAA,1);
    ShowTxtGLCD(0,7,"Longitude=",0xAAAA,1);
    ShowTxtGLCD(0,9,"Satellites=",0xAAAA,1);
    ShowTxtGLCD(0,11,"Altitude =",0xAAAA,1);
    ShowTxtGLCD(0,13,"Memory =",0xAAAA,1);
    /*
     * Super Loop del programa
     */

    while(1){

    	if(Flags){

    		Flags=0;

    		UbloxDecodeNMEA(data);

    		sprintf(buffer,"%s",UbloxPacket.NMEAMessage);
    		ShowTxtGLCD(0,2,buffer,0xCCCC,1);

    		sprintf(buffer,"%s",UbloxPacket.UTCTime);
    		ShowTxtGLCD(0,4,buffer,0xCCCC,1);

    		sprintf(buffer,"%s",UbloxPacket.Latitude);
    		ShowTxtGLCD(0,6,buffer,0xCCCC,1);

    		sprintf(buffer,"-%s",UbloxPacket.Longitude);
    		ShowTxtGLCD(0,8,buffer,0xCCCC,1);

    		sprintf(buffer,"%s",UbloxPacket.Satellites);
    		ShowTxtGLCD(0,10,buffer,0xCCCC,1);

    		sprintf(buffer,"%s",UbloxPacket.Altitude);
    		ShowTxtGLCD(0,12,buffer,0xCCCC,1);

    		StorePos = atof(UbloxPacket.Latitude);

    		SavePostionMemory((unsigned long)(StorePos*1000000));

    		StorePos = atof(UbloxPacket.Longitude);

    		SavePostionMemory((unsigned long)(StorePos*1000000));

    		clear_buffer_data(buffer);
    		clear_buffer_ublox(data,80);
    	}

    	delay(200000);
    }
}


¡Saludos!
 
Atrás
Arriba