Warning: Declaration of bdyssh_menu_titles::start_el(&$output, $item, $depth, $args) should be compatible with Walker_Nav_Menu::start_el(&$output, $item, $depth = 0, $args = Array, $id = 0) in /var/www/jopka/data/www/bdyssh.ru/wp-content/themes/bdyssh/functions.php on line 57
Bdyssh!
Bdyssh! // Бдыщщь!

Аллах прекрасен и любит всё прекрасное, %username%.

Доработка плеера-кассеты для магнитофона (часть 1) / Make cassette mp3 player useable for retrofit (part 1)

Если имеется хорошо сохранившийся внешне кассетный магнитофон, можно его использовать как современный цифровой проигрыватель. Реставрация кассетных магнитофонов для сохранения оригинальных функций практически невозможна на сегодня, так как запасные механические компоненты, прежде всего приводные ремни, более недоступны в сколь-нибудь приемлемом качестве.

А если износился лавсановый бесшовный подмоточный приводной ремень, такой ремонт вообще невозможен впринципе, ни сейчас, ни когда-либо.

К счастью, для преодоления указанной проблемы, были разработаны в большом количестве различные “умные” кассеты, которые вместо плёнки содержат цифровой проигрыватель, и передают сигнал индукцией с головки на головку, так что модификация магнитофона (до определённого предела, см. часть 2) не требуется.

When one have good looking old or vintage analog compact cassette player, it can be used nowadays as modern digital player, while looking much cooler than new players. Unfortunately, fixing and repairing such an old mechanical hardware to maintain original mechanical tape playing functions, is almost impossible today. Mostly due to replacement rubber belts cannot be obtained in acceptable quality anymore.

But we fall into problem even more if plastic glueless belt (yes, plastic) is broken. These replacements are cannot be found at all even theoretically, regardless today or before (TPR-210 recorder is an example).

Fortunately, there are many smart cassettes was developed to solve this problem. These are outlined exactly like standard 10 cm length compact cassettes, but instead of tape they contains digital music player, and sound transferred via same magnetic head as original player head, placed opposite and closed to it. The modification of your player is not needed (unless we want to use part 2 of this article).

 

Рис. 1.

Недорогой плеер-кассета. 

Fig. 1.

Cheap cassette player.

 

 

Эти МП3-проигрыватели вполне дёшевы, и имеют стандартный для любого обычного МП3-плеера набор функций. Качество сборки очень хорошее за исключением шурупов, скрепляющих корпус “кассеты”.

Устройство нормально определяется в Linux/Ubuntu, можно читать и записывать mp3-файлы, работать как с обычным USB-диском. Понятно, что имена файлов должны быть в ASCII.

Но для сколь-нибудь серьёзного использования устройство не подходит и должно быть доработано. Доработка не трудная.

Проблема в том, что пуск/стоп проигрывания устройства не синхронизирован с таковым у магнитофона (устройство запускается отдельно). Такой режим работы никак нельзя навать оптимальным.

Так как головка устройства подпружинена, имеется возможность добавить внутренний датчик (контакт) и определить момент, когда магнитофон включен. При этом его головка надавливает на головку плеера и замыкает датчик.

Но одного датчика недостаточно: Так как кнопки управления, а именно кнопка “Пуск/Пауза/Выкл”, управляется не уровнем, а импульсами, а датчик включен всё время проигрывания, потребуется некое устройство для преобразования.

Был выбран ATtiny13A-SSU, так как он современный, дешёвый, и подходит по габаритам (а главное, он просто был под рукой). Данный МК имеет достаточно низкий ток потребления в следящем (спящем) режиме (много ниже 1 мкА).

Написана несложная программа, которая при переводе датчика из разомкнутого состояния в замкнутое, генерирует импульс “Пуск” (0,3 с), а при размыкании датчика генерирует импульс “Выкл” (2,5 с).

Дополнительным бонусом оказалось то, что устройство запоминает позицию проигрывания при таком управлении.

Также интересно то, что после доработки все функции устройства, такие как управление с кнопок, использование как аудиоплеера и др., сохраняются.

These devices are very cheap and have acceptable functionality for some users. They have overall good quality of manufacture (at least, cheapest device i have).

The player detected as removable drive in Linux/Ubuntu out-of-box, read and write mp3 files works well, while of course filenames should be in ASCII.

But if you want to make real enjoyment with these, they should be modified. The modification is not so hard in any home lab.

The problem is the device start / stop playing state not depend on host player/recorder state. The cassette should be manually turned on before host player ‘Play’ button pressed. Also, device should be manually stopped after.

This is extremely not cool. So we need to fix it.

One may note when open the device, that transducer magnetic head is forced with small compression spring. This is due to player head press on it and move it when player’s mechanical ‘Play’ state activated.

It is good thing to detect: i add a small phosphor bronze bar to the head holder, so it shorts to ground when head is in external ‘Play’ state.

But we can’t control device directly by shorting something in it. Its Play/Pause/Sleep combined button is controlled with pulses, not levels. So we need some translation logic.

I take cheap ATtiny13A-SSU for it. It is quite small, widely available, supported in Linux well. Programmer for it is also incredibly cheap, less than 2.5 USD include worldwide shipping. This micro controller have also very suitable low sleep current, much less than 1 uA.

I write small control program, which make short pulse around 0.3 s imitating Play press when head’s contact becomes shorted from open; and make long pulse around 2.5 s to make Stop/Idle command.

