- Akku Tests und Balkonkraftwerk Speicher         
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
    Neuer Benutzer Öfters hier
    Registriert seit
    21.01.2012
    Beiträge
    15
    Beim Auslesen der Temperatur des LM75 hängt sich der Prozessor auf, wenn ein Signal über USART reinkommt, versteh das nicht wirklich.

    Usart funktioniert Problemlos wenn ich die Zeile auskommentiere:

    // temperatur = TWI_empf(ADRESSE_R);
    wenn ich sie drinlasse, hängt sich der Prozessor ab und zu auf, wenn über USART etwas empfangen wird während diesen Befehls.

    Ist sehr strange, habt ihr da eine Idee?

    Programm:
    #define F_CPU 16000000UL //Takt 16MHz

    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>
    #include <util/twi.h>
    #include "i2c.h"

    /* Programm Libs */
    #include "defines.h"


    volatile uint8_t IRFlag;
    volatile uint8_t IR_zaehl=0;
    volatile uint8_t RxData;

    int main(void)
    {
    /* TIMER INIT */
    SETBIT(TCCR0,CS00);// Prescaler von 1024 16MHz/1024 = 15,6kHz = 64us
    SETBIT(TCCR0,CS02);
    TCNT0 = 255; // Reload Wert 0-255 250*4us*8 = 8ms = 125Hz
    SETBIT(TIMSK,TOIE0); // Timer IR Aktivieren

    // DDRD=0xFB; //D0-D1 & D3-D7 as Output
    // SETBIT(MCUCR,ISC01); //Fallende Flanke
    // SETBIT(GICR,INT0); //Taster IR Aktivieren

    sei(); //Globale IRs aktivieren

    /* Lokale Variablen: */


    /* Ports as Outputs: */
    DDRA=0xFF;
    DDRB=0xFF;
    DDRC=0xFF;


    uart_init();
    //SETBIT(PORTB,1);

    SETBIT(PORTA,3);//VCC für Temp

    TWI_init(FAKTOR, TEILER);
    unsigned char temperatur=0;
    unsigned char komma=0;
    char test=0;
    while (1)
    {

    if(IRFlag == 1 && !((UCSRA & (1<<RXC))))
    {
    IRFlag=0;
    SETBIT(PORTB,1);//LED
    // temperatur = TWI_empf(ADRESSE_R);
    komma=dat2;
    CLEARBIT(PORTB,1);//LED
    }

    //if ( (UCSRA & (1<<RXC)) ) //Zeichen Empfangen?
    else
    {
    RxData=uart_getc();
    if(RxData=='R') //Relais Einschalten
    {
    // SETBIT(PORTB,1);//LED
    SETBIT(PORTA,6);//Relais
    uart_putc('R');
    }
    if(RxData=='S') //Relais Ausschalten
    {
    // CLEARBIT(PORTB,1);//LED
    CLEARBIT(PORTA,6);//Relais
    uart_putc('S');
    }
    if(RxData=='T') //Relais Ausschalten
    {
    if(temperatur)
    uart_putc(temperatur);
    }
    if(RxData=='U') //Relais Ausschalten
    {
    if(komma)
    uart_putc(komma);
    }
    RxData=0;
    }

    _delay_ms(20);

    /*
    uart_putc('f');
    _delay_ms(1000);

    uart_putc('A');
    _delay_ms(1000);
    uart_putc(uart_getc());*/
    }

    }




    /* TIMER 0 IR HANDLER */
    ISR( TIMER0_OVF_vect ) //Wenn Timer IR kommt Led ausschalten + IR Flag auf 1
    {
    IR_zaehl++;
    if(IR_zaehl==160)
    {
    IRFlag=1;
    IR_zaehl=0;
    }
    }


    /* Taster 0 IR HANDLER */
    ISR( INT0_vect )
    {

    }
    Geändert von kremsy (02.06.2012 um 20:03 Uhr)

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    21.01.2012
    Beiträge
    15
    Aber es tritt auch nicht immer auf, sondern zufällig. Zurzeit tritt es gar nicht auf.

    Ich mach mich mal an den LM76.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    21.01.2012
    Beiträge
    15
    ab jetzt mal einfach alle Bit-Warteschleifen gegen delay warteschleifen
    getauscht.

    char TWI_empf(unsigned char adres)
    {

    TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
    //loop_until_bit_is_set(TWCR, TWINT);
    _delay_ms(100);
    TWDR = adres;
    TWCR = (1<<TWINT)|(1<<TWEN);
    //loop_until_bit_is_set(TWCR, TWINT);
    _delay_ms(100);
    TWCR = (1<<TWINT)|(1<<TWEN);
    //loop_until_bit_is_set(TWCR, TWINT);
    _delay_ms(100);
    dat1 = TWDR ;
    TWCR = (1<<TWINT)|(1<<TWEA)|(1<<TWEN);

    TWCR = (1<<TWINT)|(1<<TWEN);
    //loop_until_bit_is_set(TWCR, TWINT);
    _delay_ms(100);
    dat2 = TWDR ;

    //loop_until_bit_is_set(TWCR, TWINT);
    _delay_ms(100);
    TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);

    return dat1;
    }

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    21.01.2012
    Beiträge
    15
    Hab Pullup von 5 auf 20kOhm geändert, scheint jetz zu funktionieren .

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    21.01.2012
    Beiträge
    15
    So, nun zum Eigentlichen Problem der Kommastelle.

    struct TEMPERATUR {
    unsigned char temp;
    unsigned char komma;
    };


    struct TEMPERATUR temp_sensor1,temp_sensor2,temp_sensor3;

    Beim LM75 ists ganz einfach und funktioniert:

    temp_sensor2.temp = TWI_empf(ADRESSE_SENSOR2_R); //Für LM75
    temp_sensor2.komma= (dat2>>5)*10/8; //Für LM75

    Datenblatt:
    http://docs-europe.electrocomponents...6b80b4c8ed.pdf



    Beim LM76 zeigts mir bei der Kommastelle immer 9 an:

    temp_sensor1.temp = (TWI_empf(ADRESSE_SENSOR1_R)<<1)|((dat2>>7)); //für LM76
    temp_sensor1.komma= (dat2>>3&0b00001111)*10/16; //für LM76

    Datenblatt:
    http://docs-europe.electrocomponents...6b806ece4e.pdf

    Vielleicht habt ihr ne idee, wo mein Denkfehler ist.
    Geändert von kremsy (03.06.2012 um 17:28 Uhr)

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    21.01.2012
    Beiträge
    15
    Das Problem ist eigentlich dass D3-D6 beim LM76 immer High sind, ist da der Sensor Kaputt? Oder an was könnte dass liegen?

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

LiFePO4 Speicher Test