Обсуждаем цифровые устройства...
Ответить

Re: Эмулятор магнитофона для ZX-Spectrum

Вс янв 22, 2017 19:53:53

da-nie писал(а):Может, у вас он и происходит?
Да нет, может и через две позиции, и через три перескочить. Каждый раз по-разному.
А вот для этого все исходники и идут в комплекте.
Эх, если бы в них что-то понимать. Ну, а если бы я понимал, то вряд ли повторял чужое :)

Re: Эмулятор магнитофона для ZX-Spectrum

Пн янв 23, 2017 07:37:43

Ну, а если бы я понимал, то вряд ли повторял чужое


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

Да нет, может и через две позиции, и через три перескочить. Каждый раз по-разному.


Интересно, а у кого-нибудь ещё такие фишки есть? :roll:

Re: Эмулятор магнитофона для ZX-Spectrum

Пн янв 23, 2017 14:01:47

У меня всё работает нормально и с русским ,и с китайским lcd.Проверьте на ляпы плату,подтягивающие резисторы.
Вложения
emulyator-magnitofona-dlya-zxspectrum-1-5492761.jpg
(199.01 KiB) Скачиваний: 776

Re: Эмулятор магнитофона для ZX-Spectrum

Пн янв 23, 2017 23:52:14

da-nie писал(а):Так это повод разобраться и начать делать своё
Для того чтобы быть телезрителем необязательно самому собирать телевизор :)

P.S. da-nie, чуть больше попользовался магнитофоном и не совсем пойму – то ли это небольшой дребезг, то ли я на кнопку слишком долго жму, они у меня немного тугие. Это что-то типа двойного клика – один быстро кликает, другой так не умеет и у него получается более длинная пауза между кликами (ну, для этого имеется соответствующая настройка). С возрастом сноровка теряется :) Где регулировать время задержки между нажатиями на кнопку?

Кстати, кнопки "местами поменял", спасибо.
Последний раз редактировалось oleg88 Вт янв 24, 2017 05:05:10, всего редактировалось 4 раз(а).

Re: Эмулятор магнитофона для ZX-Spectrum

Вт янв 24, 2017 03:04:56

Фото посмотреть

Re: Эмулятор магнитофона для ZX-Spectrum

Вт янв 24, 2017 17:33:40

Для того чтобы быть телезрителем необязательно самому собирать телевизор


Но если телезритель захотел улучшить управление телевизором, то придётся ему изучить, как это можно сделать. :)

Где регулировать время задержки между нажатиями на кнопку?


Вот тут:

