- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Temperatur anzeige auf dem LCD wird nicht aktualisiert?

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    43
    Beiträge
    230

    Temperatur anzeige auf dem LCD wird nicht aktualisiert?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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);
    }
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  2. #2
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    Du wartest ja auch an dieser Stelle
    Code:
                while(!(PIND & (1<<PD1)));
                 _delay_ms(10);
                 }
    auf einen Tastendruck. An dieser Stelle bleibt dein Programm so lange in der While-Schleife hängen, bis eine Taste gedrückt wird.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    43
    Beiträge
    230
    Dan müsste ich ja beide gedrückt haben.
    Nun zurzeit ist es egal, welche Taste gedrückt wird.

    Code:
                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);             }
    Und wen ich das verwende.

    Code:
                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 );
             
                    if(!(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 );
    
                    if(!(PIND & (1<<PD1)))
                    {
                    _delay_ms(10);
                    }
                }
    Dann wen ich denn Taster gedrückt halte, zählt die Variable rauf oder runter.

    Danke
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    Hm. Ich geh mal davon aus, dass du die Taster gegen Masse angeschlossen hast und mit dem internen Pullup-Widerständen betreibst, wie es in deinem Quellcode steht. Das Display geht also an, "LCD Start" wird ausgegeben, und die Temperatur wird EIN mal angezeigt und dann nicht aktualisiert. ist das so?
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    43
    Beiträge
    230
    ja stimmt !!!
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  6. #6
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Ja weil das Programm hier stehen bleibt:

    while(!(PIND & (1<<PD0)));
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  7. #7
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    Dort dürfte es ja eigentlich nur dann stehen bleiben wenn die Taste gedrückt ist, und an der stelle eine null im Register ist.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  8. #8
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Er kann ja mal testen wo das Programm stehen bleibt indem er eine LED schaltet. Einfach verschiedene Stellen im Programm einen Pin auf High setzen. Dann sieht er ja wo es stehen bleibt.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  9. #9
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    ja, so hab ich das auch immer gemacht. wenn dir ein jtagICE zur verfügung steht, kannst du den code auch live laufen lassen und schauen wo es hängt.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  10. #10
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    43
    Beiträge
    230
    Ja schon nur das wartet ja so lange, bis ich die Taste wider losgelassen habe.

    Noch mal mein Code etwas übersichtlicher.

    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))); //Warte solange Taste noch getrückt ist.
                    _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))); //Warte solange Taste noch getrückt ist.
                    _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);
    }
    Wie gesagt ich hab nur Probleme mit der Temperatur aktualisieren.

    Danke
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. LM75 aktualisiert nicht (gelöst)
    Von marc2100 im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 02.09.2009, 15:04
  2. Temperatur und Luftfeuchte Anzeige mit AVR
    Von TheDarkRose im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 12
    Letzter Beitrag: 01.02.2009, 21:20
  3. Temperatur/Zeit Anzeige
    Von Edbeck im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 29.06.2007, 06:51
  4. ntc temperatur-anzeige
    Von fabix im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 06.05.2007, 12:35
  5. Problem mit DS1820 und Anzeige der temperatur
    Von martin66119 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 09.01.2007, 06:22

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress