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.
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);
}
}
![[atmega32][c] Dziwne odczyty z LM35 [atmega32][c] Dziwne odczyty z LM35](https://obrazki.elektroda.pl/0_1252947979.jpg)