Witam!
Na początek kod:
Problem polega na tym, że odczyt z kanału 7 jest cały czas na stałym poziomie tzn. przy zmianie napięcia 1-3V odczyt cały czas jest ok 210 gdzie powinien wynosić max 160. Inne kanały działają prawidłowo. Spróbowałem podłączyć napięcie bezpośrednio pod nóżkę Atmegi aby wyeliminować błędy na płytce ale efekt jest ten sam. Czy jest możliwe, że ten kanał jest uszkodzony w Atmedze?
Na początek kod:
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "HD44780.h"
#define Set(reg, bit) ((reg) |= (0x01 << (bit))) // Ustawienie danego bitu w rejestrze
#define Clr(reg, bit) ((reg) &= ~(0x01 << (bit))) // Wyzerowanie danego bitu w rejestrze
#define Flip(reg,bit) ((reg) ^= (0x01 << (bit))) // Set(PORTD, PD7)
#define BitIsSet(reg, bit) ((reg) & (0x01 << bit)) // Sprawdzenie czy dany bit jest ustawiony
#define BitIsClr(reg, bit) (((reg) & (0x01 << bit)) ^ (0x01 << bit)) // Sprawdzenie czy dany bit jest wyzerowany
#define odswierzanie 1000
void Init(void){
DDRA=0xFF; //port A,B,C jako wyjscie
DDRB=0xFF;
DDRC=0xFF;
DDRF=0x00; //port F jako wejscie
PORTF=0x00; //bez podciagniecia do Vcc
DDRD=0x00; //Potr D jako wejścia
PORTD=0xFF; //z podciagnieciem do Vcc
}
void InitADC() // Inicjalizacja przetwornika A/C
{
ADMUX |=(1<<ADLAR); // Wybranie sposobu zapisu wyniku z wyrównaniem do lewej (osiem starszych bitów wyniku w rejestrze ADCH)
ADCSRA|=(1<<ADEN);
ADCSRA|=(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); // Zezwolenie na konwersję ADEN, preskaler 128
}
int ReadADC(char channel)
{
ADMUX &= ~((1<<MUX2)|(1<<MUX1)|(1<<MUX0)); // Wyzerowanie numeru kanału
ADMUX |= channel; // Wybór żądanego kanału
ADCSRA|= (1<<ADSC); // Rozpoczęcie konwersjii
while(BitIsClr(ADCSRA,ADIF)); // Oczekiwanie na zakończenie konwersji
return ADCH;
}
int main(){
int wynik,wynik2,lcd=0;
Init();
InitADC();
LCD_Initalize(); // Inicjalizacja wyswietlacza
LCD_Clear();
sei(); //Włączenie obsługi przewań, wykonać po włączeniu zezwoleń
while(1){
if(++lcd == odswierzanie)
{
lcd = 0;
LCD_Clear();
LCD_GoTo(0,0);
LCD_WriteText(IntToText(wynik));
LCD_GoTo(0,1);
LCD_WriteText(IntToText(wynik2));
}
wynik2=ReadADC(2);
wynik=ReadADC(7);
}}
Problem polega na tym, że odczyt z kanału 7 jest cały czas na stałym poziomie tzn. przy zmianie napięcia 1-3V odczyt cały czas jest ok 210 gdzie powinien wynosić max 160. Inne kanały działają prawidłowo. Spróbowałem podłączyć napięcie bezpośrednio pod nóżkę Atmegi aby wyeliminować błędy na płytce ale efekt jest ten sam. Czy jest możliwe, że ten kanał jest uszkodzony w Atmedze?