// ******************** // *Testschaltung 1611* // ******************** // graph. Flüssigkristallanzeige FKA LC7981 // Uhr DS32C35 // MSP430F1611 // ----------------- // | XIN|- 32,768kHz // | | // Taster rot--|RST (58) XOUT|- 32,768kHz // P5.7|LED rot // | P5.6|LED Grün // 8 Mhz X2IN- | P2.1|Taster // | P2.0|Taster // 8 MHz X2OUT- | P1.0..P1.7|Daten FKA // | | // | P3.0| SPI BL1 (28) // UTXD0 |P3.4 P3.1|-> Daten Ausgang SPI/I²C (29) // URXD0 |P3.5 P3.2|<- Data In (SOMI0) SPI/I²C (30) // grau UTXD1 |P3.6 P3.3|-> Serial Clock Out (SCL) SPI/I²C (31) // rosa URXD1 |P3.7 // | P4.0| M0 E32_868T grün // P4.1| M1 E32_868T // P4.2| AUX E32_868T // P4.3| // | P4.6| // | P4.7| //(44)SD-CS |P5.0 P2.7| SD Karte Einsteckkontrolle // SD-DI |P5.1 P2.6| // SD-DO |P5.2 P2.5| RST RV1805 // SD-CLK |P5.3 P2.4| // nCSB ADS1293 |P5.4 P2.3| // |P5.5 P2.2| // grün |P5.6 P6.7| // rot |P5.7 P6.6| Steuerung FKA RS // P6.5| Steuerung FKA R/W // P6.3| Steuerung FKA E // Juni 2021 //****************************************************************************** #include #include "TS_LC7981_b.h" #include // für Zeichen (Infotext) notwendig #include // für sprint #include unsigned int t,k; void programmversion(void); void UART1_einstellen(void); void E32_konfiguration_festlegen(void); void E32_konfigurieren(void); void pause400(void); void datenrx1_ausgeben(void); void datenrx2_ausgeben(void); void datenrx3_ausgeben(void); void datenrx4_ausgeben(void); void temp27_ausgeben_ausgeben(void); void temp29_ausgeben_ausgeben(void); void temp30_ausgeben_ausgeben(void); void temp31_ausgeben_ausgeben(void); void D1_ausgeben(void); void D2_ausgeben(void); void D3_ausgeben(void); void D4_ausgeben(void); void D5_ausgeben(void); void D6_ausgeben(void); void D7_ausgeben(void); void D8_ausgeben(void); void D9_ausgeben(void); char i,D1,D2,D3,D4,D5,D6,D7,D8,D9; unsigned int daten1,daten2,daten3,daten4,OB,UB,temp27; char txbuffer[6]; int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P5DIR |= BIT6+ BIT7; // für LED P5.6 + P5.7 P5OUT |= BIT6; // LED grün AUS P2DIR |= BIT0 + BIT1; // Taster 2.0 + Taster 2.1 P4DIR |= BIT0 + BIT1; // M0; M1 P4OUT |= BIT0 + BIT1; // M0 und M1 auf 1 --> E32 konfigurieren P1DIR =0xFF; // FKA text_init(); // in TS_7981.h programmversion(); UART1_einstellen(); E32_konfiguration_festlegen(); E32_konfigurieren(); pause400(); P4OUT &=~BIT0; // M0; M1 =1 --> senden und empfangen P4OUT &=~BIT1; // M0; M1 =1 --> senden und empfangen pause400(); while(1) { D1 = RXBUF1; while (!(IFG2 & URXIFG1)); D2 = RXBUF1; while (!(IFG2 & URXIFG1)); D3 = RXBUF1; while (!(IFG2 & URXIFG1)); D4 = RXBUF1; while (!(IFG2 & URXIFG1)); D5 = RXBUF1; while (!(IFG2 & URXIFG1)); D6 = RXBUF1; while (!(IFG2 & URXIFG1)); D7 = RXBUF1; while (!(IFG2 & URXIFG1)); D8 = RXBUF1; P5OUT &= ~BIT7; //LED rot EIN daten1 = (D2<<8) | D3; daten2 = (D4<<8) | D5; //daten3 = (D6<<8) | D7; D1_ausgeben(); D2_ausgeben(); D3_ausgeben(); D4_ausgeben(); D5_ausgeben(); D6_ausgeben(); D7_ausgeben(); D8_ausgeben(); // D9_ausgeben(); datenrx1_ausgeben(); datenrx2_ausgeben(); //datenrx3_ausgeben(); // datenrx4_ausgeben(); temp27_ausgeben_ausgeben(); // temp29_ausgeben_ausgeben(); // temp30_ausgeben_ausgeben(); // temp31_ausgeben_ausgeben(); P5OUT |= BIT7; //LED rot AUS } } void E32_konfiguration_festlegen(void) { txbuffer[0] = 0xC0; // sichert die Parameter nach Stromausfall txbuffer[1] = 0x03; // Adresse oberes Byte gesendet von Gerät 3, txbuffer[2] = 0x03; // Adresse unteres Byte gesendet von Gerät 3 txbuffer[3] = 0x1A; // 8N1, UART baut rate:9600 (bps), Übertragungsrate:2,4k (bps) txbuffer[4] = 0x09; // Kanal 09 gesendet von von Gerät 3 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 UART1_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 RX interrupt // _BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/ interrupt } void programmversion(void) { char vers[26],z,c; lcd_write_command(LCD_CMD_CURSOR_LA,26); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(vers,"%s","0194a E32 ko/emp DS18B20"); for (z=0; z<25;z++) { c=vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } lcd_write_command(LCD_CMD_CURSOR_LA,52); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(vers,"%s","adr=0x0303,ka=09 "); for (z=0; z<25;z++) { c=vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } void pause400(void) { unsigned int i; for (i=400;i>0;i--); // warten ca.360ms } void D1_ausgeben(void) { char vers[5],z,c; lcd_write_command(LCD_CMD_CURSOR_LA,106); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(vers,"%02X",D1); for (z=0; z<2;z++) { c=vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } void D2_ausgeben(void) { char vers[5],z,c; lcd_write_command(LCD_CMD_CURSOR_LA,109); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(vers,"%02X",D2); for (z=0; z<2;z++) { c=vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } void D3_ausgeben(void) { char vers[5],z,c; lcd_write_command(LCD_CMD_CURSOR_LA,112); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(vers,"%02X",D3); for (z=0; z<2;z++) { c=vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } void D4_ausgeben(void) { char vers[5],z,c; lcd_write_command(LCD_CMD_CURSOR_LA,115); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(vers,"%02X",D4); for (z=0; z<2;z++) { c=vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } void D5_ausgeben(void) { char vers[5],z,c; lcd_write_command(LCD_CMD_CURSOR_LA,118); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(vers,"%02X",D5); for (z=0; z<2;z++) { c=vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } void D6_ausgeben(void) { char vers[5],z,c; lcd_write_command(LCD_CMD_CURSOR_LA,121); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(vers,"%02X",D6); for (z=0; z<2;z++) { c=vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } void D7_ausgeben(void) { char vers[5],z,c; lcd_write_command(LCD_CMD_CURSOR_LA,124); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(vers,"%02X",D7); for (z=0; z<2;z++) { c=vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } void D8_ausgeben(void) { char vers[5],z,c; lcd_write_command(LCD_CMD_CURSOR_LA,127); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(vers,"%02X",D8); for (z=0; z<2;z++) { c=vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } void D9_ausgeben(void) { char vers[5],z,c; lcd_write_command(LCD_CMD_CURSOR_LA,131); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(vers,"%02X",D9); for (z=0; z<2;z++) { c=vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } void datenrx1_ausgeben(void) { char vers[7],z,c; lcd_write_command(LCD_CMD_CURSOR_LA,157); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(vers,"%05u",daten1); for (z=0; z<5;z++) { c=vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } void datenrx2_ausgeben(void) { char vers[7],z,c; lcd_write_command(LCD_CMD_CURSOR_LA,167); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(vers,"%05u",daten2); for (z=0; z<5;z++) { c=vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } void temp27_ausgeben_ausgeben(void) { char vers[6],z,c; float mw27; mw27=daten1/16.0; // .0 muss angehängt werden, damit Nachkommazahlen erzeugt werden lcd_write_command(LCD_CMD_CURSOR_LA,183); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(vers,"%05.2f",mw27); for (z=0; z<5;z++) { c=vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } void temp29_ausgeben_ausgeben(void) { char vers[6],z,c; float mw29; mw29=daten2/16.0; // .0 muss angehängt werden, damit Nachkommazahlen erzeugt werden lcd_write_command(LCD_CMD_CURSOR_LA,190); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(vers,"%05.2f",mw29); for (z=0; z<5;z++) { c=vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } void temp30_ausgeben_ausgeben(void) { char vers[6],z,c; float mw30; mw30=daten3/16.0; // .0 muss angehängt werden, damit Nachkommazahlen erzeugt werden lcd_write_command(LCD_CMD_CURSOR_LA,196); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA,0); sprintf(vers,"%05.2f",mw30); for (z=0; z<5;z++) { c=vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } }