-
Posts
8.316 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que aphawk postou
-
Esquema de amplificador de 500w rms com alimentação de 12v
aphawk respondeu ao tópico de mdnatal em Eletrônica
Estava pensando com os meus botões..... A finalidade da bobina é produzir força motriz para o movimentar o cone, e para isso ela precisa gerar um campo magnético muito intenso, ou seja, precisa de bastante espiras para isso. Para ter as impedâncias que vocês estão falando, teria de ser feita com um material de cobre muito espesso para aguentar a corrente necessária, para mim parece um compromisso impossível de ser alcançado, pois muitas voltas implicam em uma resistência maior, e , além disso, como seria possível curvar essa bobina, feita de fio quadrado ou redondo ou retangular ( mas de alta seção transversal ), para acompanhar o imã do alto-falante ? E mais , estamos falando de uma corrente média de mais de 40A circulando na bobina do alto-falante.... Já imaginaram um alto-falante de 4 ohms onde circule 40A, qual seria a potência dele ???? 4800 watts Rms ????? Alguém já viu algo parecido com isso em um único alto-falante ? As dimensões do mesmo seriam absurdamente grandes , e a massa do sistema seria tão alta que seria impraticável reproduzir qualquer frequência acima da de um sub-woofer, ou um woofer... Outra coisa, 0,032 ohms de carga, fica bem impraticável fazer um fio que irá interligar esse alto-falante à saída do módulo, a menos que se use um fio absurdamente grosso para ter pouca perda... e também embora tenhamos Mos-Fets de baixo RDon, o próprio circuito impresso onde eles serão fixados já irão acrescentar uma boa perda até a conexão de saída do amplificador.... Me parece muito mais simples fazer um multiplicador de tensão ! Paulo -
Projetos com Avr : Design, Programação em Basic e Assembly
aphawk respondeu ao tópico de aphawk em Microcontroladores
Sim, existe um pequeno truque, estou usando em beta teste já faz algum tempinho ! Vá ao diretório Updates, você terá de fazer o seu Login, e lá dentro existe uma licença que vai permitir voce atualizar para o nova versão. Paulo -
Projetos com Avr : Design, Programação em Basic e Assembly
aphawk respondeu ao tópico de aphawk em Microcontroladores
Opa, lembro sim, eu comecei com um Sinclair ZX-80 original, depois tive um Tk-85 que tinha de tudo dentro, tinha RAM extra de vídeo, e usava para fazer TX/RX de rtty e código morse, bons tempos ! O trabalho mais enrolado que fiz nessa época foi fazer um Bios oficial para IBM-PC XT em uma multinacional, era um projeto para a Petrobras, um computador para uso em navios, e aquela época tinha a tal de SEI que só tinha corrupto nela, foi um sufoco, um anos de trabalho de três engenheiros para depois descobrir que nunca ia ser dada a autorização para fabricação, a menos que se fechasse as placas prontas com uma certa empresa nacional enorme que existe até hoje..... e ainda ser ameaçado por um cara em Brasília de que não poderia sair daquela sala o assunto ou a empresa que eu trabalhava ia perder todos os projetos que tinha com as empresas de energia elétrica ! Ou seja, as coisas que vemos hoje vem de muiiiito tempo atrás .... ! Pelo menos aprendí muito com um pessoal que veio para o Brasil ajudar nesse projeto, da Faraday USA. Trabalhei com um sistema de desenvolvimento Geppeto ( Z-80A) que tinha dois disquetes de 8" ...... façe simples !!! Se não me engano, cabiam 120 K em cada um !!!!!! Com o tempo, acabei fazendo aplicações tipo TSR que ficavam residente via MS-DOS e comunicavam com interfaces gráficas feitas com o GW-BASIC, elas conversavam com hardwares dedicados e se comunicavam com o GW-BASIC, era muito legal ver isso funcionar. Hoje, devido ao uso com o GW-BASIC, me sinto muito à vontade com o Bascom, uso em meus hobbies, e pelo jeito você também está na mesma que eu heheheh . Um abraço ! Paulo -
Projetos com Avr : Design, Programação em Basic e Assembly
aphawk respondeu ao tópico de aphawk em Microcontroladores
Intruder, Compilou de cara comigo.... Report : teste Date : 10-29-2013 Time : 23:57:08 Compiler : BASCOM-AVR LIBRARY V 2.0.7.7 Processor : M1280 SRAM : 2000 hex EEPROM : 1000 hex ROMSIZE : 20000 hex ROMIMAGE : 51FC hex -> Will fit into ROM ROMIMAGE : 20988 dec FLASH USED : 16 % BAUD : 57600 Baud XTAL : 16000000 Hz BAUD error : 0.79% Stack start : 21FF hex Stack size : 40 hex S-Stacksize : 80 hex S-Stackstart : 21C0 hex Framesize : 100 hex Framestart : 2040 hex Space left : 6651 dec A minha versão é oficial..... Quanto ao que você falou sobre ser um prazer programar com o Bascom, concordo plenamente com você ! Já ví que você era da época do Apple.... eu programei para o 8080, Z-80, 6502, 8088, 80186, e 80286 , tudo em Assembler também..... E para o Apple, fiz coisas muito legais, até participei da re-escrita das funcões no firmware da placa do CPM, lembra ? Dentro da Eprom, tinha um código que era dividido entre os processadores Z-80 , que devolvia o controle para o 6502, que devolvia pro Z-80..... Reescrevemos TODA a Eprom para rodar todinha em Z-80 ! Ficou muito mais rápido ! Também fiz um programa para o VideoTexto, lembra ???? Em assembler 6502...... Claro que eram outros tempos, e como você, hoje eu também não consigo entender essa linguagem C de jeito nenhum.... Faço tudo com o Bascom, tanto que até comprei o programa oficialmente, e ter acesso às ultimas versões e ao excelente suporte, que nunca me deixou na mão. Sugiro que você também compre, e compre direto do site da MCS, por download , eles te mandam a licença por email, você instala e pronto ! Sai bem barato , muito mais em conta do que comprar dos representantes aqui no Brasil. Paulo -
Problemas no Protheus "excessive CPU load"
aphawk respondeu ao tópico de manoeva em Microcontroladores
O Matheus tem toda razão sobre os núcleos... Eu uso no escritório uma máquina antiga, com um pentium 4 3.2 Ghz, windows Xp e 4 gB de ram, e o Proteus voa nela, bem mais rápido que os dois computadores que uso em casa.... Paulo -
Problemas no Protheus "excessive CPU load"
aphawk respondeu ao tópico de manoeva em Microcontroladores
Essa mensagem é normal, e não interfere na simulação. O problema é o uso intensivo de outros circuitos lógicos além do microcontrolador. Só existe uma solução que resolve isso : usar uma CPU mais potente em seu PC. Existe um paliativo : abaixe o clock de seu PIC, pois muitas vezes utilizamos um clock muito alto quando podíamos utilizar um bem mais baixo.... Isso afeta muito a simulação, exigindo um uso muito intenso da CPU de seu computador. Paulo -
Poooooo ...... Pensei que meu problema estava resolvido kkkkkk Eu ví um que o cara usou duas baterias 2032 para alimentar o circuito, e em vez de oito leds, a cada volta ele energizava apenas 4, depois na próxima volta eram os outro quatro... Pelo que estou vendo, acho que vou fazer desse jeito... Paulo
-
Deixa eu ver se entendi direito..... Esses motores possuem de alguma maneira os pinos de alimentação disponíveis no eixo do motor ???????? Porque os tais motores de cabeçotes de videocassetes fazem exatamente isto , eles fornecem alimentação ao cabeçote que está girando preso ao eixo do motor, e por causa disso ele também é chamado de transformador rotativo.... Caramba, essa eu não imaginava, um motor de impressora HP é bem fácil de se achar..... Amanha mesmo vou procurar aqui na Santa Efigênia !!! Paulo
-
Opa, como assim de impressora ????? Passa a dica que já vou atrás !!!! Pensei que esses de impressoras eram tudo motor de passo ! Paulo
-
Po eu também quero fazer o meu propeller, estou procurando o tal do motor rotativo de cabeçote de videocassete faz uns 4 meses....., acho que vou ter de comprar uma sucata para desmontar essa bagaça .... Paulo
-
Kkkkkkkkkkkk querem dar mais risadas ???? Acabei de mudar o pré-amplificador, para um top de menos ruído..... E mais uns 45 dias para chegarem os capacitores e CI's especiais !!!!!! Po.... Já posso vender algumas placas no Mercado Livre.... Tenho duas de pré-amplificador com controle de tom, uma de pré com controle de tom e de sub, e duas placas de retificação e filtragem de altíssima qualidade para fontes de 70 volts.... Tudo trocado por outras !!! Agora , nem no Natal vai ficar pronto !!!!!! Paulo
-
É ....... Sei o que você tá passando, Vtrx ! Tá parecendo a montagem do meu novo home teather.... Já mudei o projeto 8 vezes, toda hora acho algo que vai ficar melhor, e nada de montar as partes todas que já estão aqui, prontinhas, kkkk !! Agora mudei o amplificador de headphones, e mais uma ou duas semanas até montar e testar.... Paulo
-
Projetos com Avr : Design, Programação em Basic e Assembly
aphawk respondeu ao tópico de aphawk em Microcontroladores
Opa, legal mesmo, seria muito bom contar com você também nos Avrs ! Estou fazendo mais uma atualização da apostila, com alguns exemplos dos modos de baixo consumo, expansores I2c, e pequenas correções. Tudo com o Bascom. Se tiver alguma dúvida, não hesite, pergunte ! Um abraço e boa diversão, Mr. Nintendo ! Paulo -
Merlin, Opa legal hehehe , como eu sempre disse, não precisa de faculdade, e sim seu próprio esforço em ler, pesquisar, e experimentar ! Se quiser saber mais sobre o Isis, que é o simulador do Proteus, baixe o meu tutorial sobre programação, design e simulação para AVR, está num dos tópicos destacados acima, em quase todos os circuitos eu faço também a simulação, e tem muitas dicas lá , ok ? E parabéns , meu amigo ! Paulo
-
Vtrx, Ficou bem legal o jeitão das placas se alinharem, quando fizer funcionar poste um videozinho ! Paulo
-
Projetos com Avr : Design, Programação em Basic e Assembly
aphawk respondeu ao tópico de aphawk em Microcontroladores
Intruder, Experimente usar o Config Submode= New , você tem de colocar todas as suas subrotinas logo no início do programa, e o compilador faz a realocação na compilação. Se mesmo assim não funcionar, mande o fonte para mim, vou tentar dar umas mexidas. Paulo -
Projetos com Avr : Design, Programação em Basic e Assembly
aphawk respondeu ao tópico de aphawk em Microcontroladores
Pessoal, Segue um programa bem interessante, muito útil para aqueles casos onde você quer usar vários CI's I2C's porém usam o mesmo endereço.... e claro que neste caso não tem como ! A solução é utilizar um CI demultiplex específico para I2C, mas o tal CI é naqueles formatos SMD e ainda é meio carinho e difícil de achar, porém ...... Se você tiver pinos sobrando, pode usar pares de pinos para simular novos Bus I2C e colocar um CI em cada par, e ainda assim pode controlar todos independentes ! No meu caso, onde preciso usar 3 CI's TDA8425 e dois PCF8574, tive de criar 3 novos Buses I2C, e fiquei com 4 no total, pois existe o nativo no hardware dos Atmegas e nesse eu coloquei os dois PCF8574 cada um em um endereço diferente, e pronto ! Nada impede de aumentar esse número, basta existirem pinos livres ! Como acho que esse programa pode ser útil para outros malucos , posto aqui o código : '------------------------------------------------------------------------------- ' PROGRAMA PARA USAR 4 BUS I2C INDEPENDENTES ' VELOCIDADE DE COMUNICAÇÃO = 36 KHZ APROXIMADO para os 3 Bus por software ' e 100 Khz para o Bus nativo por hardware ' 'Fiz este programa pois estou montando uma central de som para o meu carro 'onde tenho 6 canais de áudio independentes ( 5.1 ) e gostaria de reforçar 'o áudio com 6 controles independentes de graves e agudos, além de poder 'rotear qualquer canal de entrada para qualquer saída ! 'Para isto estou usando 3 TDA8425 e 6 cd4051. O problema é que os TDA's 'possuem o mesmo endereço, então não consigo colocar todos no mesmo Bus. ' 'Este programa é a solução, onde criei 3 bus independentes controlados por 'software, onde colocarei os 3 TDA's, e ainda tenho o bus nativo livre para 'usar um controlador de display com um PCF8574 e mais um PCF8574 para ler os 'botões de controle. 'Segue aqui como exemplo a quem precisar de algo semelhante. '------------------------------------------------------------------------------- $regfile = "m328pdef.dat" $crystal = 16000000 '16 MHz $hwstack = 128 $swstack = 128 $framesize = 128 Config Submode = New ' ' CONFIGURA O BUS POR HARDWARE NATIVO Config Sda = Portc.4 'I²C Config Scl = Portc.5 $lib "I2C_TWI.LIB" ' ' ---- CONFIGURA OS 3 BUS I2C POR SOFTWARE Const I2c_maxdata = 10 'MAXIMO DE BYTES A RECEBER ' BUS 1 Scl1 Alias Portb.0 Sda1 Alias Portb.1 Sda1_in Alias Pinb.1 ' BUS 2 Scl2 Alias Portc.0 Sda2 Alias Portc.1 Sda2_in Alias Pinc.1 ' BUS 3 Scl3 Alias Portc.2 Sda3 Alias Portc.3 Sda3_in Alias Pinc.3 ' CONFIGS GERAIS DOS 3 BUS POR SOFTWARE Config Sda1 = Input Config Sda2 = Input Config Sda3 = Input Config Scl1 = Input Config Scl2 = Input Config Scl3 = Input Dim I_data(i2c_maxdata) As Byte '10 BYTES PARA RECEBER Dim I_num As Byte Dim I_type As String * 4 '-------------------------------- SUBROTINAS ------------------------- Sub Init_all_i2c Scl1 = 1 Config Scl1 = Output Scl2 = 1 Config Scl2 = Output Scl3 = 1 Config Scl3 = Output Config Sda1 = Input Config Sda2 = Input Config Sda3 = Input Waitus 10 End Sub Sub Sda_high(byval I_num As Byte) Local T1 As Byte T1 = I_num Select Case T1 Case 1 : Config Sda1 = Input Case 2 : Config Sda2 = Input Case 3 : Config Sda3 = Input End Select End Sub Sub Sda_low(byval I_num As Byte) Local T1 As Byte T1 = I_num Select Case T1 Case 1 Sda1 = 0 Config Sda1 = Output Case 2 Sda2 = 0 Config Sda2 = Output Case 3 Sda3 = 0 Config Sda3 = Output End Select End Sub Sub Scl_high(byval I_num As Byte) Local T1 As Byte T1 = I_num Select Case T1 Case 1 : Config Scl1 = Input Case 2 : Config Scl2 = Input Case 3 : Config Scl3 = Input End Select End Sub Sub Scl_low(byval I_num As Byte) Local T1 As Byte T1 = I_num Select Case T1 Case 1 Scl1 = 0 Config Scl1 = Output Case 2 Scl2 = 0 Config Scl2 = Output Case 3 Scl3 = 0 Config Scl3 = Output End Select End Sub Sub I2c_start(byval I_num As Byte) Local T2 As Byte T2 = I_num Call Scl_high(t2) Waitus 4 Call Sda_low(t2) Waitus 5 Call Scl_low(t2) Call Sda_high(t2) Waitus 5 End Sub Sub I2c_stop(byval I_num As Byte) Local T2 As Byte T2 = I_num Call Scl_low(t2) Waitus 1 Call Sda_low(t2) Waitus 2 Call Scl_high(t2) Waitus 4 Call Sda_high(t2) Waitus 5 End Sub Sub I2c_wbyte(byval I_num As Byte , Byval I_value As Byte) Local T3 As Byte Local I_dummy1 As Byte Local I_dummy2 As Byte Local I_dummy As Byte T3 = I_num I_dummy1 = I_value Call Scl_low(t3) For I_dummy = 1 To 8 I_dummy2 = I_dummy1 And &B10000000 Shift I_dummy1 , Left , 1 If I_dummy2 = 128 Then Call Sda_high(t3) Else Call Sda_low(t3) End If Waitus 1 Call Scl_high(t3) Waitus 6 Call Scl_low(t3) Next I_dummy Call Sda_high(t3) Waitus 3 Call Scl_high(t3) Waitus 3 Select Case T3 Case 1 I_dummy = Sda1_in Case 2 I_dummy = Sda2_in Case 3 I_dummy = Sda3_in End Select If I_dummy = 0 Then I_type = "NACK" Else I_type = "ACK " End If Waitus 3 End Sub Sub I2c_rbyte(byval I_num As Byte , Byval I_value As Byte , Byval I_type As String) Local I_dummy As Byte Local I_dummy1 As Byte Local I_dummy2 As Byte Local I_str As String * 4 Local I_x As Byte Local I_read As Byte I_dummy = I_num I_dummy1 = I_value 'AONDE ARMAZENAR I_read = 0 I_str = I_type I_str = Trim(i_str) I_dummy2 = 0 Call Scl_low(i_dummy) Waitus 5 For I_x = 1 To 8 Shift I_dummy2 , Left , 1 Call Scl_high(i_dummy) Waitus 3 Select Case I_dummy Case 1 I_read = Sda1_in Case 2 I_read = Sda2_in Case 3 I_read = Sda3_in End Select I_dummy2 = I_dummy2 + I_read Waitus 2 Call Scl_low(i_dummy) Waitus 5 Next If I_type = "ACK" Then Call Sda_low(i_num) Waitus 2 Call Scl_high(i_dummy) Waitus 6 Call Scl_low(i_dummy) Call Sda_high(i_num) Waitus 6 Call Scl_high(i_dummy) Waitus 6 Else End If I_data(i_dummy1) = I_dummy2 End Sub '------------------- FINAL DAS SUBS ---------------------------------- ' Aqui começa o programa mesmo.... I2cinit ' Config Twi = 100000 ' inicializa o i2c nativo hardware Init_all_i2c ' inicializa os 3 i2cs soft de novo: 'o comando abaixo faz o i2cstart no bus 1 Call I2c_start(1) 'bus 1 'veja a sintaxe do comando abaixo, onde 1 é o bus e 85 é o endereço Call I2c_wbyte(1 , 75) 'veja a sintaxe abaixo, onde 1 é o bus, 2 é o endereço na matrix i_data() 'onde o dado lido vai ser guardado, e o ACK significa que continua leitura Call I2c_rbyte(1 , 2 , "ACK") ' abaixo veja que usamos NACK para sinalizar final de leitura Call I2c_rbyte(1 , 3 , "NACK") Call I2c_stop(1) Waitms 10 Call I2c_start(2) 'bus 2 Call I2c_wbyte(2 , 73) Call I2c_rbyte(2 , 4 , "ACK") Call I2c_rbyte(2 , 5 , "NACK") Call I2c_stop(2) Waitms 10 Call I2c_start(3) 'bus 3 Call I2c_wbyte(3 , 71) Call I2c_rbyte(3 , 6 , "ACK") Call I2c_rbyte(3 , 7 , "NACK") Call I2c_stop(3) Waitms 10 I2cstart 'bus 4 I2cwbyte 69 I2crbyte I_data(8) , Ack I2crbyte I_data(9) , Nack I2cstop Waitms 10 Goto de novo End Paulo -
Copiar o produto.... Para quê ???? Conhecimento é para você fazer seus próprios produtos, copiar layout é para copiar um produto feito pelos outros... Cara, isso é pirataria industrial, usar o conhecimento e investimento feito pelos outros é , no mínimo, anti-ético. Aprenda eletrônica para que você mesmo projete os seus produtos, claro que você pode levantar o circuito elétrico para estudar o funcionamento e usar como base para um outro produto; agora, copiar um layout é copiar o produto inteiro, e não é algo éticamente recomendável. Paulo
-
Vinícius, Muito legal esse brinquedinho.... a matriz vai ficar muito legal para efeitos de imagens.... o complicado é montar uma matriz grande para ver bem, tipo uma 32X32 ou até maior, mas ia ficar muito bonito mesmo. Paulo
-
Oi Queiros, Acho que você não viu o link que postei algumas mensagens acima.... é código feito para Arduíno mesmo, e bem simples de se usar. Quanto a zerar a memória, voce tem de criar um tipo de flag e ver se existem dados válidos na memória, e se for o caso, tem de continuar de onde parou. Eu também acho que o seu próprio programa está zerando as variáveis, pois olhei o datasheet de cabo a rabo, e não tem nenhuma possibilidade de estar zerando por algum problema das linhas SDA e SCL. Paulo
-
Não há nenhuma restrição quanto a leituras na EEprom. Mas quando voce faz uma gravação em um simples byte, isso sim degrada a EEprom, e a estimativa minima que a Atmel garante são 100.000 escritas antes de a eeprom começar a falhar nas gravações. Mesmo se você usar uma eeprom externa ela também vai falhar mais ou menos com 1 milhão de escritas, ou seja, apenas atrasa o problema.... Eu sugiro você usar uma RAM normal, assim você pode gravar e alterar quantas vezes quiser, e em caso de queda de energia, fazer um simples sistema de backup com bateria para aguentar enquanto o conteúdo da RAM é passado para a EEprom do Atmega, que é um tempo pequeno, e logo depois desligar o circuito todo. Segue um excelente exemplo de como usar uma SRAM I2C com um Arduíno : http://arduino-related.livejournal.com/1414.html Paulo
-
Projetos com Avr : Design, Programação em Basic e Assembly
aphawk respondeu ao tópico de aphawk em Microcontroladores
Oi Intruder, 1 - Nunca ví esse erro.... mas faz o seguinte, normalmente a gente coloca as sub-rotinas no final, experimente espalhar elas no meio do programa. Uma vez tive um problema com uma tabela no final do programa, dava um erro doido também, tive de mudar o programa, o trecho que chamava essa tabela estava bem no iníçio, mudei ele e coloquei no meio do programa e resolveu.... 2 - Vou pesquisar o datasheet e posto depois. Paulo -
Projetos com Avr : Design, Programação em Basic e Assembly
aphawk respondeu ao tópico de aphawk em Microcontroladores
RÁDIO FM COM CONTROLE DE TONALIDADE E AMPLIFICADOR Pessoal, terminei o meu novo projeto, ficou simples e bem barato, pois os módulos principais podem ser comprados no Ebay ou no Mercado Livre. Custo aproximado : Modulo Fm TEA5767 - US$ 2,00 Amplificador stereo 10+10 W - US$ 6,50 Display LCD Backlite 4 x 20 - US$ 6,50 Atmega 328 - US$ 3,50 ( mas serve um Atmega8, Atmega88 , atmega16, Arduino, etc... ) Fonte de parede de 12v por 2A - US$ 6,50 Falta ainda algo muito importante : um CI controlador de Audio TDA8425 que pode ser adquirido aqui no Brasil mesmo, em SP na Santa Ifigênia sai por R$ 6,50 !!! Esse CI controla volume, graves, agudos, e ainda pode criar efeitos tipo Estéreo Espacial ou Pseudo-estéreo. E utiliza a interface I2C ! Ainda precisamos de alguns resistores, capacitores, regulador 7805 e 4 push-buttons, que custam mais uns R$ 20,00 tudo. Como podem ver, podemos construir apenas uma plaquinha para o Atmega328 e o TDA8425, e aproveitar os outros módulos completos. Ou fazer uma única placa para tudo, usando um CI amplificador de áudio tipo Classe D de baixa potência. Eu montei um Frankstein usando alguns módulos que eu tinha aqui, e o resultado ficou legal. O interessante é que o programa em Bascom que controla tudo com apenas 4 push-buttons de contato momentâneo e pode utilizar qualquer processador, desde um Atmega8 até um Atmega328, ou até mesmo pode ser facilmente modificado para utilizar um Arduino como controlador ! Segue o programa fonte em Bascom : '----------------------------------------------------------------------- ' Nome : TEA5767 HOME AUDIO.bas ' Revisão : 1.0 02.09.2013 ' Controller : AVR ATmega16 ' Autor : Antonio Paulo Hawk com trechos de ' : Thomas Palluthe (www.tp-homesoft.de) ' Compilador : BASCOM-AVR Rev. 2.0.7.6 ' ' '---[ Detalhes do TEA5767 ]------------------------------------- ' ESCRITA ' Softmute : bit 3 do byte 4 1=ligado ' High Cut : bit 2 do byte 4 1=ligado ' Stereo Noise Canceler : bit 1 do byte 4 1=ligado ' Mute : bit 7 byte 1 1=mute ' Hi/Lo Injection : bit 4 do byte 3 1=hi Side Inj ' Stereo/Mono : bit 3 do byte 3 1=Mono ' ' LEITURA ' Stereo : bit 7 do byte 3 1=stereo ' Freq. Intermed. : bit 6-0 do byte 3 ' Nivel Sinal : bit 7-4 do byte 4 ' PLL : bit 5-0 byte 1 13-8 ' PLL : bit 7-0 byte 2 7 - 0 ' '---[ Detalhes do TDA8425 ]------------------------------------- ' ' Endereço escrita : 082h ' Endereço Leitura : 083h ' Formato escrita = STA/CHIP/REG/VL/VR/BA/TR/S1/STOP ' Registros e funções : ' REG :0 ' VL = 11VL5VL4VL3VL2VL1VL0 = 2 DB ( +6 ATÉ -80(27 ATÉ 0) ) ' VR = 11VR5VR4V33VR2VR1VR0 = 2 DB ( +6 ATÉ -80(27 ATÉ 0) ) ' BA = 1111BA3BA2BA1BA0 = 3DB ( +15/15/15/15/12...-12/-12/-12 ) ' TR = 1111TR3TR2TR1TR0 = 3DB ( +12/12/12/12/9....-12/-12/-12 ) ' SW = 11/MU/EFL/STL/M1/M0/IS onde ' MU = Mute ( 1=ligado ) ' EFL=0 STL=1 - ESTEREO_NORMAL ' EFL=1 STL=1 - ESTEREO_ESPACIAL ' EFL=1 STL=0 - PSEUDO_ESTEREO ' EFL=0 STL=0 - MONO ' ' ML1=1 ML0=1 IS=0 - STEREO CANAL 1 ' ' FORMATO DISPLAY ' LINHA 1->VLM BAS TRB ST NM ( PODE SER ST SP OU MONO) ' LINHA 2->-30 -3 -3 RAD 1 ( pode ser AUD ) ' LINHA 3->RA AU +F -F ( PODE SER +M -M ) ' linha 4->F=109.2 STEREO SI=8 ' ' TABELAS : ' TB_VL VAI DE 20 ATÉ 63 ( -80 A +6 ) ' TB_BA VAI DE 2 ATÉ 11 ( -12 A +15) ' TB_TR VAI DE 2 ATÉ 10 ( -12 A +12) ' ' MAQUINA DE ESTADOS : ' MODO=0 Indica tratamento de RADIO. A cada aperto de bot1 muda a fase ' ' FASE=1 Indica bot3 e bot4 mudar frequencias ' FASE=2 Indica bot3 muda mono/stereo ' ' MODO=1 Indica tratamento de AUDIO. A cada aperto de bot2 muda a fase ' ' FASE=1 Indica bot3 e bot4 a dim / aumentar o volume ' FASE=2 Indica bot3 e bot4 a dim / aumentar os graves ' FASE=3 Indica bot3 e bot4 a dim / aumentar os agudos ' FASE=4 Indica bot3 mudar ST/SP/MN/PS $regfile = "m328Pdef.dat" $crystal = 8000000 '8 MHz Oszillator ' SE FOR USAR UM ARDUINO, MUDAR O CRYSTAL PAR 16000000 $hwstack = 128 $swstack = 128 $framesize = 200 Config Sda = Portc.4 'I²C Config Scl = Portc.5 $lib "I2C_TWI.LIB" $lib "double.lbx" Declare Sub Init_audio Declare Sub Init_radio Declare Sub Sintonia Declare Sub Leitura_radio Declare Sub Ajusta_audio Declare Sub Comunica_audio Declare Sub Aumenta_volume Declare Sub Abaixa_volume Declare Sub Aumenta_grave Declare Sub Abaixa_grave Declare Sub Aumenta_agudo Declare Sub Abaixa_agudo '---(LCD)----------------------------------------------------------------------- Config Lcd = 20 * 4 Config Lcdpin = Pin , Db4 = Pd.5 , Db5 = Pd.4 , Db6 = Pd.3 , Db7 = Pd.2 , E = Pd.6 , Rs = Pd.7 '---( hardware)----------------------------------------------------------------- Config Portb.0 = Input Config Portb.1 = Input Config Portb.2 = Input Config Portc.0 = Input 'Pullup Set Portb.0 Set Portb.1 Set Portb.2 Set Portc.0 Botao1 Alias Pinb.0 Botao2 Alias Pinb.1 Botao3 Alias Pinb.2 Botao4 Alias Pinc.0 Dim Flag_mudou_radio As Bit Dim Flag_mudou_audio As Bit Dim Primeiro As Bit Dim Flag_botao As Bit Dim Pllfrequenz As Word Dim Old_pll As Word Dim Adresse As Byte Dim 1st As Byte Dim 2nd As Byte Dim 3rd As Byte Dim 4th As Byte Dim 5th As Byte Dim R1st As Byte Dim R2nd As Byte Dim R3rd As Byte Dim R4th As Byte Dim R5th As Byte Dim State_radio As Byte Dim Pll As Single Dim Freq_desejada As Single Dim Freq_temp As Single Dim A1st As Byte Dim A2nd As Byte Dim A3rd As Byte Dim A4th As Byte Dim A5th As Byte Dim State_audio As Byte Dim Vl As Byte Dim Vr As Byte Dim Tr As Byte Dim Ba As Byte Dim Modo_audio As Byte Dim Rvl As String * 3 Dim Rvr As String * 3 Dim Rtr As String * 3 Dim Rba As String * 3 Dim Modo As Byte Dim Fase As Byte Dim Tam As Byte Dim Nspaces As Byte Modo = 0 ' RADIO Fase = 1 'INICIO 'Dim Freq_memory(42) As Single Dim Sender As Byte Dim I As Byte Dim W As String * 5 Dim J As Byte Dim Sinal As Byte Dim Flag_stereo As Bit Dim Flag_leitura_stereo As Bit Dim Linha1 As String * 20 Dim Linha2 As String * 20 Dim Linha3 As String * 20 Dim Linha4 As String * 20 'Dim Copia_linha1 As String * 20 'Dim Copia_linha2 As String * 20 'Dim Copia_linha3 As String * 20 'Dim Copia_linha4 As String * 20 Dim Str_rascunho As String * 4 Const Xtal_tea5767 = 32768 Const Freq_int = 225000 Const Tea5767w = &HC0 Const Tea5767r = &HC1 Const Tda8425w = &H82 Const Tda8425r = &H83 Const Estereo_normal = 1 Const Estereo_espacial = 3 Const Pseudo_estero = 2 Const Mono = 0 Const Incremento = 0.2 Modo_audio = Estereo_normal 'AUDIO EM ESTEREO Flag_stereo = 1 ' RADIO EM ESTEREO Freq_desejada = 87.5 '--- INICIO PROGRAMA ----------------------------------------------------------- Waitms 500 Initlcd Cls Cursor Off Lcd "FM Stereo Radio" Lowerline Lcd "Paulo DEV.R1" Wait 3 Cls I2cinit Config Twi = 70000 Init_radio Init_audio Waitms 50 Vl = 45 Rvl = Lookupstr(vl , Tb_vl) Ba = 6 Rba = Lookupstr(ba , Tb_ba) Tr = 6 Rtr = Lookupstr(tr , Tb_tr) Ajusta_audio Primeiro = 1 Do Flag_botao = 1 If Botao1 = 0 Then Flag_botao = 1 Goto Proc1 End If If Botao2 = 0 Then Flag_botao = 1 Goto Proc2 End If If Botao3 = 0 Then Flag_botao = 1 Goto Proc3 End If If Botao4 = 0 Then Flag_botao = 1 Goto Proc4 End If If Flag_botao = 1 Or Primeiro = 1 Then Primeiro = 0 Leitura_radio Goto Saida Else Leitura_radio Linha4 = "F=" + Rtrim(w) If Len(linha4) = 6 Then Linha4 = Linha4 + " " End If If Flag_leitura_stereo = 1 Then Linha4 = Linha4 + " St Si=" Else Linha4 = Linha4 + " Mon Si=" End If Str_rascunho = Str(sinal) Linha4 = Linha4 + Trim(str_rascunho) Tam = Len(linha4) If Tam < 20 Then Nspaces = 20 - Tam Linha4 = Linha4 + Space(nspaces) End If Locate 4 , 1 Lcd Linha4 Goto Saida_final End If Saida_final: If Modo = 1 And Fase = 1 Then Waitms 20 End If If Modo = 0 And Fase = 1 Then Waitms 30 End If Loop ' -------- PROCESSAMENTO DO BOTAO 1 -------------------------- Proc1: Waitms 5 If Botao1 = 0 Then Waitms 15 Goto Proc1 End If If Modo = 1 Then Modo = 0 Fase = 1 Else Incr Fase If Fase = 3 Then Fase = 1 End If End If Goto Saida ' -------- PROCESSAMENTO DO BOTAO 2 -------------------------- Proc2: Waitms 5 If Botao2 = 0 Then Waitms 15 Goto Proc2 End If If Modo = 0 Then Modo = 1 Fase = 1 Else Incr Fase If Fase = 5 Then Fase = 1 End If End If Goto Saida ' -------- PROCESSAMENTO DO BOTAO 3 -------------------------- Proc3: Waitms 5 If Modo = 0 And Fase = 1 Then Goto Proc3a Elseif Modo = 1 And Fase = 1 Then Goto Proc3a End If If Botao3 = 0 Then Waitms 15 Goto Proc3 End If Proc3a: If Modo = 0 Then If Fase = 1 Then Freq_desejada = Freq_desejada - Incremento If Freq_desejada < 87.5 Then Freq_desejada = 108.1 End If Else Toggle Flag_stereo End If Flag_mudou_radio = 1 Else If Fase = 1 Then Abaixa_volume Elseif Fase = 2 Then Abaixa_grave Elseif Fase = 3 Then Abaixa_agudo Elseif Fase = 4 Then Incr Modo_audio If Modo_audio > 3 Then Modo_audio = 0 End If End If Flag_mudou_audio = 1 End If Goto Saida ' -------- PROCESSAMENTO DO BOTAO 4 --------------------------- Proc4: Waitms 5 If Modo = 0 And Fase = 1 Then Goto Proc4a Elseif Modo = 1 And Fase = 1 Then Goto Proc4a End If If Botao4 = 0 Then Waitms 15 Goto Proc4 End If Proc4a: If Modo = 0 Then If Fase = 1 Then Freq_desejada = Freq_desejada + Incremento If Freq_desejada > 108.1 Then Freq_desejada = 87.5 End If End If Flag_mudou_radio = 1 Else If Fase = 1 Then Aumenta_volume Elseif Fase = 2 Then Aumenta_grave Elseif Fase = 3 Then Aumenta_agudo End If Flag_mudou_audio = 1 End If Goto Saida '---- ROTINA DE DISPLAY ------------------------------------------------------- Saida: If Flag_mudou_radio = 1 Then Sintonia Flag_mudou_radio = 0 End If If Flag_mudou_audio = 1 Then Ajusta_audio Flag_mudou_audio = 0 End If Leitura_radio ' LER O SINAL ' aqui temos de fazer o tratamento do display Linha1 = "VLM BAS TRB " If Modo_audio = 0 Then Str_rascunho = "Mono" Elseif Modo_audio = 1 Then Str_rascunho = "StNm" Elseif Modo_audio = 2 Then Str_rascunho = "PsSt" Else Str_rascunho = "StSp" End If Linha1 = Linha1 + Str_rascunho Linha2 = Rvl + Space(2) Linha2 = Linha2 + Rba Linha2 = Linha2 + Space(2) Linha2 = Linha2 + Rtr Linha2 = Linha2 + Space(2) If Modo = 0 Then Str_rascunho = "RAD" Else Str_rascunho = "AUD" End If Linha2 = Linha2 + Trim(str_rascunho) Linha2 = Linha2 + " " Str_rascunho = Str(fase) Linha2 = Linha2 + Trim(str_rascunho) Linha3 = "RAD AUD " If Modo = 0 Then If Fase = 1 Then Linha3 = Linha3 + "-F +F" Else Linha3 = Linha3 + "Mo/St " If Flag_stereo = 1 Then Str_rascunho = "St" Else Str_rascunho = "Mn" End If Linha3 = Linha3 + Trim(str_rascunho) End If Else If Fase = 1 Then Linha3 = Linha3 + "-V +V" Elseif Fase = 2 Then Linha3 = Linha3 + "-B +B" Elseif Fase = 3 Then Linha3 = Linha3 + "-T +T" Else Linha3 = Linha3 + "Efeito " End If End If W = Fusing(freq_desejada , "#.#") 'Str_rascunho = Str(freq_temp) 'Linha4 = "F=" + Trim(str_rascunho) Linha4 = "F=" + Rtrim(w) If Len(linha4) = 6 Then Linha4 = Linha4 + " " End If If Flag_leitura_stereo = 1 Then Linha4 = Linha4 + " St Si=" Else Linha4 = Linha4 + " Mon Si=" End If Str_rascunho = Str(sinal) Linha4 = Linha4 + Trim(str_rascunho) 'agora, acertar os espacos Tam = Len(linha1) If Tam < 20 Then Nspaces = 20 - Tam Linha1 = Linha1 + Space(nspaces) End If Tam = Len(linha2) If Tam < 20 Then Nspaces = 20 - Tam Linha2 = Linha2 + Space(nspaces) End If Tam = Len(linha3) If Tam < 20 Then Nspaces = 20 - Tam Linha3 = Linha3 + Space(nspaces) End If Tam = Len(linha4) If Tam < 20 Then Nspaces = 20 - Tam Linha4 = Linha4 + Space(nspaces) End If Locate 1 , 1 Lcd Linha1 Locate 2 , 1 Lcd Linha2 Locate 3 , 1 Lcd Linha3 Locate 4 , 1 Lcd Linha4 Goto Saida_final '--------- SUB ROTINAS ------------------------------------------------------- Sub Init_radio Sintonia End Sub Sub Sintonia Pll = Freq_desejada * 1000000 Pll = Pll + Freq_int Pll = Pll * 4 Pll = Pll / Xtal_tea5767 Pllfrequenz = Int(pll) 1st = High(pllfrequenz) Reset 1st.6 Reset 1st.7 2nd = Low(pllfrequenz) 3rd = &B00010000 If Flag_stereo = 1 Then 3rd.3 = 1 Else 3rd.3 = 0 End If 4th = &B00011010 5th = &B01000000 I2cstart I2cwbyte Tea5767w I2cwbyte 1st I2cwbyte 2nd I2cwbyte 3rd I2cwbyte 4th I2cwbyte 5th I2cstop End Sub Sub Leitura_radio I2cstart I2cwbyte Tea5767r I2crbyte R1st , Ack I2crbyte R2nd , Ack I2crbyte R3rd , Ack I2crbyte R4th , Ack I2crbyte R5th , Nack I2cstop Sinal = R4th And &B11110000 Shift Sinal , Right , 4 If R3rd.7 = 1 Then Set Flag_leitura_stereo Else Reset Flag_leitura_stereo End If End Sub Sub Init_audio 'INICIALIZA O CHIP TDA8425 'Modo = Stereo Normal 'Canal = 1 ' MUTE=LIGADO ' VL=VR=-30DB 45 'TR = BA = 0DB 6 A1st = 45 Or &B11000000 A2nd = A1st A3rd = 6 Or &B11110000 A4th = A3rd A5th = &B11001110 Comunica_audio End Sub Sub Comunica_audio I2cstart I2cwbyte Tda8425w I2cwbyte 0 I2cwbyte A1st I2cstart I2cwbyte Tda8425w I2cwbyte 1 I2cwbyte A2nd I2cstart I2cwbyte Tda8425w I2cwbyte 2 I2cwbyte A3rd I2cstart I2cwbyte Tda8425w I2cwbyte 3 I2cwbyte A4th I2cstart I2cwbyte Tda8425w I2cwbyte 8 I2cwbyte A5th I2cstop End Sub Sub Ajusta_audio A1st = Vl Or &B11000000 A2nd = A1st A3rd = Ba Or &B11110000 A4th = Tr Or &B11110000 A5th = Modo_audio Shift A5th , Left , 3 A5th = A5th Or &B11000110 Comunica_audio End Sub Sub Aumenta_volume Incr Vl If Vl > 63 Then Vl = 63 Rvl = Lookupstr(vl , Tb_vl) End Sub Sub Abaixa_volume Decr Vl If Vl < 20 Then Vl = 20 Rvl = Lookupstr(vl , Tb_vl) End Sub Sub Aumenta_grave Incr Ba If Ba > 11 Then Ba = 11 Rba = Lookupstr(ba , Tb_ba) End Sub Sub Abaixa_grave Decr Ba If Ba < 2 Then Ba = 2 Rba = Lookupstr(ba , Tb_ba) End Sub Sub Aumenta_agudo Incr Tr If Tr > 10 Then Tr = 10 Rtr = Lookupstr(tr , Tb_tr) End Sub Sub Abaixa_agudo Decr Tr If Tr < 2 Then Tr = 2 Rtr = Lookupstr(tr , Tb_tr) End Sub End '----- FINAL DO PROGRAMA ------------------------------------------------------- Tb_vl: Data "-80" , "-80" , "-80" , "-80" , "-80" , "-80" , "-80" , "-80" Data "-80" , "-80" , "-80" , "-80" , "-80" , "-80" , "-80" , "-80" , "-80" Data "-80" , "-80" , "-80" , "-80" , "-78" , "-76" , "-74" , "-72" , "-70" Data "-68" , "-66" , "-64" , "-62" , "-60" , "-58" , "-56" , "-54" , "-52" Data "-50" , "-48" , "-46" , "-44" , "-42" , "-40" , "-38" , "-36" , "-34" Data "-32" , "-30" , "-28" , "-26" , "-24" , "-22" , "-20" , "-18" , "-16" Data "-14" , "-12" , "-10" , "-8 " , "-6 " , "-4 " , "-2 " , "0 " , "+2 " Data "+4 " , "+6 " Tb_ba: Data "-12" , "-12" , "-12" , "-9 " , "-6 " , "-3 " , "0 " , "+3 " , "+6 " Data "+9 " , "+12" , "+15" , "+15" , "+15" , "+15" , "+15" Tb_tr: Data "-12" , "-12" , "-12" , "-9 " , "-6 " , "-3 " , "0 " , "+3 " , "+6 " Data "+9 " , "+12" , "+12" , "+12" , "+12" , "+12" , "+12" Para quem quer aprender mais sobre controles digitais em som, este projeto é uma ótima oportunidade, pois hoje em dia tudo funciona de maneira semelhante, por exemplo uma TV, um rádio moderno ( com DSP ), um home teather, etc. Funcionamento : O botão 1 seleciona as funções de rádio, isto é, quando apertado permite que os botões 3 e 4 façam a diminuição ou o aumento da frequência sintonizada. Se apertar novamente o botão 1, o botão 3 permite a mudança de sinal de Estéreo para Mono e vice versa. O botão 2 seleciona as funções de áudio, ou seja, inicialmente permite que os botões 3 e 4 façam a diminuição do volume ou o aumento. Ao ser apertado novamente, os botões 3 e 4 fazem a diminuição ou o aumento dos graves, e se o botão 2 for apertado de novo, permite mudar o nível dos agudos. Finalmente, apertando mais uma vez o botão 2, faz com que o botão 3 mude o processamento de áudio, trocando ciclicamente de Estéreo Normal para Estéreo Espacial, em seguida Mono, e finalmente Pseudo Estéreo. O display acompanha essa troca de funções, e também mostra o nível do sinal recebido, além de todas as informações sobre a frequência, nível de volume, de graves, de agudos e também o tipo de processamento de áudio. Segue o esquema : Segue uma foto da "aranha": Para terminar, conforme prometí, segue o link com o arquivo .hex para gravar o seu ATMEGA328, e o próprio programa-fonte do Bascom : http://www.4shared.com/rar/VUBGWpWb/radio_tea5767.html Paulo -
Ruídos eletromagnéticos e problemas no clock do PIC!
aphawk respondeu ao tópico de manoeva em Microcontroladores
Para tirar o ruido, começe por uma excelente filtragem o mais próximo possivel do PIC. Use um eletrolítico tipo 10uf em paralelo com um cerâmico de 0.1 uF. Coloque sempre um resistor de 10k ligando o Reset ao positivo. E nunca deixe as entradas do PIC em alta impedância, sempre use um resistor , seja o pull-up interno ou um resistor externo. Paulo -
Medidor de fator de potência com arduino
aphawk respondeu ao tópico de Ernandes Sousa em Microcontroladores
Ernandes, Não conheço nenhum circuito pronto, mas não é difîcil de se fazer, basta observar que o fator de potência indica a defasagem da corrente em relação à tensão. Uma maneira seria colocar uma pequena carga resistiva em série e medir 2 grandezas simultâneas : a tensão da rede e a tensão sobre a carga. Calcular a diferença de fase entre elas deve ser exatamente o fator de potência ( se eu ainda me lembro bem disso .... ). Ou medir diretamente a corrente na carga e a tensão na carga, e calcular a defasagem entre elas...... Vamos ver se aparece mais alguma sugestão. OBS : Achei um projeto interessante : http://portal.fke.utm.my/fkelibrary/files/kuhendransoravandran/2012/372_KUHENDRANSORAVANDRAN2012.pdf Paulo
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais
Direitos autorais
Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais