bien spi no se queda pegado

Dependencies:   mbed

Committer:
djinn77
Date:
Thu Sep 13 08:34:58 2018 +0000
Revision:
11:2dc0f84c600a
Parent:
10:d4d4b9e9ed92
Child:
12:50e2c8c6bf8c
algo raro;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
djinn77 0:4b2603e81763 1 #include "mbed.h"
djinn77 1:d99b6299bad8 2 #include "piezas.h"
djinn77 1:d99b6299bad8 3 //#define DEBUG 1
djinn77 0:4b2603e81763 4
djinn77 7:5677ded8ff2a 5 Serial pc(USBTX,USBRX);
djinn77 7:5677ded8ff2a 6 SPI deviceM(PB_15, PB_14, PB_13); //SE DEFINE EL LED QUE ACTIVARA EL DISPOSITIVO
djinn77 0:4b2603e81763 7 DigitalOut ssel (PB_12);
djinn77 0:4b2603e81763 8
djinn77 3:b77f80e91118 9 int memoria[8]={0};
djinn77 0:4b2603e81763 10
djinn77 0:4b2603e81763 11 void debuging(char*s,...){
djinn77 0:4b2603e81763 12
djinn77 0:4b2603e81763 13 #if DEBUG
djinn77 0:4b2603e81763 14 pc.printf(s);
djinn77 0:4b2603e81763 15 #endif
djinn77 0:4b2603e81763 16
djinn77 0:4b2603e81763 17 }
djinn77 0:4b2603e81763 18
djinn77 7:5677ded8ff2a 19 // FUNCION EL CUAL ENVIA EL DATO JUNTO CON LA DIRECCION DE LA COLUMNA CORRESPONDIENTE AL PRIMER DISPOSITIVO
djinn77 0:4b2603e81763 20 void sendSPI(uint8_t d1, uint8_t d2)
djinn77 0:4b2603e81763 21 {
djinn77 0:4b2603e81763 22 deviceM.unlock();
djinn77 7:5677ded8ff2a 23 ssel=0; // SELECCIONA EL PRIMER DISPOSOTIVO
djinn77 7:5677ded8ff2a 24 deviceM.write(d1); // ESCRIBE EL ADDRESS
djinn77 7:5677ded8ff2a 25 deviceM.write(d2); // ESCRIBE EL DATA
djinn77 0:4b2603e81763 26 ssel=1;
djinn77 0:4b2603e81763 27 deviceM.lock();
djinn77 0:4b2603e81763 28 };
djinn77 1:d99b6299bad8 29
djinn77 7:5677ded8ff2a 30 // Toma el vecor reorganizado , lo imprime y lo almacena
djinn77 1:d99b6299bad8 31 void captura_matriz(uint16_t* imprimir){
djinn77 7:5677ded8ff2a 32 int i=0; // inicia el contador i en 0
djinn77 6:c80ec2cdfb9e 33
djinn77 7:5677ded8ff2a 34 while(i <8){ //se encarga de desplazar los bits dentro del vector
djinn77 11:2dc0f84c600a 35
djinn77 11:2dc0f84c600a 36 sendSPI(1, memoria[0]|(imprimir[0]>>i));
djinn77 11:2dc0f84c600a 37 sendSPI(2, memoria[1]|(imprimir[1]>>i));
djinn77 11:2dc0f84c600a 38 sendSPI(3, memoria[2]|(imprimir[2]>>i));
djinn77 11:2dc0f84c600a 39 sendSPI(4, memoria[3]|(imprimir[3]>>i));
djinn77 11:2dc0f84c600a 40 sendSPI(5, memoria[4]|(imprimir[4]>>i));
djinn77 11:2dc0f84c600a 41 sendSPI(6, memoria[5]|(imprimir[5]>>i));
djinn77 11:2dc0f84c600a 42 sendSPI(7, memoria[6]|(imprimir[6]>>i));
djinn77 11:2dc0f84c600a 43 sendSPI(8, memoria[7]|(imprimir[7]>>i));
djinn77 7:5677ded8ff2a 44
djinn77 11:2dc0f84c600a 45
djinn77 9:0cf4c5f7a1d8 46
djinn77 11:2dc0f84c600a 47 if(i==7 || (memoria[i] &(imprimir[i]>>i+1)!=0)){
djinn77 11:2dc0f84c600a 48
djinn77 11:2dc0f84c600a 49 memoria[0] = memoria[0]|(imprimir[0]>>i);
djinn77 11:2dc0f84c600a 50 memoria[1] = memoria[1]|(imprimir[1]>>i);
djinn77 11:2dc0f84c600a 51 memoria[2] = memoria[2]|(imprimir[2]>>i);
djinn77 11:2dc0f84c600a 52 memoria[3] = memoria[3]|(imprimir[3]>>i);
djinn77 11:2dc0f84c600a 53 memoria[4] = memoria[4]|(imprimir[4]>>i);
djinn77 11:2dc0f84c600a 54 memoria[5] = memoria[5]|(imprimir[5]>>i);
djinn77 11:2dc0f84c600a 55 memoria[6] = memoria[6]|(imprimir[6]>>i);
djinn77 11:2dc0f84c600a 56 memoria[7] = memoria[7]|(imprimir[7]>>i);
djinn77 11:2dc0f84c600a 57 break;
djinn77 11:2dc0f84c600a 58
djinn77 11:2dc0f84c600a 59
djinn77 11:2dc0f84c600a 60 }
djinn77 11:2dc0f84c600a 61
djinn77 11:2dc0f84c600a 62
djinn77 11:2dc0f84c600a 63
djinn77 11:2dc0f84c600a 64
djinn77 11:2dc0f84c600a 65 wait(1.0);
djinn77 4:1d1a3b0021d5 66 i++;
djinn77 4:1d1a3b0021d5 67 }
djinn77 11:2dc0f84c600a 68 imprimir[0]=0x00;
djinn77 11:2dc0f84c600a 69 imprimir[1]=0x00;
djinn77 11:2dc0f84c600a 70 imprimir[2]=0x00;
djinn77 11:2dc0f84c600a 71 imprimir[3]=0x00;
djinn77 11:2dc0f84c600a 72 imprimir[4]=0x00;
djinn77 11:2dc0f84c600a 73 imprimir[5]=0x00;
djinn77 11:2dc0f84c600a 74 imprimir[6]=0x00;
djinn77 11:2dc0f84c600a 75 imprimir[7]=0x00;
djinn77 1:d99b6299bad8 76 }
djinn77 1:d99b6299bad8 77
djinn77 1:d99b6299bad8 78
djinn77 7:5677ded8ff2a 79 void desplazar(uint16_t* datos, char des){ // tomar la figura y la desplaza segun la posicion ingresada inicialmente
djinn77 1:d99b6299bad8 80
djinn77 7:5677ded8ff2a 81 uint16_t desplazamiento[8]={0}; // Inicia un vector auxiliar con solo Ceros
djinn77 1:d99b6299bad8 82 int j= 0;
djinn77 1:d99b6299bad8 83
djinn77 7:5677ded8ff2a 84 for(int i=des; i<(des+3);i++){ // Inicia un vector auxiliar con solo Ceros
djinn77 7:5677ded8ff2a 85 desplazamiento[i]=datos[j]; // Alamcena los nuevos datos tomados en el vector
djinn77 1:d99b6299bad8 86 j++;
djinn77 1:d99b6299bad8 87 }
djinn77 7:5677ded8ff2a 88 captura_matriz(desplazamiento); //Envia el Vector desplazado la funcion de captura de matriz
djinn77 1:d99b6299bad8 89 }
djinn77 1:d99b6299bad8 90
djinn77 10:d4d4b9e9ed92 91 void read(char pos, char figura, char giro){
djinn77 10:d4d4b9e9ed92 92
djinn77 7:5677ded8ff2a 93 switch(figura){ //Este switch escoje la figura con que trabajaar
djinn77 1:d99b6299bad8 94 case 0: // L
djinn77 7:5677ded8ff2a 95 switch(giro){ //Este switch rota la figura a trabajar
djinn77 1:d99b6299bad8 96 case 0:
djinn77 7:5677ded8ff2a 97 desplazar(PZA_LD,pos); //LLAMA A LA FUNCION DESPLAZAMIENTO Y PONE LA POSICION
djinn77 1:d99b6299bad8 98 case 1:
djinn77 2:f9d289ee6b30 99 desplazar(PZA_LDN,pos);
djinn77 1:d99b6299bad8 100
djinn77 1:d99b6299bad8 101 break;
djinn77 1:d99b6299bad8 102 case 2:
djinn77 2:f9d289ee6b30 103 desplazar(PZA_LDO,pos);
djinn77 1:d99b6299bad8 104
djinn77 1:d99b6299bad8 105 break;
djinn77 1:d99b6299bad8 106 case 3:
djinn77 2:f9d289ee6b30 107 desplazar(PZA_LDD, pos);
djinn77 1:d99b6299bad8 108
djinn77 1:d99b6299bad8 109 break;
djinn77 0:4b2603e81763 110 }
djinn77 0:4b2603e81763 111 break;
djinn77 2:f9d289ee6b30 112 case 1://T
djinn77 2:f9d289ee6b30 113 switch(giro){
djinn77 2:f9d289ee6b30 114 case 0:
djinn77 2:f9d289ee6b30 115 desplazar(PZA_T, pos);
djinn77 2:f9d289ee6b30 116 break;
djinn77 2:f9d289ee6b30 117 case 1:
djinn77 2:f9d289ee6b30 118 desplazar(PZA_TN, pos);
djinn77 2:f9d289ee6b30 119 break;
djinn77 2:f9d289ee6b30 120 case 2:
djinn77 2:f9d289ee6b30 121 desplazar(PZA_TO, pos);
djinn77 2:f9d289ee6b30 122 break;
djinn77 2:f9d289ee6b30 123 case 3:
djinn77 2:f9d289ee6b30 124 desplazar(PZA_TD, pos);
djinn77 2:f9d289ee6b30 125 break;
djinn77 0:4b2603e81763 126 }
djinn77 0:4b2603e81763 127
djinn77 0:4b2603e81763 128 break;
djinn77 2:f9d289ee6b30 129 case 2://I
djinn77 2:f9d289ee6b30 130 switch(giro){
djinn77 2:f9d289ee6b30 131 case 0: case 2:
djinn77 2:f9d289ee6b30 132 desplazar(PZA_I, pos);
djinn77 2:f9d289ee6b30 133 break;
djinn77 2:f9d289ee6b30 134 case 1: case 3:
djinn77 2:f9d289ee6b30 135 desplazar(PZA_IR, pos);
djinn77 2:f9d289ee6b30 136 break;
djinn77 0:4b2603e81763 137 }
djinn77 0:4b2603e81763 138 break;
djinn77 2:f9d289ee6b30 139 case 3://Cuadrado
djinn77 2:f9d289ee6b30 140 switch(giro){
djinn77 2:f9d289ee6b30 141 case 1: case 2: case 3: case 4:
djinn77 2:f9d289ee6b30 142 desplazar(PZA_C,pos);
djinn77 2:f9d289ee6b30 143 break;
djinn77 0:4b2603e81763 144 }
djinn77 2:f9d289ee6b30 145 break;
djinn77 2:f9d289ee6b30 146 case 5: //Z
djinn77 2:f9d289ee6b30 147 switch(giro){
djinn77 2:f9d289ee6b30 148 case 0:
djinn77 2:f9d289ee6b30 149 desplazar(PZA_Z,pos);
djinn77 2:f9d289ee6b30 150 break;
djinn77 2:f9d289ee6b30 151 case 1:
djinn77 2:f9d289ee6b30 152 desplazar(PZA_ZN,pos);
djinn77 2:f9d289ee6b30 153 break;
djinn77 2:f9d289ee6b30 154 case 2:
djinn77 2:f9d289ee6b30 155 desplazar(PZA_ZO,pos);
djinn77 2:f9d289ee6b30 156 break;
djinn77 2:f9d289ee6b30 157 case 3:
djinn77 2:f9d289ee6b30 158 desplazar(PZA_ZD, pos);
djinn77 2:f9d289ee6b30 159 break;
djinn77 2:f9d289ee6b30 160 }
djinn77 0:4b2603e81763 161
djinn77 0:4b2603e81763 162 break;
djinn77 2:f9d289ee6b30 163
djinn77 0:4b2603e81763 164 }
djinn77 0:4b2603e81763 165 }
djinn77 10:d4d4b9e9ed92 166
djinn77 10:d4d4b9e9ed92 167 void captura_datos(){
djinn77 10:d4d4b9e9ed92 168
djinn77 10:d4d4b9e9ed92 169 pc.baud(38400); //Inicializa la velocidad de comunicacion
djinn77 10:d4d4b9e9ed92 170
djinn77 10:d4d4b9e9ed92 171 char pos= 0;
djinn77 10:d4d4b9e9ed92 172 char figura= 0;
djinn77 10:d4d4b9e9ed92 173 char giro= 0;
djinn77 10:d4d4b9e9ed92 174
djinn77 10:d4d4b9e9ed92 175 debuging("\n Ingrese el posicion. ");
djinn77 10:d4d4b9e9ed92 176 pos=pc.getc();
djinn77 10:d4d4b9e9ed92 177 debuging("\n Seleccione la Figura. ");
djinn77 10:d4d4b9e9ed92 178 figura=pc.getc();
djinn77 10:d4d4b9e9ed92 179 debuging("\n Seleccione la rotacion. ");
djinn77 10:d4d4b9e9ed92 180 giro=pc.getc();
djinn77 10:d4d4b9e9ed92 181
djinn77 10:d4d4b9e9ed92 182 read(pos,figura,giro);
djinn77 10:d4d4b9e9ed92 183
djinn77 10:d4d4b9e9ed92 184 }
djinn77 10:d4d4b9e9ed92 185
djinn77 7:5677ded8ff2a 186 void inicializar(){ //INICIALIZA LA MATRIZ
djinn77 0:4b2603e81763 187
djinn77 7:5677ded8ff2a 188 sendSPI(0x0c,1);
djinn77 0:4b2603e81763 189 sendSPI(0x0b,7);
djinn77 7:5677ded8ff2a 190 sendSPI(0x09,0); //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ
djinn77 7:5677ded8ff2a 191 sendSPI(0x0A,0x0f); //SELECCIONA LA LUMINOSIDAD DE LA MATRIZ
djinn77 0:4b2603e81763 192 int i;
djinn77 0:4b2603e81763 193 for (i=0;i<2;i++){
djinn77 0:4b2603e81763 194 sendSPI(0x0F,1);
djinn77 0:4b2603e81763 195 wait (0.5);
djinn77 0:4b2603e81763 196 sendSPI(0x0f,0);
djinn77 0:4b2603e81763 197 wait (0.5);
djinn77 0:4b2603e81763 198 }
djinn77 0:4b2603e81763 199
djinn77 5:106def451c41 200 for (int j= 1; j<=8;j++){ // limpia la pantalla al encenderce o reiniarcea asi
djinn77 5:106def451c41 201 //no quedan leds encendidos cuando se ejecute el programa nuevamente
djinn77 5:106def451c41 202
djinn77 7:5677ded8ff2a 203 sendSPI(j, 0x00); //pone cada columna y vecto en blanco al inicializar
djinn77 5:106def451c41 204 }
djinn77 0:4b2603e81763 205 }
djinn77 0:4b2603e81763 206
djinn77 0:4b2603e81763 207
djinn77 0:4b2603e81763 208 int main() {
djinn77 7:5677ded8ff2a 209 inicializar(); // Inicializa el programa para establecer los modos de trabajo liminosidad
djinn77 0:4b2603e81763 210 while(1){
djinn77 10:d4d4b9e9ed92 211 captura_datos(); // Inicia la lectura de la informacion
djinn77 0:4b2603e81763 212 }
djinn77 7:5677ded8ff2a 213
djinn77 0:4b2603e81763 214 }