Encoder für den HF-Generator        


Elektronik-Labor   Projekte   AVR 




Der AM-Modulator mit dem SI5351 und einem ATtiny85 hat sich auch schon im Amateurfunk als VFO im Kurzwellenbereich bewährt. Er hat drei Aussgangskanäle: Clk2 wird im Zusammenhang mit dem AM-Modulator meist auf Mittelwelle verwendet und kann über den Taster auf der Platine im Kanalraster abgestimmt werden. Clk1 eignet sich mit der zugehörigen Windows-Software als VFO zwischen 10 kHz und 30 MHz. Der mittlere Schieber hat ein kHz-Raster, der obere dient zur Feinabstimmung in Hz-Schritten. CLK2 kann in der Software als Ausgang B auch auf höhere Frequenzen eingestellt werden, sodass ein AM-Modulator auch auf Kurzwelle arbeiten kann. Clk0 ist dem Kanal A zugeordnet und kann auf eine Festfrequenz eingestellt werden. Nach einer Idee von Helmut, DO5FH sollte aber auch eine Handabstimmung mit einem Dreh-Encoder eingebaut werden.

 

Der Tiny85 hat nur acht Beinchen, da kommen eigentlich nur die Leitungen PB1 und PB2 in Frage, die als TXD und RXD für die serielle Steuerung verwendet werden. Um Frequenzen über serielle Kommandos einzustellen, braucht man BP2. Wenn ein Encoder angeschlossen wird, ist die serielle Leitung unterbrochen. Die Firmware soll selbst erkennen, wann ein Decoder angeschlossen ist. Man kann also zunächst über den PC die Startfrequenz (z.B. 14 MHz) einstellen und dann den Encoder anschließen, um den VFO am Ausgang Clk0 abzustimmen.


Die ursprüngliche Firmware wurde um die Sub Tune erweitert, die die Signale des Encoders auswertet. Die serielle Schnittstelle hat beim Start nur den Eingang an B2. B1 ist jetzt ein digitaler Eingang mit Pullup. Wenn B1 als low erkannt wird, ist ein Encoder angeschlossen. Das Programm verzweigt dann in die Sub Tune, die als Endlosschleife arbeitet, sodass die bisherige Interpreterschleife für serielle Kommandos abgeschaltet ist und die Abstimmung über den Encoder läuft.

'si5351_Tiny85_AM3_Encoder.bas
'AM-Modulator ATtin85 und SI5351
'- Erweiterung Encoder 12.11.22:

...
dim K as byte
dim Enc as Byte
dim Enc_old as Byte

Declare Sub Tune


Config Portb = input
pORTb = 255 'Pullup 'Pullups an B0...C3
Open "comb.2:9600,8,n,1" For Input As #1
'Open "comb.1:9600,8,n,1" For Output As #2

do
if pINB.1=0 then Tune
...
loop


Sub Tune 'Encoder Auswertung
if F<8000 then F = 7000000
F=F0
Clk = 0
Sifreq
do
Enc = PINB
Enc = Enc / 2
Enc = Enc and 3
if Enc.0 < Enc_old.0 then
if Enc.1=0 then F0=F0+100
if Enc.1=1 then F0=F0-100
'print #2, F0
F=F0
Clk = 0
Sifreq
'waitms 1
end if
if Enc.0 > Enc_old.0 then
if Enc.1=1 then F0=F0+100
if Enc.1=0 then F0=F0-100
'print #2, F0
F=F0
Clk = 0
Sifreq
'waitms 1
end if
Enc_old = Enc
waitms 1
loop
end sub


Tune wertet die Pegelwechsel an PB1 und PB2 aus und erkennt daraus die einzelnen Schritte nach rechts oder links. Jeder Schritt verändert die VFO-Frequenz um 100 Hz. Vor dem Anschluss des Encoders wurde mit einem Kommando "k14000000" die Startfrequenz 14 MHz für den Kanal Clk0 in das EEPROM geschrieben. Nach einem Neustart steht jetzt immer zuerst 14,000 MHz am Ausgang 0.  Dann wurde der Encoder angeschlossen und das Signal in einem Transceiver abgehört. Die Schrittweite 100 Hz sind ein Kompromiss zwischen feiner Abstimmung und schneller Änderung der Frequenz. Man hört allerdings sehr deutliche Stufen.

In einer zweiten Version wurde die Schrittweite in Abhängigkeit von der Drehgeschwindigkeit verändert. Bei sehr langsamer Drehung hat man eine Schrittweite von 5 Hz, die wie eine analoge Abstimmung empfunden wird. Bei schnellerer Drehung hat man Schrittweiten von 20 Hz, 100 Hz oder 500 Hz, mit denen man schnell durch das Band abstimmen kann.

' si5351_Tiny85_AM4_Encoder.bas

Sub Tune 'Encoder Auswertung
if F<8000 then F = 7000000
F=F0
Clk = 0
Sifreq
do
Enc = PINB
Enc = Enc / 2
Enc = Enc and 3
if Enc.0 < Enc_old.0 then
dt=0
if Enc.1=0 then F0=F0+df
if Enc.1=1 then F0=F0-df
'print #2, F0
F=F0
Clk = 0
Sifreq
'waitms 1
end if
if Enc.0 > Enc_old.0 then
dt=0
if Enc.1=1 then F0=F0+df
if Enc.1=0 then F0=F0-df
'print #2, F0
F=F0
Clk = 0
Sifreq
'waitms 1
end if
Enc_old = Enc
waitms 1
dt = dt + 1
If dt>250 Then dt = 250
df =5
if dt<100 then df =20
if dt<20 then df =100
if dt<5 then df =500
loop
end sub

Download Quelltexte und Hex-Files: EncoderVFO.zip  (Update 13.1.23: si5351_Tiny85_AM5_Encoder.hex korrigiert ein Timing-Problem)

Wer die Platine mit der neuen Firmware versehen will, hat dazu zwei Möglichkeiten. Entweder man verwendet BASCOM und lädt das Programm über den MCS-Bootloader, der bei Auslieferung von Modul-Bus mit im Flash liegt. Dazu müssen die Leitungen RXD, TXD und Reset an einen USB/Seriell-Wandler angeschlossen werden.  Oder man verwendet einen AVR-Brenner und lädt das Hex-File über den sechspoligen ISP-Anschluss in den Controller.




Elektronik-Labor   Projekte   AVR