It is also good news that using this mechanism, cassette player saves last track and position when turned off.

It is also interesting that all functions of smartcassete remains in same working state, include using it as standalone mp3 player, etc.

Of course, if you are cool enough to modify existing device firmware to support additional button, you should do it, instead of adding extra IC, according to KISS rule. Write me mailto:jopka@kvidex.ru if you have updated firmware.

 fgggf

Tape player disassembled 1

 

Рис. 2.

Доработка

 

Fig. 2.

How to fix it

 

 

В1. С чего начать?

О1. Немного странный вопрос, учитывая то, что в России никогда не было проблем с программированием микроконтроллеров. Но тем не менее, стоит купить макетную плату (breadboard), программатор, и контроллер в более удобном для мекетирования корпусе – DIP8, отработать и запрограммировать этот же код в SO8 микросхему.

Предостережение: Контроллеры очень заразны. Однажды начав, почти невозможно остановиться.

Q1. I really need this, but i’m novice. How i do all that stuff with microcontroller ?

A1. I suggest two options:

Buy small breadboard, DIP8 microcontroller, and programmer. Go to avrfreaks website and learn how to compile and program assembler code. It is easy, but i don’t know how all it works under Windows. After debug, write same code into smaller SO8 microcontroller.

Or, buy preprogrammed IC from me for 7 USD via Paypal. I will also include a piece of silver-plated contact brass bar, if you need.

 

Исходный код:
Source code:

 

; read 6A : test for correct connection to uC.
; sudo avrdude -p t13 -c usbasp -U lfuse:r:q.txt:i

; clkdiv8 disable - set 7A
; sudo avrdude -p t13 -c usbasp -U lfuse:w:0x7a:m

; sudo avrdude -p t13 -c usbasp -U flash:w:tape.hex

.INCLUDE "tn13def.inc"

.equ	pressbuttonOUTbit = 4	; pin 3
.equ	contactINbit=1		; pin 6 - shared with spi prog OUT pin

;	reset	1  8	vcc
;	pb3	2  7	pb2
;	pb4	3  6	pb1
;	GND	4  5	pb0

.cseg
	rjmp   RESET          ; Reset Handler
	rjmp   EXT_INT0       ; IRQ0 Handler
	rjmp   PC_INT0         ; PCINT0 Handler
	rjmp   TIM0_OVF       ; Timer0 Overflow Handler
	rjmp   EE_RDY         ; EEPROM Ready Handler
	rjmp   ANA_COMP       ; Analog Comparator Handler
	rjmp   TIM0_COMPA     ; Timer0 CompareA Handler
	rjmp   TIM0_COMPB     ; Timer0 CompareB Handler
	rjmp   WATCHDOG       ; Watchdog Interrupt Handler
	rjmp   _ADC            ; ADC Conversion Handler

;EXT_INT0:
PC_INT0:
TIM0_OVF:
EE_RDY:
ANA_COMP:
TIM0_COMPA:
TIM0_COMPB:
WATCHDOG:
_ADC:
	reti

RESET:	ldi    r16, low(RAMEND)		; Main program start
	out    SPL,r16             ; Set Stack Pointer to top of RAM
	cli

; internal pull up probably eat around 1 mA when active (playing).
; try to replace to external 100k...1M later.
	sbi 	portb, contactINbit	; pull up

	ldi	r16, 0b00110000 ; sleep enable, power down sleep mode; The low level of INT0 generates an interrupt.
	out	MCUCR, r16

	ldi	r16, 0b01000000 ; INT0 enable
	out	GIMSK, r16

	sei

main:
	sleep
	nop
	rjmp main
	rjmp main

EXT_INT0:
	sbis	pinb, contactINbit
	rjmp	turn_on

turn_off:
	ldi	r16, 0b00110000 ; sleep enable, power down sleep mode; The low level of INT0 generates an interrupt.
	out	MCUCR, r16

	sbi     ddrb, pressbuttonOUTbit
	sbi     portb, pressbuttonOUTbit
	ldi	r20, 250 ; generate 2.5 s press
	rcall	delay10ms
	cbi     ddrb, pressbuttonOUTbit
	cbi     portb, pressbuttonOUTbit

	rjmp	done

turn_on:
; switch interrupt mode to allow catch rising edge when release contact.
; and switch sleep mode to less deep one.
	ldi	r16, 0b00100011 ; sleep enable, idle sleep mode; The rising edge of INT0 generates an interrupt.
	out	MCUCR, r16

	sbi     ddrb, pressbuttonOUTbit
	sbi     portb, pressbuttonOUTbit
	ldi	r20, 30 ; generate 0.3 s press
	rcall	delay10ms
	cbi     ddrb, pressbuttonOUTbit
	cbi     portb, pressbuttonOUTbit

done:
	reti

delay10ms:
del2:
	ldi	r19, 90
del3:
	ldi	r18, 0
del4:
	nop
	dec	r18
	brne	del4
	dec	r19
	brne	del3
	dec	r20
	brne	del2
	ret

Keywords:

adapter, assembler, atmel, attiny, attiny13a-ssu, avr, BR3166, button, cassette, compact, compact-cassette, fast forward, FF, head, mp3, pause, play, player, recorder, retro, retrofit, REW, rewind, smart cassette, smartcassette, stop, tape, vintage,