Mikroupravljači- Programski zadatak 4 Šoštar, Koritić, Pervan
Dependencies: mbed
main.cpp@0:26c38aa08a35, 2016-12-06 (annotated)
- 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?
User | Revision | Line number | New 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 |