0168-iar_V03-E32_konfig.c


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
*/