├── Hardware
├── UKHASnet-Pi
│ ├── UKHASnet-Pi-board.png
│ ├── UKHASnet-Pi-schematic.png
│ ├── UKHASnet-node-gerbers.zip
│ └── README.md
├── one-inch-HF-to-VHF-converter
│ ├── upconverter PCB.png
│ ├── upconverter schematic.png
│ ├── one-inch-HF-receive-converter-gerbers-v1.2.zip
│ ├── hf-upconverter-bom.csv
│ ├── README.md
│ ├── LICENCE
│ └── hf-upconverter.brd
└── README.md
├── RaspberryPi
├── README.md
└── rf
│ ├── README.md
│ ├── sstv
│ ├── beacon.py
│ ├── README.md
│ └── tones-to-rf.c
│ └── freq_pi
│ ├── README.md
│ ├── PiVFO.py
│ └── freq_pi.c
└── README.md
/Hardware/UKHASnet-Pi/UKHASnet-Pi-board.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JennyList/LanguageSpy/HEAD/Hardware/UKHASnet-Pi/UKHASnet-Pi-board.png
--------------------------------------------------------------------------------
/Hardware/UKHASnet-Pi/UKHASnet-Pi-schematic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JennyList/LanguageSpy/HEAD/Hardware/UKHASnet-Pi/UKHASnet-Pi-schematic.png
--------------------------------------------------------------------------------
/Hardware/UKHASnet-Pi/UKHASnet-node-gerbers.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JennyList/LanguageSpy/HEAD/Hardware/UKHASnet-Pi/UKHASnet-node-gerbers.zip
--------------------------------------------------------------------------------
/Hardware/one-inch-HF-to-VHF-converter/upconverter PCB.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JennyList/LanguageSpy/HEAD/Hardware/one-inch-HF-to-VHF-converter/upconverter PCB.png
--------------------------------------------------------------------------------
/Hardware/one-inch-HF-to-VHF-converter/upconverter schematic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JennyList/LanguageSpy/HEAD/Hardware/one-inch-HF-to-VHF-converter/upconverter schematic.png
--------------------------------------------------------------------------------
/RaspberryPi/README.md:
--------------------------------------------------------------------------------
1 | # Raspberry Pi code
2 | This directory contains code for the Raspberry Pi.
3 |
4 | The rf directory contains work on the use of the Pi's clock generator as an RF source.
5 |
--------------------------------------------------------------------------------
/Hardware/one-inch-HF-to-VHF-converter/one-inch-HF-receive-converter-gerbers-v1.2.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JennyList/LanguageSpy/HEAD/Hardware/one-inch-HF-to-VHF-converter/one-inch-HF-receive-converter-gerbers-v1.2.zip
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # LanguageSpy
2 | Open source code from Language Spy, [http://www.languagespy.com](http://www.languagespy.com)
3 |
4 | The Hardware directory contains open source hardware projects.
5 |
6 | The RaspberryPi directory contains code for the Raspberry Pi.
7 |
--------------------------------------------------------------------------------
/RaspberryPi/rf/README.md:
--------------------------------------------------------------------------------
1 | # Raspberry Pi RF code
2 | This directory contains work on the use of the Pi's clock generator as an RF source.
3 |
4 | The freq__pi directory contains a copy of Jan Panteltje's freq_pi signal generator modified to detect which Pi version it is running on.
5 |
6 | The sstv directory contains a proff-of-concept Raspberry Pi SSTV transmitter.
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Hardware/README.md:
--------------------------------------------------------------------------------
1 | # Hardware
2 | This directory contains open source hardware projects.
3 |
4 | The one-inch-HF-to-VHF-converter directory contains an entry for the [2015 Hackaday.io One Square Inch competition](https://hackaday.io/project/7813-the-square-inch-project), an HF receive converter for VHF receivers like the RTL SDRs or similar.
5 |
6 | The UKHASnet-Pi directory contains a board to allow the [HopeRF RFM69](http://www.hoperf.com/rf_transceiver/modules/RFM69HW.html) RF modules to be interfaced to a Raspberry Pi. It can be used for experimenting with [UKHASnet](https://ukhas.net/).
7 |
--------------------------------------------------------------------------------
/Hardware/one-inch-HF-to-VHF-converter/hf-upconverter-bom.csv:
--------------------------------------------------------------------------------
1 | Part,Value,Package,Description
2 | C1,10u,PANASONIC_B,"POLARIZED CAPACITOR, European symbol"
3 | C2,0.1u,C0805,"CAPACITOR, European symbol"
4 | C3,180p,C0805,"CAPACITOR, European symbol"
5 | C4,180p,C0805,"CAPACITOR, European symbol"
6 | C5,0.1u,C0805,"CAPACITOR, European symbol"
7 | L1,220nH,L1206,1206 wire-wound inductor
8 | IC1,74VHC4053,SO16,Triple 2-channel ANALOG MULTIPLEXER
9 | JP1,USBA-SMD-MALE,USB-A-SMT-MALE,USB Connectors
10 | OS1,50MHz,7.2X5.2-4-PAD,5v oscillator – IMPORTANT! Don't use a 3v3 part!
11 | R1,2k2,R0805,"RESISTOR, European symbol"
12 | R2,2k2,R0805,"RESISTOR, European symbol"
13 | SMA1,ANT,SMA-EDGE,SMA Connector
14 | SMA2,OUT,SMA-EDGE,SMA Connector
15 | T1,Bourns PT61018PEL,N5,10/100BASE-TX SOIC-16 Fast Ethernet Magnetic Module
16 | PCB,,,As described in hf-upconverter.brd and one-inch-HF-receive-converter-gerbers.zip
17 |
--------------------------------------------------------------------------------
/RaspberryPi/rf/sstv/beacon.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | """
4 | This file is a modified version of the beacon.py from http://hsbp.org/rpi-sstv.
5 | Their repo: https://github.com/hsbp/rpi-sstv
6 | I am much indebted to them for their work.
7 |
8 | What it does: Takes a jpeg image called test.jpg, passes it through PySSTV, returns tone,duration pairs.
9 |
10 | Modifications to original:
11 |
12 | Removed callsign insertion code
13 | Changed tuple output to CSV output to stdout
14 | Removed GPIO code
15 |
16 | Usage: Pipe output to a file
17 |
18 | python beacon.py > test.csv
19 |
20 | """
21 |
22 | from PIL import Image, ImageFont, ImageDraw
23 | from pysstv.color import MartinM2
24 | from subprocess import check_output
25 | from cStringIO import StringIO
26 | import RPi.GPIO as GPIO
27 | import struct, sys
28 |
29 | TX_PIN = 18
30 |
31 | def main():
32 | img = Image.open('./test.jpg')
33 | img = img.resize((MartinM2.WIDTH, MartinM2.HEIGHT))
34 | font = ImageFont.load_default()
35 | sstv = MartinM2(img, 44100, 16)
36 | sstv.vox_enabled = True
37 | for freq, msec in sstv.gen_freq_bits():
38 | print freq,',',msec
39 |
40 | if __name__ == '__main__':
41 | main()
42 |
--------------------------------------------------------------------------------
/Hardware/UKHASnet-Pi/README.md:
--------------------------------------------------------------------------------
1 | # A HopeRF RFM69 board for the Raspberry Pi
2 | This is a board to allow the [HopeRF RFM69](http://www.hoperf.com/rf_transceiver/modules/RFM69HW.html) RF modules to be interfaced to a Raspberry Pi. It can be used for experimenting with [UKHASnet](https://ukhas.net/), or just as an experimenting board in its own right for the RFM69 series.
3 |
4 | ###Files:
5 | - RPi-UKHASnet-node.brd, an EAGLE CAD board file.
6 | - RPi-UKHASnet-node.sch, an EAGLE CAD schematic file.
7 | - UKHASnet-node-gerbers.zip, Gerber files for manufacturing generated through EAGLE CAD using Dirt Cheap Dirty Boards' CAM file.
8 | - UKHASnet-Pi-board.png, a generated image of the PCB.
9 | - UKHASnet-Pi-schematic.png, the converter circuit diagram.
10 | - LICENCE, a copy of the Solderpad Hardware Licence v0.51
11 |
12 | ###Description:
13 | This is a simple breakout board, very little rocket science. It features a 3.3v regulator on the underside because the module is capable of taking more current than the Pi's regulator has to spare.
14 |
15 | ###Licence and boilerplate
16 |
17 | This project is licenced under the Solderpad Hardware licence.
18 |
19 | Copyright 2016 Jenny List
20 | Copyright and related rights are licensed under the Solderpad Hardware License, Version 0.51 (the “License”); you may not use these files except in compliance with the License.
21 | You may obtain a copy of the License at [http://solderpad.org/licenses/SHL-0.51](http://solderpad.org/licenses/SHL-0.51). Unless required by applicable law or agreed to in writing, software, hardware and materials distributed under this License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
22 |
--------------------------------------------------------------------------------
/Hardware/one-inch-HF-to-VHF-converter/README.md:
--------------------------------------------------------------------------------
1 | # One inch HF to VHF converter
2 | This is an entry for the [2015 Hackaday.io One Square Inch competition](https://hackaday.io/project/7813-the-square-inch-project), an HF receive converter for VHF receivers like the RTL SDR or similar. You can find its project page [here](https://hackaday.io/project/8486-hf-receive-converter-for-rtl-sdrs-and-similar).
3 |
4 | ###Files:
5 | - hf-upconverter.brd, an EAGLE CAD board file.
6 | - hf-upconverter.sch, an EAGLE CAD schematic file.
7 | - one-inch-HF-receive-converter-gerbers-v1.2.zip, Gerber files for manufacturing generated through EAGLE CAD using OSH Park's CAM file.
8 | - upconverter PCB.png, a generated image of the PCB.
9 | - upconverter schematic.png, the converter circuit diagram.
10 | - hf-upconverter-bom.csv, the bill of materials for the project.
11 | - LICENCE, a copy of the Solderpad Hardware Licence v0.51
12 |
13 | ###Instructions:
14 | It's a small board, so the instructions are short and sweet.
15 | Solder all the chip components first, then the mixer IC, then the transformer, the electrolytic, the oscillator, and finally the connectors. You'll get lots of flux all over everything, but a quick brush with a bit of solvent cleaner should deal with that.
16 |
17 | ###Licence and boilerplate
18 |
19 | This project is licenced under the Solderpad Hardware licence.
20 |
21 | Copyright 2015 Jenny List
22 | Copyright and related rights are licensed under the Solderpad Hardware License, Version 0.51 (the “License”); you may not use these files except in compliance with the License.
23 | You may obtain a copy of the License at [http://solderpad.org/licenses/SHL-0.51](http://solderpad.org/licenses/SHL-0.51). Unless required by applicable law or agreed to in writing, software, hardware and materials distributed under this License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
24 |
--------------------------------------------------------------------------------
/RaspberryPi/rf/freq_pi/README.md:
--------------------------------------------------------------------------------
1 | # freq_pi signal generator and PiVFO GUI
2 | This directory contains two pieces of software:
3 | * A copy of Jan Panteltje's freq_pi signal generator modified to detect which Raspberry Pi model it is running on.
4 | * PiVFO, a Python GUI for freq_pi that provides a simple variable frequency oscillator.
5 |
6 | ##Quick install for both pieces of software:
7 | At a command line in your home directory on a stock Raspbian install:
8 | ```
9 | mkdir freq_pi
10 | cd freq_pi
11 | curl -o freq_pi.c https://raw.githubusercontent.com/JennyList/LanguageSpy/master/RaspberryPi/rf/freq_pi/freq_pi.c
12 | curl -o PiVFO.py https://raw.githubusercontent.com/JennyList/LanguageSpy/master/RaspberryPi/rf/freq_pi/PiVFO.py
13 | gcc -Wall -O4 -o freq_pi freq_pi.c -std=gnu99 -lm
14 | ```
15 |
16 | ##freq_pi
17 |
18 | ###Function:###
19 | freq_pi is a programmable frequency generator that uses the Raspberry Pi GPCLK0 line, on pin 7 of the GPIO port.
20 | This version 0.72 now does not need any configuration to run on either BCM2385 or BCM2386 Pi boards, so will run on the Pi or the Pi 2.
21 |
22 | ###To compile freq_pi:###
23 | gcc -Wall -O4 -o freq_pi freq_pi.c -std=gnu99 -lm
24 |
25 | ###To run freq_pi:###
26 | sudo freq_pi -f (frequency in Hz)
27 |
28 | Example for 14MHz: sudo freq_pi -f 14000000
29 |
30 | To turn freq_pi off: sudo freq_pi -q
31 |
32 | sudo is required to access the Pi hardware directly.
33 |
34 | ##PiVFO
35 |
36 | ###Function:###
37 | PiVFO is a simple GUI for freq_pi that simulates a simple variable frequency oscillator.
38 |
39 | ###To configure PiVFO:###
40 | If the freq_pi executable is in the same directory as PiVFO.py then no configuration should be necessary.
41 | If it is in a different directory then find the line that defines the variable called freqgen and update it to the path where freq_pi can be found.
42 |
43 | ###To run PiVFO###
44 |
45 | sudo python ./PiVFO.py
46 |
47 | sudo is required to access the Pi hardware directly.
48 |
49 | Click the "Start VFO" button to start the VFO, select your frequency with the buttons and dial.
50 |
--------------------------------------------------------------------------------
/RaspberryPi/rf/sstv/README.md:
--------------------------------------------------------------------------------
1 | #Stand alone SSTV for the Raspberry Pi
2 |
3 | This directory contains proof-of-concept code to use the Raspberry Pi as a stand-alone slow-scan television (SSTV) transmitter generating low-level RF using the Pi's internal clock generator on pin 7 of the expansion connector.
4 |
5 | It builds on the work of others, in particular the following:
6 |
7 | * beacon.py from [http://hsbp.org/rpi-sstv](http://hsbp.org/rpi-sstv)
8 | * freq_pi from [http://panteltje.com/panteltje/newsflex/download.html](http://panteltje.com/panteltje/newsflex/download.html)
9 |
10 | It relies upon PySSTV[https://github.com/dnet/pySSTV](https://github.com/dnet/pySSTV) to generate tone,duration pairs.
11 |
12 | ##Overview
13 |
14 | There are two pieces of software in this package.
15 |
16 | * beacon.py takes a jpeg image hardcoded as test.jpg, passes it through PySSTV, and returns tone and duration pairs to stdout.
17 | * tones-to-rf takes a CSV file hardcoded as test.csv containing tone(Hz) and duration(mSec) pairs generated by beacon.py,
18 | then adds each successive tone to an RF carrier generated on GPCLK0 for each duration.
19 |
20 | If you have an apporpriate amateur radio licence this RF can be fed through a low-pass filter to an antenna to make a simple QRP (less than 10mW) SSTV transmitter.
21 |
22 | ##Installation & config
23 |
24 | You will first need to install PySSTV, if you do not already have it. The following commands worked for me on a stock Raspbian install.
25 |
26 | ```
27 | sudo apt-get install python-setuptools
28 | sudo apt-get install python-imaging
29 | sudo easy_install pip
30 | sudo pip install setuptools --no-use-wheel --upgrade
31 | sudo pip install PySSTV
32 | ```
33 |
34 | Then you will need to configure and compile tones-to-rf.c
35 |
36 | The version of tones-to-rf.c distributed is pre-configured for the Raspberry Pi 2. If you have a Raspberry Pi 1, find the lines that define BCM2708_PERI_BASE, and uncomment the line relevant to your platform.
37 |
38 | Compile tones-to-rf as follows:
39 | ```
40 | gcc -Wall -O4 -o tones-to-rf tones-to-rf.c -std=gnu99 -lm
41 | ```
42 |
43 | ##Usage
44 |
45 | First, set up your RF output and HF receiver. It is suggested that you use a DC blocking capacitor on pin 7 of the expansion connector, and feed it into a dummy load for testing. This software was written to demonstrate the RF breakout board at [https://www.kickstarter.com/projects/2001938575/rf-breakout-kit-for-the-raspberry-pi](https://www.kickstarter.com/projects/2001938575/rf-breakout-kit-for-the-raspberry-pi), with that board an old 50 ohm BNC Ethernet terminator was used. The HF receiver was loosely coupled with a short piece of insulated wire from its antenna terminal looped round the Ethernet terminator. SSTV was demodulated using an Android SSTV app on a tablet next to the speaker. The SSTV mode is set as Martin2 in beacon.py.
46 |
47 | Save the JPEG image you wish to transmit as test.jpg. You could add Python code to put your callsign in as the original beacon.py did, however I used the GIMP.
48 | Run beacon.py as follows, piping output to a file.
49 |
50 | ```
51 | python beacon.py > test.csv
52 | ```
53 | You should find test.csv, containing frequency,duration pairs.
54 |
55 | Then run tones-to-rf to generate the transmission. Specify a frequency as below, in this example the 20m SSTV calling frequency. Tune your receiver to the frequency.
56 |
57 | ```
58 | sudo ./tones-to-rf -f 14230000
59 | ```
60 |
61 | You should hear the SSTV tones in your receiver's speaker, and all being well your SSTV decoder should give you your image.
62 |
63 | There is a fudge factor with comments in the CSV-reading loop of tones-to-rf.c. This is to compensate for the time taken by each iteration of the loop, and was found by trial and error for best picture decoding. It therefore should work for a Raspberry Pi 2, but may not work for a Raspberry Pi 1. You may have to experiment with this figure. This is proof-of-concept code only.
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
--------------------------------------------------------------------------------
/RaspberryPi/rf/freq_pi/PiVFO.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | # This program is free software: you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License as published by
5 | # the Free Software Foundation, either version 3 of the License, or
6 | # (at your option) any later version.
7 | #
8 | # This program is distributed in the hope that it will be useful,
9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 | # GNU General Public License for more details.
12 | #
13 | # You should have received a copy of the GNU General Public License
14 | # along with this program. If not, see .
15 |
16 | # PiVFO Version 0.1
17 | # A GUI for freq_pi
18 | # Jenny List G7CKF
19 | # http://www.languagespy.com
20 |
21 | import time
22 | import math
23 | import subprocess
24 |
25 | #import and rename the 'tkinter' module for < Python 3.3:
26 | import Tkinter as tkinter
27 |
28 | #Initial frequency, variable then holds VFO frequency
29 | vfoFreq = 14000000
30 | #VFO state
31 | vfoState = False
32 |
33 | #Max frequency 250MHz
34 | maxFreq = 250000000
35 | #Min frequency is 125kHz
36 | minFreq = 125000
37 |
38 | #Location of freq_pi
39 | freqgen = "./freq_pi"
40 |
41 | def doQuitEvent(key):
42 | c.resetty() # set terminal settings
43 | c.endwin() # end curses session
44 | subprocess.call([freqgen, "-q"]) #Turn off the clock
45 | raise SystemExit
46 |
47 | #VFO on and off
48 | def vfoOnFunc():
49 | global vfoState
50 | subprocess.call([freqgen, "-f", str(vfoFreq)])
51 | vfoState = True
52 | vfoOnButton['state'] = 'disabled'
53 | vfoOffButton['state'] = 'normal'
54 |
55 | def vfoOffFunc():
56 | global vfoState
57 | subprocess.call([freqgen, "-q"])
58 | vfoState = False
59 | vfoOnButton['state'] = 'normal'
60 | vfoOffButton['state'] = 'disabled'
61 |
62 | #Change frequency
63 | def freqChange(deltaF):
64 | global vfoFreq
65 | global frequencyLabel
66 | global frequencyUnitLabel
67 | newFreq = vfoFreq + deltaF
68 | #max/min check
69 | if(newFreq >= minFreq and newFreq <= maxFreq):
70 | vfoFreq = newFreq
71 | #else:
72 | #Need to display some kind of message perhaps?
73 | #set the display
74 | frequencyLabel.configure(text=freqToDisplay(vfoFreq))
75 | frequencyUnitLabel.configure(text=freqDisplayUnit(vfoFreq))
76 | if(vfoState == True):
77 | subprocess.call([freqgen, "-f", str(vfoFreq)])
78 |
79 | #Format a display frequency
80 | def freqToDisplay(intFreq):
81 | freq = str(intFreq)
82 | #Split off Hz. Everything will have a Hz fraction
83 | Hz = freq[-3] +freq[-2] +freq[-1]
84 | #Split off kHz. All frequencies will be above 100kHz.
85 | kHz = freq[-6] + freq[-5] +freq[-4] + '.'
86 | #Split off the Mhz fraction
87 | if intFreq >= 1000000:
88 | MHz = str(int(intFreq/1000000)) + '.'
89 | else: #Catch frequencies below 1MHz
90 | MHz = '' #We'll display these as kHz
91 | returnFreq = MHz + kHz + Hz
92 | return returnFreq
93 |
94 | #Pick a unit for frequency display
95 | def freqDisplayUnit(intFreq):
96 | unit = 'MHz'
97 | if intFreq < 1000000:
98 | unit = 'kHz'
99 | return unit
100 |
101 | #Dial function
102 | dialAngle = 0
103 | def dialMove(event):
104 | global canvasWidth
105 | global canvasHeight
106 | global dialAngle
107 | global dialFingerHole
108 | global dialCanvas
109 | global fingerX
110 | global fingerY
111 | xRelativeToCentre = int(event.x-(canvasWidth/2))
112 | yRelativeToCentre = int(event.y-(canvasHeight/2))
113 | if(xRelativeToCentre == 0): #Catch divide by zero
114 | xRelativeToCentre = 1
115 | theta = (math.atan2(xRelativeToCentre,yRelativeToCentre) + math.pi) #make it 0 rather than -pi at the top.
116 | if( theta>dialAngle):
117 | subtended = theta-dialAngle
118 | if(subtended > 1):
119 | deltaF = -24 #Catch 2pi to zero switchover with about the delta-f we want.
120 | else:
121 | deltaF = int(-1*subtended*(500/2*math.pi))
122 | else:
123 | subtended = dialAngle-theta
124 | if(subtended > 1):
125 | deltaF = 24
126 | else:
127 | deltaF = int(subtended*(500/2*math.pi))
128 | freqChange(deltaF)
129 | dialAngle = theta
130 | #Move the finger hole.
131 | newFingerX = int(canvasWidth/2 + ((canvasWidth/2)-20)*math.cos(theta-math.pi/2))
132 | newFingerY = int(canvasHeight/2 + ((canvasHeight/2)-20)*math.sin(theta-math.pi/2))
133 | dialCanvas.move(dialFingerHole, fingerX-newFingerX, newFingerY-fingerY)
134 | fingerX = newFingerX
135 | fingerY = newFingerY
136 |
137 |
138 | #create a new window
139 | window = tkinter.Tk()
140 | #set the window title
141 | window.title("PiVFO by G7CKF/Language Spy")
142 | #set the window background colour
143 | windowBackground = '#123123123'
144 | window.configure(background=windowBackground)
145 |
146 | #Display row group, for frequency controls and display
147 | frequencyRowGroup = tkinter.LabelFrame(window, relief="flat", background=windowBackground)
148 | frequencyRowGroup.pack(side="left")
149 |
150 | #Display row group, for freq display
151 | displayRowGroup = tkinter.LabelFrame(frequencyRowGroup, relief="flat", background=windowBackground)
152 | displayRowGroup.pack()
153 |
154 | #Group to hold VFO display and adjustment
155 | displayGroup = tkinter.LabelFrame(displayRowGroup, background="#000000000", foreground="#000fff000", padx=5, pady=5)
156 | displayGroup.pack(padx=2, pady=2, side="left")
157 | #Frequency display
158 | frequencyLabel = tkinter.Label(displayGroup, text=freqToDisplay(vfoFreq), background="#000000000", foreground="#000fff000", width="12", justify="right", font=("Helvetica", 24))
159 | #Frequency unit
160 | frequencyUnitLabel = tkinter.Label(displayGroup, text=freqDisplayUnit(vfoFreq), background="#000000", foreground="#000fff000", width="3", justify="left", font=("Helvetica", 10))
161 | frequencyLabel.pack(side="left")
162 | frequencyUnitLabel.pack(side="left")
163 |
164 | #Frequency control row group, for up/down buttons and dial
165 | frequencyControlRowGroup = tkinter.LabelFrame(frequencyRowGroup, relief="flat", background=windowBackground)
166 | frequencyControlRowGroup.pack()
167 |
168 | #Frequency dial
169 | canvasWidth = 100
170 | canvasHeight = 100
171 | fingerX = 50
172 | fingerY = 20
173 | dialCanvas = tkinter.Canvas(frequencyControlRowGroup, height=canvasHeight, width=canvasWidth, relief="flat", background=windowBackground)
174 | dial = dialCanvas.create_oval(10, 10, 90, 90, width=5, outline='#800800800', fill='#200200200')
175 | dialFingerHole = dialCanvas.create_oval(40, 10, 60, 30, width=2, fill='#500500500')
176 | dialCanvas.bind("", dialMove)#Bound to whole canvas
177 |
178 | #Groups to hold up/down buttons
179 | frequencyControlGroupLeft = tkinter.LabelFrame(frequencyControlRowGroup, padx=0, pady=0, relief="flat", background=windowBackground)
180 | frequencyControlGroupRight = tkinter.LabelFrame(frequencyControlRowGroup, padx=0, pady=0, relief="flat", background=windowBackground)
181 | #create button widgets to increment
182 | downTenMHz = tkinter.Button(frequencyControlGroupLeft, text="-10MHz", command=lambda: freqChange(-10000000), padx=2, pady=3, font=("Helvetica", 10))
183 | downOneMHz = tkinter.Button(frequencyControlGroupLeft, text="-1MHz", command=lambda: freqChange(-1000000), padx=2, pady=3, font=("Helvetica", 10))
184 | downhundredKHz = tkinter.Button(frequencyControlGroupLeft, text="-100kHz", command=lambda: freqChange(-100000), padx=2, pady=3, font=("Helvetica", 10))
185 | downTenKHz = tkinter.Button(frequencyControlGroupLeft, text="-10kHz", command=lambda: freqChange(-10000), padx=2, pady=3, font=("Helvetica", 10))
186 | downTenMHz.pack(fill='x')
187 | downOneMHz.pack(fill='x')
188 | downhundredKHz.pack(fill='x')
189 | downTenKHz.pack(fill='x')
190 | #create button widgets to decrement
191 | upTenKHz = tkinter.Button(frequencyControlGroupRight, text="+10kHz", command=lambda: freqChange(10000), padx=2, pady=3, font=("Helvetica", 10))
192 | uphundredKHz = tkinter.Button(frequencyControlGroupRight, text="+100kHz", command=lambda: freqChange(100000), padx=2, pady=3, font=("Helvetica", 10))
193 | upOneMHz = tkinter.Button(frequencyControlGroupRight, text="+1MHz", command=lambda: freqChange(1000000), padx=2, pady=3, font=("Helvetica", 10))
194 | upTenMHz = tkinter.Button(frequencyControlGroupRight, text="+10MHz", command=lambda: freqChange(10000000), padx=2, pady=3, font=("Helvetica", 10))
195 | upTenMHz.pack(fill='x')
196 | upOneMHz.pack(fill='x')
197 | uphundredKHz.pack(fill='x')
198 | upTenKHz.pack(fill='x')
199 |
200 | #Pack all the frequency control stuff
201 | frequencyControlGroupLeft.pack(padx=0, pady=0, side="left")
202 | dialCanvas.pack(side='left')
203 | frequencyControlGroupRight.pack(padx=0, pady=0, side="left")
204 |
205 | #Group to hold VFO power functions
206 | powerGroup = tkinter.LabelFrame(window, relief="flat", background=windowBackground)
207 | powerGroup.pack(padx=0, pady=0, side="top")
208 | #create a button widget to call vfoOn
209 | vfoOnButton = tkinter.Button(powerGroup, text="Start VFO", command=vfoOnFunc, font=("Helvetica", 10))
210 | #create a button widget to call vfoOff
211 | vfoOffButton = tkinter.Button(powerGroup, text="Stop VFO", command=vfoOffFunc, state='disabled', font=("Helvetica", 10))
212 | #Pack powerGroup widgets
213 | vfoOnButton.pack()
214 | vfoOffButton.pack()
215 |
216 | #create a label widget called 'lbl'
217 | #lbl = tkinter.Label(window, text="Label")
218 | #pack (add) the widgets into the window
219 | #lbl.pack()
220 |
221 | #draw the window, and start the 'application'
222 | window.mainloop()
223 |
--------------------------------------------------------------------------------
/Hardware/one-inch-HF-to-VHF-converter/LICENCE:
--------------------------------------------------------------------------------
1 | SOLDERPAD HARDWARE LICENSE version 0.51
2 |
3 | This license is based closely on the Apache License Version 2.0, but is not approved or endorsed by the Apache Foundation. A copy of the non-modified Apache License 2.0 can be found at http://www.apache.org/licenses/LICENSE-2.0.
4 |
5 | As this license is not currently OSI or FSF approved, the Licensor permits any Work licensed under this License, at the option of the Licensee, to be treated as licensed under the Apache License Version 2.0 (which is so approved).
6 |
7 | This License is licensed under the terms of this License and in particular clause 7 below (Disclaimer of Warranties) applies in relation to its use.
8 |
9 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
10 |
11 | 1. Definitions.
12 |
13 | “License” shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
14 |
15 | “Licensor” shall mean the Rights owner or entity authorized by the Rights owner that is granting the License.
16 |
17 | “Legal Entity” shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, “control” means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
18 |
19 | “You” (or “Your”) shall mean an individual or Legal Entity exercising permissions granted by this License.
20 |
21 | “Rights” means copyright and any similar right including design right (whether registered or unregistered), semiconductor topography (mask) rights and database rights (but excluding Patents and Trademarks).
22 |
23 | “Source” form shall mean the preferred form for making modifications, including but not limited to source code, net lists, board layouts, CAD files, documentation source, and configuration files.
24 |
25 | “Object” form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, the instantiation of a hardware design and conversions to other media types, including intermediate forms such as bytecodes, FPGA bitstreams, artwork and semiconductor topographies (mask works).
26 |
27 | “Work” shall mean the work of authorship, whether in Source form or other Object form, made available under the License, as indicated by a Rights notice that is included in or attached to the work (an example is provided in the Appendix below).
28 |
29 | “Derivative Works” shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) or physically connect to or interoperate with the interfaces of, the Work and Derivative Works thereof.
30 |
31 | “Contribution” shall mean any design or work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the Rights owner or by an individual or Legal Entity authorized to submit on behalf of the Rights owner. For the purposes of this definition, “submitted” means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the Rights owner as “Not a Contribution.”
32 |
33 | “Contributor” shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
34 |
35 | 2. Grant of License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable license under the Rights to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form and do anything in relation to the Work as if the Rights did not exist.
36 |
37 | 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
38 |
39 | 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
40 |
41 | You must give any other recipients of the Work or Derivative Works a copy of this License; and
42 |
43 | You must cause any modified files to carry prominent notices stating that You changed the files; and
44 |
45 | You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
46 |
47 | If the Work includes a “NOTICE” text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
48 |
49 | 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
50 |
51 | 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
52 |
53 | 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
54 |
55 | 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
56 |
57 | 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
58 |
59 | END OF TERMS AND CONDITIONS
60 |
61 | APPENDIX: How to apply this license to your work
62 |
63 | To apply this license to your work, attach the following boilerplate notice, with the fields enclosed by brackets “[]” replaced with your own identifying information. (Don’t include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same “printed page” as the copyright notice for easier identification within third-party archives.
64 |
65 | Copyright [yyyy] [name of copyright owner] Copyright and related rights are licensed under the Solderpad Hardware License, Version 0.51 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://solderpad.org/licenses/SHL-0.51. Unless required by applicable law or agreed to in writing, software, hardware and materials distributed under this License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
66 |
--------------------------------------------------------------------------------
/RaspberryPi/rf/sstv/tones-to-rf.c:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | tones-to-rf.c
4 |
5 | Purpose:
6 | Proof of concept code for Raspberry Pi SSTV transmission
7 | Takes a CSV file called test.csv containing tone(Hz),duration(mSec) pairs,
8 | adds tone to an RF carrier generated on GPCLK0 for duration.
9 |
10 | Jenny List, http://www.languagespy.com
11 | Derived from freq_pi Copyright (c) Jan Panteltje 2013-always
12 | email: panteltje@yahoo.com
13 | This code contains parts of code from Pifm.c
14 |
15 | Config: find the BCM2708_PERI_BASE definitions, and uncomment the one for your Raspberry Pi version
16 | As supplied, this file has the Raspberry Pi 2 version uncommented.
17 |
18 | You may wish to adjust the loop fudge factor to suit your SSTV timing when calculating duration,
19 | my figure came from trial and error. This is only a proof of concept, not polished and lovely code.
20 |
21 | To compile:
22 | gcc -Wall -O4 -o tones-to-rf tones-to-rf.c -std=gnu99 -lm
23 |
24 | Start GPL license:
25 | This program is free software; you can redistribute it and/or modify
26 | it under the terms of the GNU General Public License as published by
27 | the Free Software Foundation; either version 2 of the License, or
28 | (at your option) any later version.
29 |
30 | This program is distributed in the hope that it will be useful,
31 | but WITHOUT ANY WARRANTY; without even the implied warranty of
32 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
33 | GNU General Public License for more details.
34 |
35 | You should have received a copy of the GNU General Public License
36 | along with this program; if not, write to the Free Software
37 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
38 |
39 | */
40 |
41 | #include
42 | #include
43 | #include
44 | #include
45 | #include
46 | #include
47 | #include
48 | #include
49 | #include
50 | #include
51 | #include
52 | #include
53 | #include
54 | #include
55 | #include
56 | #include
57 | #include
58 | #include
59 | #include
60 | #include
61 |
62 |
63 | #define PAGE_SIZE (4*1024)
64 | #define BLOCK_SIZE (4*1024)
65 |
66 |
67 | //Uncomment the relevant base address definition for your platform
68 | //Base address definition for Pi 1
69 | //#define BCM2708_PERI_BASE 0x20000000
70 | //Base address definition for Pi 2
71 | #define BCM2708_PERI_BASE 0x3F000000
72 |
73 |
74 | int mem_fd;
75 | char *gpio_mem, *gpio_map;
76 | char *spi0_mem, *spi0_map;
77 |
78 |
79 | // I/O access
80 | volatile unsigned *gpio;
81 | volatile unsigned *allof7e;
82 |
83 | // GPIO setup macros. Always use INP_GPIO(x) before using OUT_GPIO(x) or SET_GPIO_ALT(x,y)
84 | #define INP_GPIO(g) *(gpio+((g)/10)) &= ~(7<<(((g)%10)*3))
85 | #define OUT_GPIO(g) *(gpio+((g)/10)) |= (1<<(((g)%10)*3))
86 | #define SET_GPIO_ALT(g,a) *(gpio+(((g)/10))) |= (((a)<=3?(a)+4:(a)==4?3:2)<<(((g)%10)*3))
87 |
88 | #define GPIO_SET *(gpio+7) // sets bits which are 1 ignores bits which are 0
89 | #define GPIO_CLR *(gpio+10) // clears bits which are 1 ignores bits which are 0
90 | #define GPIO_GET *(gpio+13) // sets bits which are 1 ignores bits which are 0
91 |
92 | #define ACCESS(base) *(volatile int*)((int)allof7e+base-0x7e000000)
93 | #define SETBIT(base, bit) ACCESS(base) |= 1< 4095.0) || (divi < 1.0) )
195 | {
196 | fprintf(stderr, "freq_pi: requested frequency out of range, aborting.\n");
197 |
198 | exit(1);
199 | }
200 |
201 |
202 | if(divf > 4095.0)
203 | {
204 | fprintf(stderr, "freq_pi: requested frequency out of range, aborting.\n");
205 |
206 | exit(1);
207 | }
208 |
209 | ua = (0x5a << 24) + (divi << 12) + divf;
210 |
211 | return ua;
212 | }
213 | /* end of calculate_divider */
214 |
215 | void start_rf_output(int source)
216 | {
217 |
218 | printf("Starting RF\n");
219 |
220 | /* open /dev/mem */
221 | if ((mem_fd = open("/dev/mem", O_RDWR|O_SYNC) ) < 0)
222 | {
223 | printf("can't open /dev/mem \n");
224 | exit (-1);
225 | }
226 |
227 | allof7e = (unsigned *)mmap( NULL, 0x01000000, /*len */ PROT_READ|PROT_WRITE, MAP_SHARED, mem_fd, BCM2708_PERI_BASE /* base */ );
228 |
229 | if ((int)allof7e==-1) exit(-1);
230 |
231 | SETBIT(GPFSEL0 , 14);
232 | CLRBIT(GPFSEL0 , 13);
233 | CLRBIT(GPFSEL0 , 12);
234 |
235 | /*
236 | Clock source
237 | 0 = GND
238 | 1 = oscillator
239 | 2 = testdebug0
240 | 3 = testdebug1
241 | 4 = PLLA per
242 | 5 = PLLC per
243 | 6 = PLLD per
244 | 7 = HDMI auxiliary
245 | 8-15 = GND
246 | */
247 |
248 | struct GPCTL setupword = {source/*SRC*/, 1, 0, 0, 0, 1,0x5a};
249 |
250 | ACCESS(CM_GP0CTL) = *((int*)&setupword);
251 | }
252 |
253 | void stop_rf_output(int source)
254 | {
255 | printf("Stopping RF\n");
256 |
257 | /*
258 | Clock source
259 | 0 = GND
260 | 1 = oscillator
261 | 2 = testdebug0
262 | 3 = testdebug1
263 | 4 = PLLA per
264 | 5 = PLLC per
265 | 6 = PLLD per
266 | 7 = HDMI auxiliary
267 | 8-15 = GND
268 | */
269 |
270 | struct GPCTL setupword = {source/*SRC*/, 0, 0, 0, 0, 0,0x5a};
271 |
272 | ACCESS(CM_GP0CTL) = *((int*)&setupword);
273 | }
274 |
275 | void modulate(int m)
276 | {
277 | ACCESS(CM_GP0DIV) = (0x5a << 24) + 0x4d72 + m;
278 | }
279 |
280 |
281 | struct CB
282 | {
283 | volatile unsigned int TI;
284 | volatile unsigned int SOURCE_AD;
285 | volatile unsigned int DEST_AD;
286 | volatile unsigned int TXFR_LEN;
287 | volatile unsigned int STRIDE;
288 | volatile unsigned int NEXTCONBK;
289 | volatile unsigned int RES1;
290 | volatile unsigned int RES2;
291 | };
292 |
293 |
294 | struct DMAregs
295 | {
296 | volatile unsigned int CS;
297 | volatile unsigned int CONBLK_AD;
298 | volatile unsigned int TI;
299 | volatile unsigned int SOURCE_AD;
300 | volatile unsigned int DEST_AD;
301 | volatile unsigned int TXFR_LEN;
302 | volatile unsigned int STRIDE;
303 | volatile unsigned int NEXTCONBK;
304 | volatile unsigned int DEBUG;
305 | };
306 |
307 |
308 | struct PageInfo
309 | {
310 | void* p; // physical address
311 | void* v; // virtual address
312 | };
313 |
314 |
315 | struct PageInfo constPage;
316 | struct PageInfo instrPage;
317 | struct PageInfo instrs[1024];
318 |
319 |
320 |
321 |
322 | void print_usage()
323 | {
324 | fprintf(stderr,\
325 | "\ntones-to-rf \n\
326 | Usage:\nfreq_pic -f frequency [-h]\n\
327 | -f int frequency to ouput on GPIO_4 pin 7.\n\
328 | -h help (this help).\n\
329 | \n");
330 | fprintf(stderr,\
331 | "Example for 1 MHz:\n\
332 | freq_pi -f 100000000\n\
333 | \n"\
334 | );
335 |
336 | } /* end function print_usage */
337 |
338 |
339 |
340 |
341 | int main(int argc, char **argv)
342 | {
343 | int a;
344 | uint32_t frequency = 0; // -Wall
345 |
346 |
347 | /* defaults */
348 |
349 |
350 |
351 | /* end defaults */
352 |
353 |
354 |
355 | /* proces any command line arguments */
356 | while(1)
357 | {
358 | a = getopt(argc, argv, "f:h");
359 | if(a == -1) break;
360 |
361 | switch(a)
362 | {
363 | case 'f': // frequency
364 | a = atoi(optarg);
365 |
366 |
367 | frequency = a;
368 | break;
369 | case 'h': // help
370 | print_usage();
371 | exit(1);
372 | break;
373 | break;
374 | case -1:
375 | break;
376 | case '?':
377 | if (isprint(optopt) )
378 | {
379 | fprintf(stderr, "send_iq: unknown option `-%c'.\n", optopt);
380 | }
381 | else
382 | {
383 | fprintf(stderr, "send_iq: unknown option character `\\x%x'.\n", optopt);
384 | }
385 | print_usage();
386 |
387 | exit(1);
388 | break;
389 | default:
390 | print_usage();
391 |
392 | exit(1);
393 | break;
394 | }/* end switch a */
395 | }/* end while getopt() */
396 |
397 | int clock_source;
398 | /*
399 | Clock source
400 | 0 = GND
401 | 1 = oscillator
402 | 2 = testdebug0
403 | 3 = testdebug1
404 | 4 = PLLA per
405 | 5 = PLLC per
406 | 6 = PLLD per
407 | 7 = HDMI auxiliary
408 | 8-15 = GND
409 | */
410 |
411 | /* init hardware */
412 |
413 | clock_source = 6; /* this GPIO_4 pin 7 allows only the 200 MHz clock????? as source, the other clock GPIO lines are not on a pin in revision 2 board, so we have to work with 200 MHz, and that seems to be 250 MHz */
414 |
415 | start_rf_output(clock_source);
416 |
417 | FILE *file = fopen("./test.csv", "r");
418 | if ( file )
419 | {
420 |
421 | //Borrowing from example at http://stackoverflow.com/a/13195361 CSV extraction
422 | char line[512];
423 | int tone;
424 | int duration;
425 | while (fgets(line, 512, file))
426 | {
427 |
428 | char tmp[sizeof line]; /* this will save a malloc()/free() pair */
429 | char *tok, *fence, *pstr;
430 | char ch, *cp1=line, *cp2=tmp;
431 |
432 | while (0 != (ch = *cp1++))
433 | *cp2++ = (ch == ',') ? 0 : ch;
434 |
435 | fence = cp2; /* remember end of string */
436 | *fence = 0; /* and terminate final string */
437 | tok = tmp; /* point to first token */
438 |
439 | tone =strtol(tok, &pstr, 10);
440 | if (tok < fence) tok += strlen(tok) + 1;
441 |
442 | //Make duration an int in microseconds
443 | //Subtracting an ugly fudge factor to account for the loop time taking about 90usec on a Raspberry Pi 2
444 | //Your fudge factor may vary with trial and error.
445 | duration =(int)(strtof(tok,NULL)*1000)-90;
446 |
447 | //Make the RF tone
448 | ACCESS(CM_GP0DIV) = calculate_divider(frequency+tone);
449 | //Time interval for tone
450 | usleep(duration);
451 | }
452 |
453 |
454 | }
455 | else /* fopen() returned NULL */
456 | {
457 | printf("error opening csv file");
458 | }
459 |
460 |
461 | stop_rf_output(clock_source);
462 |
463 |
464 | //fprintf(stderr, "WAS here\n");
465 |
466 | exit(0);
467 | } /* end function main */
468 |
469 |
--------------------------------------------------------------------------------
/RaspberryPi/rf/freq_pi/freq_pi.c:
--------------------------------------------------------------------------------
1 | /*
2 | This file is part of freq_pi Copyright (c) Jan Panteltje 2013-always
3 | email: panteltje@yahoo.com
4 |
5 | This code contains parts of code from Pifm.c
6 |
7 | Start GPL license:
8 | This program is free software; you can redistribute it and/or modify
9 | it under the terms of the GNU General Public License as published by
10 | the Free Software Foundation; either version 2 of the License, or
11 | (at your option) any later version.
12 |
13 | This program is distributed in the hope that it will be useful,
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 | GNU General Public License for more details.
17 |
18 | You should have received a copy of the GNU General Public License
19 | along with this program; if not, write to the Free Software
20 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 |
22 | If you take this code and port it to that Redmond crap you STILL must release SOURCE code,
23 | this program has secret beyond bit level encrypted bits that make it traceable and you will be bitten by the FSF if you violate these terms.
24 | */
25 |
26 | /* set TABs to 4 for correct formatting of this file, or if you do not know what that is replace all TABs with 4 spaces, else you cannot READ this */
27 | /*
28 |
29 | Raspberry Pi 2 support added Jenny List http://www.languagespy.com 2015-07-04 and 2015-10-16
30 |
31 | */
32 | /*
33 | Program name:
34 | freq_pi
35 |
36 | Function:
37 | programmable frequency generator on GPIO_4 pin 7
38 |
39 |
40 | To compile:
41 | gcc -Wall -O4 -o freq_pi freq_pi.c -std=gnu99 -lm
42 |
43 |
44 | To install:
45 | cp freq_pi /usr/local/bin/
46 |
47 | To run:
48 | freq_pi
49 | */
50 |
51 | #define PROGRAM_VERSION "0.72"
52 |
53 |
54 | /*
55 | Changes:
56 |
57 | 0.1:
58 | First release
59 |
60 | 0.2:
61 | dunno
62 |
63 | 0.3:
64 | Added sweep function
65 |
66 | 0.4:
67 | Added loop and trigger output,
68 |
69 | 0.5:
70 | Added -s command line option delay between scans.
71 |
72 | 0.6:
73 | Put menu option in alphabetic order, fixed some things in menu.
74 | Added -q for exit with frequency off.
75 |
76 | 0.7:
77 | Added ppm frequency correction -y command line flag.
78 |
79 | 0.71
80 | Minor modification to add Raspberry Pi 2 base address support
81 |
82 | 0.72
83 | Brought in code to automatically select Pi or Pi 2
84 | From minimal_clk.c courtesy of http://abyz.co.uk/rpi/pigpio/index.html which is Public Domain
85 |
86 | */
87 |
88 | #include
89 | #include
90 | #include
91 | #include
92 | #include
93 | #include
94 | #include
95 | #include
96 | #include
97 | #include
98 | #include
99 | #include
100 | #include
101 | #include
102 | #include
103 | #include
104 | #include
105 | #include
106 | #include
107 | #include
108 |
109 |
110 | #define PAGE_SIZE (4*1024)
111 | #define BLOCK_SIZE (4*1024)
112 |
113 | int mem_fd;
114 | char *gpio_mem, *gpio_map;
115 | char *spi0_mem, *spi0_map;
116 | int wait_for_gpio8_flag;
117 | double ppm_correction;
118 | double pllo_frequency;
119 |
120 |
121 | //#define PLL0_FREQUENCY 250000000.0
122 | #define PLL0_FREQUENCY 500000000.0
123 |
124 | //Variables used by auto Pi model detection
125 | static volatile uint32_t piModel = 1;
126 | static volatile uint32_t piPeriphBase = 0x20000000;
127 | static volatile uint32_t piBusAddr = 0x40000000;
128 | static volatile uint32_t piGpioBase;
129 |
130 | // I/O access
131 | volatile unsigned *gpio;
132 | volatile unsigned *allof7e;
133 |
134 | // GPIO setup macros. Always use INP_GPIO(x) before using OUT_GPIO(x) or SET_GPIO_ALT(x,y)
135 | #define INP_GPIO(g) *(gpio+((g)/10)) &= ~(7<<(((g)%10)*3))
136 | #define OUT_GPIO(g) *(gpio+((g)/10)) |= (1<<(((g)%10)*3))
137 | #define SET_GPIO_ALT(g,a) *(gpio+(((g)/10))) |= (((a)<=3?(a)+4:(a)==4?3:2)<<(((g)%10)*3))
138 |
139 | #define GPIO_SET *(gpio+7) // sets bits which are 1 ignores bits which are 0
140 | #define GPIO_CLR *(gpio+10) // clears bits which are 1 ignores bits which are 0
141 | #define GPIO_GET *(gpio+13) // sets bits which are 1 ignores bits which are 0
142 |
143 | #define ACCESS(base) *(volatile int*)((int)allof7e+base-0x7e000000)
144 | #define SETBIT(base, bit) ACCESS(base) |= 1< 4095.0) || (divi < 1.0) )
474 | {
475 | fprintf(stderr, "freq_pi: requested frequency out of range, aborting.\n");
476 |
477 | exit(1);
478 | }
479 |
480 | if(divf > 4095.0)
481 | {
482 | fprintf(stderr, "freq_pi: requested frequency out of range, aborting.\n");
483 |
484 | exit(1);
485 | }
486 |
487 | ua = (0x5a << 24) + (divi << 12) + divf;
488 |
489 | ACCESS(CM_GP0DIV) = ua;
490 |
491 | if(verbose)
492 | {
493 | fprintf(stderr, "set_frequency: frequency set to %d\n", frequency);
494 | }
495 |
496 | return 1;
497 | } /* end function set_frequency */
498 |
499 |
500 |
501 |
502 | void print_usage()
503 | {
504 |
505 | fprintf(stderr,\
506 | "\nPanteltje freq_pi-%s\n\
507 | Usage:\nfreq_pic [-b begin_frequency] [-d step_delay] [-e end_frequency] [-f frequency] [-h] [-i frequency_increment] [-l] [-r] [-s scan_delay] [-q] [-v] [-w] [-y ppm_correction]\n\
508 | -b int begin frequency in sweep mode.\n\
509 | -d int delay in micro seconds between frequency steps in sweep mode, default 1.\n\
510 | -e int end frequency in sweep mode.\n\
511 | -f int frequency to output on GPIO_4 pin 7, on my revision 2 board from 130 kHz to 250 MHz,\n\
512 | phase noise is caused by divf (fractional part of divider) not being zero, use -v to show divf.\n\
513 | -h help (this help).\n\
514 | -i int frequency increment between steps in sweep mode, default 1 MHz.\n\
515 | -l loop mode, trigger output signals start sweep.\n\
516 | -r wait for low level on GPIO8 pin 24 in case -f -w.\n\
517 | -q switch output off and exit.\n\
518 | -s int delay between scans in us, default 1.\n\
519 | -v verbose.\n\
520 | -w wait for GPIO8 pin 24 to go high to start a scan.\n\
521 | -y float frequency correction in parts per million (ppm), positive or negative, for calibration, default 0.\n\
522 | \n",\
523 | PROGRAM_VERSION);
524 |
525 | fprintf(stderr,\
526 | "Note:\n\
527 | GPIO17 pin 11 is trigger output, positive, high during sweep, for example for scope.\n\n");
528 | fprintf(stderr,\
529 | "GPIO8 pin 24 is only initialized when the -w command line flag is used, else it can be used for other things.\n\n");
530 |
531 | fprintf(stderr,\
532 | "Example for 1 MHz, with +39.4 parts per million correction :\n\
533 | freq_pi -f 100000000 -y 39.4\n\
534 | \n\
535 | Example for a sweep from 1 MHz to 100 MHz step 1 MHz with 100 mS delay between steps:\n\
536 | freq_pi -b 1000000 -e 100000000 -i 1000000 -d 100000\n\
537 | \n\
538 | Use -v to see where you are, but this makes it slower than the speed specified with -d.\n\
539 | \n\
540 | Example for a repeated scan every second from 1 MHz to 100 MHz with 1 MHz increments and 10 mS delay between increments:\n\
541 | freq_pi freq_pi -b 1000000 -e 100000000 -i 1000000 -d 100000 -s 1000000 -l\n\
542 | \n\
543 | Control C exits.\n\
544 | freq_pi -q switches off output, then exits.\n\
545 | \n\
546 | ");
547 |
548 | } /* end function print_usage */
549 |
550 |
551 |
552 |
553 | int main(int argc, char **argv)
554 | {
555 | int a;
556 | uint32_t frequency = 0; // -Wall
557 | uint32_t frequency_increment;
558 | int step_delay;
559 | uint32_t begin_frequency;
560 | uint32_t end_frequency;
561 | int reverse_start_polarity_flag;
562 | int loop_mode_flag;
563 | int scan_delay;
564 | int exit_with_output_off_flag;
565 |
566 | /* defaults */
567 |
568 | verbose = 0;
569 | step_delay = 1;
570 | frequency_increment = 1000000;
571 | begin_frequency = 0;
572 | end_frequency = 0;
573 | wait_for_gpio8_flag = 0;
574 | reverse_start_polarity_flag = 0;
575 | loop_mode_flag = 0;
576 | scan_delay = 1;
577 | exit_with_output_off_flag = 0;
578 | pllo_frequency = PLL0_FREQUENCY;
579 | ppm_correction = 0.0;
580 |
581 | /* end defaults */
582 |
583 |
584 | /* proces any command line arguments */
585 | while(1)
586 | {
587 | a = getopt(argc, argv, "b:d:e:f:hi:lqs:vwry:");
588 | if(a == -1) break;
589 |
590 | switch(a)
591 | {
592 | case 'b': // begin_frequency
593 | begin_frequency = atoi(optarg);
594 | break;
595 | case 'd': // delay between frequency increments
596 | step_delay = atoi(optarg);
597 | break;
598 | case 'e': // end_frequency
599 | end_frequency = atoi(optarg);
600 | break;
601 | case 'f': // frequency
602 | a = atoi(optarg);
603 | frequency = a;
604 | break;
605 | case 'h': // help
606 | print_usage();
607 | exit(1);
608 | break;
609 | break;
610 | case 'i':// fequency increment in sweep mode
611 | frequency_increment = atoi(optarg);
612 | break;
613 | case 'l': // loop mode
614 | loop_mode_flag = 1;
615 | break;
616 | case 'v': // verbose
617 | verbose = 1 - verbose;
618 | break;
619 | case 'w': // wai tfor GPIO8 pin 24 to go high
620 | wait_for_gpio8_flag = 1;
621 | break;
622 | case 'r': // wait for low level in case -w
623 | reverse_start_polarity_flag = 1;
624 | break;
625 | case 'q': // switch of output
626 | exit_with_output_off_flag = 1;
627 | break;
628 | case 's': // scan delay
629 | scan_delay = atoi(optarg);
630 | break;
631 | case 'y': // ppm correction
632 | ppm_correction = atof(optarg);
633 | break;
634 | case -1:
635 | break;
636 | case '?':
637 | if (isprint(optopt) )
638 | {
639 | fprintf(stderr, "send_iq: unknown option `-%c'.\n", optopt);
640 | }
641 | else
642 | {
643 | fprintf(stderr, "freq_pi: unknown option character `\\x%x'.\n", optopt);
644 | }
645 | print_usage();
646 |
647 | exit(1);
648 | break;
649 | default:
650 | print_usage();
651 |
652 | exit(1);
653 | break;
654 | }/* end switch a */
655 | }/* end while getopt() */
656 |
657 | gpioHardwareRevision(); /* sets piModel, needed for peripherals address */
658 |
659 | setup_io();
660 |
661 | set_gpio_directions(); // start pin only
662 |
663 | /*
664 | From ducument BCM2835-ARM-Peripherals.pdf
665 | page 105
666 | 6.3 General Purpose GPIO Clocks
667 |
668 |
669 | The General Purpose clocks can be output to GPIO pins.
670 | They run from the peripherals clock sources and use clock generators with noise-shaping MASH dividers.
671 | These allow the GPIO clocks to be used to drive audio devices.
672 | The fractional divider operates by periodically dropping source clock pulses, therefore the output frequency will periodically switch between:
673 | source_frequency / DIVI, and source_frequency / (DIVI + 1)
674 |
675 | Jitter is therefore reduced by increasing the source clock frequency.
676 | In applications where jitter is a concern, the fastest available clock source should be used.
677 | The General Purpose clocks have MASH noise-shaping dividers which push this fractional divider jitter out of the audio band.
678 | MASH noise-shaping is incorporated to push the fractional divider jitter out of the audio band if required.
679 | The MASH can be programmed for 1, 2 or 3-stage filtering. MASH filter, the frequency is spread around the requested frequency and the user must ensure that the module is not exposed to frequencies higher than 25MHz.
680 | Also, the MASH filter imposes a low limit on the range of DIVI.
681 |
682 | MASH min DIVI min output freq average output freq max output freq
683 | 0 (int divide) 1 source / ( DIVI ) source / ( DIVI ) source / ( DIVI )
684 | 1 2 source / ( DIVI ) source / ( DIVI + DIVF / 1024 ) source / ( DIVI + 1 )
685 | 2 3 source / ( DIVI - 1 ) source / ( DIVI + DIVF / 1024 ) source / ( DIVI + 2 )
686 | 3 5 source / ( DIVI - 3 ) source / ( DIVI + DIVF / 1024 ) source / ( DIVI + 4 )
687 | Table 6-32 Effect of MASH Filter on Frequency
688 |
689 | The following example illustrates the spreading of output clock frequency resulting from the
690 | use of the MASH filter. Note that the spread is greater for lower divisors.
691 | PLL target min ave max
692 | freq freq freq freq freq
693 | (MHz) (MHz) MASH divisor DIVI DIVF (MHz) (MHz) (MHz) error
694 | 650 18.32 0 35.480 35 492 18.57 18.57 18.57 ok
695 | 650 18.32 1 35.480 35 492 18.06 18.32 18.57 ok
696 | 650 18.32 2 35.480 35 492 17.57 18.32 19.12 ok
697 | 650 18.32 3 35.480 35 492 16.67 18.32 20.31 ok
698 | 400 18.32 0 21.834 21 854 19.05 19.05 19.05 ok
699 | 400 18.32 1 21.834 21 854 18.18 18.32 19.05 ok
700 | 400 18.32 2 21.834 21 854 17.39 18.32 20.00 ok
701 | 400 18.32 3 21.834 21 854 16.00 18.32 22.22 ok
702 | 200 18.32 0 10.917 10 939 20.00 20.00 20.00 ok
703 | 200 18.32 1 10.917 10 939 18.18 18.32 20.00 ok
704 | 200 18.32 2 10.917 10 939 16.67 18.32 22.22 ok
705 | 200 18.32 3 10.917 10 939 14.29 18.32 28.57 error
706 | Table 6-33 Example of Frequency Spread when using MASH Filtering
707 |
708 |
709 | Operating Frequency
710 | The maximum operating frequency of the General Purpose clocks is ~125MHz at 1.2V but this will be reduced if the GPIO pins are heavily loaded or have a capacitive load.
711 |
712 |
713 | Register Definitions
714 | Clock Manager General Purpose Clocks Control (CM_GP0CTL, GP1CTL &
715 | GP2CTL)
716 | Address 0x 7e10 1070 CM_GP0CTL
717 | 0x 7e10 1078 CM_GP1CTL
718 | 0x 7e10 1080 CM_GP2CTL
719 | Bit Field Read/
720 | Description Reset
721 | Number Name Write
722 | 31-24 PASSWD Clock Manager password "5a" W 0
723 | 23-11 - Unused R 0
724 | 10-9 MASH MASH control R/W 0
725 | 0 = integer division
726 | 1 = 1-stage MASH (equivalent to non-MASH dividers)
727 | 2 = 2-stage MASH
728 | 3 = 3-stage MASH
729 | To avoid lock-ups and glitches do not change this
730 | control while BUSY=1 and do not change this control
731 | at the same time as asserting ENAB.
732 | 8 FLIP Invert the clock generator output R/W 0
733 | This is intended for use in test/debug only. Switching
734 | this control will generate an edge on the clock
735 | generator output. To avoid output glitches do not
736 | switch this control while BUSY=1.
737 | 7 BUSY Clock generator is running R 0
738 | Indicates the clock generator is running. To avoid
739 | glitches and lock-ups, clock sources and setups must
740 | not be changed while this flag is set.
741 | 6 - Unused R 0
742 | 5 KILL Kill the clock generator R/W 0
743 | 0 = no action
744 | 1 = stop and reset the clock generator
745 | This is intended for test/debug only. Using this control
746 | may cause a glitch on the clock generator output.
747 | 4 ENAB Enable the clock generator R/W 0
748 | This requests the clock to start or stop without
749 | glitches. The output clock will not stop immediately
750 | because the cycle must be allowed to complete to
751 | avoid glitches. The BUSY flag will go low when the
752 | final cycle is completed.
753 | 3-0 SRC Clock source R/W 0
754 | 0 = GND
755 | 1 = oscillator
756 | 2 = testdebug0
757 | 3 = testdebug1
758 | 4 = PLLA per
759 | 5 = PLLC per
760 | 6 = PLLD per
761 | 7 = HDMI auxiliary
762 | 8-15 = GND
763 | To avoid lock-ups and glitches do not change this
764 | control while BUSY=1 and do not change this control
765 | at the same time as asserting ENAB.
766 | 06 February 2012 Broadcom Europe Ltd. 406 Science Park Milton Road Cambridge CB4 0WW Page 107
767 | 2012 Broadcom Corporation. All rights reserved
768 |
769 |
770 | Clock Manager General Purpose Clock Divisors (CM_GP0DIV, CM_GP1DIV &
771 | CM_GP2DIV)
772 | Address 0x 7e10 1074 CM_GP0DIV
773 | 0x 7e10 107c CM_GP1DIV
774 | 0x 7e10 1084 CM_GP2DIV
775 |
776 | Bit Field Read/
777 | Description Reset
778 | Number Name Write
779 | 31-24 PASSWD Clock Manager password "5a" W 0
780 | 23-12 DIVI Integer part of divisor R/W 0
781 | This value has a minimum limit determined by the
782 | MASH setting. See text for details. To avoid lock-ups
783 | and glitches do not change this control while BUSY=1.
784 | 11-0 DIVF Fractional part of divisor R/W 0
785 | To avoid lock-ups and glitches do not change this
786 | control while BUSY=1.
787 | Table 6-35 General Purpose Clock Divisors
788 | */
789 |
790 |
791 |
792 |
793 | //struct GPCTL setupword = {6 /* clock source */, 1 /* enable */, 0 /* not kill */, 0 , 0, 1 /* 1 stage MASH (equivalent to no MASH */, 0x5a /* password */ };
794 |
795 | //ACCESS(CM_GP0CTL) = *((int*)&setupword);
796 |
797 |
798 | //ACCESS(CM_GP0DIV) = (0x5a << 24) + 0x4d72 + m
799 |
800 |
801 | /*
802 | clock sources are 650 MHz, 400 MHz, and 200 MHz
803 |
804 | So the lowest frequency we can make is 200,000,000 / 4095.4095 = 48,835.165323516 Hz
805 |
806 | But I get 61,043 Hz
807 |
808 | 4095.4095 * 61043 = 249,996,082.108499999 Hz....
809 |
810 | But for MASH 1,
811 | MASH min DIVI min output freq average output freq max output freq
812 | 0 (int divide) 1 source / ( DIVI ) source / ( DIVI ) source / ( DIVI )
813 | * 1 2 source / ( DIVI ) source / ( DIVI + DIVF / 1024 ) source / ( DIVI + 1 )
814 | 2 3 source / ( DIVI - 1 ) source / ( DIVI + DIVF / 1024 ) source / ( DIVI + 2 )
815 | 3 5 source / ( DIVI - 3 ) source / ( DIVI + DIVF / 1024 ) source / ( DIVI + 4 )
816 |
817 | 200,000,000 / (4095 = 48840.048840048
818 | 200,000,000 / (4095 + (4095/1024) ) = 48792.400011912
819 |
820 | So
821 | 61043 * (4095 + .3999023437) = 249995496.238766479 Hz, looks liike we have a 250 MHz clock.
822 |
823 | Lowest frequency then is 61,043 Hz,
824 | highest frequency then is 250,000,000 / 1 = 250,000,000 Hz
825 |
826 | mm looks like a 500 MHz clock to me...
827 | */
828 |
829 |
830 | int clock_source;
831 | /*
832 | Clock source
833 | 0 = GND
834 | 1 = oscillator
835 | 2 = testdebug0
836 | 3 = testdebug1
837 | 4 = PLLA per
838 | 5 = PLLC per
839 | 6 = PLLD per
840 | 7 = HDMI auxiliary
841 | 8-15 = GND
842 | */
843 |
844 | /* init hardware */
845 |
846 | if(exit_with_output_off_flag)
847 | {
848 | /* RF off */
849 | clock_source = 0; // ground
850 | start_rf_output(clock_source);
851 |
852 | fprintf(stderr, "freq_pi: output is off.\n");
853 |
854 | exit(0);
855 | }
856 |
857 | clock_source = 6; /* this GPIO_4 pin 7 allows only the PLLD clock as source, the other clock GPIO lines are not on a pin in revision 2 board, so we have to work with PLLD, and that seems to be 500 MHz */
858 | start_rf_output(clock_source);
859 |
860 | if(frequency) // if normal mode
861 | {
862 | if(begin_frequency)
863 | {
864 | print_usage();
865 |
866 | fprintf(stderr, "freq_pi: cannot use both normal and scan mode at the same time, aborting.\n");
867 |
868 | exit(1);
869 | }
870 |
871 | set_frequency(frequency);
872 |
873 | exit(0);
874 | }
875 |
876 | // test for scan mode
877 | if(! begin_frequency)
878 | {
879 | print_usage();
880 | fprintf(stderr, "freq_pi: no begin frequency specified, aborting.\n");
881 |
882 | exit(1);
883 | }
884 |
885 | if(! end_frequency)
886 | {
887 | print_usage();
888 | fprintf(stderr, "freq_pi: no end frequency specified, aborting.\n");
889 |
890 | exit(1);
891 | }
892 |
893 | if(end_frequency <= begin_frequency)
894 | {
895 | fprintf(stderr, "freq_pi: end_frequency must be > begin_frequency, aborting.\n");
896 |
897 | exit(1);
898 | }
899 |
900 | *(gpio + 10) = (1<= end_frequency) break;
937 | }
938 |
939 | /* trigger output low */
940 | *(gpio + 10) = (1<
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 | HF in
148 | VHF out
149 | G7CKF HF-to-RTL
150 | receive converter
151 | Rev 1.2
152 |
153 |
154 |
155 | <b>Resistors, Capacitors, Inductors</b><p>
156 | Based on the previous libraries:
157 | <ul>
158 | <li>r.lbr
159 | <li>cap.lbr
160 | <li>cap-fe.lbr
161 | <li>captant.lbr
162 | <li>polcap.lbr
163 | <li>ipc-smd.lbr
164 | </ul>
165 | All SMD packages are defined according to the IPC specifications and CECC<p>
166 | <author>Created by librarian@cadsoft.de</author><p>
167 | <p>
168 | for Electrolyt Capacitors see also :<p>
169 | www.bccomponents.com <p>
170 | www.panasonic.com<p>
171 | www.kemet.com<p>
172 | http://www.secc.co.jp/pdf/os_e/2004/e_os_all.pdf <b>(SANYO)</b>
173 | <p>
174 | for trimmer refence see : <u>www.electrospec-inc.com/cross_references/trimpotcrossref.asp</u><p>
175 |
176 | <table border=0 cellspacing=0 cellpadding=0 width="100%" cellpaddding=0>
177 | <tr valign="top">
178 |
179 | <! <td width="10"> </td>
180 | <td width="90%">
181 |
182 | <b><font color="#0000FF" size="4">TRIM-POT CROSS REFERENCE</font></b>
183 | <P>
184 | <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2>
185 | <TR>
186 | <TD COLSPAN=8>
187 | <FONT SIZE=3 FACE=ARIAL><B>RECTANGULAR MULTI-TURN</B></FONT>
188 | </TD>
189 | </TR>
190 | <TR>
191 | <TD ALIGN=CENTER>
192 | <B>
193 | <FONT SIZE=3 FACE=ARIAL color="#FF0000">BOURNS</FONT>
194 | </B>
195 | </TD>
196 | <TD ALIGN=CENTER>
197 | <B>
198 | <FONT SIZE=3 FACE=ARIAL color="#FF0000">BI TECH</FONT>
199 | </B>
200 | </TD>
201 | <TD ALIGN=CENTER>
202 | <B>
203 | <FONT SIZE=3 FACE=ARIAL color="#FF0000">DALE-VISHAY</FONT>
204 | </B>
205 | </TD>
206 | <TD ALIGN=CENTER>
207 | <B>
208 | <FONT SIZE=3 FACE=ARIAL color="#FF0000">PHILIPS/MEPCO</FONT>
209 | </B>
210 | </TD>
211 | <TD ALIGN=CENTER>
212 | <B>
213 | <FONT SIZE=3 FACE=ARIAL color="#FF0000">MURATA</FONT>
214 | </B>
215 | </TD>
216 | <TD ALIGN=CENTER>
217 | <B>
218 | <FONT SIZE=3 FACE=ARIAL color="#FF0000">PANASONIC</FONT>
219 | </B>
220 | </TD>
221 | <TD ALIGN=CENTER>
222 | <B>
223 | <FONT SIZE=3 FACE=ARIAL color="#FF0000">SPECTROL</FONT>
224 | </B>
225 | </TD>
226 | <TD ALIGN=CENTER>
227 | <B>
228 | <FONT SIZE=3 FACE=ARIAL color="#FF0000">MILSPEC</FONT>
229 | </B>
230 | </TD><TD> </TD>
231 | </TR>
232 | <TR>
233 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3 >
234 | 3005P<BR>
235 | 3006P<BR>
236 | 3006W<BR>
237 | 3006Y<BR>
238 | 3009P<BR>
239 | 3009W<BR>
240 | 3009Y<BR>
241 | 3057J<BR>
242 | 3057L<BR>
243 | 3057P<BR>
244 | 3057Y<BR>
245 | 3059J<BR>
246 | 3059L<BR>
247 | 3059P<BR>
248 | 3059Y<BR></FONT>
249 | </TD>
250 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
251 | -<BR>
252 | 89P<BR>
253 | 89W<BR>
254 | 89X<BR>
255 | 89PH<BR>
256 | 76P<BR>
257 | 89XH<BR>
258 | 78SLT<BR>
259 | 78L ALT<BR>
260 | 56P ALT<BR>
261 | 78P ALT<BR>
262 | T8S<BR>
263 | 78L<BR>
264 | 56P<BR>
265 | 78P<BR></FONT>
266 | </TD>
267 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
268 | -<BR>
269 | T18/784<BR>
270 | 783<BR>
271 | 781<BR>
272 | -<BR>
273 | -<BR>
274 | -<BR>
275 | 2199<BR>
276 | 1697/1897<BR>
277 | 1680/1880<BR>
278 | 2187<BR>
279 | -<BR>
280 | -<BR>
281 | -<BR>
282 | -<BR></FONT>
283 | </TD>
284 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
285 | -<BR>
286 | 8035EKP/CT20/RJ-20P<BR>
287 | -<BR>
288 | RJ-20X<BR>
289 | -<BR>
290 | -<BR>
291 | -<BR>
292 | 1211L<BR>
293 | 8012EKQ ALT<BR>
294 | 8012EKR ALT<BR>
295 | 1211P<BR>
296 | 8012EKJ<BR>
297 | 8012EKL<BR>
298 | 8012EKQ<BR>
299 | 8012EKR<BR></FONT>
300 | </TD>
301 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
302 | -<BR>
303 | 2101P<BR>
304 | 2101W<BR>
305 | 2101Y<BR>
306 | -<BR>
307 | -<BR>
308 | -<BR>
309 | -<BR>
310 | -<BR>
311 | -<BR>
312 | -<BR>
313 | -<BR>
314 | 2102L<BR>
315 | 2102S<BR>
316 | 2102Y<BR></FONT>
317 | </TD>
318 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
319 | -<BR>
320 | EVMCOG<BR>
321 | -<BR>
322 | -<BR>
323 | -<BR>
324 | -<BR>
325 | -<BR>
326 | -<BR>
327 | -<BR>
328 | -<BR>
329 | -<BR>
330 | -<BR>
331 | -<BR>
332 | -<BR>
333 | -<BR></FONT>
334 | </TD>
335 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
336 | -<BR>
337 | 43P<BR>
338 | 43W<BR>
339 | 43Y<BR>
340 | -<BR>
341 | -<BR>
342 | -<BR>
343 | -<BR>
344 | 40L<BR>
345 | 40P<BR>
346 | 40Y<BR>
347 | 70Y-T602<BR>
348 | 70L<BR>
349 | 70P<BR>
350 | 70Y<BR></FONT>
351 | </TD>
352 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
353 | -<BR>
354 | -<BR>
355 | -<BR>
356 | -<BR>
357 | -<BR>
358 | -<BR>
359 | -<BR>
360 | -<BR>
361 | RT/RTR12<BR>
362 | RT/RTR12<BR>
363 | RT/RTR12<BR>
364 | -<BR>
365 | RJ/RJR12<BR>
366 | RJ/RJR12<BR>
367 | RJ/RJR12<BR></FONT>
368 | </TD>
369 | </TR>
370 | <TR>
371 | <TD COLSPAN=8>
372 | </TD>
373 | </TR>
374 | <TR>
375 | <TD COLSPAN=8>
376 | <FONT SIZE=4 FACE=ARIAL><B>SQUARE MULTI-TURN</B></FONT>
377 | </TD>
378 | </TR>
379 | <TR>
380 | <TD ALIGN=CENTER>
381 | <FONT SIZE=3 FACE=ARIAL><B>BOURN</B></FONT>
382 | </TD>
383 | <TD ALIGN=CENTER>
384 | <FONT SIZE=3 FACE=ARIAL><B>BI TECH</B></FONT>
385 | </TD>
386 | <TD ALIGN=CENTER>
387 | <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT>
388 | </TD>
389 | <TD ALIGN=CENTER>
390 | <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT>
391 | </TD>
392 | <TD ALIGN=CENTER>
393 | <FONT SIZE=3 FACE=ARIAL><B>MURATA</B></FONT>
394 | </TD>
395 | <TD ALIGN=CENTER>
396 | <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT>
397 | </TD>
398 | <TD ALIGN=CENTER>
399 | <FONT SIZE=3 FACE=ARIAL><B>SPECTROL</B></FONT>
400 | </TD>
401 | <TD ALIGN=CENTER>
402 | <FONT SIZE=3 FACE=ARIAL><B>MILSPEC</B></FONT>
403 | </TD>
404 | </TR>
405 | <TR>
406 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
407 | 3250L<BR>
408 | 3250P<BR>
409 | 3250W<BR>
410 | 3250X<BR>
411 | 3252P<BR>
412 | 3252W<BR>
413 | 3252X<BR>
414 | 3260P<BR>
415 | 3260W<BR>
416 | 3260X<BR>
417 | 3262P<BR>
418 | 3262W<BR>
419 | 3262X<BR>
420 | 3266P<BR>
421 | 3266W<BR>
422 | 3266X<BR>
423 | 3290H<BR>
424 | 3290P<BR>
425 | 3290W<BR>
426 | 3292P<BR>
427 | 3292W<BR>
428 | 3292X<BR>
429 | 3296P<BR>
430 | 3296W<BR>
431 | 3296X<BR>
432 | 3296Y<BR>
433 | 3296Z<BR>
434 | 3299P<BR>
435 | 3299W<BR>
436 | 3299X<BR>
437 | 3299Y<BR>
438 | 3299Z<BR></FONT>
439 | </TD>
440 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
441 | -<BR>
442 | 66P ALT<BR>
443 | 66W ALT<BR>
444 | 66X ALT<BR>
445 | 66P ALT<BR>
446 | 66W ALT<BR>
447 | 66X ALT<BR>
448 | -<BR>
449 | 64W ALT<BR>
450 | -<BR>
451 | 64P ALT<BR>
452 | 64W ALT<BR>
453 | 64X ALT<BR>
454 | 64P<BR>
455 | 64W<BR>
456 | 64X<BR>
457 | 66X ALT<BR>
458 | 66P ALT<BR>
459 | 66W ALT<BR>
460 | 66P<BR>
461 | 66W<BR>
462 | 66X<BR>
463 | 67P<BR>
464 | 67W<BR>
465 | 67X<BR>
466 | 67Y<BR>
467 | 67Z<BR>
468 | 68P<BR>
469 | 68W<BR>
470 | 68X<BR>
471 | 67Y ALT<BR>
472 | 67Z ALT<BR></FONT>
473 | </TD>
474 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
475 | 5050<BR>
476 | 5091<BR>
477 | 5080<BR>
478 | 5087<BR>
479 | -<BR>
480 | -<BR>
481 | -<BR>
482 | -<BR>
483 | -<BR>
484 | -<BR>
485 | -<BR>
486 | T63YB<BR>
487 | T63XB<BR>
488 | -<BR>
489 | -<BR>
490 | -<BR>
491 | 5887<BR>
492 | 5891<BR>
493 | 5880<BR>
494 | -<BR>
495 | -<BR>
496 | -<BR>
497 | T93Z<BR>
498 | T93YA<BR>
499 | T93XA<BR>
500 | T93YB<BR>
501 | T93XB<BR>
502 | -<BR>
503 | -<BR>
504 | -<BR>
505 | -<BR>
506 | -<BR></FONT>
507 | </TD>
508 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
509 | -<BR>
510 | -<BR>
511 | -<BR>
512 | -<BR>
513 | -<BR>
514 | -<BR>
515 | -<BR>
516 | -<BR>
517 | -<BR>
518 | -<BR>
519 | 8026EKP<BR>
520 | 8026EKW<BR>
521 | 8026EKM<BR>
522 | 8026EKP<BR>
523 | 8026EKB<BR>
524 | 8026EKM<BR>
525 | 1309X<BR>
526 | 1309P<BR>
527 | 1309W<BR>
528 | 8024EKP<BR>
529 | 8024EKW<BR>
530 | 8024EKN<BR>
531 | RJ-9P/CT9P<BR>
532 | RJ-9W<BR>
533 | RJ-9X<BR>
534 | -<BR>
535 | -<BR>
536 | -<BR>
537 | -<BR>
538 | -<BR>
539 | -<BR>
540 | -<BR></FONT>
541 | </TD>
542 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
543 | -<BR>
544 | -<BR>
545 | -<BR>
546 | -<BR>
547 | -<BR>
548 | -<BR>
549 | -<BR>
550 | -<BR>
551 | -<BR>
552 | -<BR>
553 | 3103P<BR>
554 | 3103Y<BR>
555 | 3103Z<BR>
556 | 3103P<BR>
557 | 3103Y<BR>
558 | 3103Z<BR>
559 | -<BR>
560 | -<BR>
561 | -<BR>
562 | -<BR>
563 | -<BR>
564 | -<BR>
565 | 3105P/3106P<BR>
566 | 3105W/3106W<BR>
567 | 3105X/3106X<BR>
568 | 3105Y/3106Y<BR>
569 | 3105Z/3105Z<BR>
570 | 3102P<BR>
571 | 3102W<BR>
572 | 3102X<BR>
573 | 3102Y<BR>
574 | 3102Z<BR></FONT>
575 | </TD>
576 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
577 | -<BR>
578 | -<BR>
579 | -<BR>
580 | -<BR>
581 | -<BR>
582 | -<BR>
583 | -<BR>
584 | -<BR>
585 | -<BR>
586 | -<BR>
587 | -<BR>
588 | -<BR>
589 | -<BR>
590 | -<BR>
591 | -<BR>
592 | -<BR>
593 | -<BR>
594 | -<BR>
595 | -<BR>
596 | -<BR>
597 | -<BR>
598 | -<BR>
599 | EVMCBG<BR>
600 | EVMCCG<BR>
601 | -<BR>
602 | -<BR>
603 | -<BR>
604 | -<BR>
605 | -<BR>
606 | -<BR>
607 | -<BR>
608 | -<BR></FONT>
609 | </TD>
610 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
611 | 55-1-X<BR>
612 | 55-4-X<BR>
613 | 55-3-X<BR>
614 | 55-2-X<BR>
615 | -<BR>
616 | -<BR>
617 | -<BR>
618 | -<BR>
619 | -<BR>
620 | -<BR>
621 | -<BR>
622 | -<BR>
623 | -<BR>
624 | -<BR>
625 | -<BR>
626 | -<BR>
627 | 50-2-X<BR>
628 | 50-4-X<BR>
629 | 50-3-X<BR>
630 | -<BR>
631 | -<BR>
632 | -<BR>
633 | 64P<BR>
634 | 64W<BR>
635 | 64X<BR>
636 | 64Y<BR>
637 | 64Z<BR>
638 | -<BR>
639 | -<BR>
640 | -<BR>
641 | -<BR>
642 | -<BR></FONT>
643 | </TD>
644 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
645 | RT/RTR22<BR>
646 | RT/RTR22<BR>
647 | RT/RTR22<BR>
648 | RT/RTR22<BR>
649 | RJ/RJR22<BR>
650 | RJ/RJR22<BR>
651 | RJ/RJR22<BR>
652 | RT/RTR26<BR>
653 | RT/RTR26<BR>
654 | RT/RTR26<BR>
655 | RJ/RJR26<BR>
656 | RJ/RJR26<BR>
657 | RJ/RJR26<BR>
658 | RJ/RJR26<BR>
659 | RJ/RJR26<BR>
660 | RJ/RJR26<BR>
661 | RT/RTR24<BR>
662 | RT/RTR24<BR>
663 | RT/RTR24<BR>
664 | RJ/RJR24<BR>
665 | RJ/RJR24<BR>
666 | RJ/RJR24<BR>
667 | RJ/RJR24<BR>
668 | RJ/RJR24<BR>
669 | RJ/RJR24<BR>
670 | -<BR>
671 | -<BR>
672 | -<BR>
673 | -<BR>
674 | -<BR>
675 | -<BR>
676 | -<BR></FONT>
677 | </TD>
678 | </TR>
679 | <TR>
680 | <TD COLSPAN=8>
681 | </TD>
682 | </TR>
683 | <TR>
684 | <TD COLSPAN=8>
685 | <FONT SIZE=4 FACE=ARIAL><B>SINGLE TURN</B></FONT>
686 | </TD>
687 | </TR>
688 | <TR>
689 | <TD ALIGN=CENTER>
690 | <FONT SIZE=3 FACE=ARIAL><B>BOURN</B></FONT>
691 | </TD>
692 | <TD ALIGN=CENTER>
693 | <FONT SIZE=3 FACE=ARIAL><B>BI TECH</B></FONT>
694 | </TD>
695 | <TD ALIGN=CENTER>
696 | <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT>
697 | </TD>
698 | <TD ALIGN=CENTER>
699 | <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT>
700 | </TD>
701 | <TD ALIGN=CENTER>
702 | <FONT SIZE=3 FACE=ARIAL><B>MURATA</B></FONT>
703 | </TD>
704 | <TD ALIGN=CENTER>
705 | <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT>
706 | </TD>
707 | <TD ALIGN=CENTER>
708 | <FONT SIZE=3 FACE=ARIAL><B>SPECTROL</B></FONT>
709 | </TD>
710 | <TD ALIGN=CENTER>
711 | <FONT SIZE=3 FACE=ARIAL><B>MILSPEC</B></FONT>
712 | </TD>
713 | </TR>
714 | <TR>
715 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
716 | 3323P<BR>
717 | 3323S<BR>
718 | 3323W<BR>
719 | 3329H<BR>
720 | 3329P<BR>
721 | 3329W<BR>
722 | 3339H<BR>
723 | 3339P<BR>
724 | 3339W<BR>
725 | 3352E<BR>
726 | 3352H<BR>
727 | 3352K<BR>
728 | 3352P<BR>
729 | 3352T<BR>
730 | 3352V<BR>
731 | 3352W<BR>
732 | 3362H<BR>
733 | 3362M<BR>
734 | 3362P<BR>
735 | 3362R<BR>
736 | 3362S<BR>
737 | 3362U<BR>
738 | 3362W<BR>
739 | 3362X<BR>
740 | 3386B<BR>
741 | 3386C<BR>
742 | 3386F<BR>
743 | 3386H<BR>
744 | 3386K<BR>
745 | 3386M<BR>
746 | 3386P<BR>
747 | 3386S<BR>
748 | 3386W<BR>
749 | 3386X<BR></FONT>
750 | </TD>
751 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
752 | 25P<BR>
753 | 25S<BR>
754 | 25RX<BR>
755 | 82P<BR>
756 | 82M<BR>
757 | 82PA<BR>
758 | -<BR>
759 | -<BR>
760 | -<BR>
761 | 91E<BR>
762 | 91X<BR>
763 | 91T<BR>
764 | 91B<BR>
765 | 91A<BR>
766 | 91V<BR>
767 | 91W<BR>
768 | 25W<BR>
769 | 25V<BR>
770 | 25P<BR>
771 | -<BR>
772 | 25S<BR>
773 | 25U<BR>
774 | 25RX<BR>
775 | 25X<BR>
776 | 72XW<BR>
777 | 72XL<BR>
778 | 72PM<BR>
779 | 72RX<BR>
780 | -<BR>
781 | 72PX<BR>
782 | 72P<BR>
783 | 72RXW<BR>
784 | 72RXL<BR>
785 | 72X<BR></FONT>
786 | </TD>
787 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
788 | -<BR>
789 | -<BR>
790 | -<BR>
791 | T7YB<BR>
792 | T7YA<BR>
793 | -<BR>
794 | -<BR>
795 | -<BR>
796 | -<BR>
797 | -<BR>
798 | -<BR>
799 | -<BR>
800 | -<BR>
801 | -<BR>
802 | -<BR>
803 | -<BR>
804 | -<BR>
805 | TXD<BR>
806 | TYA<BR>
807 | TYP<BR>
808 | -<BR>
809 | TYD<BR>
810 | TX<BR>
811 | -<BR>
812 | 150SX<BR>
813 | 100SX<BR>
814 | 102T<BR>
815 | 101S<BR>
816 | 190T<BR>
817 | 150TX<BR>
818 | 101<BR>
819 | -<BR>
820 | -<BR>
821 | 101SX<BR></FONT>
822 | </TD>
823 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
824 | ET6P<BR>
825 | ET6S<BR>
826 | ET6X<BR>
827 | RJ-6W/8014EMW<BR>
828 | RJ-6P/8014EMP<BR>
829 | RJ-6X/8014EMX<BR>
830 | TM7W<BR>
831 | TM7P<BR>
832 | TM7X<BR>
833 | -<BR>
834 | 8017SMS<BR>
835 | -<BR>
836 | 8017SMB<BR>
837 | 8017SMA<BR>
838 | -<BR>
839 | -<BR>
840 | CT-6W<BR>
841 | CT-6H<BR>
842 | CT-6P<BR>
843 | CT-6R<BR>
844 | -<BR>
845 | CT-6V<BR>
846 | CT-6X<BR>
847 | -<BR>
848 | -<BR>
849 | 8038EKV<BR>
850 | -<BR>
851 | 8038EKX<BR>
852 | -<BR>
853 | -<BR>
854 | 8038EKP<BR>
855 | 8038EKZ<BR>
856 | 8038EKW<BR>
857 | -<BR></FONT>
858 | </TD>
859 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
860 | -<BR>
861 | -<BR>
862 | -<BR>
863 | 3321H<BR>
864 | 3321P<BR>
865 | 3321N<BR>
866 | 1102H<BR>
867 | 1102P<BR>
868 | 1102T<BR>
869 | RVA0911V304A<BR>
870 | -<BR>
871 | RVA0911H413A<BR>
872 | RVG0707V100A<BR>
873 | RVA0607V(H)306A<BR>
874 | RVA1214H213A<BR>
875 | -<BR>
876 | -<BR>
877 | -<BR>
878 | -<BR>
879 | -<BR>
880 | -<BR>
881 | -<BR>
882 | -<BR>
883 | -<BR>
884 | 3104B<BR>
885 | 3104C<BR>
886 | 3104F<BR>
887 | 3104H<BR>
888 | -<BR>
889 | 3104M<BR>
890 | 3104P<BR>
891 | 3104S<BR>
892 | 3104W<BR>
893 | 3104X<BR></FONT>
894 | </TD>
895 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
896 | EVMQ0G<BR>
897 | EVMQIG<BR>
898 | EVMQ3G<BR>
899 | EVMS0G<BR>
900 | EVMQ0G<BR>
901 | EVMG0G<BR>
902 | -<BR>
903 | -<BR>
904 | -<BR>
905 | EVMK4GA00B<BR>
906 | EVM30GA00B<BR>
907 | EVMK0GA00B<BR>
908 | EVM38GA00B<BR>
909 | EVMB6<BR>
910 | EVLQ0<BR>
911 | -<BR>
912 | EVMMSG<BR>
913 | EVMMBG<BR>
914 | EVMMAG<BR>
915 | -<BR>
916 | -<BR>
917 | EVMMCS<BR>
918 | -<BR>
919 | -<BR>
920 | -<BR>
921 | -<BR>
922 | -<BR>
923 | EVMM1<BR>
924 | -<BR>
925 | -<BR>
926 | EVMM0<BR>
927 | -<BR>
928 | -<BR>
929 | EVMM3<BR></FONT>
930 | </TD>
931 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
932 | -<BR>
933 | -<BR>
934 | -<BR>
935 | 62-3-1<BR>
936 | 62-1-2<BR>
937 | -<BR>
938 | -<BR>
939 | -<BR>
940 | -<BR>
941 | -<BR>
942 | -<BR>
943 | -<BR>
944 | -<BR>
945 | -<BR>
946 | -<BR>
947 | -<BR>
948 | 67R<BR>
949 | -<BR>
950 | 67P<BR>
951 | -<BR>
952 | -<BR>
953 | -<BR>
954 | -<BR>
955 | 67X<BR>
956 | 63V<BR>
957 | 63S<BR>
958 | 63M<BR>
959 | -<BR>
960 | -<BR>
961 | 63H<BR>
962 | 63P<BR>
963 | -<BR>
964 | -<BR>
965 | 63X<BR></FONT>
966 | </TD>
967 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
968 | -<BR>
969 | -<BR>
970 | -<BR>
971 | RJ/RJR50<BR>
972 | RJ/RJR50<BR>
973 | RJ/RJR50<BR>
974 | -<BR>
975 | -<BR>
976 | -<BR>
977 | -<BR>
978 | -<BR>
979 | -<BR>
980 | -<BR>
981 | -<BR>
982 | -<BR>
983 | -<BR>
984 | -<BR>
985 | -<BR>
986 | -<BR>
987 | -<BR>
988 | -<BR>
989 | -<BR>
990 | -<BR>
991 | -<BR>
992 | -<BR>
993 | -<BR>
994 | -<BR>
995 | -<BR>
996 | -<BR>
997 | -<BR>
998 | -<BR>
999 | -<BR>
1000 | -<BR>
1001 | -<BR></FONT>
1002 | </TD>
1003 | </TR>
1004 | </TABLE>
1005 | <P> <P>
1006 | <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=3>
1007 | <TR>
1008 | <TD COLSPAN=7>
1009 | <FONT color="#0000FF" SIZE=4 FACE=ARIAL><B>SMD TRIM-POT CROSS REFERENCE</B></FONT>
1010 | <P>
1011 | <FONT SIZE=4 FACE=ARIAL><B>MULTI-TURN</B></FONT>
1012 | </TD>
1013 | </TR>
1014 | <TR>
1015 | <TD>
1016 | <FONT SIZE=3 FACE=ARIAL><B>BOURNS</B></FONT>
1017 | </TD>
1018 | <TD>
1019 | <FONT SIZE=3 FACE=ARIAL><B>BI TECH</B></FONT>
1020 | </TD>
1021 | <TD>
1022 | <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT>
1023 | </TD>
1024 | <TD>
1025 | <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT>
1026 | </TD>
1027 | <TD>
1028 | <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT>
1029 | </TD>
1030 | <TD>
1031 | <FONT SIZE=3 FACE=ARIAL><B>TOCOS</B></FONT>
1032 | </TD>
1033 | <TD>
1034 | <FONT SIZE=3 FACE=ARIAL><B>AUX/KYOCERA</B></FONT>
1035 | </TD>
1036 | </TR>
1037 | <TR>
1038 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
1039 | 3224G<BR>
1040 | 3224J<BR>
1041 | 3224W<BR>
1042 | 3269P<BR>
1043 | 3269W<BR>
1044 | 3269X<BR></FONT>
1045 | </TD>
1046 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
1047 | 44G<BR>
1048 | 44J<BR>
1049 | 44W<BR>
1050 | 84P<BR>
1051 | 84W<BR>
1052 | 84X<BR></FONT>
1053 | </TD>
1054 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
1055 | -<BR>
1056 | -<BR>
1057 | -<BR>
1058 | ST63Z<BR>
1059 | ST63Y<BR>
1060 | -<BR></FONT>
1061 | </TD>
1062 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
1063 | -<BR>
1064 | -<BR>
1065 | -<BR>
1066 | ST5P<BR>
1067 | ST5W<BR>
1068 | ST5X<BR></FONT>
1069 | </TD>
1070 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
1071 | -<BR>
1072 | -<BR>
1073 | -<BR>
1074 | -<BR>
1075 | -<BR>
1076 | -<BR></FONT>
1077 | </TD>
1078 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
1079 | -<BR>
1080 | -<BR>
1081 | -<BR>
1082 | -<BR>
1083 | -<BR>
1084 | -<BR></FONT>
1085 | </TD>
1086 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
1087 | -<BR>
1088 | -<BR>
1089 | -<BR>
1090 | -<BR>
1091 | -<BR>
1092 | -<BR></FONT>
1093 | </TD>
1094 | </TR>
1095 | <TR>
1096 | <TD COLSPAN=7>
1097 | </TD>
1098 | </TR>
1099 | <TR>
1100 | <TD COLSPAN=7>
1101 | <FONT SIZE=4 FACE=ARIAL><B>SINGLE TURN</B></FONT>
1102 | </TD>
1103 | </TR>
1104 | <TR>
1105 | <TD>
1106 | <FONT SIZE=3 FACE=ARIAL><B>BOURNS</B></FONT>
1107 | </TD>
1108 | <TD>
1109 | <FONT SIZE=3 FACE=ARIAL><B>BI TECH</B></FONT>
1110 | </TD>
1111 | <TD>
1112 | <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT>
1113 | </TD>
1114 | <TD>
1115 | <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT>
1116 | </TD>
1117 | <TD>
1118 | <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT>
1119 | </TD>
1120 | <TD>
1121 | <FONT SIZE=3 FACE=ARIAL><B>TOCOS</B></FONT>
1122 | </TD>
1123 | <TD>
1124 | <FONT SIZE=3 FACE=ARIAL><B>AUX/KYOCERA</B></FONT>
1125 | </TD>
1126 | </TR>
1127 | <TR>
1128 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
1129 | 3314G<BR>
1130 | 3314J<BR>
1131 | 3364A/B<BR>
1132 | 3364C/D<BR>
1133 | 3364W/X<BR>
1134 | 3313G<BR>
1135 | 3313J<BR></FONT>
1136 | </TD>
1137 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
1138 | 23B<BR>
1139 | 23A<BR>
1140 | 21X<BR>
1141 | 21W<BR>
1142 | -<BR>
1143 | 22B<BR>
1144 | 22A<BR></FONT>
1145 | </TD>
1146 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
1147 | ST5YL/ST53YL<BR>
1148 | ST5YJ/5T53YJ<BR>
1149 | ST-23A<BR>
1150 | ST-22B<BR>
1151 | ST-22<BR>
1152 | -<BR>
1153 | -<BR></FONT>
1154 | </TD>
1155 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
1156 | ST-4B<BR>
1157 | ST-4A<BR>
1158 | -<BR>
1159 | -<BR>
1160 | -<BR>
1161 | ST-3B<BR>
1162 | ST-3A<BR></FONT>
1163 | </TD>
1164 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
1165 | -<BR>
1166 | EVM-6YS<BR>
1167 | EVM-1E<BR>
1168 | EVM-1G<BR>
1169 | EVM-1D<BR>
1170 | -<BR>
1171 | -<BR></FONT>
1172 | </TD>
1173 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
1174 | G4B<BR>
1175 | G4A<BR>
1176 | TR04-3S1<BR>
1177 | TRG04-2S1<BR>
1178 | -<BR>
1179 | -<BR>
1180 | -<BR></FONT>
1181 | </TD>
1182 | <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3>
1183 | -<BR>
1184 | -<BR>
1185 | DVR-43A<BR>
1186 | CVR-42C<BR>
1187 | CVR-42A/C<BR>
1188 | -<BR>
1189 | -<BR></FONT>
1190 | </TD>
1191 | </TR>
1192 | </TABLE>
1193 | <P>
1194 | <FONT SIZE=4 FACE=ARIAL><B>ALT = ALTERNATE</B></FONT>
1195 | <P>
1196 |
1197 |
1198 | <P>
1199 | </td>
1200 | </tr>
1201 | </table>
1202 |
1203 |
1204 | <b>CAPACITOR</b><p>
1205 |
1206 |
1207 |
1208 |
1209 |
1210 |
1211 |
1212 |
1213 | >NAME
1214 | >VALUE
1215 |
1216 |
1217 |
1218 |
1219 |
1220 | <b>Panasonic Aluminium Electrolytic Capacitor VS-Serie Package B</b>
1221 |
1222 |
1223 |
1224 |
1225 |
1226 |
1227 |
1228 |
1229 |
1230 |
1231 |
1232 |
1233 |
1234 |
1235 |
1236 |
1237 |
1238 |
1239 | >NAME
1240 | >VALUE
1241 |
1242 |
1243 |
1244 |
1245 |
1246 |
1247 |
1248 |
1249 |
1250 |
1251 |
1252 |
1253 |
1254 | <b>RESISTOR</b><p>
1255 |
1256 |
1257 |
1258 |
1259 |
1260 |
1261 |
1262 |
1263 | >NAME
1264 | >VALUE
1265 |
1266 |
1267 |
1268 |
1269 |
1270 |
1271 |
1272 | <b>CMOS Logic Devices, 4000 Series</b><p>
1273 | Based on the following sources:
1274 | <ul>
1275 | <li>Motorola <i>CMOS LOGIC DATA</i>; book, 02/88, DL131 REV 1
1276 | <li>http://www.elexp.com
1277 | <li>http://www.intersil.com
1278 | <li>http://www.ls3c.com.tw/product/1/COMOS.html
1279 | </ul>
1280 | <author>Created by librarian@cadsoft.de</author>
1281 |
1282 |
1283 | <b>Small Outline package</b> 150 mil
1284 |
1285 |
1286 |
1287 |
1288 |
1289 |
1290 |
1291 |
1292 |
1293 |
1294 |
1295 |
1296 |
1297 |
1298 |
1299 |
1300 |
1301 |
1302 |
1303 |
1304 |
1305 |
1306 |
1307 |
1308 |
1309 |
1310 |
1311 |
1312 | >VALUE
1313 | >NAME
1314 |
1315 |
1316 |
1317 |
1318 |
1319 |
1320 |
1321 |
1322 |
1323 |
1324 |
1325 |
1326 |
1327 |
1328 |
1329 |
1330 |
1331 |
1332 |
1333 |
1334 | <h3>SparkFun Electronics' preferred foot prints</h3>
1335 | In this library you'll find connectors and sockets- basically anything that can be plugged into or onto.<br><br>
1336 | We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com.
1337 | <br><br>
1338 | <b>Licensing:</b> Creative Commons ShareAlike 4.0 International - https://creativecommons.org/licenses/by-sa/4.0/
1339 | <br><br>
1340 | You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage.
1341 |
1342 |
1343 |
1344 |
1345 |
1346 |
1347 |
1348 |
1349 |
1350 |
1351 |
1352 |
1353 |
1354 |
1355 |
1356 |
1357 |
1358 |
1359 |
1360 |
1361 |
1362 |
1363 |
1364 | >NAME
1365 | PCB Edge
1366 |
1367 |
1368 |
1369 |
1370 |
1371 |
1372 |
1373 |
1374 |
1375 |
1376 |
1377 |
1378 | <b>SMA Antenna Connector</b><p>
1379 | This is a footprint for an edge mount RF antenna. Works pretty well with SMA type connectors but may also work with other edge mount RF connectors. Keep in mind, these edge mount connectors assume you are using a 0.062" PCB thickness.
1380 |
1381 |
1382 |
1383 |
1384 |
1385 |
1386 |
1387 |
1388 |
1389 | <b>Crystals and Oscillators</b><p>
1390 | <author>Created by IQD Frequency Products</author>
1391 |
1392 |
1393 | <b>IQD Frequency Products SMD Package</b>
1394 |
1395 |
1396 |
1397 |
1398 | >NAME
1399 | >VALUE
1400 |
1401 |
1402 |
1403 |
1404 |
1405 |
1406 |
1407 |
1408 |
1409 |
1410 |
1411 | <b>HALO ELECTRONIC, INC.</b><p>
1412 | www.haloelectronics.com<p>
1413 | <author>Created by librarian@cadsoft.de</author>
1414 |
1415 |
1416 | <b>E-Ultra (TM) 10/100BASE-TX SOIC-16 Fast Ethernet Magnetic Modules</b><p>
1417 | Source: www.haloelectronics.com .. e-ultra.pdf
1418 |
1419 |
1420 |
1421 |
1422 |
1423 |
1424 |
1425 |
1426 |
1427 |
1428 |
1429 |
1430 |
1431 |
1432 |
1433 |
1434 |
1435 |
1436 |
1437 |
1438 |
1439 | >NAME
1440 | >VALUE
1441 |
1442 |
1443 |
1444 |
1445 |
1446 |
1447 |
1448 |
1449 |
1450 |
1451 |
1452 |
1453 |
1454 |
1455 |
1456 |
1457 |
1458 |
1459 |
1460 |
1461 |
1462 |
1463 | <b>RESISTOR</b>
1464 |
1465 |
1466 |
1467 |
1468 |
1469 |
1470 |
1471 |
1472 | >NAME
1473 | >VALUE
1474 |
1475 |
1476 |
1477 |
1478 |
1479 |
1480 |
1481 |
1482 |
1483 |
1484 |
1485 |
1486 |
1487 |
1488 |
1489 |
1490 | <b>EAGLE Design Rules</b>
1491 | <p>
1492 | Die Standard-Design-Rules sind so gewählt, dass sie für
1493 | die meisten Anwendungen passen. Sollte ihre Platine
1494 | besondere Anforderungen haben, treffen Sie die erforderlichen
1495 | Einstellungen hier und speichern die Design Rules unter
1496 | einem neuen Namen ab.
1497 | <b>Laen's PCB Order Design Rules</b>
1498 | <p>
1499 | Please make sure your boards conform to these design rules.
1500 |
1501 |
1502 |
1503 |
1504 |
1505 |
1506 |
1507 |
1508 |
1509 |
1510 |
1511 |
1512 |
1513 |
1514 |
1515 |
1516 |
1517 |
1518 |
1519 |
1520 |
1521 |
1522 |
1523 |
1524 |
1525 |
1526 |
1527 |
1528 |
1529 |
1530 |
1531 |
1532 |
1533 |
1534 |
1535 |
1536 |
1537 |
1538 |
1539 |
1540 |
1541 |
1542 |
1543 |
1544 |
1545 |
1546 |
1547 |
1548 |
1549 |
1550 |
1551 |
1552 |
1553 |
1554 |
1555 |
1556 |
1557 |
1558 |
1559 |
1560 |
1561 |
1562 |
1563 |
1564 |
1565 |
1566 |
1567 |
1568 |
1569 |
1570 |
1571 |
1572 |
1573 |
1574 |
1575 |
1576 |
1577 |
1578 |
1579 |
1580 |
1581 |
1582 |
1583 |
1584 |
1585 |
1586 |
1587 |
1588 |
1589 |
1590 |
1591 |
1592 |
1593 |
1594 |
1595 |
1596 |
1597 |
1598 |
1599 |
1600 |
1601 |
1602 |
1603 |
1604 |
1605 |
1606 |
1607 |
1608 |
1609 |
1610 |
1611 |
1612 |
1613 |
1614 |
1615 |
1616 |
1617 |
1618 |
1619 |
1620 |
1621 |
1622 |
1623 |
1624 |
1625 |
1626 |
1627 |
1628 |
1629 |
1630 |
1631 |
1632 |
1633 |
1634 |
1635 |
1636 |
1637 |
1638 |
1639 |
1640 |
1641 |
1642 |
1643 |
1644 |
1645 |
1646 |
1647 |
1648 |
1649 |
1650 |
1651 |
1652 |
1653 |
1654 |
1655 |
1656 |
1657 |
1658 |
1659 |
1660 |
1661 |
1662 |
1663 |
1664 |
1665 |
1666 |
1667 |
1668 |
1669 |
1670 |
1671 |
1672 |
1673 |
1674 |
1675 |
1676 |
1677 |
1678 |
1679 |
1680 |
1681 |
1682 |
1683 |
1684 |
1685 |
1686 |
1687 |
1688 |
1689 |
1690 |
1691 |
1692 |
1693 |
1694 |
1695 |
1696 |
1697 |
1698 |
1699 |
1700 |
1701 |
1702 |
1703 |
1704 |
1705 |
1706 |
1707 |
1708 |
1709 |
1710 |
1711 |
1712 |
1713 |
1714 |
1715 |
1716 |
1717 |
1718 |
1719 |
1720 |
1721 |
1722 |
1723 |
1724 |
1725 |
1726 |
1727 |
1728 |
1729 |
1730 |
1731 |
1732 |
1733 |
1734 |
1735 |
1736 |
1737 |
1738 |
1739 |
1740 |
1741 |
1742 |
1743 |
1744 |
1745 |
1746 |
1747 |
1748 |
1749 |
1750 |
1751 |
1752 |
1753 |
1754 |
1755 |
1756 |
1757 |
1758 |
1759 |
1760 |
1761 |
1762 |
1763 |
1764 |
1765 |
1766 |
1767 |
1768 |
1769 |
1770 |
1771 |
1772 |
1773 |
1774 |
1775 |
1776 |
1777 |
1778 |
1779 |
1780 |
1781 |
1782 |
1783 |
1784 |
1785 |
1786 |
1787 |
1788 |
1789 |
1790 |
1791 |
1792 |
1793 |
1794 |
1795 |
1796 |
1797 |
1798 |
1799 |
1800 |
1801 |
1802 |
1803 |
1804 |
1805 |
1806 |
1807 |
1808 |
1809 |
1810 |
1811 |
1812 |
1813 |
1814 |
1815 |
1816 |
1817 |
1818 |
1819 |
1820 |
1821 |
1822 |
1823 |
1824 |
1825 |
1826 |
1827 |
1828 |
1829 |
1830 |
1831 |
1832 |
1833 |
1834 |
1835 |
1836 |
1837 |
1838 |
1839 |
1840 |
1841 |
1842 |
1843 |
1844 |
1845 |
1846 |
1847 |
1848 |
1849 |
1850 |
1851 |
1852 |
1853 |
1854 |
1855 |
1856 |
1857 |
1858 |
1859 |
1860 |
1861 |
1862 |
1863 |
1864 |
1865 |
1866 |
1867 |
1868 |
1869 |
1870 |
1871 |
1872 |
1873 |
1874 |
1875 |
1876 |
1877 |
1878 |
1879 |
1880 |
1881 |
1882 |
1883 |
1884 |
1885 |
1886 |
1887 |
1888 |
1889 |
1890 |
1891 |
1892 |
1893 |
1894 |
1895 |
1896 |
1897 |
1898 |
1899 |
1900 |
1901 |
1902 |
1903 |
1904 |
1905 |
1906 |
1907 |
1908 |
1909 |
1910 |
1911 |
1912 |
1913 |
1914 |
1915 |
1916 |
1917 |
1918 |
1919 |
1920 |
1921 |
1922 |
1923 |
1924 |
1925 |
1926 |
1927 |
1928 |
1929 |
1930 |
1931 |
1932 |
1933 |
1934 |
1935 |
1936 |
1937 |
1938 |
1939 |
1940 |
1941 |
1942 |
1943 |
1944 |
1945 |
1946 |
1947 |
1948 |
1949 |
1950 |
1951 |
1952 |
1953 |
1954 |
1955 |
1956 |
1957 |
1958 |
1959 |
1960 |
1961 |
1962 |
1963 |
1964 |
1965 |
1966 |
1967 |
1968 |
1969 |
1970 |
1971 |
1972 |
1973 |
1974 |
1975 |
1976 |
1977 |
1978 |
1979 |
1980 |
1981 |
1982 |
1983 |
1984 |
1985 |
1986 |
1987 |
1988 |
1989 |
1990 |
1991 |
1992 |
1993 |
1994 |
1995 |
1996 |
1997 |
1998 |
1999 |
2000 |
2001 |
2002 |
2003 |
2004 |
2005 |
2006 |
2007 |
2008 |
2009 |
2010 |
2011 |
2012 |
2013 |
2014 |
2015 |
2016 |
2017 |
2018 |
2019 |
2020 |
2021 |
2022 |
2023 |
2024 |
2025 |
2026 |
2027 |
2028 |
2029 |
2030 |
2031 |
2032 |
2033 |
2034 |
2035 |
2036 |
2037 |
2038 |
2039 |
2040 |
2041 |
2042 |
2043 |
2044 |
2045 |
2046 |
2047 |
2048 |
2049 |
2050 |
2051 |
2052 |
2053 |
2054 |
2055 |
2056 |
2057 |
2058 |
2059 |
2060 |
2061 |
2062 |
2063 |
2064 |
2065 |
2066 |
2067 |
2068 | Since Version 6.2.2 text objects can contain more than one line,
2069 | which will not be processed correctly with this version.
2070 |
2071 |
2072 |
2073 |
--------------------------------------------------------------------------------