моя выборка всегда застряла на 0. Я понятия не имею, почему ?! Я попытался удалить ISR и поместить код через некоторое время l oop, но все тот же. В чем проблема, это то, что я не понимаю. Я хочу попробовать TMP36 на ATMEGA2560. Если необходимы дальнейшие разъяснения, просто спросите меня. Мой код:
ISR(ADC_vect)
{
sample = ADCH;
display(sample,digit);// displays on seven segment
digit++;
if(digit>=4) digit=0;
}
void init_analog()
{
sei();
DDRK &= ~(1<<PK6);
ADMUX |= (1<<REFS0) | (1<<MUX1) | (1<<MUX2);
ADCSRB |= (1<<MUX5);
ADCSRB |= (1<<ADEN) | (1<<ADATE) |(1<<ADIE) | (1<<ADPS0) | (1<<ADPS1) | (1<<ADPS2);
}
void convert()
{
ADCSRA|=(1<<ADSC); //start conversion
}
void display(uint16_t number, int digit)
{ int code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};// array of representations
int thousands = number/1000;// stores thousands
int hundreds= (number%1000)/100;// stores hundreds
int tens = (number%100) /10;// stores tens
int hey = (number%10);// stores ones
if(digit==0)// if fragment number = 0 it shows the rightmost digit.
{
PORTF = ~0x08;
spi_data(code[hey]);
}
else if(digit==1)// next diggit
{
PORTF = ~0x04; // changes the fragment to be shown
spi_data(code[tens]); // sends the value to the spi
}
else if(digit==2)// next digit
{
PORTF = ~0x02;
spi_data(code[hundreds]);
}
else if(digit==3)// leftmost ddigit
{
PORTF = ~0x01;
spi_data(code[thousands]);
} //|0x80
}
void spi_data(uint8_t n) // passes the number to the SPI.
{
SPDR = n;
while( !(SPSR & (1<<SPIF)) );
L_ON;
L_OFF;
}