115
Aguijón: Introducción Básica

Aguijón: Introducción Básica

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Aguijón: Introducción Básica

Aguijón: Introducción Básica

Page 2: Aguijón: Introducción Básica

• Diseñar aplicaciones embebidas utilizando las librerías HammerHead.

• Conocer de una mejor manera la arquitectura de hardware en el Aguijón.

• Conocer los alcances que implica el utilizar una plataforma de desarrollo profesional de alto desempeño.

Al finalizar este curso, podrás:

Aguijón ; introducción básica 2

Page 3: Aguijón: Introducción Básica

• Diseño de Hardware• Bloques funcionales• Herramientas de desarrollo• Introducción a las librerías HammerHead• Sumario

Aguijón ; introducción básica 3

Page 4: Aguijón: Introducción Básica

Diseño de hardware

Page 5: Aguijón: Introducción Básica

Manufactura

Aguijón ; introducción básica 5

Page 6: Aguijón: Introducción Básica

• Integridad de señal

• Distribución de potencia

• Inmunidad al ruido

• Componentes SMT

Aguijón ; introducción básica 6

Page 7: Aguijón: Introducción Básica

• Kit con maleta ergonómica, transformador de pared de +12VDC y desarmador reversible incluidos.

Aguijón ; introducción básica 7

Page 8: Aguijón: Introducción Básica

• Diseño compacto, fabricado con tecnología SMT• Cuenta con los módulos necesarios para realizar una 

diversidad de proyectos.

Aguijón ; introducción básica 8

Page 9: Aguijón: Introducción Básica

Microchip PIC24F

Aguijón ; introducción básica 9

Page 10: Aguijón: Introducción Básica

• Procesador de 16 bits• 128KB Flash• 16KB RAM• 5 módulos PWM• 6 timers• 3 módulos SPI• 3 módulos I2C• RTCC• Pines re‐asignables

Aguijón ; introducción básica 10

Page 11: Aguijón: Introducción Básica

Bloques Funcionales ‐ Salidas

Page 12: Aguijón: Introducción Básica

Salidas en Relevador

Aguijón ; introducción básica 12

Page 13: Aguijón: Introducción Básica

• 4 Salidas en relevador tipo "C " @10amp

• +12VDC ó GND disponibles para conmutar al pin común

• LEDs indicadores de estado para cada salida

Aguijón ; introducción básica 13

Page 14: Aguijón: Introducción Básica

Jumpers E2‐E6 Pin común del relevador:

Configuración de los relevadores

1‐2 GND

2‐3 +12VDC

Abierto Abierto

Aguijón ; introducción básica 14

Page 15: Aguijón: Introducción Básica

Salidas en Colector Abierto

Aguijón ; introducción básica 15

Page 16: Aguijón: Introducción Básica

• 4 Salidas con capacidad de 500mA

• +12VDC en 4 borneras adicionales 

• LEDs indicadores de estado para cada salida

Aguijón ; introducción básica 16

Page 17: Aguijón: Introducción Básica

Puerto de LEDs

Aguijón ; introducción básica 17

Page 18: Aguijón: Introducción Básica

• Puerto de 8 bits dedicado

Aguijón ; introducción básica 18

Page 19: Aguijón: Introducción Básica

Buzzer

Aguijón ; introducción básica 19

Page 20: Aguijón: Introducción Básica

• Controlado por PWM

• Frecuencia nominal de 2.4kHz

• Capaz de generar distintos tonos

Aguijón ; introducción básica 20

Page 21: Aguijón: Introducción Básica

Bloques Funcionales ‐ Entradas

Page 22: Aguijón: Introducción Básica

Entradas Opto‐aisladas

Aguijón ; introducción básica 22

Page 23: Aguijón: Introducción Básica

• 4 Entradas con modo de operación configurable• LEDs indicadores de estado• Entrada externa de voltaje de hasta 48VDC

Aguijón ; introducción básica 23

Page 24: Aguijón: Introducción Básica

Aguijón ; introducción básica 24

Positive VoltageSource

E1A E1B J1C J1D VIN IN+ IN‐

2‐3 5‐6 NC 7‐8 NC +Source Return

Current sink toreturn

E1A E1B J1C J1D VIN IN+ IN‐

2‐3 5‐6 5‐6 NC NC Sink Return

Externally WettedContacts

E1A E1B J1C J1D VIN IN+ IN‐

NC NC NC 7‐8 NC 1+ 1‐

