L

LambdaSpeak Speech Synthesizer, Sample Player, RTC, MP3, Serial Interface, MIDI

Started by LambdaMikel, 08:56, 01 May 17

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

pelrun

Quote from: Bryce on 20:39, 10 July 17
State analysis is more or less just a mode where the LA uses the clock of the device you're testing instead of its own internal clock. So the LA is exactly in sync with the DUT. That way you can see exactly what level each pin was at on each clock cycle. Unfortunately modern LAs don't include thiis option any more :(

Bryce.


Really? Both of mine (an OBLS and a DSLogic) have clock inputs. Although they are hobbyist level devices. I don't know what the commercial MSO's and LA's do these days.


My OBLS actually has nearly all of the advanced triggering capabilities of an HP 16550 LA, unfortunately nobody ever managed to write a UI to actually configure them.

Bryce

Yes, quite a few of the opensource FPGA USB type LAs do offer a clock input, but the big commercial MSO's rarely do, which is extremely annoying, because it can't have been very difficult or expensive to add this feature, especially as the Oscilloscope inputs could have been used for this.

Bryce.

LambdaMikel

Had a rough week and really needed to speak to my psychiatrist  :laugh:



This is the native Emic 2 mode of LambdaSpeak (no driver required).

LambdaMikel

Quote from: LambdaMikel on 06:20, 10 July 17Will still need one more PCB revision though unfortunately: the space for the DDI-3 LCD display is still slightly too small.

The new PCBs arrived today, and LambdaSpeak has reached it final form - it blends nicely with DDI-3, and has a loud enough little speaker. But this version is still not MX4 compatible.. However, software is finished by now. 

The MX4 compatible version will have a slightly different layout, and the first MX4-compatible version should be working next weekend. 

Once it is verified that the MX4 compatible version works as planned, I will be uploading a Google Spreadsheet where members interested in purchasing one can sign up such that I can estimate the level of interest and effort it would required to "mass produce" LambdaSpeak.

LambdaMikel

Here is a cost breakdown of LambdaSpeak:


       
  • USPS shipping to Europe: ~ 34 $
  • main PCB: 30 $
  • connector PCB: 10 $ not needed if you have an MX4!
  • Emic 2: ~ 60 $
  • Atmega 328: 4 $
  • Speaker: 4 $
  • PLDs: 5 $
  • DIP switch: 2 $
  • IC Sockets: 5 $
  • IDC headers, angle edge socket connector, IDC box header: ~ 8 $ (or 2 $ if you have an MX4 motherboard)
  • Other components (74LS02, 74LS08, 74LS373, 74LS242, quartz, push button, LEDs, .. ): ~ 10 $
This already adds up to 172 $ or 158 $ for the MX4 version without connector PCB. These are the component prices that I am getting from places like Jameco Electronics, Ebay, Amazon and OshPark.

I need at least 1,5 hours to assemble, test, and ship this, so I would ask for 185 $ resp. 169 $. I know, it's expensive...

The "sign up sheet" I mentioned above will be coming next week or so.

LambdaMikel

Hi board,
there is a slight delay... the latest PCBs which ought to be M4X compatible have a problem.
I will need one more revision  :doh:  That will slow down the project by another 10 days.
I will post any progress here. So I dont have the MX4 compatible board working yet.


In the meantime, I have asked some turnkey PCB assembly service for a quote. It seems
that a small batch of 20 to 40 should be feasible - if that many people can get interested.
The prices for assembly range between 30$ and 60$ per batch (20 vs. 40). Of course, on
top you would have the Emic 2 costs, shipping, etc. But it seems that professional
assembly should be possible and still staying in the 130 $ - 170 $ range. For a very small
interest group, I would just solder them by hand then.


Cheers,
Michael

LambdaMikel

Quote from: LambdaMikel on 20:19, 27 July 17
Hi board,
there is a slight delay... the latest PCBs which ought to be M4X compatible have a problem.
I will need one more revision  :doh:   


Update / the new PCBs will arrive today  :D  I will know by Sunday if it all works out.
Stay tuned  :)

LambdaMikel

OK, it works! This version now has the M4X layout:


--------------|_|---------------
| pin2                   pin50 |
| pin1                   pin49 |
--------------------------------


