// vi:set ts=4: // ******************** // *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; // char i,D1,D2,D3,D4,D5,D6,D7,D8,D9; int D[10]; unsigned int daten1, daten2; char txbuffer[6]; // ----------------------------------------------------- void dd_ausgeben(int dd, int pos) { char vers[5], z, c; lcd_write_command(LCD_CMD_CURSOR_LA, pos); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA, 0); sprintf(vers,"%02X", dd); for (z = 0; z < 2; z++) { c = vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } void datenrx_ausgeben(int dd, int pos) { char vers[7], z, c; lcd_write_command(LCD_CMD_CURSOR_LA, pos); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA, 0); sprintf(vers,"%05u", dd); for (z = 0; z < 5; z++) { c = vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } void temp_ausgeben_ausgeben(int dd, int pos) { char vers[6], z, c; float mw; mw = dd/16.0; // .0 muss angehängt werden, damit Nachkommazahlen erzeugt werden lcd_write_command(LCD_CMD_CURSOR_LA, pos); //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile lcd_write_command(LCD_CMD_CURSOR_HA, 0); sprintf(vers, "%05.2f", mw); for (z = 0; z < 5; z++) { c = vers[z]; lcd_write_command(LCD_CMD_WRITE_DATA, c); } } void E32_konfigurieren(void) { int i = 0; while (i<6) { TXBUF1 = txbuffer[i]; while (!(IFG2 & UTXIFG1)) { ; } // USART1 TX buffer ready? pause400(); //@@@ i++; } } 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 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 } // ----------------------------------------------------- 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) { D[1] = RXBUF1; while (!(IFG2 & URXIFG1)) { ; } D[2] = RXBUF1; while (!(IFG2 & URXIFG1)) { ; } D[3] = RXBUF1; while (!(IFG2 & URXIFG1)) { ; } D[4] = RXBUF1; while (!(IFG2 & URXIFG1)) { ; } D[5] = RXBUF1; while (!(IFG2 & URXIFG1)) { ; } D[6] = RXBUF1; while (!(IFG2 & URXIFG1)) { ; } D[7] = RXBUF1; while (!(IFG2 & URXIFG1)) { ; } D[8] = RXBUF1; P5OUT &= ~BIT7; //LED rot EIN daten1 = (D[2] << 8) | D[3]; daten2 = (D[4] << 8) | D[5]; //daten3 = (D[6] << 8) | D[7]; dd_ausgeben(D[1], 106); dd_ausgeben(D[2], 109); dd_ausgeben(D[3], 112); dd_ausgeben(D[4], 115); dd_ausgeben(D[5], 118); dd_ausgeben(D[6], 121); dd_ausgeben(D[7], 124); datenrx_ausgeben(daten1, 157); datenrx_ausgeben(daten2, 167); temp_ausgeben_ausgeben(daten1, 183); P5OUT |= BIT7; //LED rot AUS } } // -eof-