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

User Tag List

Страница 13 из 22 ПерваяПервая ... 91011121314151617 ... ПоследняяПоследняя
Показано с 121 по 130 из 217

Тема: Прикрутить YM2149F к IBM-PC?

  1. #121
    Guru Аватар для CHRV
    Регистрация
    18.01.2005
    Адрес
    Москва
    Сообщений
    3,695
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Выложил сорцы в сообщение с картинкой.

    Пожалуйста пишите в email (chunin{гаф}mail{тчк}ru), личка отключена!!!

    NedoPC group. ZX-Evolution, ATM Turbo 2+, Pentagon1024SL.
    [Предлагаю: ZXEvo, PAL coder, NeoGS, TS-FM, YM2149, Z80 и прочее]
    Все здесь: http://www.nedopc.com.
    Новости/поддержка/Faq: http://forum.nedopc.com.
    Раздача халявы: http://forum.nedopc.com/viewtopic.php?f=32&t=977

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

  3. #122
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    79
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вощем как я и предполагал, D1 - это /BDIR, D2 - BC1 и D3 - /RESET. Звук пошел, но с такими тормозами, что ппц. Не успевает видать софтварный USB... Попробую еще поковыряться конечно, но видимо все-таки придется юзать контроллер с аппаратным USB.

  4. #123
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,258
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Tronix Посмотреть сообщение
    Это точно? А что тогда D1? Просто похоже, что D3 - это RESET, а D1 и D4 это BC и BDIR..
    Да, попутал немного. D1 - ~BDIR, D2 - BC1, D3 - ~RESET.

  5. #124
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    79
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот такой лол вышел:
    https://soundcloud.com/tronix286/jok...bachby-surgeon

  6. #125
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    79
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    Да, попутал немного. D1 - ~BDIR, D2 - BC1, D3 - ~RESET.
    Напомни пожалуйста, ты когда вызываешь тот самый WriteUCHAR...() между ними (вызовами) задержки нет? Там вроде насколько помню что-то около 12 или 20 байт подряд пишутся, потом задержка, потом снова. То есть задержка только после 12 или сколько там байт?

  7. #126
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,258
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Данные пишутся пакетами по 28 байт раз в 20мс (50гц частота)

  8. #127
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    79
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Итого, вместо 9 обращений по USB я ж могу слать только данные (2 обращения), а остальными ногами дергать в самом контроллере, в зависимости от того - первый это байт или второй:
    Код:
    bc1 = 1 ; bdir = 1 ; res = 1        ; Reset
    bc1 = 1 ; bdir = 1 ; res = 0        ; Reset
    bc1 = 1 ; bdir = 1 ; res = 1        ; Reset
    
    bc1 = 0 ; bdir = 0 ; res = 1      ;YM inactive    ;1 IO USB
    Data = 12                             ; данные        ; 2 IO USB
    bc1 = 1 ; bdir = 1 ; res = 1      ; писать адрес ;3 IO USB
    Data = 12                             ; данные         ;4 IO USB
    bc1 = 0 ; bdir = 0 ; res = 1      ; YM inactive   ;5 IO USB
    Data = 0                               ; данные        ;6 IO USB
    bc1 = 0 ; bdir = 1 ; res = 1      ; писать данные ;7 IO USB
    Data = 0                               ; данные        ; 8 IO USB
    bc1 = 0 ; bdir = 0 ; res = 1      ; YM inactive  ; 9 IO USB
    
    
    bc1 = 0 ; bdir = 0 ; res = 1
    Data = 11
    bc1 = 1 ; bdir = 1 ; res = 1
    Data = 11
    bc1 = 0 ; bdir = 0 ; res = 1
    Data = 0
    bc1 = 0 ; bdir = 1 ; res = 1
    Data = 0
    bc1 = 0 ; bdir = 0 ; res = 1
    То есть в обертке inpout.dll я должен контроллеру выдавать только данные (порт 0x378), причем пропускать каждый второй байт. В самом контроллере я должен использовать флаг, показывающий - первый байт пришел или второй. Если первый - то сам контроллер должен выставить bc1 = 1, bdir = 1. Если второй, то bc1 = 0, bdir1 = 1. И так по-кругу.

    Вчера уже поздно вечером попробовал - что-то не взлетает. Какие-то шумы и хрипы. Не очень хорошо в даташите показаны тайминги цикла записи и цикла записи адреса. Пытался сделать так как и было раньше:

    установил bc1=0, bdir=0 (YM inactive)
    выдал байт данных на ноги D0-D7
    если первый байт то bc1=1, bdir=1
    иначе bc1=0, bdir = 1
    подождал около ~1500 нс
    установил bc1=0, bdir=0 (YM inactive)

    Не работает (

    ---------- Post added at 12:43 ---------- Previous post was at 12:19 ----------

    То есть процедура вывода байта в ПИКе такая:
    Код:
    DIO_WriteByte:
    
        bcf     PORTA,3                 ; bc1 = 0
        bcf     PORTA,4                 ; bdir = 0
    
        movlw   0x10                    ; delay 0.00005 sec (24MHz)
        movwf   TMP
    wait2:
        decfsz  TMP
        goto    wait2
    
        ;Put value in RB3-RB7
        movlw   B'00000111'
        andwf   PORTB,W
        movwf   TMP
        movlw   B'11111000'
        andwf   RXDATA_BUFFER+4,W       ;wIndex Lo
        iorwf   TMP,W
        movwf   PORTB
    
        ;Put the last bits values in RA0-RA2
        movlw   B'11111000'
        andwf   PORTA,W
        movwf   TMP
        movlw   B'00000111'
        andwf   RXDATA_BUFFER+4,W       ;wIndex Lo
        iorwf   TMP,W
        movwf   PORTA
        
        btfsc   ODDEVEN,0               ; this is first byte in queque?
        goto    second_byte             ; no, goto second byte
    
                                        ; yes - thi is firs byte
        bsf     ODDEVEN,0               ; set zero bit in ODDEVEN flag
    
        bsf     PORTA,3                 ;bc1 = 1
        bsf     PORTA,4                 ;bdir = 1
    
        goto    ctrl_done               ; controll done
    
    second_byte:
        bcf     ODDEVEN,0               ; clear zero bit in ODDEVEN flag
        bcf     PORTA,3                 ; bc1 = 0
        bsf     PORTA,4                 ; bdir = 1
    ctrl_done:
    
        movlw   0x10                    ; delay 0.00005 sec (24MHz)
        movwf   TMP
    wait:
        decfsz  TMP
        goto    wait
    
        bcf     PORTA,3                 ; bc1 = 0
        bcf     PORTA,4                 ; bdir = 0
        return
    В обертке inpout32.dll такое:
    PHP код:
            switch (port)
            {
            case 
    0x378:
                if (
    skip_data == 0
                    
    writeByte(Value); 
                
    skip_data = ~skip_data;
                break; 

  9. #128
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    79
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Оказываецо, некошерно менять значения в порту командами BCF/BSF. Есть где-то вроде аппноут от микрочипа, но здесь все детально и так написано: http://www.piclist.com/techref/readmodwrite.htm . Иногда помогает задержка из NOPов между BCF, но тоже быдлокод и так типа нехорошо делать.

    Переписал вроде как правильно, через чтение - модификацию - запись. Например установка bc1=1 bdir=1 теперь происходит так:

    Код:
        ;bsf     PORTA,3                 ;bc1 = 1
        ;bsf     PORTA,4                 ;bdir = 1
        movlw   B'11100111'
        andwf   PORTA,W
        movwf   TMP
        movlw   B'00011000'
        iorwf   TMP,W
        movwf   PORTA
    Все равно, какие-то хрипы и вообще не то все.... Смотрю инет на эту тему - вроде просто все у всех, вот тут чувак на AVR делает так:
    PHP код:
    void send_ay(int regint data){
     
    PORTC 0x00//send 'inactive', logical 0 to BDIR/BC1
     
    PORTD reg//put register number on data port
     
    PORTC 0x03//send 1 to BDIR/BC1 to latch register address
     
    PORTC 0x00//inactive
     
    PORTD data//data to send to previously selected register
     
    PORTC 0x01//send 1 to BDIR, 0 to BC1 to latch data to register
     

    Ну и у меня так же, в принципе.... Чуствую какая-то мелкая ошибка где-то...

    Мож сбрасывать YM надо все-таки, а то хз что у него там в памяти сидит... Прикручу сброс. Потом в пошаговом режиме еще потестю, тестором сигналы чтоб мерять.

  10. #129
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    79
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну ессно баг был в том, что я переменную в памяти PIC затирал потом в другом месте (не правильно описал). Поправил, заработало как и планировалось - по USB передаются только байты, а контроллер сам дергает BC1 и BDIR в зависимости от того - четный это байт или не четный. Все равно медленно, хотя с первым разом не сравнить:

    https://soundcloud.com/tronix286/jok...chby-surgeon-1

    Щаз еще попробую оптимизировать код в пике, но это уже почти предел я думаю.. Но - "почти" -)

  11. #130
    Activist Аватар для ALS
    Регистрация
    14.09.2012
    Адрес
    г.Севастополь
    Сообщений
    427
    Спасибо Благодарностей отдано 
    235
    Спасибо Благодарностей получено 
    67
    Поблагодарили
    47 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Как вариант - если применить внешнее тактирование (напр., от генератора типа тех, что стояли на старых материнках), то старые PIC-и работают и на гораздо более высоких частотах.
    У меня , напр., PIC16F690 нормально переваривает 32MHz, потребление при этом - ок. 15мА, ессно, ничего не греется.

Страница 13 из 22 ПерваяПервая ... 91011121314151617 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Куплю YM2149F
    от cmari в разделе Барахолка (архив)
    Ответов: 2
    Последнее: 13.09.2010, 00:48
  2. Хочу прикрутить NEMO IDE к моему Speccy
    от ILoveSpeccy в разделе Внешние накопители
    Ответов: 15
    Последнее: 21.04.2010, 23:40
  3. AY38910 vs YM2149F
    от AlexBel в разделе Звук
    Ответов: 1
    Последнее: 10.01.2008, 19:44
  4. Продам 2 YM2149F и ещё кое-что
    от Lounge Lizard в разделе Барахолка (архив)
    Ответов: 0
    Последнее: 13.08.2005, 04:17

Ваши права

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