Мелкие вопросы по МК и ПЛИС.
хочу заниматься МК, но нет ни программматора, ни МК. вопрос: какой лучше брать МК и для него какой собрать программатор 
"Не спорьте с идиотами, не то вы опуститесь до их уровня и они задавят вас своим опытом." (с) Марк Твен
- Реклама
- Сообщения: 3
- Зарегистрирован: Пн мар 19, 2012 13:52:59
Здраствуйте, вопрос по микроконтроллеру ATmega164P-20PU:
из дата шита "Прерывание и возобновление работы по изменению состояния на выводе"
Как поведет себя устройство если изменится состояние сразу на нескольких ножках?
из дата шита "Прерывание и возобновление работы по изменению состояния на выводе"
Как поведет себя устройство если изменится состояние сразу на нескольких ножках?
Есть соотв. ножки для прерываний. При изменении состояния (если прерывания на этих ногах разрешены) МК пойдёт обрабатывать сначала то прерывание (если они произойдут одновременно), у которого выше приоритет. Затем следующее.Chiaki74 писал(а):Как поведет себя устройство если изменится состояние сразу на нескольких ножках?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Странный вопрос. Как запрограммируете, так и поведет... Если имеете ввиду ножки PCINT, то там на каждый порт свой вектор прерывания, если уровень изменится одновременно на разных ножках разных портов, программа сначала перейдет на тот вектор, у которого адрес меньше (так если я не ошибаюсь у них приоритеты расставлены).
Последний раз редактировалось Engineer_Keen Пн мар 19, 2012 14:10:18, всего редактировалось 1 раз.
- Реклама
- Сообщения: 3
- Зарегистрирован: Пн мар 19, 2012 13:52:59
просто как я понял, у этого микроконтроллера все линии ввода/вывода c поддержкой прерывания)хотите сказать для каждого из них можно написать отдельную подпрограмму и установить приоритет?))Gudd-Head писал(а):Есть соотв. ножки для прерываний. При изменении состояния (если прерывания на этих ногах разрешены) МК пойдёт обрабатывать сначала то прерывание (если они произойдут одновременно), у которого выше приоритет. Затем следующее.
спасибо, то что нужно)Engineer_Keen писал(а):Странный вопрос. Как запрограммируете, так и поведет...
Оверпостинг и оверквотинг на первый раз поправил. В дальнейшем пользуйтесь кнопкой "Правка"
Gudd-Head
На конкретную ножку вектора есть только для INT0,INT1,INT2. Прерывания PCINT-PCINT срабатывают при изменении состояния любой из ног в пределах одного порта (при условии что эти ноги заданы в соответствующих регистрах PCMSK). Если вы хотите иметь разные подпрограммы для каждой ножки, то уже в самом обработчике прерывания нужно определять какая нога порта изменилась и в соответствии с этой информацией переходить к конкретной подпрограмме.
- Сообщения: 3
- Зарегистрирован: Пн мар 19, 2012 13:52:59
спасибо за разъяснения,очень помогли.Engineer_Keen писал(а):На конкретную ножку вектора есть только для INT0,INT1,INT2. Прерывания PCINT-PCINT срабатывают при изменении состояния любой из ног в пределах одного порта (при условии что эти ноги заданы в соответствующих регистрах PCMSK). Если вы хотите иметь разные подпрограммы для каждой ножки, то уже в самом обработчике прерывания нужно определять какая нога порта изменилась и в соответствии с этой информацией переходить к конкретной подпрограмме.
приобрел на сантеке ( http://www.suntekstore.co.uk/product-14 ... apter.html ) USBasp программатор.
по началу не было никаких проблем, всякие атмеги 8/16/32 шьет на ура.
недавно понадобилось разработать девайс на 13 тиньке. сделал простой переходник с ISP разъема на SO-8, и получил жуткую головную боль.
проблема №1 - единственная программа которая увидела тиньку это eXtreme Burner AVR, другие (аврдуд, хазам) не видели ее вообще (важное замечание - тот же аврдуд и хазам прекрасно шили и читали атмеги 8/16/32). причем пробовал разные тиньки, и 13v, которая валялась у меня в загажнике, и новую 13а.
проблема №2 - экстримбёрнер считывает тиньку, считывает фузы и калибровочные байты. но записывает как-то странно, пишет 32 байта FFы затем 32 байта прошивки, опять 32 байта FFы, опять 32 байта прошивки, и так далее.
не знаю в какую сторону копать, может кто подскажет?
по началу не было никаких проблем, всякие атмеги 8/16/32 шьет на ура.
недавно понадобилось разработать девайс на 13 тиньке. сделал простой переходник с ISP разъема на SO-8, и получил жуткую головную боль.
проблема №1 - единственная программа которая увидела тиньку это eXtreme Burner AVR, другие (аврдуд, хазам) не видели ее вообще (важное замечание - тот же аврдуд и хазам прекрасно шили и читали атмеги 8/16/32). причем пробовал разные тиньки, и 13v, которая валялась у меня в загажнике, и новую 13а.
проблема №2 - экстримбёрнер считывает тиньку, считывает фузы и калибровочные байты. но записывает как-то странно, пишет 32 байта FFы затем 32 байта прошивки, опять 32 байта FFы, опять 32 байта прошивки, и так далее.
не знаю в какую сторону копать, может кто подскажет?
-Трансформатор!
-Я!
-Выйти из строя!
-Есть!
-Я!
-Выйти из строя!
-Есть!
Сразу на ARM, не забивайте голову всякими AVR, Mega'ми, Tit'kami, Pic'ами и прочим "ширпотребом".smihan99 писал(а):хочу заниматься МК, но нет ни программматора, ни МК. вопрос: какой лучше брать МК и для него какой собрать программатор
Например программатор-отладчик сразу на борту с STM32-Discovery. Камень там низкопотребляющей серии STM32L152RB.
Отдельный отладчик (например ST-Link) стоит подороже. Можно попробовать собрать MT-Link, но для него придётся найти AT91xxxx (не помню какой) и прошить.
В конце концов конечно Вам выбирать на чём остановиться. Из плюсов STM (про LPC и др. не знаю) - почти все камни с одинаковым количеством ножек взаимозаменяемы, например вместо слабенького МК можно поменять в будущем (если не хватит мощей) на более мощный.
Вот ссыль ТЫЦ где можно посмотреть на программаторы, их цену, и там же есть документация.
А тут, ТЫЦ на МК, в данном случае с ядрами ARM.
- Сообщения: 172
- Зарегистрирован: Пн мар 19, 2012 13:04:11
Ребят подскажите, у меня есть 12 кнопок и 12 диодов, должен гореть всегда только один диод, если зажигается следующий то предидущий должен гаснуть. Как мне с помощью массива реализовать данный алгоритм? Или просто сделать его короче, что бы не писать каждый порт по отдельности?
Массив-то причем здесь?
Docendo discimus
Во-первых не совсем понятно какое взаимодействие с кнопками.
Во-вторых, чтобы что-то менять в алгоритме, его нужно для начала увидеть.
Во-вторых, чтобы что-то менять в алгоритме, его нужно для начала увидеть.
- Сообщения: 172
- Зарегистрирован: Пн мар 19, 2012 13:04:11
Ну обычно реализуют через Массив, или я не прав?
Алгоритма нет еще пока (( я даже не знаю как его написать, пока лишь сделал так
if((PINA & (1<< PINA0)) == 0)
{
PORTC = 0xff;
PORTD = 0xff;
PORTC = 0x00000001;
}
if((PINA & (1<< PINA1)) == 0)
{
PORTC = 0xff;
PORTD = 0xff;
PORTC = 0x00000010;
}
и т.д.
Алгоритма нет еще пока (( я даже не знаю как его написать, пока лишь сделал так
if((PINA & (1<< PINA0)) == 0)
{
PORTC = 0xff;
PORTD = 0xff;
PORTC = 0x00000001;
}
if((PINA & (1<< PINA1)) == 0)
{
PORTC = 0xff;
PORTD = 0xff;
PORTC = 0x00000010;
}
и т.д.
Ткни пальцем где тут массив?
Docendo discimus
- Сообщения: 172
- Зарегистрирован: Пн мар 19, 2012 13:04:11
Вот я и спрашиваю, как сократить данный алгоритм? каким образом, здесь нет массива.
- Сообщения: 172
- Зарегистрирован: Пн мар 19, 2012 13:04:11
может еще подскажите, почему этот код выдает ошибку? пишу в codevision
#include <mega128.h>
#define StartConvAdc() ADCSRA |= (1<<ADSC)
#define KEY_NULL 0
#define KEY_S1 1
#define KEY_S2 2
#define KEY_S3 3
#define KEY_S4 4
void main(void)
{
//настраиваем порты
DDRA = 0xff;
PORTA = 0xff;
DDRF = 0xff;
PORTF = 0xff;
DDRE = 0xff;
PORTE = 0xff;
while (2)
{
if ((PINA & (1<< PINA0)) == 0)
{
main1 (1);
}
}
}
void main1 (void)
{
// any code
}
#include <mega128.h>
#define StartConvAdc() ADCSRA |= (1<<ADSC)
#define KEY_NULL 0
#define KEY_S1 1
#define KEY_S2 2
#define KEY_S3 3
#define KEY_S4 4
void main(void)
{
//настраиваем порты
DDRA = 0xff;
PORTA = 0xff;
DDRF = 0xff;
PORTF = 0xff;
DDRE = 0xff;
PORTE = 0xff;
while (2)
{
if ((PINA & (1<< PINA0)) == 0)
{
main1 (1);
}
}
}
void main1 (void)
{
// any code
}
Слишком неправильно все написано.
Docendo discimus
- Сообщения: 172
- Зарегистрирован: Пн мар 19, 2012 13:04:11
а что именно не правильно? мне нужно при условии в одной функции, перейти к другой.
А кучу одинаковых IF-ов лучше заменить на Switch-case. Массив тут по-моему не нужен...
И какую ошибку выдает код?
И какую ошибку выдает код?


