Hallo ich möchte mir eine Steuerung für ein Ätzgerät basteln.
Ich möchte die Laufzeiten der Heizung und die Laufzeiten der Aquariumpumpe einstellen können, wann sie Beginen und wann sie Stoppen, dazu Wil ich die Temperatur einstellen und einen schwel wert für die Heizung einstellen können, weil die ja eine Wärme Kapazität hat und eine Kapazität damit sie nicht Sekunden weise einschaltet und wider aus schaltet zur Regelung, ich möchte die Einstellungen später im EEPROM speichern können.
Nun möchte ich die Temperatur dauernd anzeigen, nur funktioniert das nicht die Anzeige des LCD's wird nur nach einem Tastendruck aktualisiert
Code:// // ATMega644 // lcd-routines.c, lcd-routines.h, i2c.h // #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <stdlib.h> #include <stdbool.h> #include "lcd-routines.h" #include "i2c.h" int main(void) //Hauptschleife { DDRD = 0x00; // Pins sind Eingang PORTD = 0xff; // mit aktiviertem PullUp, Taster schalten nach GND // Initialisierung des LCD // Nach der Initialisierung müssen auf dem LCD vorhandene schwarze Balken // verschwunden sein lcd_init(); lcd_string(" LCD Start !!! "); _delay_ms(500); //Gibt einem die moeglichckeit zu lesen was auf dem LCD steht lcd_clear(); lcd_home(); lcd_string(" Taste druecken"); TWI_init(FAKTOR, TEILER); char temperatur; //Temperaturvariable char einer; //Temperaturvariable einer char zehner; //Temperaturvariable zehner char Buffer[100]; //itoa Array 3 stelig int i = 25; //Laufzeitvariable while(1) //Programmschleife { temperatur = TWI_empf(ADRESSE_R); //Temperaturvariablen einer = ( temperatur % 10 ) + 48; zehner = ( temperatur / 10 ) + 48; if(!(PIND & (1<<PD0))) // Taste 0 an PORTD PD0 { _delay_ms(10); i++; lcd_setcursor( 0, 1); lcd_string("Aetzlaufzeit "); itoa( i, Buffer, 10 ); //Laufzeitvariable in Integer wandeln lcd_string( Buffer ); while(!(PIND & (1<<PD0))); _delay_ms(10); } if(!(PIND & (1<<PD1))) // Taste 1 an PORTD PD1 { _delay_ms(10); i--; lcd_setcursor( 0, 1); lcd_string("Aetzlaufzeit "); itoa( i, Buffer, 10 ); //Laufzeitvariable in Integer wandeln lcd_string( Buffer ); while(!(PIND & (1<<PD1))); _delay_ms(10); } if (dat2 >= 0b10000000) { lcd_setcursor( 0, 2); lcd_string("Temperatur "); lcd_data(zehner); lcd_data(einer); lcd_string(",5C "); } else { lcd_setcursor( 0, 2); lcd_string("Temperatur "); lcd_data(zehner); lcd_data(einer); lcd_string(",0C "); } } return(0); }
Lesezeichen