极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 746|回复: 0

討論如何提高 LGT8F328P D/A 波形頻率

[复制链接]
发表于 2019-9-11 16:52:11 | 显示全部楼层 |阅读模式
本帖最后由 eddiewwm 于 2019-9-11 17:28 编辑

在一個群組看到有人提供以下討論網址,討論如何提高 LGT8F328P D/A 波形頻率,很有參考價值。
https://www.avrfreaks.net/forum/success-story-lgt8f328p-linux

原內容不是使用 arduino,以下是整理後的 arduino 程序:
  1. #define F_CPU 32000000UL

  2. #include <util/delay.h>
  3. #include <avr/power.h>
  4. #include <avr/pgmspace.h>
  5. #include "lgtx8p.h"

  6. unsigned char x = 0;
  7. unsigned char y = 0;
  8. unsigned char * ylist = (char *) 0x100;

  9. void setup() {
  10.   // put your setup code here, to run once:
  11.   // set div to /1 (default /8), so speed increases from 4Mhz to 32Mhz
  12.   clock_prescale_set(clock_div_1);

  13.   // DACEN: enable DAC
  14.   // DAOE: let the DAC output reach DAO port (PD4)
  15.   DACON = (1 << DACEN) | (1 << DAOE);
  16.   //RCMCAL = 255; // for overclock to 42MHz

  17.   // Create fancy waveform
  18.   do {
  19. /*    //generate fancy waveform start
  20.     y = x < 128 ?
  21.         // first half
  22.         // Create "M" part of waveform
  23.         ( x < 64 ? 255 - x : x + 128 ) :
  24.         // second half
  25.         // Create inverted "U" part of waveform
  26.         ( __builtin_sin((x - 128) * 3.1415 / 128.0) * 128 );
  27.     //generate fancy waveform End
  28. */
  29.     //y = 128 + __builtin_sin(x * 3.1415 / 128.0) * 128; //generate sine waveform
  30.     y = x; //generate linear waveform
  31.     *ylist++ = y;
  32.   } while (x++ < 0xFF);
  33. }

  34. void loop() {
  35.   // Replay the waveform
  36.   asm volatile ( " clr r30 ; ZL is 0\n"
  37.                  " ldi r31,0x1 ; ZH is 1 (data address base is 0x100) \n"
  38.                  " ldi r28,0xA1 ; YL will contain DACL\n"
  39.                  " clr r29 ; YH is 0\n"
  40.                  ".loop: \n"
  41.                  " ld r25, Z ; get byte from address at Z\n"
  42.                  " inc r30 ; increment ZL and let it roll :) \n"
  43.                  " st Y, r25 ; DALR is 0xA1 \n"
  44.                  " rjmp .loop \n");
  45. }
复制代码
*注意:以上程序要用 copy/paste 方式放在 arduino 內,不可用這裡提供的 "复制代码" 按鍵複制,因可能會造成編譯失敗。**

波形失真雖然很大,但文章的技術觀念很有用。
Fancy Waveform
LGT8F328P DA waveform.JPG

Sine Waveform
LGT8F328P DA waveform - Sine.JPG

Linear Waveform
LGT8F328P DA waveform - Linear.JPG
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2019-11-18 13:00 , Processed in 0.046441 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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