0217b-DS10-SD-sektor_auslesen-als_antwort_senden.c


1
//          *******************
2
//           * Datenspeicher 10 *
3
//           *******************
4
//      Flüssigkristallanzeige LMK62R125A1 
5
//      DS18B20 NR.  13,14,15,16 an 63-10 Adresse 0x18 
6
//      E32-868TD Funk ab 29.8.21
7
//Änderungen:
8
9
                                                                
10
/************************************************************************/
11
12
//                 MSP430F1611
13
//              -----------------
14
//              |              XIN|- 32,768kHz
15
//            | |                 |
16
//  Taster rot--|RST (58)     XOUT|- 32,768kHz
17
18
//8  MHz X2OUT- |       P1.0..P1.7|Daten FKA LMK62
19
// 8  Mhz X2IN- |                 |
20
//              |             P3.0|   frei      (28) Stecker umbauen
21
//       UTXD0  |P3.4         P3.1|-> Daten Ausgang (SIMO0)              (29)
22
//       URXD0  |P3.5         P3.2|<- Data In  (SOMI0)            (30)
23
//       UTXD1  |P3.6         P3.3|-> Serial Clock Out (UCLK)     (31)
24
//       URXD1  |P3.7
25
//
26
//(48)  Lötauge |P5.4         P4.0|LED rot
27
//              |             P4.1|LED gelb 
28
//              |             P4.2|kein Anschluss
29
//              |             P4.3|kein Anschluss
30
//(44)  SD CS   |P5.0         P2.7| SD Karte Einsteckkontrolle
31
//      SD DI   |P5.1         P2.6| frei Temp 2 EIN/AUS  TSiC506
32
//      SD DO   |P5.2         P2.5| frei M1
33
//      SD CLK  |P5.3         P2.4| frei M0
34
//     |             P2.1|Taster rechts  neu: Taster Startkennzahl
35
//              |             P2.0|Taster Mitte 
36
//                            P6.7| DCA1 Ausgang Platz 1
37
//                            P6.6| Steuerung FKA E
38
//                            P6.5| Steuerung FKA (R/W) auf Masse gelegt
39
//                            P6.4| Steuerung FKA RS
40
//                            P6.3| ADW Kanal 2 
41
//                            P6.2| ADW Kanal 3
42
//                            P6.1| Akkuspannung
43
//                            P6.0| ADW Kanal 4 rechts
44
45
//   Flüssigkristallanzeige LMK62R125A1 
46
//   1---Vss Masse                5---R/W
47
//   2---VDD  +5V                 6---E
48
//   3---Vo   Kontrast            7---DB0
49
//   4---RS                      14---DB7
50
//
51
//   Wolfgang Gröbel
52
53
// Halle  Jan + Juni +August  2010   + Juli 2011 Aug+Dez 2021
54
//  *************************************************************************
55
56
57
#include <MSP430x16x.h>                   // für MSP430F1611
58
#include "DS10-iar-0206-SD_MAINTI.c"
59
#include "DS10-iar-LMK62-SD.h"
60
#include "DS10-iar-DS32C35.h"
61
//#include "DS10-iar_DS18B20_Nr29_30_31_32_33_34.h"
62
#include "DS10-iar-0206-SD_karte.h"
63
64
#include <signal.h> 
65
#include <string.h>            // für Zeichen (Infotext) notwendig
66
#include <stdio.h>             // für sprint
67
68
unsigned char txbuffer_daten[8],konfig[6];
69
unsigned char rx_daten[512],daten1,daten2,daten3,daten4;
70
unsigned int k,f,l,sektor=531; 
71
//für Karte Nr19 PLATINUM: = 528
72
unsigned int t,k,temp32; 
73
unsigned char txbuffer[6],D1,D2,D3,D4,D5,buffer[512];
74
75
void UART0_empfangen_senden_einstellen(void);
76
void Timer_einstellen(void);
77
void daten_tx_festlegen(void);
78
void E32_konfiguration_festlegen(void);
79
void E32_konfigurieren(void);
80
void Blitz_gelb(void);
81
void Blitz_rot(void);
82
void version_anzeigen(void);
83
void db_ausgeben(unsigned int drei);
84
void SD_auslesen_und_daten_senden(void);
85
void daa_ausgeben(void);
86
void sektor_anzeigen(unsigned int drei);
87
void XT2_EIN (void);
88
void XT2_AUS (void);
89
void starten1(void);
90
void empfaengeradresse_festlegen(void);
91
void pause400(void);
92
void wert_an_E32(void);
93
94
int main(void)
95
   {
96
    WDTCTL = WDTPW + WDTHOLD;     // Stop watchdog timer
97
    P4DIR |= BIT0 + BIT1;        // für LED   P4.0 + P4.1
98
    P4OUT |= BIT0 + BIT1;         // LED AUS
99
    P2IE  |= 0x03;                // an  P2.0, P2.1 Interruptfreigabe 
100
    P2IES |= 0x03;            // auf H/L Flanke ???     an P2.0, P2.1 
101
    FKA_einrichten();
102
    version_anzeigen();
103
    UART0_empfangen_senden_einstellen();
104
    P2DIR |= BIT4 + BIT5;         // M0 = 2.4, M1=2.5
105
    P2OUT |= BIT4 + BIT5;
106
    E32_konfiguration_festlegen();
107
    E32_konfigurieren();
108
    __delay_cycles(60000);
109
    P2OUT &=~BIT4;    // M0; M1 =1
110
    P2OUT &=~BIT5;    // M0; M1 =1
111
    __delay_cycles(60000);
112
    starten1();
113
    _EINT();    // allg. Interrupt-Freigabe 
114
   while(1)
115
    {
116
    D1 = RXBUF0;
117
    while (!(IFG1 & URXIFG0)); //IFG1 für UART0
118
    if (D1==0x56){
119
      Blitz_gelb();
120
     SD_auslesen_und_daten_senden();   
121
   
122
   }
123
   }
124
   }
