This is about setting up VoIP for over the internet calls, and not using Asterisk with a local PSTN connection, although all of the phones I talk about here, soft and hard, I think would work with Asterisk.
My sister sent me an email asking if we could use Skype to talk for free, since she was using up too many of her minutes on her cell phone talking to our mom. I didn't want to recommend Skype since there are a bunch of issues with their service, it being proprietary, making computers into servers without authorization, and not making AMD64 versions of their software.
The solution that I came up with is to use SIP with Ekiga.net. The SIP clients we use are Twinkle for Linux and X-Lite for other OSs. Sign up for an account on Ekiga.net, and then enter those details into your SIP client. You may need to set the stun server to stun.ekiga.net if you are behind a NAT or router. In X-Lite, for other people to be able to see if you are online or not, you have to add them or their domain (ekiga.net in this case) to the privacy rules list and "Allow status updates", since the default in X-Lite is to deny status queries.
On a softphone, you really should use a headset instead of a built-in mic and the computer speakers, I use the PS2 Logitech headset which has good support under Linux.
Codecs are where the black magic of VoIP comes in. Since everyone has a different internet connection with different limits, the codec that works for one person may not work at all for another person. Add in the limited support some SIP clients have for codecs, and it can be a real mess. My sisters Time Warner Basic Cable upload is so limited we can't use the default and well supported G.711 (which is uncompressed and uses 64kbits/second plus IP overhead), so we have to use GSM, which uses 13kbits/second plus IP overhead. GSM is an older codec, so something like G.726 or Speex might give better quality. Speex in the wideband and ultrawideband versions have twice and four times as many samples per second as a standard telephone (G.711, 8000 samples/second), so they would sound better than a regular telephone if the network bandwidth isn't an issue.
I configured my softphone(Twinkle) to use the following codecs, in order of preference from most to least: GSM, G.726 32 kbps, G.711 A-law.
If you want a hardware phone, you can use something like a Snom 300, which supports dialing to a regular phone or to a sip address which looks like an email address (email@example.com). There are adapters that take an ethernet connection and convert that to a regular phone adapter, like a Linksys PAP2T, but you don't have any kind of display on the phone itself. Codec support is definitely an issue on hardphones or adapters, but these might be better for giving to someone else to be able to call you.
Ekiga.net provides some useful phone numbers for checking your setup, but they all use G.711 A-law, so if your network upload is less than 128kbps, it will not work for you. firstname.lastname@example.org is an echo test, to check that your transmit and receive work, and to check latency. email@example.com hangs up quickly and then you get a call from firstname.lastname@example.org, to see if you can get phone calls. Ekiga.net has more info about the conference rooms, of which there are 10,000 that can be pin protected.
Calling a PSTN phone number is provided by DiamondCard.us, where you pay a per-minute fee for calls and a fixed rate to get a phone number that other people can call.