作者

威尔科尔

129
收件箱 查看配置文件
16Instructables 134506年的观点 246评论

跟我们说说你自己吧!

成就

100多个评论 获得铜牌
10k +意见 获得铜牌
建立一个工具竞赛
比赛的赢家 亚军建立一个工具竞赛
音频挑战2020
比赛的赢家 第一名音频挑战2020
  • WilkoL的教程唤醒灯每周统计数据:
    • 唤醒光
      355意见
      4最喜欢的
      1评论
  • $ 2风暴玻璃指南!!!

    我会处理的。它可能只有1%,但其余的乙醇燃烧也很好。目前,我很难得到另一种成分:樟脑。到目前为止,我发现最好的是非常小的块(几克),很多钱(30+欧元)。

    查看教程”
  • $ 2风暴玻璃指南!!!

    我已经变性乙醇,索赔是99%乙醇,1%兆(丙酮?),约30欧元,5升约30欧元。这对这个实验来说足够好吗?(https://www.werkenmetermerken.nl/nl/biologische_ethanol_99_/p/23122)

    查看教程”
    • 使用COSMIC STM8编译器设置St Visual Develop
      58意见
      0最喜欢的
      0评论
  • 脉冲发生器

    很有意思。自从我在我的BBC-Model-B家庭计算机上制作了EPROM程序员,我在汇编程序中没有做任何事情,现在必须近40年前。我会忙着阅读您网站上的文章,也许会给汇编程序另一个尝试。

    查看教程”
  • 正弦波和余弦波信号发生器

    我读这网站:“涡流线圈的结果他们创建,反复演示视频,是一个输出的能量大于输入一次调到正确的频率”但他们未能解释这额外的能量从何而来,至少他们未能解释我……

    查看教程”
  • 正弦波和余弦波信号发生器

    仍然需要学习在我的年龄......什么是涡流线圈?

    查看教程”
  • Arduino Linefollower DIY

    我不知道。-)摩根是我们的朋友。

    查看教程”
  • 正弦波和余弦波信号发生器

    任何东西都可以,但不是只有两个dac。你将不得不做出一些东西与6 dac, PWM输出(定时器)或创建额外的dac自己与r2r -梯子。我从未见过带有6个dac的微控制器,制作R2R梯子需要大量的工作,所以我会使用计时器。PWM的麻烦是PWM信号的频率必须(很多)高于您试图创建的信号。现在,我正在考虑它,只有三个DAC可能就足够了,毕竟第4岁与第1,第2和第3次相比,第6个信号将在相位相比为180度,这意味着它们只是逆。但你必须用某种方法把它们颠倒过来,opamp可以做到,但是,在什么频率上呢?所以我要问你的第一个问题是,在什么频率(范围)你需要…

    看到更多»

    任何东西都可以,但不是只有两个dac。你将不得不做出一些东西与6 dac, PWM输出(定时器)或创建额外的dac自己与r2r -梯子。我从未见过带有6个dac的微控制器,制作R2R梯子需要大量的工作,所以我会使用计时器。PWM的麻烦是PWM信号的频率必须(很多)高于您试图创建的信号。现在,我正在考虑它,只有三个DAC可能就足够了,毕竟第4岁与第1,第2和第3次相比,第6个信号将在相位相比为180度,这意味着它们只是逆。但你必须用某种方法把它们颠倒过来,opamp可以做到,但是,在什么频率上呢?所以我问你的第一个问题是,在什么频率(范围)你需要这六个信号吗?那么第二个问题是,什么类型的信号,正弦波,锯齿,正方形?第三个问题是,使用什么硬件,stm32或arduino uno或其他任何东西?如果频率足够低,比如50Hz或10kHz,即使你需要它变量也很容易。更高的意志意味着信号质量会降低。 For some applications that will not matter much but it might for what you have in mind. So what are you going to do with those six signals?

    这是我今天下午在8 MHz上运行的Arduino Mini Pro。它在100赫兹之间产生三个凸形波,在它们之间有60度。我使用了Atmel Studio 7来编程,但我认为您也可以使用Arduino软件。/ * * sixty_degrees.cpp * *创建:9-12-2020 12:47:48 *作者:wilko * /#define f_cpu 8000000ul #include #include uint8_t sinewave[256] = {0x80,0x83,0x85,0x88,0x8b,0x8e,0x90,0x93,0x96,0x90,0x9b,0x9e,0xa1,0xA3,0xA6,0xA8,0xAB,0xAD,0xB0,0xB2,0xB5,0xB7,0xBA,0xbc,0xbe,0xc0,0xc3,0xc5,0xc7,0xc9,0xcb,0xcd,0xcf,0xd1,0xd3,0xd5,0xd7,0xd8,0xDA,0xDC,0xD8,0xDA,0xDC,0xDD,0xDF,0xE0,0xE1,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xed,0xee,0xee,0xef,0xef,0xef,0xF ...

    看到更多»

    这是我今天下午在8 MHz上运行的Arduino Mini Pro。它在100赫兹之间产生三个凸形波,在它们之间有60度。我使用了Atmel Studio 7来编程,但我认为您也可以使用Arduino软件。/ * * sixty_degrees.cpp * *创建:9-12-2020 12:47:48 *作者:wilko * /#define f_cpu 8000000ul #include #include uint8_t sinewave[256] = {0x80,0x83,0x85,0x88,0x8b,0x8e,0x90,0x93,0x96,0x90,0x9b,0x9e,0xa1,0xA3,0xA6,0xA8,0xAB,0xAD,0xB0,0xB2,0xB5,0xB7,0xBA,0xbc,0xbe,0xc0,0xc3,0xc5,0xc7,0xc9,0xcb,0xcd,0xcf,0xd1,0xd3,0xd5,0xd7,0xd8,0xDA,0xDC,0xD8,0xDA,0xDC,0xDD,0xDF,0xE0,0xE1,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xEC,0xed,0xed,0xee,0xee,0xef,0xef,0xf,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xEF,0xEF,0xEF,0xee,0xee,0xed,0xed,0xec,0xeB,0xEA,0xe9,0xe8,0xe7,0xe6,0xe5,0xe4,0xe3,0xe1,0xe0,0xDF,0xDD,0xDC,0xDA,0xD8,0xD7,0xD5,0xD3,0xD1,0xCF,0xD3,0xD1,0xCF,0xCD,0xcb,0xc9,0xc7,0xc5,0xc3,0xc0,0xbe,0xbc,0xba,0xb7,0xb5,0xb2,0xb0,0xad,0xb2,0xA8,0xA6,0xA3,0xA1,0x9e,0x9b,0x99,0x96,0x93,0x90,0x8e,0x8b,0x88,0x85,0x83,0x80,0x7d,0x7b,0x78,0x75,0x72,0x70,0x6d,0x6a,0x67,0x65,0X62,0x5f,0x5d,0x5a,0x58,0x55,0x53,0x50,0x4e,0x4b,0x49,0x46,0x44,0x42,0x40,0x3d,0x3b,0x39,0x37,0x35,0x33,0x31,0x35,0x33,0x31,0x2f,0x2d,0x2b,0x29,0x28,0x26,0x24,0x28,0x21,0x20,0x1f,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x15,0x14,0x13,0x13,0x12,0x12,0x11,0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x12,0x12,0x13,0x13,0x14,0x15,0x16,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1f,0x20,0x21,0x23,0x24,0x21,0x28,0x29,0x2b,0x2d,0x2f,0x31,0x33,0x35,0x37,0x39,0x3b,0x3d,0x40,0x42,0x44,0x46,0x49,0x4b,0x4e,0x49,0x4b,0x4e,0x50,0x53,0x55,0x58,0x5a,0x5d,0x5f,0x62,0x65,0x67,0x6a,0x6d,0x70,0x72,0x75,0x78,0x7b,0x7d}; int main(void){uint8_t阶段; //gpio DDRD |= (1 << PD5) | (1 << PD6); //OC0B and OC0A DDRB |= (1 << PB1); //OC1A //timer0 TCCR0A |= (1 << COM0A0) | (1 << COM0A1); //Set OC0A on compare match, clear OC0A at BOTTOM TCCR0A |= (1 << COM0B0) | (1 << COM0B1); //Set OC0B on compare match, clear OC0B at BOTTOM TCCR0A |= (1 << WGM00) | (1 << WGM01); //Fast PWM TOP=0xFF TCCR0B |= (1 << CS00); //clk/1 (no prescaling) TCNT0 = 0; OCR0A = 0; OCR0B = 0; TIMSK0 = 0; //timer1 TCCR1A |= (1 << COM1A0) | (1 << COM1A1); //Set OC1A on compare match, clear OC1A at BOTTOM TCCR1A |= (1 << WGM10); //Fast PWM, 8 bit TOP=0x00FF TCCR1B |= (1 << WGM12); TCCR1B |= (1 << CS10); //clk/1 (no prescaling) TCCR1C = 0; TCNT1 = 0; OCR1A = 0; OCR1B = 0; TIMSK1 = 0; //still need do something with prescaler (synchonize) GTCCR phase = 0; while (1) { OCR0A = sinewave[phase]; OCR0B = sinewave[(phase + 43) % 256]; OCR1A = sinewave[(phase + 85) % 256]; phase++; _delay_us(34); }}

    查看教程”
  • Arduino Linefollower DIY

    你是说你以后会死吗?即使我不知道,我也不知道。本土知识本benieuwd。

    查看教程”
  • 双踪示波器

    很高兴听到!看到一个人的项目由其他人建造仍然很有趣。(顺便说一句,Bemmelen听起来荷兰人,你是Nederlander吗?)

    查看教程”
    • 时钟发生器与Si5351和蓝色药丸
      339意见
      7最喜欢的
      0评论
  • 双踪示波器

    好吧,我真的不在乎,所以我将它保留在Instructables选择的默认许可下,即“属性-非商业-类似共享”。可能来自STMCubeMX(意法半导体)的初始化代码有一些限制,但考虑到他们是一个硬件生产商,希望他们的微控制器尽可能多地销售,限制可能是最小的。你为什么这么问?这个示波器比不上一个“真正的”示波器,如Rigol或USB Pico-scope…我这样做是因为我想看看我能在STM32F103Cheers,Wilko中把ADC和DMA推进多远

    查看教程”
  • Minecraft风格的灯!

    漂亮!但是…当灯泡有缺陷时,你该如何更换?

    查看教程”
  • 脉冲发生器

    据我所知,它的末尾有字母s。我有两种TFT屏幕,一种有8个针在一边,另一种有11个针。有趣的是,有8个引脚的有一个LED(背光)的引脚,而有11个引脚的没有。它们都能工作,我没看到功能上的区别。祝你好运,Wilko

    查看教程”
  • K'nex Bouncing-Ball娱乐机器

    哇!这是令人印象深刻。我想知道你什么时候能看到第一个“我做到了”的投票。

    查看教程”
  • 脉冲发生器

    这一个? https://drive.google.com/file/d/1pSWbCL407WGQmuZmJy3ABFnOuvoNV1U5/view?usp=sharing

    Hi Andreas,首先,我不清楚你现在使用的是ST Visual Studio还是SDCC。我对SDCC没有了解,所以如果你正在使用那个,我无法帮助你。很难不幸的是,如果他们已经添加了我的整个项目文件夹,则令人遗憾的是,如果我已经添加了我的整个项目文件夹,则不幸的是。现在我做了第二个?最好的是,我上传了一个压缩文件和文件夹到谷歌驱动器。你可以通过这个链接下载:https://drive.google.com/file/d/1CBsXv81967sk8cGdh6M8MaNBpM9e7wvX/view?usp=sharingThe(我希望)我上传到谷歌驱动的第二件事是一个zip文件,我称之为“模板”将其解压缩到自己的文件夹和读“__set STVD STM8.txt”文件。它告诉您如何设置每个STM8项目。我不知道它是否是正确的方式......

    看到更多»

    Hi Andreas,首先,我不清楚你现在使用的是ST Visual Studio还是SDCC。我对SDCC没有了解,所以如果你正在使用那个,我无法帮助你。很难不幸的是,如果他们已经添加了我的整个项目文件夹,则令人遗憾的是,如果我已经添加了我的整个项目文件夹,则不幸的是。现在我做了第二个?最好的是,我上传了一个压缩文件和文件夹到谷歌驱动器。你可以通过这个链接下载:https://drive.google.com/file/d/1CBsXv81967sk8cGdh6M8MaNBpM9e7wvX/view?usp=sharingThe(我希望)我上传到谷歌驱动的第二件事是一个zip文件,我称之为“模板”将其解压缩到自己的文件夹和读“__set STVD STM8.txt”文件。它告诉您如何设置每个STM8项目。我不知道这是不是做事情的正确方法,但它对我很有效。请记住,我并不使用Standard Peripheral库中的大多数文件。由于它不适合STM8.https://drive.google.com/file/d/1FQtZoaEBDwPYDkDil58tJ0X2rRrJI6Pa/view?usp=sharingThe的flash回答你的最后一个问题,优化是yes。不要使用“USE_FULL_ASSERT”,注意在编译器中添加“+split”选项。好运!Wilko

    查看教程”
  • 脉冲发生器

    看起来很好。好好享受。

    查看教程”
  • 脉冲发生器

    别客气。我喜欢像微控制器一样充分利用零件,如果一个STM8,同性恋就足够好了。有时我需要更多(DAC,DMA ......)然后有更高的分段。

    查看教程”
  • 脉冲发生器

    迟做总比不做好:-)这里你可以下载:https://drive.google.com/file/d/1CZa8HAPlmv7hwOyM7…

    查看教程”
  • 使用复杂数学的元件阻抗

    数学使许多人迷惑不解。“想象的”和“复杂的”这两个词也没用。我读过一篇关于正交信号的文章,在标题“复杂但不复杂”中添加了这一点。真实的。

    很酷,我不希望看到复杂的数学在Instructables: -)我忙着自学DSP,尽管我在学校学过(很久以前),它有点令人不安的看清事物的e ^我(他们使用j sqrt(1),而不是我,我通常是保留给当前)

    希望指导不介意......

    查看教程”
  • WilkoL的教程脉冲发生器每周统计数据:
    • 脉冲发生器
      3,857意见
      52最喜欢的
      14评论
  • 脉冲发生器

    是的,我有二进制文件,不幸的是,赋予者不允许我上传它。但我可以将它发送到您的电子邮件地址(如果您告诉我那是什么:-))该文件称为pulse_generator.s19,但对我来说看起来像标准的hex.file。您可以使用ST Visual Programmer上传A(克隆)St-Linkはい,私はバイナリを持っいます,残念残念ながらながらではしかしできできませんアドレスアップロードできあなたんメールませできませませメールメールできませんメールメール送ることができことができ(あなたあなたがそれがが何であるかを私に教えてくれれ:-))このこのファイル脉冲_gumper_generator.s19と呼ばれます,私には标准のhex.fileのように见え。stビジュアルプログラマーa(クローン)ST-LINKででアップロードでき。

    查看教程”
  • 脉冲发生器

    它本身不会产生电磁场。输出电压为3.3V,输出电阻为50欧姆的脉冲。如果你把这个信号放入一个线圈,它会产生一个电磁脉冲,但只是一个非常微弱的脉冲。我对医疗/兽医设备一无所知,但我猜它们能产生很强的磁场。你必须制造一个能够在所需频率和脉冲长度下工作的放大器。也就是说,2万美元看起来很离谱,这可能是因为市场很小,只有一两家生产商能生产这些东西。脉冲发生器很简单,你附近的业余无线电爱好者也许能制造出合适的放大器。

    在步骤9。

    查看教程”
  • 脉冲发生器

    谢谢。想想每100秒250纳秒的脉冲占空比是多少。(不,我不知道那有什么用…)

    查看教程”
  • 高分辨率频率计数器

    我印象深刻的ATMEGA328!:-)我有工作没有d触发器,它工作得很好。比我expected.This是我做过什么:TIM0由外部frequencyTIM1主频由内部16MHz clockTIM2也由16MHz的时钟主频,而是通过1024(15625赫兹)precaled所有的计时器上OVF产生的IRQ(溢)TIM1也产生中断运行(256分之15625)61倍的第二,递减计数从62一个静态变量在第0它使TIM1At输入捕获中断的中断ICIE1,它会立即使TIM0的当前值的快照IRQ输入captureTIM2,因为有这个timer.The休息没有捕捉是因为它是与d触发器频率计数器。虽然有一件事,原始频率,由Thetim0计数器(8位)和t ...

    看到更多»

    我印象深刻的ATMEGA328!:-)我有工作没有d触发器,它工作得很好。比我expected.This是我做过什么:TIM0由外部frequencyTIM1主频由内部16MHz clockTIM2也由16MHz的时钟主频,而是通过1024(15625赫兹)precaled所有的计时器上OVF产生的IRQ(溢)TIM1也产生中断运行(256分之15625)61倍的第二,递减计数从62一个静态变量在第0它使TIM1At输入捕获中断的中断ICIE1,它会立即使TIM0的当前值的快照IRQ输入captureTIM2,因为有这个timer.The休息没有捕捉是因为它是与d触发器频率计数器。有一件事情是,虽然提高了,原始频率,即从theTIM0计数器(8位)和的时候,它已溢出的数目(highcounter)制成实际上是24位。所以我调整了它8个名额留给使其32位。现在,你可以忽略任何32位溢出。当然,你需要正确地为这个在现实frequency.The的计算计数器现在工作了至少5兆赫,虽然我不会用任何高于1 MHz的,因为使TIM0的快照问题counter.If你想我可以使整个项目(包括main.h uart.h和uart.c)的zip文件,并通过email.The代码发送:/ * * reciprocal_counter_without_d_flipflop.c *创建:21-9-2020 9时55分39秒*作者:wilko * /#包括 “main.h” 挥发性uint16_t highcounter = 0;// TIMER0的数目overflowsvolatile uint8_t low_counter = 0; //snapshot of TCNT0 at moment of TIM1 input capturevolatile uint16_t highreference = 0; //number of TIMER1 overflowsvolatile uint8_t message = 0; //signal that new data is availablevoid init_timer0(void);void init_timer1(void);void init_timer2(void);int main(void){ char buffer[20]; uint32_t raw_reference = 0; uint32_t raw_frequency = 0; uint32_t previous_reference = 0; uint32_t previous_frequency = 0; uint32_t new_reference = 0; uint32_t new_frequency = 0; uint64_t between_frequency = 0; uint32_t real_frequency = 0; DDRB |= (1 << LED1); //output for debug LED1 DDRB |= (1 << LED2); //output for debug LED2 init_timer0(); init_timer1(); init_timer2(); sei(); //enable global interrupts uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); uart_puts("\n\rcounter\n\r\n\r"); while (1) { if (message) { PORTB |= (1 << LED2); //LED2 on message = 0; raw_reference = ((uint32_t) highreference << 16) | (uint32_t) ICR1; raw_frequency = ((uint32_t) highcounter << 16) | ((uint32_t) low_counter << 8); new_reference = raw_reference - previous_reference; new_frequency = (raw_frequency - previous_frequency) >> 8; between_frequency = (uint64_t) new_frequency * F_CPU; real_frequency = (uint32_t) (between_frequency / new_reference); previous_reference = raw_reference; previous_frequency = raw_frequency; sprintf(buffer, "%lu\t%lu\t%lu\n\r", new_reference, new_frequency, real_frequency); uart_puts(buffer); PORTB &= ~(1 << LED2); //LED2 off } }}ISR(TIMER0_OVF_vect){ highcounter++;}ISR(TIMER1_OVF_vect) //~244 Hz{ highreference++;}ISR(TIMER2_OVF_vect) //61 times per second{ static uint16_t secondtimer; if (secondtimer) secondtimer--; else { secondtimer = 62; PORTB |= (1 << LED1); //switch ON debug LED1 when ICP interrupt enable TIMSK1 |= (1 << ICIE1); //enable ICP1 interrupt }}ISR (TIMER1_CAPT_vect){ low_counter = TCNT0; //make copy of TIM0 counter as quickly as possible //a copy of TIM1 counter is in ICR1 TIMSK1 &= ~(1 << ICIE1); //disable ICP1 interrupt (THIS INTERRUPT) PORTB &= ~(1 << LED1); //switch OFF debug LED1 when ICP interrupt enable message = 1;}void init_timer0(void) //counter input frequency{ DDRD &= ~(1 << TIM0_INPUT); //PD4 is T0 clock input TCCR0A = 0x00; //no outputs, normal mode TCCR0B |= (1 << CS02) | (1 << CS01) | (1 << CS00); //external clock, rising edge TIMSK0 |= (1 << TOIE0); //interrupt on overflow}void init_timer1(void) //counter internal freq + input capture{ DDRB &= ~(1 << TIM1_CAPT); //PB0 is ICP1 input TCCR1A = 0x00; //no outputs, normal mode TCCR1B |= (1 << ICES1); //input capture on rising edge TCCR1B |= (1 << CS10); //prescaler = 1 TCCR1C = 0x00; TIMSK1 |= (1 << TOIE1); //interrupt on overflow TIMSK1 &= ~(1 << ICES1); //NO INTERRUPT ON ICP1 YET}void init_timer2(void) //one second counter to enable/disable ICP1{ TCCR2A = 0x00; //no outputs, normal mode TCCR2B |= (1 << CS22) | (1 << CS21) | (1 << CS20); //prescaler = 1024 (15625 Hz) TIMSK2 |= (1 << TOIE2); //interrupt on overflow (~61 Hz)}

    忘记了我由1.234.567 Hz :-)制作的图片

    好了,我该停止了....我发现了一些改进s1 -改变优化为(- o3)2 -添加TIFR1 |= (1 << ICF1);到ISR(TIMER2_OVF_vect),就在启用ICP1中断之前-添加相同的线路到ISR(TIMER1_CAPT_vect),就在禁用ICP1中断后,在750 kHz它仍然是spot on。

    查看教程”
  • 高分辨率频率计数器

    在步骤4中,你可以读到:输入为500 kHz,参考频率为10 MHz,乘法器为100,这就得到了5 x 10^14,这真的是巨大的!它们不适合32位的数字,所以我使用64位的数字,将一直到1.8 x 10^19”也许,如果你有聪明的数学,你可以避免使用64位的变量,我没有尝试过。这个作品。:-)是的,你可以使用float和double,但为什么要这样做?整数算术是精确的,它使用的字节和64位整数一样多。(我在STM8微控制器上使用的C编译器不支持64位整数,所以我必须使用浮点数和双精度数)

    阅读别人的代码很困难!:-)所以我构建它,放入16 MHz水晶并将其连接到串行-USB转换器。我发现至少有一件事,你永远不会禁用input_capture_interrupt。我把它放在这里:ISR(TIMER1_CAPT_vect){TIMSK1 &= ~(1<< ICIE1);//计时器/Counter1输入捕获中断被禁用。val_timer0_low = TCNT0;val_timer0_high = timer0;val_timer1_low = ICR1;val_timer1_high = timer1;另一件我必须改变的事情是浮动,我不能让浮动打印。在所有。 But this did work:tussen_freq = (uint64_t)input_freq * F_CPU; real_frequency = tussen_freq / (uint64_t)ref_freq; real_frequency1 = (uint32_t) real_frequency; sprintf(buff, "%ld",real_frequency1); USART_sendStri…

    看到更多»

    阅读别人的代码很困难!:-)所以我构建它,放入16 MHz水晶并将其连接到串行-USB转换器。我发现至少有一件事,你永远不会禁用input_capture_interrupt。我把它放在这里:ISR(TIMER1_CAPT_vect){TIMSK1 &= ~(1<< ICIE1);//计时器/Counter1输入捕获中断被禁用。val_timer0_low = TCNT0;val_timer0_high = timer0;val_timer1_low = ICR1;val_timer1_high = timer1;另一件我必须改变的事情是浮动,我不能让浮动打印。在所有。 But this did work:tussen_freq = (uint64_t)input_freq * F_CPU; real_frequency = tussen_freq / (uint64_t)ref_freq; real_frequency1 = (uint32_t) real_frequency; sprintf(buff, "%ld",real_frequency1); USART_sendString(buff,16); _delay_ms(20);The uart output still has some junk characters in it, but now I can at least read what frequency the atmega gets. As expected it is not as accurate as it would be with a D-flip-flop. With a D-FF you start counting at the exact edges of the input signal, now you just start at a random moment.Why do you want to do this without a D-FF? "Because I can" is a good answer :-)

    哦,但不要放弃在没有D-FF的情况下尝试。我喜欢这个实验,我会试着找出究竟发生了什么。但首先,我必须在我的设置中获得UART工作。我想我会切换到“我的”版本的UART ringBuffer。

    你在用普通的C语言吗?或者arduino - c++ ?如果你使用arduino - c++,我会很惊讶你能达到240khz !如果你正在使用C语言(Atmel Studio中的GCC),我猜你在中断程序中耗尽了时间。您说它开始忽略向uart发送数据,这是奇怪的,因为在两次测量之间至少有一秒的时间可用。这就够了,你不同意吗?您是否可以从中断例程中向UART发送数据?我通常做的是使用我在一些代码开始时设置的一个或两个GPIO(中断例程)并在最后清除它。通过示波器,我可以看到代码完成需要多长时间。这通常可以解释问题所在。我用一个Atmel ICE调试器调试ATMEGA代码,甚至…

    看到更多»

    你在用普通的C语言吗?或者arduino - c++ ?如果你使用arduino - c++,我会很惊讶你能达到240khz !如果你正在使用C语言(Atmel Studio中的GCC),我猜你在中断程序中耗尽了时间。您说它开始忽略向uart发送数据,这是奇怪的,因为在两次测量之间至少有一秒的时间可用。这就够了,你不同意吗?您是否可以从中断例程中向UART发送数据?我通常做的是使用我在一些代码开始时设置的一个或两个GPIO(中断例程)并在最后清除它。通过示波器,我可以看到代码完成需要多长时间。这通常可以解释问题所在。调试Atmega代码我使用Atmel Ice调试器,即使在此,很难找到时间问题。但是,通过它,您还可以在代码中的“战略”位置设置断点,并查看变量的值,也可以解释很多。

    查看教程”
  • 迷你示波器

    我的时间并不那么宝贵,毕竟这是我的爱好。当你说让代码进入微控制器是很重要的时候,你是对的:-)。但话又说回来,这部分不是“火箭科学”,一旦你安装STM32CubeIDE并连接ST-Link,它是相当简单的。只是试一试。好吧,这可不像连接Arduino上传草图那么简单。但那是一个完全不同的世界,用预煮库尽可能地简单,在那里你不知道“幕后”发生了什么。尽管如此,如果你认为这不是你的项目,跳过它。没人强迫你去读。当你不喜欢电视上的节目时,你就会换台(或者更好的是,把它关掉)。

    啊是的,这是一件事。很容易忘记我曾经始于微控制器,可能会想到同样的事情。我确实弄清楚了,很多图书馆访问(没有人回到互联网)并与知道的人交谈。但是通过互联网,谷歌和论坛(例如,STMicroelectronics的论坛)现在应该变得容易。在我的辩护中,我的最后一个指示我确实告诉我使用的IDE,编译器和程序员/调试器。在这一个我至少列出了工具和软件(STM32Cubeide,STM32Cubemx和St-Link-V2)还有关于解释应该走多远的问题。是一个工具和软件的列表吗?或者它应该是一个完整的C语言课程和使用IDE,编译器拼写。我不记得我花了多少时间,努力......

    看到更多»

    啊是的,这是一件事。很容易忘记我曾经始于微控制器,可能会想到同样的事情。我确实弄清楚了,很多图书馆访问(没有人回到互联网)并与知道的人交谈。但是通过互联网,谷歌和论坛(例如,STMicroelectronics的论坛)现在应该变得容易。在我的辩护中,我的最后一个指示我确实告诉我使用的IDE,编译器和程序员/调试器。在这一个我至少列出了工具和软件(STM32Cubeide,STM32Cubemx和St-Link-V2)还有关于解释应该走多远的问题。是一个工具和软件的列表吗?或者应该是一个完整的C语言课程和使用IDE,编译器拼写出来。我不记得我花了多少时间设计,建设,写作软件,记录,调试和结束写作所指示的,但它花了几天。生活中有更多的生活,也适合我。这是一个尝试,制作一个项目,记录它并写一个指示。 Succes.

    不,不会那么难,我在最新的教学表中又做了一点。我想你们忘记的是,大多数教育性作品都是由那些一觉醒来并没有“我想做一个教育性作品,我应该做什么?”我认为它更像是“我想在我的花园池塘”,一段时间后,他们意识到“嘿,我可以视频和文档的挖掘和做一个教程的“有时他们已经一半与项目,不要exacly记住他们所做的第一件事是什么。不管怎样,我通常都是这样,我最后一个项目是一个脉冲发生器。我建立它,不是因为我想做一个指导,而是因为我想拥有一个脉冲生成器。不要对自己这么难......

    看到更多»

    不,不会那么难,我在最新的教学表中又做了一点。我想你们忘记的是,大多数教育性作品都是由那些一觉醒来并没有“我想做一个教育性作品,我应该做什么?”我认为它更像是“我想在我的花园池塘”,一段时间后,他们意识到“嘿,我可以视频和文档的挖掘和做一个教程的“有时他们已经一半与项目,不要exacly记住他们所做的第一件事是什么。不管怎样,我通常都是这样,我最后一个项目是一个脉冲发生器。我做了它,不是因为我想做一个教学桌,而是因为我想有一个脉冲发生器。不要对自己太苛刻,如果你想做点什么,你就能做到。当旅途中出现问题时,你总是可以寻求帮助。

    查看教程”
  • 高分辨率频率计数器

    执行此操作,启用和禁用后断需要时间,这将搞定测量。我留下所有操作系统并每隔一切录制Timer1_capture的值。第二。这种方式甚至微控制器的延迟在测量周期的开始和结束时等于,因此它们取消。我说约。其次是因为您测量输入频率和局部频率,衡量多长时间并不重要。使用软管两个,您可以计算实际输入频率。

    查看教程”
  • 高分辨率频率计数器

    嗨,t,对于无符号变量,溢出的时候没有关系,试试数学,很好。最大频率大约是2mhz,任何高于这个频率都会造成麻烦,因为中断将没有足够的时间来完成。在这个互反计数器中,D-FF是必不可少的,它确保测量开始和停止在输入信号的精确边缘。

    Testpoint 5MHz只是一个测试点。它和任何东西都没有联系。但是用示波器你可以检查振荡器是否在运行。如果你有另一个频率计数器(从一个好朋友或在学校…),你可以测量振荡器的确切频率(除以2),并在代码中进行修正。

    查看教程”
  • WilkoL的教程幸运之轮(或骰子?每周统计数据:
    • 幸运之轮(还是骰子?)
      91.意见
      2最喜欢的
      0评论
  • 高分辨率频率计数器

    我给你发过那个地址的邮件。

    查看教程”
  • 高分辨率频率计数器

    那太糟糕了!但如果没有看到你做了什么,就很难猜出哪里出了问题。可能是5V不稳定,可能是10MHz晶体不工作,可能是ATTINY2313和Arduino之间的连接,但最后一个选项似乎不太可能。如果你给我你的电子邮件地址,我可以发给你一个zip文件,我有整个项目。那么至少现在没有区别了。你做的项目和示意图上的一模一样吗?

    查看教程”
  • 二进制树莫尔斯解码器

    虽然繁忙构建有点类似的莫尔斯编码器和 - 我发现在符号表中,有些字符不在我使用的UTI列表中。例如。你有一个黑色斜线(\)。报价标记(“)不是我期待它们的地方。您在这种指示灯中使用了摩尔斯代码?

    查看教程”
  • 高分辨率频率计数器

    嗨,ccrome,我刚刚做了一个没有显示器,但发送其输出到串行端口在9600波特。看到图片我可以通过它通过电子邮件向您发送ZIP文件,如果您需要它。我使用了Peter Feferury的UART代码,它*仅限于Attiny2313,只剩下几个字节的闪光灯。这就是为什么我不能在数字本身中划分小数点,而是将其发送出来作为单独的数字。这是代码(没有串行部分)/ * * comporrocal_counter_serial_out.c * *创建:26-8-2020 08:55:02 *作者:wilko * /#define f_cpu 10000000ul#define uart_baud_rate 9600#定义d_reset(pd3)#define d_clk(pd4)#define d_in(pd5)#define d_ff_port(portd)#define ICP(PD6)#defineLED (PB3)#include #include #include #include 看到更多»

    嗨,ccrome,我刚刚做了一个没有显示器,但发送其输出到串行端口在9600波特。看到图片我可以通过它通过电子邮件向您发送ZIP文件,如果您需要它。我使用了Peter Feferury的UART代码,它*仅限于Attiny2313,只剩下几个字节的闪光灯。这就是为什么我不能在数字本身中划分小数点,而是将其发送出来作为单独的数字。这是代码(没有串行部分)/ * * comporrocal_counter_serial_out.c * *创建:26-8-2020 08:55:02 *作者:wilko * /#define f_cpu 10000000ul#define uart_baud_rate 9600#定义d_reset(pd3)#define d_clk(pd4)#define d_in(pd5)#define d_ff_port(portd)#define ICP(PD6)#defineLED(PB3)#include #include #include #include #include“UART。h“的易失性uint16_t input_counter_high;挥发性uint16_t val_input_counter_high;挥发性uint8_t val_input_counter_low;挥发性uint16_t reference_counter_high;挥发性uint16_t val_reference_counter_high;挥发性uint16_t val_reference_counter_low;挥发性uint8_t wait_a_second;挥发性uint16_t timeout_counter;挥发性uint8_t消息; INT主(无效){uint32_t的温度;UINT32_T INPUT_FREQ;UINT32_T REF_FREQ;uint32_t previous_input_freq;UINT32_T Previous_Reference_Freq;uint64_t real_frequency; uint64_t tussen_freq; uint64_t multiplier; uint8_t dig_point; char buffer[16]; _delay_ms(500); // DDRD |= (1 << D_RESET) | (1 << D_IN); //PD3, PD5 output (output to D-ff /RESET and D-in) D_FF_PORT |= (1 << D_CLK) | (1 << ICP); //PD4, PD6 pull up (inputs for resp. T0 en ICP) TCCR0A = 0; //normal mode TCCR0B |= (1 << CS02) | (1 << CS01) | (1 << CS00); //clock input extern, RISING edge TIMSK |= (1 << TOIE0); //interrupt bij overflow TCCR1A = 0; //normal mode TCCR1B |= (1 << CS10); //prescaler = 1 (10MHz) TCCR1B |= (1 << ICES1); //input capture on RISING edge TCCR1C = 0; TIMSK |= (1 << TOIE1) | (1 << ICIE1); //enable interrupt on overflow & input capture previous_input_freq = 0; previous_reference_freq = 0; real_frequency = 0; dig_point = 8; multiplier = 0; wait_a_second = 0; message = 0; timeout_counter = 765; sei(); uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); D_FF_PORT |= (1 << D_IN); //make D_FF high D_FF_PORT &= ~(1 << D_RESET); //activate /RESET _delay_ms(1); D_FF_PORT |= (1 << D_RESET); //release /RESET while (1) { if (timeout_counter == 0) //no input signal { real_frequency = 0; dig_point = 8; _delay_ms(50); } if (message == 1) { message = 0; timeout_counter = 765; //input signal detected, reset timeout_counter (5 second wait) PORTB |= (1 << LED); //input signal present: LED on D_FF_PORT &= ~(1 << D_RESET); //activate /RESET _delay_us(100); D_FF_PORT &= ~(1 << D_IN); //make D-FF low _delay_us(100); D_FF_PORT |= (1 << D_RESET); //release /RESET wait_a_second = 152; //start countdown to 1 second temp = ((uint32_t) val_input_counter_high << 8) | val_input_counter_low; input_freq = temp - previous_input_freq; previous_input_freq = temp; temp = ((uint32_t) val_reference_counter_high << 16) | val_reference_counter_low; ref_freq = temp - previous_reference_freq; previous_reference_freq = temp; if (ref_freq == 0) ref_freq = 1; //never divide by 0 if (input_freq < 10) //number of received pulses in ~1 second { multiplier = 10000000; dig_point = 1; } else if (input_freq < 100) //number of received pulses in ~1 second { multiplier = 1000000; dig_point = 2; } else if (input_freq < 1000) //etc. { multiplier = 100000; dig_point = 3; } else if (input_freq < 10000) { multiplier = 10000; dig_point = 4; } else if (input_freq < 100000) { multiplier = 1000; dig_point = 5; } else if (input_freq < 1000000) { multiplier = 100; dig_point = 6; } else { multiplier = 10; dig_point = 7; } tussen_freq = (uint64_t) input_freq * F_CPU * multiplier; real_frequency = tussen_freq / (uint64_t) ref_freq; if (real_frequency < 99999999) { ltoa(real_frequency, buffer, 10); uart_puts(buffer); uart_puts("\t"); ltoa(dig_point, buffer, 10); uart_puts(buffer); uart_puts("\n\r"); } } }}ISR (TIMER0_OVF_vect) //TIMER0 overflows after 256 counts{ input_counter_high++;}ISR (TIMER1_OVF_vect) //TIMER1 overflow after 65536 counts{ //occurs 153 times per second reference_counter_high++; if (wait_a_second > 0) wait_a_second--; else D_FF_PORT |= (1 << D_IN); //make D_FF high if (timeout_counter > 0) timeout_counter--; if (wait_a_second == 76) PORTB &= ~(1 << LED); //LED off after half a second}ISR (TIMER1_CAPT_vect){ val_input_counter_low = TCNT0; val_input_counter_high = input_counter_high; val_reference_counter_low = ICR1; val_reference_counter_high = reference_counter_high; message = 1; //signal to main program}

    查看教程”
  • 高分辨率频率计数器

    你的意思是?我不明白你的意思是“连接”你的意思是在STM32上重建这个设备吗?

    查看教程”
  • 光环搬运工

    我几乎很抱歉,我没有Facebook帐户....几乎......但我会在谷歌上看这个家伙,谢谢!顺便说一下!我很快就会上传一个新的原理图,UV LED需要大约3V,它有一段时间,随着新鲜的电池,但经过几天,它是非常晕倒的。我添加了第二次巴蒂,现在它保持了光明。

    查看教程”
  • 蝙蝠探测器

    哈哈,那就再给自己做一个。

    查看教程”
  • 蝙蝠探测器

    啊,这解释了很多:-)祝你好运发现他们。

    查看教程”
  • 蝙蝠探测器

    当超声波测距仪(40千赫)在几米远的地方发出噪音时,我在我的望远镜上拍了一些信号的照片。这些图片被标记为信号被测量的地方。注意图片中不同的灵敏度,100mV/div用于Q1和Q3, 2V/div用于Q4。当然都开着空调。但是我认为晶体管上的电压更有用,所以这里也有:Battery +4.0VCollector Q1 +2.2VEmitter Q2 +2.0VCollector Q3 +2.3VEmitter Q3 +0.8VSucces调试。

    是的,这些文件有这个名字,但显然Instructables没有显示这些文件名。

    查看教程”
  • 蝙蝠探测器

    我会的,过几天……我现在没有靠近任何设备。

    查看教程”
  • Borg Kjoeb

    如果你这样做,不幸的是,不是每个麦克风都工作良好的40kHz或更高。我用过的最好的耳机来自旧的手机“耳机”。剩下的耳机可以用来做另一个博格方块:-)

    查看教程”
  • 爸爸的馅饼

    也许在上面一些奶酪,你把它放在烤箱之前?

    查看教程”
  • 如何让最好的布朗尼蛋糕

    Youtube可能做了一些改变,关于最好的布朗尼蛋糕的视频现在是私人的,这意味着我不能看它:-(

    查看教程”
  • 高分辨率频率计数器

    5V而不是3.3V *不应该*有任何区别。但我看到我没有将电容从/ RESET(PIN1)放到地面。尝试将100nf电容器放在那里。它将保持MCU重置一点。

    查看教程”
  • 蝙蝠探测器

    美丽的建设!祝你好运今晚。

    查看教程”
  • 容易建立焦点堆叠钻机

    我的待办事项表上还有一个项目。:-)

    查看教程”
  • 蝙蝠探测器

    不幸的是,我不知道我的麦克风是什么类型的。它们来自旧的电话耳机,我找来当麦克风用。这款耳机来自三星、诺基亚、摩托罗拉和HTC。

    查看教程”
  • Borg Kjoeb

    太棒了!我是《星际迷航》的粉丝,你看出来了吗?

    查看教程”
  • 衍射实验在家里(如何测量微小的东西!)

    太酷了!我以为你需要把切口弄窄一点还需要刀片,而不是信用卡。我要试试这个!

    查看教程”
  • 双踪示波器

    很高兴看到,并与BNC连接器!

    查看教程”
  • 威尔科尔的条目蝙蝠探测器是一个决赛中的音频挑战2020比赛
  • 蝙蝠探测器

    谢谢,是的,展示在(简单的)电路中发生了什么就是我们的意图。

    查看教程”