Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Dexa
Встал на лапы
Сообщения: 119
Зарегистрирован: Ср ноя 07, 2007 15:17:20
Контактная информация:

Сообщение Dexa »

Подскажите пожалуйста схему лабораторного стенда на atmega8, чтобы была возможность поработать со всей перефирией (ну и + кнопочки с диодами).
......aлкоголь расширяет сосуды, курение их сужает, а сдают почему-то нервы......
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Поищите по форуму, народ выкладывал всяческие макетки и отладочные платы.
Оптимизм х (Опыт + Знания) = const
Аватара пользователя
Vergilium
Грызет канифоль
Сообщения: 260
Зарегистрирован: Ср фев 13, 2008 14:41:32
Откуда: Украина, Николаев

Сообщение Vergilium »

Здраствуйте и извените что повторяюсь. Пытаюсь передать в МК строку (массив символов) через UART но нефига не получается. В нете смотрел, везде примеры приема только одного байта и все. Главное передавать строки я научился, этого в сети хватает.
Помогите пожалуйста, ткните носом или может книгу какуето посоветуете.

PS програмирую на WinAVR, MK Atmega16
Немного нервов и девайс готов
Аватара пользователя
Pooher
Мучитель микросхем
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Ну, строка состоит из отдельных байтов. Вам надо не "принимать строку", а формировать её из нескольких принятых байт. Если Вы опишите задачу (бегущая строка и т. д. ) то ответ Вы получите значительно быстрее.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Аватара пользователя
Vergilium
Грызет канифоль
Сообщения: 260
Зарегистрирован: Ср фев 13, 2008 14:41:32
Откуда: Украина, Николаев

Сообщение Vergilium »

Именно бегущая строка. Принимаю массив и вывожу на LED матицы.
Одну букву выводить могу а вот как сформировать строку. вот это для мения непонятно. Понятно, что каждый принятый байт засовывать в элемент массива, но как это сделать еще не понимаю, это же не присвоешь просто так.
Немного нервов и девайс готов
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

Vergilium писал(а):извените что повторяюсь.
Придется и мне повториться - я же давал ссылку, где посмотреть, и что? Что там не подошло?

Приведенный тобой исходник не должен вообще ничего принимать по USART, так как в нем USART отключен! (функция usart_init() объявлена, но не вызывается)
Далее - обработчик прерывания зачем-то пишет принятый байт всегда в первый элемент массива simbol.
Еще - обработка принятой информации (ну, допустим, что она-таки будет принята, после некоторых исправлений) ведется только один раз, после начала работы м/к - в цикл while(1) эта обработка не включена, то есть принятые через USART байты ни к каким изменениям не приведут.
Наконец, цикл, объявленный как "for (i=0; i<=arr_size;i++)" будет перебирать не только массив simbol, но и еще один байт, за пределами массива.
Задание размеров массивов сделано нелогично - это будет отдельная головная боль при отладке.

Все ошибки, кроме первой, пока никак не сказываются на поведении м/к - они "заработают" только когда ты включишь USART и разберешься с побайтовым приемом строки в массив simbol[5], а не в его первый элемент.

Пока так.
Впрочем, нет - не всё ещё. Как я понимаю, никаких сдвиговых регистров в схеме нет и столбец светодиодов предполагается поджигать из порта А - так? Но тогда вот эта инструкция - "PORTA = count;" также ошибочна, поскольку в порт А будет выводиться не бегущая единичка, а двоичная фигня.
Аватара пользователя
Vergilium
Грызет канифоль
Сообщения: 260
Зарегистрирован: Ср фев 13, 2008 14:41:32
Откуда: Украина, Николаев

Сообщение Vergilium »

Хочу извенится за тугодумство, просто все в голове пермишалось, этот институт да ище и МК освоить хочу, вобщем запутался.
Но сейчас разобрался и все работает, и даже вроде правильно. На этом конечно мои вопросы не закончились. Так как поиски хорошей книженки мне результатов не дали буду спрашивать и надоедать. :) Сразу прошу не ругатся за тупые вопросы но ответы на них не нашел.

Во первых: что имеится ввиду когда встречаю символы в коде << или >>, например "1<<EEWE" и почему просто не присвоить регистру значение;

Во вторых: встречалось "UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1)" что здесь за операции, имеется ввиду не собственно что эта строка выполняет, а логические операции |= и просто |;

Вот еще все в куче "I2C_DDR&=~(1<<SDA_LN);" что это делает "&=~(1<<".
Заранее спасибо.
Немного нервов и девайс готов
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Сообщение IfoR »

Vergilium писал(а):Хочу извенится за тугодумство, просто все в голове пермишалось, этот институт да ище и МК освоить хочу, вобщем запутался.
Но сейчас разобрался и все работает, и даже вроде правильно. На этом конечно мои вопросы не закончились. Так как поиски хорошей книженки мне результатов не дали буду спрашивать и надоедать. :) Сразу прошу не ругатся за тупые вопросы но ответы на них не нашел.

Во первых: что имеится ввиду когда встречаю символы в коде << или >>, например "1<<EEWE" и почему просто не присвоить регистру значение;

Во вторых: встречалось "UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1)" что здесь за операции, имеется ввиду не собственно что эта строка выполняет, а логические операции |= и просто |;

Вот еще все в куче "I2C_DDR&=~(1<<SDA_LN);" что это делает "&=~(1<<".
Заранее спасибо.