To make sure this really works with an M4X, at this time I will assemble and
send out one LambdaSpeak to a board member who has volounteered to do
the first M4X test; he gets a special price and of course gets the money back
if it shouldn't work (I don't really have any M4X equipment, but the board works
fine with my "CPC Expansion Port Connector" which also has has been changed
to have the above PIN layout, and hence should be M4X compatible as well by
now). If the volounteer encounters no problems, then more people can order
LambdaSpeak. Depending on how many people would like one, I'll have to consider
a "turnkey assembly service" or not.

More soon after the volounteer has reported back  :)

LambdaMikel

#83
Final post in this thread:
LambdaSpeak v1 is final by now.
It is fully Mother4X compatible (tested), and also works with a CPC 6128 Centronics Expansion port cable.

Thanks to all who helped!! This is a great forum.
The price is still kind of a deal breaker for most potential customers.
It is great that Bryce is looking into cutting down costs and chip count
and redesigning it... stay tuned  :)


rpalmer

Are there two versions of the MX-4?

The version I know looks like the attached picture, yet lamdamikel suggests otherwise.

My version of the expansion bus adapters are going to have pin 1 as shown in the attached picture.

rpalmer

LambdaMikel

Mine looks the same.

Alternatively, for people with a 464 that only need one M4X card / extension, I have this thing
(I call it the "CPC 464 Expansion Port Connector"):


LambdaMikel

Quote from: rpalmer on 22:10, 10 September 17The version I know looks like the attached picture, yet lamdamikel suggests otherwise.

I was describing the PIN layout of the connector on the expansion card (IDC Box Header).... if you plug that into the board, then the "cutout" hole in the box header faces towards you, and the 1 from the IDC box header alligns with the 1 on the Mother4X board female connector as it should.  ;)

LambdaMikel

Quick update - this project isn't dead  :D

The interaction and collaboration with Bryce has already resulted in some significant refactoring and second thoughts regarding the original design of LambdaSpeak. Here is an interim version on the way to LambdaSpeak 2: LambdaSpeak 1.5.

We are not going to sell / produce this one, this is yet another prototype. However, production costs would be significantly lower than LambdaSpeak (1) already. Stay tuned ;)


LambdaMikel

One more milestone passed - we replaced the GAL22V10 + 2 74LS374 FlipFlops with
2 Xilinx CPLDs. The final design will only have 1 big(ger) Xilinx CPLD.

Gryzor

Judging from the pic, output must be a bit garbled [emoji16]

Thanks for the update!

Sent from my HTC 10 using Tapatalk


Bryce


||C|-|E||


Gryzor


GUNHED

Quote from: LambdaMikel on 23:19, 26 November 17
However, production costs would be significantly lower than LambdaSpeak (1) already. Stay tuned ;)


That's great! The cheaper it is the more units can be sold.  :) 
http://futureos.de --> Get the revolutionary FutureOS (Update: 2023.11.30)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> Get the RSX-ROM for LambdaSpeak :-) (Updated: 2021.12.26)

LambdaMikel

#95
Happy new year! Here is the first update of 2018:

In the meantime, the firmware for LambdaSpeak 1.5 and 2.0 is maturing: it now offers many more commands, which will be - on the CPC side - made available via an RSX extension. The control bytes that are understood by the new firmware are:



switch ( control_byte ) {

  case 0xFF : process_reset(); break;


  case 0xEF : native_mode_epson(); break;
  case 0xEE : native_mode_dectalk(); break;
  case 0xED : ssa1_mode(); break;
  case 0xEC : non_blocking(); break;
  case 0xEB : blocking(); break;
  case 0xEA : confirmations_on(); break; 
  case 0xE9 : confirmations_off(); break;   
  case 0xE8 : english(); break;
  case 0xE7 : spanish(); break;


  case 0xDF : stop_command(); break; 
  case 0xDE : flush_command(); break;

  case 0xCF : get_mode(); break;
  case 0xCE : get_volume(); break;
  case 0xCD : get_voice(); break;
  case 0xCC : get_rate(); break;
  case 0xCB : get_language(); break;
  case 0xCA : get_delay(); break;
  case 0xC9 : get_version(); break;
  case 0xC8 : speak_copyright_note(); break;
  case 0xC7 : speak_hal9000_quote(); break;
  case 0xC6 : sing_daisy(); break;
  case 0xC5 : echo_test_program(); break;
  case 0xC4 : test_message(); break;


  case 0xB0 : set_voice_default(); break;
  case 0xB1 : set_voice(1); break;
  case 0xB2 : set_voice(2); break;
  case 0xB3 : set_voice(3); break;
  case 0xB4 : set_voice(4); break;
  case 0xB5 : set_voice(5); break;
  case 0xB6 : set_voice(6); break;
  case 0xB7 : set_voice(7); break;
  case 0xB8 : set_voice(; break;
  case 0xB9 : set_voice(9); break;
  case 0xBA : set_voice(10); break;
  case 0xBB : set_voice(11); break;
  case 0xBC : set_voice(12); break;
  case 0xBD : set_voice(13); break;
  case 0xBE : set_voice(14); break;
  case 0xBF : set_voice(15); break;


  case 0xA0 : set_volume_default(); break;
  case 0xA1 : set_volume(1); break;
  case 0xA2 : set_volume(2); break;
  case 0xA3 : set_volume(3); break;
  case 0xA4 : set_volume(4); break;
  case 0xA5 : set_volume(5); break;
  case 0xA6 : set_volume(6); break;
  case 0xA7 : set_volume(7); break;
  case 0xA8 : set_volume(; break;
  case 0xA9 : set_volume(9); break;
  case 0xAA : set_volume(10); break;
  case 0xAB : set_volume(11); break;
  case 0xAC : set_volume(12); break;
  case 0xAD : set_volume(13); break;
  case 0xAE : set_volume(14); break;
  case 0xAF : set_volume(15); break;


  case 0x90 : set_rate_default(); break;
  case 0x91 : set_rate(1); break;
  case 0x92 : set_rate(2); break;
  case 0x93 : set_rate(3); break;
  case 0x94 : set_rate(4); break;
  case 0x95 : set_rate(5); break;
  case 0x96 : set_rate(6); break;
  case 0x97 : set_rate(7); break;
  case 0x98 : set_rate(; break;
  case 0x99 : set_rate(9); break;
  case 0x9A : set_rate(10); break;
  case 0x9B : set_rate(11); break;
  case 0x9C : set_rate(12); break;
  case 0x9D : set_rate(13); break;
  case 0x9E : set_rate(14); break;
  case 0x9F : set_rate(15); break;


  case 0x80 : set_buffer_delay_default(); break;
  case 0x81 : set_buffer_delay(1); break;
  case 0x82 : set_buffer_delay(2); break;
  case 0x83 : set_buffer_delay(3); break;
  case 0x84 : set_buffer_delay(4); break;
  case 0x85 : set_buffer_delay(5); break;
  case 0x86 : set_buffer_delay(6); break;
  case 0x87 : set_buffer_delay(7); break;
  case 0x88 : set_buffer_delay(; break;
  case 0x89 : set_buffer_delay(9); break;
  case 0x8A : set_buffer_delay(10); break;
  case 0x8B : set_buffer_delay(11); break;
  case 0x8C : set_buffer_delay(12); break;
  case 0x8D : set_buffer_delay(13); break;
  case 0x8E : set_buffer_delay(14); break;
  case 0x8F : set_buffer_delay(15); break;


  }


So everything that gets send to &FBEE with bit 8 set (> 127) is (potentially) a control byte (ASCII for speech is 7 bit).
The get_xxx commands works by putting the currrent value onto &FBEE port, such that it can be read via INP(&FBEE). The value is then available there for a couple of (~ 200) milliseconds, before that port goes back to 0. So, in order to read the get_xxx value, one needs to write a busy loop that checks for > 0 on that address and then exits the loop when 0 is read. The reason for that complicated reading protocol is that this port is also needed for SSA1 synchronization, and that I didn't want to use another port. This also means that there is no "0" setting for volume, voice, etc., everyhing starts at 1.  Also, the port value needs to be shifted to right by 3 bits (divided by 16 - I am using upper nibble).

New features of this firmware - it also supports the DecTalk mode now, such that you can let it sing etc.
The Emic2-based version supported most of these already, because the Emic 2 interface has an extra interface / command GUI layer and microcontroller. However, we are using a "raw" Epson speech IC by now, so we lost this Emic 2 command parser and its driver features.

I still have to write the RSX extension.

LambdaMikel

#96
I have uploaded a little demo of some of the LambdaSpeak firmware features, this time using LambdaSpeak 1.8. This another interim version towards LambdaSpeak 2.0:


https://youtu.be/9lcQwHY9uwA

The video shows some of the control bytes discussed above in action. Also, shows how to use DecTalk parser to make it sing from BASIC. 

LambdaSpeak 2.0 will be the final version we are aiming at, in which the GAL22V10, the 74LS374, and the 74LS244 will be replaced by a single Xilinx XC9572xl TQ100 CPLD... unfortunately, we still have to resolve a timing problem which causes the SSA1 driver to malfunction. Maybe it is the cable length of the breadboard design??

Interestingly, everything else work... only SSA1 driver |say seems to be loosing allophone bytes. Strange!
Well, we will figure it out.

This version of LambdaSpeak does not have that problem though. We hope that LambdaSpeak 2.0 can have the same firmware, and that the pinout of the Atmega 644 will be identical with LambdaSpeak 1.8.

LambdaMikel

... here is the demo program from the video; notice from line 190 on there is the happy birthday song (part of it):


10 OUT &FBEE,&FF
20 a=INP(&FBEE):IF a<>128 GOTO 20
30 PRINT "hit space bar for quiet"
40 OUT &FBEE,&EF
50 WAIT &FBEE,32
60 OUT &FBEE,&EC
70 WAIT &FBEE,32 
80 a$="hello how are you i am lambdaspeak 123456789"
90 FOR i=1 TO LEN(a$)
100 c$=MID$(a$,i,1) 
110 OUT &FBEE,ASC(c$)
120 NEXT
130 OUT &FBEE,13
140 a=INP(&FBEE)
150 IF INKEY$=" " THEN OUT &FBEE,&DF:PRINT "quiet!"
160 IF a<>32 GOTO 140   
170 REM
180 OUT &FBEE,&EE
190 a$="[:phone arpa speak on][:rate 200][:n1][hxae<300,10>piy<300,10> brr<600,22>th<100>dey<600,19>dih<600,15>rdeh<600,14>ktao<600,12>k_<120>_<120>][:n1]"
200 a$=a$+"[:phone arpa speak on][:rate 200][:n3][hxae<300,10>piy<300,10> brr<600,22>th<100>dey_<120>_<120>][:n3]"
210 FOR i=1 TO LEN(a$)   
220 c$=MID$(a$,i,1)
230 OUT &FBEE,ASC(c$)   
240 NEXT
250 OUT &FBEE,13   
260 a=INP(&FBEE)
270 IF INKEY$=" " THEN OUT &FBEE,&DF:PRINT "quiet!"
280 IF a<>32 GOTO 260 
290 REM
300 OUT &FBEE,&CE
310 WAIT &FBEE,255
320 PRINT INP(&FBEE)/16
330 a=INP(&FBEE):IF a<>0 THEN GOTO 330
340 WAIT &FBEE,32
350 OUT &FBEE,&CC
360 WAIT &FBEE,255
370 PRINT INP(&FBEE)/16
380 a=INP(&FBEE):IF a<>0 THEN GOTO 380
390 WAIT &FBEE,32
400 OUT &FBEE,&B2
410 WAIT &FBEE,32
420 OUT &FBEE,&CD   
430 WAIT &FBEE,255 
440 PRINT INP(&FBEE)/16   
450 a=INP(&FBEE):IF a<>0 THEN GOTO 450
460 WAIT &FBEE,32 
470 OUT &FBEE,&CD





zhulien

lambdaspeak is coming along really well, can't wait for a released version. I am guessing it will have dktronics and it's own modes as well as ssa1? can it make a cylon voice?

Bryce

At the moment only SSA-1 emulation has been done, but the long term plan is to have DKTronics emulation too. At the moment I am making some changes so that the firmware can be updated via a USB cable. That will allow for updates after the hardware has been released.

Bryce.

Powered by SMFPacks Menu Editor Mod