Mikroupravljači- Programski zadatak 4 Šoštar, Koritić, Pervan

Dependencies:   mbed

Committer:
rsostar
Date:
Tue Dec 06 22:04:56 2016 +0000
Revision:
0:26c38aa08a35
Mikroupravlja?i- Programski zadatak 4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rsostar 0:26c38aa08a35 1 #include "mbed.h"
rsostar 0:26c38aa08a35 2
rsostar 0:26c38aa08a35 3 Serial pc(USBTX,USBRX);
rsostar 0:26c38aa08a35 4 I2C msp430(p28,p27);
rsostar 0:26c38aa08a35 5
rsostar 0:26c38aa08a35 6 const int adresa0 = 0x90; //i2c adresa prvog MSP430 mikroupravljaca - desetice
rsostar 0:26c38aa08a35 7 const int adresa1 = 0x92; //i2c adresa drugog MSP430 mikroupravljaca - jedinice
rsostar 0:26c38aa08a35 8 char byte_1[2]= {0xC2,0x00};
rsostar 0:26c38aa08a35 9 char byte_2[2]= {0xC2,0x00};
rsostar 0:26c38aa08a35 10 char temp_read[2]; //char varijabla u koju se spremaju podaci poslani sa MSP430 - dummy
rsostar 0:26c38aa08a35 11 char ispis(int x); //funkcija prima int broj i vraća hex vrijedost koja se salje u MSP430 kako bi se prikazao određeni broj
rsostar 0:26c38aa08a35 12 char temp_broj;
rsostar 0:26c38aa08a35 13 int broj_int=0;
rsostar 0:26c38aa08a35 14 char mod_temp;
rsostar 0:26c38aa08a35 15 void msp430_write(int); //ispis pojedinacne znamenke na 7-seg display preko i2c veze
rsostar 0:26c38aa08a35 16 void count(); //brojanje od 0-99
rsostar 0:26c38aa08a35 17 int upute=1;
rsostar 0:26c38aa08a35 18 DigitalOut reset(p30); //reset msp430 nakon svake znamenke
rsostar 0:26c38aa08a35 19 DigitalOut led(p10); //ledica blinka nakon ispisa nove znamenke
rsostar 0:26c38aa08a35 20 Ticker timer;
rsostar 0:26c38aa08a35 21 void random(); //generiranje slucajnog broja u rasponu 0-99
rsostar 0:26c38aa08a35 22 int main()
rsostar 0:26c38aa08a35 23 {
rsostar 0:26c38aa08a35 24 while(1) {
rsostar 0:26c38aa08a35 25 if(upute<2) {
rsostar 0:26c38aa08a35 26 pc.printf("Unesi mod rada \r\n");
rsostar 0:26c38aa08a35 27 pc.printf("Za brojanje od 0 do 99 unesi slovo 's' \r\n");
rsostar 0:26c38aa08a35 28 pc.printf("Za ispis random broja unesi slovo 'r' \r\n");
rsostar 0:26c38aa08a35 29 upute++;
rsostar 0:26c38aa08a35 30 reset=1;
rsostar 0:26c38aa08a35 31 }
rsostar 0:26c38aa08a35 32
rsostar 0:26c38aa08a35 33 if(pc.readable()) { //ako postoji podatak na i2c sabirnici
rsostar 0:26c38aa08a35 34 mod_temp =pc.getc();} //spremi slovo u varijablu mod_temp
rsostar 0:26c38aa08a35 35
rsostar 0:26c38aa08a35 36 switch (mod_temp) {
rsostar 0:26c38aa08a35 37 case 's': // slovo s pokreni brojanje 0-99
rsostar 0:26c38aa08a35 38 timer.attach(&count,1); //pokreni ticker-timer u intervalu 1 sekunde,poziva funkciju count svake sekunde
rsostar 0:26c38aa08a35 39 break;
rsostar 0:26c38aa08a35 40
rsostar 0:26c38aa08a35 41 case 'r': //slovo r ispis random broja
rsostar 0:26c38aa08a35 42 timer.detach();
rsostar 0:26c38aa08a35 43 random();
rsostar 0:26c38aa08a35 44 break;
rsostar 0:26c38aa08a35 45
rsostar 0:26c38aa08a35 46 default:
rsostar 0:26c38aa08a35 47
rsostar 0:26c38aa08a35 48 }
rsostar 0:26c38aa08a35 49
rsostar 0:26c38aa08a35 50 }
rsostar 0:26c38aa08a35 51 }
rsostar 0:26c38aa08a35 52
rsostar 0:26c38aa08a35 53 void random ()
rsostar 0:26c38aa08a35 54 {
rsostar 0:26c38aa08a35 55 int rand_num=rand()%100;
rsostar 0:26c38aa08a35 56 msp430_write(rand_num);
rsostar 0:26c38aa08a35 57 }
rsostar 0:26c38aa08a35 58
rsostar 0:26c38aa08a35 59 void count()
rsostar 0:26c38aa08a35 60 {
rsostar 0:26c38aa08a35 61 led=1;
rsostar 0:26c38aa08a35 62 if(broj_int<99) broj_int++;
rsostar 0:26c38aa08a35 63 else broj_int=0;
rsostar 0:26c38aa08a35 64 msp430_write(broj_int);
rsostar 0:26c38aa08a35 65 led=0;
rsostar 0:26c38aa08a35 66 }
rsostar 0:26c38aa08a35 67
rsostar 0:26c38aa08a35 68 void msp430_write(int x)
rsostar 0:26c38aa08a35 69 {
rsostar 0:26c38aa08a35 70
rsostar 0:26c38aa08a35 71 int num_jedinica = x/10; //varijabla za pohranu vrijednosti jedinice
rsostar 0:26c38aa08a35 72 int num_desetica = x%10; //varijabla za pohranu vrijednosti desetice
rsostar 0:26c38aa08a35 73 char jedinica = ispis(num_jedinica);
rsostar 0:26c38aa08a35 74 char desetica = ispis(num_desetica);
rsostar 0:26c38aa08a35 75 byte_1[1]=desetica;
rsostar 0:26c38aa08a35 76 byte_2[1]=jedinica;
rsostar 0:26c38aa08a35 77 reset=0;
rsostar 0:26c38aa08a35 78 wait_us(200);
rsostar 0:26c38aa08a35 79 reset=1;
rsostar 0:26c38aa08a35 80 wait_ms(2);
rsostar 0:26c38aa08a35 81 msp430.write(adresa0,byte_1,2);
rsostar 0:26c38aa08a35 82 wait_us(20);
rsostar 0:26c38aa08a35 83 msp430.write(adresa1,byte_2,2);
rsostar 0:26c38aa08a35 84 wait_us(20);
rsostar 0:26c38aa08a35 85 msp430.read(adresa1, temp_read, 2);
rsostar 0:26c38aa08a35 86 wait_us(20);
rsostar 0:26c38aa08a35 87 msp430.read(adresa0, temp_read, 2);
rsostar 0:26c38aa08a35 88 wait_us(20);
rsostar 0:26c38aa08a35 89
rsostar 0:26c38aa08a35 90
rsostar 0:26c38aa08a35 91 }
rsostar 0:26c38aa08a35 92
rsostar 0:26c38aa08a35 93 char ispis(int x)
rsostar 0:26c38aa08a35 94 {
rsostar 0:26c38aa08a35 95 char num;
rsostar 0:26c38aa08a35 96 switch (x) {
rsostar 0:26c38aa08a35 97
rsostar 0:26c38aa08a35 98 case 0:
rsostar 0:26c38aa08a35 99 num=0x3F; // '0'
rsostar 0:26c38aa08a35 100 break;
rsostar 0:26c38aa08a35 101 case 1:
rsostar 0:26c38aa08a35 102 num=0x06; // '1'
rsostar 0:26c38aa08a35 103 break;
rsostar 0:26c38aa08a35 104 case 2:
rsostar 0:26c38aa08a35 105 num=0x5B; // '2
rsostar 0:26c38aa08a35 106 break;
rsostar 0:26c38aa08a35 107 case 3:
rsostar 0:26c38aa08a35 108 num=0x4F; // '3'
rsostar 0:26c38aa08a35 109 break;
rsostar 0:26c38aa08a35 110 case 4:
rsostar 0:26c38aa08a35 111 num=0x66; // '4'
rsostar 0:26c38aa08a35 112 break;
rsostar 0:26c38aa08a35 113 case 5:
rsostar 0:26c38aa08a35 114 num=0x6D; // '5'
rsostar 0:26c38aa08a35 115 break;
rsostar 0:26c38aa08a35 116 case 6:
rsostar 0:26c38aa08a35 117 num=0x7D; // '6'
rsostar 0:26c38aa08a35 118 break;
rsostar 0:26c38aa08a35 119 case 7:
rsostar 0:26c38aa08a35 120 num=0x07; // '7'
rsostar 0:26c38aa08a35 121 break;
rsostar 0:26c38aa08a35 122 case 8:
rsostar 0:26c38aa08a35 123 num=0x7F; // '8'
rsostar 0:26c38aa08a35 124 break;
rsostar 0:26c38aa08a35 125 case 9:
rsostar 0:26c38aa08a35 126 num=0x6F; // '9'
rsostar 0:26c38aa08a35 127 break;
rsostar 0:26c38aa08a35 128 default:
rsostar 0:26c38aa08a35 129 num=0x00;
rsostar 0:26c38aa08a35 130 }
rsostar 0:26c38aa08a35 131 return num;
rsostar 0:26c38aa08a35 132
rsostar 0:26c38aa08a35 133 }
rsostar 0:26c38aa08a35 134