Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Исходники » Играем WAV с SD карты


Играем WAV с SD карты

Сообщений 31 страница 60 из 76

31

Stas216 написал(а):

Есть ли какое-нибудь противоядие от сей беды?


Посмотрите здесь или здесь

Двойная буферизация спасёт.

Отредактировано sasha_1973 (2018-03-04 23:38:13)

0

32

sasha_1973 написал(а):

Stas216 написал(а):

    Есть ли какое-нибудь противоядие от сей беды?

Посмотрите здесь или здесь

Двойная буферизация спасёт.

Отредактировано sasha_1973 (Сегодня 23:38:13)

Подпись автора

    "Чем больше узнаешь, тем больше понимаешь, как мало знаешь!" - Сократ


Большое спасибо!

0

33

Примеры глянул с двойной буферизацией, но навороченно шибко. Есть ли более простые решения? К примеру, подогнать скорость побайтного считывания с SD с преобразованием "на лету" в выборки ШИМ. Кстати, есть ли техническая возможность, используя avr-dos считывать карту не блоками по 512 байт, а побайтно, останавливая-продолжая?

0

34

Stas216 написал(а):

К примеру, подогнать скорость побайтного считывания с SD с преобразованием "на лету" в выборки ШИМ


Получите это

Stas216 написал(а):

Кстати, есть ли техническая возможность, используя avr-dos считывать карту не блоками по 512 байт, а побайтно


Нет такой возможности, с SD  Card читается только блоками по 512 байт.

Stas216 написал(а):

Примеры глянул с двойной буферизацией, но навороченно шибко


Там готовые варианты, просто копируйте туда, куда Вам надо.

0

35

sasha_1973 написал(а):

с SD  Card читается только блоками по 512 байт.

Да, но если делать по байтно, то придется один и тот же блок много раз перечитывать, а откладывать себе только нужную позицию/смещение. Скорости такой подход не прибавит, ибо придется как минимум прогонять каждый заход по 512 байт.

0

36

Володя написал(а):

Всем большое спасибо, разобрался, работает только на 4 мгц и только если файлы ложить в папку с именем 01,02....
а если назвать MP3(как в даташите) не хочет запускаться, вот простой код . Это пуск файла и два уровня громкости.
Код:

$regfile = "m8def.dat"
$crystal = 4000000
$hwstack = 32
$swstack = 8
$framesize = 24
$baud = 9600

Config Portc.5 = Input : Set Portc.5
Config Portc.4 = Input : Set Portc.4
Config Portc.3 = Input : Set Portc.3
Config Portb.1 = Output

Do

If Pinc.5 = 0 Then
Printbin &H7E ; &HFF ; &H06 ; &H06 ; &H00 ; &H00 ; &H0F ; &HEF       ' громкость 15
Portb.1 = 1
Waitms 500
Portb.1 = 0
End If
If Pinc.4 = 0 Then
Printbin &H7E ; &HFF ; &H06 ; &H06 ; &H00 ; &H00 ; &H05 ; &HEF       ' громкость 5
Portb.1 = 1
Waitms 500
Portb.1 = 0
End If
If Pinc.3 = 0 Then
  Printbin &H7E ; &HFF ; &H06 ; &H0F ; &H00 ; &H01 ; &H03 ; &HFE ; &HE8 ; &HEF       ' файл
Portb.1 = 1
Waitms 500
Portb.1 = 0
  End If

  Loop


Доброго дня ! А как тут подключать сам DFplayer ? Можно немного комментариев как и что тут делается ? По подключению и по работе программы.
Спасибо !

0

37

Gordon_shumway написал(а):

А как тут подключать сам DFplayer

Как обычно, на порт, UART, только контролим ситуацию через BUSY.

0

38

RDW написал(а):

Gordon_shumway написал(а):

    А как тут подключать сам DFplayer

Как обычно, на порт, UART, только контролим ситуацию через BUSY.


На порт - имеется ввиду аппаратный RX и TX микроконтроллера ?
Сорри, я поподробнее спрошу. Я никак не пойму как выбирать нужный файл. Читает ли он из корня, или нужно создавать папки ?
Как выбрать нужный файл, и его проиграть ?

Спасибо.

0

39

Gordon_shumway написал(а):

имеется ввиду аппаратный RX и TX микроконтроллера

Если знаний работы с МК нет, то "да".