<< и >> это операции сдвига на n влево и в право, при чём пустоты после сдвига заполняются нулями, т.е. 1<<EEWE это значит что число 0b00000001 (это 1 в десятичной) мы сдвигаем влево на EEWE (определено в #define на какое-то число) число раз. Напремер, если EEWE это 5 то получим 0b00000001<<5 = 0b00100000
Если будет 0b00000001>>5 то это даст 0, а если 0b01000000>>5 то будет 0b00000010.
А нужно это собсно для операций |= &= ^= (это побитовые операции или, и, исключающее или, между переменной к которой присвается результат и правой частью)... Например, есть у нас переменная AAA с содержанием 0b00100010. Нам нужно зажечь 1 и 7 бит. Для это выполняем такую фичу AAA |= (1<<0)|(1<<6);
Происхотит тут вот что, для начала производятся сдвиги, в результате получается: AAA |= 0b00000001|0b01000000;
Затем выполняется побитовое или: AAA |= 0b01000001;
Теперь выполняется побитовое или с присвоением результата левому операнду, т.е. эта операция аналогична AAA = AAA|0b01000001; Ну а т.к. AAA = 0b00100010, то получается AAA = 0b00100010|0b01000001; что при выполнении побитового или получается AAA = 0b01100011;
Всё... 1 и 7 биты включены. А чтобы выключить теперь 2 и 6 биты то нам тут надо применить побитовое и. Здесь ~ - видимо побитовое не (никогда не использовал - я плохой программист! :)) ). Надо выполнить какую штуку:
AAA &= ~((1<<1)|(1<<5));
Что тут происходит, ну с (1<<1)|(1<<5) подробности опустим, т.к. только что это описывал, результатом будет 0b00100010, получаем AAA &= ~(0b00100010);
Теперь применяется побитовое не, результатом будет AAA &= 0b11011101;
Ну, а затем применяется побитовое и, между AAA и 0b11011101:
AAA = AAA & 0b11011101;
Это у нас AAA = 0b01100011 & 0b11011101; Выполняем побитовое и, получаем AAA = 0b01000001;
Вот. Если разобраться, то всё просто. :)
Последний раз редактировалось IfoR Сб сен 19, 2009 04:58:18, всего редактировалось 1 раз.
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

вобщем, у меня дроссель, фильтрующий питание для АЦП, находится по корпусом МК. рядом с дросселем, проходит шина ISP. Можно ли так? или МК глючить будет?
Не умеешь - не берись, но не взявшись не научишься...
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

и всегда ли надо в схему выводы для программирования отводить через резисторы в 10К?

Изображение
я например просто вывел их на штыри... без резисторов.
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Сообщение Meteor »

Vergilium писал(а): почему просто не присвоить регистру значение;

Присвоить значение можно, и многие так делают. Другое дело разбираться в коде трудно, что включил, что нет? С подобным же стилем программиования все какна ладони: установили бит URSEL в 1, значит будет передано в регистр UCSRC.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Сообщение Meteor »

Stalker46 писал(а):и всегда ли надо в схему выводы для программирования отводить через резисторы в 10К?
я например просто вывел их на штыри... без резисторов.

Я цепляю, не смотря на наличие внутренних, резисторы на 5В (подтяжка). Что касается работы схемы, то возникают сомнения в целесообразности подобного подключения. Если линия будет работать на цифру - можно не обеспечить логического нуля. На своих платах завел 2 правила:
1) Либо не подключать нагрузку выходами к выводам ISP;
2) Либо, если край как надо, ставить джампера. На время программирования они изымаются и обвязка не влияет.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

во время программирования я итак не буду цеплять нагрузку на выводы программирования.
Не умеешь - не берись, но не взявшись не научишься...
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

вот как я подключил. МОжно ли так или некорректно?
Вложения
image_146853425[14].JPG
(95.46 КБ) 432 скачивания
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

можно, только зачем?
на левом разъеме (я так понимаю порт В) все эти сигналы уже есть, добавить 2 пинча на +5В и землю и не надо мутить доп.разъем.
Чем дальше, тем больше становлюсь занудой...
Изображение
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

да ладно, так сойдет))) мне так уддобней. Но со стороны технических характеристик - так надо? и что там с дросселем? можно ли его под корпусом МК держать? МК глючить не будет от посторонних помех, наведенных полем катушки?
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

не переживай, не будет. :wink:
у мняу почти на всех макетках так сделано
Чем дальше, тем больше становлюсь занудой...
Изображение
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

:wink: пасиба) :)
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

IfoR писал(а):<< и >> это операции сдвига на n влево и в право, при чём пустоты после сдвига заполняются нулями, ...
Смелое утверждение. 8) От широты души, наверное. Но, увы, несмотря на благие намерения - неверное, как было неверным и утверждение, что функции с необъявленным типом имеют тип void. Не следует забывать о наличии знакового бита, размножение которого заполнит освобождающиеся биты единицами, а также о том, что это поведение является implementation-defined (см. "ISO/IEC 9899:1999 (E)", либо библию – "Язык программирования Си", Кернигана/Ричи).
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Сообщение IfoR »

Yellow Tiger писал(а):функции с необъявленным типом имеют тип void


Неужели всё же int? Каюсь.

Yellow Tiger писал(а):Не следует забывать о наличии знакового бита, размножение которого заполнит освобождающиеся биты единицами

Ну, это только при сдвиге вправо... Ну и вобщем-то примеры приводились для положительного числа. :))
Ну а так, тоже согласен, а то я всё пытался вспомнить, когда там 1 появляются. )

Да и со static я что-то намудрил... Для объявления внешних переменный используется extern. static, же не делает переменную глобальной, но намертво фиксирует её в памяти, и она не удаляется после выполнения блока. Если блок выполняется ещё раз, то значение этой переменной сохраняются...

Вообщем, надо ещё раз пробежать справочник по c, а то что-то давно к компилятору не подходил...
Ответить

Вернуться в «Разные вопросы по МК»