роботы
робототехника
микроконтроллеры
Главная
Как сделать робота
Новости
Спорт
Статьи
Wiki
Форум
Downloads
Ссылки
Контакты  


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

> Без описания
Shinsei
Отправлено: 18 Октября, 2015 - 19:23:37
Post Id


Рядовой


Сообщений всего: 3
Дата рег-ции: Окт. 2015  





Есть вот такая схема и программа, на 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);
}
}
}

Прикреплено изображение
test.jpg

 
 Top
Shinsei
Отправлено: 19 Октября, 2015 - 16:38:06
Post Id


Рядовой


Сообщений всего: 3
Дата рег-ции: Окт. 2015  





Попробовал в протеусе простую схему с 32А сделать. На ацп датчик изгиба, а на РВ0 просто светодиод. Всё равно не работает. Ставлю мегу8, нормально пашет. Думаю в программе проблема или может в протеусе в настройках меги?
 
 Top
Роботов
Отправлено: 20 Октября, 2015 - 16:03:29
Post Id



Гуру


Сообщений всего: 1347
Дата рег-ции: Июнь 2011  





Давно говорил, протеус - игрушка. Так, светодиодом помигать.
 
 Top
Shinsei
Отправлено: 21 Октября, 2015 - 12:37:54
Post Id


Рядовой


Сообщений всего: 3
Дата рег-ции: Окт. 2015  





Всё, тему можно закрывать, разобрался, всё отлично работает. Исходная программа работоспособна.
Просто в протеусе на фоторезисторе надо было поднять освещение и всё сразу заработало. Обнаружил это когда подключил ЖК дисплей.
 
 Top
Страниц (1): [1]
« Микроконтроллеры »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown