Atmega32A, В Чём Ошибка?

Обсуждаем контроллеры компании Atmel.
Ответить
shinsei
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс окт 18, 2015 19:43:37
Откуда: Одесса

Atmega32A, В Чём Ошибка?

Сообщение shinsei »

Есть вот такая схема и программа, на Atmega8 порт В нормально работал, но здесь,на Atmega32A, почему-то не реагирует, подскажите где ошибка. При изменении на фоторезисторе на порту В должен появляться сигнал, но там как есть логически 0 так и остается, меняй не меняй значение.На порт РВ0 подключал светодиод, при изменении, в протеусе, значения фоторезистора, светодиод загорался - это было на 8, а вот на 32А не хочет, даже по ножкам видно, что на порту постоянно 0, не включается 1, а мне на ПК нужно как раз ловить значения или 0 или 1.

Код: Выделить всё

#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
(29.04 КБ) 479 скачиваний
Иногда только ошибившись ты понимаешь как попал.
Аватара пользователя
dr.doc
Это не хвост, это антенна
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Re: Atmega32A, В Чём Ошибка?

Сообщение dr.doc »

а мне на ПК нужно как раз ловить значения или 0 или 1.
USART?, проверяйте настройки XCK.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
shinsei
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс окт 18, 2015 19:43:37
Откуда: Одесса

Re: Atmega32A, В Чём Ошибка?

Сообщение shinsei »

Не использую USART. Ну где Вы в коде увидели USART? На схеме же видно USB. Но дело даже не в этом, я же указал выше, даже если светодиод на РВ0 повесить он не загорается, а на Atmega8 всё работало. Я с ума скоро сойду.
Иногда только ошибившись ты понимаешь как попал.
Аватара пользователя
dr.doc
Это не хвост, это антенна
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Re: Atmega32A, В Чём Ошибка?

Сообщение dr.doc »

Так ведь различия по периферии в этом и состоят. PB0 по умолчанию вход/выход.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
shinsei
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс окт 18, 2015 19:43:37
Откуда: Одесса

Re: Atmega32A, В Чём Ошибка?

Сообщение shinsei »

Да я сейчас пытаюсь добиться, чтобы на выходе РВ0 подавалась 1. Почему на 8 работала, а под 32А компилирую - нет. Может в протеусе в настройках 32А, что-то еще добавить надо кроме загрузки прошивки и указания 12МГц?
РВ0 переведен на выход.
Иногда только ошибившись ты понимаешь как попал.
shinsei
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс окт 18, 2015 19:43:37
Откуда: Одесса

Re: Atmega32A, В Чём Ошибка?

Сообщение shinsei »

tmp.jpg
(84.28 КБ) 387 скачиваний

Это настройка 32А в протеусе
Иногда только ошибившись ты понимаешь как попал.
shinsei
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс окт 18, 2015 19:43:37
Откуда: Одесса

Re: Atmega32A, В Чём Ошибка?

Сообщение shinsei »

Попробовал в протеусе простую схему с 32А сделать. На ацп датчик изгиба, а на РВ0 просто светодиод. Всё равно не работает. Ставлю мегу8, нормально пашет. Думаю в программе проблема или может в протеусе в настройках меги?
Иногда только ошибившись ты понимаешь как попал.
Аватара пользователя
Mishany
Электрический кот
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Re: Atmega32A, В Чём Ошибка?

Сообщение Mishany »

изначально для какого камня пишеться программа? регистры настройки переферии могут отличаться на 8 и 32, судя по вашим манипуляциям вы одну прошивку кидаете на разные камни.... на одном камне эта прошивка работает, а на другом нет?
shinsei
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс окт 18, 2015 19:43:37
Откуда: Одесса

Re: Atmega32A, В Чём Ошибка?

Сообщение shinsei »

Изначально программа писалась для 8, там она и работала. Данную программу я перекомпелировал под 32А и тут возник вопрос с портом В. Сразу повторюсь, что при перекомпеляции выбирался 32а, ставилась частота 12МГц. Компиляция прошла успешно, но при загрузке в протеусе в 32а, когда запускаешь эмуляцию работы порт В не реагирует, то есть на нем постоянно 0
Иногда только ошибившись ты понимаешь как попал.
Аватара пользователя
Art_el
Открыл глаза
Сообщения: 40
Зарегистрирован: Пн фев 23, 2015 12:52:10
Откуда: Тайга

Re: Atmega32A, В Чём Ошибка?

Сообщение Art_el »

shinsei писал(а):Может в протеусе в настройках 32А, что-то еще добавить надо кроме загрузки прошивки и указания 12МГц?


Если выбран нужный hex файл (именно для mega32 а не mega8) то ничего дополнительно менять не надо.

shinsei писал(а):Попробовал в протеусе простую схему с 32А сделать. На ацп датчик изгиба, а на РВ0 просто светодиод. Всё равно не работает.


Уж сколько раз твердили миру... - не надо в протеусе рисовать схему точно такую какая она должна быть, надо ставить цифровые а не аналоговые резисторы... если надо посмотреть уровень сигнала на ножке - надо просто на ножку вешать датчик логического уровня и добавлять в схему анализатор - вот тогда будет конкретно видно, а такое включение диода с резистором - и может давать ноль на ножке.

Ещё раз повторюсь - схема спаянная в железе может отлично работать и при этом в протеусе эта схема может не работать совсем, не надо в протеус перерисовывать схему. В протеусе надо рисовать примитив схемы.

