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

T00T

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

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

  • Посещение

Репутация

0 Обычный

Информация о T00T

  • Звание
    Участник
    Участник

Посетители профиля

867 просмотров профиля
  1. Ну в английской версии слова аппаратнного чего то нет.... :) Этот метод инициализации я подсмотрел в библиотеках, кажись от ардуинки. Загвоздка в том что весь этот код работает стабильно на другой плате, теперь я переразвёл плату и тут не работает, причем ethernet физику перенёс почти один в один. Мистика какая то.... Попобую....
  2. Доброго времени суток... пытаюсь запустить W5100. Интерфейс связи - INDERECT BUS. Делаю аппаратный сброс, жду 300ms записываю в MR 0x80. Далее жду кода бит сбросится. А он не сбрасывается. Вопрос из-за чего может такое происходить? Что я делал: 1)Грешил на питание - подключал отдельный источник лабораторный. 2)Может что в разводке питания или чего ещё - подключал по SPI. Все работает, пингуется..... 3)Думал может что неправильно сигналы разведены - проверял. 4) Если не делать запись в MR 0x80, то MR читается как 0, потом пишу 0x80- читается как 0x80, и не сбрасывается. Осциллографом смотрю - реально на шине данных 0х80. 5) На другой версии платы все работает. Проверял наличие всех земель и питаний. 6) Менял микросхему с другого рабочего проекта. Менял FPGA. 7) Менял кварц с рабочего устройства, хотя п.2 это исключает. ........ТУПИК.........
  3. Тоже присоединяюсь к топикстартеру. Есть ли какие то результаты в этом направлении? Есть идея организовать связь между двумя FPGA по оптике на скорости 100Mbps, через SFP 1g, подключенного прямо к FPGA. Я не специалист,а только учусь.
  4. Доброго дня. Вопрос от начинающего. Хочу поморгать светодиодиком. Создал аппаратную сборку microblaze и gpio. Взял пример из каталога ..EDK\sw\XilinxProcessorIPLib\drivers\gpio_v3_00_a\examples сначала инициализируется модуль gpio: #define GPIO_EXAMPLE_DEVICE_ID XPAR_LEDS_POSITIONS_DEVICE_ID ... Status = XGpio_Initialize(&Gpio, GPIO_EXAMPLE_DEVICE_ID); ... Так вот вопрос XPAR_LEDS_POSITIONS_DEVICE_ID - это ID устройства в системе и по нему компилятор должен понять к какому конкретно устройству тут будет обращение. Где посмотреть ID устройства, или как правильно указать к какому устройству обращение?
  5. AVR+LCD1602+новичёк в си

    Не, ну с непривычки.... И действительно..... SET(LCD_D7_PORT,LCD_D5_BIT); _PV очень помог............. Спасибо, прочитаю про т.н. макросы Волкова. Яж не волшебник, просто учусь.
  6. AVR+LCD1602+новичёк в си

    В общем то я пытаюсь С асма на си перелезть немного, и поэтому хочется самому попробовать. Но чёт какие то грабли...... Все вроде на данном примере ясно, но работать не желает...... Ну вроде некоторого элемента обучения..... А ещё никак не получается сделать вот так: char stringOne[] PROGMEM = "HELLO"; int main(void) { ........ while(1) { } } Ну типа как глобальный массив объявить stringOne[]. Как записать правильно stringOne[], что бы он разместился во FLASH.
  7. AVR+LCD1602+новичёк в си

    В общем как уже сказано в СИ я новичёк, но АСМ - вроде очень неплохо. Итак, в качестве первого проекта хотел написать библиотечку для работы с LCD1602+HD44780. Всё перепробовал, походу не правильно инициализируется дисплей. Ничего не кажет. Чего то я не пойму.... Делать пытался по прототипу. Наверно что то в lcdSendNibble(). Тока не пойму что не работает. mylibrary_c.txt mylibrary_h.txt LCD_HW_c.txt
  8. В общем я посмотрел на этот граф, ну это всё то же, на что и я ссылку давал. Реализация этого графа уже в себе несёт анти-дребезговую обработку сигналов Х1, Х0 что идут от энкодера. Ну и у меня так же и написано. У меня в данной задаче проблемы были связанны не с реализацией алгоритма(пока это простые алгоритмы), а с тем что не учитывалась специфика реализации на плис. Нужно побольше узнать о специфике применения ПЛИС. Последнее время просто часто писал на АСМЕ для AVR, а там всё тривиально - как написано, так и работать будет. А тут кукиш, вот и возник этот топик. :) Спасибо за совет, может как нибудь. А про мат часть, сначала и прочитал(ссылку я давал). Просто такой энкодер очень простой и даже читать то особо не о чём. счет идёт просто: изменился, один сигнал смотри в какую сторону да и всё. И дребезг сам собой подавляется т.к. количество переключений в момент дребезга всегда нечётно и если их отслеживать: то прибавлять то отнимать, результат всегда окажется верным. Спасибо, думаю это то что надо, и уверен что будет работать.(возьму на заметку метод). Тем не менее мой алгоритм тоже хорошо работает, проверено уже!!!!!!! Я тут много обсуждений читал, блин вообще как то приятно обсуждать вопросы на этом форуме. Многие стараются помочь, с пониманием :). И это не только мне, а многим начинающим. За это отдельное спасибо. Когда нибудь у меня тоже будет достаточно опыта в области применения плис, и тоже кому нибудь помогу. :)
  9. спасибо за развернутый ответ. Всё вроде на свои места становиться. Вот я тоже хочу погрузиться в жестокий мир FPGA. Раньше на плисках немного писал в AHDL, но это было давно. А на данный момент есть задачи которые можно на плисках собрать. Ну и посмотрел, какие вещи на них делают. Глазы на лоб. Да и вроде голова без всякого рода задачек не может уже....... так что сижу четвёртый месяц вникаю..... Всем спасибо за помощь. :)
  10. Извините, ежели чего туповатого спрашиваю, просто хотел бы разобраться. Я ж не волшебник,я только учусь :). Вот этого я не понимаю как делать. Пропустите сигналы энкодеров хотя бы через триггеры в IO падах. У меня input: [9:0] enc ну и сразу на схему. Подскажите как написать то что вы имели ввиду. Я вот не согласен в обоих примерах асинхронно!!!!! Естественно проблема в переходном процессе, и логическое отличие двух примеров в том, что первый пример на каждом CLK сравнивает с состоянием на предыдущем такте, в во втором примере, пророй сравнивается с состоянием на один такт до предыдущего(тот случай, когда на первом и на втором тактах происходит изменение). Т.е. в эти случаи счётчик не будет изменяться. Может это и работает, но не понятно почему... Ну да ладно. У меня конечно же вопрос в том, почему не правильно работает первый пример??? Ибо если сигнал допустим на enc0 идёт из нуля в единицу с переходным процессом, и схема отрабатывает то что в момент перехода он несколько раз прыгает назад в ноль и возвращается в конечном итоге в 1, то просто многократно происходит прибавление и вычитание единички. Но в конце переходного процесса результат должен быть одинаков, и соответствовать этому переходу. Я так понял что это про if из которых case состоит. (В этом есть рациональное зерно...). Однако - точно такая же конструкция стоит и во втором примере, который работает правильно. Чем тогда можно это аргументировать. Типа в первом примере эти if так работают, а в этом сяк. Спасибо.... Но к сожалению именно его я и описал,конечный автомат, по крайней мере старался. Если где ошибаюсь, ткните мордочкой :). http://club.shelek.ru/viewart.php?id=369 разве, что никак не отображается потеря импульса... Ну вот этот фактор походу сильно влияет в данном случае. Сделал вот так always@(negage clk) encA[1:0] <= {encd[1],encd[0]} и заменил сигналы на encA[1],encA[0]. И первый вариант заработал. Огромное спасибо............. Буду теперь знать. А второй вариант, из-за И последний вопрос связанный с этим ( триггеры в IO падах). Как это использовать.... Подскажите.
  11. Просто по логике вещей, приходит сигнал в некий момент времени, я его опрашиваю в нужные мне моменты, просто частота опроса на несколько порядков выше, да и всё вроде. Зачем ещё регистры..... Сразу на схему case ({l_enc0,encd[1],encd[0]})
  12. Нет, сразу на триггеры. Я просто на плис не так давно пишу, может чего не знаю, а в чём фишка?
  13. Ну значит так. В первом примере когда есть разница происходит в первом такте: устанавливается NUM0 = 1 или 2, но прибавления или вычитания не происходит, т.к. на этом такте ещё NUM0 = 0, и выравниваются значения l_enc0 <= {encd[1],encd[0]} второй такт: NUM0 = либо ноль, если снова не произошла разница , либо всё как в 1 такте, и происходит прибавление или вычитание(из предыдущего такта) Т.е. алгоритм на каждом такте сравнивает состояния между тактами, а вычисление происходит на отставание на один такт. А во втором: первом такте: устанавливается NUM0 = 1 или 2, но прибавления или вычитания не происходит, т.к. на этом такте ещё NUM0 = 0, и не выравниваются значения l_enc0 <= {encd[1],encd[0]}(И из-за этого сравнение во втором такте будет не с тем что было в первом, а с тем что было в 0 такте)(работать должно наоборот - хуже, а не лучше) второй такт:В операторе CASE NUM0 = остаётся тем же, т.к. не выравниваются значения l_enc0 <= {encd[1],encd[0]} если снова не произошла разница ,а если произошло изменение, то NUM0 = 0, т.к. относительно значения 0 такта будет или 2-я разница или равенство(т.е пропуск одного изменения), происходит прибавление или вычитание(из предыдущего такта), а потом уже обнуление(оно нужно для того, чтобы не происходило повторное прибавление или вычитание, т.к. операторе CASE NUM0 = остаётся тем же) С учётом выше сказанного, второй вариант не должен правильно работать, т.к. может пропускать изменения. Однако на деле всё наоборот. Уже голову всю сломал :) Для уточнения: две строки num0 <= 0 во втором примере можно убрать и работать будут без пропусков, просто будет прибавлять и отнимать значение 2 раза, ну соответственно можно на 2 поделить и всё.
×
×
  • Создать...