数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 14007|回复: 91

[1990] 古董夏普电脑大战雅马哈音源芯片!PC-1500实现雅马哈YM2608B控制和播放

    [复制链接]
发表于 2022-6-25 17:58:30 | 显示全部楼层
楼主,有YM2163的技术资料么,请发我邮箱910345939@qq.com。谢谢。有两块电子琴板子,用的是YM2163,想用单片机控制,无奈查不到资料。多年的心结了。
回复 支持 反对

使用道具 举报

发表于 2022-6-25 17:59:57 | 显示全部楼层
杨生69366 发表于 2022-5-29 20:37
人家问我十二评论律,我懵。后来查度娘:十二平均律,是世界上通用的一组音(八度)分成十二个半音音程的 ...

中国古典用的是五度相生律。
回复 支持 反对

使用道具 举报

发表于 2022-6-26 21:53:10 | 显示全部楼层
杨生69366 发表于 2022-6-25 23:11
我也有好几片以前维修的YM2163但是就是资料丢失,到处网查和咨询宁可花钱买也没有可惜了。 ...

准备用数据分析仪分析指令。可惜没时间,工作量也大。
回复 支持 反对

使用道具 举报

发表于 2023-3-17 19:51:09 | 显示全部楼层
杨生69366 发表于 2022-6-25 23:11
我也有好几片以前维修的YM2163但是就是资料丢失,到处网查和咨询宁可花钱买也没有可惜了。 ...

好消息,我用chatGPT,查到了相关资料和例程。YM2163的控制寄存器来设置音量、频率、声道等参数
void YM_WriteData(BYTE data)
{
   YM_WR = 0;
   YM_DATA = data;
   YM_WR = 1;
}

void YM_WriteReg(BYTE reg, BYTE data)
{
   YM_CS = 0;
   YM_A0 = 0; //写命令
   YM_WriteData(reg);
   YM_A0 = 1; //写数据
   YM_WriteData(data);
   YM_CS = 1;
}
回复 支持 反对

使用道具 举报

发表于 2023-3-17 19:52:39 | 显示全部楼层
zhangmc419 发表于 2023-3-17 19:51
好消息,我用chatGPT,查到了相关资料和例程。YM2163的控制寄存器来设置音量、频率、声道等参数
void YM_W ...

void YM_Init()     // 初始化YM2163
{
    // 控制命令格式:0 0 0 F-EN V-EN - - - -
    // F-EN:所有频道使能
    // V-EN:音量使能
    YM_WriteReg(0x28, 0x00);      // 关闭所有频道
    YM_WriteReg(0x10, 0xff);      // 音量设置:最大音量      
    YM_WriteReg(0x2d, 0x00);      // 音量左通道平衡
    YM_WriteReg(0x2e, 0x00);      // 音量右通道平衡
    YM_WriteReg(0x28, 0x0f);      // 打开所有频道
}

YM_SendCommand(0x22, 0x00);  //外设停止
  YM_SendCommand(0x24, 0x00);  //所有通道音量切换至最小
  YM_SendCommand(0x2d, 0x01);  //左声道音量平衡
  YM_SendCommand(0x2d, 0x01);  //右声道音量平
  YM_SendCommand(0x28, 0x0f);  //所有通道开始播放
}
回复 支持 反对

使用道具 举报

