logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[atmega32][c] Dziwne odczyty z LM35

boniu747 13 Wrz 2009 21:14 2903 12
REKLAMA
  • #1 7014437
    boniu747
    Poziom 10  
    Witam.
    Mam problem z odczytem informacji za pomocą przetwornika ADC w uC atmega32. Chce mierzyć temperaturę za pomocą LM35, jednak cały czas do procesora dochodzi 34-35 mV, z tego co mi się udało na wyświetlaczu wychwycić. LM35 wymieniałem i inny chodzi tak samo.

    (kod jest niepełny, żeby nie wklejać nie istotnych elementów)
    Wyjście LM35 podłączone jest bezpośrednio do ADC6 oraz do masy przez kondensator 100nF. AREF i AVCC jest podłączone bezpośrednio do VCC.

    Z góry wielkie dzięki za pomoc. Siedzę nad tym jakiś czas i nie mogę dojść o co chodzi.
    
    #define F_CPU 1000000UL
    #include <util/twi.h>
    #include <stdio.h>
    #include <inttypes.h>
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    #include <avr/iom32.h>
    #include <stdlib.h>
    #include "lcd_funkcje.c"
    #include "i2c.h"
    #include "PCF8583.h"
    
    void ADC6_Init()
    {
      ADMUX |= (1 << MUX1);  // wybor wejscia
      ADMUX |= (1 << MUX2);  // dla przetwornika
    
      ADMUX &= ~(1 << REFS0);  // ustaw wewnetrzne napiecie
      ADMUX &= ~(1 << REFS1); // odniesienia na AVCC
    
      ADCSRA |= (1 << ADPS0); // wybór czestotliwosci
      ADCSRA |= (1 << ADPS1); // pracy przetwornika
    
      ADCSRA |= (1 <<ADEN);  // zezwolenie na prace ADC 
    }
    
    int main(void)
    {
    	//Deklaracja wyjsc i wejsc
    	DDRB=0xF0; 	//PB0-3 będą wyjsciami, PB4-7 będą wejsciami
    	PORTB=0xFF;	// PB4-7 z podciagnieciem do VCC;
    	DDRA=0x0F;	//PA będą wyjsciami
    	DDRC=0xF8;	// 1111 1000 
    	DDRD=0x32;		// 0011 0010
    	PORTD=0xC4;		//PD7 i PD6 z podciagnieciem
    	MCUCSR |= (1<<JTD);
    	MCUCSR |= (1<<JTD); //wylaczenie JTAG
    	PORTC ^= 0x10;		//zmiana stanu swiecenia diody
    	LCDinit();					//inicjalizacja LCD 
    	sei();						//wlaczenie przerwan	
    	Napis();
    	delay_1s();
    	LCDclr();
    	ADC6_Init();
           i2c_Init();
           PCF8583_init();
           PCF8583_set_time( 00, 00, 00, 0 );
           PCF8583_set_date( 11, 01, 2009 );
    	while(1) //petla glowna programu
    	{
    	   	ADCSRA |= (1 << ADSC); // rozpocznij przetwarzanie
        	        while(bit_is_set(ADCSRA, ADSC)){};  // czekaj na koniec przetwarzania 
    		pomiar = ADCW;
    		dtostrf(pomiar,8,4,str);
    		CopyLCD(str,1,1);
                    PCF8583_get_time( &godz, &min, &sek, &hsek );
                    PCF8583_get_date( &dzien, &miesiac, &rok );
    		Czas();
    		PORTA ^=_BV(0);
    		_delay_ms(300);
    	}	
    }
    
  • REKLAMA
  • REKLAMA
  • #3 7014925
    rusala
    Poziom 22  
    Ja rowniez zalecam na poczatek sprawdzic czy w ogole LM jest dobrze wpiety czyli czy jest tam napiecie takie jak byc powinno. Mozna tez sprawdzic dolaczajac zamiast LMa potencjometr wpiety pomiedzy mase i zasilanie (jako dzielnik napiecia), latwiej bedzie sprawdzac rozne mierzone wartoci.
  • #4 7016788
    boniu747
    Poziom 10  
    Kondensator dałem między GND a OUTPUT LMa.

    Zmieniłem LM na potencjometr 20k i wyświetlał zmianę wartości wraz ze zmianą ustawienia, czyli nie pozostaje nic innego jak to, że mam pecha i obydwa LMy trefne?
  • #5 7017082
    kwesoly
    Poziom 15  
    boniu747 napisał:
    Kondensator dałem między GND a OUTPUT LMa.

    Zmieniłem LM na potencjometr 20k i wyświetlał zmianę wartości wraz ze zmianą ustawienia, czyli nie pozostaje nic innego jak to, że mam pecha i obydwa LMy trefne?


    Jeśli dobrze je podłączyłeś i po sprawdzeniu jak już polecił kolega wyżej czy czujnik daje napięcie okazało się, że na wyjściu zła wartość - tak.
  • REKLAMA
  • #6 7017135
    rusala
    Poziom 22  
    a pokaz dokladnie jak podpiales tego lma
  • #7 7017345
    boniu747
    Poziom 10  
    Dołączam schemat - LM jest oznaczony jako rezystor. Oprócz tego jest wyświetlacz i PCF8583 podłączony do układu, ale to raczej związku nie ma.

    [atmega32][c] Dziwne odczyty z LM35
  • REKLAMA
  • #8 7018232
    Balu
    Poziom 38  
    A kondensatory na vcc?avcc?aref? Aref'a nie wolno zwierać do vcc.
    Generalnie podłącz LM'a tylko pod: zasilanie masę, zobacz jakie masz napięcie na wyjściu - powinno być c.a. 150...350mA w/g noty (15...35*c).
    Oczywiście VCC to min. 4V.
  • #9 7018407
    boniu747
    Poziom 10  
    Czyli dać jeszcze 100nF między VCC i GND, AVCC i GND? Czy jakieś inne wartości? AREFa podłączyć do VCC przez rezystor 1k?
    VCC jest 5 V, ze stabilizatora 78L05.
  • #11 7024479
    boniu747
    Poziom 10  
    Dzięki wszystkim za pomoc. Udało się to uruchomić.
    Pozdrawiam
  • #13 9565720
    marcinmari
    Poziom 11  
    Witam,
    czy moglibyście wytłumaczyc jak prawidłowo zapisać w kodzie wyświetlanie temperatury na lcd 2x16...Cały czas mam problem z dobraniem offsetu....
    w chwili obecnej pokazuje mi zakres tem od -25C do 25 C . Stan początkowy 262mV ---> 21.68C..Lm35Dz mam w konfiguracji z pomiarem ujemnych temp poprzez dołaczenie R18k i 2diód.(podniesieie nap masy)...
    nastepujący kod: [code]
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
REKLAMA