Перейти к содержанию
    

raslmc

Участник
  • Постов

    54
  • Зарегистрирован

  • Посещение

Весь контент raslmc


  1. Спасибо что отозвались и не бросили в беде. Будем разбираться. Прошу не судить строго. В институте ей ничего не объясняли. Да и я никогда не щупал ни xilinx, ни софт. Поэтому приходится вас просить о помощи. В противном случае я бы сам посидел с бубном =) Ведь не красиво при первой же проблеме мучить других людей. Насчет курса и где учится. Знаете, я даже не интересовался. Просто давняя подруга, которой понадобилась помощь. А интернета у нее нет. Не всех жизнь радует интернетом =) Так что огромное вам спасибо.
  2. Уважаемые форумчане, добрый день. Проблема такая: Моей подруге задали в институте разобраться с xilinx. Сам я с этим не сталкивался, только с AVR. У меня к сожалению нет этой отладочной платы, да и софта тоже нет =) Поэтому и прошу у вас помощи. Вообщем плата называется spartan-3e, среда разработки ISE. Вот ее действия: 1) В ISE в schematic собрала схемку. 2) Все настроила. 3) Проверила на синтез сделала имплемент дизайн. 4) Сделала генерейт программ файл(получила bit файл). 5) Сделала в iMpact прошила плату, залила битовый файл. 6) Запрограммировала Xilinx. Она не знает как считать определенную информацию с ножки(Capture signal) чипа и потом проанализировать? Также подключен анализатор, который должен запоминать(ila). И как получить файл с расширением .prn? Прошу вас толкнуть в нужном направлении. Также прилепил саму схему. Благодарен за любой совет.
  3. Вполне возможно купить у самого производителя по родной цене. Я так и сделал. Правда отправили они через DHL.
  4. Всем добрый день. Может подойдет что нибудь из http://hoperf.com/ К примеру: http://hoperf.com/pro/RFM12B.html уже готовый радиомодуль, есть и в SMD исполнении. Забыл цену, но кажется не дороже 2$.
  5. Просто мнение

    Гоним в шею дизиртира на ветку по армам.
  6. jtag для AVR32

    Может USBProg поможет http://embedded-projects.net/index.php?page_id=147 http://embedded-projects.net/index.php?page_id=163
  7. ATxmega

    Я черз знакомого заказал и он уже купил 4 штуки ATXMEGA128A1-AU. Нет никаких проблем.
  8. Добрый день. Возникла проблема. Нужно управлять данным процессором по I2C. Нужно вывести текст на экране с помощью данного процессора. Сразуже скачал даташит. К сожалению не нашел ни примера вывода текста на экран, ни даже алгоритма, только в самом конце схема в связке с прояессором 83С654. В интернете тоже тишина. Может кто-нибудь уже сталкивался с этим или подобным телетекстовым процессором и поделится наработками или пнет в нужном направлении. Спасибо за любую помощь.
  9. RF12 и AVR

    Вы полностью правы. Дело в том, что в наличии данных модулей нет. Придется заказывать из Москвы. Просто прежде чем покупать хотел попробовать в протеусе. Вдруг не стоит даже замарачиваться с ними. А деньги на ветер бросать не охото. Конечно существуют модули с RX и TX (модуль RXQ2) интерфейсом, где и протокол не сложный. Но цена раз в 10 дороже. Поэтому остановился на этих. В любом случае два модуля RFM12 обойдутся мне примерно в 20$. Поэтому и хотел подстраховаться и проверить сначала на протеусе. А вообще протеус поддерживает работу с радиомодулями ?
  10. RF12 и AVR

    Даташит я уже скачал. Проблема найти данный модуль, чтобы можно было симулировать в Proteus.
  11. RF12 и AVR

    Скачал, вот ссылка: http://komap.net.ru/2008/11/25/proteus_74_...build_6792.html
  12. RF12 и AVR

    Добрый день. На сайте http://radiokot.ru/circuit/digital/automat/11 на схеме есть радиомодули RF02 и RF12 но в своем Proteus v7.4 и в интернете найти не смог. Скажите где можно скачать данные компоненты для симуляции в Proteus. Спасибо.
  13. Всем день добрый. Возникла необходимость удлинить Com порт на 150 метров, скорость передачи данных 115200-57600. Кабель UTP но есть возможность задействовать только 3 провода. Для RX, TX, GND. Варианты с RS232->RS485 и подобные им не подходят. Нужно именно удлинить. Кто нибудь уже сталкивался с такой задачей. Может есть схема ? Спасибо.
  14. Autobaud

    Я религиозный. Для меня ассемблер глухой лес к сожалению. А вообще кто нибудь работал с режимами сна ?
  15. Autobaud

    Я нашел этот аппноут. Но там на ассемблере. На си найти не удалось.
  16. Autobaud

    1) Если не секрет, давайте код в студию, вдруг кому нибудь пригодится(например мне) :) 2) По вашему алгоритму не получится проснуться из режима спячки. А для меня это желательно. Мне кажется разница между Вашим и моим алгоритмом в том что я использую внешние прерывания а Вы while(!(PIND&(1<<PD0)));//Ждем падение фронта ... while((PIND&(1<<PD0)));//Ждем подъем ...
  17. Autobaud

    Ксожаление нет возможности изменить протокол. Протокол без подтверждения. Просто устройство отсылает мне пакет, а я должен его принять. Первый байт - начало пакета. Он мне известен. Так что не важно что 1-й байт не принимается. Главное чтобы со второго байта все принималось корректно.
  18. Autobaud

    Я тоже так думаю. Но как это устранить ?
  19. Autobaud

    Всем добрый день. Вот решил выложить свои мучения по данной теме. Может кому нибудь пригодится. В инете так и толком ничего не нашел. Алгоритм следующий: Ногу PD0 и PD2 нужно замкнуть. 1) Устанавливаем внешнее прерывание (INT0) на захват спадающего фронта. 2) Прерывание произошло, устанавливаем внешнее прерывание (INT0) на захват восходящего фронта, устанавливаем счетчик Timer1 на отсчет времени. 3)Прерывание произошло, останавливаем таймер, запрещаем внешнее прерывание. 4)Подсчитываем битрайт, и задерживаемся(delay_us()) до конца данного байта. 5)Настраиваем скорость усарта и принимаем данные. Испытания проводил на Mega8, 16Mhz, на скоростях от 9600-210000. Главные условия, чтобы младший бит первого байта посылки был равен 1. Прием начинается со 2-го байта. Грубо говоря 1-й байт нужен для синхронизации. Также реулизована возможность засыпания процессора. Если это не нужно, просто закомментируйте #define SLEEP. В принципе пока все устраивает, просто хотел узнать Ваше мнение. Вопрос: Теоретически после того как определили битрайт(это в конце старт-бита) нужно сделать delay_us() равный: 1bit time*8(до начала стоп бита), а уже потом устанавливать битрайт. Но вреальности принимается ерунда. Но если написать следущее: for(n=0; n < (char)baudrate-1; n++) delay_us(1);//Ничего не делаем до начала следующего байта for(n=0; n < (char)baudrate-1; n++) delay_us(1); То все работает. Эта задержка примерно равна 2-м битам. Мне так кажется что пока я дохожу до этого момента, проходит время равное 6-ти битам. Вот сам код: #include <ioavr.h> #include <inavr.h> #include "USART.h" //******************************************************************************** ********** #define SLEEP unsigned static char state; unsigned int baudrate; #pragma vector = INT0_vect __interrupt void OnCapt() { if(0==state)//Перехват падения фронта { state = 1; MCUCR |= (1<<ISC01) | (1<<ISC00); //Установка прерывания по восходящему фронту TCNT1H=0;//Обнуляем таймер TCNT1L=0; TCCR1B|=(0<<CS12) |(0<<CS11) | (1<<CS10);//Запускем таймер 1 без делителя } else if(state==1)//Перехват подъема фронта { state = 2; baudrate = TCNT1L; baudrate |= (int)TCNT1H<<8; TCCR1B&=~((0<<CS12) |(0<<CS11) | (1<<CS10));//Запрещяем таймер MCUCR &= ~((1<<ISC01) | (1<<ISC00));//Запрещяем захват по фронту GICR &= ~(1<<INT0);//Запрещаем прерывание по захвату } } unsigned int Usart_autobaud(void) { unsigned char n; state=0; MCUCR |= (1<<ISC01) | (0<<ISC00); //Установка прерывания по спадающему фронту GICR |= (1<<INT0); //Разрешение прерывания #ifdef SLEEP MCUCR |= (1<<SE); //Разрешаем режим сна до первого внешнего прерывания asm("sleep"); MCUCR &= ~(1<<SE); //Запрещаем режим сна до первого внешнего прерывания #endif while(state != 2); //Ждем окончание старт бита(восходящий фронт) //Определяем битрайт baudrate = (baudrate>>3)-1; //baudrate=(baudrate/8)-1 for(n=0; n < (char)baudrate-1; n++) delay_us(1);//Ничего не делаем до начала следующего байта for(n=0; n < (char)baudrate-1; n++) delay_us(1); return baudrate; } //******************************************************************************** ********** void main( void ) { DDRD = 0x00; PORTD = 0x00; DDRB = 0x00; PORTB = 0x00; DDRC = 0x00; PORTC = 0x00; #ifdef SLEEP MCUCR |= (0<<SM2)|(0<<SM1)|(0<<SM0);//Режим сна Idle #endif USART0_init();//Инициализируем уарт __enable_interrupt(); delay_s(1); while(1) { USART0_set_speed(Usart_autobaud()); //Определяем битрайт и устанавливаем скорость UCSRB |= (1 << RXCIE)| (1 << RXEN); //Разрешаем прием и прерывание усарта while(!USARTBuffSize); //Ждем конца приема данных UCSRB &= ~((1 << RXCIE) | (1 << RXEN)); //Запрещаем прием и прерывание усарта USART_SEND_STR(UsartBuff, USARTBuffSize+1); USARTBuffSize = 0; } } И еще вопрос. В даташите написано, что пробуждение от сна по внешнему прерыванию разрешено во всех режимах. Но у меня прерывание происходит только в режиме сна Idle. Что я делаю не так ?
  20. CTRL+C и CTRL+V рулит. :) Надо так: UCSRB |= (1 << RXCIE); //Разрешаем прерывание UCSRB &=~ (1 << RXCIE); //Запрещаем прерывание А вот теперь думую все.
  21. Ладно. Было вот так: void main(void) { MCUCR |= (0<<SM2)|(0<<SM1)|(0<<SM0); //Idle mode init_Usart(); __enable_interrupt(); UsartRxOn = 0; for(;;) { MCUCR |= (1<<SE); //Разрешение спящего режима asm("sleep"); //Сон UsartRxOn = 1;//Разрешаем прием байтов Usart_read(); //Читаем строку UsartRxOn = 0; //Запрещаем прием байтов Usart_Send_Str(UsartBuff); //Возвращаем принятое } } void Usart_read(void) { while(!received); } //А вот само прерывание #pragma vector = USART_RXC_vect __interrupt void Recieve() { unsigned char temp = 0; temp = UDR; if(UsartRxOn) //Если прием байтов разрешен { UsartBuff[UsartBuffPtr] = temp; UsartBuffPtr++; if(temp == 0x0D) received = 1; //0x0D - конец принимаемых данных. } } Вся проблема была в том, что процессор просыпается по прерыванию RXC, но на тот момент UsartRxOn = 0. И по этому 1-й байт в UsartBuff не заносился. Я просто поставил UsartRxOn = 1; перед функции засыпания и все исправилось. Но по првильному вместо UsartRxOn лучше делать так: UCSRB |= (1 << RXCIE);//Разрешаем прерывание UCSRB |= (1 << RXCIE);//Запрещаем прерывание Вот такие кривые ручки. :)
  22. Спасибо всем, кто откликнулся. Оказалось, что это я как всегда напартачил. Вообщем стыдно даже говорить где была проблема(в кривых руках) :) А RXC прерывание работает корректно и с Idle mode. Ошибку исправил и все заработало. Простите что ввел Вас в заблуждение. Как говориться: "Прежде чем искать баги производителя, поищи свои". Выражаю всем благодарность. Тему можно закрыть.
  23. Уже пробовал. Без спячки все прекрасно работает. И еще, как я понял процессор просыпается от прерывания по RXC только в режиме Idle. Пробовал другие режимы. В них процессор спит. :05:
  24. Все верно. Функция Usart_read(); выглядит примерно так: void Usart_read(void) { while(!received); } //А вот само прерывание #pragma vector = USART_RXC_vect __interrupt void Recieve() { unsigned char temp = 0; temp = UDR; UsartBuff[UsartBuffPtr] = temp; UsartBuffPtr++; if(temp == 0x0D) received = 1; //0x0D - конец принимаемых данных. }
  25. К сожалению изменить протокол нет возможности. :05:
×
×
  • Создать...