Dry contactspositive common

E1A E1B J1C J1D VIN IN+ IN‐

2‐1 5‐4 5‐6 NC NC IN‐ IN+

Dry contacts returncommon

E1A E1B J1C J1D VIN IN+ IN‐

2‐1 5‐4 NC 7‐8 IN+ VIN NC

Page 25: Aguijón: Introducción Básica

DIP SW + Teclado

Aguijón ; introducción básica 25

Page 26: Aguijón: Introducción Básica

• DIP SW y teclas compartidas

• Se leen 12 entradas con 6 pines (4 para leer y 2 de control)

• DIP switch de 8 posiciones

• 4 Teclas en tablilla

Aguijón ; introducción básica 26

Page 27: Aguijón: Introducción Básica

MSB_CTRL LSB_CTRL Estado:

1 1 A

1 0 B

0 1 C

0 0 D

Tabla de Estados:

A = Teclas habilitadas y DIP SW deshabilitadoB = Teclas deshabilitadas y LSB habilitadoC = Teclas deshabilitadas y MSB habilitadoD = Lectura inválida

Aguijón ; introducción básica 27

Page 28: Aguijón: Introducción Básica

Entrada Analógica

Aguijón ; introducción básica 28

Page 29: Aguijón: Introducción Básica

• Ganancia unitaria o ajustable• Conversión digital de 10 bits,  vref = +3.3V• Protección contra sobre voltaje• Potenciómetro en tablilla  para atenuar +3.3V o un voltaje 

externo

Aguijón ; introducción básica 29

Page 30: Aguijón: Introducción Básica

Jumper E2A Jumper E2B Ganancia Entrada analógica RV1

1‐2 5‐6Unitaria

Externa Atenúa señal externa

2‐3 5‐6 Interna (+3.3V) Atenúa +3.3V

1‐2 4‐5 Ajustable con RV2

Externa Atenúa señal externa

2‐3 4‐5 Interna (+3.3V) Atenúa +3.3V

Aguijón ; introducción básica 30

Page 31: Aguijón: Introducción Básica

Bloques Funcionales

Page 32: Aguijón: Introducción Básica

Display LCD

Aguijón ; introducción básica 32

Page 33: Aguijón: Introducción Básica

• LCD ‐ COG con interfaz I2C de hasta 400kHz

• 2 renglones x 20 columnas

• Intensidad de backlightajustable por PWM

• Comparte bus I2C con la EEPROM

Aguijón ; introducción básica 33

Page 34: Aguijón: Introducción Básica

EEPROM

Aguijón ; introducción básica 34

Page 35: Aguijón: Introducción Básica

• Capacidad de 127 Bytes• Comparte bus I2C con la LCD

Aguijón ; introducción básica 35

Page 36: Aguijón: Introducción Básica

RS232C

Aguijón ; introducción básica 36

Page 37: Aguijón: Introducción Básica

• Driver: MAX3221• 110 – 115200 bps• Recepción de datos controlada por interrupción (usando 

HammerHead)

Aguijón ; introducción básica 37

Page 38: Aguijón: Introducción Básica

USB

Aguijón ; introducción básica 38

Page 39: Aguijón: Introducción Básica

• Conector tipo ‘A’ permite actuar como ‘HOST’ o ‘DEVICE’• Switching Regulator para generar +5VDC de salida al conector 

(modo HOST)• Puede ser usado como programador (bootloader)

Aguijón ; introducción básica 39

Page 40: Aguijón: Introducción Básica

Herramientas de Desarrollo

Page 41: Aguijón: Introducción Básica

Aguijón ; introducción básica 41

Page 42: Aguijón: Introducción Básica

Aguijón ; introducción básica 42

Page 43: Aguijón: Introducción Básica

HammerHead

Page 44: Aguijón: Introducción Básica

• Librerías de control de Vinagrón Digital (Open Source)

• Tamaño compacto(< 10KB)

• Soporte para todos los bloques funcionales

• Incluye funciones de inicialización, lectura, escritura y control general

Aguijón ; introducción básica 44

Page 45: Aguijón: Introducción Básica

Aplicación HammerHead

Entradas

Salidas

Comunicación

LCD

Aguijón ; introducción básica 45

Page 46: Aguijón: Introducción Básica

• Cada módulo cuenta con su propia librería, que consta de dos archivos; un «*.c» y «*.h»

Aguijón ; introducción básica 46