125
  
126
void XT2_EIN (void)
127
{
128
  unsigned int i;
129
  BCSCTL1 &= ~XT2OFF;                    // XT2 an
130
   do
131
    {                                    // 8 MHz-oszillator stabil ?
132
    IFG1 &= ~OFIFG;                      // OSCFault flag loeschen
133
   for (i=0xFF;i>0;i--);                 // warten
134
    }
135
   while (IFG1 & OFIFG);                 // OSCFault wieder gesetzt?
136
    BCSCTL2 |= SELM_2 + SELS;            // MCLK = SMCLK = XT2
137
}
138
139
void XT2_AUS (void)
140
{
141
   BCSCTL1 |= XT2OFF;           // XT2 AUS
142
   BCSCTL2 &=~(SELM_2 + SELS);  // MCLK = SMCLK = wieder XT1
143
} 
144
void UART0_empfangen_senden_einstellen(void)
145
 {
146
  P3SEL  |= 0x30;                        // P3.4 = UARTX0 TXD ; P3.5 = RXD0
147
  ME1    |= URXE0 + UTXE0;            // Enable USART0 TXD/RXD  
148
  UCTL0  |= CHAR;                        // 8-bit character
149
  UTCTL0 |= SSEL0;                       // UCLK = ACLK
150
  UBR00   = 0x03;                        // 32k/9600 - 3.41
151
  UBR10   = 0x00;                        //
152
  UMCTL0  = 0x4A;                        // Modulation
153
  UCTL0  &= ~SWRST;                      // Initialize USART state machine
154
 // IE1   |= URXIE1 + UTXIE1;   //  URXIE1 +      // Enable USART1 TX interrupt 
155
  } 
156
157
void E32_konfiguration_festlegen(void)
158
{ 
159
  txbuffer[0] =  0xC0; // sichert die Parameter nach Stromausfall
160
  txbuffer[1] =  0x44; // Adresse oberes Byte   G3 LP161
161
  txbuffer[2] =  0x44; // Adresse unteres Byte  G3
162
  txbuffer[3] =  0x1A; // 8N1, UART baut rate:9600 (bps), Übertragungsrate:2,4k (bps)
163
  txbuffer[4] =  0x09; // Kanal 9
164
        txbuffer[5] =  0xC7; // OPTION  "transparenter"?? Übetragungsmodus; TXD und AUX als Ausgang RXD als Eingang;   250ms; Leistung:21dBm = 125mW   01  000  111 }
165
        //0x47  --> 24dB = 125mW  01 000 111 oder 0100 0111, Empfänger
166
        //0x44  --> 30dB = 1W     01 000 100 oder 0100 0100, Sender    
167
        //0xC7  --> 24dB = 125mW  11 000 111 oder 0100 0111, Empfänger/Sender = Gerät NR 1
168
}
169
170
void E32_konfigurieren(void)
171
 {  
172
     i=0;
173
     while (i<6)
174
    {
175
     TXBUF0 = txbuffer[i];
176
     while (!(IFG1 & UTXIFG0));     // USART1 TX buffer ready? 
177
      pause400();
178
     i++;
179
     }
180
 }
181
182
183
void SD_auslesen_und_daten_senden(void)
184
   {
185
    unsigned int j,n;
186
   
187
    for ( n=0; n<1; n++ ) //Anzahl der Sektoren
188
    {
189
   
190
    for ( j=0; j<512; j++ ) //auszulesende Bytes pro Sektor
191
     {
192
     XT2_EIN ();  
193
     rx_daten[j] = mmcReadSector(sektor, buffer);
194
     }
195
      XT2_AUS ();
196
     loeschenFKA();
197
    
198
     sektor_anzeigen(sektor);
199
     sektor = sektor+1;
200
     wert_an_E32();
201
     }
202
     }
