Po przejrzeniu gotowych odbiorników Lidia 80 na stronie Włodka SP5DDJ zamarzył mi się miernik częstotliwości ale wyposażony w wyświetlacz LCD. W sklepie AVT wypatrzyłem taki miernik AVT2831 lecz nie pasował zakres mierzonej częstotliwości. Po przeanalizowaniu schematu zobaczyłem, że w torze pomiarowym jest zabudowany układ scalony, który jest dzielnikiem częstotliwości. Jeżeli usunie się ten układ to przesunie się zakres pomiaru w dół. Do projektu dołączony jest program źródłowy microkontrolera Atiny, na którym oparto budowę miernika. Zamówiłem kit i przystąpiłem do zabawy. Na początku zmontowałem cały kit zgodnie z instrukcją, układ LB3500 zabudowałem w podstawce, którą mozna uzyskać przecinając wzdłuż DIL18 i uruchomiłem. Na testach miernik mierzył poprawnie. Przeróbka polega na usunięciu preskalera LB3500 i przeróbce programu. Wyjście układu (nóżka 9) zwarłem do listwy do wejścia.
Następnie trzeba było zmienić program. Wystarczy poprawić w linii 47 oryginalnego programu korekcję na wartość 0.0000040694875 i miernik zacznie wskazywać poprawną wartość. Ilość pustych znaków wyświetlacza skłoniła mnie jeszcze do dodania nazwy radia, emisji i znaku. Moim zadaniem jeżeli ktoś planuje wsadzenie tego miernika do Lidii to nie trzeba wlutować tych elementów jak na poniższym schemacie. Czerwonym przewodem jest zaznaczony mostek który można wykonać kynarem. Elementy w czerwonym polu są zbędne.
Poniżej zamieściłem zmodyfikowany program, który został skompilowany baskomem i wgrany w układ ATiny programatorem.
$regfile = "attiny2313.dat"
Enable Interrupts
$crystal = 16000000
Config Lcd = 16 * 2 'konfiguracja LCD
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Config Portd = Input
Set Portd.5
Dim Freq As Long
Dim F As Single
Dim Pomoc As Byte
Dim L As Byte
Cursor Off
Dim S As String * 4
Config Timer1 = Counter , Edge = Rising 'konfiguracja timerow
Enable Timer1
Start Timer1
Config Timer0 = Timer , Prescale = 1024
Enable Timer0
Start Timer0
On Timer0 Sek
On Timer1 Fr
Cls
Do
Loop
Fr:
Incr Pomoc 'jesli przepełnienie timera1 to zwieksz zmienna pomocnicza
Return 'potrzebna do obliczenia czestotliwosci
Sek:
Incr L
If L = 61 Then Gosub Licz 'jezeli procesor odliczy jedna sekunde to skok do podprogramu licz
Return
Licz:
Stop Timer1
L = 0
Cls
Freq = 65536 * Pomoc
Freq = Freq + Timer1 'tutaj mozna wprowadzić offset'np offset -455kHz to odjecie od zmiennej freq wartosci 455000/32.5559
F = Freq * 0.0000040694875 'obliczenie czestotliwosci i korekcja wpływu rezonatora i pojemnosci z nim pracujacych oraz niedokładności odmierzenia 1 sekundy
S = Fusing(f , "#.#####") 'formatowanie wyniku i wyswietlenie go na wyswietlaczu
Locate 1 , 1
Lcd "*Lidia80* ZNAK" 'tu możesz wpisać swój znak wywoławczy
Locate 2 , 1
Lcd S ; " MHz, SSB"
Pomoc = 0
Timer0 = 0 'zerowanie timerow i zmiennych pomocniczych
Timer1 = 0
Start Timer1
Return