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

Thema: LM75 Auswerten und Temperatur über terminal ausgeben?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    04.02.2005
    Beiträge
    76
    Es geht nur um die Ausgabe? Hast du es schon mal mit dtostrf(); probiert? Kenn mich damit nicht so aus, aber die Werte müssten doch irgendwie in °C umgerechnet werden, oder nicht?
    mfg
    mfg crowdy

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Das Beispiel ist zwar mit Bascom, aber man sieht, wie der LM75 gestrickt ist

    http://www.rn-wissen.de/index.php/Se...ur-Sensor_LM75
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

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

    ich habs verstanden.

    nur wen ich das 1. beit als char sende dan kommt so was "Temperatur -> C" und kein zahlen wert ?
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

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

    Hier habe ich mein Ergebnis:


    "i2c.h"
    Code:
    #define TAKT 8000000UL 
    #define ADRESSE_R 0b10010001 //Lesen 
    #define ADRESSE_W 0b10010000 //Schreiben
    #define FAKTOR 32
    #define TEILER 1
    
    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 dat1, dat2;
    
     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);
    dat2 = TWDR ;
    
    loop_until_bit_is_set(TWCR, TWINT);
    TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
    
    return dat1;
    }
    und die MAIN:

    Code:
    #include <avr/io.h> 
    #include <avr/interrupt.h>
    #include <stdlib.h>
    #include <util/delay.h>
    #include "uart.h"
    #include "i2c.h"
    
    int main (void) {
    
    USART_Init( UBRR_VAL ) ;
    
    uart_puts ("\033[2J");
    uart_puts ("\033[32m");
    uart_puts ("Hallo Welt\r\n")  ;
    uart_putc ( 0x01);
    uart_puts ("\r\nHallo Welt 2 ")  ;
    
    _delay_ms(10000);
    
    TWI_init(FAKTOR, TEILER);
    char temperatur;
    char einer;
    char zehner;
    char c = 248;
    
        while(1)
        {
    
        uart_puts ("\033[2J");
    
        temperatur = TWI_empf(ADRESSE_R);
        einer = ( temperatur % 10 ) + 48;
        zehner = ( temperatur / 10 ) + 48;
    
        
        if (dat2 >= 0b10000000)
        {
        uart_puts ("\r\nTemperatur ")  ;
        uart_putc (zehner);
        uart_putc (einer);
        uart_puts (",5 ");
        uart_putc (c);
        uart_puts ("C \r\n")  ;
        
        }
    
        else
        {
        uart_puts ("\r\nTemperatur ")  ;
        uart_putc (zehner);
        uart_putc (einer);
        uart_puts (",0 ");
        uart_putc (c);
        uart_puts ("C \r\n")  ;
        
        }
        _delay_ms(1000);
    
        }
    }
    Das Problem war das mein terminal Ales in ascii interpretiert hat also auch die werte die von dem LM75 kommen man muste diesen wert erst um Rechnen so das Er dem ascii Code entspricht und ich auch mein gewünschten dezimal werte bekomme.

    Das geht so auf http://www.torsten-horn.de/techdocs/ascii.htm kan man erkennen das Stele 48 mit 0 beginnt und stelle 57 mit 9 endet, also musste ich meinen wert erst mal unterteilen um die einer zu erhalten teilt man durch 10 und merkt sich den Rest das geht mit "%10" Dan verschiebt man den wert um 48 stellen nach hinten also +48 und erhält das gewünschte ascii Zeichen, um die zehner zu erhalten, teilt man das ganze durch /10 und verschiebt das Ergebnis um 48 stellen also wider +48 jetzt nur noch nacheinander ausgeben und fertig.

    THX

    by Ferdinand
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    21.01.2012
    Beiträge
    15
    Hallo,

    ich weiß der Thread ist schon sehr alt.
    Habe deinen code für mein Projekt übernommen, dazu ne frage, gibt es eine Möglichkeit auch die Kommastelle anzuzeigen?

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

    Welche Komma Stele?
    Also die von dem LM75, das habe ich so gelöst:

    Code:
       if (dat2 >= 0b10000000)
       
     { 
       uart_puts ("\r\nTemperatur ");  
       uart_putc (zehner);
       uart_putc (einer);
       uart_puts (",5 ");   
       uart_putc (c); 
       uart_puts ("C \r\n");  
    
    }
    
          else
    {  
    
       uart_puts ("\r\nTemperatur "); 
      uart_putc (zehner);   
      uart_putc (einer);  
      uart_puts (",0 "); 
      uart_putc (c);
      uart_puts ("C \r\n");
    }
    viel erfolg!!!
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    21.01.2012
    Beiträge
    15
    Danke sehr, habs einfach durch 32 geteilt erstmal, damit hab ich so halbwegs die kommastellen.

    Hast du eigentlich auch mal mit dem LM76 gearbeitet? Muss das Programm jetzt so umschreiben dass es auch für LM76 funzt.

Ähnliche Themen

  1. Antworten: 75
    Letzter Beitrag: 12.12.2010, 21:34
  2. Antworten: 44
    Letzter Beitrag: 12.12.2010, 13:55
  3. Antworten: 13
    Letzter Beitrag: 21.11.2010, 18:41
  4. Daten von RN-Control über USB-ISP auf Terminal ausgeben
    Von ensacom im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 3
    Letzter Beitrag: 24.01.2009, 20:36
  5. Beispielprogramm: Mit RN-Control und LM75 Temperatur messen
    Von Frank im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 20
    Letzter Beitrag: 11.04.2007, 15:11

Berechtigungen

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

Solar Speicher und Akkus Tests