Код:
level_index[0]=index;
 while(1)
 {
  //выводим данные с SD-карты
  //читаем имя файла
  if (FAT_GetFileSearch(string,&FirstCluster,&Size,&Directory)==true) WH1602_SetTextDownLine(string);
  if (Directory==false) sprintf(string,"[%02u:%05u] Файл",level,index);
                   else sprintf(string,"[%02u:%05u] Папка",level,index);
  WH1602_SetTextUpLine(string); 
  _delay_ms(200);
  //ждём нажатий кнопок
  while(1)
  {



Вот этот _delay_ms(200); и надо менять.

Re: Эмулятор магнитофона для ZX-Spectrum

Вт фев 14, 2017 22:16:37

Ошибочку нашел. Но по какой-то причине проявляется только на некоторых SD картах. Например, у меня из пяти карт на четырех ошибка проявляется, на одной нет.
Итак, беру карту, называю ее ZX_Games, в корень записываю три, четыре TAP файла.
В магнитофоне имя первого файл почему-то отображается как XGMS. Имена всех последующих файлов отображаются корректно. Т.е. неверно отображается только имя первого файла (сам файл воспроизводится) и оно формируется из 2, 4, 6, 8 символов названия карты - "ZX_Games" -> "XGMS".

Назв.карты -> Имя 1-го файла
123456789A -> 2468A
1234567 -> 246
12345 -> 24
123 -> 2
1 -> пусто

Re: Эмулятор магнитофона для ZX-Spectrum

Ср фев 15, 2017 05:04:02

Плохо. :( Чтобы исправить, придётся, наверное, вспоминать FAT и пытаться понять, в чём дело... Когда это будет, правда, не скажу.

У кого-нибудь такая ошибка тоже проявляется? Очень похоже, что на месте имени первого файла записано что-то левое из имени карты. Либо МК читает не из той области таблицы FAT, что странно.

Re: Эмулятор магнитофона для ZX-Spectrum

Ср фев 22, 2017 04:58:40

Спасибо за конструкцию! Собрал еще один мафон - все работает безупречно!
От себя добавлю пару плат. Платы сделаны под ЛУТ, да хоть под маркер, дорожки и площадки по возможности большие. Добавил подсветку экрана.
Изображение Изображение
Вложения
ZXTapeEmulator_My_v2_1.rar
(44.38 KiB) Скачиваний: 294
ZXTapeEmulator_My_v2.rar
(43.12 KiB) Скачиваний: 269

Re: Эмулятор магнитофона для ZX-Spectrum

Вт фев 28, 2017 21:00:45

da-nie писал(а):Очень похоже, что на месте имени первого файла записано что-то левое из имени карты.
Но на РС-то карта читается правильно. Еще раз обращу внимание – у меня есть пара карт, с которых имя первого файла читается корректно.

P.S. Не знаю по какой причине, но мне не приходят нотификации с форума, поэтому ответил с такой задержкой.

Добавлено after 11 minutes 34 seconds:
Кстати, Вы как-то сказали
da-nie писал(а):Поискал материал, оказалось, всё-таки карты на 4 ГБ уже SDHC, а не SD. Поэтому с ними работать не будет. Максимальный размер 2 ГБ. Можно, конечно, сделать поддержку карт SDHC, но FAT16 всё равно ограничена 2 ГБ.
Здесь главное не сколько потеряется места на SDHC карте при ее форматировании в FAT16, а доступность карт. Карты объемом 1-2Гб становится найти все труднее и труднее с каждым днем. Ну, а купить карту, например на 8Гб и потерять 6Гб при ее форматировании в FAT16 – не так важно при ее-то "копеечной" цене.

Re: Эмулятор магнитофона для ZX-Spectrum

Ср мар 01, 2017 05:08:52

Но на РС-то карта читается правильно. Еще раз обращу внимание – у меня есть пара карт, с которых имя первого файла читается корректно.


У меня все карты читаются верно. :dont_know: И, я так понял, у остальных тоже. Но с другой стороны, у вас тоже какой-то дребезг кнопок был, которого ни у кого не было. Отсюда можно заключить, что у вас устройство как-то специфически работает само по себе.
Попробуйте зафильтровать питание карты (3.3 В) конденсаторами 0.1 мкФ и 100 мкФ. Есть подозрение, что у вас ошибки чтения карты (я вроде бы CRC принятых блоков 512 байт не проверяю).

Карты объемом 1-2Гб становится найти все труднее и труднее с каждым днем.


Ну, пока ещё ими даже в электричке торгуют. :)

Re: Эмулятор магнитофона для ZX-Spectrum

Ср мар 01, 2017 06:54:41

Конденсаторы по питанию я поставил изначально и на МК, и на картридер. Если бы проблемы были с питанием, или возникали ошибки с чтением карты, то глюк не воспроизводился бы в точности при каждом включении магнитофона/чтении карты.

Мысля, появилась – может быть не карты в магнитофоне читаются с ошибкой, а как-то неверно/иначе/по-разному может записаться информация на карту. На РС это не влияет, т.к. там информация с карты может читаться другими, более полными библиотеками. Например, с более полной или иной корректировкой ошибок. Я вспомнил, у меня в наличии два картридера, и они как-то по-разному работают (читают, пишут, форматируют карты), т.е. конечный результат у них может быть разный. Буду проверять.

Re: Эмулятор магнитофона для ZX-Spectrum

Ср мар 01, 2017 07:20:11

Кажется, понял, в чём дело. У файла бывает атрибут "Имя диска" (хотя для имени диска есть и отдельное поле, но там 11 символов).
Попробуйте вот эту прошивку - я её не проверял в железе (я на работе сейчас, так что устройства с собой нет).

[файл удалён]

А изменил я там вот что:

Код:
...

 if (res==true)
 {
  unsigned char type=GetByte(sFATRecordPointer.CurrentFolderAddr+11UL); 
  if (type&ATTR_VOLUME_ID) return(false);//этот файл - имя диска 
  if ((type&ATTR_DIRECTORY)==0)//это файл
  {
   unsigned char a=GetByte(sFATRecordPointer.CurrentFolderAddr+10UL);
   unsigned char b=GetByte(sFATRecordPointer.CurrentFolderAddr+9UL);
   unsigned char c=GetByte(sFATRecordPointer.CurrentFolderAddr+8UL);
   if (!(a=='P' && b=='A' && c=='T')) return(false);//неверное расширение
  }
  else//если это директория
  {
   unsigned char a=GetByte(sFATRecordPointer.CurrentFolderAddr);
   unsigned char b=GetByte(sFATRecordPointer.CurrentFolderAddr+1UL); 
   if (a==(unsigned char)'.' && b==(unsigned char)'.') *directory=-1;//на директорию выше
                                                   else *directory=1;//на директорию ниже
  }

...


Вписал if (type&ATTR_VOLUME_ID) return(false);//этот файл - имя диска
Вроде бы должно помочь.

Спецификация FAT для интересующихся.

спецификация FAT.doc
(438 KiB) Скачиваний: 266
Последний раз редактировалось da-nie Ср мар 01, 2017 12:19:31, всего редактировалось 1 раз.

Re: Эмулятор магнитофона для ZX-Spectrum

Ср мар 01, 2017 07:57:15

da-nie писал(а):изменил я там вот что
Это, в каком файле? Я прошивку изменял – переназначил кнопки, окультурил отображение информации на дисплее, плюс задержки под китайский дисплей свои. Поэтому готовую прошивку мне неудобно шить, я свою поправлю.

Re: Эмулятор магнитофона для ZX-Spectrum

Ср мар 01, 2017 08:01:24

Тогда просто замените файл fat.h и перекомпилируйте.

Re: Эмулятор магнитофона для ZX-Spectrum

Ср мар 01, 2017 11:26:50

К сожалению не помогло. Да и пока закончу эксперименты ибо, во-первых, панелька скоро придет в негодность от частых извлечений МК. Нужно сделать так чтобы программировать МК не вынимая его из панельки. Во-вторых, нужно МК покупать. У меня уже второй дохнет (ошибка записи по одному из адресов вываливается). Наверное, купил дерьмовые. У них даже маркировка уже стерлась. Ох уж эти китайцы :(

Re: Эмулятор магнитофона для ZX-Spectrum

Ср мар 01, 2017 12:20:56

Вот блин, я не во всех местах внёс исправление. :roll:
Вот тут вроде бы все места с контролем типа файла исправил.

[файл удалён]

А вы что же, убили опять контроллер? Как вам это удалось? :roll:
Последний раз редактировалось da-nie Ср мар 01, 2017 14:54:24, всего редактировалось 2 раз(а).

Re: Эмулятор магнитофона для ZX-Spectrum

Ср мар 01, 2017 14:06:58

da-nie писал(а):Вот тут вроде бы все места с контролем типа файла исправил.

К сожалению не помогло :(

da-nie писал(а):А вы что же, убили опять контроллер? Как вам это удалось?

Не знаю. Один МК раз десять записал, второй раз двадцать и теперь при записи сразу же вываливается ошибка и запись прекращается. Наверное, качество плохое, потер пальцем надпись на МК, и она стерлась, ну не может же быть такое. Ну, либо я что-то не так делаю. У меня есть еще один, записывал уже раз пять, больше не буду, а то вообще останусь без магнитофона.

P.S. Забыл сказать. С новым файлом fat.h появляется какая-то запись на LCD. После сообщения Объем SD карты …МБ, в нижней строке LCD, секунд на 10, появляется сообщение eb_55_aa (подчеркивание это пробел) и затем уже идет сообщение Файловая система FAT16- ок.

Re: Эмулятор магнитофона для ZX-Spectrum

Ср мар 01, 2017 15:03:57

Странно, что не помогло. Больше, вроде как, ничего такого необычного я не вижу в программе. :dont_know:

А надпись можно убрать в файле fat.h (там sprintf стоит)- это просто сигнатура FAT- остатки от отладки. Просто были карты, на которых не находилась файловая система - почему-то при чтении были разные байты каждый раз и сигнатура не отыскивалась. Вот я считанные байты и вывел на экран и забыл убрать после этого.

Один МК раз десять записал, второй раз двадцать и теперь при записи сразу же вываливается ошибка и запись прекращается.


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

потер пальцем надпись на МК, и она стерлась, ну не может же быть такое.


Надпись, конечно, не очень стойкая, но так легко она стираться вроде как не должна.

Re: Эмулятор магнитофона для ZX-Spectrum

Ср мар 01, 2017 15:13:11

da-nie писал(а):не может у вас МК просто сбоить при некоторых условиях

Микроконтроллеров у меня было пять штук и все пять работали одинаково.
Ответить