Scan-Radio mit LCD-Anzeige      

von Hermann Nieder                  
Elektronik-Labor  Projekte   Holtek





Im  Bild ist ein Scan-Radio mit einem KT0837 mit einer  I2C-Minischnittstelle, worüber bereits in einem anderen Beitrag (FM-Radio KT0837 am Tiny13) berichtet worden ist, im Betrieb mit einem HT46F47 auf der Platine aus dem Lernpaket Modellbahn. Der Mikrocontroller ist so umprogrammiert worden, dass er fortwährend die Frequenz- und Lautstärkewerte des Radios ausliest und auf einem LCD-Modul anzeigt.




Der HT46F47 wird mit 3V betrieben. Das bereits auf der Platine eingelötete Trimmpoti P1 steht etwa in Mittelstellung. Damit wurde dieser Portpin in meinem kleinen Projekt auch als Ausgang verwendbar.



Portpin PD0(PWM) des Mikrocontrolers wird als „normaler“ Ausgang verwendet. Über ihn erfolgt zusätzlich die Übertragung der Frequenz- und Lautstärkewerte des Scan-Radios an die serielle Schnittstelle eines PCs, wo diese  z. B. wie im Bild mithilfe des Terminalprogramms von B. Kainka angezeigt werden können.




Nach diesem Plan wird das LCD-Modul mit dem HT46F47 auf der Platine des oben erwähnten Lernpakets verbunden. Das Programm  für den HT46F47 in C wurde in Anlehnung an die Listings LCDANZ.Bas sowie I2C.Bas, die im Fachbuch  „Messen-Steuern-Regeln mit dem C-Control/Basic-System“ von B. Kainka veröffentlicht wurden, entworfen.



Beim Start des Programms wird zuerst der Lautstärkewert auf 8 verringert. Dann wird fortlaufend die Empfangsfrequenz sowie die Lautstärke auf dem LCD-Modul angezeigt. Außerdem erfolgt die Übertragung dieser Werte über Pin PD0 des HT46F47 an die serielle Schnittstelle eines PCs.

Download:  ScanRd_HT46F47.zip

...
void main(){

safeguard_init();
_pac=0;// Port a Ausgang
_pbc0=0; // hier Ausgang
_pdc0=0; // Ausgang TXD
_pbc3=0; // Ausgang SCL
_pbc2=0; // Ausgang/Eingang SDA
_pbc1=0; // Ausgang E am LCD-Modul
_pd0=1; // TXD = 1
_eadi=0; //Kein Interupt
i=0;
_pbc2=0; // pb2 SDA ist zuerst Ausgang
_pb3=0; // pb3 SCL ist stets Ausgang



//A_Reg=85; // Test
//WrCOM(); //
//A_Reg=170; // Test
//WrCOM(); //

I2c_init();

_pa=0;
mydelay(4); // ca. 15ms warten
LCD_init();
mydelay(55); // ca. 200ms warten


I2c_start(); // Zuerst Lautstaerkewert
E_Reg=0x6E; // verringern auf 8
I2c_write();
mydelay(1);
E_Reg=0x04;
I2c_write();
mydelay(1);
E_Reg=0x40;
I2c_write();
mydelay(1);
E_Reg=0x08;
I2c_write();
mydelay(1);
I2c_stop();



while(1)
{

Frq_lesen();
//Umrechnung in 'brauchbare' Werte
F=dat_hi*256;
F=F+dat_low;
mydelay(50);
F=F*5;
F=F+6400;
F_high=F /256;
F_hi=F_high & 255;
//A_Reg=F_high; // Test
//WrCOM();
mydelay(1);
F_low= F % 256;
//A_Reg=F_low; // Test
//WrCOM();
mydelay(100);
//Lautstaerkewerte
Lautst_lesen();
//A_Reg=dat; // Test
//WrCOM();

mydelay(1);
E_Reg=1;
LCD_cmd();
E_Reg=2;
LCD_cmd();
E_Reg=128;
LCD_cmd();

E_Reg=70; // F
LCD_char();
mydelay(1);
E_Reg=114; // r
LCD_char();
mydelay(1);
E_Reg=101; // e
LCD_char();
E_Reg=113; // q
LCD_char();
E_Reg=46; // .
LCD_char();
E_Reg=58; // :
LCD_char();

E_Reg=F /10000;

Null_ausbl();

F=F%10000;
E_Reg=F/1000;
E_Reg=E_Reg+48; //2. Ziffer
A_Reg=E_Reg;
WrCOM();
LCD_char();

F=F%1000; //3. Ziffer
E_Reg=F/100;
E_Reg=E_Reg+48;
A_Reg=E_Reg;
WrCOM();
LCD_char();

E_Reg=46; // Dezimalpunkt
A_Reg=E_Reg;
WrCOM();
LCD_char();

F=F%100;
E_Reg=F/10;
E_Reg=E_Reg+48;
A_Reg=E_Reg;
WrCOM();
LCD_char();

E_Reg=32; // Blank
A_Reg=E_Reg;
WrCOM();
LCD_char();

E_Reg=77; // M
A_Reg=E_Reg;
WrCOM();
LCD_char();

E_Reg=72; // H
A_Reg=E_Reg;
WrCOM();
LCD_char();

E_Reg=122; // z
A_Reg=E_Reg;
WrCOM();
LCD_char();

E_Reg=192; // in 2. Zeile
LCD_cmd();

A_Reg=32; // Blank
WrCOM();

A_Reg=32; // Blank
WrCOM();

E_Reg=76; // L
A_Reg=E_Reg;
WrCOM();
LCD_char();

E_Reg=97; // a
LCD_char();

E_Reg=117; // u
LCD_char();

E_Reg=116; // t
LCD_char();

E_Reg=115; // s
LCD_char();

E_Reg=116; // t
LCD_char();

E_Reg=46; // .
LCD_char();

E_Reg=58; // :
A_Reg=E_Reg;
WrCOM();
LCD_char();

E_Reg=32; // Blank
A_Reg=E_Reg;
WrCOM();
LCD_char();

E_Reg=dat/10; // 1. Ziffer
Null_ausbl();

E_Reg=dat%10; // 2. Ziffer
E_Reg=E_Reg+48;
A_Reg=E_Reg;
WrCOM();
LCD_char();

A_Reg=13; // CR
WrCOM();

A_Reg=10; // LF
WrCOM();

mydelay(200);
mydelay(200);
}
}
...


Elektronik-Labor  Projekte   Holtek