roboforum.ru

Технический форум по робототехнике.
Текущее время: 01 ноя 2024, 16:10

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 2149 ]  На страницу Пред.  1 ... 123, 124, 125, 126, 127, 128, 129 ... 144  След.
Автор Сообщение
 Заголовок сообщения: Re: МикроКонтроллер AVR начинающим - общие вопросы
СообщениеДобавлено: 30 ноя 2011, 14:33 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2253
Откуда: Екатеринбург
прог. языки: асемблер AVR
Знать и понимать как и что работает - не круто, а просто необходимо. Поэтому я за то, чтобы начинали с асемблера. Теперь по конкретным вопросам.
Цитата:
1.Не как не могу понять для чего нужен стек?


Стек - это определенным образом организованная часть ОЗУ, организация по принципу (первым зашел - последним уйдешь. Представьте как народ в тупик набивается). У стека есть указатель стека - он всегда указывает на первую свободную ячейку ОЗУ. А теперь для чего он нужен. Когда выполняется код - он выполняется шаг за шагом. Когда встречается команда "вызов подпрограммы" - эта размеренность прерывается, нужно прыгнуть в эту подпрограмму. Так вот в стеке запоминается адрес возврата из подпрограммы, чтоб не забыть в какое место возвращаться. Также в стеке можно хранить содержимое регистров.

Цитата:
2.что за регистры xyz и вообще по ним я ничего не понял.

Это парные регистры-указатели. В них можно загрузить адрес ОЗУ и специальными командами писать данные в ОЗУ по этим адресам.

Цитата:
3.что это такое LDI ZL,low(M2)
LDI ZH,High(M2)


М2 - это метка, которая при компилиции станет адресом. Хай и лоу - это спецслова асемблера, которые двухбайтный адрес разбивают на два куска для записи в два однобайтных регистра.

Цитата:
4.Зачем вообще надо перепрыгивать с одной строчки памяти на другую,если можно просто ставить метки.


Вопрос не понял. Метки использовать можно и нужно, прыгать без меток, задавая прямо адрес - не хорошо. Такой код можно увидеть в листингах сишных программ - там меток никто ставить не будет, метки - это для людей.

Цитата:
5.не смог понять для чего это нужно да и что это вообще такое? http://easyelectronics.ru/img/AVR_kurs/new/ak8.gif


Эта картинка всего лишь говорит, что регистры - это всего лишь ячейки ОЗУ по определенным адресам, к которым можно обращаться по имени.

Цитата:
6.Для чего ставиться в некоторых местах знак $?


Этот знак - признак 16-тиричного числа. Можно заменить 0х, но это ведь два символа.

Цитата:
7.И вообще я не понял самой сути регистров, то есть регистры это все? я могу назначить константу регистром потом удалть и назначить регистром что-то другое? Можно ли вообще создать переменную x и присвить ей какое-то значение или слово?


Регистр - это именованная ячейка памяти, расположенная в ОЗУ по определенному адресу. В ней можно хранить байт данных, читать и писать. А что эти данные означают - решает программист.

Цитата:
8.почему стек записывается с конца озу, а не просто в отдельной памяти? почему ее нету?


В некоторых моделях авр нет ОЗУ вообще, а стек есть (аппаратный). Для них можно писать только на асемблере. В остальных стек не вынесен отдельно и это очень удобно: вы сами его помещаете куда хотите и сами следите за ним. В конец памяти стек помещают чтобы не заботиться о его переполнении (так он получается максимального размера).

Цитата:
9.не могу понять что такое прерывания, обьясните простым и доступным языком.\


Прерывания - это процесс прерывания :D выполнения основной программы для выполнения каких-либо действий, требующих немедленной реакции. Допустим у вас индикатор с динамической индикацией. Периодически надо зажигать новое знакоместо. Вообще прерывания позволяют иметь квазимультизадачность (в каждый момент времени делается только одно действие, все действия выполняются по очереди, очень быстро, поэтому кажется что одновременно).

Цитата:
10. к каким ножка в atmega16a-pu подключать кварц? Зачем он нужен? почему к кварца такие значения до тысячных для чего это нужно?
Пока все, дальше - больше.
Заранее спасибо.


К каким ногам подключать - смотрите в даташите, на второй странице рисунок. Кварц нужен для синхронизации работы МК, потому что в нем все должно быть синхронно: в определенные моменты времени должны выполняться определенные действия. Все кварцы имеют конкретную частоту, очень точно поддерживаемую производителем. Поэтому столько цифр после запятой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллер AVR начинающим - общие вопросы
СообщениеДобавлено: 30 ноя 2011, 15:54 
Не в сети

