Today I wanted to talk about a video that inspired me by Joop Brokking
it’s a tutorial video about STM32F103C8T6 ARM STM32 Minimum System Development board known also as the Blue Pill and how to program it to use the MPU-6050 sensors board via I2C
In this video Joop tested the i2c communication from the MPU-6050 sensors board to the STM32F103C8T6 ARM-M3 Micro controller
He used a real hardware Oscilloscope to test the signal
and show the errors and how to fix them
These hardware Oscilloscopes are very useful
but could also be quite expensive, especially for a beginner
So I thought why not replicate the hardware setup and try the same experiment with my Hantek 6022BE PC USB Digital portable Oscilloscope
And see how the single looks like or if it’s even capable measuring these kind of signals
The Hantek 6022BE PC USB Digital portable Oscilloscope, is a PC USB Digital portable Oscilloscope that features 2 20MHz analog Channels at 48M, and single can be shown on the computer with a dedicated software that comes with it
I have tested the 100KHz and 400KHz with no problem
You can see the clock signal and the data signal
As can be seen here it works great and it only costs around 70$
There are multiple ways to investigate the signal
and the software has some nice measuring capabilities
But of course it has less features than the hardware ones
and probably will not work at the higher scales of Mhz signals
I have also tried the same experiment with my USB 24MHz 8 Channel Logic Analyzer and the results were also great and this one only costs around 10$, but cannot debug analog signals only digital ones (i2c, spi, UART , etc...)
To program the STM32 you will beed an FTDI programer connected to the STM32 B6 and B7
Check out the full tutorial about programming the STM32F103C8T6 here
To trail and error with Arduino sketchs you will need some tools, one of them is an oscilloscope, lets learn the basics of this important tool.
An oscilloscope is a debugging tool for electronics circuits where you can prob any point and check out the signal in watch it in real time (voltage over time)
for example you could check an Arduino PWM signal with this tool and measure the duty cycle, voltage or if it is even working at all.
I bought mine here
This is a starting level device and it has it's limitation but it is cheap and will do the job.
It does not have it's own display like and expensive, portable and professional ones, but it will rather connect to your computer via USB and you will see the signal over the computers screen when lunching the application that comes with it.
Please check out this video to see it in action
Also note that you can use the scope with the software provided or use
the open source PulseView or the another great alternative is basicscope
If your are learning to code to Arduino and you write your own sketchs sooner to later you will need to learn about avrdude, so let's do that.
avrdude is a command line utility developed by Atmel.
It is used to burn sketches to your Arduino, configure your Arduino register and fuses and also flash a different bootloader then the stock one for example the optiboot a smaller bootloader which will free up some memory space for your sketch.
This command will burn your Arduino with custom bootloader hex file.
Check out this article about this custom bootloader to learn more.
You can learn how to install it here.
if you are not familiar with adafruit you should definitely do so.
This site by ladyada explains everything you should know about avrdude commands.
While building my SmartHomeDIY project I encountered a problem trying to use multiple SPI devices connected to the same Arduino.
Although the SPI bus should support multiple devices at the same time (toggling the Chip-Select line), this does not always work (mostly due to part using the bus not respecting the chip select or other configuration issues).
So after reading for some time and experimenting I came up with the following solution. learn more about transistors here
The above station is an IR recorder and transmitter station.
It can be set into recording state which then saved the recorded IR-in data into and SDCard connected over SPI.
But when not in recording mode it will listen over the RF24 (also connected via SPI) for commands.
Once a command is given it will try to send the IR code request (for example turn TV on)
To do that it will again have to move to SDCard mode and read the previously recorded data and retransmit it over the IR out LED.
So to solve this I have connected the SPI lines to couple of transistors/switches,
They just CUT the lines of the component which is not being used at the moment and there for prevent the SPI lines collision.
Attached is the code and hardware layout to do just that
Note that it does not matter which type of project you have.
You can always do the same transistor-switch trick to cut of the problematic SPI lines while using the others.
A special note for the transistor configurations,
It will not work if you design you transistor configuration as usually suggested, which means to set a logic level by design at the output of the transistor so that the base will toggle the out voltage (same as an amplifier).
Instead I set the signal to go trough the transistor, which needed so testing to select the transistor which does not affect the actual signal (it will depend on the transistor type, spec and configuration...)
So it took me some time to figure out the right transistor values and configuration.
For trail and error I used this logic analyzer 8 logic lines or better yet one of these pro logic analyzers or one from ebay and there is also a very cool one which has 8 digital channels and one analog - perfect for beginners.
I inspected the incoming signal and the outgoing signal to make sure the transistor does not temper with the incoming signal so everything will continue to work as expected (the transistor are transparent to the actual data)
You could also try this Hantek 6022BE PC USB Digital Oscilloscope which is working perfectly on Window 10 environment.
You could also get one on ebay
You could also use this logic multiplexer [8 Channel Logic Level Converter Convert TTL Bi-directional] to do the same job which I have not tested yet.
But I think my way is more fun! :)