Page 47: Aguijón: Introducción Básica

• Cada archivo ‘*.c’ incluye:– Inicialización – Lectura – Escritura – Control General

• Los archivos ‘*.h’ incluyen:– Prototipos de funciones– Definiciones– Macros

• Archivo ‘BSP.h’ global:– Incluye definiciones de pines

• Archivo ‘aguijon.h’ global:– Incluye  ‘BSP.h’– Incluye  el header del 

procesador– Incluye STDIO y STDLIB– Incluye GenericTypeDefs de 

Microchip– Incluye definiciones de delay

Aguijón ; introducción básica 47

Page 48: Aguijón: Introducción Básica

Aguijón ; introducción básica 48

Page 49: Aguijón: Introducción Básica

• Functions:– PREFIJO_CamelCase void ADC_Init(void);

• Variables:– Externas: PREFIJO_CamelCase extern int ADC_Lectura;– Globales: CamelCase int ConversionTemp = 0;– Locales:    mixedCase static int mathVariable = 0;

• Defines:– #define ADC_MAX_VALUE 0x03F6

• Macro:– Macro_Call();

• Typedefs:– Prefijo_Nombre_t

Aguijón ; introducción básica 49

Page 50: Aguijón: Introducción Básica

#ifndef ANALOG_H#define ANALOG_H

#define ADC_MAX_VALUE 0x03F6#define ADC_MIN_VALUE 0x00 

/* Function prototypes*/void ADC_Init (void);int ADC_Read (void);int ADC_Range (int min_val, int max_val);

#endif /* ANALOG_H */

Aguijón ; introducción básica 50

Page 51: Aguijón: Introducción Básica

#ifndef ANALOG_H#define ANALOG_H

#define ADC_MAX_VALUE 0x03F6#define ADC_MIN_VALUE 0x00 

/* Function prototypes*/void ADC_Init (void);int ADC_Read (void);int ADC_Range (int min_val, int max_val);

#endif /* ANALOG_H */

Include Guard

Aguijón ; introducción básica 51

Page 52: Aguijón: Introducción Básica

#ifndef ANALOG_H#define ANALOG_H

#define ADC_MAX_VALUE 0x03F6#define ADC_MIN_VALUE 0x00 

/* Function prototypes*/void ADC_Init (void);int ADC_Read (void);int ADC_Range (int min_val, int max_val);

#endif /* ANALOG_H */

Definiciones

Include Guard

Aguijón ; introducción básica 52

Page 53: Aguijón: Introducción Básica

#ifndef ANALOG_H#define ANALOG_H

#define ADC_MAX_VALUE 0x03F6#define ADC_MIN_VALUE 0x00 

/* Function prototypes*/void ADC_Init (void);int ADC_Read (void);int ADC_Range (int min_val, int max_val);

#endif /* ANALOG_H */

Prototipos de funciones

Definiciones

Include Guard

Aguijón ; introducción básica 53

Page 54: Aguijón: Introducción Básica

#include "aguijon.h"#include "analog.h"

///////////////////////////////////////void ADC_Init(void){

AD1PCFG = 0x7FFF;  //select RB15(AN15) as analog inputAD1CON1 = 0x00E0;  //auto start conversionAD1CON2  = 0; // use AVDD, AVSS as reference pinsAD1CON3 = 0x1F02; // Tsamp = 32 x Tad; Tad=125nsAD1CSSL = 0;  // no scanning requiredAD1CON1bits.ADON = 1;  // turn on the ADC

}

Aguijón ; introducción básica 54

Page 55: Aguijón: Introducción Básica

HammerHead ‐ Funciones

Page 56: Aguijón: Introducción Básica

Entradas («inputs.h»)

Aguijón ; introducción básica 56

Page 57: Aguijón: Introducción Básica

Aguijón ; introducción básica 57

Page 58: Aguijón: Introducción Básica

Entradas («inputs.c»)

Aguijón ; introducción básica 58

Page 59: Aguijón: Introducción Básica

void DIPSW_Config(int config){switch(config){

case DIPSW_ENABLE_MSB_CMD:DIPSW_ENABLE_MSB_PIN = 0;DIPSW_ENABLE_LSB_PIN = 1;break;

case DIPSW_ENABLE_LSB_CMD:DIPSW_ENABLE_MSB_PIN = 1;DIPSW_ENABLE_LSB_PIN = 0;break;

case DIPSW_DISABLE_CMD:DIPSW_ENABLE_LSB_PIN = 1;DIPSW_ENABLE_MSB_PIN = 1;break;

}}