发表于 2023-3-17 19:56:40 | 显示全部楼层
zhangmc419 发表于 2023-3-17 19:52
void YM_Init()     // 初始化YM2163
{
    // 控制命令格式:0 0 0 F-EN V-EN - - - -

小苹果
#include <reg52.h>

// 待播放的音乐数据
const unsigned char music_data[] = {
  // YM2163内部寄存器设置,将内部寄存器设置为播放《小苹果》
  0x28, 0x00, // FNUM LOW
  0x29, 0x02, // FNUM HIGH
  0x2B, 0x80, // CH1 ON, BLOCK=0, LFO OFF
  0x2C, 0x08, // CH1 DETUNE, MULTIPLE=1
  0x2D, 0x30, // CH1 TL
  0x2E, 0x00, // CH1 KS=0, ATTACK RATES=0
  0x2F, 0x4F, // CH1 DECAY RATES=4, SUSTAIN LEVELS=15
  0x30, 0x0F, // CH1 RELEASE RATES=15, SSG-EG OFF

  // 利用不同的等待时间来调整音符的节奏
  // 前4个音符
  0x28, 0x00,
  0x29, 0x02,
  0x00, 0xA0,
  0x28, 0x00,
  0x29, 0x02,
  0x00, 0xA0,
  0x28, 0x00,
  0x29, 0x02,
  0x00, 0x50,
  0x28, 0x00,
  0x29, 0x02,
  0x00, 0x50,

  // 中间部分
  0x2C, 0x08,
  0x2D, 0x20,
  0x00, 0x10,
  0x00, 0x10,
  0x2C, 0x08,
  0x2D, 0x20,
  0x00, 0x80,
  0x28, 0x00,
  0x29, 0x01,
  0x00, 0x40,
  0x28, 0x00,
  0x29, 0x01,
  0x00, 0x20,
  0x28, 0x00,
  0x29, 0x01,
  0x00, 0x20,
  0x28, 0x00,
  0x29, 0x02,
  0x00, 0xA0,

  // 后半部分
  0x2C, 0x08,
  0x2D, 0x30,
  0x28, 0x00,
  0x29, 0x02,
  0x00, 0xA0,
  0x2C, 0x08,
  0x2D, 0x30,
  0x28, 0x00,
  0x29, 0x02,
  0x00, 0xA0,
  0x2C, 0x08,
  0x2D, 0x30,
  0x28, 0x00,
  0x29, 0x02,
  0x00, 0xA0,
  0xFF, 0xFF, // 结束标志
};

// 延时函数,控制音符的节拍
void delay(unsigned int ms) {
  while (ms-- > 0) {
    unsigned char i, j;
    i = 12;
    j = 169;
    do
    {
      while (--j);
    } while (--i);
  }
}

// 向YM2163芯片写入一条命令
void write_command(unsigned char command) {
  P0 = command;
  delay(1);
}

// 向YM2163芯片写入一条数据
void write_data(unsigned char data) {
  P0 = data;
  delay(1);
}

// 播放一首音乐
void play_music(const unsigned char* music_data) {
  unsigned char i = 0;
  unsigned char reg_data;

  // 循环读取音乐数据,直到遇到结束标志
  while (1) {
    unsigned char reg_addr = music_data[i++];
    reg_data = music_data[i++];

    if ((reg_addr == 0xFF && reg_data == 0xFF) || i >= sizeof(music_data)) {
      // 遇到结束标志或者超出数组范围,退出循环
      break;
    }

    write_command(reg_addr);
    write_data(reg_data);
  }

  // 播放结束,停止输出音乐信号
  write_command(0x2B);
}

// 主函数,控制YM2163芯片播放音乐
void main() {
  // 连接芯片的IO口需要根据实际情况进行修改
  // 这里假设P0口作为地址总线和数据总线连接到YM2163的接口
  P0 = 0x00;

  // 播放小苹果
  play_music(music_data);

  // 停止输出音乐信号
  write_command(0x2B);

  // 程序结束,停止运行
  while (1);
回复 支持 反对

使用道具 举报

发表于 2023-3-30 18:04:34 | 显示全部楼层
本帖最后由 zhangmc419 于 2023-3-30 18:08 编辑
杨生69366 发表于 2023-3-19 00:18
你太棒了,本来放弃这个用上了SAA1099P芯片替代成了,已经发帖B站。就是不甘心这2163,等我来分析一下! ...

等待你的好消息,如需要更多资料,留下邮箱,我打包给你,里面有好多寄存器参数。我工作有点忙,没大块时间搞这个。还有两块电子琴的板,一块完好,一块无MPU,需要了留地址发给你。
回复 支持 反对

使用道具 举报

发表于 2023-4-3 09:52:13 | 显示全部楼层
本帖最后由 zhangmc419 于 2023-4-3 09:54 编辑
杨生69366 发表于 2023-4-3 00:30
我被Chatgpt忽悠到开始玩手机数码音乐了,竟然用不上复杂的音源芯片电路?Chatgpt帮我手机版电子琴编程可 ...

硬件玩起来和玩软件不一样的感觉。midi键盘+midi编辑软件比硬件功能更强大,不过我觉得硬件更复杂有趣。
回复 支持 反对

使用道具 举报

发表于 2023-4-3 10:09:33 | 显示全部楼层
杨生69366 发表于 2023-3-30 21:38
我邮箱845559641@qq.com,现有2163资料要分析太慢,最好有官方寄存器资料才行。现在玩2608,2149,SAA109 ...

资料已发 ,请查收
回复 支持 反对

使用道具 举报

发表于 2023-4-10 16:25:51 | 显示全部楼层
本帖最后由 zhangmc419 于 2023-4-10 16:28 编辑
杨生69366 发表于 2023-4-10 09:54
你邮件收到好多详细资料,但是怎么资料里2163是20脚,我的2163是24脚,硬件对不上,软件寄存器信息也与我 ...

我记得也是24脚,以电子琴的总电路为准,发给你的图里有一个是24脚。寄存器试试看吧。
回复 支持 反对

使用道具 举报

发表于 2023-5-10 10:39:58 | 显示全部楼层
杨生69366 发表于 2023-4-21 15:41
说的对,不能丢人现眼忘了种地,马上要油菜籽大丰收了!

楼主搞农业?我搞果树30多年了,林学专业副高,先在在国家生物育种中心。
回复 支持 反对

使用道具 举报

发表于 2023-5-10 10:43:33 | 显示全部楼层
杨生69366 发表于 2023-4-13 00:33
分析资料也不对不上号我以前的部分寄存器信息,起码有一点不对,2163没有接数据总线的这个A0端,所以也无 ...

可以,我的邮箱zmc419@163.com
回复 支持 反对

使用道具 举报

发表于 2023-5-10 10:45:11 | 显示全部楼层
杨生69366 发表于 2023-4-29 21:33
到今天为止,通过大量实验数据分析,全部搞定YM2163的芯片发音音阶频率!巧妙利用了手机《手机物理工坊》 ...

有电子琴原板,加逻辑分析仪估计容易得多。
回复 支持 反对

使用道具 举报

发表于 2023-6-4 13:24:53 | 显示全部楼层
杨生69366 发表于 2023-6-2 21:47
因为YM2163基本发音就是钢琴音,才使得我能够做出像点样的数码作品-全功能PC1500:
【安信可ESP8266/雅马 ...

能发给我一份完成的资料么?zmc419@163.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-21 22:41 , Processed in 0.109200 second(s), 9 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表