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.basTune 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.
'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
' 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.