-         

Ergebnis 1 bis 8 von 8

Thema: LM75 Probleme

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    22.03.2011
    Beiträge
    54

    LM75 Probleme

    Anzeige

    Klicke auf die Grafik für eine größere Ansicht

Name:	LM75_I2C.gif
Hits:	9
Größe:	9,7 KB
ID:	21353Hallo Freunde ich bräuchte Eure Hilfe

    Habe vor mir einen LM 75 und ein Atmega16.

    Verbunden über I2C mit 4,7 Pullups an den leitungen.

    Ich Versuche wie verzweifelt die Temperatur auszulesen und auf einem LCD wieder zu geben,
    doch will dies mir nicht gelingen.

    Ich poste mal meinen Code zur Kontrolle von Profis
    Code:
    /*
     * LM75.c
     *
     * Created: 28.01.2012 17:11:50
     *  Author: Frau
     */ 
    
    #include <avr/io.h>
    #include <stdio.h>
    #include <stdint.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    
    
    
    #include "lcd.c"
    #include "lcd.h"
    #include "i2cmaster.h"
    #include "twimaster.c"
    
    #define lm75 0x90
    
    uint8_t msb_temp;
    uint8_t lsb_temp;
    uint16_t temp_wrd;
    
    uint8_t ret;
    
    char Buffer[20];
    
    
    
    int main(void)
    {
    	
    	lcd_init(LCD_DISP_ON);
    	lcd_clrscr();
    	
    	i2c_init();
    	
    
    	void temperfassung(void)
    	{			
    		ret = i2c_start(lm75 + I2C_WRITE);
    		
    		if (ret == 0)
    			{		
    				msb_temp = i2c_readAck();
    				lsb_temp = i2c_readNak();
    			}
    		i2c_stop();				
    	}
    	
        while(1)
        {
    		
    		temperfassung();
    		
    		temp_wrd = (msb_temp << 8 | lsb_temp);
    		itoa(ret ,Buffer, 10 );
    		
    		lcd_clrscr();
    		lcd_gotoxy(0,0);
            lcd_puts( "Temperatur:");
    		lcd_gotoxy(0,1);
    		lcd_puts(Buffer);
    		
    		_delay_ms(500);
    						 
        }
    }

    Ich habe den I2C-Bus überwacht und hänge noch ein Pic mit daran. Vielleicht gibt das aufschluss über den Bock den ich drin habe.

    Grüße Flo

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Es könnte helfen, temp_wrd auszugeben statt ret.


    PS: Und man definiert keine Funktionen innerhalb von anderen Funktionen in C.
    MfG
    Stefan

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    22.03.2011
    Beiträge
    54
    PS: Und man definiert keine Funktionen innerhalb von anderen Funktionen in C.


    Abselut richtig ändere ich sofort bin schon fast blind vor lauter Computer.
    Und ein abseluter Noob was "C" angeht. Ich Quäle mich so

    ret habe ich nur testweise ausgegeben um zu schauen ob was es ausgibt.

    Code:
    #include <avr/io.h>
    #include <stdio.h>
    #include <stdint.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    
    
    
    #include "lcd.c"
    #include "lcd.h"
    #include "i2cmaster.h"
    #include "twimaster.c"
    
    #define lm75 0x90
    uint8_t msb_temp;
    uint8_t lsb_temp;
    uint16_t temp_wrd;
    
    uint8_t ret;
    
    char Buffer[20];
    
    
    void temperfassung(void)
    	{			
    		ret = i2c_start(lm75+I2C_READ);
    		
    		if (ret == 0)
    			{		
    				msb_temp = i2c_readAck();
    				lsb_temp = i2c_readNak();
    				
    				lcd_clrscr();
    				lcd_gotoxy(5,1);
    				lcd_puts( "GEHT");
    			}
    			else
    			{
    				lcd_clrscr();
    				lcd_gotoxy(5,1);
    				lcd_puts( "FEHLER");				
    			}
    		i2c_stop();				
    	}
    
    
    
    int main(void)
    {
    	
    	lcd_init(LCD_DISP_ON);
    	lcd_clrscr();
    	
    	i2c_init();
    	
        while(1)
        {
    		
    		temperfassung();
    		
    		temp_wrd = (msb_temp << 8 | lsb_temp);
    		itoa(temp_wrd ,Buffer, 10 );
    		
    		lcd_gotoxy(0,0);
            lcd_puts( "Temperatur:");
    		lcd_gotoxy(0,1);
    		lcd_puts(Buffer);
    		
    		_delay_ms(500);
    						 
        }
    }

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    22.03.2011
    Beiträge
    54
    Ich werde auch nicht schlau warum ich nach dem Senden der Adresse und einer 1 für READ keine 0 von dem Temperatursensor zurück bekomme. Um somit das eigentliche Auslesen zu starten.
    Ich habe A0 bis A2 auf GND. Smit lautet die Adresse "0b10010000"

    Hardware fehler ?!
    Habe zwei dieser SMD IC's auf dem Steckbrett mit Adapter.
    Leitungen auf Kurzschluss überprüft und nichts gefunden.

    Er ärgert mich dieser LM75

    Grüße

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.557
    Zitat Zitat von rauf81 Beitrag anzeigen
    ... LM 75 ... Atmega16 ... über I2C ... die Temperatur auszulesen und auf ... LCD ...
    Hi Flo,

    Zum Auslesen eines (Beschleunigungs-) Sensors über I²C gibts von Sternthaler (klick hier) ein komplettes C-Schnippsel und zum gleichen Sensor weiter unten von mir noch ein bisschen etwas (klick). Meine Master-Slave-Kommunikation hatte ich hier (klick) mit Problemen diskutiert.

    Es sollte Dir leicht möglich sein, anhand des Codes in den Links Deine Kommunikation einzurichten - Du musst (fast) nur die I2C- und die Registeradressen ändern.

    Viel Erfolg.
    Ciao sagt der JoeamBerg

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    22.03.2011
    Beiträge
    54
    So ich bin nun fertig für Heute, hab die Schnautze voll.
    Bekomme keine Antwort (ACK low) von dem Ic!

    Danke für deinen Link Oberallgeier werd ich Morgen mal rein schauen und damit weiter pobieren.

    Würde mich aber intressiern ob mein Prgramm den LM75 ausliest, könnte dann zumindest den Softwareteil ausblenden und die Hardware zum 1000 mal durchmessen.
    Im Anhang noch ein Screenshot meines Osis. Mehr konnte ich ihm heut nicht entlocken.

    Danke für die Hilfe erstmal...

    Klicke auf die Grafik für eine größere Ansicht

