Jörg,
This is the code that I am using with DAC 4822 (similar to 4922 but with
internal ref.). I can generate some nice sinewaves with 1V or 2V amplitude
with the Teensy 4.1 powered by USB data cable and output displayed on my
Rigol oscilloscope.
And of course, I can draw a circle.
I think the code is as slim as can be, see below. However when I plug it in
the scope clock code, It doesn't seem to work well... I need to figure it
out.
//code
#include <SPI.h>
//typedef unsigned int mcp4xxx_register; // 16-bit MCP48XX/MCP49XX register
for a single channel and 12-bit data
//
//const mcp4xxx_register mcp4xxx_channel_a = 0B0000000000000000; // for
all MCP4XXX
//const mcp4xxx_register mcp4xxx_channel_b = 0B1000000000000000; // for
MCP4XX2 only
//const mcp4xxx_register mcp4xxx_buffer_off = 0B0000000000000000; // for
all MCP4XXX
//const mcp4xxx_register mcp4xxx_buffer_on = 0B0100000000000000; // for
MCP49XX only
//const mcp4xxx_register mcp4xxx_gain_two = 0B0000000000000000;
//const mcp4xxx_register mcp4xxx_gain_one = 0B0010000000000000;
//const mcp4xxx_register mcp4xxx_output_off = 0B0000000000000000;
//const mcp4xxx_register mcp4xxx_output_on = 0B0001000000000000;
//
//
//const mcp4xxx_register mcp4822_channel_a = mcp4xxx_channel_a |
// mcp4xxx_buffer_off |
// mcp4xxx_gain_one |
// mcp4xxx_output_on;
//
//const mcp4xxx_register mcp4822_channel_b = mcp4xxx_channel_b |
// mcp4xxx_buffer_off |
// mcp4xxx_gain_one |
// mcp4xxx_output_on;
const unsigned int steps = 512;
unsigned int sines_of_steps[steps]; // sine values scaled to 0 ... 4095
(2^12 - 1)
const byte DACCSPin = 10;
void setup()
{
int i;
for (i = 0; i < steps; i++)
{
sines_of_steps[i] = round((sin(TWO_PI / steps * i) + 1) * 2047.5);
}
pinMode(DACCSPin, OUTPUT);
digitalWrite(DACCSPin, HIGH);
SPI.begin();
}
void loop()
{
unsigned int i;
for (;;)
{
for (i = 0; i < steps; i++)
{
SPI.beginTransaction(SPISettings(20000000, MSBFIRST,
SPI_MODE2));
digitalWrite(DACCSPin, LOW);
SPI.transfer16(0B0011000000000000 | sines_of_steps[i]);
// bits: DAC channel A, buffer off, gain 1x (Vout=VRef*D/4096),
output on, 12-bit data (D)
digitalWrite(DACCSPin, HIGH);
digitalWrite(DACCSPin, LOW);
SPI.transfer16(0B1011000000000000 | sines_of_steps[steps - 1 -
i]);
// bits: DAC channel B, buffer off, gain 1x (Vout=VRef*D/4096),
output on, 12-bit data (D)
digitalWrite(DACCSPin, HIGH);
SPI.endTransaction();
}
}
}
Il giorno mercoledì 22 novembre 2023 alle 08:55:55 UTC jörg ha scritto:
> Pretty nice photos.
> I like it too, to disable blanking and to see the painting beam.
> I did some tests with the MCP4922, too, but it was too slow for me.
> Mabe you've found a better way (code) driving it. If you don't mind, I'm
> intersted in a code snipped and which lib you have used.
> I ended up in a AD5344, which works pretty well for me on the
> teensy40/41). So maybe I will give the 4922 a second try.
> And I'm curious about your powersupply approach. Especial the +-5V and
> noise. I'm using a switched one, which is too noisy.
> Last, I'm in the same problem, getting a sharp image an tweaking with
> focus, astig etc.
> So, if you get good results with the emitter follower, please share your
> experience.
> Cheers
> Jörg
>
>
>
> On Monday, November 20, 2023 at 9:37:35 PM UTC+1 GDR GDR wrote:
>
>> wow! while the technical details are all "greek" to me, the images look
>> amazing. I love the "artifacts" in them. I dont know how you took these,
>> but it looks awesome! I like it as it is! not sure how this looks like in
>> "motion" but looks great in the stills... can you post some more? cheers
>>
>> On Sunday, November 19, 2023 at 4:25:50 PM UTC-6 Anders Mikkelsen wrote:
>>
>>> I recently started playing with scope clocks again, after seeing David's
>>> circle graphics clock the better part of two decades ago and having had it
>>> in the back of my mind since. This was prompted by Teensy 4.1 becoming
>>> available again on the market, and the official port of the SCTV codebase
>>> for this platform. I got it up and running, and explored some aspects
>>> around the design, I thought I'd share some info with the group in case
>>> anybody else can benefit from it.
>>>
>>> Firstly, off-the-shelf flyback transformers for low power auxiliary
>>> supplies work very well in Baxandall oscillators to make the required
>>> voltages at minimal cost and complexity, without using any custom parts. I
>>> used a Wurth 750310787, but many others are available. A buck converter can
>>> be wrapped around the circuit to get good line and load regulation, and the
>>> resulting BOM cost is less than 5 bucks. An off-the-shelf gate drive
>>> transformer can be used to drive the filament, providing the required
>>> isolation and power handling for a few bucks more, making a very simple and
>>> cheap design.
>>>
>>> Secondly, the LT DAC in the design can be replaced by a much more
>>> affordable (and easy to solder) MCP4922, without taking a hit on the DAC
>>> update rate. A comparison of the two parts would suggest that the 20 MHz
>>> maximum SPI rate of this part would significantly impact performance, but
>>> in practice it ends up working at around 500 KSPS as well. The issue with
>>> the original part is that it relies on 24 bit SPI transfers, which are
>>> again implemented as an 8 bit and a 16 bit transfer, and the overhead from
>>> reconfiguring the SPI peripheral and waiting for the receive buffer to fill
>>> is significant. The MCP allows native 16 bit operation of the peripheral,
>>> and use of the transmit FIFO to make the transfers without any intervention
>>> from the firmware once a set of XY coordinates are passed. I also
>>> experimented with porting the code to run on an RP2040, which works well so
>>> far. I haven't assembled the RTC part yet, but everything else seems to
>>> work with minimal changes to the code. The biggest effort was figuring out
>>> how to do efficient SPI transfers, which required some raw register access,
>>> and clock tree reconfiguration for synchronous operation of the SPI
>>> peripheral (which is not the case with the Arduino default clock frequency
>>> for this board).
>>>
>>> Thirdly, I did struggle a lot with getting a sharp image without having
>>> a lot of interaction between focus, brightness and astigmatism. Part of it
>>> came from feeding the cathode from a high impedance point in the divider,
>>> but a major factor turned out to be the source impedance of the anode
>>> drive. Most circuits I've seen drive the anode from a potentiometer fed
>>> from the deflection design. Most CRTs seem to draw an anode current that's
>>> significantly higher than the screen current, often by an order of
>>> magnitude, and this current causes the anode voltage to drift around as the
>>> brightness is adjusted. I initially used the high value of 1 Mohm for the
>>> pot, which exaggerated this issue a bit as well. In electrostatic CRTs, the
>>> final anode together with the first set of deflection plates forms a
>>> cylindrical lens, that affects both image geometry and beam focus. I looked
>>> at some oscilloscope schematics, and found some that use an emitter
>>> follower to buffer the output of the astigmatism pot to deal with this, and
>>> I'm just waiting for some parts in order to try this out in my design.
>>>
>>> I tried it with a range of old CRTs, and most of them struggle with
>>> getting a sharp dot near the edges of the screen. I suspect this is partly
>>> due to my sagging voltages, but I'll see if the improvements address it.
>>> Does anybody know what to expect in terms of corner spot size for typical
>>> non-PDA electrostatic CRTs in the range of 30 - 100 mm screen diameter?
>>> This is at 1200 V, and with enough beam current to make the scope clock
>>> image readable in a room with normal indoor lighting.
>>>
>>> Some pictures attached in order to compensate for all the words.
>>>
>>> AM
>>>
>>
--
You received this message because you are subscribed to the Google Groups
"neonixie-l" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web, visit
https://groups.google.com/d/msgid/neonixie-l/23535526-26bb-432a-b809-8c3e83918727n%40googlegroups.com.