- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 4 von 4

Thema: Temperatur wert wird nicht aktualisiert.

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #4
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    44
    Beiträge
    230
    Also, ich habe jetzt festgestellt, wen ich das fusse bit CKDIV8 setze aktualisiert sich der Temperatur wert wie gewünscht außer das die nach Komma stelle nicht mit aktualisiert wird. Da ist wohl doch noch was falsch. Ich habe jetzt mal das Projekt besser in *.c und *.h Dateien gegliedert.

    Mir scheint, dass mein lcd zu langsam ist, wen der Temperatur wert aktualisiert wird, kommt das lcd nicht hinter her.
    Mein LCD ist das "YL 162-90" von Pollin.

    Die besagte Umrechnung ist nötig um ASCII Zeichen auf mein lcd aus zu geben.

    Der Temperatur wert ist insgesamt 9 bit groß das heißt 8 bit (1 byte) für die vor Komma stelle und das 9te bit für die nach Komma stelle (bit 9 = 0 Dan *,0 oder bit 9 = 1 Dan *,5 (das "*" steht für Temperatur wert))

    Die variable "rest" existiert tatsächlich nicht in der main da ich sie global gesetzt habe.

    i2c.h
    Code:
    #define TAKT 8000000UL 
    #define ADRESSE_R 0b10010001 //Lesen 
    #define ADRESSE_W 0b10010000 //Schreiben
    #define FAKTOR 32
    #define TEILER 1
    
    char dat1, rest;
     
    ////////////////////////////////////////////////////////////////////////////////
    // Hier die verwendete Taktfrequenz in Hz eintragen, wichtig!
     
    #ifndef F_CPU
    #define F_CPU 8000000UL
    #endif
    
    
    
    void TWI_init(unsigned char faktor, unsigned char teiler);
    
    void TWI_send(unsigned char adres, unsigned char daten);
    
    char TWI_empf(unsigned char adres);
    i2c.c
    Code:
    #include <avr/io.h>
    #include <util/delay.h>
    #include "i2c.h"
     
    ////////////////////////////////////////////////////////////////////////////////
    
    void TWI_init(unsigned char faktor, unsigned char teiler)
    {
    TWBR = faktor;
    TWSR = teiler;
    }
    
    void TWI_send(unsigned char adres, unsigned char daten)
    {
    TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
    loop_until_bit_is_set(TWCR, TWINT);
    TWDR = adres;
    TWCR = (1<<TWINT)|(1<<TWEN);
    loop_until_bit_is_set(TWCR, TWINT);
    TWDR = daten;
    TWCR = (1<<TWINT)|(1<<TWEN);
    loop_until_bit_is_set(TWCR, TWINT);
    TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
    }
    
    
    
     char TWI_empf(unsigned char adres)
    {
    
    TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
    loop_until_bit_is_set(TWCR, TWINT);
    TWDR = adres;
    TWCR = (1<<TWINT)|(1<<TWEN);
    loop_until_bit_is_set(TWCR, TWINT);
    TWCR = (1<<TWINT)|(1<<TWEN);
    loop_until_bit_is_set(TWCR, TWINT);
    dat1 = TWDR ;
    TWCR = (1<<TWINT)|(1<<TWEA)|(1<<TWEN);
    
    TWCR = (1<<TWINT)|(1<<TWEN);
    loop_until_bit_is_set(TWCR, TWINT);
    rest = TWDR ;
    
    loop_until_bit_is_set(TWCR, TWINT);
    TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
    
    return dat1;
    }
    Taster_LCD.c
    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();
        TWI_init(FAKTOR, TEILER);
        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");         
    
    char temperatur; //Temperaturvariable
    char einer; //Temperaturvariable einer
    char zehner; //Temperaturvariable zehner
                      
        for(;;) //Programmschleife
        {  
    
            temperatur = TWI_empf(ADRESSE_R); //Temperaturvariablen
            einer = ( temperatur % 10 ) + 48;
            zehner = ( temperatur / 10 ) + 48;
              
                if (rest >= 128)
                {
                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);
    }
    hir das Datenblatt des LM75.
    https://docs.google.com/gview?url=ht...df&chrome=true

    Im Anhang habe ich noch mal das komplette Projekt.

    Danke.
    by Ferdinand.
    Angehängte Dateien Angehängte Dateien
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

Ähnliche Themen

  1. Temperatur anzeige auf dem LCD wird nicht aktualisiert?
    Von Ferdinand im Forum C - Programmierung (GCC u.a.)
    Antworten: 16
    Letzter Beitrag: 16.01.2012, 13:55
  2. LM75 aktualisiert nicht (gelöst)
    Von marc2100 im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 02.09.2009, 15:04
  3. Antworten: 25
    Letzter Beitrag: 21.08.2008, 22:33
  4. [ERLEDIGT] Suche Temperatur- und ph-Wert
    Von Holger. im Forum Sensoren / Sensorik
    Antworten: 5
    Letzter Beitrag: 14.11.2005, 16:17
  5. [ERLEDIGT] Temperatur und PH-Wert messen
    Von im Forum Sensoren / Sensorik
    Antworten: 1
    Letzter Beitrag: 19.01.2005, 13:13

Berechtigungen

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

Solar Speicher und Akkus Tests