// ******************* // * Datenspeicher 10 * // ******************* // Flüssigkristallanzeige LMK62R125A1 // DS18B20 NR. 13,14,15,16 an 63-10 Adresse 0x18 // E32-868TD Funk ab 29.8.21 //Änderungen: /************************************************************************/ // MSP430F1611 // ----------------- // | XIN|- 32,768kHz // | | | // Taster rot--|RST (58) XOUT|- 32,768kHz //8 MHz X2OUT- | P1.0..P1.7|Daten FKA LMK62 // 8 Mhz X2IN- | | // | P3.0| frei (28) Stecker umbauen // UTXD0 |P3.4 P3.1|-> Daten Ausgang (SIMO0) (29) // URXD0 |P3.5 P3.2|<- Data In (SOMI0) (30) // UTXD1 |P3.6 P3.3|-> Serial Clock Out (UCLK) (31) // URXD1 |P3.7 // //(48) Lötauge |P5.4 P4.0|LED rot // | P4.1|LED gelb // | P4.2|kein Anschluss // | P4.3|kein Anschluss //(44) SD CS |P5.0 P2.7| SD Karte Einsteckkontrolle // SD DI |P5.1 P2.6| frei Temp 2 EIN/AUS TSiC506 // SD DO |P5.2 P2.5| frei M1 // SD CLK |P5.3 P2.4| frei M0 // | P2.1|Taster rechts neu: Taster Startkennzahl // | P2.0|Taster Mitte // P6.7| DCA1 Ausgang Platz 1 // P6.6| Steuerung FKA E // P6.5| Steuerung FKA (R/W) auf Masse gelegt // P6.4| Steuerung FKA RS // P6.3| ADW Kanal 2 // P6.2| ADW Kanal 3 // P6.1| Akkuspannung // P6.0| ADW Kanal 4 rechts // Flüssigkristallanzeige LMK62R125A1 // 1---Vss Masse 5---R/W // 2---VDD +5V 6---E // 3---Vo Kontrast 7---DB0 // 4---RS 14---DB7 // // Wolfgang Gröbel // Halle Jan + Juni +August 2010 + Juli 2011 Aug+Dez 2021 // ************************************************************************* #include // für MSP430F1611 #include "DS10-iar-0206-SD_MAINTI.c" #include "DS10-iar-LMK62-SD.h" #include "DS10-iar-DS32C35.h" //#include "DS10-iar_DS18B20_Nr29_30_31_32_33_34.h" #include "DS10-iar-0206-SD_karte.h" #include #include // für Zeichen (Infotext) notwendig #include // für sprint unsigned char txbuffer_daten[8],konfig[6]; unsigned char rx_daten[512],daten1,daten2,daten3,daten4; unsigned int k,f,l,sektor=531; //für Karte Nr19 PLATINUM: = 528 unsigned int t,k,temp32; unsigned char txbuffer[6],D1,D2,D3,D4,D5,buffer[512]; void UART0_empfangen_senden_einstellen(void); void Timer_einstellen(void); void daten_tx_festlegen(void); void E32_konfiguration_festlegen(void); void E32_konfigurieren(void); void Blitz_gelb(void); void Blitz_rot(void); void version_anzeigen(void); void db_ausgeben(unsigned int drei); void SD_auslesen_und_daten_senden(void); void daa_ausgeben(void); void sektor_anzeigen(unsigned int drei); void XT2_EIN (void); void XT2_AUS (void); void starten1(void); void empfaengeradresse_festlegen(void); void pause400(void); void wert_an_E32(void); int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P4DIR |= BIT0 + BIT1; // für LED P4.0 + P4.1 P4OUT |= BIT0 + BIT1; // LED AUS P2IE |= 0x03; // an P2.0, P2.1 Interruptfreigabe P2IES |= 0x03; // auf H/L Flanke ??? an P2.0, P2.1 FKA_einrichten(); version_anzeigen(); UART0_empfangen_senden_einstellen(); P2DIR |= BIT4 + BIT5; // M0 = 2.4, M1=2.5 P2OUT |= BIT4 + BIT5; E32_konfiguration_festlegen(); E32_konfigurieren(); __delay_cycles(60000); P2OUT &=~BIT4; // M0; M1 =1 P2OUT &=~BIT5; // M0; M1 =1 __delay_cycles(60000); starten1(); _EINT(); // allg. Interrupt-Freigabe while(1) { D1 = RXBUF0; while (!(IFG1 & URXIFG0)); //IFG1 für UART0 if (D1==0x56){ Blitz_gelb(); SD_auslesen_und_daten_senden(); } } } void XT2_EIN (void) { unsigned int i; BCSCTL1 &= ~XT2OFF; // XT2 an do { // 8 MHz-oszillator stabil ? IFG1 &= ~OFIFG; // OSCFault flag loeschen for (i=0xFF;i>0;i--); // warten } while (IFG1 & OFIFG); // OSCFault wieder gesetzt? BCSCTL2 |= SELM_2 + SELS; // MCLK = SMCLK = XT2 } void XT2_AUS (void) { BCSCTL1 |= XT2OFF; // XT2 AUS BCSCTL2 &=~(SELM_2 + SELS); // MCLK = SMCLK = wieder XT1 } void UART0_empfangen_senden_einstellen(void) { P3SEL |= 0x30; // P3.4 = UARTX0 TXD ; P3.5 = RXD0 ME1 |= URXE0 + UTXE0; // Enable USART0 TXD/RXD UCTL0 |= CHAR; // 8-bit character UTCTL0 |= SSEL0; // UCLK = ACLK UBR00 = 0x03; // 32k/9600 - 3.41 UBR10 = 0x00; // UMCTL0 = 0x4A; // Modulation UCTL0 &= ~SWRST; // Initialize USART state machine // IE1 |= URXIE1 + UTXIE1; // URXIE1 + // Enable USART1 TX interrupt } void E32_konfiguration_festlegen(void) { txbuffer[0] = 0xC0; // sichert die Parameter nach Stromausfall txbuffer[1] = 0x44; // Adresse oberes Byte G3 LP161 txbuffer[2] = 0x44; // Adresse unteres Byte G3 txbuffer[3] = 0x1A; // 8N1, UART baut rate:9600 (bps), Übertragungsrate:2,4k (bps) txbuffer[4] = 0x09; // Kanal 9 txbuffer[5] = 0xC7; // OPTION "transparenter"?? Übetragungsmodus; TXD und AUX als Ausgang RXD als Eingang; 250ms; Leistung:21dBm = 125mW 01 000 111 } //0x47 --> 24dB = 125mW 01 000 111 oder 0100 0111, Empfänger //0x44 --> 30dB = 1W 01 000 100 oder 0100 0100, Sender //0xC7 --> 24dB = 125mW 11 000 111 oder 0100 0111, Empfänger/Sender = Gerät NR 1 } void E32_konfigurieren(void) { i=0; while (i<6) { TXBUF0 = txbuffer[i]; while (!(IFG1 & UTXIFG0)); // USART1 TX buffer ready? pause400(); i++; } } void SD_auslesen_und_daten_senden(void) { unsigned int j,n; for ( n=0; n<1; n++ ) //Anzahl der Sektoren { for ( j=0; j<512; j++ ) //auszulesende Bytes pro Sektor { XT2_EIN (); rx_daten[j] = mmcReadSector(sektor, buffer); } XT2_AUS (); loeschenFKA(); sektor_anzeigen(sektor); sektor = sektor+1; wert_an_E32(); } } void wert_an_E32(void) { unsigned int i; unsigned char v; empfaengeradresse_festlegen(); i=0,v=0; while (v < 3) // [0] bis [2] empfängeradresse,kanal { P4OUT &= ~BIT0; //LED rot EIN TXBUF0 = txbuffer_daten[v]; // empfängeradresse while (!(IFG1 & UTXIFG0)); // USART0 TX buffer ready? v++; } while (i < 512) //Anzahl der zu sendenden Bytes { TXBUF0 = buffer[i]; while (!(IFG1 & UTXIFG0)); // USART0 TX buffer ready? P4OUT |= BIT0; //LED rot AUS i++; } } void pause400(void) { unsigned int i; for (i=400;i>0;i--); // warten ca.360ms } void empfaengeradresse_festlegen(void) { txbuffer_daten[0] = 0x02; // Adresse txbuffer_daten[1] = 0x02; // Adresse txbuffer_daten[2] = 0x09; // kanal 09 } void Blitz_gelb(void) // gelb { P4OUT &=~BIT1; // LED EIN gelb __delay_cycles(400000); // kurzer Blitz P4OUT |= BIT1; // LED AUS } void starten1(void) { P4OUT |= BIT0; // LED rot P4.0 AUS P4OUT |= BIT1; // LED gelb P4.1 AUS SD_Beginn(); __delay_cycles(10000); } void version_anzeigen(void) { char z,c; char txt4[16],txt5[16]; Adresse(0x80); sprintf(txt4,"%s","0217 SD lesen "); for (z=0; z < 15; z++) { c=txt4[z]; Daten_schreiben(c); } Adresse(0xC0); sprintf(txt5,"%s","antw TS0202 dat"); for (z=0; z < 15; z++) { c=txt5[z]; Daten_schreiben(c); } } void sektor_anzeigen(unsigned int sektor) { char z; char txt[6]; Adresse(0xCA); sprintf(txt,"%#05d",sektor ); for (z=0; z<5;z++) { Daten_schreiben(txt[z]); } } void Timer_einstellen(void) { unsigned int Zeit,ZeitOB,ZeitUB; ZeitOB=0x7f; // Oberes Byte für Timer einstellen BFFD-->1,5s 3FFF-->0,5s 7FFF-->1s FFFF-->2s ZeitUB=0xff; // Unteres Byte für Timer einstellen 00FF--> 7,8 5ms 0148-->0,010009s TACTL = TASSEL0 + TACLR;// + ID_1; // TASSEL0 = Takteingang für ACLK(32,7kHz), TACLR--löscht Timer Vorteiler = 2 TACTL |= MC0; // Timer zählt bis CCRO TACCTL0 = CCIE; // Interruptfreigabe Zeit =(ZeitOB << 8)|ZeitUB; // Zusammensetzen OB und UB TACCR0 =Zeit; // Taktzeit: 0,5s 16383 0x3FFF; 1s 0x7FFF = 32767 } // Timer A0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) { Blitz_gelb(); } //interrupt (PORT2_VECTOR)Taste (void) // nicht vergessen: #include #pragma vector=PORT2_VECTOR __interrupt void Taste (void) { if ((P2IFG&BIT1) == BIT1) // { //P4OUT &=~BIT1; // LED gelb EIN als Kontrolle P3OUT |= BIT5; // P4OUT |=BIT1; // LED AUS als Kontrolle P2IFG&=~BIT1; } }