The main problem with these things is initialization. Does it initialize? You need to wait ungodly amounts of time before it starts talking.
The first time I tried this, though, I had some problems, so I built a little breakpoint routine that would wait for button presses before proceeding. With that, a listing, and a multimeter, it was easy to figure out what was going wrong. If you do this, make sure you debounce the button.