Как стать автором
Обновить

Комментарии 54

Взрывозащищенное исполнение. Отлично!
Вот что-то подобное я очень хотел.

Однако, опять же что-то сырое. Хочу автономный плеер. Тёплый и ламповый :)
Сырое, но работает. Автономный, тёплый и ламповый, что не так-то?
Спасибо, теперь понятно. Но я не разделяю вашу точку зрения.
Я делаю корпус из того, что под руку придётся, это сильно экономит время.

Вот например моё готовое устройство RFID-сканер:

Крутое устройство, респект. Что внутрях? Я тоже делал такую читалку.

Не важно из чего и как делается. Важно, чтобы устройство было не на соплях на столе, а законченным.
Arduino+RDM6300. Планировал копировщик, но случайно собрал на другой базе (в другом корпусе собран), поэтому пока остался ридером. Как скучно будет — допилю копирование.

У меня приятель сделал пассивный эмулятор таких меток на AVR.

Можно было не вешать ещё одну платку, а сделать всё на АВР. Я делал.
Поделишься исходниками твоего проекта на AVR? Я бы много времени сэкономил.
Которого, эмуля или ридера? Ридер постараюсь найти, но с кучей переездом и прочим могли пролюбится. А вот эмуль найду.
Давай в личку, а то какой-то оффтоп пошёл?
Может в этом офтопе кто-то найдёт для себя что-то полезное. После обеда всё скину сюда.
Хорошо. Софтовый ридер интереснее, чем эмуль, но кидай всё, что не жалко.
Вот сам эмулятор (то с чего мы начинали).

Сишный код
#include <avr/io.h>
#include <avr/sfr_defs.h>
#include <compat/ina90.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <avr/sleep.h>

#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

volatile int bit_counter=0;
volatile int byte_counter=0;
volatile int half=0;

unsigned char data_card[5][8] = {{0xFF,0xC5,0x38,0x2D,0x19,0xD1,0xC9,0x5A},    //test
                                {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},     // other cards
				{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},    
				{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},    
				{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}};    

unsigned char data[8];

void delay_ms(int ms) {              // 1.000 MHz
  int i;
  for (i=0; i < ms; i++) {
	TCNT0=0;
	while (TCNT0 <  125);
  }
}

ISR(SIG_OUTPUT_COMPARE1A){
    TCNT1=0;

//      if(byte_counter==0) sbi(PORTB,PD1);
//        else cbi(PORTB,PD1);

	if (((data[byte_counter] << bit_counter)&0x80)==0x00) {
	    if (half==0) cbi(PORTB,PB1);
	    if (half==1) sbi(PORTB,PB1);
	}
	else {
	    if (half==0) sbi(PORTB,PB1);
	    if (half==1) cbi(PORTB,PB1);
	}
    
	half++;
	if (half==2) {
	    half=0;
	    bit_counter++;
	    if (bit_counter==8) {
	        bit_counter=0;
	        byte_counter=(byte_counter+1)%8;
		}
	}
}

 
int main(void) {
  int i;
  DDRB=0xFF;
  DDRC=0x00;
  DDRD=0x00;
  PORTC=0x00;

  TCCR0 = 2;             // timer0 clock/8 
//  TCCR1B = 2;		 // timer1 clock/8
  TCCR1B = 3;

//  OCR1A = 254;
//  OCR1A = 32;   //32           

  unsigned char sel = (PINC >> 1) & 0x07;
  OCR1A = 30 + sel;
  
//  for (i=0;i<8;i++) data[i]=data_card[sel][i];
  for (i=0;i<8;i++) data[i]=data_card[0][i];
  
  sbi(TIMSK, OCIE1A);	 // timer1 Output Compare A match

  sei();

  while (1) {

  }
    return 0;  
}




Makefile
MCU=atmega8
CC=avr-gcc
OBJCOPY=avr-objcopy
PROJECT=rfid
CFLAGS=-g -mmcu=$(MCU) -Wstrict-prototypes -Os -mcall-prologues -Wall

#-------------------
all: $(PROJECT).hex
#-------------------
$(PROJECT).hex : $(PROJECT).out 
	$(OBJCOPY) -R .eeprom -O ihex $(PROJECT).out $(PROJECT).hex 
$(PROJECT).out : $(PROJECT).o 
	$(CC) $(CFLAGS) -o $(PROJECT).out -Wl,-Map,$(PROJECT).map $(PROJECT).o 
$(PROJECT).o : $(PROJECT).c 
	$(CC) $(CFLAGS) -Os -c $(PROJECT).c
asm : $(PROJECT).c 
	$(CC) $(CFLAGS) -O -S $(PROJECT).c
