Ifrim Valentin Personal Web Page
 


Microcontrollori / Tuner PLL
 

Tuner PLL con PIC16F628
La costruzione di un radio ricevitore FM con comando digitale

    
   
         
 
Schema blocchi
CPU
  Hardware
Software
Display LCD
Processore audio -TDA7318
Alimentazione
Tastiera
Commando Infrarossi -RC5
PLL SAA1057

 
         
  Schema blochi  
     
 

In questa pagina ci occuperemo solo del blocco di comandi, alimentazione, processore audio e pll. Il modulo tuner deve essere uno con diodi varicap per la banda 88-108 Mhz.
L'intero apparato è alimentato con una sorgente di 12V(tra 11 e 14V). Il consumo dell'apparato è di 0.5A escluso l'amplificatore audio.

 
    HARDWARE    
   

La parte principale di questo progetto è il blocco di comandi che ha al centro il microcontrollore PIC16F628.

 
   
   

Componenti:
IC1 = PIC16F628;
IR_RECEPTOR = TSOP1138 - TFK
T2 =2N3904;
D1, D2 = 1N4148;
R1, R2 = 4k7; R3, R4, R7 = 10k; R5 = 8k2; R6 = 22K; R8 = 47k;
C1= 0.1uF.

Per semplificare il circuito, il microcontrollore usa l'oscillatore interno (4Mhz), così le porte dell'oscillatore vengono usate come I/O. Come si vede dallo schema i pin 1 e 2 del connettore SL4 non sono utilizzati; essi saranno utili per la versione successiva per le funzioni di ricerca automatica.

 
  Software  
   

Nel menù si può navigare con i tasti UP, DOWN, + e -. Per memorizzare i programmi si usa il tasto OK e i tastini numerici.
Il menù è visibile sulla prima riga del display e ha la seguente struttura:

LCD LINE 1 Key LCD LINE 1 Key LCD LINE 1  
Volume +, -        
Balance +, -        
Bass +, -        
Treble +, -        
Tuner FM Search +, -        
OK for 3 second Pres KEY NR 1-9 1..9 MEMORY PASED  
Source Select +, -        
Key UP, Down          
           
           

Sulla seconda riga del display troveremo la frequenza del canale ricezionato, il numero del programma o viene segnalato il fatto che è scelto l'ingresso ausiliario.

 
   

Il firmware è scritto in assembler con MPLAB. Per una facile compressione del programma ho utilizzato i macro.
I file sorgente si possono scaricate da qui , (archiviate in formato zip) e sono i seguenti:

tuner_t.asm - programma principale,
bank.inc - macro per la commutazione tra i banchi di memmoria ram del microcontrollore,
sipo.inc - macro per la trasmissione seriale dei dati al LCD,
wait_i.inc - contiene il macro per il ritardo,
afis_fm.inc - prepara i dati con la frequenza del sintonizzatore per essere mandata al LCD,
key_debt.inc - legge i dati dalla tastiera,
isr.inc - contiene le rutin per memorizzare certe variabili per il periodo dell'interrupt e recuperarle all'uscita dall'interrupt,
lcd_sipo.inc - macro per il controllo del modulo LCD,
i2l.inc - contine macro per la comunicazione seriale con il modulo PLL (CI - SAA1057),
i2c.inc - macro per la comunicazione seriale con TDA7318 sul bus i2c,
eepr.inc - macro necessarie alla scrittura e lettura della memoria eeprom del microcontrollore.

 
    tuner_t.asm    
   

All'inizio dobbiamo definire alcuni parametri del microcontrollore: il tipo dell'oscillatore, se il circuito interno di reset è attivo...
Questo si fa con la direttiva:
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _MCLRE_ON & _LVP_OFF che può essere scritta anche in formato numerico
__CONFIG 0x3F30
le variabili sono dichiarate cominciando dall'indirizzo 0x20h del RAM come segue,

Cblock 0x20
var 1
var 2
..
var n
endc

