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 | }
|