Gordon_shumway написал(а):

Я никак не пойму как выбирать нужный файл. Читает ли он из корня, или нужно создавать папки ?
Как выбрать нужный файл, и его проиграть ?

Тему читать надо внимательно, в этом посте показано как.

0

40

RDW написал(а):

Тему читать надо внимательно, в этом посте показано как.


Да, спасибо, увидел, сегодня целый день разбирался.
Там, как я понял, код не весь ? Некоторые переменные не объявлены, и только первый  байт в DF отправлен.
Вроде дописал. Но никак... Своими кнопками играет, а от МК - не хочет.

У меня Mega 8. TX (PD1) соединил с RX (2 вывод DF).
Я правильно понимаю, что чтобы просто проверить девайс - нужно отправить ему строку:

Printbin &H7E ; &HFF ; &H06 ; &H0F ; &H00 ; &H01 ; &H03 ; &HFE ; &HE8 ; &HEF   ?

Папка 01, файл 03 - все присутствует на карте (я взял звоны из примера).
Вроде разобрался с байтами, но никак не пойму как считать контрольную сумму ?
И что я еще далаю не так ? Не играет.

Спасибо.

0

41

Gordon_shumway написал(а):

Вроде разобрался с байтами, но никак не пойму как считать контрольную сумму ?

В коде в том же показано как считается контрольная сумма. По массиву.

Gordon_shumway написал(а):

Некоторые переменные не объявлены

Вечером могу добавить информацию по остальным переменным (если не забуду).

+1

42

RDW написал(а):

Вечером могу добавить информацию по остальным переменным (если не забуду).


Буду благодарен, спасибо.

0

43

Gordon_shumway написал(а):

не пойму как считать контрольную сумму?

Код:
Dim Mp3_buff(8) As Byte

Sub checksum()
   Local Sum As Integer
   Local I As Byte

   Sum = 0

   For I = 1 To 6
     Sum = Sum + Mp3_buff(i)
   Next I

   Sum = 0 - Sum

   Mp3_buff(7) = High(sum)
   Mp3_buff(8) = Low(sum)

End Sub

Sub send_cmd(byval Cmd As Byte , Byval Feedback As Byte , Byval Dat As Integer)
  Mp3_buff(1) = &HFF
  Mp3_buff(2) = 6
  Mp3_buff(3) = Cmd
  Mp3_buff(4) = Feedback
  Mp3_buff(5) = High(dat)
  Mp3_buff(6) = Low(dat)

  checksum

  Printbin &H7E
  Printbin Mp3_buff()
  Printbin &HEF
End Sub

+1

44

Gordon_shumway написал(а):

Буду благодарен, спасибо.

Добавил в тот пост недостающее, хотя и так понятно было.

0

45

RDW написал(а):

Добавил в тот пост недостающее, хотя и так понятно было.


Да, я все правильно угадал.
И в конце, как я понимаю, нужно добавить:
Printbin #1 , Mp3_data(1);Mp3_data(2);Mp3_data(3);Mp3_data(4) ... Mp3_data(10)   ?

И, #1 - его же нужно открыть сначала ?
Как я понял из мануала - если использовать не софтовый, а хардовый Usart - можно не писать и не открывать #1 ?

Спасибо.
Но все равно не поет... Куда бы еще капнУть ?

0

46

НА МК выходу на чип (куда пытаешься слать команды) просто подключи обычный USB to TTL переходник и посмотри идут ли вообще данные. Научись для начала делать обмен, а потом будешь двигаться дальше с передачей управления.

0

47

Для Gordon_shumway:
Вариант исходника здесь Вас не устраивает ?

0

48

Gordon_shumway написал(а):

Но все равно не поет...

На карте должен быть файл 1.mp3

Код:
Waitms 200
send_cmd 9 , 0 , 1                            ' Воспроизведение с SD карты.
Waitms 200
send_cmd 6 , 0 , 18                           ' Громкость (0-30).
Waitms 200
send_cmd 3 , 0 , 1

0

49

RDW написал(а):

НА МК выходу на чип (куда пытаешься слать команды) просто подключи обычный USB to TTL переходник и посмотри идут ли вообще данные. Научись для начала делать обмен, а потом будешь двигаться дальше с передачей управления.


Заработало с конфигурацией програмного порта.
Наобум назначил PD2 как TX:

Open "comd.2:9600,8,n,1" For Output As #1
Printbin #1 , &H7E ; &HFF ; &H06 ; &H0F ; &H00 ; &H01 ; &H03 ; &HFE ; &HE8 ; &HEF
Close #1


Теперь вопрос: почему на хардовом UARTе не работает ?...

Отредактировано Gordon_shumway (2018-07-31 16:19:56)

0

50

Потому, что софтовый должен работать везде, а хардовый только на определенных выводах, а его конфигурировать надо чуть по другому. А иными словами, надо указать только скорость передачи "$baud" и без всяких "#1". Ну и ножки нужным образом настроить.

Отредактировано RDW (2018-07-31 17:35:27)

0

51

RDW написал(а):

Потому, что софтовый должен работать везде, а хардовый только на определенных выводах, а его конфигурировать надо чуть по другому. А иными словами, надо указать только скорость передачи "$baud" и без всяких "#1". Ну и ножки нужным образом настроить.


ATMega8a, внешний кварц 8 мгц.

PD1(нога 3) подключен на RX (2 нога) DFplayer.

Не работает:

$regfile = "m8adef.dat"
$crystal = 8000000

$baud = 9600                                               

Config Portb.1 = Output

Wait 5

Set Portb.1
Printbin &H7E ; &HFF ; &H06 ; &H0F ; &H00 ; &H01 ; &H03 ; &HFE ; &HE8 ; &HEF
Reset Portb.1

End


---------------------------------------------------------------------------------------------

PD2(нога 4) подключен на RX (2 нога) DFplayer.

Работает:

$regfile = "m8adef.dat"
$crystal = 8000000
                                           
Config Portb.1 = Output

Open "comd.2:9600,8,n,1" For Output As #1

Wait 5

Set Portb.1
Printbin #1, &H7E ; &HFF ; &H06 ; &H0F ; &H00 ; &H01 ; &H03 ; &HFE ; &HE8 ; &HEF

Reset Portb.1

Close #1
End


Проверил на двух мегах.
Что я делаю не так ?

Спасибо.

0

52

Ну как минимум попробовать указать:

Код:
Config Portd.1 = Output

0

53

RDW написал(а):

Ну как минимум попробовать указать:
Код:

Config Portd.1 = Output


Проверил уже после того как написал. Не работает.
И в обучалке  про uart, на которую вы давали ссылку,  нет указания, что порт нужно конфигурировать на выход.

0

54

А порт вообще живой?

+1

55

RDW написал(а):

А порт вообще живой?


Вы таки будете смеяться... Не думал, что на двух мегах8 может быть дохлый порт. Они, конечно, замученные вхлам, но порт-то как мог сгореть ?

Сейчас нашел старую задерганную Attiny2313a - сразу заработало на аппаратром uart.

Всем сорри, проедание мозгов окончено ! :)))

И спасибо за терпение !

PS возможно еще вас помучаю, но это будет уже совсем другая тема !

0

56

Gordon_shumway написал(а):

возможно еще вас помучаю, но это будет уже совсем другая тема

Мучай на здоровье, только старайся использовать полученный опыт (перед постановкой вопроса). Многие вещи можно как правило самому определить ответ.

+1

57

Gordon_shumway написал(а):

Вы таки будете смеяться... Не думал, что на двух мегах8 может быть дохлый порт. Они, конечно, замученные вхлам, но порт-то как мог сгореть ?

Не так давно тоже напоролся на глюки с UART...
Приём данных по UART с ПК  Пост #22
В обычном режиме порт работал нормально.
Теперь, по совету sasha_1973 всегда ставлю по резистору 120...300 Ом в линии UART.

Отредактировано Nord (2018-08-01 12:23:11)

0

58

Пётр написал(а):

Gordon_shumway написал(а):

    не пойму как считать контрольную сумму?

Код:


Спасибо ! У вас понятнее расписано. Внедрил в программу, отлично работает !

0

59

Доброго дня !

Еще раз спасибо за помощь !

Вот пример, но это пока далеко не задуманное устройство, это альфа-демонстрация. :)
https://poster3.radikal.ru/1808/5d/2d1dd7b285ce.jpg

+3

60

Отлично получилось)

0


Вы здесь » Программирование ATMEL в BASCOM. » Исходники » Играем WAV с SD карты