Aguijón ; introducción básica 59

Page 60: Aguijón: Introducción Básica

Aguijón ; introducción básica 60

Page 61: Aguijón: Introducción Básica

if((DIPSW_Read() & 0x01) == 0x01){ LED_Set(1,ON); }

while(DIPSW_Read() > 120){ dato++; }

unsigned char variable = 0;

variable = DIPSW_Read();

Aguijón ; introducción básica 61

Page 62: Aguijón: Introducción Básica

PORTB:

1 0 1 0 1 1 1 1 0 0 0 1 0 1 0 0

DIP + Teclas

Aplicamos una máscara

0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0

Y construímos un byte (>>10), al terminar lo guardamos en una variable

0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1

PORTB:

Aguijón ; introducción básica 62

Page 63: Aguijón: Introducción Básica

PORTB:

1 1 0 1 0 1 0 1 1 0 1 1 0 1 0 1

DIP + Teclas

Aplicamos una máscara

0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0

Y construímos un byte (>>10), al terminar lo guardamos en una variable

0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1

PORTB:

Aguijón ; introducción básica 63

Page 64: Aguijón: Introducción Básica

0 0 0 0 0 0 1 0

MSB

0 0 1 0 0 0 0 0

MSB << 4

Return var:

0 0 1 0 0 1 0 1

MSB LSB

Resultado final  = msb | lsb

Aguijón ; introducción básica 64

Page 65: Aguijón: Introducción Básica

Aguijón ; introducción básica 65

Page 66: Aguijón: Introducción Básica

Aguijón ; introducción básica 66

Page 67: Aguijón: Introducción Básica

Aguijón ; introducción básica 67

Page 68: Aguijón: Introducción Básica

if((SW_ReadPort() & 0x01) == 0x01){ RS232_Send(0x01); }if((IN_ReadPort() & 0x0F) == 0x0F){ RS232_Send(0x0F); }

unsigned char tecla   = 0;unsigned char entrada = 0;

tecla   = SW_Read();entrada = IN_Read();

if(tecla == 1){RLY_Set(1,ON);

}

Aguijón ; introducción básica 68

Page 69: Aguijón: Introducción Básica

Salidas («outputs.h»)

Aguijón ; introducción básica 69

Page 70: Aguijón: Introducción Básica

Aguijón ; introducción básica 70

Page 71: Aguijón: Introducción Básica

Salidas («outputs.c»)

Aguijón ; introducción básica 71

Page 72: Aguijón: Introducción Básica

Aguijón ; introducción básica 72

Page 73: Aguijón: Introducción Básica

Aguijón ; introducción básica 73

Page 74: Aguijón: Introducción Básica

Aguijón ; introducción básica 74

Page 75: Aguijón: Introducción Básica

Aguijón ; introducción básica 75

Page 76: Aguijón: Introducción Básica

Aguijón ; introducción básica 76

Page 77: Aguijón: Introducción Básica

if(LED_Get(1) == OFF){ LED_Set(1,ON);}if(OC_Get(4) == ON) { OC_Set(4,OFF);}

for(i=1 ; i<=4 ; i++){if(RLY_Get(i) == OFF){

RLY_Set(i,ON);}else{

RLY_Set(i,OFF);}

}

OC_PWMChannelConfig(2);OC_PWMSet(200,50); //200uS( 5kHz) period @ 50% dutyOC_PWMSet(100,75); //100uS(10kHz) period @ 75% duty

Aguijón ; introducción básica 77

Page 78: Aguijón: Introducción Básica

Aguijón ; introducción básica 78

Page 79: Aguijón: Introducción Básica

BUZZER_On(333,5); //333uS( 3kHz) period @  5% dutyBUZZER_On(200,50); //200uS( 5kHz) period @ 50% dutyBUZZER_On(100,75); //100uS(10kHz) period @ 75% duty

BUZZER_Off();

Aguijón ; introducción básica 79

Page 80: Aguijón: Introducción Básica

Analógico («analog.h»)

Aguijón ; introducción básica 80

Page 81: Aguijón: Introducción Básica

Aguijón ; introducción básica 81

Page 82: Aguijón: Introducción Básica

Analógico («analog.c»)

Aguijón ; introducción básica 82

Page 83: Aguijón: Introducción Básica

