// 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 // UTXD0 |P3.4 P3.1|-> Daten Ausgang (29) // URXD0 |P3.5 P3.2|<- Data In (SOMI0) (30) // UTXD1 |P3.6 P3.3|-> Serial Clock Out (UCLK) (31) // URXD1 |P3.7 // //(35) | P4.0-P4.7| frei (36)..(43) //(44) SD CS |P5.0 P2.7| SD Karte Einsteckkontrolle // SD DI |P5.1 P2.6| Temp 2 EIN/AUS TSiC506 // SD DO |P5.2 P2.5| frei // SD CLK |P5.3 P2.4| Dateneingang 2 TSiC506 //(48) frei |P5.4 P2.3|LED rot // | P2.2|LED gelb (z.Zt. grün) // | P2.1|Taster rechts // | P2.0|Taster Mitte // P6.7| DAC1 Ausgang // P6.6| Steuerung FKA E // P6.5| Steuerung FKA (R/W) auf Masse gelegt // P6.4| Steuerung FKA RS // P6.3| ADW Kanal 1 // P6.2| ADW Kanal 2 // P6.1| Akkuspannung // P6.0| ADW Kanal 3 // // Flüssigkristallanzeige LMK62R125A1 // 1---Vss Masse 5---R/W // 2---VDD +5V 6---E // 3---Vo Kontrast 7---DB0 // 4---RS 14---DB7 // ************************************************************************* #include // für Zeichen (Infotext) notwendig #include // für sprintf #define E_H P6OUT |= BIT6; #define E_L P6OUT &= ~BIT6; #define RW_H P6OUT |= BIT5; #define RW_L P6OUT &= ~BIT5; #define RS_H P6OUT |= BIT4; #define RS_L P6OUT &= ~BIT4; void Textausgeben(void); void Pause1000(void); void Daten_schreiben(unsigned char d); void FKA_einrichten(void); void Pause(void); void Adresse(unsigned int d); void loeschenFKA(void); void Wert1_ausgeben(void); void wert2_ausgeben(unsigned int Kanal); void eine_stelle(unsigned char eins); void zwei_stellen(unsigned char zwei); void drei_stellen(unsigned int drei); void vier_stellen(unsigned int vier); void Kartenfehler(void); void ausgabe_restsektor(void); void ausgabe_temp2(void); /*void temp_01_anzeigen(void); void temp_05_anzeigen(void); void temp_06_anzeigen(void); void temp_07_anzeigen(void); void temp_08_anzeigen(void); void temp_09_anzeigen(void); void temp_10_anzeigen(void); void temp_11_anzeigen(void); void temp_12_anzeigen(void);*/ void temp_13_anzeigen(void); void temp_14_anzeigen(void); void temp_15_anzeigen(void); void temp_16_anzeigen(void); //void temp_17_anzeigen(void); //void temp_18_anzeigen(void); void akku_anzeigen(void); //Akkuspannung void ausgabe_ds18B20(void); void wertuL_ausgeben(unsigned long werty); void Wert3_ausgeben(void); void Text_Anfang(void); void Karte_fehlt(void); void Version (void); void Start_eingeleitet(void); void Restzeit(void); unsigned int t,wert1,akkuspannung; unsigned char t01nk,t01vk,t02nk,t02vk,t05nk,t05vk,t06vk,t06nk,t07vk,t07nk,t08vk,t08nk,t09vk,t09nk,t10vk,t10nk,t11vk,t11nk,TempUB_M1; unsigned char t12vk,t12nk,t13vk,t13nk,t14vk,t14nk,t15vk,t15nk,t16vk,t16nk,TempUB_M1; void loeschenFKA(void) { P6OUT = 0x40; // RS+E =H H L L RS=L für Befehlsregister P1OUT = 1; //IO1....IO8 = 1 löscht Anzeige P6OUT = 0x00; // E =L L L L Pause1000(); } void RAM_zurueck(void) { P6OUT = 0x40; // RS+E =H H L L RS=L für Befehlsregister P1OUT = 0x02; // 0000 001x P6OUT = 0x00; // E =L L L L Pause1000(); } void FKA_einrichten(void) // 6.7 6.6 6.5 6.4 { // E RW RS P6DIR = 0x70; // 01110000 P1DIR = 0xFF; P6OUT = 0x40; // x H L L Grundstellung; E = L Datenübernahme E=H Daten können gelesen werden // RS=L Befehlsregister RS=H Datenregister // R/W = L schreiben R/W = H lesen P6OUT = 0x40; // E =L H L L P1OUT = 0x38; // 0011 1000 Funktion setzen ( 8 bit Eingang, 2 zeilig, 5x8 Punkte ) P6OUT = 0x00; // E =H L L L Pause1000 (); P6OUT = 0x40; // E =H H L L P1OUT = 0x06; // 0000 0110 IO1....IO8 = Eingang setzen I/D=1; S=0 P1OUT = 0x00; // E =L L L L Pause1000 (); P6OUT = 0x40; // E =H H L L P1OUT = 0x0E; //0000 1110 = 0x0E DB0=0=blinkt nicht ; cursor aus DB1=0 Cursor EIN DB1 =1 P6OUT = 0x00; // E =L L L L Pause1000(); P6OUT = 0x40; // RS+E =H H L L RS=L für Befehlsregister P1OUT = 1; //IO1....IO8 = 1 löscht Anzeige P6OUT = 0x00; // E =L L L L Pause1000(); } void Pause1000(void) { unsigned int i; for (i=1000;i>0;i--); // warten } void Daten_schreiben(unsigned char d)// Daten ins Datenregister der Anzeige schreiben { // 6.7 6.6 6.5 6.4 P6OUT = 0x50; // RS+E =H x H L H RS=H für Datenregister E_H; // E = P6.6 = H P1OUT=d; E_L; Pause1000(); } void Karte_fehlt(void) { char z,c; char txt2[11]; loeschenFKA(); Adresse(0x80); sprintf(txt2,"%s","Karte fehlt"); // m=strlen(txt2); //Länge eines string ermitteln for (z=0; z <11; z++) { c=txt2[z]; Daten_schreiben(c); } } void Kartenfehler(void) { char z,c; char txt2[11]; loeschenFKA(); Adresse(0x80); sprintf(txt2,"%s","Kartenfehler"); // m=strlen(txt2); //Länge eines string ermitteln for (z=0; z <12; z++) { c=txt2[z]; Daten_schreiben(c); } } void vier_stellen(unsigned int vier) { char z; char txt[4]; sprintf(txt,"%#4d",vier ); for (z=0; z<4;z++) { Daten_schreiben(txt[z]); } } void drei_stellen(unsigned int drei) { char z; char txt[3]; sprintf(txt,"%#3d",drei ); for (z=0; z<3;z++) { Daten_schreiben(txt[z]); } } void zwei_stellen(unsigned char zwei) { char z; char txt[1]; // sprintf(txt,"%#2d",zwei ); // 0 wird als Leerzeichen gesetzt // sprintf(txt,"%01d",zwei ); // bei 1 Nachkommastelle sprintf(txt,"%02u",zwei ); //als Nachkommastellen wird 0.06 oder .00 angezeigt sprintf(txt,"%02d",zwei ); Bei tnk mit 0,625 rechnen for (z=0; z<2;z++) // for (z=0; z<2;z++) { Daten_schreiben(txt[z]); } } void eine_stelle(unsigned char eins) { char z; char txt[1]; sprintf(txt,"%#1d",eins ); for (z=0; z<1;z++) { Daten_schreiben(txt[z]); } } void Adresse(unsigned int d) { P6OUT = 0x40; // RS+E =H H L L RS=L für Befehlsregister P1OUT = d; // 1000 1010 IO1....IO8 = setzt DDRAM-Adresse hier Adresse 11=1010 0x89 siehe auch Datenblatt P6OUT = 0x00; // E =L L L L Pause1000(); } void akku_anzeigen(void) //Akkuspannung { char z,c; char txt3[6]; // akkuspannung = ADC12MEM1*1.49; //P6.1 = Akkuspannung akkuspannung = ADC12MEM1; //P6.1 = Akkuspannung Adresse(0x80); sprintf(txt3,"%6s","Akku: "); for (z=0; z < 6; z++) { c=txt3[z]; Daten_schreiben(c); } vier_stellen(akkuspannung); Daten_schreiben('m'); Daten_schreiben('V'); } void ausgabe_restsektor(void) { Adresse (0xCD); //2x64 Speicherplätze drei_stellen(512-t ); } /* void temp_01_anzeigen(void) { Adresse(0x80); drei_stellen(t01vk); //Daten_schreiben('.'); //zwei_stellen(t01nk); } void temp_02_anzeigen(void) { Adresse(0x83); drei_stellen(t02vk); //Daten_schreiben('.'); //zwei_stellen(t05nk); } void temp_05_anzeigen(void) { Adresse(0x86); drei_stellen(t05vk); //Daten_schreiben('.'); //zwei_stellen(t06nk); } void temp_06_anzeigen(void) { Adresse(0x89); drei_stellen(t06vk); Daten_schreiben('.'); eine_stelle(t06nk); } void temp_07_anzeigen(void) { Adresse(0xC0); drei_stellen(t07vk); //Daten_schreiben('.'); //zwei_stellen(t08nk); } void temp_08_anzeigen(void) { Adresse(0xC3); drei_stellen(t08vk); //Daten_schreiben('.'); //zwei_stellen(t09nk); } void temp_09_anzeigen(void) { Adresse(0xC6); drei_stellen(t09vk); //Daten_schreiben('.'); //zwei_stellen(t10nk); } void temp_10_anzeigen(void) { Adresse(0xC9); drei_stellen(t10vk); //Daten_schreiben('.'); //zwei_stellen(t11nk); } void temp_11_anzeigen(void) { Adresse(0xC9); drei_stellen(t11vk); //Daten_schreiben('.'); //zwei_stellen(t11nk); } void temp_12_anzeigen(void) { Adresse(0xC9); drei_stellen(t12vk); //Daten_schreiben('.'); //zwei_stellen(t11nk); }*/ void temp_13_anzeigen(void) { Adresse(0x80); drei_stellen(t13vk); Daten_schreiben('.'); zwei_stellen(t13nk); } void temp_14_anzeigen(void) { Adresse(0x86); drei_stellen(t14vk); Daten_schreiben('.'); zwei_stellen(t14nk); } void temp_15_anzeigen(void) { Adresse(0xC0); drei_stellen(t15vk); Daten_schreiben('.'); zwei_stellen(t15nk); } void temp_16_anzeigen(void) { Adresse(0xC6); drei_stellen(t16vk); Daten_schreiben('.'); zwei_stellen(t16nk); } void wertuL_ausgeben(unsigned long werty) { char z,c; char txt[8]; sprintf(txt,"%08lu",werty); // u für vorzeichenlose ganze Dezimalzahl,%010Lu",wert3 for (z=0; z<8;z++) { c=txt[z]; Daten_schreiben(c); } }