pull/58/head
fhdm-dev 2021-12-01 12:39:44 +11:00
commit 0085afefcd
87 zmienionych plików z 1741 dodań i 0 usunięć

104
README.md 100644
Wyświetl plik

@ -0,0 +1,104 @@
> If you are looking for the Scopy Oscilloscope by Analog Devices you can find it [here](https://wiki.analog.com/university/tools/m2k/scopy/oscilloscope).
# Scoppy
Scoppy is an oscilloscope and logic analyzer powered by your Android phone/tablet and Raspberry Pi Pico. Signals are measured by the Pico and the waveforms are displayed on the Android device. No programming is required and both the app and firmware are free to download. Installation is super easy and should only take a few minutes.
The aim of the Scoppy project is to give electronics novices and hobbyists access to an ultra-ultra cheap oscilloscope that is useful for viewing low voltage, low frequency signals. Scoppy is also a logic analyzer with a sample rate of 25MS/s.
## What you'll need
* An Android device that's running Android version 6.0 (Marshmallow) or higher. The device must also support USB OTG (On-The-Go) - most modern phones/tablets do (if you don't see the app when browsing the Play Store then your device probably doesn't support this feature)
* A USB OTG adapter/cable compatible with your phone/tablet (available for a few dollars)
* A Rasperry Pi Pico board
> Important
> Please use the latest versions of the App (v1.014) and Firmware (v7). Older versions of the firmware may not work with the latest version of the app and vice versa
## Quick Start
### 1. Install the Scoppy Android App
Install the [Scoppy Android app](https://play.google.com/store/apps/details?id=xyz.fhdm.scoppy) from the Play Store.
### 2. Install the firmware onto your Pico
Download the firmware onto your computer. It is here: [pico-scoppy-v7.uf2](https://fhdm-dev.github.io/downloads/scoppy-pico-v7.uf2).
Press the bootsel button on your Pico and connect it to your computer. Copy the uf2 file onto your Pico. The onboard LED should start blinking.
### 3. Connect the Pico to your Phone/Tablet
Attach the OTG adapter/cable to the USB input of the Android device. The other end attaches to the USB cable you have connected to your Pico.
### 4. Start Scoppying!
Attach the +ve output of your signal source to GPIO26 of the Pico and the ground to gnd. This will allow you to measure signals between 0V and 3.3V. Of course the signal voltage should be within the allowed range of the ADC pins of the RP2040. See section 5.2.3 of the RP2040 Datasheet for more information. For Channel 2, connect the signal to GPIO27.
> You might want to insert a current limiting resistor (eg 100R) between the signal source and the pico ADC (GPIO26/27) to limit the current through the Pico ESD diodes in case you accidentally apply a voltage higher than 3.3V.
If you don't have a suitable signal source you can view the test signal on GPIO 22 by connecting it directly to the ADC pins (GPIO 26 and 27). GPIO 22 is a 1kHz square wave with a duty cycle of 50%.
## Logic Analyzer
To use Scoppy as a logic analyzer tap the Menu button and then the Mode button and tap 'Logic Analyzer'. The logic analyzer inputs are GPIOs 6 to 13. Please remember to only apply voltages of between 0 and 3.3V to these pins.
## Detailed installation and usage instructions
See the [documentation](https://oscilloscope.fhdm.xyz/)
## Discussions/Forum
Go to the [Discussions](https://github.com/fhdm-dev/scoppy/discussions) section of this repository to well ... discuss Scoppy. For example, ask and answer questions, give feedback, request features, report bugs, share your front-end designs or comment on just about anything related to Scoppy, Oscilloscopes, Logic Analyzers or electronics in general.
## Measuring different voltage ranges (oscilloscope mode)
To remove the 0-3.3V input voltage limitation (and do whatever signal conditioning magic takes your fancy) youll need to add an [analog front end](https://oscilloscope.fhdm.xyz/wiki/Analog-Front-End). This can be as simple as a voltage divider or as complex as you want it to be. The [Documentation](https://oscilloscope.fhdm.xyz/) contains some [examples](https://oscilloscope.fhdm.xyz/wiki/Analog-Front-End-Examples) of simple and cheap AFE designs and you are encouraged to share your own front end designs and ideas with other Scoppiers. Just head to the [forum](https://github.com/fhdm-dev/scoppy/discussions).
## Tips
* If the traces or grid lines look too narrow then you can change the width in Settings (tap Menu to see the Settings option)
* Long-pressing most of the control buttons will set the corresponding setting to a default value eg. long-pressing the horizontal position button will reset the horizontal position back to zero. Long-pressing the trigger level button will set the trigger level to the centre of the waveform.
* Long-pressing any of the +/- buttons will continuously change the corresponding value. The longer you press it the faster the value will change.
* Tap the GND indicator (the right pointing arrow on the left of the screen) to change the selected channel. The selected channel is the one that responds to vertical swiping/zooming and tapping the vertical scale and position buttons.
## Quirks
* If the screen turns off or the app is no longer in the foreground the run mode will change to STOPPED (to prevent draining the battery). You will need to tap RUN to restart the scope.
* Tapping the phone's the back button to get back to your phone/tablet's home screen has the effect of closing the app. Tap the phone's home button instead.
* The OFF trigger mode prevents all triggering and Scoppy will set the horizonal position so that it is displaying the most recent samples (it normally tries to find a trigger point near the centre of the sample record). This may or may not be useful for viewing very slowly changing signals.
## Troubleshooting
* If the Pico doesn't seem to be connecting try the following:
* tap STOP and then RUN
* OR
* unplug the USB cable and plug it back in
* If your phone has a Micro-USB connecter then check that the Micro-USB plug of the OTG cable/adapter is plugged into the phone and not into the Pico.
* If it's still not working then it's possible that your phone/tablet doesn't support USB OTG. You can test this by attaching a USB thumb drive to the OTG cable/adapter. You should be able to browse the files on the drive.
* Some diagnostic information is also writtern to the Pico UART on GPIO 0 & 1
## Specifications (oscilloscope)
* Max. Sampling Rate: 500kS/s (shared between channels)
* Time/Div: 5us - 20secs
* Memory depth depends on sampling rate. It ranges between 2kpts (shared between channels) and 20kpts in Run mode and up to 100kpts for Single shot captures.
* 2 channels
## Specifications (logic analyzer)
* Max. Sampling Rate: 25MS/s (per channel)
* Time/Div: 50ns - 100ms
* 8 channels
## Known Bugs
* When long-pressing the + or - buttons, moving your finger laterally will have the same effect as lifting your finger off the button. The only workaround is to keep your finger stready when long-pressing these buttons.
## Links
* An article on [Hackaday](https://hackaday.com/2021/06/26/raspberry-pi-pico-oscilloscope/), including many scathing reviews in the comments section. If you hate Scoppy and/or its developer then this would be a great place to vent your anger!
* Scoppy [YouTube](https://www.youtube.com/channel/UCD006Xn-C9mPuT_jTxH3JHQ) channel (there's nothing much here)
## Tutorials/Experiments
* Here are [some tutorials and experiments](https://github.com/fhdm-dev/scoppy-experiments) demonstrating how to use Scoppy with a variety of circuits.
## Advertising and in-app purchase
The free (zero cost) version of the app is limited to one channel. A single banner ad may be displayed at the top of the screen. To enable the extra channel(s) and remove all advertising, a small in-app purchase is required (approx. US$1 for a yearly subscription or US$2 for a lifetime purchase - exact price depends on your location).
## Gallery
![Scoppy Oscilloscope App](images/scoppy-v2-running-2ch.jpg)
Screenshot
![Scoppy Development](images/phone-breadboard-pico-afe.jpg)
Scoppy app on a Nokia 2.1
![Scoppy Logic Analyser](images/logic-analyzer-demo.jpg)
Logic Analyzer mode

5
docs/.gitignore vendored 100644
Wyświetl plik

@ -0,0 +1,5 @@
_site
.sass-cache
.jekyll-cache
.jekyll-metadata
vendor

25
docs/404.html 100644
Wyświetl plik

@ -0,0 +1,25 @@
---
permalink: /404.html
layout: default
---
<style type="text/css" media="screen">
.container {
margin: 10px auto;
max-width: 600px;
text-align: center;
}
h1 {
margin: 30px 0;
font-size: 4em;
line-height: 1;
letter-spacing: -1px;
}
</style>
<div class="container">
<h1>404</h1>
<p><strong>Page not found :(</strong></p>
<p>The requested page could not be found.</p>
</div>

1
docs/CNAME 100644
Wyświetl plik

@ -0,0 +1 @@
oscilloscope.fhdm.xyz

32
docs/Gemfile 100644
Wyświetl plik

@ -0,0 +1,32 @@
source "https://rubygems.org"
# Hello! This is where you manage which Jekyll version is used to run.
# When you want to use a different version, change it below, save the
# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
#
# bundle exec jekyll serve
#
# This will help ensure the proper Jekyll version is running.
# Happy Jekylling!
#gem "jekyll", "~> 4.2.0"
gem "github-pages", "~> 219", group: :jekyll_plugins
# This is the default theme for new Jekyll sites. You may change this to anything you like.
gem "minima", "~> 2.5"
#gem "cayman", "~> 2.5"
# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
# uncomment the line below. To upgrade, run `bundle update github-pages`.
#gem "github-pages", group: :jekyll_plugins
# If you have any plugins, put them here!
group :jekyll_plugins do
gem "jekyll-feed", "~> 0.12"
end
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
# and associated library.
platforms :mingw, :x64_mingw, :mswin, :jruby do
gem "tzinfo", "~> 1.2"
gem "tzinfo-data"
end
# Performance-booster for watching directories on Windows
gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin]

282
docs/Gemfile.lock 100644
Wyświetl plik

@ -0,0 +1,282 @@
GEM
remote: https://rubygems.org/
specs:
activesupport (6.0.4.1)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
tzinfo (~> 1.1)
zeitwerk (~> 2.2, >= 2.2.2)
addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0)
coffee-script (2.4.1)
coffee-script-source
execjs
coffee-script-source (1.11.1)
colorator (1.1.0)
commonmarker (0.17.13)
ruby-enum (~> 0.5)
concurrent-ruby (1.1.9)
dnsruby (1.61.7)
simpleidn (~> 0.1)
em-websocket (0.5.2)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0.6.0)
ethon (0.14.0)
ffi (>= 1.15.0)
eventmachine (1.2.7)
execjs (2.8.1)
faraday (1.7.1)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
faraday-httpclient (~> 1.0.1)
faraday-net_http (~> 1.0)
faraday-net_http_persistent (~> 1.1)
faraday-patron (~> 1.0)
faraday-rack (~> 1.0)
multipart-post (>= 1.2, < 3)
ruby2_keywords (>= 0.0.4)
faraday-em_http (1.0.0)
faraday-em_synchrony (1.0.0)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-net_http (1.0.1)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
ffi (1.15.4)
forwardable-extended (2.6.0)
gemoji (3.0.1)
github-pages (219)
github-pages-health-check (= 1.17.7)
jekyll (= 3.9.0)
jekyll-avatar (= 0.7.0)
jekyll-coffeescript (= 1.1.1)
jekyll-commonmark-ghpages (= 0.1.6)
jekyll-default-layout (= 0.1.4)
jekyll-feed (= 0.15.1)
jekyll-gist (= 1.5.0)
jekyll-github-metadata (= 2.13.0)
jekyll-mentions (= 1.6.0)
jekyll-optional-front-matter (= 0.3.2)
jekyll-paginate (= 1.1.0)
jekyll-readme-index (= 0.3.0)
jekyll-redirect-from (= 0.16.0)
jekyll-relative-links (= 0.6.1)
jekyll-remote-theme (= 0.4.3)
jekyll-sass-converter (= 1.5.2)
jekyll-seo-tag (= 2.7.1)
jekyll-sitemap (= 1.4.0)
jekyll-swiss (= 1.0.0)
jekyll-theme-architect (= 0.2.0)
jekyll-theme-cayman (= 0.2.0)
jekyll-theme-dinky (= 0.2.0)
jekyll-theme-hacker (= 0.2.0)
jekyll-theme-leap-day (= 0.2.0)
jekyll-theme-merlot (= 0.2.0)
jekyll-theme-midnight (= 0.2.0)
jekyll-theme-minimal (= 0.2.0)
jekyll-theme-modernist (= 0.2.0)
jekyll-theme-primer (= 0.6.0)
jekyll-theme-slate (= 0.2.0)
jekyll-theme-tactile (= 0.2.0)
jekyll-theme-time-machine (= 0.2.0)
jekyll-titles-from-headings (= 0.5.3)
jemoji (= 0.12.0)
kramdown (= 2.3.1)
kramdown-parser-gfm (= 1.1.0)
liquid (= 4.0.3)
mercenary (~> 0.3)
minima (= 2.5.1)
nokogiri (>= 1.10.4, < 2.0)
rouge (= 3.26.0)
terminal-table (~> 1.4)
github-pages-health-check (1.17.7)
addressable (~> 2.3)
dnsruby (~> 1.60)
octokit (~> 4.0)
public_suffix (>= 3.0, < 5.0)
typhoeus (~> 1.3)
html-pipeline (2.14.0)
activesupport (>= 2)
nokogiri (>= 1.4)
http_parser.rb (0.6.0)
i18n (0.9.5)
concurrent-ruby (~> 1.0)
jekyll (3.9.0)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
i18n (~> 0.7)
jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 2.0)
kramdown (>= 1.17, < 3)
liquid (~> 4.0)
mercenary (~> 0.3.3)
pathutil (~> 0.9)
rouge (>= 1.7, < 4)
safe_yaml (~> 1.0)
jekyll-avatar (0.7.0)
jekyll (>= 3.0, < 5.0)
jekyll-coffeescript (1.1.1)
coffee-script (~> 2.2)
coffee-script-source (~> 1.11.1)
jekyll-commonmark (1.3.1)
commonmarker (~> 0.14)
jekyll (>= 3.7, < 5.0)
jekyll-commonmark-ghpages (0.1.6)
commonmarker (~> 0.17.6)
jekyll-commonmark (~> 1.2)
rouge (>= 2.0, < 4.0)
jekyll-default-layout (0.1.4)
jekyll (~> 3.0)
jekyll-feed (0.15.1)
jekyll (>= 3.7, < 5.0)
jekyll-gist (1.5.0)
octokit (~> 4.2)
jekyll-github-metadata (2.13.0)
jekyll (>= 3.4, < 5.0)
octokit (~> 4.0, != 4.4.0)
jekyll-mentions (1.6.0)
html-pipeline (~> 2.3)
jekyll (>= 3.7, < 5.0)
jekyll-optional-front-matter (0.3.2)
jekyll (>= 3.0, < 5.0)
jekyll-paginate (1.1.0)
jekyll-readme-index (0.3.0)
jekyll (>= 3.0, < 5.0)
jekyll-redirect-from (0.16.0)
jekyll (>= 3.3, < 5.0)
jekyll-relative-links (0.6.1)
jekyll (>= 3.3, < 5.0)
jekyll-remote-theme (0.4.3)
addressable (~> 2.0)
jekyll (>= 3.5, < 5.0)
jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
rubyzip (>= 1.3.0, < 3.0)
jekyll-sass-converter (1.5.2)
sass (~> 3.4)
jekyll-seo-tag (2.7.1)
jekyll (>= 3.8, < 5.0)
jekyll-sitemap (1.4.0)
jekyll (>= 3.7, < 5.0)
jekyll-swiss (1.0.0)
jekyll-theme-architect (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-cayman (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-dinky (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-hacker (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-leap-day (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-merlot (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-midnight (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-minimal (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-modernist (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-primer (0.6.0)
jekyll (> 3.5, < 5.0)
jekyll-github-metadata (~> 2.9)
jekyll-seo-tag (~> 2.0)
jekyll-theme-slate (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-tactile (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-theme-time-machine (0.2.0)
jekyll (> 3.5, < 5.0)
jekyll-seo-tag (~> 2.0)
jekyll-titles-from-headings (0.5.3)
jekyll (>= 3.3, < 5.0)
jekyll-watch (2.2.1)
listen (~> 3.0)
jemoji (0.12.0)
gemoji (~> 3.0)
html-pipeline (~> 2.2)
jekyll (>= 3.0, < 5.0)
kramdown (2.3.1)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
liquid (4.0.3)
listen (3.7.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.3.6)
minima (2.5.1)
jekyll (>= 3.5, < 5.0)
jekyll-feed (~> 0.9)
jekyll-seo-tag (~> 2.1)
minitest (5.14.4)
multipart-post (2.1.1)
nokogiri (1.12.4-x86_64-linux)
racc (~> 1.4)
octokit (4.21.0)
faraday (>= 0.9)
sawyer (~> 0.8.0, >= 0.5.3)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
public_suffix (4.0.6)
racc (1.5.2)
rb-fsevent (0.11.0)
rb-inotify (0.10.1)
ffi (~> 1.0)
rexml (3.2.5)
rouge (3.26.0)
ruby-enum (0.9.0)
i18n
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
safe_yaml (1.0.5)
sass (3.7.4)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
sawyer (0.8.2)
addressable (>= 2.3.5)
faraday (> 0.8, < 2.0)
simpleidn (0.2.1)
unf (~> 0.1.4)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
thread_safe (0.3.6)
typhoeus (1.4.0)
ethon (>= 0.9.0)
tzinfo (1.2.9)
thread_safe (~> 0.1)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.7)
unicode-display_width (1.7.0)
zeitwerk (2.4.2)
PLATFORMS
x86_64-linux
DEPENDENCIES
github-pages (~> 219)
jekyll-feed (~> 0.12)
minima (~> 2.5)
tzinfo (~> 1.2)
tzinfo-data
wdm (~> 0.1.1)
BUNDLED WITH
2.2.27

18
docs/TOC.md 100644
Wyświetl plik

@ -0,0 +1,18 @@
---
title: Index
---
* [Home](/)
* [Installation & Getting Started](wiki/Installation-&-Getting-Started)
* [Using the app](app-help)
* [Pico GPIOs](wiki/GPIOs)
* [Analog Front-End](wiki/Analog-Front-End)
* [Front-end designs](wiki/Analog-Front-End-Examples)
* [Design 1](wiki/front-end-design-1)
* [Design 2](wiki/front-end-design-2)
* [Design 3](wiki/front-end-design-3)
* [Design 4](wiki/front-end-design-4)
<br>
[Scoppy on GitHub](https://github.com/fhdm-dev/scoppy)

64
docs/_config.yml 100644
Wyświetl plik

@ -0,0 +1,64 @@
# Welcome to Jekyll!
#
# This config file is meant for settings that affect your whole blog, values
# which you are expected to set up once and rarely edit after that. If you find
# yourself editing this file very often, consider using Jekyll's data files
# feature for the data you need to update frequently.
#
# For technical reasons, this file is *NOT* reloaded automatically when you use
# 'bundle exec jekyll serve'. If you change this file, please restart the server process.
#
# If you need help with YAML syntax, here are some quick references for you:
# https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml
# https://learnxinyminutes.com/docs/yaml/
#
# Site settings
# These are used to personalize your new site. If you look in the HTML files,
# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
# You can create any custom variable you would like, and they will be accessible
# in the templates via {{ site.myvariable }}.
title: Scoppy - Oscilloscope and Logic Analyzer
#email: your-email@example.com
description: >- # this means to ignore newlines until "baseurl:"
Scoppy is an oscilloscope and logic analyzer powered by your Android phone/tablet and Raspberry Pi Pico.
#baseurl: "" # the subpath of your site, e.g. /blog
#url: "" # the base hostname & protocol for your site, e.g. http://example.com
#twitter_username: jekyllrb
github_username: fhdm-dev
# Build settings
theme: minima
#remote_theme: pages-themes/cayman@v0.2.0
plugins:
- jekyll-feed
- jekyll-remote-theme
# Exclude from processing.
# The following items will not be processed, by default.
# Any item listed under the `exclude:` key here will be automatically added to
# the internal "default list".
#
# Excluded items can be processed by explicitly listing the directories or
# their entries' file path in the `include:` list.
#
exclude:
- serve.sh
# - .sass-cache/
# - .jekyll-cache/
# - gemfiles/
# - Gemfile
# - Gemfile.lock
# - node_modules/
# - vendor/bundle/
# - vendor/cache/
# - vendor/gems/
# - vendor/ruby/
#
# fhdm-dev
#
# - index.md
# - none.markdown
header_pages:
- TOC.md

Wyświetl plik

@ -0,0 +1,29 @@
---
layout: post
title: "Welcome to Jekyll!"
date: 2021-09-06 09:46:58 +1000
categories: jekyll update
---
Youll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated.
Jekyll requires blog post files to be named according to the following format:
`YEAR-MONTH-DAY-title.MARKUP`
Where `YEAR` is a four-digit number, `MONTH` and `DAY` are both two-digit numbers, and `MARKUP` is the file extension representing the format used in the file. After that, include the necessary front matter. Take a look at the source for this post to get an idea about how it works.
Jekyll also offers powerful support for code snippets:
{% highlight ruby %}
def print_hi(name)
puts "Hi, #{name}"
end
print_hi('Tom')
#=> prints 'Hi, Tom' to STDOUT.
{% endhighlight %}
Check out the [Jekyll docs][jekyll-docs] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekylls GitHub repo][jekyll-gh]. If you have questions, you can ask them on [Jekyll Talk][jekyll-talk].
[jekyll-docs]: https://jekyllrb.com/docs/home
[jekyll-gh]: https://github.com/jekyll/jekyll
[jekyll-talk]: https://talk.jekyllrb.com/

Wyświetl plik

@ -0,0 +1,18 @@
---
layout: page
title: About
permalink: /about/
---
This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](https://jekyllrb.com/)
You can find the source code for Minima at GitHub:
[jekyll][jekyll-organization] /
[minima](https://github.com/jekyll/minima)
You can find the source code for Jekyll at GitHub:
[jekyll][jekyll-organization] /
[jekyll](https://github.com/jekyll/jekyll)
[jekyll-organization]: https://github.com/jekyll

Wyświetl plik

@ -0,0 +1,10 @@
---
title: Channels - Logic Analyzer
---
Tap the channel badges at the bottom of the screen to enable/disable each channel.
<br>
[App Help](.)
[All Documentation](../TOC)
[Scoppy on GitHub](https://github.com/fhdm-dev/scoppy)

Wyświetl plik

@ -0,0 +1,11 @@
---
title: Channels - Oscilloscope
---
Tap the channel badge at the bottom of the screen to show the channel menu.
From the menu the channel can be enabled/disabled and the channel voltage range(s) can be configured.
<br>
[App Help](.)
[All Documentation](../TOC)
[Scoppy on GitHub](https://github.com/fhdm-dev/scoppy)

Wyświetl plik

@ -0,0 +1,18 @@
---
title: Cursors
---
> Added in Version 1.013 of the app.
Cursors are horizontal and vertical markers that indicate X-axis values and Y-axis
values on a selected waveform source. You can use cursors to make custom
voltage, time or frequency measurements on oscilloscope signals (and time or frequency measurements on Logical Analyzer signals).
Y-cursors are not available in Logic Analyzer mode.
To enable cursors, tap the CURSORS button on the menu. The cursor information will be displayed on the top-left of the display. An extra cursor control badge will appear at the bottom of the screen. You can use this to hide the cursor(s) without losing the current position. This control is also used to change the channel associated with the Y cursor.
Cursors are not limited to the visible display. If you change the horizontal and/or vertical position and/or scale the cursors will move with the waveform - possibly off the screen. TIP: To get the cursors back on the visible part of the screen just disable and then enable cursors using the CURSORS button (ie tap the button twice).
To move a cursor, tap the cursor until it changes color from red to orange. Keeping your finger on the screen, move the cursor to the desired position.

Wyświetl plik

@ -0,0 +1,39 @@
---
title: Horizontal Position
---
There are a number ways that the horizontal position can be adjusted.
<br>
### 1. Touch Gestures
Swipe to the left or right.
<br>
### 2. POSITION + and - Buttons
Single tap these buttons or tap-and-hold.
![Horizontal position plus and minus buttons](images/horz-pos-plus-minus.jpg)
<br>
### 3. Single Tap the POSITION Button
This allows you to enter an exact value.
![Horizontal position single tap](images/horz-pos-dialog.jpg)
<br>
### 4. Tap and Hold the POSITION Button
This will set the POSITION to its default value (0 divs).
<br>
[App Help](.)
[All Documentation](../TOC)
[Scoppy on GitHub](https://github.com/fhdm-dev/scoppy)

Wyświetl plik

@ -0,0 +1,49 @@
---
title: Horizontal Scale
---
There are a number ways that the horizontal scale (Time/div) can be adjusted.
### 1. Slider
Tap the Time/div value that is displayed at the top of the screen. The Time/div setting can be adjusted by moving the slider. This is a good method
for finding the signal if the frequency is not known or for coarse adjustment of the setting. When looking for a signal of unknown frequency, move the
slider fairly slowly so that Scoppy can update the sampling rate as the timebase changes.
> TIP: When looking for a signal of unknown frequency, start at the shortest timebase setting (ie. start from the left) to reduce the chance of seeing
aliased versions of the signal.
![timebase-slider](images/timebase-slider.jpg)
<br>
### 2. Touch Gestures
Pinch and zoom on the screen horizontally.
<br>
### 3. TIME/DIV + and - Buttons
Single tap these buttons or tap-and-hold.
![time-div-plus-and-minus-buttons](images/timebase-plus-minus.jpg)
<br>
### 4. Single Tap the TIME/DIV Button
This allows you to enter an exact value.
![timebase-single-tap](images/time-div-dialog.jpg)
<br>
### 5. Tap and Hold the TIME/DIV Button
This will set the TIME/DIV to its default value (10ms/div).
<br>
[App Help](.)
[All Documentation](../TOC)
[Scoppy on GitHub](https://github.com/fhdm-dev/scoppy)

Wyświetl plik

@ -0,0 +1,83 @@
---
title: The Oscilloscope Screen
---
![](https://github.com/fhdm-dev/scoppy/raw/main/images/ui-with-labels.png)
### Top Status Bar
**Sample Rate**
The sample rate used to capture the displayed waveform. Tap this to set a fixed sample rate.
**Sample Count**
The number of samples captured and stored by the app
**Sample Record View**
High-level view of the overall waveform record. The gray rectangle represents the part of the record that is displayed on the screen. The vertical line is the position of the trigger point in the record.
**Horizontal Time/Div**
The currently selected Horizontal time/div setting. Tap here to display a popup from which you can quickly change the horizontal time/div. The horizontal time/div can also be adjusted using the Horizontal TIME/DIV controls on the RHS control panel.
**Horizontal Position**
The horizontal position in relation to the trigger point - measured in divs. This can be adjusted using the Horizontal POSITION controls on the RHS control panel.
### Right-hand side Control Panel
**Run Mode Button**
Toggles between Run and Stopped modes
**Single Shot Capture Button**
Captures a single waveform record. The sample count and rate will generally be higher than waveforms captured in Run mode.
**Navigation Button**
Tapping this button will hide the control panel and show the function menu. From the function menu tap CONTROLS to show the control panel.
**Horizontal Controls**
Use these to adjust the Horizontal time/div and position settings.
Single tap or long-press the +/- buttons. Tap the TIME/DIV button to enter an exact value. Long-press TIME/DIV to reset to the default value. Tap the POSITION button to enter an exact value for the position. Long-press POSITION to reset the position to 0.
**Vertical Controls**
Use these to adjust the Vertical volts/div and position settings for each channel. First select the channel you wish to adjust by tapping the appropriate CH button. Single tap or long-press the +/- buttons to adjust the selected channel. Tap the VOLTS/DIV button to enter an exact value for volts/div. Long-press VOLTS/DIV to reset to the default value. Tap the POSITION button to enter an exact value for the vertical position of the waveform on the screen. Long-press POSITION to reset the position to 0.
**Trigger Controls**
Use these to adjust the selected trigger channel, level and triggering mode. Single tap the LEVEL button to enter an exact value for the trigger level. Long press the LEVEL button to set the trigger level to the midpoint of the current waveform (ie. 50%).
### Bottom Status Bar
**Signal Source**
The source from which to obtain measurements. If USB is selected you will need to connect your Android device to a Raspberry PI Pico using an On-the-go (OTG) cable or adapter. The Pico will also need to have the scoppy-pico firmware installed (see the installation page in this wiki). Tapping this badge will open a menu from which you can change the signal source as well as view information about the currently connected device.
**Channel Badges**
These display the status and settings of the two channels. Tap the badge to display a menu from which you can turn on/off the channel and modify channel settings.
- **Channel Volts/Div**
Currently selected Volts/Div for the channel
- **Channel Position**
Vertical position of the channel waveform on the screen
- **Channel Voltage Range**
If you have configured multiple voltage ranges in the channel settings then the currently selected range will be shown here. See the [Analog Front-End](./Analog-Front-End) documentation for more information.
**Trigger Badge**
This displays the current trigger settings. Tap the badge to open the trigger menu.
- **Trigger Channel**
The currently selected trigger channel
- **Trigger Level**
The trigger level for the selected channel
### Waveform View (Grid/Gradicule)
**Channel Ground Levels**
The vertical position on the screen which corresponds to 0V for the channel.
**Waveform Measurements**
**Run Status**
Indicated if the scope is in Run mode, Stopped or performing a single capture.
**Grid Lines and Waveform Traces**
The width of these can be configured via Settings (Tap the Menu button to get to Settings).
<br>
[App Help](.)
[All Documentation](../TOC)
[Scoppy on GitHub](https://github.com/fhdm-dev/scoppy)

Wyświetl plik

@ -0,0 +1,18 @@
---
title: Application Modes
---
The app can be run in either Oscilloscope or Logic Analyzer modes (but not both at once). The mode is changed by tapping the Mode button on the
main menu panel.
![app-mode-button](images/app-mode-buttons.jpg)
<br>
In Oscilloscope mode, signals are captured on GPIOs 26 & 27.
In Logic Analyzer mode, signals are captured on GPIOs 6 to 13.
<br>
[App Help](.)
[All Documentation](../TOC)
[Scoppy on GitHub](https://github.com/fhdm-dev/scoppy)

Wyświetl plik

@ -0,0 +1,38 @@
---
title: Run Modes
---
# RUN/STOP
Tapping this button will toggle between Run and Stop modes.
When RUN is tapped the app will first try and connect to the Pico and you might see
an Android prompt asking for permission to read from the USB device. When/if connected the app will continuously recieve and display sample
date from the Pico.
![stopped](images/stopped.jpg)
When STOP is tapped the app will stop receiving sample data from the Pico and display the most recently received data.
![running](images/running.jpg)
The RUN/STOP and SINGLE buttons are also on the main menu panel.
![run-stop-on-main-menu](images/run-buttons-on-main-menu.jpg)
<br>
# SINGLE
When this button is tapped the app will capture a single record of sample data and then stop. The record length is 100k samples (except where the
sample rate is so low that capturing this many samples would take more than 10 seconds).
Single capture mode is useful for when you wish to zoom in or out of the sample record and so require a large number of samples to be captured and/or
when you want to trigger on a single event such as turning on a switch.
When doing a single capture the currently selected trigger mode will be used (ie. Off, Auto or Normal).
<br>
[App Help](.)
[All Documentation](../TOC)
[Scoppy on GitHub](https://github.com/fhdm-dev/scoppy)

Wyświetl plik

@ -0,0 +1,22 @@
---
title: Sample Rate
---
You may have noticed that Scoppy changes the sampling rate as you change the Time/Div setting. This can be annoying if you
are zooming in and out of a signal but want the sampling rate to stay the same (especially when doing consecutive
single shot captures).
To avoid this problem you can set a fixed sampling rate. To do this just tap the sample rate at the top-left of the
screen and select a sample rate from the menu. You can also toggle between auto sample rate and fixed sample rate by tapping and
holding the sample rate at the top left of the screen.
When Scoppy is using a fixed sample rate, an F will be displayed
next to the sample rate. Note that the displayed sample rate is that of the currently displayed signal and this can
be different to the selected fixed sample rate if the run mode is STOPPED.
![Sample rate menu](images/sample-rate-menu.jpg)
<br>
[App Help](.)
[All Documentation](../TOC)
[Scoppy on GitHub](https://github.com/fhdm-dev/scoppy)

Wyświetl plik

@ -0,0 +1,9 @@
---
title: Settings
---
<br>
[App Help](.)
[All Documentation](../TOC)
[Scoppy on GitHub](https://github.com/fhdm-dev/scoppy)

Wyświetl plik

@ -0,0 +1,16 @@
---
title: Signal Generator
---
Scoppy includes a very basic (PWM) signal generator. This is accessed by tapping the SIGNAL GENERATOR
button on the menu panel.
You can choose from a 50% duty cycle square wave at various frequencies and a PWM encoded sine wave.
Using a low pass filter the PWM encoded sine wave can
be used to generate an analog signal.
<br>
[App Help](.)
[All Documentation](../TOC)
[Scoppy on GitHub](https://github.com/fhdm-dev/scoppy)

Wyświetl plik

@ -0,0 +1,14 @@
---
title: Trigger - Logic Analyzer
---
Triggering in Logical Analyzer mode is similar to [triggering in Oscilloscope mode](Trigger-Oscilloscope) except:
1. The trigger settings are accessed by tapping the trigger settings (gear) icon on the
control panel.
2. There is no trigger level setting.
<br>
[App Help](.)
[All Documentation](../TOC)
[Scoppy on GitHub](https://github.com/fhdm-dev/scoppy)

Wyświetl plik

@ -0,0 +1,82 @@
---
title: Trigger - Oscilloscope Mode
---
### Channel selection
The channel that will be triggered on can be selected by:
1. Tapping the CH1 or CH2 buttons in the trigger section of the control panel.
![Trigger channel buttons](images/trigger-channel-buttons.jpg)
2. Tapping the TRIG badge at the bottom of the screen and selecting *Channel* from the popup menu.
Note. If the selected trigger channel is not enabled (switched on) then triggering will not occur.
The trigger channel is displayed in the TRIG badge at the bottom of the screen.
![Trigger badge channel](images/trigger-badge-channel.jpg)
<br>
### Trigger level
The trigger voltage level can by adjusted by:
1. Tapping the plus(+) or minus(-) buttons in the Trigger section of the control panel.
![Trigger level play and minus buttons](images/trigger-level-plus-minus.jpg)
2. Tapping the LEVEL button. This will allow you to enter an exact value.
3. Tapping and holding the LEVEL button. This will set the trigger level to the midpoint of the displayed waveform.
4. Tapping the TRIG badge at the bottom of the screen and selecting *Level* from the popup menu.
The trigger level is displayed in the TRIG badge at the bottom of the screen.
![Trigger badge level](images/trigger-badge-level.jpg)
### Trigger types
Scoppy can trigger on either the rising or falling edge of a waveform. Select the trigger type by:
1. Tapping the *RISING EDGE* or *FALLING EDGE* buttons on the control panel.
![Trigger type buttons](images/trigger-type-buttons.jpg)
2. Tapping the TRIG badge at the bottom of the screen and selecting *Type* from the popup menu.
The trigger type is displayed in the TRIG badge at the bottom of the screen.
![Trigger badge type](images/trigger-badge-type.jpg)
<br>
### Trigger modes
#### OFF
In the OFF mode (called Roll Mode on some Oscilloscopes), triggering is disabled and Scoppy displays the
most recent samples of the sample record. This is
useful for high TIME/DIV settings (ie slow sweep speeds) where waiting for a full screen of samples to be
aquired could take a long time.
#### AUTO
Scoppy will look for a trigger point and if found display the waveform. If not triggered withing a short period of time Scoppy
will go ahead and display the waveform anyway.
#### NORM
Scoppy will wait for a trigger before updating the displayed waveform. If RUN or SINGLE is selected after NORMAL trigger mode
has been selected, the screen will remain blank until the scope is triggered and the run mode will be shown as *RUNNING*.
<br>
### Pre-trigger samples
Scoppy normally tries to position the trigger sample in the center of the sample record. This can be sub-optimal if most of the samples
you're interested in are located either before or after the trigger sample. The *Pre-trigger samples* setting
allows you to specify the percentage of the samples that will appear before the trigger point in the sample record.
The setting can be adjusted by tapping the TRIG badge at the bottom of the screen and selecting *Pre-trigger samples* from
the popup menu.
When any value other than 50% is selected for the pre-trigger samples, the value is displayed in the TRIG badge.
<br>
[App Help](.)
[All Documentation](../TOC)
[Scoppy on GitHub](https://github.com/fhdm-dev/scoppy)

Wyświetl plik

@ -0,0 +1,9 @@
---
title: Upgrade to Premium
---
<br>
[App Help](.)
[All Documentation](../TOC)
[Scoppy on GitHub](https://github.com/fhdm-dev/scoppy)

Wyświetl plik

@ -0,0 +1,44 @@
---
title: Vertical Position
---
There are a number ways that the vertical position can be adjusted.
<br>
### 1. Touch Gestures
Swipe up or down on the screen. The trace for the selected channel will move vertically.
The selected channel can be changed by tapping the CH1 or CH2 buttons in the Vertical section
of the control panel.
A channel can also be selected by tapping its ground indicator (the right pointing arrow at the left
of the screen).
<br>
### 2. POSITION + and - Buttons
Single tap these buttons or tap-and-hold to change the vertical position of the selected channel.
![Vertical position plus and minus buttons](images/vertical-position-plus-minus.jpg)
<br>
### 3. Single Tap the POSITION Button
This allows you to enter an exact value for the vertical position of the selected channel.
![Vertial position dialog](images/vertical-position-dialog.jpg)
<br>
### 4. Tap and Hold the POSITION Button
This will set the vertical POSITION of the selected channel to its default value (0V).
<br>
[App Help](.)
[All Documentation](../TOC)
[Scoppy on GitHub](https://github.com/fhdm-dev/scoppy)

Wyświetl plik

@ -0,0 +1,44 @@
---
title: Vertical Scale (Volts/Div)
---
There are a number ways that the vertical scale (Volts/div) can be adjusted.
<br>
### 1. Touch Gestures
Pinch and zoom on the screen vertically. The trace for the selected channel will be scaled.
The selected channel can be changed by tapping the CH1 or CH2 buttons in the Vertical section
of the control panel.
A channel can also be selected by tapping its ground indicator (the right pointing arrow at the left
of the screen).
<br>
### 2. VOLTS/DIV + and - Buttons
Single tap these buttons or tap-and-hold to change the volts/div for the selected channel.
![Vertical scale plus and minus buttons](images/volts-div-plus-minus.jpg)
<br>
### 3. Single Tap the VOLTS/DIV Button
This allows you to enter an exact value for the selected channel.
![Vertial scale dialog](images/volts-div-dialog.jpg)
<br>
### 4. Tap and Hold the VOLTS/DIV Button
This will set the VOLTS/DIV for the selected channel to its default value (the default value depends on the input voltage range setting for the channel).
<br>
[App Help](.)
[All Documentation](../TOC)
[Scoppy on GitHub](https://github.com/fhdm-dev/scoppy)

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 88 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 34 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 114 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 36 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 8.1 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 9.1 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 60 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 9.1 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 34 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 44 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 36 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 29 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 29 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 28 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 29 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 31 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 33 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 33 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 117 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 40 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 47 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 39 KiB

Wyświetl plik

@ -0,0 +1,22 @@
---
title: App Help Index
---
* [The Oscilloscope Screen](./Oscilloscope-Screen)
* [Run/Stop/Single](./Run-Mode)
* [Oscilloscope and Logic Analyzer Modes](./Oscilloscope-and-Logic-Analyzer-Modes)
* [Horizontal Scale (Time/Div)](./Horizontal-Scale)
* [Horizontal Position](Horizontal-Position)
* [Vertical Scale (Volts/Div)](Vertical-Scale)
* [Vertical Position](Vertical-Position)
* [Trigger - Oscilloscope Mode](Trigger-Oscilloscope)
* [Trigger - Logic Analyzer Mode](Trigger-Logic-Analyzer)
* [Channels - Oscilloscope Mode](Channels-Oscilloscope)
* [Channels - Logic Analyzer Mode](Channels-Logic-Analyzer)
* [Cursors](Cursors)
* [Sample Rate - Auto vs Fixed](Sample-Rate)
* [Signal Generator](Signal-Generator)
<br>
[All Documentation](../TOC)
[Scoppy on GitHub](https://github.com/fhdm-dev/scoppy)

Wyświetl plik

@ -0,0 +1 @@
google-site-verification: googlefdeab87afcc81a8c.html

24
docs/index.md 100644
Wyświetl plik

@ -0,0 +1,24 @@
---
# Feel free to add content and custom Front Matter to this file.
# To modify the layout, see https://jekyllrb.com/docs/themes/#overriding-theme-defaults
layout: home
title: Scoppy
---
[Installation & Getting Started](./wiki/Installation-&-Getting-Started)
* Instructions for installing the Android app and Pico firmware, connecting the Pico to your Android device and connecting the Scoppy oscilloscope to your signal source
[Using the app](./app-help)
* How to use the Scoppy Android app
[Pico GPIOs](./wiki/GPIOs)
* Listing of the GPIOs used by the scoppy-pico firmware and a description of their functions
[Analog Front-End](./wiki/Analog-Front-End)
* Design and build an Analog front-end to your Scoppy Oscilloscope so that you can measure different voltage ranges (ie. different to the 0-3.3V range of the RPI Pico ADC inputs).
[Scoppy on GitHub](https://github.com/fhdm-dev/scoppy)
* The Scoppy GitHub repository.

Wyświetl plik

@ -0,0 +1,8 @@
---
# Feel free to add content and custom Front Matter to this file.
# To modify the layout, see https://jekyllrb.com/docs/themes/#overriding-theme-defaults
layout: home
---
stuff

2
docs/serve.sh 100755
Wyświetl plik

@ -0,0 +1,2 @@
#!/bin/sh
bundle exec jekyll serve

Wyświetl plik

@ -0,0 +1,26 @@
---
title: Analog Front-End Examples
---
This page lists some examples of analog front end designs that you might find useful. As much as possible the designs will adhere to the Scoppy ethos of keeping the price as low as possible.
> Please note that these designs are definitely NOT appropriate for measuring high voltages. If you choose to use any of these designs you are doing so at your own risk. The author cannot be held responsible for any damage caused by the use of these designs.
For each design an indicative cost of the components is given. This doesn't include the cost of the Pico, Android device, prototyping supplies or shipping costs. Prices are based on the prevailing prices at Digikey and Mouser
[Design 1](./front-end-design-1)
Single-channel, single voltage-range (sensitivity) of more than 3.3V
Cost: less than $2
[Design 2](./front-end-design-2)
Single-channel, single voltage-range (sensitivity) of less than 3.3V
Cost: less than $2
[Design 3](./front-end-design-3)
Single-channel, single voltage range with over-voltage and under-voltage protection
Cost: less than $2
[Design 4](./front-end-design-4)
Single-channel, multiple voltage ranges and over-voltage protection
Cost: less than $4

Wyświetl plik

@ -0,0 +1,27 @@
---
title: Analog Front-End
---
### Examples
[Some analog front end designs](./Analog-Front-End-Examples)
### Measuring different voltage ranges
To measure different voltage ranges (eg. -5V to +5V or 0V to 0.1V etc) than the default (0-3.3V) you will need to add additional circuitry in front of the Pico to attenuate/amplify the signal and/or provide an appropriate voltage offset so that the voltage at the ADC pins of the Pico is between 0 and VREF (by default VREF is 3.3V).
If you decide to add an analog front-end, the Scoppy app needs to be configured so that it will display the correct voltage. You do this by tapping on the Channel badge at the bottom of the screen, tap Settings and then Voltage ranges. You can enter up to 4 voltage ranges per channel. Your front-end indicates the currently selected voltage range via GPIOs 2 & 3 for Channel 1 and GPIOs 4 & 5 for Channel 2. The logic levels at these pins and the corresponding voltage range id is shown in the tables below. By default these pins are pulled down to LOW so if you do nothing then voltage range 0 is selected.
| GPIO 2 | GPIO 3 | Ch 1 Voltage Range |
| --- | --- | --- |
| LOW | LOW | 0 |
| LOW | HIGH | 1 |
| HIGH | LOW | 2 |
| HIGH | HIGH | 3 |
| GPIO 4 | GPIO 5 | Ch 2 Voltage Range |
| --- | --- | --- |
| LOW | LOW | 0 |
| LOW | HIGH | 1 |
| HIGH | LOW | 2 |
| HIGH | HIGH | 3 |
> Please note these are the pin assignements for version 4 and higher of the firmware. Please upgrade if you are using older firmware.

Wyświetl plik

@ -0,0 +1,18 @@
---
title: Cursors
---
> Added in Version 1.013 of the app.
Cursors are horizontal and vertical markers that indicate X-axis values and Y-axis
values on a selected waveform source. You can use cursors to make custom
voltage, time or frequency measurements on oscilloscope signals (and time or frequency measurements on Logical Analyzer signals).
Y-cursors are not available in Logic Analyzer mode.
To enable cursors, tap the CURSORS button on the menu. The cursor information will be displayed on the top-left of the display. An extra cursor control badge will appear at the bottom of the screen. You can use this to hide the cursor(s) without losing the current position. This control is also used to change the channel associated with the Y cursor.
Cursors are not limited to the visible display. If you change the horizontal and/or vertical position and/or scale the cursors will move with the waveform - possibly off the screen. TIP: To get the cursors back on the visible part of the screen just disable and then enable cursors using the CURSORS button (ie tap the button twice).
To move a cursor, tap the cursor until it changes color from red to orange. Keeping your finger on the screen, move the cursor to the desired position.

16
docs/wiki/GPIOs.md 100644
Wyświetl plik

@ -0,0 +1,16 @@
---
title: Pico GPIOs
---
| GPIO | Input/Ouput | Summary | Description |
| --- | --- | --- | --- |
| 0 & 1 | Output | UART TX & RX | Some diagnostic information is written to the UART including error messages if scoppy enounters an unrecoverable error |
| 2 & 3 | Input - pulled down | CH1 Voltage Range | Currently selected voltage range for channel 1 |
| 4 & 5 | Input - pulled down | CH2 Voltage Range | Currently selected voltage range for channel 2 |
| 6 to 13 | Input | Logic Analyzer inputs | Connect up to 8 digital sources (0V to 3.3V) |
| 22 | Output | Test signal | PWM 1kHz 50% duty cycle - can be connected directly to either of the ADC inputs
| 26 | Input | CH1 ADC input | Connect the +ve output of your analog frontend (or signal source) here. Connect the ground of the analog frontend (or signal source) to GND.
| 27 | Input | CH2 ADC input | Connect the +ve output of your analog frontend (or signal source) here. Connect the ground of the analog frontend (or signal source) to GND.
> Please note that the test signal and voltage range GPIO assignments changed in version 4 of the firmware (previously they were GPIO 16 and 22 for the test signal, 3 and 4 for the channel 1 voltage range and 6 & 7 for the channel 2 voltage range).

Wyświetl plik

@ -0,0 +1,43 @@
![](https://github.com/fhdm-dev/scoppy/raw/main/images/gallery2/IMG_3736.jpg)
AFE Design 2
![](https://github.com/fhdm-dev/scoppy/raw/main/images/gallery2/IMG_3738.jpg)
Taken with show shutter speed and triggering disabled
![](https://github.com/fhdm-dev/scoppy/raw/main/images/gallery2/IMG_3739.jpg)
![](https://github.com/fhdm-dev/scoppy/raw/main/images/gallery2/IMG_3741.jpg)
![](https://github.com/fhdm-dev/scoppy/raw/main/images/gallery2/IMG_3742.jpg)
Sine wave from AD9833 via AFE design 2 on channel 1. PWM from GPIO 16 on channel 2.
![](https://github.com/fhdm-dev/scoppy/raw/main/images/gallery2/IMG_3743.jpg)
From left to right. Arduino Uno, AD9833 + stuff, Pico, Nokia 2.1 and Scoppy app
![](https://github.com/fhdm-dev/scoppy/raw/main/images/gallery2/IMG_3744.jpg)
![](https://github.com/fhdm-dev/scoppy/raw/main/images/gallery2/IMG_3745.jpg)
![](https://github.com/fhdm-dev/scoppy/raw/main/images/gallery2/IMG_3746.jpg)
![](https://github.com/fhdm-dev/scoppy/raw/main/images/gallery2/IMG_3747.jpg)
Show shutter speed and triggering off
![](https://github.com/fhdm-dev/scoppy/raw/main/images/gallery2/IMG_3750.jpg)
![](https://github.com/fhdm-dev/scoppy/raw/main/images/gallery2/IMG_3751.jpg)
![](https://github.com/fhdm-dev/scoppy/raw/main/images/gallery2/IMG_3752.jpg)
![](https://github.com/fhdm-dev/scoppy/raw/main/images/gallery2/IMG_3753.jpg)
Simple AFE using LM358 (signal source disconnected)
![](https://github.com/fhdm-dev/scoppy/raw/main/images/gallery2/IMG_3754.jpg)
![](https://github.com/fhdm-dev/scoppy/raw/main/images/gallery2/IMG_3755.jpg)
![](https://github.com/fhdm-dev/scoppy/raw/main/images/gallery2/IMG_3756.jpg)
![](https://github.com/fhdm-dev/scoppy/raw/main/images/gallery2/IMG_3757.jpg)
Alternative method of changing the horizontal timebase

Wyświetl plik

@ -0,0 +1,44 @@
![](https://github.com/fhdm-dev/scoppy/raw/main/images/scoppy-v2-android-usb-prompt.jpg)
Android prompt. Tap OK of course!
![](https://github.com/fhdm-dev/scoppy/raw/main/images/phone-scoppy-v2-test-signal-1.jpg)
Test signal. Horizontal TIME/DIV needs adjusting.
![](https://github.com/fhdm-dev/scoppy/raw/main/images/phone-scoppy-v2-test-signal-2.jpg)
Test signal after TIME/DIV adjustment.
![](https://github.com/fhdm-dev/scoppy/raw/main/images/scoppy-v2-channel-menu.jpg)
Tap the channel badge to show this menu.
![](https://github.com/fhdm-dev/scoppy/raw/main/images/scoppy-v2-dual-test-signals.jpg)
Test signals on GPIO 16 and 18 connected to oscilloscope inputs (GPIO 26 and 27)
![](https://github.com/fhdm-dev/scoppy/raw/main/images/scoppy-v2-rhs-menu.jpg)
Tap the MENU button to get to this menu on the right-hand side. From here tap CONTROLS to get the controls back.
![](https://github.com/fhdm-dev/scoppy/raw/main/images/scoppy-v2-running-2ch.jpg)
![](https://github.com/fhdm-dev/scoppy/raw/main/images/scoppy-v2-single-capture.jpg)
Part way through a single capture.
![](https://github.com/fhdm-dev/scoppy/raw/main/images/scoppy-v2-top-timebase-control.jpg)
Alternative method of adjusting the horizontal TIME/DIV. Tap the top timebase setting (8ms/div in this case) to show this popup.
![](https://github.com/fhdm-dev/scoppy/raw/main/images/taba-scoppy-v2.jpg)
Scoppy on a bigger screen.
![](https://github.com/fhdm-dev/scoppy/raw/main/images/nokia-1.jpg)
Playing with a 555 timer circuit
![](https://github.com/fhdm-dev/scoppy/raw/main/images/nokia-2.jpg)
More 555 timer fun
![](https://github.com/fhdm-dev/scoppy/raw/main/images/taba-1.jpg)
Square wave from AD9833 DDS signal generator
[More Photos - Gallery 2](Gallery-2)

Wyświetl plik

@ -0,0 +1,43 @@
---
title: Installation
---
### 1. Install the Android App
Install the [Scoppy Android app](https://play.google.com/store/apps/details?id=xyz.fhdm.scoppy) from the Play Store.
### 2. Install the Firmware
Push and hold the BOOTSEL button on the Pico, then connect it to your computer using a micro USB cable. Release BOOTSEL once the drive RPI-RP2 appears on your computer. Download and copy the [pico-scoppy-v7.uf2](https://fhdm-dev.github.io/downloads/scoppy-pico-v7.uf2) file onto your Pico
The onboard LED should start blinking.
## Connections
### 1. Connect the Pico to your Phone/Tablet
Attach the small end of the OTG adapter cable/adapter to the USB input of the Android device (do NOT plug it into the USB socket of the Pico!). Uplug the USB cable from your computer (the one used in step 2) and plug it into the other end of the OTG adapter/cable.
Once you open the app and a connection is established between the Pico and the Scoppy app the onboard LED should stop blinking. You may need to tap the 'Run' button in the app if the scope is currently stopped (Scoppy will either be RUNNING or STOPPED. This status is displayed at the top right of the grid).
### 2. Connect the test signal
A 1kHz test signal is generated on GPIO 22 (on older versions of the firmware the test signal was on GPIO 16). The inputs for Channel 1 & 2 are GPIOs 26 and 27 respectively. So to view the test signal on Channel 1 of the scope connect GPIO 22 directly to GPIO 26. Hopefully you'll now see some sort of waveform in the app. The horizontal scale will probably be wrong so adjust this using the 'Horizontal' + and - buttons. See [Using the App](./Using-the-App) for more details.
![](https://github.com/fhdm-dev/scoppy/blob/main/images/phone-scoppy-v2-test-signal-1.jpg?raw=true)
Test signal connected to GPIO 26. Horizontal time/div needs adjusting.
### 3. Connect a real signal source
#### Oscilloscope mode
You are now ready to measure signals between 0V and 3.3V from a real signal source. Of course the signal voltage should be within the allowed range of the ADC pins of the RP2040. See section 5.2.3 of the RP2040 Datasheet for more information.
If the test signal from step 2 (above) is still connected to GPIO 26 or 27 then disconnect it. Attach the positive terminal of your signal source to GPIO 26 and the other to ground. To display a signal on Channel 2 use GPIO 27.
#### Logic analyzer mode
To use Scoppy as a logic analyzer tap the Menu button and then the Mode button. Select Logic Analyzer. The logic analyzer inputs are GPIOs 6 to 13 (0V to 3.3V).
## Using the app
See [Using the App](./Using-the-App)

Wyświetl plik

@ -0,0 +1,15 @@
---
title: Signal Generator
---
### Square Wave
Generates a square wave on GPIO 22. The frequency defaults to 1kHz.
### Sine Wave (PWM)
Generates a square wave on GPIO 22 where the duty cycle changes according to the sine function. The frequency
of the sine wave is 1kHz.
This PWM signal can be converted to a sine wave by the addition of a low pass filter.
A filter using a 1k resistor and 0.1uF capacitor should work.
See this [All About Circuits](https://www.allaboutcircuits.com/technical-articles/low-pass-filter-a-pwm-signal-into-an-analog-voltage/) article for more information.

Wyświetl plik

@ -0,0 +1,84 @@
---
title: Using the App
---
## The Oscilloscope Screen
![](https://github.com/fhdm-dev/scoppy/raw/main/images/ui-with-labels.png)
### Top Status Bar
**Sample Rate**
The sample rate used to capture the displayed waveform
**Sample Count**
The number of samples captured and stored by the app
**Sample Record View**
High-level view of the overall waveform record. The gray rectangle represents the part of the record that is displayed on the screen. The vertical line is the position of the trigger point in the record.
**Horizontal Time/Div**
The currently selected Horizontal time/div setting. Tap here to display a popup from which you can quickly change the horizontal time/div. The horizontal time/div can also be adjusted using the Horizontal TIME/DIV controls on the RHS control panel.
**Horizontal Position**
The horizontal position in relation to the trigger point - measured in divs. This can be adjusted using the Horizontal POSITION controls on the RHS control panel.
### Right-hand side Control Panel
**Run Mode Button**
Toggles between Run and Stopped modes
**Single Shot Capture Button**
Captures a single waveform record. The sample count and rate will generally be higher than waveforms captured in Run mode.
**Navigation Button**
Tapping this button will hide the control panel and show the function menu. From the function menu tap CONTROLS to show the control panel.
**Horizontal Controls**
Use these to adjust the Horizontal time/div and position settings.
Single tap or long-press the +/- buttons. Tap the TIME/DIV button to enter an exact value. Long-press TIME/DIV to reset to the default value. Tap the POSITION button to enter an exact value for the position. Long-press POSITION to reset the position to 0.
**Vertical Controls**
Use these to adjust the Vertical volts/div and position settings for each channel. First select the channel you wish to adjust by tapping the appropriate CH button. Single tap or long-press the +/- buttons to adjust the selected channel. Tap the VOLTS/DIV button to enter an exact value for volts/div. Long-press VOLTS/DIV to reset to the default value. Tap the POSITION button to enter an exact value for the vertical position of the waveform on the screen. Long-press POSITION to reset the position to 0.
**Trigger Controls**
Use these to adjust the selected trigger channel, level and triggering mode. Single tap the LEVEL button to enter an exact value for the trigger level. Long press the LEVEL button to set the trigger level to the midpoint of the current waveform (ie. 50%).
### Bottom Status Bar
**Signal Source**
The source from which to obtain measurements. If USB is selected you will need to connect your Android device to a Raspberry PI Pico using an On-the-go (OTG) cable or adapter. The Pico will also need to have the scoppy-pico firmware installed (see the installation page in this wiki). Tapping this badge will open a menu from which you can change the signal source as well as view information about the currently connected device.
**Channel Badges**
These display the status and settings of the two channels. Tap the badge to display a menu from which you can turn on/off the channel and modify channel settings.
- **Channel Volts/Div**
Currently selected Volts/Div for the channel
- **Channel Position**
Vertical position of the channel waveform on the screen
- **Channel Voltage Range**
If you have configured multiple voltage ranges in the channel settings then the currently selected range will be shown here. See the [Analog Front-End](./Analog-Front-End) documentation for more information.
**Trigger Badge**
This displays the current trigger settings. Tap the badge to open the trigger menu.
- **Trigger Channel**
The currently selected trigger channel
- **Trigger Level**
The trigger level for the selected channel
### Waveform View (Grid/Gradicule)
**Channel Ground Levels**
The vertical position on the screen which corresponds to 0V for the channel.
**Waveform Measurements**
**Run Status**
Indicated if the scope is in Run mode, Stopped or performing a single capture.
**Grid Lines and Waveform Traces**
The width of these can be configured via Settings (Tap the Menu button to get to Settings).
**[Cursors](./Cursors)**

Wyświetl plik

@ -0,0 +1,30 @@
---
title: Vertical Calibration
---
If Scoppy is not displaying the correct voltage levels you may need to adjust the voltage range settings in the app.
Note that this method assumes that you have already entered an approximate voltage range for the channel you are measuring. Reminder: to get to the voltage range settings tap the channel badge at the bottom of the screen and a menu should appear. Tap Settings and then Voltage Range(s).
#### Step 1.
Connect Vin to GND and note the value of Vmax in the Scoppy app. Ideally, the value of Vmax will be 0. If not, enter new values for the voltage range as follows:
Min. Voltage = Min. Voltage - Vmax
Max. Voltage = Max. Voltage - Vmax
(If Vmax is positive, youll end up with smaller values for Min and Max. If Vmax is negative youll end up with larger values).
The trace should now be at the GND level on the screen.
#### Step 2.
Apply a DC voltage to Vin that is about 80% of the maximum input voltage. If the vertical range is perfectly calibrated then the Vmax displayed in the Scoppy app will be the same as your input voltage and the calibration procedure is complete. If not, then read on!
Calculate the new value for Min. Voltage as follows
(new) Min. Voltage = (current) Min.Voltage x Vin / Vmax
Likewise, calculate the new value for Max. Voltage as follows
(new) Max. Voltage = (current) Max. Voltage x Vin / Vmax
Enter the new values and tap OK. Hopefully Vmax will show the correct voltage (ie. Vin).
Go back to Step 1 to check that the 0 voltage level hasnt changed. If it has then keep repeating both until youre happy with the result.

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 62 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 62 KiB

Wyświetl plik

@ -0,0 +1,73 @@
---
title: Analog Front-End Design 1
---
> If you have suggestions for improvements or would like to share your own designs for a Scoppy analog front end then please head to the [Scoppy forum](https://github.com/fhdm-dev/scoppy/discussions).
To keep things simple for this first front end design, well support a single input voltage range of approximately -6V to +6V.
By input voltage range I mean that applying the minimum voltage in the range (eg. -6V) to the input of the frontend will result in a voltage of 0V at the ADC pin of the Pico. Applying the maximum voltage in the range (eg. 6V) will result in a voltage of 3.3V at the ADC pin of the Pico.
Given that the voltage range of the Pico ADC pins is 0V to 3.3V, our frontend will need to attenuate the input signal to a range of 3.3V and shift the voltage level up so that the lowest input voltage (-6V) will become 0V.
An easy way to do this is using a voltage divider in front of the non-inverting input. One end will be our signal to measure (Vin1) and the other will be a reference voltage (Vref). The reference voltage will have the effect of level shifting the output voltage to the level expected by the Pico.
The op-amp used for this design is the LM358. I chose this because it is super cheap, readily available, has two op-amps in the one package and will work with a single supply of 5V.
### Schematic
![Schematic](https://github.com/fhdm-dev/scoppy/raw/main/images/frontend1/schematic.png)
### Discussion
First we need to select values for the input resistors Rin1 and Rin2 so that the correct gain is applied to the input signal.
Calculate the required gain of the voltage divider by dividing 3.3 (the Picos voltage range) by the input voltage range (12V for this design). We end up with a value of 0.275.
Select values for Rin1 and Rin2 such that Rin2/(Rin1 + Rin2) is similar to the required gain. Values in the E12 series that would work are 680k and 270k. The gain using these values will be 0.28. Note. High resistor values are used so that the input impedance of our frontend is high.
Now calculate the required value of Vref. The formula for calculating this is:
Vref = Vinmin / (1 - 1/gain)
Where Vinmin is the minimum value of the input voltage range.
So for our design this is -6V / (1 - (1 / 0.284)) = 2.38V
Note that we use 0.284 rather than 0.275 as the gain value as this will be closer to the actual gain of the voltage divider. With a gain of 0.284 the input voltage range will be -5.8V to +5.8V. If you want to be more precise you can of course measure the actual values of the resistors.
Using the above values for the voltage divider and Vref, an input voltage of -5.8V will become 0V at the non-inverting input of the op-amp and an input voltage of 5.8V will be 3.3V. This voltage range is exactly the range of the Pico ADC and so the op-amp can be wired up in a unity gain configuration.
The above procedure for determining the resistor values should work for any voltage range with a magnitude of more than 3.3V. For anything smaller than that we'll need to modify the design so that the incoming signal is amplified.
A current limiting resistor is added to the output of the op-amp to protect the Pico in case the op-amp output goes above 3.3V (in which case current will leak through the ESD diodes of the Pico). This shouldnt happen if we keep our input voltage below 5.8V.
The 2nd of the LM358 op-amps will be used to help generate Vref. A resistor divider from 3.3V to GND is used to create a voltage as close as possible to our desired Vref of 2.38V. Note: If Vref isnt exactly 2.38V it doesn't really matter, it just means that the input voltage range wont be centred around 0. For this design well use 22k for Rvref1 and 56k for Rvref2. A capacitor from the Vref input of the op-amp to GND will help reduce noise on the output.
### Construction
Assemble the circuit as per the schematic and breadboard image below. The fuse shown in the image is optional - its just there for klutzes like me who tend to get the wiring wrong and short the supplies.
![Assembled on Breadboard](https://github.com/fhdm-dev/scoppy/raw/main/images/frontend1/bb2.png)
> Caution. When the LM358 non-inverting input is floating the output might be a higher voltage than the maximum recommended voltage of the ADC pins (VIODD+300mV according to the Pico datasheet). To prevent possible damage to the Pico you might want to only connect the ADC pin to the front end once your signal source is connected to Vin. Having said that, I've applied voltages of over 4V to the ADC pins without any apparent damage to the Pico (with a 100R current limiting resistor in series). Future designs will add over-voltage protection so that you won't have to worry about this.
Now were ready to power on the Pico. Plug your OTG (on-the-go) cable/adapter into your Android device. Connect the other end to the Pico using a standard USB cable (USB-A to USB Micro). The LED on the Pico should light up and then start blinking about once per second.
### Configure the voltage range in the Scoppy app
Open the Scoppy app and Android should ask your permission to connect to the Pico (you might have to tap the Run button).
Now connect the two Vin inputs of the frontend to a voltage source somewhere between -5.8V and 5.8V. You should see a horizontal trace on the screen. Youll notice that the trace is at the wrong voltage. E.g. An input voltage of 0V will be displayed at 1.65V instead of 0V. This is because the Scoppy app thinks the input voltage range is 0V to 3.3V (the default) rather than our -5.8V to +5.8V. To fix this, tap the Ch 1 badge at the bottom of the screen. A menu should be displayed. Tap Settings and then Voltage Ranges. Change the first range so that the min is -5.8V and max is 5.8V. Tap OK and Scoppy should now show the trace at approximately the correct voltage level.
![Changing the voltage range setting](https://github.com/fhdm-dev/scoppy/raw/main/images/frontend1/voltage-range.png)
For more accurate calibration of the voltage ranges see [here](./Vertical-Calibration).
<br>
<br>
<br>
> The author makes no warranty, representation or guarantees regarding the suitability of this design for any particular purpose. Nor does the author assume any liability arising out its use and specifically disclaims any and all liability, including without limitation special, consequential or incidental damages.

Wyświetl plik

@ -0,0 +1,60 @@
---
title: Analog Front-End Design 2
---
> If you have suggestions for improvements or would like to share your own designs for a Scoppy analog front end then please head to the [Scoppy forum](https://github.com/fhdm-dev/scoppy/discussions).
For this design well support a single voltage range of -1 to 1. This is similar to Design 1 and requires two extra resistors to set the required gain (Design 1 only attenuated the signal. Overall gain was not required). Given that the magnitude of our input voltage range is 2 (-1V to 1V) and the voltage range of the Pico ADC is 3.3 (0V to 3.3V) then the required gain is 1.65.
Even though were amplifying the signal we still need the voltage divider in front of the op-amp so that the output can be level shifted (see Design 1 for an explanation of level shifting and Vref).
Youll see from the schematic below that were giving the Rf and Rg pairs of resistors the same values. This simplifies the calculation of the required values of Rf and Rg and also the value of Vref.
In this configuration the gain is simply Rf/Rg and the output is level shifted by Vref.
So for our input voltage range of -1V to 1V, Rf/Rg is 1.65. Applying that to our input range gives -1.65V to 1.65V. The output voltage thus needs to be level shifted by 1.65V and so we set Vref to 1.65V.
For this design we wont be too precise when choosing the resistor values, lets try 680k and 470k for Rf and Rg respectively. The ratio of these values is 1.45 and not the 1.65 that we wanted but thats OK if were happy with the reduced gain.
To generate the required Vref of 1.65V we can just use a voltage divider between 3.3V and GND with equal values for resistors Rref1 and Rref2. The actual value you choose doesnt matter too much (I dont think) but Ive chosen a fairly high value of 22k to keep the current low.
> Please note that input voltages outside of the -1V to 1V range can result in voltages at the RP2040 ADC pins that are higher than the maximum rating of 3.3V.
### Schematic
![Schematic](https://github.com/fhdm-dev/scoppy/raw/main/images/frontend2/schematic.png)
### Construction
Assemble the circuit as per the schematic and breadboard image below.
![Breadboard](https://github.com/fhdm-dev/scoppy/raw/main/images/frontend2/bb.png)
> Caution. When the LM358 non-inverting input is floating the output might be a higher voltage than the maximum recommended voltage of the ADC pins (VIODD+300mV according to the Pico datasheet). To prevent possible damage to the Pico you might want to only connect the ADC pin to the front end once your signal source is connected to Vin. Having said that, I've applied voltages of over 4V to the ADC pins without any apparent damage to the Pico (with a 100R current limiting resistor in series). Future designs will add over-voltage protection so that you won't have to worry about this.
### Calibration
Once youve assembled the circuit make sure you havent done anything stupid like shorting Vsys to GND (when I did that it resulted in the insulation on the jumper wire melting but luckily no damage to the Pico or my phone. Now I use a low current resettable fuse between the Pico breadboard power rail).
Go to the voltage range settings in the app (to get there tap the channel badge at the bottom of the screen to bring up the channel menu and then tap Settings and Voltage Range(s)) and enter -1 and 1 for the Min and Max voltages respectively (for the default range).
Chances are that the voltage displayed in app won't be exactly the same as the voltage applied to Vin. This is because of a combination of factors including:
* we didn't use resistors that would give us a gain of exactly 1.65
* the actual values of the resistors are probably not exactly the same as the nominal value
* the input voltage offset of the op-amp
To fix this, follow the instructions for [vertical calibration](./Vertical-Calibration).
<br>
<br>
<br>
> The author makes no warranty, representation or guarantees regarding the suitability of this design for any particular purpose. Nor does the author assume any liability arising out its use and specifically disclaims any and all liability, including without limitation special, consequential or incidental damages.

Wyświetl plik

@ -0,0 +1,80 @@
---
title: Analog Front-End Design 3
---
> If you have suggestions for improvements or would like to share your own designs for a Scoppy analog front end then please head to the [Scoppy forum](https://github.com/fhdm-dev/scoppy/discussions).
This design builds on Design 2 and adds over and under voltage protection to the analog front end. After all, we wont have a cheap oscilloscope if we keep frying our components!
Im assuming here that the minimum and maximum voltages that will be applied to the input of the scope will be -18V and +18V respectively. It has been tested from -18.5V to 18.5V (two of my 9V batteries in series) but of course If you decide to use this design you are doing so at your own risk. I personally wouldnt use Scoppy with an expensive phone/tablet just in case something unexpected goes wrong (better to use an old, obsolete phone that is no longer used for anything else) - especially when dealing with higher voltages - but of course you can do what you like.
### Protecting the Op-Amp input(s)
First of all we need to protect the op-amp. In this design well be using an LM324 op-amp, which is very similar to the LM358 but contains four individual op-amps rather than two. Well be using three of these op-amps. The reason for this will be explained later.
According to the datasheet for the LM324 the allowed input voltage range goes from -0.3V to 32V. Of course 32V is above the maximum expected voltage (18V) and so we dont need to worry about over-voltage protection. However we do need to ensure that the voltage at the input pins dont go below -0.3V. A schottky diode can be used to clamp the voltage to something above -0.3V (D1 in the schematic).
One thing that needs to be considered when selecting the diode is its reverse current. The 1N5817 has a very low forward voltage but high reverse current and this results in a voltage drop at the input of the op-amp (in the order of 100mV). Presumably this is because it draws current through the high value input resistor (Rg1). The 1N5711 has a much lower reverse current specification and I couldnt discern any voltage drop when this was inserted into the circuit. However, its forward voltage (at the current expected in this part of the circuit) is very close to the minimum allowed voltage of -0.3V. To be safer I prefer to use something like a BAT46. It does result in a voltage drop of a few millivolts but the clamped voltage is more like -0.23V.
### Protecting the Pico/RP2040
The Pico datasheet states that:
`the ADC capable GPIO26-29 have an internal reverse diode to the VDDIO (3V3) rail and so the input voltage must not exceed VDDIO plus about 300mV`
The obvious way to protect the ADC inputs (GPIO26-29) then is to simply insert a schottky diode between the ADC input and VDDIO. However, the RP2040 datasheet says that:
`the voltage on the ADC analogue inputs must not exceed IOVDD ...<snip>... Voltages greater than IOVDD will result in leakage currents through the ESD protection diodes`
That suggests to me that we shouldnt be allowing current to pass (leak) through our clamping diode and into IOVDD. I could be completely wrong here - if you think so then please share your thoughts in the forum ([Discussions](https://github.com/fhdm-dev/scoppy/discussions)).
Anyway, to be safe were going to avoid that situation by sending the current to the output of one of our op-amps (LM324-sink on the schematic). The LM324 is able to sink up to ~10mA so this should work fine if we limit the current from the main op-amp (LM324-amp in the schematic). Given that the maximum voltage expected at the output of LM324-amp is around 4.5V (Vcc - 1V) then we need a resistor of at least 120R to limit the current to 10mA (4.5-3.3 / 0.010 = 120). A 220R resistor should do fine (Rout).
And of course the reason we are using an LM324 rather than the LM358 of the previous designs is that three op-amps are required.
A 1N5817 diode (D2) is used here (rather than a BAT46 - used on the input of LM354-amp) because at the expected maximum current of 10mA the forward voltage drop of the BAT46 is higher than 300mV. The high reverse current of the 1N5817 is not such an issue here because Rout has a low value and so there will only be a small voltage drop across Rout when D2 is reverse biased.
### Construction
![Schematic](https://github.com/fhdm-dev/scoppy/raw/main/images/frontend3/schematic.png)
![Breadboard](https://github.com/fhdm-dev/scoppy/raw/main/images/frontend3/bb.png)
Here are some instructions for assembling this front end on a breadboard. The pin numbers refer to the LM324 PDIP package. Refer to the schematic and breadboard image above. NB. The rail labelled 5V on the schematic is actually VSYS which of course is not necessarily 5V because it depends on how charged the battery is on your Android device.
Connect 3V3 of the Pico to the top red power rail of the breadboard. Connect VSYS to the bottom red power rail. Connect both ground rails of the breadboard to one of the GND pins of the Pico. The fuse as shown in the breadboard image is optional.
Connect the Vcc pin of the LM324 to the VSYS rail. Connect the GND pin of the LM324 to the GND rail. Dont connect anything to the ADC pin(s) of the Pico yet.
Now well configure each of the 4 op-amps of the LM324 in turn.
**Op-amp 2 - Unused**
Op-amp 2 (pins 5, 6 and 7 of the PDIP package) is not used so well wire it up as recommended in the TI tech note - [How to Properly Configure Unused Operational Amplifiers](https://www.ti.com/lit/an/sboa204a/sboa204a.pdf?ts=1624953615530&ref_url=https%253A%252F%252Fwww.google.com%252F).
The voltage at the non-inverting input should be approximately VSYS/2 and the output should be the same.
**Op-amp 4 - Vref**
Wire up this op-amp as shown in the schematic. The voltage at the output should be approximately 1.65V.
**Op-amp 3 - sink**
Wire up this op-amp as shown in the schematic. The voltage at the output should be 3.3V.
**Op-amp 1 - amp**
Wire up this op-amp as shown in the schematic, including the under-voltage protection diode on the input (D1) and the current limiting resistor (Rout) and over-voltage protection diode (D2) on the output. Dont connect the output to the Pico yet.
You should now be able to safely apply any voltage at Vin1/Vin2 of between -18V and +18V. Test that the voltage at the input of the LM324 (Vampin) doesnt go below -.3V and the voltage at the output of op-amp 2 after Rout (Vadc) doesnt go above 3.6V.
Once youve confirmed that all of the op-amps have been wired correctly you can connect the output of Rout to the ADC pin of the Pico.
<br>
<br>
<br>
> The author makes no warranty, representation or guarantees regarding the suitability of this design for any particular purpose. Nor does the author assume any liability arising out its use and specifically disclaims any and all liability, including without limitation special, consequential or incidental damages.

Wyświetl plik

@ -0,0 +1,41 @@
---
title: Analog Front-End Design 4
---
> If you have suggestions for improvements or would like to share your own designs for a Scoppy analog front end then please head to the [Scoppy forum](https://github.com/fhdm-dev/scoppy/discussions).
This design demonstrates how to add multiple voltage ranges (sensitivities) to our oscilloscope. It is similar to previous designs except for the addition of the the dual pole, four throw switch.
One of the poles is used to select the feedback resistor (Rf1 to Rf3) and thus the amplification of the op-amp. The other connects to the 'Channel 1' voltage range GPIOs on the pico. See the [here](./Analog-Front-End) for details of the voltage range GPIOs.
The voltage ranges are 0V-6.6V (no feedback resistor), 0V-3.3V (100K feedback resistor), 0V-1.8V (270K feedback resistor) and 0V-0.8V (680K feedback resistor). These voltage ranges also need to be configured in the app (to do this tap the Channel badge at the bottom of the screen and tap settings).
![schematic](https://github.com/fhdm-dev/scoppy/raw/main/images/frontend-119/119-sch.png)
![breadboard](https://github.com/fhdm-dev/scoppy/raw/main/images/frontend-119/119-bb.png)
<br>
Lowest sensitivity setting
![Low Sensitivity](assets/img/frontend-119/low-sensitivity.png)
<br>
Higher sensitivity setting
![Higher Sensitivity](assets/img/frontend-119/higher-sensitivity.png)
<br>
<br>
<br>
> The author makes no warranty, representation or guarantees regarding the suitability of this design for any particular purpose. Nor does the author assume any liability arising out its use and specifically disclaims any and all liability, including without limitation special, consequential or incidental damages.

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 442 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 2.2 MiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 695 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 41 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 809 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 38 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.2 MiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 734 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 36 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 962 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 54 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 61 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 84 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 6.4 MiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 5.8 MiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 79 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 216 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 101 KiB