# you need to erase first before loading the program.
# load (program) the software into the EEPROM:
load: $(PROJECT).hex
	avrdude -c butterfly -P /dev/ttyUSB0 -b 115200 -p m8 -U flash\:w\:$(PROJECT).hex\:a
#	uisp --erase --upload --verify if=$(PROJECT).hex -dprog=avr910 -dserial=/dev/ttyUSB0 -dspeed=115200 -dpart=auto  -v=3 --hash=12 

#-------------------
#	different programmers and fuse programming if necessary
#	uisp -dserial=/dev/ttyUSB0 -dspeed=115200 --erase --upload --verify if=$(PROJECT).hex -dprog=avr910  -v=3 --hash=12 -dpart=auto
#	uisp --erase --upload --verify if=$(PROJECT).hex -dprog=dapa  -v=3 --hash=12 
#	uisp -dprog=dapa --wr_fuse_l=0x5f --wr_fuse_h=0xd9 -v=3
#-------------------
clean:
	rm -f *.o *.map *.out *.hex
#-------------------



В инете код не найти, автор того документа лично мне его прислал (автор чех). Сейчас ищу сайт моего приятеля из Германии, который сделал этот эмулятор со многими карточками. Его вариация схемы вот ru-radio-electr.livejournal.com/637984.html

Плюс ещё ищу пассивный эмулятор.
ww1.microchip.com/downloads/en/AppNotes/00680b.pdf — отличная пдф-ка о расчётах антенн.

Мой эмулятор выглядел вот так

image

Антенну считал и мотал к нему по мануалу. В ЖЖ можно найти описание как я это делал.

Собственно говоря делался по этому мануалу

Камрад из Германии скрестил эти два проекта и получил такую петрушку

image

Нашёл таки его сайт www.alexanderguthmann.de/en/emulator.html

Инфы море, поэтому можно пошерстить мой ЖЖ по тегу dlinyj.livejournal.com/tag/rfid (там много страниц).
Не ту пдф-ку скинул :(.
www.meraprojekt.com.pl/files/AN411.pdf вот она.

Больше всего доставляет картинка в документации


Про ридер я нагнал :(
Хотя вру, по моему вот этот пепелац, что на фото выше, может и читать и эмулировать
«развязочный конденсатор по питанию — и работать стало в 100% случаев. Ладно, едем дальше…» поясните пожалйста схемой что сделали. А то тоже требовалось читать с SD карты. Вдруг решит проблему.
Все выводы питания SD-карты и ардуино собрал как можно ближе друг к другу и в этом месте поставил конденсатор 10 микрофарад:

Ещё хорошо поставить керамику 0,1 мкФ
Если посмотреть на фото макетки, то она там стоит чуть левее, ближе к сопру, чтобы по звуку было меньше помех.
Я просто комментатору отметил, чтобы он имел это в виду.

Когда я был мелкий, то экономил на кондёрах по питанию. В результате всегда имел много весёлых граблей :)))
Просто натыкать 0.1 не всегда полезно, а иногда и даже вредно. Зависит от спектра помех и резонансных частот конденсаторов. Вот хорошая статья: О развязке питания с примерами с интересными комментариями.
Я уже и забыл про него :)
между плюсом и минусом?
Простите, я наверно слишком молод и не понимаю классики (никогда не было спектрума), но почему нельзя просто перегнать мелодии в mp3 и слушать с буквально чего угодно? Этому есть какие-то обьективные препятствия кроме «тёплый ламповый звук»?

Пожалуйста, поймите меня правильно — мне действительно интересно зачем нужно городить огород вокруг динамика?
Это из разряда почему люди слушают музыку на ламповых усилителях, а не ставят программный звуковой фильтр «лампы» ;)
Я так и подумал. А разве ардуино не разрушает «ламповость» звука? хД
Тут важен оригинальный звуковой чип, который собственно говоря и используется.
А разве lossless формат не дает звук лучшего качества чем может выдать чип?
Или это как лампы подсвеченные светодиодами дающие к окраске звука?
Мне кажется вы не понимаете механизм трекерной музыки, раз задаёте такие вопросы.