203
204
void wert_an_E32(void)
205
    { 
206
     unsigned int i;
207
     unsigned char v;
208
     empfaengeradresse_festlegen();  
209
     i=0,v=0;
210
     while (v < 3)      //  [0] bis [2] empfängeradresse,kanal
211
     {
212
     P4OUT &= ~BIT0;                  //LED rot EIN
213
     TXBUF0 = txbuffer_daten[v];      // empfängeradresse
214
     while (!(IFG1 & UTXIFG0));     // USART0 TX buffer ready? 
215
     v++;
216
     }
217
     while (i < 512)                  //Anzahl der zu sendenden Bytes
218
    {
219
     TXBUF0 = buffer[i];
220
     while (!(IFG1 & UTXIFG0));     // USART0 TX buffer ready? 
221
     P4OUT |= BIT0;                   //LED rot AUS
222
     i++;
223
     }
224
     }
225
 
226
void pause400(void)
227
{
228
unsigned int i;
229
for (i=400;i>0;i--);               // warten ca.360ms
230
}
231
232
void empfaengeradresse_festlegen(void)
233
{    
234
  txbuffer_daten[0] = 0x02;  // Adresse 
235
  txbuffer_daten[1] = 0x02;  // Adresse
236
  txbuffer_daten[2] = 0x09;  // kanal 09
237
  } 
238
239
void Blitz_gelb(void)             // gelb
240
{
241
        P4OUT &=~BIT1;            // LED EIN gelb
242
         __delay_cycles(400000);   // kurzer Blitz
243
        P4OUT |= BIT1;            // LED AUS
244
         }
245
246
void starten1(void)
247
   {
248
    P4OUT |= BIT0;         // LED rot   P4.0 AUS
249
    P4OUT |= BIT1;         // LED gelb  P4.1 AUS
250
    SD_Beginn();
251
     __delay_cycles(10000);
252
    }
253
254
255
256
void version_anzeigen(void)
257
  {
258
   char z,c;
259
   char txt4[16],txt5[16];
260
   Adresse(0x80);
261
   sprintf(txt4,"%s","0217 SD lesen  "); 
262
   for (z=0; z < 15; z++)
263
    {   
264
    c=txt4[z];
265
    Daten_schreiben(c);
266
   }
267
    
268
    Adresse(0xC0);
269
     sprintf(txt5,"%s","antw TS0202 dat"); 
270
     for (z=0; z < 15; z++)
271
    {   
272
     c=txt5[z];
273
     Daten_schreiben(c);
274
     }
275
  }
276
void sektor_anzeigen(unsigned int sektor)
277
{  
278
   char z;
279
   char txt[6];
280
   Adresse(0xCA); 
281
   sprintf(txt,"%#05d",sektor );   
282
   for (z=0; z<5;z++)
283
   { 
284
   Daten_schreiben(txt[z]);
285
   }
286
   }
287
288
void Timer_einstellen(void)
289
{
290
 unsigned int  Zeit,ZeitOB,ZeitUB;
291
     ZeitOB=0x7f;                   // Oberes Byte für Timer einstellen BFFD-->1,5s     3FFF-->0,5s   7FFF-->1s       FFFF-->2s
292
     ZeitUB=0xff;                   // Unteres Byte für Timer einstellen     00FF--> 7,8  5ms 0148-->0,010009s
293
     TACTL = TASSEL0 + TACLR;// + ID_1; // TASSEL0 = Takteingang für ACLK(32,7kHz), TACLR--löscht Timer Vorteiler = 2
294
     TACTL |= MC0;                    // Timer zählt bis CCRO
295
     TACCTL0 = CCIE;                // Interruptfreigabe
296
     Zeit =(ZeitOB << 8)|ZeitUB;     // Zusammensetzen OB und UB
297
     TACCR0 =Zeit;                   // Taktzeit: 0,5s  16383  0x3FFF;   1s   0x7FFF = 32767
298
     
299
}
300
// Timer A0 interrupt service routine
301
#pragma vector=TIMERA0_VECTOR
302
__interrupt void Timer_A (void)
303
304
 {  
305
    Blitz_gelb();
306
  }
307
308
//interrupt (PORT2_VECTOR)Taste (void)  // nicht vergessen: #include <signal.h>
309
#pragma vector=PORT2_VECTOR
310
__interrupt void Taste (void)
311
{  
312
   if ((P2IFG&BIT1) == BIT1)             // 
313
  {
314
  //P4OUT &=~BIT1;                  // LED gelb EIN als Kontrolle
315
        P3OUT |= BIT5;
316
  // P4OUT |=BIT1;                  // LED  AUS als Kontrolle
317
  P2IFG&=~BIT1;
318
         }
319
  }