Зарегистрирован: 06 ноя 2011, 01:32
Сообщения: 66
регистров ведь всего 32 то есть могу задать 32 переменных? можно ли написать что то типа того: x=5? а дальше оперировать с x-ом? про кварц понял но зачеем такое разнообразие этих кварцов? Про прервания так и не понял.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллер AVR начинающим - общие вопросы
СообщениеДобавлено: 30 ноя 2011, 16:11 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Регистры - это такие ячейки ОЗУ. Основное отличие регистров от других ячеек ОЗУ, которые составляют основное ОЗУ AVR, те самые полкилобайта или сколько там в даташите указано - регистры находятся прямо в ядре AVR. Это вообще говоря единственные ячейки памяти, с которыми возможны операции. Например, чтобы сложить 2 числа - они должны находиться в регистрах и результат будет помещен в регистр. Чтобы работать с данными из основного ОЗУ - их надо считывать в регистры и по необходимости сохранять обратно, этим занимаются соответствующие команды ld... и st... . Т.е. ты можешь иметь переменные и в регистрах (не более 32, а реально меньше), и в основном ОЗУ, но последние тебе придется вытягивать временно в какие-то регистры чтобы что-то с ними сделать.

По поводу x - ассемблер AVR позволяет давать регистрам имена и потом работать с этими именами (алиасами). Но x=5 написать нельзя, потому что в асме нету команды '=' :)

Кварцы бывают разные. потому что для разных задач нужны разные частоты. Реально для аврок вариантов немного: 8 или 16 МГц - просто для работы на максимальной скорости, 14.7456 или 7.3728 для точной скорости UART 115200 ну и еще может 12 МГц для программного USB.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллер AVR начинающим - общие вопросы
СообщениеДобавлено: 30 ноя 2011, 16:28 
Не в сети

Зарегистрирован: 06 ноя 2011, 01:32
Сообщения: 66
вот, спасибо всем большое, раобрался)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллер AVR начинающим - общие вопросы
СообщениеДобавлено: 01 дек 2011, 14:24 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Это тебе только так кажется... ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллер AVR начинающим - общие вопросы
СообщениеДобавлено: 02 дек 2011, 15:51 
Не в сети

Зарегистрирован: 06 ноя 2011, 01:32
Сообщения: 66
Вот опять я)
1.А можно ли обьявить переменную на си так:
char i
i = 1
2.char i
for (i=5; i<20; i+=4)
это условие зациклица же? а на сайте proavr указано что нет.
ведь каждый раз когда будет начинаться цикл i будет присваиваться значение 5.
3. И я не понял значение этих строк Операции, приведённые на одной строчке, имеют одинаковый приоритет. Операции, помеченные как R->L, исполняются справа налево
4. И еще там написано что максимальное значение i может быть 255 это так? а можно переменной i присвоить строку?
5.можно ли обьявить лобальную переменную перед функцией main?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллер AVR начинающим - общие вопросы
СообщениеДобавлено: 02 дек 2011, 16:11 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 995
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
bartik226 писал(а):
Вот опять я)
1.А можно ли обьявить переменную на си так:
char i
i = 1

Да можно, только везде ; в конце.
bartik226 писал(а):
2.char i
for (i=5; i<20; i+=4)
это условие зациклица же? а на сайте proavr указано что нет.
ведь каждый раз когда будет начинаться цикл i будет присваиваться значение 5.

Это не условие, это цикл. Он будет выполнятся 4 раза со значениями i = 5,9,13,17
bartik226 писал(а):
3. И я не понял значение этих строк Операции, приведённые на одной строчке, имеют одинаковый приоритет. Операции, помеченные как R->L, исполняются справа налево

не совсем понял про что вы?
bartik226 писал(а):
4. И еще там написано что максимальное значение i может быть 255 это так? а можно переменной i присвоить строку?

все зависит от типа переменной. Если как вы выше писали char i; то i занимает 1 байт и никакая строка туда не может быть записана, только 1 символ. Вот если char text[200]; то это уже массив однобайтовых символов, туда можно записать строку не длиннее 200 символов.
bartik226 писал(а):
5.можно ли обьявить лобальную переменную перед функцией main?

Глобальную можно.

Добавлено спустя 4 минуты 15 секунд:
Если вы совсем новичек в программировании не читайте не в коем случае сайт proavr или 123авр. Изложение языка Си там крайне непоследовательное, нелогичное и только запутает вас. Читайте нормальную книжку по Си для чайников. А из курса проавр берите только специфику микроконтроллеров.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллер AVR начинающим - общие вопросы
СообщениеДобавлено: 02 дек 2011, 16:24 
Не в сети

Зарегистрирован: 06 ноя 2011, 01:32
Сообщения: 66
не я не новичек вроде, ну почти все там ясно, я на питоне писал раньше там примерно также, только есть ньюансы и различие в написании.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллер AVR начинающим - общие вопросы
СообщениеДобавлено: 02 дек 2011, 22:01 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
bartik226 писал(а):
а на сайте proavr указано что нет.
Раз указано - значит не зациклится. :D

