// ******************* // * Datenspeicher 10 * // ******************* // Flüssigkristallanzeige LMK62R125A1 // DS18B20 NR. 13,14,15,16 an 63-10 Adresse 0x18 // E32-868T 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 Funkfernauslesung // | 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 // // Jan + Juni + August 2010 + Juli 2011 Aug + Dez 2021 // ************************************************************************* #include // für MSP430F1611 #include "DS10-gP16-LMK62-SD.h" //#include "DS10-gP11-DS32C35.h" //#include "DS10-gP16-DS18B20-NR1bis18-LP63-11.h" //#include "DS10-gP16-SD_Karte.h" #include unsigned char txbuffer_daten[8],txbuffer[6];; unsigned int k,f,l,i; void pause400(void); void pause1000(void); void blinken_Fehler(void); void UART1_empfangen_senden_einstellen(void); void Timer_einstellen(void); void daten_tx_festlegen(void); void daten_senden(void); void E32_konfiguration_festlegen(void); void E32_konfigurieren(void); void pause6000(void); void pause65000(void); void Blitz_gelb(void); void Blitz_rot(void); void version_anzeigen(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 FKA_einrichten(); version_anzeigen(); UART1_empfangen_senden_einstellen(); P2DIR |= BIT4 + BIT5; // M0 = 2.4, M1=2.5 P2OUT |= BIT4 + BIT5; E32_konfiguration_festlegen(); E32_konfigurieren(); pause6000(); P2OUT &=~BIT4; // M0; M1 =1 P2OUT &=~BIT5; // M0; M1 =1 pause6000(); Timer_einstellen(); _EINT(); // allg. Interrupt-Freigabe for(;;); } void UART1_empfangen_senden_einstellen(void) { P3SEL |= 0xC0; // P3.6 = USART1 TXD ; P3.7 = RXD1 ME2 |= UTXE1; // URXE1 + // Enable USART1 TXD/RXD UCTL1 |= CHAR; // 8-bit character UTCTL1 |= SSEL0; // UCLK = ACLK UBR01 = 0x03; // 32k/9600 - 3.41 UBR11 = 0x00; // UMCTL1 = 0x4A; // Modulation UCTL1 &= ~SWRST; // Initialize USART state machine IE2 |= 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 Gerät 2, TS txbuffer[2] = 0x44; // Adresse unteres Byte Gerät 2, TS txbuffer[3] = 0x1A; // 8N1, UART baut rate:9600 (bps), Übertragungsrate:2,4k (bps) txbuffer[4] = 0x07; // Kanal txbuffer[5] = 0xC7; // "fixed" Übetragungsmodus; TXD und AUX als Ausgang RXD als Eingang; Leistung: 250ms; Leistung:21dBm = 125mW 11 000 111 (Leistung: 1W, 1100 0100 // 11 000 111 = 0xC7 = "fixed" } void E32_konfigurieren(void) { i=0; while (i<6) { TXBUF1 = txbuffer[i]; while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready? pause400(); i++; } } void daten_tx_festlegen(void) { txbuffer_daten[0] = 0x02; // Adresse txbuffer_daten[1] = 0x02; // Adresse txbuffer_daten[2] = 0x09; // kanal txbuffer_daten[3] = 0x56; // 0x56 löst in LP161/Gerät B Antwort aus txbuffer_daten[4] = 0x47; // ohne Bedeutung txbuffer_daten[5] = 0x48; // ohne Bedeutung txbuffer_daten[6] = 0x49; // ohne Bedeutung txbuffer_daten[7] = 0x55; // ohne Bedeutung } void daten_senden(void) { char i; i=0; while (i<8) { P4OUT &= ~BIT0; //LED rot EIN TXBUF1 = txbuffer_daten[i]; while (!(IFG2 & UTXIFG1)); // USART0 TX buffer ready? pause400(); P4OUT |= BIT0; //LED rot AUS i++; } } void pause65000(void) { unsigned int i; for (i=65000;i>0;i--); // warten ca.360ms } void pause400(void) { unsigned int i; for (i=400;i>0;i--); // warten ca.360ms } void pause6000(void) { unsigned int i; for (i=6000;i>0;i--); // warten ca.360ms } void warten100ms(void) { unsigned int i; for (i=12000;i>0;i--); // warten ca.100ms 12000 } void Blitz_gelb(void) // gelb { P4OUT &=~BIT1; // LED EIN warten100ms(); // kurzer Blitz P4OUT |= BIT1; // LED AUS } void Blitz_rot(void) { P4OUT &=~BIT0; // LED EIN warten100ms(); P4OUT |= BIT0; // LED AUS } void version_anzeigen(void) { char z,c; char txt4[16],txt5[16]; Adresse(0x80); sprintf(txt4,"%s","191c a4444 Ka07"); for (z=0; z < 15; z++) { c=txt4[z]; Daten_schreiben(c); } Adresse(0xC0); sprintf(txt5,"%s","se 0202 09 5647"); for (z=0; z < 15; z++) { c=txt5[z]; Daten_schreiben(c); } } 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) { daten_tx_festlegen(); daten_senden(); Blitz_gelb(); } // UART1TX ISR #pragma vector=UART1TX_VECTOR // UART0TX_VECTOR __interrupt void usart1_tx (void) { }