- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 17

Thema: Temperatur anzeige auf dem LCD wird nicht aktualisiert?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    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

  2. #2
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.068
    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  

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    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

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.068
    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  

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    44
    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.

  6. #6
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.068
    versuch doch mal rauszufinden, an welcher stelle das Programm hängen bleibt.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Wie schon gesagt das kannst du testen indem du an verschiedene Stellen einfach eine LED einschaltest (du kannst auch nur eine LED einschalten und die Stelle wo sie eingeschaltet wird immer wechseln). Dadurch siehst du recht gut was wann passiert und wie sich dein Programm verhält. Alternativ kannst du das auch mittels Ausgabe über UART und einem Terminalprogramm am PC machen (oder z.B. dein LCD )
    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

  8. #8
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    44
    Beiträge
    230
    OK

    Ich hab mal 2 LED's mit eingebunden, also beim Start sind beide LED's aus. Wen ich Taste 0 drücke Dan geht LED 1 an, wen ich Taste 1 drücke Dan geht LED 0 an.
    Allerdings weis ich nicht ob die LED's beim STK500 nach GND schalten.
    Hier hab ich mal den Code.


    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
    {
        DDRA = 0xff; // Pins sind Ausgang
        PORTA = 0xff; // LED's Aus    
    
        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);
                
                PORTA = (1<<PD0); //LED0
                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);
                
                PORTA = (1<<PD1); //LED 1
                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);
    }
    Danke
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  9. #9
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.068
    Warte... wenn du 0 drückst geht 1 an und umgekehrt? Das ist ja fast nicht möglich o0
    Read... or die.
    ff.mud.de:7600
    Bild hier  

Ä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
  •  

Solar Speicher und Akkus Tests