Форум myROBOT.ru » Лаборатория » Микроконтроллеры » Atmega32A, В Чём Ошибка?

Страниц (1): [1]
 

1. Shinsei - 18 Октября, 2015 - 19:23:37 - перейти к сообщению
Есть вот такая схема и программа, на Atmega8 порт В нормально работал, но здесь,на Atmega32A, почему-то не реагирует, подскажите где ошибка. При изменении на фоторезисторе на порту В должен появляться сигнал, но там как есть логически 0 так и остается, меняй не меняй значение.На порт РВ0 подключал светодиод, при изменении, в протеусе, значения фоторезистора, светодиод загорался - это было на 8, а вот на 32А не хочет, даже по ножкам видно, что на порту постоянно 0, не включается 1, а мне на ПК нужно как раз ловить значения или 0 или 1.
CODE:
#define F_CPU 12000000
#include <util/delay.h>
#include <avr/io.h>
#include <stdlib.h>

void presets()
{
DDRB=0xFF;
PORTB=0x00;

//Настройка АЦП
//ADCSRA
ADCSRA |= (1<<ADEN) //Задействование АЦП
| (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); //установка делителя 128, т.е. равно 64кГц

//ADMUX
ADMUX |= (1<<REFS1) | (1<<REFS0); //выбор внутреннего опорного напряжения 2.56В
}

int readADC(unsigned int ch)
{
unsigned char set_admux=ADMUX;
set_admux &= ~ ((1<<MUX3) | (1<<MUX2) | (1<<MUX1) | (1<<MUX0)); //выбор вывода ADC0 путём записи 0 в 4 бита
switch(ch)
{
case 1: set_admux |= ((0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (1<<MUX0)); break;
default: break;
}
ADMUX = set_admux;
_delay_ms(10);
int foo = 0;
for(int i=0;i<40;i++)
{
ADCSRA |= (1<<ADSC); //Запуск преобразования
while ((ADCSRA&(1<<ADSC))); //ожидание окончания преобразования
foo += ADC;
}

return foo/40;
}

int main(void)
{
presets();

while(1)
{
//TODO:: Please write your application code
int tmp=readADC(0);
if(tmp<=600)
{
PORTB=0x00;
_delay_ms(200);
}
else
{
PORTB=0xFF;
_delay_ms(200);
}
int tmp1=readADC(1);
if(tmp1<=600)
{
PORTB=0x00;
_delay_ms(200);
}
else
{
PORTB=0xFF;
_delay_ms(200);
}
}
}
2. Shinsei - 19 Октября, 2015 - 16:38:06 - перейти к сообщению
Попробовал в протеусе простую схему с 32А сделать. На ацп датчик изгиба, а на РВ0 просто светодиод. Всё равно не работает. Ставлю мегу8, нормально пашет. Думаю в программе проблема или может в протеусе в настройках меги?
3. Роботов - 20 Октября, 2015 - 16:03:29 - перейти к сообщению
Давно говорил, протеус - игрушка. Так, светодиодом помигать.
4. Shinsei - 21 Октября, 2015 - 12:37:54 - перейти к сообщению
Всё, тему можно закрывать, разобрался, всё отлично работает. Исходная программа работоспособна.
Просто в протеусе на фоторезисторе надо было поднять освещение и всё сразу заработало. Обнаружил это когда подключил ЖК дисплей.