tag:blogger.com,1999:blog-62535628390607014742024-02-07T06:00:27.709-08:00Circuito Microcontrolador AVRCircuito, projetos microcontrolador AVRUnknownnoreply@blogger.comBlogger6125tag:blogger.com,1999:blog-6253562839060701474.post-638762333578488962013-08-14T05:02:00.002-07:002013-08-14T09:10:38.514-07:00Circuitos Infravermelho<div style="text-align: justify;">
Nesta matéria você encontra circuitos para microcontroladores AVR muito úteis para trabalhar com dispositivos Infravermelho. Com as informações descritas abaixo você consegue construir circuitos baseados em microcontrolador AVR para transmitir e receber sinais em Infravermelho.</div>
<br />
<u>1 - Circuito sincronizador:</u><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5IY2HkRalr0b1y5iQUnkWJeV9StPsmVi15Y8VU7RkSdc8hZTBk8Y_NON5FLrC-eQOPhDul-1FFpD-BCzOinM7h2Pap9uhlUfWiZicnoesXmEZAyYgGdy3Wg_G6iYNuMDM503DYub9Lx4k/s1600/infravermelho+AVR+circuit.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5IY2HkRalr0b1y5iQUnkWJeV9StPsmVi15Y8VU7RkSdc8hZTBk8Y_NON5FLrC-eQOPhDul-1FFpD-BCzOinM7h2Pap9uhlUfWiZicnoesXmEZAyYgGdy3Wg_G6iYNuMDM503DYub9Lx4k/s400/infravermelho+AVR+circuit.jpg" width="400" /></a></div>
<div style="text-align: justify;">
A figura acima ilustra o diagrama básico de um circuito mínimo para trabalhar com sinais infravermelho. Você pode notar que o detector de infravermelho é um componente comum e pode ser encontrado em qualquer aparelho em desuso ou comprado em alguma loja de eletrônicos. Procure pelos códigos TSOP17xx ou SFH506-xx que são mais frequentemente encontrados. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A próxima listagem de programa deve ser gravada no circuito descrito acima. O programa é necessário para auxiliar a decodificar e sincronizar os sinais de, por exemplo, um controle remoto de TV comum. Os sinais de um controle remoto são entendidos como bit 1(Quando há emissão de luz) e bit 0(Quando não há emissão de luz). Portanto, se observa um sinal de onda quadrada na saída 3 do detector. A modulação deste sinal é bem parecida com a modulação serial. Inicialmente há uma preparação, uma transmissão inicial de sinais, antes da chegada de dados úteis. A preparação é sempre a mesma para o pressionamento de qualquer botão do controle. Além disso, isso pode variar de controle para controle e no caso, para este exemplo, utilizou-se um controle de TV Samsung.</div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_OqNL-bnKLIXPiLJZaL7sLwp3BQf-p3oNBbCX9Mxpks9ZcpoMoryctHoqTGzX9jWtJVO-ZBg2EAUdCu4ueq3SwHqgv5iLqjp-tseIrMRQk_KuGF2c2cSXh3_CgGM-0Bfrg5V-q3hGyBMU/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> '--------------------------------------------------------------
' file: IRSync.BAS
' Descr.: Ajuda a sincronizar os sinais do controle remoto.
' Autor.: Claudio F. Dias
' Data.: 10/12/2010
'--------------------------------------------------------------
'
$regfile = "2313def.dat"
$crystal = 10000000
Config Int0 = Falling
Config Portb = Output
Config Portd = Input
' Abilita Interrupção
On Int0 Int0_int ' Inicia o INT0
Dim Reg As Bit
Dim Irflag As Bit ' Variável auxiliar de INT0
Dim I As Word
Dim Rc As Word ' Variável de código
Enable Interrupts
Enable Int0
Do
Reg = 1
Portb = 255 ' Coloca toda porta B em 1
' Wait for InfraRed signal
Irflag = 1
While Irflag = 1
Wend
Disable Int0
' -> Tempo de preparação <-
Waitms 35
Waitus 135
' Lê bit a bit (Rc é uma WORD de 16 bits)
For I = 1 To 16
If Pind.2 = 1 Then
Rc = Rc Or 1
Else
Rc = Rc And &HFFFE
End If
Shift Rc , Left , 1
' Faz transição de porta a cada bit
Reg = Not Reg
If Reg = 1 Then
Portb = 255
Else
Portb = 0
End If
Waitus 1110 ' -> Intervalo entre bits <-
Next
Enable Int0
Waitms 15
Loop
End
Int0_int:
Irflag = 0 ' Interrupção
Return
</code></pre>
<div style="text-align: justify;">
Uma vez que você compilou o programa e gravou o binário no chip você já pode verificar os sinais de saída quando o controle remoto é acionado em direção ao sensor. Para isso ligue a ponteira do canal A do osciloscópio no sensor e a ponteira do canal B do osciloscópio em qualquer pino da porta B do microcontrolador AVR. Provavelmente você vai observar algo parecido com o que está nas figuras abaixo:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixT4CaBrfHUrfp6Vhk7YC4yfKK68Y_AseQL6pNrPHly82_2ag4llIIyyTCQtV-N5Cdnpo2UmsLchuqkAqhWaJcm68LqXGhEVdE49QZdpNGSFet2G2czyIilmOFOGJMpdwKTBdBBlxWD9xv/s1600/infravermelho+AVR+signal.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="228" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixT4CaBrfHUrfp6Vhk7YC4yfKK68Y_AseQL6pNrPHly82_2ag4llIIyyTCQtV-N5Cdnpo2UmsLchuqkAqhWaJcm68LqXGhEVdE49QZdpNGSFet2G2czyIilmOFOGJMpdwKTBdBBlxWD9xv/s400/infravermelho+AVR+signal.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjohW_ZNlpO5DGJoNCF1Uc2z2ATC1rWmnkttfae4LgyqQ0_U51meHhLqTNb7LMgTSmkZb6-DwFJUtUNbbLAXkTLr-anrihlbQrP9pdlDpSb9pnLv40NAzAZbCEjmdtqXuNAXpIylBG-sTpB/s1600/infravermelho+AVR+signal+zoom.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjohW_ZNlpO5DGJoNCF1Uc2z2ATC1rWmnkttfae4LgyqQ0_U51meHhLqTNb7LMgTSmkZb6-DwFJUtUNbbLAXkTLr-anrihlbQrP9pdlDpSb9pnLv40NAzAZbCEjmdtqXuNAXpIylBG-sTpB/s400/infravermelho+AVR+signal+zoom.jpg" width="400" /></a></div>
<div style="text-align: justify;">
O sinal descrito em amarelo é o sinal do controle remoto e o sinal em verde é o da saída da porta B do microcontrolador AVR. Veja na primeira figura os sinais de preparação antes da chegada dos dados úteis. Na segunda figura veja que o sinal verde ocorre exatamente no meio da onda quadrada do sinal amarelo. Veja que são os exatos momentos em que verificamos se há um bit 1 ou 0 naquele instante. No seu caso o sinal verde deve aparecer totalmente fora do sinal amarelo. Você deve corrigir isso ajustando os tempos no programa onde aparece "<span style="background-color: #f0f0f0; font-family: arial; font-size: 12px; line-height: 20px;">-> Intervalo entre bits <-" </span>e também no "<span style="background-color: #f0f0f0; font-family: arial; font-size: 12px; line-height: 20px;">-> Tempo de preparação <-</span><span style="background-color: #f0f0f0; font-family: arial; font-size: 12px; line-height: 20px;"> </span>".<br />
<br />
Espero que você tenha entendido e gostado da matéria. Se precisar de ajuda não deixe de comentar.</div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6253562839060701474.post-76349429634106494782012-06-11T09:31:00.000-07:002012-06-11T09:31:47.218-07:00Gravador Serial AVR<div align="justify">
<br />
Este gravador AVR simples permite que você consiga transferir seus programas em formato .HEX para um microcontrolador AVR sem sacrificar a sua carteira e seu tempo. Este é o mais confiável e simples gravador para microcontroladores AVR disponível e que pode ser construído em um tempo muito pequeno.<br />
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMMKQAPyAU6ZQQ46j-iFAmHMQZOlQdStcP61I1Wn229OB8BRPm6hV2NEdV-URQIMuPmXfrwMBwbRDN7VrPnRkvTV9601YXP0kXFqtLtsN3_F4t6jSzm_dXTv_xhdCtyJxojfTHGq3BxsE/s1600-h/fig94.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5444948431871699378" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMMKQAPyAU6ZQQ46j-iFAmHMQZOlQdStcP61I1Wn229OB8BRPm6hV2NEdV-URQIMuPmXfrwMBwbRDN7VrPnRkvTV9601YXP0kXFqtLtsN3_F4t6jSzm_dXTv_xhdCtyJxojfTHGq3BxsE/s320/fig94.jpg" style="cursor: hand; display: block; height: 241px; margin: 0px auto 10px; text-align: center; width: 320px;" /></a><br />
<br />
O gravador AVR consiste em um esquema de gravação serial in-circuit e uma pequena placa com um socket DIP ao qual se encaixa o microcontrolador e programá-lo de maneira bem prática. Este programador pode ser usado como uma estação de gravação in-circuit, isto é, vc pode conectar o gravador na placa final e programar o microcontrolador sem ter que remover o chip da placa.<br />
Todo o programador foi construído usando componentes comuns e que cabem dentro do conector serial. A placa com o socket DIP foi criada para comportar um microcontrolador de 28 pinos AVR ATmega8, mas você poderá construir placas para qualquer outra série de diferentes formatos de circuito integrado. Este programador é compatível com o popular software de programação PonyProg que mostra uma barra de progresso a medida em que o código binário é transferido para o chip.<br />
<br />
<strong>AVR In-Circuit Serial Programmer</strong><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirn12TCKpLqPPk9g8SvAvIyYu4017TpH2fjsggoOV3B1RR-yXHOAhEcmia4sTmIEEkzOTU2sDqK4XQ36b4JOwq11WeYwHG1LL3bsJ-Yz5-VH5ZTsUGaCd0Ky1uSxZkbEqqJmld5vEDDnw/s1600-h/fig99.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5444955838228687570" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirn12TCKpLqPPk9g8SvAvIyYu4017TpH2fjsggoOV3B1RR-yXHOAhEcmia4sTmIEEkzOTU2sDqK4XQ36b4JOwq11WeYwHG1LL3bsJ-Yz5-VH5ZTsUGaCd0Ky1uSxZkbEqqJmld5vEDDnw/s320/fig99.jpg" style="cursor: hand; display: block; height: 201px; margin: 0px auto 10px; text-align: center; width: 320px;" /></a><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZeGN1Fongc6GGISaepWMr1IUt9aGJeL6meTiR1C85IjZoYLDkVzD5ILq3v4fnUg4yK1WWAZKcldrXmA5bpw93uk6ILm1kC_IT7KLZot_lyJE47xYTub31goLcPwhXQKaQ4lEOHpVBjHc/s1600-h/fig98.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5444955792171291970" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZeGN1Fongc6GGISaepWMr1IUt9aGJeL6meTiR1C85IjZoYLDkVzD5ILq3v4fnUg4yK1WWAZKcldrXmA5bpw93uk6ILm1kC_IT7KLZot_lyJE47xYTub31goLcPwhXQKaQ4lEOHpVBjHc/s320/fig98.jpg" style="cursor: hand; display: block; height: 195px; margin: 0px auto 10px; text-align: center; width: 320px;" /></a><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0_JPt6jQfwl_qv7OnWctPO_etMooWTtARo1ruSLPv50CuL3IXCK7ILyOeYeYOKSCm0RXyOAPZaVD9ExfsOyaEEqOWBdNIxFXe5HNsFO-WM8udGH0KEjrKBbdKadUur3UL-VI6kNdbjfg/s1600-h/fig97.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5444955729546181122" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0_JPt6jQfwl_qv7OnWctPO_etMooWTtARo1ruSLPv50CuL3IXCK7ILyOeYeYOKSCm0RXyOAPZaVD9ExfsOyaEEqOWBdNIxFXe5HNsFO-WM8udGH0KEjrKBbdKadUur3UL-VI6kNdbjfg/s320/fig97.jpg" style="cursor: hand; display: block; height: 142px; margin: 0px auto 10px; text-align: center; width: 320px;" /></a><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyITEYVqY0J6bArYik8mji2nsHrB2uWoocWX6h3u9qHiEmPfDP1y2mOo1Umw4EdUPUz_QjRP1j3ssIH0PMRV2IdcbcRI0Jh8dBv41qU0XzfeHoXS9kKkeSHN-LJv4VLUrEX0iAr5CXQXE/s1600-h/fig96.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5444955596619545202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyITEYVqY0J6bArYik8mji2nsHrB2uWoocWX6h3u9qHiEmPfDP1y2mOo1Umw4EdUPUz_QjRP1j3ssIH0PMRV2IdcbcRI0Jh8dBv41qU0XzfeHoXS9kKkeSHN-LJv4VLUrEX0iAr5CXQXE/s320/fig96.jpg" style="cursor: hand; display: block; height: 142px; margin: 0px auto 10px; text-align: center; width: 320px;" /></a><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefSnqn46NqLug2_5kjQJCx-06Q8sJE0e6EjDVITI3CwP2gKEVx8RF55guj59jJjg05JKjrTUHgYm_LO77K2rwIHACrPaD1eSRQgWPDiACzMVbGzFc02-cNfkzR5wXHU7sNkqpzaGbTdo/s1600-h/fig10.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5445333447925223954" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefSnqn46NqLug2_5kjQJCx-06Q8sJE0e6EjDVITI3CwP2gKEVx8RF55guj59jJjg05JKjrTUHgYm_LO77K2rwIHACrPaD1eSRQgWPDiACzMVbGzFc02-cNfkzR5wXHU7sNkqpzaGbTdo/s320/fig10.jpg" style="cursor: hand; display: block; height: 142px; margin: 0px auto 10px; text-align: center; width: 320px;" /></a><br />
<strong>Placa do Socket AVR</strong><br />
A placa com o socket tem um número mínimo de componentes e é usado para a programação de seu microcontrolador de preferência fora da placa destinada.</div>
<div align="justify">
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu3VNruJ9u2n-6sMKhCpBxShWTRyncmrzUab8mborPIE2N86PzTrV9QTSRWGP8xw-LsY52qYKjND55ZBjXUAk9escMQ1aDeerzgmUnHTgX1pxcw_sF3eHez39xyHmLMMN8zqfkvJ6KN4g/s1600-h/fig02.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5445326479972174642" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu3VNruJ9u2n-6sMKhCpBxShWTRyncmrzUab8mborPIE2N86PzTrV9QTSRWGP8xw-LsY52qYKjND55ZBjXUAk9escMQ1aDeerzgmUnHTgX1pxcw_sF3eHez39xyHmLMMN8zqfkvJ6KN4g/s320/fig02.jpg" style="cursor: hand; display: block; height: 238px; margin: 0px auto 10px; text-align: center; width: 320px;" /></a><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBRKSzlGfR2tgLl0IqjQVaXgoHD5d_7rz2b3VgJWPoVx-zgSTUCt_2oz1UWnObTkkoVwlBFmm9UObDSeURFRYud52zz-9-wlhxx-7qASAsbQ0-ZA7-u5F6sSDvDqk2xdbweinL-mCd9Ho/s1600-h/fig01.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5445326475934375522" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBRKSzlGfR2tgLl0IqjQVaXgoHD5d_7rz2b3VgJWPoVx-zgSTUCt_2oz1UWnObTkkoVwlBFmm9UObDSeURFRYud52zz-9-wlhxx-7qASAsbQ0-ZA7-u5F6sSDvDqk2xdbweinL-mCd9Ho/s320/fig01.jpg" style="cursor: hand; display: block; height: 268px; margin: 0px auto 10px; text-align: center; width: 320px;" /></a><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPDybNtTOWr-oXBrsldkleLoH-Qt_WbjOH6EAhJ2b9TIeGz5UPKODcTsYBd7wzlEeYJdpH_LdbFdVpid9YpNQCSY8lMXoIHgJ_LrUNEsDAdVbO5g8H-3JxDCi0fyTXVeC46StmGtOaxVs/s1600-h/fig00.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5445326345947915522" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPDybNtTOWr-oXBrsldkleLoH-Qt_WbjOH6EAhJ2b9TIeGz5UPKODcTsYBd7wzlEeYJdpH_LdbFdVpid9YpNQCSY8lMXoIHgJ_LrUNEsDAdVbO5g8H-3JxDCi0fyTXVeC46StmGtOaxVs/s320/fig00.jpg" style="cursor: hand; display: block; height: 165px; margin: 0px auto 10px; text-align: center; width: 320px;" /></a><br />
<br />
A placa com o socket, do tipo DIP para 28 pinos, tem um ressonador de 4MHz, ou um cristal com dois capacitores de desacoplamento e mais dois conectores. O conector com dois pinos é uma entrada para o suprimento de uma tensão de +5V para o microcontrolador AVR e o conector com 6 pinos é o ICSP (In-Circuit Serial Programmer).<br />
Ao suprir o microcontrolador com uma tensão externa de +5V como oposta àquela a partir do conector da porta serial do computador assegura que o chip receberá exatamente +5V e isso provê uma confiabilidade maior contra os erros de programação por instabilidade na tensão.<br />
<br />
<strong>PonyProg</strong><br />
Para que seja possível enviar arquivos .hex a partir do computador para o microcontrolador AVR é necessário baixar e instalar o PonyProg2000. Depois da instalação, a primeira coisa que você precisará fazer é configurar o PonyProg para funcionar com o nosso programador AVR. Para fazer isso vá ao menu "Setup" e selecione "Interface Setup". A seguinte tela irá ser mostrada e as áreas em destaque mostram exatamente quais opções devem ser modificadas ou selecionadas.<br />
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmW6ty_7ppmd6EkaMTsPJyccTc97squTfG_MyUqLqKlRfki3DawCkjb9iOQFnTqz1qrfzCHs3GG4kbn7jjl7I_7_Pp1cjDI90ZDkiX3a-XGOTKFg_M477FFmTG5hxtt3w62KGaTU4QyuU/s1600-h/fig03.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5445329142679763794" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmW6ty_7ppmd6EkaMTsPJyccTc97squTfG_MyUqLqKlRfki3DawCkjb9iOQFnTqz1qrfzCHs3GG4kbn7jjl7I_7_Pp1cjDI90ZDkiX3a-XGOTKFg_M477FFmTG5hxtt3w62KGaTU4QyuU/s320/fig03.jpg" style="cursor: hand; display: block; height: 230px; margin: 0px auto 10px; text-align: center; width: 320px;" /></a><br />
<br />
No próximo passo selecione "AVR micro" e o tipo do seu microcontrolador que irá ser programado (ex. ATmega8)<br />
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjT0wR4fCBv1gNnGjktnr_6RvIR5Hurb65t8DiBtKW5PrSlFOlQ0lqT22HTc5VPeyO9DJGkPc98ivQ_-_TGpw8oDkHx7UZwZ1SpfqwsH47h1FmqOqY4EiDjFDGBj1_ZGZQYnrX02PKVVI/s1600-h/fig04.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5445329483383711778" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjT0wR4fCBv1gNnGjktnr_6RvIR5Hurb65t8DiBtKW5PrSlFOlQ0lqT22HTc5VPeyO9DJGkPc98ivQ_-_TGpw8oDkHx7UZwZ1SpfqwsH47h1FmqOqY4EiDjFDGBj1_ZGZQYnrX02PKVVI/s320/fig04.jpg" style="cursor: hand; display: block; height: 107px; margin: 0px auto 10px; text-align: center; width: 320px;" /></a><br />
<br />
Até este ponto a configuração do PonyProg está completa e nos poderemos abrir o programa em .hex com o qual o microcontrolador vai ser gravado. Vá até o menu "File" , selecione "Open Program (FLASH File...", e clique no arquivo .Hex para que seja aberto. Após isso, você verá números em hexa na tela inferior. Se você ainda não conectou o seu programador na porta serial do computador este já é o momento para isso. Tenha certeza de que o programador AVR esteja fisicamente conectado ao seu microcontrolador AVR através do socket da placa ou através do conector de 6 pinos ICSP. Finalmente click sobre o ícone em destaque "Write Program Memory (FLASH), ou vá em "Command" e selecione "Write Program (FLASH)".<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3IDAtg36VaSjm0tDvrcV82DKOm0fWi6nwP-RCaP5Jkl_RjU00SI9LMc2ck2fxPZa_ILk5o4e4o7cc8t0Gl2FxAbL0KzvpiebAIdqjkf7bVF58MoJ9suGacAnZo3UZqNTcN4-K-m8iTWg/s1600-h/fig05.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5445331254424394802" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3IDAtg36VaSjm0tDvrcV82DKOm0fWi6nwP-RCaP5Jkl_RjU00SI9LMc2ck2fxPZa_ILk5o4e4o7cc8t0Gl2FxAbL0KzvpiebAIdqjkf7bVF58MoJ9suGacAnZo3UZqNTcN4-K-m8iTWg/s320/fig05.jpg" style="cursor: hand; display: block; height: 230px; margin: 0px auto 10px; text-align: center; width: 320px;" /></a><br />
<br />
Clique em sim para confirmar a programação<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRq3gP_s2SyFzs7fhsmS2ChOHO32JvlYlR91CPoK7k8bzEzMeDfNjox9RQJeZbFnjcyqqZxZusP6zxDAMVYDxbda3eNMQCNvhc3BYCvsmrrQOU6GAVdP-a7LZGMmDiZXoyFOXy1jA4a1M/s1600-h/fig06.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5445331514129596642" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRq3gP_s2SyFzs7fhsmS2ChOHO32JvlYlR91CPoK7k8bzEzMeDfNjox9RQJeZbFnjcyqqZxZusP6zxDAMVYDxbda3eNMQCNvhc3BYCvsmrrQOU6GAVdP-a7LZGMmDiZXoyFOXy1jA4a1M/s320/fig06.jpg" style="cursor: hand; display: block; height: 78px; margin: 0px auto 10px; text-align: center; width: 320px;" /></a><br />
<br />
Agora tenha paciência até que o processo termine. Haverá dois passos: Primeiro o "Writing..." e depois o "Verifing".<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp0rs2gcmoS4y6qAzibBA0BddtRjvgQ4L5pbPxb9F3YRJrjGgD81PpkVnmZZEvMK1fpA0PtGw9R9Lb_5zj5aApRoHN3Zw4lNNOhsLHkruwDmM5kDq3CTaRl9mnXJV2nKxHLnh_MTmeiT4/s1600-h/fig08.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5445332014630435538" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp0rs2gcmoS4y6qAzibBA0BddtRjvgQ4L5pbPxb9F3YRJrjGgD81PpkVnmZZEvMK1fpA0PtGw9R9Lb_5zj5aApRoHN3Zw4lNNOhsLHkruwDmM5kDq3CTaRl9mnXJV2nKxHLnh_MTmeiT4/s320/fig08.jpg" style="cursor: hand; display: block; height: 106px; margin: 0px auto 10px; text-align: center; width: 234px;" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5lDt5aKkKm26YNRAtnFPpzDyKrR-b12bS2QPOC10okSdPBKlb_Rxk1TmpD6SXax87OhkCMPbxUlClkVVeIWx27R2wI9z9HZm1y1qWkPbD3VfXXMrnqF4bgQcta0iNbakyMKZzG7i_b08/s1600-h/fig07.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5445332010749616386" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5lDt5aKkKm26YNRAtnFPpzDyKrR-b12bS2QPOC10okSdPBKlb_Rxk1TmpD6SXax87OhkCMPbxUlClkVVeIWx27R2wI9z9HZm1y1qWkPbD3VfXXMrnqF4bgQcta0iNbakyMKZzG7i_b08/s320/fig07.jpg" style="cursor: hand; display: block; height: 106px; margin: 0px auto 10px; text-align: center; width: 234px;" /></a><br />
<br />
Após a gravação completa uma janela será exibida "Write Successful" permitindo que você saiba que o microcontrolado AVR foi gravado e que agora está pronto para ser utilizado.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFou_phKw2xvM_pa6SGl_gmp8_UuVftYuAQO9czJiIc2gto-uRsavDU86en4xHuW6LEujr92YdkZb6MxjpzjTjFBpysP1_2yhKvQ8l5Ggi94ZzQob-ZX3T0XNy1zxhCg83RYQnVmH0p4g/s1600-h/fig09.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5445332727772387634" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFou_phKw2xvM_pa6SGl_gmp8_UuVftYuAQO9czJiIc2gto-uRsavDU86en4xHuW6LEujr92YdkZb6MxjpzjTjFBpysP1_2yhKvQ8l5Ggi94ZzQob-ZX3T0XNy1zxhCg83RYQnVmH0p4g/s320/fig09.jpg" style="cursor: hand; display: block; height: 94px; margin: 0px auto 10px; text-align: center; width: 191px;" /></a> <br />
<br />
Fonte: <a href="http://electronics-diy.com/avr_programmer.php">http://electronics-diy.com/avr_programmer.php</a></div>Unknownnoreply@blogger.com6tag:blogger.com,1999:blog-6253562839060701474.post-25390018656212721052012-06-11T09:25:00.002-07:002012-06-11T09:25:47.268-07:00 Fuse Bits do AVR<div style="text-align: justify;">
Neste artigo vou falar sobre o como funciona o Fusebits do microcontrolador AVR. Acredito que muitas pessoas se confunde com relação a programação do fuse bits do microcontrolador AVR. Os novatos fazem perguntas frequentes sobre como configurar o fuse bits e esta foi a principal motivação para escrever este artigo. É importante prestar atenção sobre uma convenção estabelecida por este artigo definida pela figura abaixo:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7_DYlwgXkcsRsjN8reJy4OqanwXEOlxYV0wkplapDW1ZgvX9LIlN3OdpLx_O4-0eEVVBY1yxUqke31U0fPZRZs5Ez598bmFJq18EmxXqTF7BaVNgJMiQZ7hUrQap2mHk4giDKYU1KXbU/s1600/fig0000001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" r6="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7_DYlwgXkcsRsjN8reJy4OqanwXEOlxYV0wkplapDW1ZgvX9LIlN3OdpLx_O4-0eEVVBY1yxUqke31U0fPZRZs5Ez598bmFJq18EmxXqTF7BaVNgJMiQZ7hUrQap2mHk4giDKYU1KXbU/s1600/fig0000001.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: justify;">
A primeira coisa a fazer antes de gravar o microcontrolador é fazer uma configuração dos bits. Isso pode ser feito por um software de programação, por exemplo, o ponyprog. </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="188" r6="true" src="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image001.jpg" width="400" /></a></div>
<br />
A primeira coisa que chama a atenção devem ser as fontes de clock. Há quatro bits para controlar as fontes de clock do Atmega8: CKSEL0, CKSEL1, CKSEL2 e CKSEL3. <br />
<br />
Como você já deve saber, o Atmega8 tem quatro fontes de clock diferentes. <br />
<div>
</div>
<ul>
<li>Cristal externo ou ressonador</li>
<li>Cristal de baixa frequência externo</li>
<li>Oscilador RC externo ou oscilador RC interno calibrado</li>
<li>Fonte de clock externa</li>
</ul>
Na tabela abaixo veja as configurações adequadas para CKSEL0..3<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image003.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="107" r6="true" src="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image003.jpg" width="400" /></a></div>
<div style="text-align: justify;">
Como você deve ter notado, para a maioria dos items acima existem faixas de configuração. Por exemplo, note o External Cristal or Ressonator. Esta configuração tem definições que vão de 1010 até 1111. Estas faixas são deixadas para o usuário escolher o tempo de partida do microcontrolador enquanto o oscilador estabilize o funcionamento antes que haja o processamento da primeira instrução. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Abaixo veja a figura representando a conexão de um um oscilador a cristal externo ou ressonador em XTAL1 e XTAL2 do microcontrolador.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image005.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="160" r6="true" src="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image005.jpg" width="200" /></a></div>
<div style="text-align: justify;">
Em seguida há a configuração do fuse bit CKOPT. Este bit escolhe dois modos diferentes do amplificador de oscilador. Se o CKOPT está programado (Não Checado), então o oscilador oscila com sua amplitude maior amplitude. Isso é muito útil quando se trabalha em ambientes ruidosos ou o terminal XTAL2 é usado para alimentar outro microcontrolador. O lado ruim disso é que o microcontrolador consome mais energia. Se o CKOPT não está programado (checado), então a amplitude oscila em uma faixa menor e a potência consumida fica baixa. Tipicamente, se o oscilador está acima de 8MHz então deixe o CKOPT marcado e programado (Não Checado) abaixo de 8MHz.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Na tabela abaixo você pode ver as opções dos modos de osciladores à cristal:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image007.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="115" r6="true" src="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image007.jpg" width="400" /></a></div>
<div style="text-align: justify;">
Os bits CKSEL0, SUT0 e SUT1 são usados para a escolha do tempo de partida do microcontrolador, isto é, quantos ciclos de clock necessários antes de executar o primeiro comando. Estas configurações são necessárias para assegurar a estabilidade de osciladores à cristal ou ressonadores. </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image009.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="272" r6="true" src="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image009.jpg" width="400" /></a></div>
<span style="font-size: x-small;">- Nota 1: "Estes tem um tempo de partida rápido". Não é adequado para cristais.</span><br />
<span style="font-size: x-small;">- Nota 2: Mais usado com ressonadores cerâmicos para assegurar a estabilidade. É bom para usar com cristais também, mas o dispositivo não opera na frequência máxima.</span><br />
<br />
<div style="text-align: justify;">
Portanto, se você quer um sistema com partida estável é melhor deixar o CKSEL0, SUT0 e SUT1 programados (Não checado) que significa ter um tempo de partida de 65ms.</div>
<br />
<strong>Cristal de baixa frequência</strong><br />
<br />
<div style="text-align: justify;">
Há somente um bit de configuração para CKSEL0, CKSEL1, CKSEL2, CKSEL3 - (1001) - (Não-Checado, Checado, Checado, Não-checado) para o oscilador de baixa frequência. Osciladores de baixa frequência são clocks à cristal típicos onde a frequência está em torno de 32768KHz. As principais opções para este modo são as configurações de tempo de partida com os fuse bit SUT0 e SUT1. </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image011.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="115" r6="true" src="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image011.jpg" width="400" /></a></div>
<span style="font-size: x-small;">- Nota 1: Partida menos estável</span><br />
<br />
<strong>Oscilador RC externo</strong><br />
<br />
<div style="text-align: justify;">
A frequência para este modo é calculada pela fórmula f=1/(3RC) e o valor de C deve ser de pelo menos 22pF. Se CKOPT é programado (Não-checado), então o capacitor de 36pF entre o XTAL 1 e o GND é habilitado. Assim, é necessária somente a conexão de um resistor. Veja a figura abaixo para entender melhor:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image013.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="147" r6="true" src="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image013.jpg" width="200" /></a></div>
E novamente, os modos de operação:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image017.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="110" r6="true" src="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image017.jpg" width="400" /></a></div>
E também os tempo de partida:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image019.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="118" r6="true" src="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image019.jpg" width="400" /></a></div>
<span style="font-size: x-small;">- Nota 1: Não use esta configuração se estiver muito perto da frequência máxima.</span><br />
<br />
<strong>Oscilador RC interno calibrado</strong><br />
<br />
<div style="text-align: justify;">
O oscilador RC interno calibrado é muito utilizado porque não há necessidade de se usar componentes externos. Este provê clocks fixos em 1MHz, 2MHz, 4MHz e 8MHz. Este modo é escolhido pela programação do fuse bits na faixa de 0001 até 0100. Deixe o bit CKOPT desprogramado (checado) para este modo. </div>
<br />
Modos de operação:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image021.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="118" r6="true" src="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image021.jpg" width="400" /></a></div>
<span style="font-size: x-small;">- Nota 1: Por padrão esta é a frequência configurada para todos os microcontroladores atmega8.</span><br />
<br />
A tabela de tempos de partida:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image023.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="123" r6="true" src="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image023.jpg" width="400" /></a></div>
<br />
<strong>Clock Externo</strong><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image025.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" r6="true" src="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image025.jpg" /></a></div>
<div style="text-align: justify;">
O Clock Externo é a maior fonte de equivocos cometidos por iniciantes quando estão começando seus projetos. Para habilitar a fonte de clock externa você tem que deixar os bits CKSEL0, CKSEL1, CKSEL2 e CKSEL3 não programados, isto significa <strong>checados</strong>. </div>
<br />
<strong>Exemplos de como programar as fontes de clock do microcontrolador Atmega8 corretamente.</strong><br />
<br />
<br />
<br />
<br />
<br />
<li>Cristal de 8MHz com carga lenta:</li>
<br />
<a href="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image029.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="38" r6="true" src="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image029.jpg" width="320" /></a> <br />
<br />
<br />
<br />
<li>Ressonador cerâmico de 2MHz com carga rápida:</li>
<br />
<a href="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image031.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="37" r6="true" src="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image031.jpg" width="320" /></a> <br />
<br />
<br />
<br />
<br />
<br />
<li>Ressonador de 32768kHz de frequência estável na partida:</li>
<br />
<a href="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image033.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="34" r6="true" src="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image033.jpg" width="320" /></a> <br />
<br />
<br />
<br />
<li>Oscilador externo RC de 4MHz com capacitor interno habilitado e carga rápida:</li>
<br />
<a href="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image035.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="36" r6="true" src="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image035.jpg" width="320" /></a><br />
<br />
<br />
<li>Se você quer tirar o máximdo de seu atmega8 então escolha 16MHz com carga rápida:</li>
<br />
<a href="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image037.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="35" r6="true" src="http://www.scienceprog.com/wp-content/uploads/AtmegaCLKF/image037.jpg" width="320" /></a> <br />
<br />
Espero que tenha contribuído para resolver as suas dúvidas. Muito obrigado pela sua visita. Não deixe de comentar caso você tenha alguma dúvida.Unknownnoreply@blogger.com9tag:blogger.com,1999:blog-6253562839060701474.post-20687730783052187332012-05-08T10:20:00.002-07:002012-05-08T10:45:40.055-07:00Circuito PWM para LED<div style="text-align: justify;">
Nesta matéria apresento um circuito para fazer o controle do brilho de um LED por PWM utilizando um microcontrolador. A figura abaixo ilustra o circuito que deve ser montado:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiujIMvnscJk9Z9th_ytekH04P6MWFTU3EZJgW0Gp-R6Bg6bXF4f6ky_LV5bi4CdEm1tNnNa5gKEHAmag0SIf5y77VYqejjE8j_COKeqipz72rb0YtnRF4nocMHyiVjOe-AHwyOXLEzIHPM/s1600/LED+PWM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiujIMvnscJk9Z9th_ytekH04P6MWFTU3EZJgW0Gp-R6Bg6bXF4f6ky_LV5bi4CdEm1tNnNa5gKEHAmag0SIf5y77VYqejjE8j_COKeqipz72rb0YtnRF4nocMHyiVjOe-AHwyOXLEzIHPM/s400/LED+PWM.png" width="400" /></a></div>
<div style="text-align: justify;">
Para você conseguir construir este projeto você já deve ter construído o seu próprio Gravador AVR. Se você ainda não tem um gravador de chip sugiro que consulte o artigo <a href="http://circuitosavr.blogspot.com.br/2012/05/gravador-avr-usb.html">Gravador AVR para USB</a>. Este projeto irá utilizar um modulador PWM (Pulse Width Modulator) para conseguir uma intensidade de brilho gradual em um LED. Será utilizado um microcontrolador AT90s2313 para fazer o controle de luminosidade. Além disso, você poderá desenvolver este mesmo projeto se você já tiver um KIT recomendado pelo artigo <a href="http://circuitosavr.blogspot.com.br/2012/05/gravador-avr-usb.html">Gravador AVR para USB</a>. Uma vez que o AT90s2313 é obsoleto, e provavelmente difícil de ser encontrado, você pode troca-lo pelo sucessor ATtiny2313 com algumas pequenas modificações na posição dos pinos. Isso pode ser feito consultando o <a href="http://www.atmel.com/Images/doc2543.pdf">datasheet do Attiny2313</a>. Uma grande vantagem no uso deste microcontrolador mais moderno é que não é preciso utilizar um cristal ou qualquer outro oscilador externo. Este microcontrolador vem com um oscilador interno de 1MHz. Assim, você pode suprimir os componentes C1, C2 e Q1 do diagrama esquemático mostrado pela figura acima. Além disso, os componentes R1 e C3 associados com o circuito de RESET também podem ser omitidos (no caso do attiny2313) restando somente o capacitor de bypass C4, o resistor R2 e o LED.<br />
<br />
Compile o seguinte programa e grave no microcontrolador utilizando o gravador AVR para USB.</div>
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_OqNL-bnKLIXPiLJZaL7sLwp3BQf-p3oNBbCX9Mxpks9ZcpoMoryctHoqTGzX9jWtJVO-ZBg2EAUdCu4ueq3SwHqgv5iLqjp-tseIrMRQk_KuGF2c2cSXh3_CgGM-0Bfrg5V-q3hGyBMU/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> /*
* ----------------------------------------------------------------------------
*
* Demonstração de um programa AVR simples em C
* O brilho do LED é controlado por PWD. Depois de cada
* periodo do PWM , o valor do PWM eh incrementado ou
* decrementado.
*
*/
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include "iocompat.h"
enum { UP, DOWN };
ISR (TIMER1_OVF_vect)
{
static uint16_t pwm;
static uint8_t direction;
switch (direction)
{
case UP:
if (++pwm == TIMER1_TOP)
direction = DOWN;
break;
case DOWN:
if (--pwm == 0)
direction = UP;
break;
}
OCR = pwm;
}
void
ioinit (void)
{
/* Timer 1 is 10-bit PWM (8-bit PWM on some ATtinys). */
TCCR1A = TIMER1_PWM_INIT;
/*
* Start timer 1.
*
* NB: TCCR1A and TCCR1B could actually be the same register, so
* take care to not clobber it.
*/
TCCR1B |= TIMER1_CLOCKSOURCE;
/*
* Run any device-dependent timer 1 setup hook if present.
*/
#if defined(TIMER1_SETUP_HOOK)
TIMER1_SETUP_HOOK();
#endif
/* Set PWM value to 0. */
OCR = 0;
/* Enable OC1 as output. */
DDROC = _BV (OC1);
/* Enable timer 1 overflow interrupt. */
TIMSK = _BV (TOIE1);
sei ();
}
int
main (void)
{
ioinit ();
/* loop forever, the interrupts are doing the rest */
for (;;) /* Note [7] */
sleep_mode();
return (0);
}
</code></pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6253562839060701474.post-15211217320685531962012-05-08T06:40:00.000-07:002012-05-08T10:08:01.418-07:00Gravador AVR USB : Usando pela primeira vez<div class="separator" style="clear: both; text-align: justify;">
Neste artigo falo sobre como utilizar o circuito Gravador AVR USB pela primeira vez. A figura abaixo mostra o Gravador AVR USB após a montagem dos componentes em uma placa matriz de pontos padrão. Este gravador é baseado no driver USBasp que devem ser instalados no computador conforme explicado em breve.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbBQC3Hk-wPYyaIn_9nxCP_9LrIkdIFF6YcxzSlBBI-dpLcLNtnsnnTRw3txAZSk7rpPycjDzu3ZEr8IHEYtehrLuncEwTb5ZG_IZ3q5z7ok8toqYb-e_NO0mLdUj7_5dC-vtK3t9cIx8/s1600/fig035.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" ex="true" height="236" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbBQC3Hk-wPYyaIn_9nxCP_9LrIkdIFF6YcxzSlBBI-dpLcLNtnsnnTRw3txAZSk7rpPycjDzu3ZEr8IHEYtehrLuncEwTb5ZG_IZ3q5z7ok8toqYb-e_NO0mLdUj7_5dC-vtK3t9cIx8/s320/fig035.jpg" width="320" /></a></div>
<div style="text-align: justify;">
Antes de ligar o gravador AVR você deve conferir o circuito pelo menos mais umas 50 vezes. Isso servirá para ter certeza de que não há conexões erradas que pode comprometer o funcionamento do dispositivo, ou até mesmo da porta USB (Principalmente se houver um curto circuito entre o VCC e o GND). Por isso, tome bastante cuidado. Após ter tomado todos os cuidados você pode conectar a placa. No instante em que é conectada o windows acusa a detecção de um novo dispositivo:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ-SPC_NHhXrHo84AxfmdBOpw0-od12dAdNqr83KtsLJpZneoInxhgCwbOkxJIIoJtcmW0bbXDGXI2lF-cojtO0GwBGpqq4lc0NmqHGigpEB-bfSNjyu5p9JFTNpeXVlRnO9r1TmP79Jo/s1600/fig039.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" ex="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ-SPC_NHhXrHo84AxfmdBOpw0-od12dAdNqr83KtsLJpZneoInxhgCwbOkxJIIoJtcmW0bbXDGXI2lF-cojtO0GwBGpqq4lc0NmqHGigpEB-bfSNjyu5p9JFTNpeXVlRnO9r1TmP79Jo/s1600/fig039.jpg" /></a></div>
<br />
Em seguida surgirá o assistente de hardware. Indique o diretório os quais estão os drivers necessários para que o USBasp funcione corretamente. Você pode fazer o <a href="http://www.fischl.de/usbasp/usbasp-windriver.2009-02-28.zip">Download dos drivers USBASP!</a> Descompacte em um diretório e indique sua localização pelo assistente de hardware. Siga as instruções mostradas pelas figuras abaixo:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLJLCraS_7lVp2_3bivkKLwD8d2-EbqHwvyjFblVMfYCEfc8bv1FhHCK9f80ufA8vGo44Fbwz7Zcaz3h4Hhte7z2mYtPnuAqBRK2FPaKUciNO8B_OlM2X_XZwuaUeD3I5gysGmBAWVybo/s1600/fig040.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" ex="true" height="305" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLJLCraS_7lVp2_3bivkKLwD8d2-EbqHwvyjFblVMfYCEfc8bv1FhHCK9f80ufA8vGo44Fbwz7Zcaz3h4Hhte7z2mYtPnuAqBRK2FPaKUciNO8B_OlM2X_XZwuaUeD3I5gysGmBAWVybo/s400/fig040.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg30aSaxHq5h9sVYxcSAzHOghRX_klPFkG2qPu52Lji7BuFIBjpEwZjCNalYtGw0NAGT4L0oULHBe03SnpRDKzphBL8kv_dJyLT5DdqhVCLc-zlyAV33wBWt-IebrLl6t6h1gXMNVWM_DA/s1600/fig041.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" ex="true" height="306" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg30aSaxHq5h9sVYxcSAzHOghRX_klPFkG2qPu52Lji7BuFIBjpEwZjCNalYtGw0NAGT4L0oULHBe03SnpRDKzphBL8kv_dJyLT5DdqhVCLc-zlyAV33wBWt-IebrLl6t6h1gXMNVWM_DA/s400/fig041.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_FHnfM1Lfadox5zhR1xIZlqdLmxyeZ10zBoCllwtsw_nlHmUA-emSjPP6rLrkzrMRvStGFpt1zBJisBUUGiUNsNpPvAjecg41_XgSpoHeNCmW7Iy6gqUg_eLWjEAg3iqIuTzBP4l31t0/s1600/fig042.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" ex="true" height="306" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_FHnfM1Lfadox5zhR1xIZlqdLmxyeZ10zBoCllwtsw_nlHmUA-emSjPP6rLrkzrMRvStGFpt1zBJisBUUGiUNsNpPvAjecg41_XgSpoHeNCmW7Iy6gqUg_eLWjEAg3iqIuTzBP4l31t0/s400/fig042.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Se ao final da instalação você vai notar que em seu gerenciador de dispositivos o driver USBasp aparece instalado como indicado na figura seguinte. Logo, está tudo funcionando corretamente.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1kUq0eXoMXQ39xpPYSXCptLQtN-2A8fQ-_vXQw9ZyWTex9CyCda_4lW_DRfCuB014hHJ5xh45BQUVnX_Hy3-GWXi1fYfzTN-1wRQB7B0Q-CT4IdsaHFmdkr_PLfGKXOL_VEF3Q-JrKCc/s1600/fig043.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" ex="true" height="306" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1kUq0eXoMXQ39xpPYSXCptLQtN-2A8fQ-_vXQw9ZyWTex9CyCda_4lW_DRfCuB014hHJ5xh45BQUVnX_Hy3-GWXi1fYfzTN-1wRQB7B0Q-CT4IdsaHFmdkr_PLfGKXOL_VEF3Q-JrKCc/s400/fig043.jpg" width="400" /></a></div>
<br />
Se caso tiver dúvidas não exite em postar um comentário.<br />
<br />
<div style="text-align: center;">
<span style="font-size: large;"><span style="color: red;">Veja também</span>: Monte um <a href="http://circuitosavr.blogspot.com.br/2012/05/gravador-avr-usb-usando-pela-primeira.html">Gravador AVR USB</a></span></div>
</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6253562839060701474.post-30587296828189467392012-05-08T06:22:00.002-07:002012-05-08T10:06:47.318-07:00Gravador AVR USB<div style="text-align: justify;">
<span style="background-color: white;">Neste artigo mostro como montar um gravador AVR USB para gravar microcontroladores da família AVR. Um gravador AVR é muito simples de ser construído quando se tem uma porta serial disponível no computador. Mas, e quando esta porta não existe? Bom, vou falar sobre esta solução neste artigo.
</span></div>
<div style="text-align: justify;">
<span style="background-color: white;"><br /></span></div>
<div style="text-align: center;">
<script type="text/javascript">
<!--
google_ad_client = "ca-pub-4111281017563693";
/* postagem_avrusb */
google_ad_slot = "3443712578";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>
</div>
<div style="text-align: justify;">
<span style="background-color: white;">Por ser mais conveniente, hoje tenho um notebook que possui apenas portas USB. Assim, para gravar microcontroladores AVR é necessário um gravador USB. Felizmente encontrei na internet o <a href="http://www.fischl.de/usbasp/" style="color: #888888; text-decoration: none;">USBasp - USB programmer for Atmel AVR controllers</a>. Este é bem fácil de montar e não há muitos componentes. Os drivers deste gravador são baseados no USBASP. Veja o diagrama esquemático na próxima figura:
</span></div>
<div class="separator" style="clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpExFk0YakYN2ho_J7Qp3LPFGdTbCRvOegDpRaCZ4PvhjywPnIB9RM5r687rEg1yAtoalr4BYBzu1quMomKHUME6GtvGduFD3CeS-fxK9sNvooE4MEXKJ4T3G0dFNmlXsaEyCkQqpPLLE/s1600/fig0000007.png" imageanchor="1" style="background-color: white; color: #888888; margin-left: 1em; margin-right: 1em; text-decoration: none;"><img border="0" ex="true" height="345" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpExFk0YakYN2ho_J7Qp3LPFGdTbCRvOegDpRaCZ4PvhjywPnIB9RM5r687rEg1yAtoalr4BYBzu1quMomKHUME6GtvGduFD3CeS-fxK9sNvooE4MEXKJ4T3G0dFNmlXsaEyCkQqpPLLE/s400/fig0000007.png" style="-webkit-box-shadow: rgba(0, 0, 0, 0.0976563) 1px 1px 5px; background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-style: solid; border-color: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: rgb(238, 238, 238); border-right-style: solid; border-top-color: rgb(238, 238, 238); border-top-style: solid; border-width: initial; box-shadow: rgba(0, 0, 0, 0.0976563) 1px 1px 5px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; position: relative;" width="400" /></a></div>
<span style="background-color: white;"><br /></span><br />
<span style="background-color: white;">Observe no diagrama há outro microcontrolador AVR para fazer o interfaceamento entre o dispositivo a ser gravado e a porta USB. Assim, você precisa de uma máquina com uma porta serial ou paralela e usar um <a href="http://aplnx.blogspot.com/2010/03/programador-avr-simples.html" style="color: #888888; text-decoration: none;">gravador simples</a> para gravar o firmware que controla o programador.
</span><br />
<strong style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px;"><br /></strong><br />
<strong style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px;">Firmware e circuito:</strong><br />
<span style="background-color: white;"><span style="color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px;">Você pode baixar o arquivo com firmware e circuito </span><a href="http://www.fischl.de/usbasp/usbasp.2009-02-28.tar.gz" style="color: #888888; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px; text-decoration: none;">aqui.</a></span><br />
<span style="background-color: white;"><br /></span><br />
<strong style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px;">Software de gravação compatíveis:</strong><br />
<span style="background-color: white;"><br /></span><br />
<span style="background-color: white;"><span style="color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px;">•</span><a href="http://download.savannah.gnu.org/releases/avrdude/" style="color: #888888; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px; text-decoration: none;">AVRDUDE</a><span style="color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px;"> suporta USBasp desde a versão 5.2.</span></span><br />
<span style="background-color: white;"><span style="color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px;">•</span><a href="http://www.mcselec.com/" style="color: #888888; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px; text-decoration: none;">BASCOM-AVR</a><span style="color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px;"> suporta USBasp desde a versão 1.11.9.6.</span></span><br />
<span style="background-color: white;"><span style="color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px;">•</span><a href="http://khazama.com/project/programmer/" style="color: #888888; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px; text-decoration: none;">Khazama AVR Programmer</a><span style="color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px;"> é um aplicativo para Windows XP/Vista para USBasp e avrdude.</span></span><br />
<span style="background-color: white;"><span style="color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px;">•</span><a href="http://extremeelectronics.co.in/avr-tutorials/gui-software-for-usbasp-based-usb-avr-programmers/" style="color: #888888; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px; text-decoration: none;">eXtreme Burner - AVR</a><span style="color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px;"> é outro aplicativo para Windows para USBasp baseado em programadores AVR.</span></span><br />
<span style="background-color: white;"><br /></span><br />
<div style="color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px; text-align: justify;">
<span style="background-color: white;">De todos os programas gravadores listados acima eu prefiro o AVRDUDE que é simples, rápido e pode ser utilizado na linha de comando. Já o BASCOM vem em segundo lugar por facilitar ao extremo o processo de gravação com somente alguns clicks de configuração.</span></div>
<span style="background-color: white;"><br /></span><br />
<strong style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px;">Hardware:</strong><br />
<div style="color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px; text-align: justify;">
<span style="background-color: white;">Não há um único layout da placa deste gravador USB. Você mesmo pode usar ao máximo a sua criatividade para criação. No meu caso construí o hardware utilizando placas padrão com furos independentes. Veja as fotos abaixo:</span></div>
<div class="separator" style="clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbBQC3Hk-wPYyaIn_9nxCP_9LrIkdIFF6YcxzSlBBI-dpLcLNtnsnnTRw3txAZSk7rpPycjDzu3ZEr8IHEYtehrLuncEwTb5ZG_IZ3q5z7ok8toqYb-e_NO0mLdUj7_5dC-vtK3t9cIx8/s1600/fig035.jpg" imageanchor="1" style="background-color: white; color: #888888; margin-left: 1em; margin-right: 1em; text-decoration: none;"><img border="0" ex="true" height="295" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbBQC3Hk-wPYyaIn_9nxCP_9LrIkdIFF6YcxzSlBBI-dpLcLNtnsnnTRw3txAZSk7rpPycjDzu3ZEr8IHEYtehrLuncEwTb5ZG_IZ3q5z7ok8toqYb-e_NO0mLdUj7_5dC-vtK3t9cIx8/s400/fig035.jpg" style="-webkit-box-shadow: rgba(0, 0, 0, 0.0976563) 1px 1px 5px; background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-style: solid; border-color: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: rgb(238, 238, 238); border-right-style: solid; border-top-color: rgb(238, 238, 238); border-top-style: solid; border-width: initial; box-shadow: rgba(0, 0, 0, 0.0976563) 1px 1px 5px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; position: relative;" width="400" /></a></div>
<div class="separator" style="clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px; text-align: center;">
<span style="background-color: white;"><br /></span></div>
<div class="separator" style="clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px; text-align: justify;">
<span style="background-color: white;">Aproveitando o ritmo também construí um hardware para testes. É uma placa baseada no AT90S2313 com alguns leds, botões e uma saída para produzir sinais analógicos com 4 bits(Conector RCA).</span></div>
<span style="background-color: white;"><br /></span><br />
<div class="separator" style="clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOgIPuCDP7A-xriuiK1J5TTwuczgsZDzWIR-yQxVaaspJCRdOHqGsVtbiUSE9V8LlkHS8E6o2vM9tXtZXAv2PP0rSuMI1_nqXAoYYqb4dOxwHsNiqoQCVDTXkxxCL5AwA0aeC8ht33ge0/s1600/fig036.jpg" imageanchor="1" style="background-color: white; color: #888888; margin-left: 1em; margin-right: 1em; text-decoration: none;"><img border="0" ex="true" height="238" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOgIPuCDP7A-xriuiK1J5TTwuczgsZDzWIR-yQxVaaspJCRdOHqGsVtbiUSE9V8LlkHS8E6o2vM9tXtZXAv2PP0rSuMI1_nqXAoYYqb4dOxwHsNiqoQCVDTXkxxCL5AwA0aeC8ht33ge0/s320/fig036.jpg" style="-webkit-box-shadow: rgba(0, 0, 0, 0.0976563) 1px 1px 5px; background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-style: solid; border-color: initial; border-image: initial; border-left-color: rgb(238, 238, 238); border-left-style: solid; border-right-color: rgb(238, 238, 238); border-right-style: solid; border-top-color: rgb(238, 238, 238); border-top-style: solid; border-width: initial; box-shadow: rgba(0, 0, 0, 0.0976563) 1px 1px 5px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; position: relative;" width="320" /></a></div>
<div class="separator" style="clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 21px; text-align: center;">
<span style="background-color: white;"><br /></span></div>
<div class="separator" style="clear: both; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; line-height: 21px; text-align: center;">
<span style="background-color: white;"><span style="font-size: 15px;"><span style="color: red;"><b>Veja também</b></span><span style="color: #222222;"> </span></span><span style="color: #222222; font-size: large;"><a href="http://circuitosavr.blogspot.com.br/2012/05/gravador-avr-usb-usando-pela-primeira.html">Gravador AVR USB: Usando pela primeira vez</a></span></span></div>Unknownnoreply@blogger.com0