Если вы хотите потроллить автора поста, то для начала разберитесь в матчасти.
Я понимаю как работает трекерная музыка. Я не собираюсь тролить автора. Мне правда интересно есть ли разница между звучанием чипа в «живую» или записанного с него звука в lossless(она конечно будет, но будет ли она заметна). Понятно что трекерный файлик будет во много раз меньше чем lossless, но устройств которые могут его проиграть намного больше.
Тут мы упираемся в другую проблему — это перегонку звука. Вопрос в том, как сделать её наиболее тёплой и ламповой? А главное целессобразности этой перегонки, если для её осуществления надо делать такую же приблуду. => проще использовать данную приблуду просто из коробки, не морочась с форматами
Подключить к выходу этой макетки любой комп с нормальной звуковой картой и писать в lossless. Дальше загнать на любой плеер и наслаждаться. Это, если что, не руководство к действию, а просто альтернатива «спять плеер наполовину, забросить его на два года»
Спасибо большое Капитан Очевидность. Выше я как раз об этом говорил.
>А разве lossless формат не дает звук лучшего качества чем может выдать чип?
Ещё совсем недавно люди, собирая компьютер, выбирали звуковую карту, и в многочисленных обзорах сравнивали всякие MIDI банки и их звучание… как сейчас помню AWE32 и т.п. Типа, если вы хотите насладиться настоящим качеством музыки в вашей любимой игре выбирайте супер мега карту и получите оркестровое качество. С чего бы это, если везде одна и та же цифра (и речь тут не о тёплых ламповых проводах из бумаги)?
Продолжаем тему: формат MOD, вот чем он отличается от Wav, к примеру?
Более современное: Csound http://csound.github.io/documentation.html
Ну а теперь переходим к чиповой музыке и, внезапно, оказывается, что это вовсе не музыка, а программа для чипа и в общем случае, мы можем только логи писать и там где было 100 байт программы, у нас запишутся мегабайты логов. Потом смотрим на параметры чипа, и выясняется ещё и что 44КГц мало, что бы эмулировать по этим логам вывод чипа и один в один всё равно не получится, то есть будет играть огромную роль, качество софта, осуществляющего приближение, то есть речь, о LossLess здесь уже не идёт, но да — можно очень точно воспроизвести этот раздутый лог.
Ну сейчас ясное дело цифра, хотя и с разной частотой дискритизации. А тогда если в игре были не mp3, а midi то можно было слышать или пластмассовое детское пианино или сэмплы реального. Хотя и та и та цифровая музыка.
Этот вопрос можно задать большинству DIY разработок.
У меня два ответа, серьёзный и не очень, но гораздо ближе к правде:

1. Получить полезный навык и показать другим интересный несложный проект.
2. Мне так захотелось.
Да я ж не в претензии — я просто не знал что используется оригинальный звуковой чип (к стати, совсем оригинальный, или «точно такой-же»?), как указал dlinyj

И оффтоп: как мне кажется, мотивация «мне так захотелось» намного более полезная чем все остальное. Разумеется, когда речь идет о чем-то более конструктивном чем тупое лежание на диване
Чип самый что ни на есть оригинальный.
Причём рядом лежит его собрат — YM2149F, который подключается похожим образом, но имеет чуть более другие звуковые оттенки, из-за которых было немало «тёплых ламповых срачей». Вот тоже буду сравнивать.
Вообще, я бы послушал вживую. Не могу сказать, что фанат, но интересно
Вот теперь жди пока я в корпусе их оба не соберу.
Тебе же нельзя без корпуса :-)
Вот у меня тоже уже больше года лежит YM2149F купленный наебэй под ЛПТ-проигрыватель… Готов посмотреть на вашу реализацию ;) Ардуинов и шилдов в запасах ну просто завались!
Где искать и по чём? Под линуксом интересно работает?
Так что там смотреть — просто подключаете YM вместо AY и вперёд, номера выводов другие, а программирование точно такое же.

Я вот думаю их подключить одновременно параллельно, один в левое, другой в правое ухо — тогда может и усышу разницу.
Тролинг засчитан
Я, возможно, слепой, но не нашел способа написать вам в личку. Есть такой замечательных архив музыки как zxtunes dot com. Вам должно понравиться.
Спасибо, я знаю про этот сайт. Так как у меня громадный архив трекерной музыки, то там ничего нового я не увидел, но мне очень понравились ремиксы, особенно Putzi — Crazy Comets и Saanvi — Ramparts!
Хорошо. Просто авторы этого сайта стучались ко многим авторам персонально и многое из музыки на этом сайте никогда нигде не публиковалось. А ремиксы я не замечал. Действительно очень круто!
Повторил на Yamaha YM2149. Всё работает.
Спасибо автору за интересную статью.
Скрытый текст

Спасибо что написали об этом. Приятно знать, что не зря потратил время на написание статьи.
Повторил на YM2149F пока на макетке, но в девайс обязательно оформлю. Доволен как слон. Спасибо за статью.

Тоже собирал в далёком 2016, но забыл об этом отписаться. Недавно выкопал, чтобы переделать на чтение дампов с МИДИ-клавиатуры с флоповодом, и решил таки да :-)



(прикрутил еще усилитель для наушников)


К сожалению, очень много треков в моей библиотеке не смогли нормально воспроизводиться, будучи прибитыми гвоздями к кадровой развертке (с шагом 20мс)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации