De Uni Tx werkt met de SP5055 synthesiser chip Om een frequentie te kiezen binnen het bereik van de gekozen VCO, moet via I2C het juiste deeltal worden ingesteld.
Behalve deze Uni-Tx zijn er ook diverse tunerblikjes in omloop, o.a. van Philips of de Comtech modulen die ook met de SP5055 werken. Ook deze tuners kunnen worden afgestemd met de hier beschreven software. Hierbij moet voor ontvangst wel rekening worden gehouden met de gebruikte middenfrequentie en eventuele downconverters. Het programma moet de juiste rekenformule hanteren om de juiste ontvangstfrequentie te tonen op het display en tegelijk de bijbehorende frequentie in te stellen bij de SP5055.
De oorspronkelijke UNI-Tx uit 1997 werkte met een PIC16F84 processor om de SP5055 in te stellen. Deze processor is niet meer van deze tijd. De huidige keuze is gevallen op de alom verkrijgbare Arduino boards met Atmel AtMega328 processor (bijvoorbeeld Uno of Nano). Het ruime geheugen van deze processor maakt het mogelijk een fraaiere interface te realiseren en bovendien allerlei extra features toe te voegen. Zie ook het ATV-Rx project op deze site. Tot slot is het programmeren van deze chips veel eenvoudiger met de Arduino IDE ( geïntegreerde ontwikkel omgeving)en via de USB poort van de PC.
Voorbeeld Arduino IDE (voor de compete code ga naar Downloads)
De routine set_syn(int freq); laat zien hoe de 4 registers van de
SP5055 beschreven worden.
Eerst wordt de i2c startconditie gemaakt, vervolgens het adres van
de SP5055 opgehaald en verzonden.
Dan worden de 4 databytes verzonden. Tenslotte volgt de i2c
stopconditie. Uiteindelijk blijft de bus in rust met beide i2c
lijnen "hoog"
De SP5055 kan werken met verschillende i2c adressen, (in hex)
0x61, 0x62, 0x63, en 0x63. Een SP5055 reageert altijd op adres
0x62, de andere adressen kunnen worden gekozen door een bepaald DC
niveau op pin 10 te zetten. Zo kunnen in een systeem maximaal 3
SP's onafhankelijk van elkaar bestuurd worden. Hier wordt pin 10
aan Gnd gelegd waardoor het I2C-adres 0x61 wordt.
Programmeren van de SP5055:
De SP5055 bevat vier acht-bits registers:
synthesizer low byte
synthesizer high byte (samen een 16 bits register voor het
synthesizer-deeltal)
control byte (hardware configuratie)
ports byte (besturen I/O poorten van de SP)
Bij een volledige programmering van de chip worden alle 4 bytes
verstuurd. Het interne registeradres wordt tijdens het schrijven
automatisch opgehoogd, zodat alleen databytes verstuurd hoeven te
worden. (auto-increment, de meeste i2c chips doen dit).
Het deeltal:
Dit is een 16bits getal, gesplitst in een Hi en LO byte. Eerst
wordt het HI byte verstuurd, vervolgens het LO byte.
De relatie tussen de referentiefrequentie(kristal), deeltal en VCO
uitgangsfrequentie is als volgt:
De minimum stepsize = referentiekristal-frequentie gedeeld door
referentiedeler maal de totale prescaler deelfactor >
Stepsize = (F_xtal/Nref)*Npsc = (4000/512)*16=125 kHz.
deelfactor N = Fvco/stepsize = Fvco/0.125 (in MHz) oftewel:
Fvco = stepsize * N
Bij een 4MHz kristal komt het dan zo uit dat het deeltal gelijk is
aan 8x de Fvco frequentie.
Control byte: Zie SP5055 datasheet (standaard op CE)
Ports:
Met deze byte kunnen de extra i/o lijnen op de SP bediend worden.
Alleen de output lijnen P0 en P4 t/m P7 zijn te gebruiken. Door er
een '0' in te schrijven wordt de uitgang naar massa getrokken, met
een '1' wordt hij tristate (open drain uitgangen). Met deze
uitgangen kunnen we wat schakelen, in dit geval bijvoorbeeld de
PTT functie van de zender. In ons voorbeeld is hiervan geen
gebruik gemaakt.
De rest van het programma is "standaard" Arduino code. Voor de frequentie keuze wordt gebruik gemaakt van een rotary encoder die door een (zeer simpele) interrupt routine wordt afgehandeld. Deze routine vult een variabele"up" die de draairichting aangeeft: 1=rechtsom, 0=linksom. Tevens wordt de variabele"rotary" 1 gemaakt, wat betekent: er is aan de knop gedraaid.
In de "loop" van het programma wordt de functie rot_update(); aangeroepen. Door aan de encoder te draaien kan zo de frequentie worden ingesteld. Aan de functie moeten ook een minimum en maximum waarde worden opgegeven.
Het complete programma is in Downloads te vinden