Download Print this page
Telefunken RT200 User Information

Telefunken RT200 User Information

Digital synthesizer tuner

Advertisement

Quick Links

2011.X.27
Telefunken RT200
Device Type
Digital Synthesizer Tuner
Start of Sale
1981
Original Price
DEM 799,-

General Description

The medium-sized tuner of the Silver Series includes a feature even not present in the larger RT300: a
digital timer/clock, allowing to turn the tuner plus two other devices on and off at preselected times. A
single point of time and a daily-repeating time may be programmed. The tuner is never really off: the
power switch is in reality only a key that instructs the microprocessor to turn the relay for the outlets and
the tuner section off; the display then switches to a 24-hour time display. Since there are only five digits
available, the time display doesn't include the seconds.

Advertisement

loading

Summary of Contents for Telefunken RT200

  • Page 1: General Description

    2011.X.27 Telefunken RT200 Device Type Digital Synthesizer Tuner Start of Sale 1981 Original Price DEM 799,- General Description The medium-sized tuner of the Silver Series includes a feature even not present in the larger RT300: a digital timer/clock, allowing to turn the tuner plus two other devices on and off at preselected times. A single point of time and a daily-repeating time may be programmed.
  • Page 2: Technical Data

    In contrast to the RT300 and MT1, the other digital tuners in the Silver Line, the RT200 does not allow entering a frequeny via the numeric keys. Note that '16 program memory places' means 8*FM and 8*AM; you can't have more places in one range and less in the other!
  • Page 3 Common Failures Leaked Accumulator The RT200 contains a 4.8V NiCd accumulator pack. This is needed to keep the processor and the clock running while the device is disconnected from the mains supply (as I noted above, the microprocessor and its supply is still on when you turn the tuner off). During normal operation, the accumulator will be recharged.
  • Page 4 I had an RT200 that came 'back into tune' after I removed C272... Linked to the out-of-tune phenomenon is the tuner's incaopability to reliably receive in stereo; an RT200 going mono in the music's rhythm is not uncommon ;-)
  • Page 5 T204-207,209,224,228, transistor 2SC1815Y 339 556 292 229,231,233,234,237, T201 transistor 2SC380 339 556 052 T202 transistor 2SK212D 339 556 453 T203 transistor 2SK212C 339 556 454 T208-225,210-223,227, transistor 2SA1015 339 556 216 230,232 T235 transistor 2SA1020 339 556 456 T236 transistor 2SD592 339 556 455 T101 transistor 3SK45B...
  • Page 6 L210,211 choke coil 39µH 339 347 040 symmetrical transformer 339 312 114 L101 coil 339 347 134 L102,104 coil 339 347 135 L105 coil 339 347 136 L108 oscillator coil 339 347 143 L106 coil 339 347 137 L107 coil 339 367 113 Misc.
  • Page 7 I had to find out things myself). This report mostly has documentational purposes and there is probably noone who has an RT200 with the same problem and can use this text as a 1:1 guide. To do something like this, you need to have experience in reverse engineering devices, understanding both analog and digital electronics, building hardware, and programming embedded controllers.
  • Page 8 Name Direction Function ---- Ground Output goes high if switched to long wave AM (unused on the RT200) Output goes high if switched to medium wave AM Output goes high if switched to FM OUTLED OUT Output goes high to turn tuner on...
  • Page 9 (needed for the stations' frequency storage) and a third timer (not needed here). By coincidence, I got an TS80C32X2 from Temic, formerly Telefunken Microelectronics. It has the nice capability of running in X2 mode, i.e. an internal frequency divider is turned off and the device runs at double speed with the same external clock.
  • Page 10 The first process runs at about 400 interrupts per second and is used to drive the flourescent display and read the keyboard matrix. As with most consumer electronics, the RT200's display is a 'dumb' display that does not the refresh by itself, so the processor has to do the multiplexing itself. It works in the following way: Initially, the CPU outputs the data for the leftmost digit to the SEGMENT OUT pins and pulls the DIGIT OUT 0 line low while DIGIT OUT 1..4 remain high;...
  • Page 11 'flicker' resulting from some segments being turned on longer than others and therefore seeming to be brighter. Main Loop The RT200 has a row of buttons that release each other and define the current 'operating mode' of the tuner's 'user interface': Timer On: Normal tuner operation, timer function enabled;...
  • Page 12 I must add at this point!). Since I also own a still working RT200, there was a simpler way of finding things out: take a working sample, tap onto the data and clock lines, and see what is happening when the frequency changes. I was...
  • Page 13 Shown on the LA's display is the result of a single programming cycle. The synthesizer chip contains a couple of registers, each 4 bits wide. With a low-to-high transition of the clock line, a certain register is selected; with a high-to-low transition, data is written to the addressed register. So a single write operation consists of the following steps: Apply register address to data lines Pull clock line high...
  • Page 14 The larger brother of the RT200, the RT300, features a remote control input to control the tuner via the infrared remote control receiver in the RP300 pre-amplifier. Now that we have a firmware we can extend and modify easily, there is no reason not to add some nice features you had always been missing...
  • Page 15 Program Source The program's assembler sources are available . To assemble them, you need my own cross assembler AS, ;*************************************************************************** ; RT200 Firmware ; Changes: 2000-08-30 /AArnold - hour digit 3..9 immediately jumps to hours ones * - clear AM+FM after entering start time...
  • Page 16 proc macro name ; procedure frame section name public name name label endm endp macro endsection endm ljnz macro dest skip ljmp dest skip: endm macro dest skip ljmp dest skip: endm ;--------------------------------------------------------------------------- ; constants rawclk 562500 ; input clock to CPU (4.5 MHz / 8) timeclk ;...
  • Page 17 MIN_AM1 0495h MAX_AM 1710h MAX_AM1 1719h DEF_AM 0522h ;--------------------------------------------------------------------------- ; data definitions p1.7 ; control bits: turn device on p1.6 ; switch AM prt on p1.5 ; switch FM part on MUTE p1.4 ; mute audio output LATCHCLK p1.3 ; clock to synthesizer p1.2 ;...
  • Page 18 ;--------------------------------------------------------------------------- ; store date & time here for identification "RT200 Firmware (C) 2001 Alfred Arnold" " Build Date - Time : ",date," - ",time ;--------------------------------------------------------------------------- ; since we want the copyright info in plain text, we have to redefine the ;...
  • Page 19 r2,#1 row shifter r1,#dispdata data pointer displ-matrix r0,#keydata data pointer kbd-matrix regbank 0 setb ; IE0 is level-triggered setb ; enable external interrupt 0 ; 250 Hz interrupt has lower priority tmod,#32h ; T1 stopped, T0 in mode 2, no gate th0,#(256-t0rate) ;...
  • Page 20 auxdata,a ; clear aux port lastkey,#KEY_NONE ; no key previously read setb ; enable interrupts ;---------------------------------------------------------------------------- ; main loop main: call getmode ; get operation mode cjne a,#mode_off,nooff call oper ljmp main nooff: cjne a,#mode_on,noon call chktimer ; additionally check timer when 'on' call oper ljmp...
  • Page 21 no_fm: cjne a,#KEY_OFF,no_off ; switch on/off? ON,pwr_on ; depends on current state call switchoff ; switch off ljmp terminate pwr_on: call switchon ljmp terminate no_off: cjne a,#KEY_REMOFF,no_remoff ; switch off ? call switchoff ljmp terminate no_remoff: cjne a,#KEY_TUNER,no_tuner ; switch on ? call switchon sjmp...
  • Page 22 step1: ; go to next program a,#7 ; possibly wrap sjmp doprog ; rest like direct selection no_step: call key2num ; check for numbers 0..9 terminate ; no-->ignore key ; number: ignore 0 at this point ; program selection ? subb a,#NUMPROGS b.7,c...
  • Page 23 no_onceoff: ; end without hits... turnon: c,acc.7 ; turn on: select range acc.7 ; remove range flags from program # acc.6 turnon_fm call switchon_am_prg ; turn on AM program turnon_fm: call switchon_fm_prg ; turn on FM program turnoff: call switchoff ;...
  • Page 24 call readkey ; try to read a key loop ; none found -> back to beginning cjne a,#KEY_UP,noup ; step one setting further ? a,r2 ; yes->increment pointer stepdisp: a,#3 r2,a auxdata,a ; and display it sjmp loop noup: cjne a,#KEY_DOWN,nodown ;...
  • Page 25 call readnum ; number entered? numrun ; no--> ; must be in range 0..7 acc.3,numrun a,r6 ; otherwise merge into station marker r6,a a,r2 ; calculate address of station marker ; we know that bit 0 was 0! a,#prog_perm r0,a a,r6 ;...
  • Page 26 normal ; none->display time, abort ; map 1..4->0..3 subb a,#4 ; is number in range? normal ; no -> ditto dloop: a,#4 ; otherwise restore number... r2,a ; ...save it... ; ...compute address of time... a,#time_permon r0,a call disptime ; ...display time dispdata+5,#0 ;...
  • Page 27 normal ; no -> ditto push call clrdisp ; erase display after first numer entry dispdata+2,#1 ; show just a dot dloop: a,#4 ; otherwise restore number.. setb acc.7 ; ..turn LED continuously on.. auxdata,a acc.7 ; ..compute address.. a,#time_permon r0,a ;...
  • Page 28 dispdata+0,#0 ; no special digits r0,#clk_min ; rest of time as usual call disptime endp ;--------------------------------------------------------------------------- ; 250 Hz interrupt: drives clock, runs aux port clkserve: setb p3.4 push ; save registers push push push regbank 2 r0,#clk_msec ; ptr to clock values ;...
  • Page 29 dph,#0 ; only use port 0..3 dpl,#PORT_COL ; clear display a,#0ffh movx @dptr,a dpl,#PORT_ROW ; select row a,r2 movx @dptr,a dpl,#PORT_COL ; output display data a,@r1 movx @dptr,a dpl,#PORT_KBD ; get kbd status movx a,@dptr @r0,a ; next row a,r2 acc.6,nowrap ;...
  • Page 30 endp ;--------------------------------------------------------------------------- ; are we in on/off mode? ; C = 0 if yes proc chkonoff call getmode ; get current mode ; default: yes cjne a,#mode_on,no_on; dispatch sjmp no_on: cjne a,#mode_off,no_off sjmp no_off: setb ; other mode yes: endp ;--------------------------------------------------------------------------- ;...
  • Page 31 setb acc.7 ; show program # on aux display auxdata,a acc.7 ; 2 bytes/entry a,#am_progs r0,a ; transfer data a,@r0 am_prog,a a,@r0 am_prog+1,a reg0 sjmp doswitch public switchon_am switchon_am: auxdata,#15 ; entry without program set doswitch: ; switch on & to AM setb setb MUTE...
  • Page 32 proc switchon ; switch on to AM or FM, whichever was last a,currband ; what was selected? acc.6,switchon_fm sjmp switchon_am ; never reached... endp proc switchoff ; switch off ON,nosave ; when tuner is already off, P1 band info is invalid a,p1 ;...
  • Page 33 ; signal key found sjmp nokey_clr: lastkey,#KEY_NONE ; clear buffer of last key nokey_nclr: setb ; no key found fin: reg2 reg1 reg0 proc kstat ; subroutine: get key status dptr,#PORT_REM ; first check remote control movx a,@dptr a,#3fh ; only bits 0..5 relevant norem ;...
  • Page 34 endp ;--------------------------------------------------------------------------- ; read a time to R4(m):R5(h) ; gets first entered number in a, mode in r3 proc readtime push reg0 r4,a call clrdisp ; first clear display setb dig2dot ; set decimal dot at this point a,r4 cjne a,#0,n_1_0 ;...
  • Page 35 call segtranslate ; display dispdata+3,a a,r0 ; store to minutes b,#10 r4,a loop4: call getmode ; bail out? a,r3 fail call readnum ; get last number loop4 r0,a call segtranslate dispdata+4,a a,r0 a,r4 ; all digits 0..9 valid :-) r4,a ;...
  • Page 36 proc write push reg0 call clrdisp ; clear other stuff r0,#dispdata+1 ; points to leftmost digit loop: ; get a byte from string movc a,@a+dptr done ; terminate at NUL call segtranslate ; otherwise translate... @r0,a ; ...and print dptr ;...
  • Page 37 proc dispfreq AM,amdisp ; display AM or FM call dispfm sjmp done amdisp: call dispam done: endp ;--------------------------------------------------------------------------- ; display AM frequency proc dispam a,am_prog+1 ; get higher byte b,#16 ; split into digits zero ; suppress leading 0 call segtranslate ;...
  • Page 38 a,fm_prog+1 ; display .05 step c,acc.7 acc.0,c acc.2,c call segtranslate dispdata+5,a ; unused place setb endp ;--------------------------------------------------------------------------- ; tune up: manually increment with optional auto-repeat, search proc tuneup public doauto_up auxdata,#15 ; surely not a set program any more! call getautoscan ;...
  • Page 39 endp ;--------------------------------------------------------------------------- ; tune down: manually increment with optional auto-repeat, search proc tunedown public doauto_dn auxdata,#15 ; surely not a set program any more! call getautoscan ; shall we search ? doauto_dn ; yes--> call freq_down ; one manual step down call setfreq call...
  • Page 40 a,am_prog+1 ; optionally increment upper part a,#1 am_prog+1,a amdone: a,am_prog ; hit upper limit? cjne a,#lo(MAX_AM1),done a,am_prog+1 cjne a,#HI(MAX_AM1),done am_prog,#LO(MIN_AM) ; yes-->set to lower limit am_prog+1,#HI(MIN_AM) setb MUTE ; we don't want to hear the PLL sync in this case! sjmp done incfm:...
  • Page 41 call da_s am_prog+1,a amdone: a,am_prog ; hit lower limit? cjne a,#lo(MIN_AM1),done a,am_prog+1 cjne a,#HI(MIN_AM1),done am_prog,#LO(MAX_AM) ; yes-->set to upper limit am_prog+1,#HI(MAX_AM) setb MUTE ; we don't want to hear the PLL sync in this case! sjmp done decfm: a,fm_prog+1 ; first toggle 50kHz flag acc.7 fm_prog+1,a acc.7,fmdone...
  • Page 42 sjmp ishund isten: a,r5 ; tens: store digit r5,a a,#15 call segtranslate ; display dispdata+2,a sjmp loop3 ishund: swap ; 0 or 1: store as 100s r5,a swap ; display 100s call segtranslate dispdata+1,a loop2: call chkonoff ; bail out ? badval call readnum...
  • Page 43 call sub16 ; compare values badval ; C=1 -> not good a,#lo(MAX_FM1) ; compute upper bound b,#hi(MAX_FM1) call lrot16 r0,a r1,b a,r4 ; rotate comparison value b,r5 call lrot16 call sub16 ; compare values badval ; C=0 -> not good ;...
  • Page 44 sjmp ishund ; go on as in other case loop3: call chkonoff ; bail out ? badval call readnum ; get tens loop3 swap ; store them r4,a swap ; display them call segtranslate dispdata+3,a loop4: call chkonoff ; bail out ? badval call readnum...
  • Page 45 ;--------------------------------------------------------------------------- ; program current frequency into synthesizer proc setfreq ; we need the display lines for the synthie ; at this point, therefore clear diaplay dptr,#PORT_ROW ; blank display a,#0ffh movx @dptr,a dptr,#PORT_COL ; bits 0..3 contain register address/data AM,do_am ;...
  • Page 46 do_it: a,#2 ; first, set register 2 to 0 lcall setsyn setb LATCHCLK a,#0 lcall setsyn LATCHCLK a,#1 ; next, value for reg 1 lcall setsyn setb LATCHCLK a,r0 lcall setsyn LATCHCLK a,#3 ; next, value for reg 3 lcall setsyn setb LATCHCLK...
  • Page 47 dptr,#str_nosyn ; print sync error call write a,#delval(800) call delay didsync: MUTE ; turn Audio on again setsyn: a,#15 ; mask nibble a,#2 ; correct value movc a,@a+pc ; read from table movx @dptr,a ; write to port ; done 00h,80h,40h,0c0h;...
  • Page 48 c,b.7 call donibble b.7,c swap psw,b ; get carry results donibble: ; always do when carry set acc.3,nodo ; don't do for 0..7 acc.2,do ; do for C..F acc.2,nodo ; don't do for 8..9 ; -->do for A..B ; correction value subb a,#6 setb...
  • Page 49 endp ;--------------------------------------------------------------------------- ; segment translation; 0-9 ; Bits: segtranslate: movc a,@a+pc 0fch,060h,0dah ; 7-segment codes for decimals 0..9 0f2h,066h,0b6h 0beh,0e0h,0feh 0f6h 09eh,00ah,03ah ; e,r,o 02ah,0b6h,076h ; n,S,y 09ch,0eeh,0ceh ; C,A,P 02eh,07ch,06eh ; h,U,X ;--------------------------------------------------------------------------- ; segment translation; 0-9/A-F hextranslate: movc a,@a+pc 0fch,060h,0dah ;...
  • Page 50 str_phono: "Phono",0 str_aux: "AUX",0 ;--------------------------------------------------------------------------- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx The Macroassembler AS Main Page Latest released version is 1.41r8 (1999-07-11) Latest -current version is 1.42Bld54 (2006-12-19) For Mailing List for AS Users, see bottom of this page Patrick Conrad has provided a Belorussian translation of these pages. Many thanks for his efforts! Click here for his translation.