Witam
Kontynuuję tworzenie swojego sterownika i teraz przyszedł czas na dźwięki.
Otóż w moim urządzeniu muszę zrobić możliwie najprostsze ( mam niewiele wolnego miejsca na pcb) , odtwarzanie plików dźwiękowych.
Będą to krótkie max 3 sekundowe pliki. Nagrane wcześniej na kartę SD pliki ( dokładnie w takim pliku nagrany będzie głos "lektora") , mam zamiar odtworzyć poprzez jakiś wbudowany w urządzenie mini głośniczek. Oczywiście na PCB znajdzie się miejsce na jakiś ewentualny wzmacniacz.
Mój projekt oparłem na atmega 2560 ale procedury związane z dźwiękiem raczej powierzę kolejnemu prockowi (atmega 8 ,16,32,128).
Fajnie by było abym nie musiał do odczytu takiego pliku korzystać z avr-dos.bas , tylko rozwiązać to maksymalnie prosto. Ale oczywiście system plików także się zmieści o ile będzie potrzebny na Mega32. Ważne jest to abym mógł z poziomu PC dorzucać nowe pliki, więc przyjmijmy że system plików jest niezbędny.
Niezwykle dla mnie ważne jest aby odtwarzany głos był wyraźny-zrozumiały (oczywiscie monofoniczny).
Bawiłem się kodem który otrzymałem tu od kolegi z forum lecz jakość jest bardzo kiepska.
Głośnik podłączałem bezpośrednio do portu atmegi32 pod pwm poprzez rezystor 10k i kondensator 100nF.
Dodam że już od dłuższego czasu próbuję coś sklecić lecz z marnym skutkiem.Przeszukiwałem forum i net i natrafiłem albo na bardzo rozbudowane projekty albo kod pisany w C. Dla mnie ważne aby było to w Bascomie i przy uzyciu minimalnej ilości części . Chyba że można zastosować w łatwy sposób jakiś dedykowany do tego układ .
Oczywiście jeśli chodzi o format plików to nie muszą być to Wav-y. Widziałem w necie projekt w którym konwertowano pliki w programie RC_ENCODER ale on przerabia Wav-y na pliki asm,c,bin. A nie wiem jak tego użyć aby czytało to z karty.
Mi chodzi o taki sposób odczytu że podaję w jakiejś zmiennej nazwę pliku do odczytania z SD i bezpośrednio odtworzenie tego. Plików będzie pewnie około 40-50 więc karta SD musi być i nie mogę umieścić plików w jakimś epromie.
oto kod na jakim testuję to:
schemat (pominęłem celowo resztę podzespołów jak karta SD itp.)
![ATMEGA[BASCOM] Najprostsze odtwarzanie Wav . ATMEGA[BASCOM] Najprostsze odtwarzanie Wav .](https://obrazki.elektroda.pl/9_1262097258_thumb.png)
Kontynuuję tworzenie swojego sterownika i teraz przyszedł czas na dźwięki.
Otóż w moim urządzeniu muszę zrobić możliwie najprostsze ( mam niewiele wolnego miejsca na pcb) , odtwarzanie plików dźwiękowych.
Będą to krótkie max 3 sekundowe pliki. Nagrane wcześniej na kartę SD pliki ( dokładnie w takim pliku nagrany będzie głos "lektora") , mam zamiar odtworzyć poprzez jakiś wbudowany w urządzenie mini głośniczek. Oczywiście na PCB znajdzie się miejsce na jakiś ewentualny wzmacniacz.
Mój projekt oparłem na atmega 2560 ale procedury związane z dźwiękiem raczej powierzę kolejnemu prockowi (atmega 8 ,16,32,128).
Fajnie by było abym nie musiał do odczytu takiego pliku korzystać z avr-dos.bas , tylko rozwiązać to maksymalnie prosto. Ale oczywiście system plików także się zmieści o ile będzie potrzebny na Mega32. Ważne jest to abym mógł z poziomu PC dorzucać nowe pliki, więc przyjmijmy że system plików jest niezbędny.
Niezwykle dla mnie ważne jest aby odtwarzany głos był wyraźny-zrozumiały (oczywiscie monofoniczny).
Bawiłem się kodem który otrzymałem tu od kolegi z forum lecz jakość jest bardzo kiepska.
Głośnik podłączałem bezpośrednio do portu atmegi32 pod pwm poprzez rezystor 10k i kondensator 100nF.
Dodam że już od dłuższego czasu próbuję coś sklecić lecz z marnym skutkiem.Przeszukiwałem forum i net i natrafiłem albo na bardzo rozbudowane projekty albo kod pisany w C. Dla mnie ważne aby było to w Bascomie i przy uzyciu minimalnej ilości części . Chyba że można zastosować w łatwy sposób jakiś dedykowany do tego układ .
Oczywiście jeśli chodzi o format plików to nie muszą być to Wav-y. Widziałem w necie projekt w którym konwertowano pliki w programie RC_ENCODER ale on przerabia Wav-y na pliki asm,c,bin. A nie wiem jak tego użyć aby czytało to z karty.
Mi chodzi o taki sposób odczytu że podaję w jakiejś zmiennej nazwę pliku do odczytania z SD i bezpośrednio odtworzenie tego. Plików będzie pewnie około 40-50 więc karta SD musi być i nie mogę umieścić plików w jakimś epromie.
oto kod na jakim testuję to:
$regfile = "M32Def.dat"
$crystal = 16000000
$external Waitms
'Const Xramdrive = 0
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1
Pwm1a = 0
Start Timer1
Config Date = Dmy , Separator = .
Config Clock = Soft
Enable Interrupts
Dim Co_2 As Bit
Dim Bufor As Byte
Dim B As Byte
Dim S As String * 96
'(Config Int0 = Falling
On Int0 Ainit
Portd.2 = 1
sei
Enable Int0
')
$include "Config_MMC.bas"
$include "CONFIG_AVR-DOS.Bas"
Gosub Ainit
Do
Loop
Ainit:
cli
B = Drivecheck() 'u mnie te drivechecki itp. nigdy nie dawały errora ale dałem, żeby było
If B = 0 Then
Gbdriveerror = Driveinit()
Else
Cls
' Lcd "Card not inserted, check Card!"
End
End If
B = Initfilesystem(1)
Cls
If B > 0 Then
' Lcd "Error: " ; B
End
Else
'Lcd "Disksize: " ; Disksize()
Lowerline
'Lcd "Disk free: " ; Diskfree()
End If
Wait 1
S = Dir( "wav.wav")
While Len(s) > 0
Cls
Lcd S ; " " ; Filedate()
Lowerline
s = "wav.wav"
' Lcd Filetime() ; " " ; Filelen()
Open S For Binary As #2
Play:
Do
Get #2 , Bufor
Pwm1a = Bufor
'o tu -------|
Loop Until Eof(#2) <> 0
' | bez return - sam przeskakuje do next
'trzeba dodać obsługę przycisku + skok-|
Wait 10
Nex_t:
Pwm1a = 0
Close #2
S = Dir()
Gosub Play
Wendschemat (pominęłem celowo resztę podzespołów jak karta SD itp.)
