Важная информация

User Tag List

Страница 4 из 53 ПерваяПервая 12345678 ... ПоследняяПоследняя
Показано с 31 по 40 из 528

Тема: Планирую сделать FDD эмулятор на Atmega8

  1. #31
    Master
    Регистрация
    20.01.2016
    Адрес
    п. Власиха, Московская обл.
    Сообщений
    593
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    32
    Поблагодарили
    19 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Проверил линию данных от флоппи, там идут исключительно окна 4,6,8мкс, ничего другого, за исключением задержки после STEP и еще есть иногда задержка после пульсации SIDE на 10мкс. Кстати, вопрос с пульсацией SIDE до сих пор так и не прояснен.

    PS для AVR буду использовать кварц 20МГц, цикл МК составляет 50нс, что очень удобно для генерации сигналов с помощью ШИМ, т.е. на пульс (1мкс) и ожидание после пульса (1мкс) нужно 40 циклов, на ноль (2мкс) - тоже 40 циклов т.е. устанавливаем ICR на 40, а в OCR будет слаться 2 разных значения для 0 и единицы.
    Вход в прерывание 4 цикла, выход 4 цикла, остается 32 цикла на код таймера, сдвиг 16 битного значения 2 цикла, остается 30 за эти 30 нужно проверить, что данные в регистре не закончились, выставить флаги или взять значение из SRAM (2 цикла) и т.д., думаю не более 10 циклов, чтобы сильно не замедлять основной код.
    Последний раз редактировалось EvgenRU; 22.03.2016 в 08:17.

  2. #31
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #32
    Master Аватар для s_kosorev
    Регистрация
    19.06.2014
    Адрес
    г. Харьков, Украина
    Сообщений
    731
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    15 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    после смены SIDE нужно заново синхронизацию проходить, так что все равно что там дисковод выдает

  4. #33
    Master
    Регистрация
    20.01.2016
    Адрес
    п. Власиха, Московская обл.
    Сообщений
    593
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    32
    Поблагодарили
    19 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от s_kosorev Посмотреть сообщение
    после смены SIDE нужно заново синхронизацию проходить, так что все равно что там дисковод выдает
    Так вот непонятно, там именно пульсация SIDE идет а не смена уровня.

  5. #34
    Activist Аватар для Trol73
    Регистрация
    07.05.2015
    Адрес
    г. Ульяновск
    Сообщений
    350
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    50
    Спасибо Благодарностей получено 
    41
    Поблагодарили
    25 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от EvgenRU Посмотреть сообщение
    PS для AVR буду использовать кварц 20МГц
    У atmega128A максимальная частота 16МГц, насколько вероятна её устойчивая работа на 20 МГц?
    Цитата Сообщение от EvgenRU Посмотреть сообщение
    Вход в прерывание 4 цикла, выход 4 цикла, остается 32 цикла на код таймера
    Реально 4 цикла? У меня получается минимум 11 циклов + еще 2 цикла на каждый сохраняемый регистр

    PHP код:
        push    r1                                // 2 clk            2
        
    push    r0                                // 2 clk            4
        
    in        r0_SFR_IO_ADDR(SREG)            // 1 clk            5
        
    push    r0                                // 2 clk            7
        
    eor        r1r1                        // 1 clk            8
        
    in        r0_SFR_IO_ADDR(RAMPZ)        // 1 clk            9
        
    push    r0                                // 2 clk            11 

  6. #35
    Master Аватар для s_kosorev
    Регистрация
    19.06.2014
    Адрес
    г. Харьков, Украина
    Сообщений
    731
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    15 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    можно SPI/USART использовать, нужно просто импульс снаружи формировать, простейший вариант, исключающее или + RC задержка на одном из входов, на байт данных MFM 2 записи в порт данных передатчика

  7. #36
    Master
    Регистрация
    20.01.2016
    Адрес
    п. Власиха, Московская обл.
    Сообщений
    593
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    32
    Поблагодарили
    19 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Trol73 Посмотреть сообщение
    Реально 4 цикла? У меня получается минимум 11 циклов + еще 2 цикла на каждый сохраняемый регистр
    Ну, вроде как при прерывании вызывается ICALL на вектор прерывания, а это 4 цикла + 2 цикла RJMP + RETI 4 цикла, а PUSH/POP, сохранение SREG это делать не обязательно, если использовать ASM и не использовать операции меняющие флаги, хотя, т.к. там сдвиг, то как минимум срег придется сохранять... или думать как сделать без сдвига и других операций влияющих на срег

    Цитата Сообщение от s_kosorev Посмотреть сообщение
    можно SPI/USART использовать, нужно просто импульс снаружи формировать, простейший вариант, исключающее или + RC задержка на одном из входов, на байт данных MFM 2 записи в порт данных передатчика
    Не совсем понял этот момент
    Я пока что вижу это себе так

    Таймер в CTC режиме, с генерацией прерываний каждую 1мкс (20 циклов) и в коде таймера на выход READ DATA устанавливается значение HIGH, для каждого бита данных получается два прерывания, в случае появления единицы в данных, в первом прерывании меняем выход на LOW, во втором делаем HIGH.
    Последний раз редактировалось EvgenRU; 22.03.2016 в 21:31.

  8. #37
    Master Аватар для s_kosorev
    Регистрация
    19.06.2014
    Адрес
    г. Харьков, Украина
    Сообщений
    731
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    15 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    байт MFM это два байта в нечто манчестеро подобном коде, их можно через SPI или UART выводить, получается по 2 прерывания на байт, что как минимум в 4 раза реже чем с таймером
    что бы MFM был, нужно смену уровня заменить на импульсы, простейший вариант, на выходе последовательного порта поставить к примеру "исключающее или" с задержкой сигнала на одном из входов
    получится настоящий MFM

    - - - Добавлено - - -

    Цитата Сообщение от EvgenRU Посмотреть сообщение
    Ну, вроде как при прерывании вызывается ICALL на вектор прерывания, а это 4 цикла + 2 цикла RJMP + RETI 4 цикла, а PUSH/POP, сохранение SREG это делать не обязательно, если использовать ASM и не использовать операции меняющие флаги, хотя, т.к. там сдвиг,
    ну тут сложно будет, особенно если речь идет о FatFs библиотеке, она на Си и в любом случае с ней нужно будет работать параллельно с обработчиком прерывания

  9. #38
    Master
    Регистрация
    20.01.2016
    Адрес
    п. Власиха, Московская обл.
    Сообщений
    593
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    32
    Поблагодарили
    19 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А можно поподробнее про USART? Там же еще старт/стоп биты есть, как с ними быть?

  10. #39
    Master Аватар для s_kosorev
    Регистрация
    19.06.2014
    Адрес
    г. Харьков, Украина
    Сообщений
    731
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    15 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    USART в нативном режиме плохой пример, использовать его в режиме SPI, там нет лишних битов

  11. #40
    Master
    Регистрация
    20.01.2016
    Адрес
    п. Власиха, Московская обл.
    Сообщений
    593
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    32
    Поблагодарили
    19 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от s_kosorev Посмотреть сообщение
    USART в нативном режиме плохой пример, использовать его в режиме SPI, там нет лишних битов
    Идею понял, спасибо, т.е. нужно использовать режим Master SPI для USART... в 8 атмеге такого точно нет, а вот в 328p есть, так что можно взять её, можно даже ардуинку для отладки погонять :-D
    Получается, для отправки нужно установить скорость 500000 бит/с (что соответствует 2мкс на бит) (для 16МГц и 20МГц можно выставить четко данное значение)
    затем выводимый сигнал раздваивается и идет на XOR микросхему, к одному цепляется конденсатор для задержки в 1мкс, т.е. на выходе получаем из единицы 10, а из нуля 00, с интервалом 1мкс.

    Да, использование USART сильно разгрузит МК при передаче данных и будет много времени на чтение с карты.

    Ох, да там еще можно сразу 16 бит передавать, вообще сказка! Т.е. у МК есть 32мкс для выдачи нового значения!
    Последний раз редактировалось EvgenRU; 23.03.2016 в 01:28.

Страница 4 из 53 ПерваяПервая 12345678 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 24
    Последнее: 08.12.2012, 19:00
  2. Тестер транзисторов на ATmega8
    от ILoveSpeccy в разделе Творчество
    Ответов: 10
    Последнее: 19.05.2011, 15:03
  3. Ответов: 0
    Последнее: 31.01.2007, 18:18

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •