| Proteus, KiCAD и другие ECAD Разработчик так или иначе сталкивается с системами автоматизированного проектирования. Данный раздел - по САПР. |
Подскажите микросхему памяти
21.02.2011, 23:14
|
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
|
Re: Подскажите микросхему памяти
Сообщение от XoDoK11
|
|
Сначала 8 тысяч импульсов посчитать.
|
Каких таких восемь тысяч? 
ТС вас как Моисей по пустыне... ENC28J60 к "микросхеме памяти" ему прицепить надобно, так что... "знание SPI и Ethernet обязательно".
|
|
|
|
21.02.2011, 23:18
|
|
|
Прописка
Регистрация: 16.11.2010
Сообщений: 196
Сказал спасибо: 20
Сказали Спасибо 42 раз(а) в 42 сообщении(ях)
|
Re: Подскажите микросхему памяти
|
|
|
|
21.02.2011, 23:23
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Подскажите микросхему памяти
Сообщение от george carpenter
|
|
Чё то лажа какая-то, при отладки сразу же щимится в прерывание
|
PEIE пришлось включать, или на всякий случай?
ADCON1=0x0F; - пользуете АЦП?
А на входе какой сигнал?
Разберитесь сначала со входом в прерывание, а обработчик потом править будем...
Последний раз редактировалось omercury; 21.02.2011 в 23:26.
|
|
|
|
21.02.2011, 23:33
|
|
|
Гражданин KAZUS.RUN
Регистрация: 17.08.2008
Сообщений: 770
Сказал спасибо: 52
Сказали Спасибо 450 раз(а) в 202 сообщении(ях)
|
Re: Подскажите микросхему памяти
Сообщение от george carpenter
|
|
Чё то лажа какая-то, при отладки сразу же щимится в прерывание
|
А флаг убирать?
void recieve(void) - сразу выходим из обработки прерывания.неправильно
Придется книги почитать.
Последний раз редактировалось XoDoK11; 21.02.2011 в 23:39.
|
|
|
|
21.02.2011, 23:37
|
|
|
Прописка
Регистрация: 16.11.2010
Сообщений: 196
Сказал спасибо: 20
Сказали Спасибо 42 раз(а) в 42 сообщении(ях)
|
Re: Подскажите микросхему памяти
Сообщение от omercury
|
|
PEIE пришлось включать, или на всякий случай?
|
Да пришлось!
Сообщение от XoDoK11
|
|
ADCON1=0x0F; - пользуете АЦП?
|
Нет, закоментил.
|
|
|
|
21.02.2011, 23:56
|
|
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
|
Re: Подскажите микросхему памяти
Сообщение от george carpenter
|
|
Нет, закоментил.
|
Так раскоментите!
|
|
|
|
22.02.2011, 00:03
|
|
|
Прописка
Регистрация: 16.11.2010
Сообщений: 196
Сказал спасибо: 20
Сказали Спасибо 42 раз(а) в 42 сообщении(ях)
|
Re: Подскажите микросхему памяти
Вообщем вот так
|
PHP код:
|
void interrupt my_isr(void)
{
if(INT0IF)
{
PORTD = 8;
SETBIT(map,1);
INT0IE=0;
INT0IF = 0;
recieve();
}
}
|
Но почему то память забивается левыми значениями.
Последний раз редактировалось george carpenter; 22.02.2011 в 00:08.
|
|
|
|
22.02.2011, 00:15
|
|
|
Прописка
Регистрация: 16.11.2010
Сообщений: 196
Сказал спасибо: 20
Сказали Спасибо 42 раз(а) в 42 сообщении(ях)
|
Re: Подскажите микросхему памяти
Скорее всего recieve() не там вызываю или хз уже что если честно
|
|
|
|
22.02.2011, 00:48
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Подскажите микросхему памяти
Сообщение от george carpenter
|
|
Скорее всего recieve() не там вызываю
|
Абсолютно точно. Надо объявить битовую переменную - флаг начала приёма последовательности данных. В прерывании отключать само прерывание и устанавливать флаг. В бесконечном цикле (while(1)) анализировать флаг, когда установится - вызов подпрограммы приёма данных. в конце подпрограммы сброс флага.
|
|
|
|
22.02.2011, 01:02
|
|
|
Прописка
Регистрация: 16.11.2010
Сообщений: 196
Сказал спасибо: 20
Сказали Спасибо 42 раз(а) в 42 сообщении(ях)
|
Re: Подскажите микросхему памяти
Подправил, код ведет себя также само. Проблема кажется не в этом!!! А в задержке между сигналами на RB3, их нужно считывать с задержкой как минимум 0,5 секунды. Пробовал раскоментить DelayMs(250) не работает. В watch массив не заполняется.
|
PHP код:
|
volatile static bank2 int map[1024];
volatile int flag = 0;
void main(void)
{
init();
PORTD = 0xFF;
while(1)
{
if ( flag == 1 ) recieve();
}
}
void recieve(void)
{
for(int i=1;i‹=SIZE-1;i++)
{
//DelayMs(250);
if (RB3 == 1)
{
SETBIT(map,i);
}
else
{
CLEARBIT(map,i);
}
}
flag = 0;
}
void init(void)
{
TRISA=0;
TRISD=0;
TRISB=0xFF;
INTEDG0 = 1;
INT0IE = 1;
GIE = 1;
//PEIE = 1;
ADCON1=0x0F;
}
void interrupt my_isr(void)
{
if(INT0IF)
{
PORTD = 8;
SETBIT(map,1);
flag = 1;
INT0IE=0;
INT0IF = 0;
//recieve();
}
}
|
Фактически логика работы кода, практически правильная, ничего не пишет в массив пока не пришло прерывание, как только пришло прерывание, начинает писать, должен писать изменяющиеся значения на RB3, которые изменяются примерно раз в пол секунды, а получается в тупую хватает первую единичку и успевает ней заполнить весь массив. Нужна задержка, почему эта не срабатывает, опять непонятно.
Последний раз редактировалось george carpenter; 22.02.2011 в 02:05.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:23.
|
|