Name:	lm.png
Hits:	8
Größe:	19,7 KB
ID:	21356


    Grüße Flo

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    22.03.2011
    Beiträge
    54
    Konnte ja doch nicht die Finger davon lassen.
    Ich will euch aber noch heute Abend an meinen neusten Erkentnissen teil haben lassen .

    Habe flott das Bascom Beispiel aufgespielt und siehe da es funktioniert!
    Temperatur wird über Terminal ausgegeben.
    Also Hardware ist IO hätte mich auch gewundert bei dem minimalen Aufbau.

    Habe noch was feststellen können, was mich leider mehr verwirrt als sonst was.
    Benutze Peter Flury's Liberys wie Ihr sicher schon feststellen kontet, wenn Ihr das Programm angeschaut habt.
    An Port B hängt das Display 16x2 Zeilen standart Controler HD......
    Port A und Port D ohne Anschlüsse.

    Ist das Display aufgesteckt erhalte ich die gewünschte Ausgbe. Auf dem Osi ist das Pic, vom Vorpoast zu sehen.
    Ist das Display abgezogen tut sich auf dem I2C Bus garnichts.

    Irgendwas harmoniert bei meinem Programmcode nicht, allerdings sehe ich noch bei weitem nicht wodran dies liegen könnte.

    So das mal zum besten
    Grüße Flo

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    22.03.2011
    Beiträge
    54
    Fällt Euch was auf an meinem Programm


    Ich VOLLDEPP habe ein 16 MHz Quarz am Atmega laufen und es nicht definiert.
    Nun gehts......

    Grüße der DEPP

Ähnliche Themen

  1. Wo bekomm ich nen LM75 her?
    Von CapSob im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 05.12.2006, 00:42
  2. LM75 + PC ?
    Von Ratman2000 im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 11
    Letzter Beitrag: 17.09.2006, 12:35
  3. Problem mit I2C und LM75
    Von Mad-Onion im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 05.05.2006, 16:10
  4. I²C Bus und LM75
    Von Razer im Forum C - Programmierung (GCC u.a.)
    Antworten: 24
    Letzter Beitrag: 30.04.2006, 18:43
  5. LM75 auslesen
    Von catweazle0815 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 11.04.2006, 16:26

Berechtigungen

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