Эти куски кода удобно протестировать самому в PROTEUS и увидеть как он выполняется.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллер AVR начинающим - общие вопросы
СообщениеДобавлено: 03 дек 2011, 00:35 
Не в сети

Зарегистрирован: 06 ноя 2011, 01:32
Сообщения: 66
спасибо за ответы, вот еще вопрос накопились.
1.VMLAB имеет только 8 светодиодов - почему именно 8?
2.значит нужно отобразить 8 старших бит результата - т.е. биты_9_2 - для этого мы сдвигаем все биты слова ADCW вправо на 2 позиции ввобще ничего не понял, это все о прерывании:
interrupt [ADC_INT] void adc_isr(void)
{
PORTB=(unsigned char) (~(ADCW>>2));

delay_ms(127);

ADCSRA|=0x40;
не понимаю эту строку PORTB=(unsigned char) (~(ADCW>>2));
а точнее именно это (~(ADCW>>2)), тут я разобрался что тут выкидывает два бита считая справа, но зачем?
вообще не понял что такое ADSW
эти вопросы скорее к avr123.nm.ru потому как другие могут просто не понять суть проблемы

4.Почему написано DDRB=0xFF и что это делает выходами, почему именно ff? то есть что получается что DDRB=11111111 почему именно 8-мь???

кстати, что будет если идет код и посередине случается прерывание, потом выполнение кода продолжается и вот я правильно все понял, что код дальше работает так же нормально если бы не было прерывания, да?
А долго ли идут прерывание обычно? И дайте пожалуйста хоть один пример наружней работы мк, когда в нем произойдет прерывание.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллер AVR начинающим - общие вопросы
СообщениеДобавлено: 03 дек 2011, 15:17 
Не в сети

Зарегистрирован: 06 ноя 2011, 01:32
Сообщения: 66
register int beta @10;

Старший байт двухбайтовой переменной beta будет размещен в регистре общего назначения 10 а младший в регистре 11.
Не понял про размещение битов, я понимаю почему именно два, потому что int - 16 bit , но почему у них быт размещаются именно так- не понятно. И щас я еще понял что ссначала старший пишется а потом младший, НО ЧТО ОЗНАЧАЕТ @10?


Последний раз редактировалось bartik226 03 дек 2011, 20:52, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллер AVR начинающим - общие вопросы
СообщениеДобавлено: 03 дек 2011, 15:49 
Не в сети

Зарегистрирован: 13 сен 2008, 17:53
Сообщения: 157
Откуда: Иваново
прог. языки: Pascal, С
bartik226 писал(а):
DDRB=11111111 почему именно 8-мь???


А сколько ног у порта B? Каждому биту соответствует своя нога...
bartik226 рекомендую перечитать курсы заново, с особой внимательностью, вникая в каждую строчку...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллер AVR начинающим - общие вопросы
СообщениеДобавлено: 03 дек 2011, 16:33 
Не в сети

Зарегистрирован: 06 ноя 2011, 01:32
Сообщения: 66
мне не все не понятно, только некоторое. вопросы еще остались)
ну ответьте плиззз!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллер AVR начинающим - общие вопросы
СообщениеДобавлено: 04 дек 2011, 00:52 
Не в сети

Зарегистрирован: 06 ноя 2011, 01:32
Сообщения: 66
и скажите пожалуйста есть ли в avrstudio 5 типа шаблонов как в cvavr if, while, for и т.д.?

Добавлено спустя 1 час 26 минут 23 секунды:
Код:
#include <avr/io.h>
#include <avr/m8_128.h>      
#define PA_OUT DDRA = 0xFF
int initialization(void)
{

   PA_OUT;

   TCCR0 = 0x05;
}
int main(void)
{
   initialization();
   while(1)
    {
        PORTA++;
      while (!(TIFR&0x01));
      TIFR = 0x01;
    }
return 0;
}

вот такой кол в avrtudio 5 выдает ошибку Warning control reaches end of non-void function C:\AVRProjects\AVRGCC2\AVRGCC2\AVRGCC2.c здесь while (!(TIFR&0x01)); в этом слове TIFR, в чем ошибка?этот код взят с задачи номер 1 на сайте проавр, там пишут под компилятор cvavr.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллер AVR начинающим - общие вопросы
СообщениеДобавлено: 04 дек 2011, 10:11 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
То что ты привел - это просто предупреждение, что ты объявил функцию, как возвращающую целое число, но не возвращаешь его :)

А ошибка - ну может этого регистра в этом AVR нету? Щас лень смотреть в ДШ.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2149 ]  На страницу Пред.  1 ... 123, 124, 125, 126, 127, 128, 129 ... 144  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO