klausklaus
Geocacher
Hallo,
seit einigen Tagen versuche ich das Soundmodul "Mo3" bzw. "WT588D-U" unter Verwendung von BASCOM im Three-Wire-Modus zu steuern. Im Flash-Bereich des Bausteins wurden dazu bereits mehrere Sprachsegmente abgelegt. Nach Aktivierung der Anweisung "SDA=0 " und Ausklammerung von "If Addr2 = 1 Then Sda = 1 Else Sda = 0" lassen sie sich mit untenstehendem Testprogramm nach Programmstart auch gemeinsam Abrufen.
Was bisher aber leider noch nicht klappt, ist der für mein später zu erstellendes Programm benötigte Aufruf eines bestimmten einzelnen Sprachfiles. Unter Verwendung der im Datenblatt zu findenden C- und Assembler-Versionen habe ich die untenstehende BASCOM-Subroutine erstellt, aber irgendwo hakt es bei ihr noch. Aktiviert man in ihr die Anweisungen "Print SDA;" und "$Sim" so kann man bei Simulation sehen, dass die Ausgabe der Bitfolge über den Datenport "SDA" fehlerfrei zu sein scheint. Auch sollte das gewählte Timing stimmen, aber dennoch lässt sich das Modul auf diese Weise nicht ansprechen.
Für jeden weiterhelfenden Tipp bin ich dankbar.
Klaus
'------------------------------------------------------------
$regfile = "m328pdef.dat"
$crystal = 16000000
$hwstack = 16
$swstack = 32
$framesize = 32
'$sim
Config Portb = Output
Dim Addr As Byte
Dim Addr2 As Byte
Dim I As Byte
Portb = &B11111111
Sda Alias Portb.2
Cs Alias Portb.1
Scl Alias Portb.0
Declare Sub Speakout
Wait 2
'Sda = 0 'test only ???
Start:
'----------------------------
'Addr = &H9C 'address of segment to be spoken
Addr = 5
Gosub Speakout
End
'----------------------------
Sub Speakout 'speak subroutine
Cs = 0
Waitms 5
For I = 1 To 8
Scl = 0
Addr2 = Addr And 1
If Addr2 = 1 Then Sda = 1 Else Sda = 0 '################
'Print Sda; 'test only
Rotate Addr , Right
Waitus 150
Scl = 1
Waitus 150
Next I
Cs = 1
End Sub
seit einigen Tagen versuche ich das Soundmodul "Mo3" bzw. "WT588D-U" unter Verwendung von BASCOM im Three-Wire-Modus zu steuern. Im Flash-Bereich des Bausteins wurden dazu bereits mehrere Sprachsegmente abgelegt. Nach Aktivierung der Anweisung "SDA=0 " und Ausklammerung von "If Addr2 = 1 Then Sda = 1 Else Sda = 0" lassen sie sich mit untenstehendem Testprogramm nach Programmstart auch gemeinsam Abrufen.
Was bisher aber leider noch nicht klappt, ist der für mein später zu erstellendes Programm benötigte Aufruf eines bestimmten einzelnen Sprachfiles. Unter Verwendung der im Datenblatt zu findenden C- und Assembler-Versionen habe ich die untenstehende BASCOM-Subroutine erstellt, aber irgendwo hakt es bei ihr noch. Aktiviert man in ihr die Anweisungen "Print SDA;" und "$Sim" so kann man bei Simulation sehen, dass die Ausgabe der Bitfolge über den Datenport "SDA" fehlerfrei zu sein scheint. Auch sollte das gewählte Timing stimmen, aber dennoch lässt sich das Modul auf diese Weise nicht ansprechen.
Für jeden weiterhelfenden Tipp bin ich dankbar.
Klaus
'------------------------------------------------------------
$regfile = "m328pdef.dat"
$crystal = 16000000
$hwstack = 16
$swstack = 32
$framesize = 32
'$sim
Config Portb = Output
Dim Addr As Byte
Dim Addr2 As Byte
Dim I As Byte
Portb = &B11111111
Sda Alias Portb.2
Cs Alias Portb.1
Scl Alias Portb.0
Declare Sub Speakout
Wait 2
'Sda = 0 'test only ???
Start:
'----------------------------
'Addr = &H9C 'address of segment to be spoken
Addr = 5
Gosub Speakout
End
'----------------------------
Sub Speakout 'speak subroutine
Cs = 0
Waitms 5
For I = 1 To 8
Scl = 0
Addr2 = Addr And 1
If Addr2 = 1 Then Sda = 1 Else Sda = 0 '################
'Print Sda; 'test only
Rotate Addr , Right
Waitus 150
Scl = 1
Waitus 150
Next I
Cs = 1
End Sub