1 | // MSP430F169
|
2 | // -----------------
|
3 | // /|\| XIN|- 32,768kHz
|
4 | // | | |
|
5 | // Taster blau-|RST (58) XOUT|- 32,768kHz
|
6 | // | P1.7|LED Grün
|
7 | // 6 Mhz X2IN- | P1.6|Taster für Entladung wiederholen rechts
|
8 | // | P1.5|Taster für Start und löschen Mitte
|
9 | //6 MHz X2OUT- | |
|
10 | // | |
|
11 | // LED rot <-|P2.0 |
|
12 | // | P3.0| Ausgang für Relais Schaltausgang
|
13 | //E32<--UTXD0 |P3.4 P3.1|-> Daten Ausgang (29)
|
14 | //E32<--URXD0 |P3.5 P3.2|<- Data In (SOMI0) (30)
|
15 | // |P3.6 P3.3|-> Serial Clock Out (UCLK) (31)
|
16 | //(35) SM CE\ |P3.7 P4.0-P4.7| Daten SM karte (36)..(43)
|
17 | //(44) WE\ |P5.0 P2.7|
|
18 | // ALE |P5.1 P2.6| AUX E32
|
19 | // CLE |P5.2 P2.5| M1 E32
|
20 | // RE\ |P5.3 P2.4| M0 E32
|
21 | //(48) R/B\ |P5.4 P6.7| Batterie
|
22 | // | P6.3| Kanal 1 Spannung
|
23 | // | P6.1| Kanal 2 Schaltspannungseingang
|
24 | // P6.0| Kanal 3
|
25 | // P6.2| Kanal 4
|
26 | // P6.4| Kanal 5
|
27 | // P6.5| Kanal 6
|
28 | // P6.6| Kanal 7
|
29 |
|
30 | // P6.0....P6.6| Analogeingänge
|
31 | // S1b |P5.7 SM-Kartenschalter
|
32 |
|
33 | // Juni 2021
|
34 | //******************************************************************************
|
35 | #include <msp430x16x.h>
|
36 |
|
37 | #include <string.h> // für Zeichen (Infotext) notwendig
|
38 | #include <stdio.h> // für sprint
|
39 | #include <signal.h>
|
40 |
|
41 | void Timer_einstellen(void);
|
42 | void UART_einstellen(void);
|
43 | void werte_feld_fuellen(void);
|
44 | void E32_konfigurieren(void);
|
45 | void konfiguration_senden(void);
|
46 | void wert_senden(void);
|
47 | char i,anfangsmarke=0xAA;
|
48 | unsigned int temp_1,temp_1_UB,temp_1_OB;
|
49 | char txbuffer[6];
|
50 |
|
51 | int main(void)
|
52 | {
|
53 | WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
|
54 | Timer_einstellen();
|
55 | UART_einstellen();
|
56 | P1DIR |= BIT7; //LED grün
|
57 | P2DIR |= BIT4+BIT5; // M0 M1
|
58 | E32_konfigurieren();
|
59 | konfiguration_senden();
|
60 | // wert_senden();
|
61 | for(;;);
|
62 | }
|
63 | void E32_konfigurieren(void)
|
64 | {
|
65 | P2OUT &=~Bit4 + ~BIT5; // M0 und M1 auf Masse
|
66 |
|
67 | txbuffer[0] = ?? HEAD // unteres Byte
|
68 | txbuffer[1] = 0xAB // Adresse oberes Byte
|
69 | txbuffer[2] = 0xCD // Adresse unteres Byte
|
70 | txbuffer[3] = // SPED 8N1, baudrate, datenrate
|
71 | txbuffer[4] = 0x07; //Kanal 7
|
72 | txbuffer[5] = 0x44 // OPTIO Werkseinstellung
|
73 | }
|
74 |
|
75 | void konfiguration_senden(void)
|
76 | {
|
77 | i=0;
|
78 | while (i<6)
|
79 | {
|
80 | TXBUF0 = txbuffer[i];
|
81 | while (!(IFG1 & UTXIFG0)); // USART0 TX buffer ready?
|
82 | i++;
|
83 | }
|
84 | }
|
85 |
|
86 | void UART_einstellen(void)
|
87 | {
|
88 | P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
|
89 | ME1 |= UTXE0;// + URXE0; // Enable USART0 TXD/RXD
|
90 | UCTL0 |= CHAR; // 8-bit character
|
91 | UTCTL0 |= SSEL0; // UCLK = ACLK
|
92 | UBR00 = 0x03; // 32k/9600 - 3.41
|
93 | UBR10 = 0x00; //
|
94 | UMCTL0 = 0x4a; // Modulation
|
95 | UCTL0 &= ~SWRST; // Initialize USART state machine
|
96 | IE1 |= UTXIE0; // Enable USART0 RX/TX interrupt URXIE0 +
|
97 | }
|
98 |
|
99 | void Timer_einstellen(void)
|
100 | {
|
101 | unsigned int Zeit;
|
102 | unsigned int ZeitOB=0x1A,ZeitUB = 0xFF;
|
103 | TACTL = TASSEL0 + TACLR;// +ID_1; // TASSEL0 = Takteingang für ACLK(32,7kHz), TACLR--löscht Timer Vorteiler = 2
|
104 | TACTL |= MC0; // Timer zählt bis CCRO
|
105 | TACCTL0 = CCIE; // Interruptfreigabe
|
106 | Zeit =(ZeitOB << 8)|ZeitUB; // Zusammensetzen OB und UB
|
107 | TACCR0 =Zeit; // Taktzeit: 0,5s 16383 0x3FFF; 1s 0x7FFF = 32767
|
108 | // Zeitfaktor=2; // bei SD-Karte eingetragen, abhängig vom Vorteiler +ID_1 --> Vorteiler durch 2--> Zeitfaktor=2;
|
109 | _EINT(); // allg. Interrupt-Freigabe
|
110 | }
|
111 |
|
112 |
|
113 | // Timer A0 interrupt service routine
|
114 | #pragma vector=TIMERA0_VECTOR
|
115 | __interrupt void Timer_A (void)
|
116 | {
|
117 | P1OUT ^= BIT7; //LED grün
|
118 | temp_1 = 0x1667; // Messwert 1 Beisoiel
|
119 | werte_feld_fuellen();
|
120 | wert_senden();
|
121 | }
|
122 |
|
123 | // UART0 TX ISR
|
124 | #pragma vector=UART0TX_VECTOR
|
125 | __interrupt void usart1_tx (void)
|
126 | {
|
127 | }
|
128 |
|
129 | /*
|
130 | void werte_feld_fuellen(void)
|
131 | {
|
132 | //temp_1_UB = temp_1 & 0xFF;
|
133 | //temp_1_OB = (temp_1 & 0xFF00)>>8;
|
134 | txbuffer[0] = anfangsmarke;
|
135 | txbuffer[1] = temp_1 & 0xFF; // unteres Byte
|
136 | txbuffer[2] = (temp_1 & 0xFF00)>>8; // oberes Byte
|
137 | }
|
138 |
|
139 | void wert_senden(void)
|
140 | {
|
141 | i=0;
|
142 | while (i<3)
|
143 | {
|
144 | TXBUF0 = txbuffer_daten[i];
|
145 | while (!(IFG1 & UTXIFG0)); // USART0 TX buffer ready?
|
146 | i++;
|
147 | }
|
148 | }
|
149 | */
|