Python + Arduino
Não, ainda não dá para programar em Python para o ATmega, mas dá para acessar a porta serial pelo Python.
Recentemente descobri a existência do PySerial, um módulo para fazer acesso às portas seriais pelo Python, que tem me ajudado bastante a processar dados adquiridos pelo meu microcontrolador.
A melhor parte é que você pode coletar dados e, com ferramentas como Numpy e Matplotlib fazer diversas transformações e plotar gráficos bem interessantes.
Por exemplo, tenho um display de LCD cuja intensidade de luz é controlada por PWM provido pelo Arduino. A intensidade é escolhida de acordo com um valor lido num divisor resistivo com um resistor de 4.7K e um foto-resistor (LDR) que varia de 0 a 20K.
Eu escrevi um pouco sobre LDR aqui.
Para fazer o PWM, a tensão é lida numa porta analógica e passa por uma função escolhida empiricamente para a intensidade de luz ficar adequada ao ambiente. Sabe aquela coisa de que você tá querendo dormir e tem sempre um led de computador, televisão, aparelho de DVD ou outros aceso? Neste caso, o display fica com um mínimo de luminosidade quando está escuro.
Abaixo um gráfico gerado pelo sensor, usando Python.
Tensão lida(Azul), PWM (Verde) X Horário do dia:

Coloquei no pastebin um pequeno script em Python para coletar dados e salvar num arquivo.
Modo de uso:
1) Primeiro modifique a porta serial para a que você usa. No Linux é “/dev/ttyUSB“, no Windows é “COM“. Escolha também a taxa de transmissão adequada. O meu Arduino fica variando de /dev/ttyUSB0 para /dev/ttyUSB1, por isso tem uma função que busca a porta aberta.
2) Chame o script passando o número de amostras (o microcontrolador deve mandar quebras de linhas entre as amostras) e o nome do arquivo a ser gerado. Exemplo:
python meu_script 1234 nome_do_arquivo.txt
Para interromper a amostragem, aperte Ctrl+C e os dados serão salvos no arquivo antes de terminar o programa.
Para número indeterminado de amostras, coloque 0. Vai ficar pegando dados até você apertar Ctrl+C.
Programa foi escrito para Python 3, mas a única modificação necessária para Python 2 é retirar a chamada de str() na função de amostragem, pois a aquisição de dados é feito em strings de bytes e não unicode.
Os dados são salvos no arquivo assim:
['123', '546', '789', ... ]
Para obtê-los novamente no Python, faça:
>>> minha_lista = eval( open(‘nome_do_arquivo.txt’).read() )
Se estiver usando valores inteiros, converta a lista:
>>> minha_lista = [int(i) for i in minha_lista]
Muito bacana esse script! Estou desenvolvendo um sistema de aquisição de dados com arduino e ainda não tinha achado uma solução para salvar os dados. Vou testar esse script e volto a dar o feedback. Obrigado por compartilhar!