La definizione del hardware è seguita dalla dichiarazione dei file che contengono le macro (#include "xxx.inc"). Il programma principale inizia con il settaggio dei registri interni del microcontrollore seguendo l'inizializzazione delle variabili.
In questo file troviamo un loop nel quale viene resettato il menù dopo un certo periodo di inattività. Dal loop si esce solo con l'interrupt proveniente dalla tastiera o dal telecomando IR.

 

 
    sipo.inc    
   

Per utilizzo di un numero minore di porte del microcontrollore ho scelto di pilotare il display in modo seriale. La conversione da seriale a parallelo si fa con il chip SN74LS164.
In questo file troviamo una macro che trasmette verso le porte PB4(Clock) e PB6(Dati) il valore del registro W.

 
    afis_fm.inc    
   

Il valore della frequenza è memorizzata nelle variabili b42 e b41 e per poter essere mandato al display deve essere convertito in un formato appropriato. La macro trovata all'interno di questo file fa la conversione delle variabili in quattro variabili: migliaia, centinaia, decine, unità.

 
    key_debt.inc    
   

Macro per eliminare l'effetto di rimbalzo della tastiera. Viene chiamata quando al microcontrollore arriva un interrupt dalla tastiera e a sua volta chiama il comando addres dal programma principale, dove viene analizzato il valore letto dalla tastiera.

 
    lcd_sipo.inc    
   

Contiene le macro necessarie alla comunicazione con il modulo LCD. Questi sono:

LCDinit - conteine la sequenza di inizializzazione del modulo LCD
LCDchar - scrive un carattere al LCD
LCDcmd - scrive un comando al LCD
LCDline - seleziona la riga del LCD al quale si manda il dato

 
    i2l.inc    
   

Questo file contiene una macro che serve alla trasmissione seriale di dati in formato 16 bit al chip SAA1057. I dati trovati nelle variabili byt1_i2l e byt2_i2l sono trasmesse tramite le porte RB1(DAT), RB4(CLK), RB5(DLEN).

 
    i2c.inc    
   

Siccome il chip PIC16F628 non ha una porta I2C dedicata, ho dovuto scrivere delle macro per emularla.
Queste macro sono:

STA_i2c - genera la condizione di Start sul bas
STO_i2c - genera la condizione di Stop sul bas
SEN_i2c - scrive un byte
REA_i2c - legge un byte
RACK - legge il bit ACK)
SACK - scrive il bit ACK (di riconoscimento)

Leporte usate dal bus I2C suno SDA-RB2 si SCL-RB1.

 
  Il display LCD  
     
   

IC1 = SN74LS164,
R1 = 10K, C1 de 0,1uF/63V
,
R2 = 15, R3=22 si R4 = 47. Con l'aiuto di queste resistenze si stabilisce la corrente dei LED del LCD e in conseguenza la luminosità di quest'ultimo. Il valore desiderato si sceglie con i jumper SJ1,2,3.

 
  Audio processor  
     
   

In questo progetto vengono utilizzate solo due coppie di ingresso: 12-8 (Stereo -4) per l'ingresso AUX e 11-16 (Stereo-1) per l'ingresso FM. La documentazione del chip TDA7318 si può scaricare da qui in formato pdf (249K).

 
  Power supply  
     
  Keyboard  
   

La tastiera viene collegata al microcontrolore tramite 5 porte (una per l'interrupt - INT e quattro per i dati - A, B, C, D). Per il circuito con la codifica della tastiera sono utilizzati tre circuiti integrati 2 x SN74LS148 e SN74LS400.

I valori corrispondenti al tasto letto dalla tastiera sono:

 
   
Up - 0x0B
'-' - 0x0E
OK - 0x0F
'+' - 0x0C
Down -0x0D
7 - 0x07
8 - 0x08
9 - 0x09
4 - 0x04
5 - 0x05
6 - 0x06
1 -0x01
2 - 0x02
3 - 0x03
OFF - 0x0
MUTE - 0x0A
 
  Remote control  
   

Per la ricezione del segnale IR dal telecomando viene utilizzato un ricevitore infrarossi TSOP1138-TFK. dopo la demodulazione del segnale IR con il suddetto chip questo viene invertito dal transistor T2 dopodiché alla porta RB0 del microcontrollore. Nel momento di ricezione di un comando alla porta RB0, viene generato un interrupt dopo di che il software decodifica il segnale ricevuto. Il codice utilizzato dal telecomando è RC5-Philips.

 
  PLL SAA1057  
     
   

R1=180, R2=18k, R3=10k, R4=180*
C1=2,2nF, C2=10nF, C3=47uF/25V, C4=150nF(330nF), C5=220nF, C6=1nF, C7=10nF, C8=27pF, C9=100uF.
Q1= 4 MHz, IC1=SAA1057
La descrizione dettagliata di questo chip (SAA1057) la troverete nela pagina SAA1057 -PLL Frequency Synthesizer.

 
         
Inizio della pagina
Termini e condizioni
Copyright ©2013 Ifrimv      Site designed by Ifrim Valentin