-
Posts
144 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por eletronicav
-
-
Aproveitando o tópico, @eletronicav, não entendi muito bem a lógica que você usou pra reproduzir o som. Do jeito que você lê o byte da memoria já manda direto pra porta, tipo, sem uma conversão de digital pra analógico, pwm, etc? Usou um buzzer ou alto-falante mesmo? Conectado direto na porta?
extamente, eu leio o byte da memoria e mando direto pra porta 8bits e no DAC(conversor de digital para analogico) eu utilizei o Weighted DAC igual a esse da imagem porém de 8-bit, apenas acrescentando mais 2 resistores com valores de R*64 e R*128. Na saida utilizei um falante simples porém mesmo a saida variando de 0v a 5v não tem força suficiente para tocar, então precisa de um amplificador simples, no meu caso usei um LM comum de 0.5W e foi mais que suficiente.
PS.: O valor do resistor não importa muito desde q seja fiel à multiplicação R*(x), não precisa ser exato mas quanto mais proximo melhor o som e menos chiado. O valor inicial de R pode ser qualquer um, no meu caso utilizei 100R pois se tivesse utilizado valor maior teria q usra no final resistores acima de 1M e nao tinha ai vai do que voce achar melhor.
Att,
Victor.
-
Não tinha reparado isso, mas por padrão ele é habilitado, por isso que i2c_read() sem nada funcionou.. Se alguém quiser saber, sobre o DAC eu utilizei o Weighted DAC R-2R-4R-8R-16R-32R-64R-128R o som ficou melhor do que eu esperava fica melhor ainda colocando um capacitor non polarized de 1uf no positivo do falante e no negativo ou um low pass filter que resolve a chiadera(pouca mas tem).
Att,
Victor.
-
Problema nenhum.. O codigo ficou assim:
#include <16F628A.h>#fuses HS#fuses NOMCLR#fuses NOWDT#fuses NOPUT#fuses PROTECT#fuses NOBROWNOUT#fuses NOLVP#fuses CPD#use delay(clock=20000000)#use i2c(master, fast, sda=PIN_A1, scl=PIN_A0)#use fast_io(A)#use fast_io(B)int byte_atual = 0;int16 length = 23790;int16 i;#separatevoid le_eeprom(){ i2c_start(); i2c_write(0xa0); i2c_write(0); i2c_write(0); i2c_start(); i2c_write(0xa1); for(i=0;i<length;i++) { byte_atual = i2c_read(); output_b(byte_atual); } i2c_stop();}void main(){ setup_ccp1(CCP_OFF); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); set_tris_a(0b00000000); set_tris_b(0b00000000); output_a(0b00000000); output_b(0b00000000); output_float(PIN_A0); output_float(PIN_A1); delay_ms(500); le_eeprom(); while(True){}}
valeu mesmo vtrx você me ajudou muuito!
Att,
Victor.
-
valeu mesmo cara. Sequencial realmente melhorou muuito. Você me recomendaria outro Compilador C? Ou definitivamente mudar para ASM?? Pois quando eu começei, estudei o ASM para aprender como funciona o uC, os bancos e tal, mas preferi o C pelo tempo que se leva produzindo o código.
Att,
Victor.
-
Converti o arquivo WAV em Raw no audacity, renomeei o arquivo em .bin e gravei usando o gravador da elnec. Eu testei o simple rate em 8KHz e deu certo porém a qualidade obviamente acaba sendo um defeito. Quando eu usava o SD usei o MikroC Pro pra gravar todo o conteudo nele via RS232.
Att,
Victor.
-
Eae galera, estou com um problema e não sei se tem solução, é o seguinte, fiz um programinha aqui pra testar playback de sons no pic, minha 1ª ideia foi usar o Cartão SD(tudo em RAW data) fiz tanto no proteus como na pratica e funcionou parcialmente, porque demorava pra ler de bloco em bloco, eu lia 1 bloco e tinha um delay de 5ms e isso ficou ruim, parti pra EEPROM e escolhi a 24LC512 que é a unica que tem onde moro, porém a velocidade dela de operação é de 400KHz comparado ao Cartão SD que é de 20MHz(velo maxima) e com isso usando a EEPROM um simples "Oi" que tinha 500ms se tornou um som de 2s aproximadamente, sim horrivel. E queria saber se estou fazendo algo errado para reproduzir o som ou o que posso usar de fácil acesso no mercado para armazenar esse som? Estou usando a frequencia máxima do PIC(20MHz). Sei que tem a linha 25LCXXX que é mais rápida trabalha em 20MHz também seria o ideal eu acredito, ja pesquisei rios na internet e nada, se alguém que já testou algo assim pudesse me ajudar seria otimo .
Codigo(no CCS C) atual para leitura da EEPROM:
#include <16F628A.h>#fuses HS#fuses NOMCLR#fuses NOWDT#fuses NOPUT#fuses PROTECT#fuses NOBROWNOUT#fuses NOLVP#fuses CPD#use delay(clock=20000000)#include <24512.c>int16 length = 23790;int16 i;void main(){ setup_ccp1(CCP_OFF); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); //setup_timer_2(T2_DIV_BY_4,55,1); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); set_tris_a(0b00000000); set_tris_b(0b00000000); output_a(0b00000000); output_b(0b00000000); init_ext_eeprom(); delay_ms(500); for(i=0;i<length;i++) { output_b(read_ext_eeprom(i)); } while(True){}}
valeu,
Victor Migliatti.
-
Problema resolvido depois de muito suor: nao posso criar a conexão no main thread! tem que criar uma asynctask ou então fazer tudo dentro do ClientThread ja ta criado no codigo.
-
-
Eae galera, estou tentando fazer uma comunicação entre o android(usando eclipse 4.2) e o pc(usando delphi 2010) usando socket, so que estou tendo problema no codigo do android, ele funciona como cliente e o pc como servidor, ate ai tranquilo, mas quando eu tento receber alguma mensagem do pc no android ele trava e fecha, mas o contrário funciona tranquilamente, android -> pc. ja usei varios tipos de recepção de dados e nenhum obtive sucesso e com o delphi não há problemas pois testei com outra aplicação cliente no proprio delphi e funcionou ok. Minha intenção é apenas enviar string de um pro outro, porém necessito que os dois hajam esse envio, tanto o android quanto o pc. Segue o codigo do android:
Delphi:
servidor.Socket.SendText('12345' + Chr(10));
Android:
package com.example.wifi;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.Socket;import java.net.UnknownHostException;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity{ //variaveis para conexão Socket socket = null; DataOutputStream dataOutputStream = null; DataInputStream dataInputStream = null; Button button; TextView textIn,textOut; @[member=override] protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button); button.setOnClickListener(buttonSendOnClickListener); textIn = (TextView) findViewById(R.id.textin); textOut = (TextView) findViewById(R.id.textout); Thread cliente = new Thread(new ClientThread()); cliente.start(); } Button.OnClickListener buttonSendOnClickListener = new Button.OnClickListener() { @[member=override] public void onClick(View arg0) { // TODO Auto-generated method stub try { dataOutputStream = new DataOutputStream(socket.getOutputStream()); dataInputStream = new DataInputStream(socket.getInputStream()); dataOutputStream.writeUTF(textOut.getText().toString()); textIn.setText(dataInputStream.readUTF()); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (socket != null) { try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (dataOutputStream != null) { try { dataOutputStream.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (dataInputStream != null) { try { dataInputStream.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }; class ClientThread implements Runnable { public void run() { try { socket = new Socket("192.168.0.164", 8888); } catch (UnknownHostException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } }}
O servidor identifica o cliente tranquilo eu so estou com problema na hora de receber a string do pc, no delphi eu uso quebra de linha e converti o texto para UTF-8.
valeu.
-
Pesquisei mais a fundo e encontrei esse blog muuito bem explicado, ele dá o codigo fonte, creio que é so segui-lo que conseguirá.
Lembrando que você precisará baixar o stack da microchip. Segue links:
http://www.microchip.com/forums/m356755.aspx
ou
http://www.ljcv.net/projects/picdemnet/index.html
Falou
-
Certo, nunca brinquei com ethernet e PIC, mas veja este documento que achei na net, pode te ajudar em algumas coisas, dei uma lida bem rapida e parece ter boa utlidade, explicando passo a passo, ate como testar diretamente no pc , por enquanto estou em bluetooth e PIC, meu proximo vai ser ethernet.
Falou.
-
Não entendi muito bem, você conseguiu no PC, receber o dado do PIC, mas não conseguiu no PIC receber do PC, é isso?
-
Eae Brunocavaledo, se você é iniciante e não sabe como estudar o programa, faça o seguinte, va apagando linhas, mudando valores e vai anotando a função de cada uma.
T+
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
16F628A c/ 24LC512 playback 16KHz audio
em Microcontroladores
Postado
Legal heim, fiquei curioso agora kk. Realmente o proteus pra isso deixa a desejar, também tive problemas em testar com ele, no começo nao funcionava nada e na verdade tudo estava funcionando ¬¬. Sobre o DAC eu ja conhecia R/2R, até montei porém ficou muito ruim o som, dai montei este outro que também era muito mais fácil pra montar na mão e no final acabou com a metade de componentes porque os valores que eu "escolhi" acabaram sendo os tradicionais do mercado então na questão dos valores diferenciados não tive problema. E outro problema era que o único amp. op. que eu tinha precisava de fonte simétrica e eu não tenho, dai uma vantagem pra mim usar esse outro DAC, porque ele não precisa de operacional o que facilitou pra mim. Realmente o R/2R é mais fácil mas não quis perder tempo procurando o erro, pensava que era a fonte mas não era, tanto que eu liguei todos os resistores do R/2R pro terra e coloquei no osciloscópio e continuou essa interferência, dai desisti do R/2R e montei esse outro.
valeu.