Have you tried to edit /etc/network/interfaces and restart the network? See the config below:
iface wlan0 inet dhcp
pre-up ip link set wlan0 up
wireless-essid WaveLAN Network
The pre-up is claimed to improve matters. Maybe that is why the network sometimes has to be restarted, instead of issuing iwconfig commands.
The wireless-ap any sometimes helps, sometimes on the contrary.
You could try to rmmod iwl3945 and modprobe it again.
Did you try to disable encryption on your router and does it work then?