Witam,
próbuję odczytać z czujnika wskazanie temperatury. Robię to w ten sposób, że podpinam czujnik do wejścia ADC0, pod napięcie referencyjne podpinam bezpośrednio VCC, w moim przypadku 5V, wszystkie rejestry ustawiam zgodnie z datasheetem. Odczytuję wartość rejestru ADCH i wystawiam na port D, pod którego nóżki mam podłączone diody.
Kod programu:
Mój problem jest taki, że te diody świecą po włączeniu bardzo słabiutkim światełkiem i zdaje się, że czujnik nie działa poprawnie, gdyż nawet jak go wypnę to diody dalej świecą. Ciekawym zjawiskiem jest, że niektóre diody przestają świecić lub świecą jeszcze słabiej jeśli zbliżam dłoń kabelka, sądzę że wynika to po prostu z tego, że ludzkie ciało też ma swoje napięcie i mikrokontroler odczytuje jakieś śmieci. Gdy odsunę rękę a kabelek wisi w powietrzu to diody po chwili gasną. Proszę o jakieś porady bo już trochę czasu na tym spędziłem i bez efektów, jestem początkujący w zabawach w mikrokontrolerami tak więc proszę o wyrozumiałość
próbuję odczytać z czujnika wskazanie temperatury. Robię to w ten sposób, że podpinam czujnik do wejścia ADC0, pod napięcie referencyjne podpinam bezpośrednio VCC, w moim przypadku 5V, wszystkie rejestry ustawiam zgodnie z datasheetem. Odczytuję wartość rejestru ADCH i wystawiam na port D, pod którego nóżki mam podłączone diody.
Kod programu:
/* "led.c" - programik do testowania środowiska WinAVR */
/* układ ATmega 1MHz */
#define F_CPU 1000000L
#include <avr/io.h>
#include <util/delay.h>
#include <avr/io.h>
#define PORT_AD PORTC // Port z wejściami analogowymi
#define DDR_AD DDRC
#define PORT_OUT PORTD // Port do którego przyłączone są diody LED
#define DDR_OUT DDRD
// inicjalizacja portow i przetwornika
void init()
{
// Wybranie wewnętrznego żródła napięcia odniesienia
//ADMUX |= _BV(REFS0);
//ADMUX |= _BV(REFS1);
// Wybranie sposobu zapisu wyniku z wyrównaniem do lewej (osiem starszych bitów wyniku w rejestrze ADCH)
//ADMUX |= _BV(ADLAR);
// Zezwolenie na prace przetwornika
ADCSRA |= _BV(ADEN);
// Wybranie częstotliwości dla taktowania przetwornika
ADCSRA |= _BV(ADPS0);
ADCSRA |= _BV(ADPS1);
}
int main(void)
{
unsigned int pomiar;
// zainicjowanie rejestrow i przetwornika
init();
while (1)
{
ADCSRA |= _BV(ADSC); // Rozpoczęcie przetwarzania
while(bit_is_set(ADCSRA,ADSC)){}; // Oczekiwanie na zakończenie przetwarzania
// Zapisanie starszych 8 bitów wyniku konwersji do zmiennej "pomiar"
pomiar=ADCH;
PORT_OUT = (pomiar*1024)/5;
}
}
Mój problem jest taki, że te diody świecą po włączeniu bardzo słabiutkim światełkiem i zdaje się, że czujnik nie działa poprawnie, gdyż nawet jak go wypnę to diody dalej świecą. Ciekawym zjawiskiem jest, że niektóre diody przestają świecić lub świecą jeszcze słabiej jeśli zbliżam dłoń kabelka, sądzę że wynika to po prostu z tego, że ludzkie ciało też ma swoje napięcie i mikrokontroler odczytuje jakieś śmieci. Gdy odsunę rękę a kabelek wisi w powietrzu to diody po chwili gasną. Proszę o jakieś porady bo już trochę czasu na tym spędziłem i bez efektów, jestem początkujący w zabawach w mikrokontrolerami tak więc proszę o wyrozumiałość