Aguijón ; introducción básica 83

Page 84: Aguijón: Introducción Básica

Aguijón ; introducción básica 84

Page 85: Aguijón: Introducción Básica

ADC_Init();OC_PWMChannelConfig(1);

int variable = 0;

variable = ADC_Range(5,95);

OC_PWMSet(400,variable);

Aguijón ; introducción básica 85

Page 86: Aguijón: Introducción Básica

EEPROM(«EEPROM.h»)

Aguijón ; introducción básica 86

Page 87: Aguijón: Introducción Básica

Aguijón ; introducción básica 87

Page 88: Aguijón: Introducción Básica

EEPROM(«EEPROM.c»)

Aguijón ; introducción básica 88

Page 89: Aguijón: Introducción Básica

Aguijón ; introducción básica 89

Page 90: Aguijón: Introducción Básica

Aguijón ; introducción básica 90

Page 91: Aguijón: Introducción Básica

RS232(«RS232.h»)

Aguijón ; introducción básica 91

Page 92: Aguijón: Introducción Básica

Aguijón ; introducción básica 92

Page 93: Aguijón: Introducción Básica

RS232(«RS232.c»)

Aguijón ; introducción básica 93

Page 94: Aguijón: Introducción Básica

Aguijón ; introducción básica 94

Page 95: Aguijón: Introducción Básica

Aguijón ; introducción básica 95

Page 96: Aguijón: Introducción Básica

Aguijón ; introducción básica 96

Page 97: Aguijón: Introducción Básica

RS232_Init();

RS232_Send(0xFF);RS232_Send(0xAA);RS232_Send(23);

RS232_PutStr("Vinagron Digital is the best");RS232_PutStr("Aguijon; introduccion basica");

int variable = 0;

variable = RS232_Read();

Aguijón ; introducción básica 97

Page 98: Aguijón: Introducción Básica

LCD(«LCD.h»)

Aguijón ; introducción básica 98

Page 99: Aguijón: Introducción Básica

Aguijón ; introducción básica 99

Page 100: Aguijón: Introducción Básica

LCD(«LCD.c»)

Aguijón ; introducción básica 100

Page 101: Aguijón: Introducción Básica

Aguijón ; introducción básica 101

Page 102: Aguijón: Introducción Básica

Aguijón ; introducción básica 102

Page 103: Aguijón: Introducción Básica

Aguijón ; introducción básica 103

Page 104: Aguijón: Introducción Básica

Aguijón ; introducción básica 104

Page 105: Aguijón: Introducción Básica

IO_I2Cinit();LCD_Init1();LCD_SetBacklight(BLIGHT_LVL_4);LCD_SetBacklight(BLIGHT_LVL_1);

const char VDcustomChar1[] = {0x04, 0x0C, 0x1C, 0x14, 0x1C, 0x0C, 0x0E, 0x0F };

LCD_StoreCustomChar(VDcustomChar1,1);

LCD_PutStr(1,0,"Vinagron Digital",TRUE);LCD_PutStr(2,0,"HammerHead v1.0" ,FALSE);

Aguijón ; introducción básica 105

Page 106: Aguijón: Introducción Básica

IO(«IO.h»)

Aguijón ; introducción básica 106

Page 107: Aguijón: Introducción Básica

Aguijón ; introducción básica 107

Page 108: Aguijón: Introducción Básica

IO(«IO.c»)

Aguijón ; introducción básica 108

Page 109: Aguijón: Introducción Básica

Aguijón ; introducción básica 109

Page 110: Aguijón: Introducción Básica

BSP(«BSP.h»)

Aguijón ; introducción básica 110

Page 111: Aguijón: Introducción Básica

Aguijón ; introducción básica 111

Page 112: Aguijón: Introducción Básica

Aguijón («aguijon.h»)

Aguijón ; introducción básica 112

Page 113: Aguijón: Introducción Básica

Aguijón ; introducción básica 113

Page 114: Aguijón: Introducción Básica

• Aguijón:– Cuenta con los módulos 

necesarios para una diversidad de proyectos.

– Microcontrolador de 16 bits.– Reprogramable vía USB.– Expandible.– Puntas de prueba facilitan la 

visualización de protocolos.

Aguijón ; introducción básica 114

• Librerías de software:– Facilitan la implementación 

de diversos bloques funcionales.

– Open Source.

Page 115: Aguijón: Introducción Básica

¡Gracias!

Hojas de retroalimentación