shinsei писал(а):Почему на 8 работала, а под 32А компилирую - нет.

Во первых, надо обязательно в свойствах проекта поменять чип, сохранить (применить) изменения, затем компилировать
при компилировании, проверить что компилятор заменил -mmcu=atmega8 на atmega32

И вообще, лучше для atmega32 создать отдельный проект, чтобы не запутаться где какой hex файл.
shinsei
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс окт 18, 2015 19:43:37
Откуда: Одесса

Re: Atmega32A, В Чём Ошибка?

Сообщение shinsei »

При написании под 32а, на АТМЕЛЕ, я создал проект именно под 32а и заново переписал программу. Поэтому в проекте нигде нет и не было ссылок на 8.
Иногда только ошибившись ты понимаешь как попал.
Аватара пользователя
Mishany
Электрический кот
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Re: Atmega32A, В Чём Ошибка?

Сообщение Mishany »

а регистры и их содержимое тоже из даташита на 32мегу?
Аватара пользователя
alex_
Опытный кот
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Re: Atmega32A, В Чём Ошибка?

Сообщение alex_ »

Ну во первых чтобы разобраться в чём проблема начни с простого, для начала сляпай самую примитивную прошивку для того чтобы просто ногой дрыгала, если всё ОК потихоньку навешивай и тести, если не заработало ищи косяк, в простой проге всегда проще разобраться чем в навороченной.
Удачи :))
shinsei
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс окт 18, 2015 19:43:37
Откуда: Одесса

Re: Atmega32A, В Чём Ошибка?

Сообщение shinsei »

Попробовал в протеусе простую схему с 32А сделать. На ацп датчик изгиба, а на РВ0 просто светодиод. Всё равно не работает. Ставлю мегу8, нормально пашет. Думаю в программе проблема или может в протеусе в настройках меги?
Иногда только ошибившись ты понимаешь как попал.
Аватара пользователя
alex_
Опытный кот
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Re: Atmega32A, В Чём Ошибка?

Сообщение alex_ »

Для начала простой ногодрыг нужен, не завязанный ни на что, может у тебя АЦПха не то читает. У меня был случай недавно, отлаживал прошивку для устройства плавного включения и гашения подсветки в заданное время. Утром плавно зажигает вечером плавно гасит, и там 2 параметра утро и вечер, в протеусе всё ОК, залил прошивку, не работает, перепрошил проверил, не работает, думаю какого фига, время проходит а свет не включается. Пол дня проплясав с бубном и несколько раз перепрошив контроллер(при этом правил прошивку) пришёл к выводу что сам дурак, называется банально запарился и выпустил из виду такую мелочь, что время утра должно быть меньше по значению чем время вечера(вечер 10 часов а утро в 15), прошивка то не дура всё выполнила как ей и предназначалось. Поменяв местами значения всё сразу завелось. Я к чему веду: даже малейший косяк по недосмотру может привести к закипанию мозга.
Думаю в программе проблема или может в протеусе в настройках меги
Да там настроек то толком и нет, всё по дефолту кроме тактовой частоты и подключаемого файла прошивки.
Кстати глянул на скриншот твоей схемы, ноги AREF и AVCC почему то висят в воздухе, ну опорное можно и внутреннее использовать а вот без питания аналоговой части я думаю что он врят ли заработает :roll: И небольшое замечание по коду, всё плоское, очень сложно читать что во что покладено, и коментариев нет, сам потом через полгода когда решишь код доработать долго будешь вспоминать: А нафига я это так сделал.
Кстати пример кода как надо писать пост от Ср авг 12, 2015 08:47:44
shinsei
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс окт 18, 2015 19:43:37
Откуда: Одесса

Re: Atmega32A, В Чём Ошибка?

Сообщение shinsei »

Всё, тему можно закрывать, разобрался, всё отлично работает. Исходная программа работоспособна.
Просто в протеусе на фоторезисторе надо было поднять освещение и всё сразу заработало. Обнаружил это когда подключил ЖК дисплей.
Иногда только ошибившись ты понимаешь как попал.
Аватара пользователя
alex_
Опытный кот
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Re: Atmega32A, В Чём Ошибка?

Сообщение alex_ »

Во видишь, как я выше и говорил мелкий косяк а всю малину портит :))
shinsei
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс окт 18, 2015 19:43:37
Откуда: Одесса

Re: Atmega32A, В Чём Ошибка?

Сообщение shinsei »

Я пытался решить этот вопрос на 4 форумах. На forum.cxem.net - тишина, как и на myrobot.ru, на http://forum.easyelectronics.ru/viewtop ... 92#p413892 с умным видом несли какую-то пургу, говоря что пишут на ассемблере при этом в программе у меня не понимают некоторые действия, ну если не можешь помочь нафига засорять и только на этом форуме, ЭТО НЕ РЕКЛАМА)))), хотя бы давали советы в какую сторону копать, а не обсирали (сори за французский).
Посему спасибо ещё раз тем, кто откликнулся на мой пост.
Иногда только ошибившись ты понимаешь как попал.
shinsei
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вс окт 18, 2015 19:43:37
Откуда: Одесса

Re: Atmega32A, В Чём Ошибка?

Сообщение shinsei »

Если выбран нужный hex файл (именно для mega32 а не mega8) то ничего дополнительно менять не надо.


К сожалению надо, там есть две позиции которые надо поменять иначе протеус не будет запускать симуляцию и выдаст ошибку.
Иногда только ошибившись ты понимаешь как попал.
Ответить

Вернуться в «AVR»