A placa personalizada do Arduino emite um sinal sonoro e o processo congela enquanto eu carrego um esboço nela. Por quê?


8

O mais estranho está acontecendo com uma placa Arduino independente que eu projetei e construí. A placa (cujos esquemas estão abaixo) possui os seguintes recursos:

  1. Possui um ATmega328P com um regulador de tensão de 5V e um circuito usual quando configurado como um controlador independente.
  2. Ele controla um placar com vários dígitos de 7 mostradores vinculados pelos conectores à direita (JP1 a JP12).
  3. Possui botões de cursor decodificados usando uma escada de tensão através de ANALOG_0 (A0).
  4. Possui um relógio em tempo real para manter o tempo quando está desligado.
  5. Possui um módulo receptor de RF.
  6. Ele possui um cabeçalho UART (JP17) para que eu possa programar a placa usando uma porta serial.
  7. Possui um alto-falante conectado ao pino digital 3 (D3).

Esquemas do controlador

Carrego esboços usando um adaptador RS232 para TTL que eu também construí (esquemas também abaixo) e um cabo serial para USB. Ao programá-lo, o quadro se comporta como um quadro Severino .

insira a descrição da imagem aqui

O que é estranho é que, quando eu carrego um esboço, o processo é pausado no meio e o alto-falante começa a emitir um bipe continuamente. Ele pausa com as seguintes mensagens avrdude:

avrdude: Versão 5.11, compilada em 2 de setembro de 2011 às 19:38:36 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2009 Joerg Wunsch

     System wide configuration file is "C:\arduino-1.0.3\hardware/tools/avr/etc/avrdude.conf"

     Using Port                    : \\.\COM1
     Using Programmer              : arduino
     Overriding Baud Rate          : 115200

Quando pressiono reset no quadro, o avrdude continua emitindo suas mensagens (como abaixo), o bipe para, o upload continua e o esboço é enviado com sucesso para o quadro.

avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
... messages and upload continue and completes successfully.

Não tenho o resto das mensagens à mão aqui, mas espero que você entenda.

Então, minhas perguntas são:

  1. O que está fazendo com que o processo de upload seja pausado?
  2. Por que a campainha sonora apita quando o processo é interrompido?

11
Nas preferências do IDE, ative o Verbose para upload. Esse log deve fornecer algumas dicas ou mais pistas.
Mpflaga

11
Pergunta estúpida: Você programou o ATmega328p com um gerenciador de inicialização?
Connor Lobo

11
"funciona perfeitamente em um UNO" - Isso é informação útil. Portanto, sua placa deve ter um soquete. Se sim - Você pode determinar a fonte mais especificamente com uma experiência rápida. Para cada um dos pinos de E / S, dobre o pino para fora, para não fazer contato. Flutuando! Conforme você insere o IC no seu soquete. Eventualmente, com todos os pinos flutuando, seu circuito estará fora de questão. E como algum ponto entre o atraso / bipe deve parar. E relatar de volta.
Mpflaga

11
@jfpoilpret se o alto-falante é de fato uma campainha (piezo), então não há indução, portanto não é necessário diodo. Esqueça meu comentário original.
Jfpoilpret

11
Um amigo meu que fez muitos aparelhos eletrônicos em sua juventude me disse uma vez: "se não funcionar como você esperaria, adicione um capacitor de desacoplamento". Em muitas ocasiões, segui esse conselho com grande sucesso! No seu esquema, não está claro para mim, onde você pode adicionar uma capacidade de dissociação. Você já experimentou // com a campainha? Você também pode tentar 2 (um para freqs baixos, um para freqs altos): um eletrolítico de pelo menos 1uF, um de 100nF de cerâmica. Na pior das hipóteses, não terá qualquer efeito :-)
jfpoilpret

Respostas:


3

O que está fazendo com que o processo de upload seja pausado?

Bem, considerando todos os comentários feitos em sua pergunta, esse é definitivamente um assunto delicado. Você pode tentar adicionar um capacitor de desacoplamento, conforme sugerido por @jfpoilpret, embora seus esquemas pareçam bons para mim ... (talvez faça uma revisão dele no EE SE ).

Também aconselho que você copie o avrdudecomando da saída IDE do Arduino (você o encontrará no topo) e execute-o no shell de comando com menor taxa de bits:

avrdude -v -v -v -v -C "C:\arduino-1.0.3\hardware/tools/avr/etc/avrdude.conf" -P COM1 -patmega328 -U… -B3 -b115200

quanto maior o -Bvalor, menor a taxa de bits. e -ba taxa de transmissão correta para o seu carregador de inicialização (você tem certeza de que é 115200? é mais comum ver 57600).

Você também ajustou os fusíveis corretamente? Você também pode querer verificar os valores dos fusíveis para ver se os relógios estão configurados corretamente:

avrdude -U lfuse:r:-:i -U hfuse:r:-:i -U efuse:r:-:i

que produzirá os valores dos fusíveis. Em seguida, para tornar os valores legíveis, coloque-os na parte inferior do formulário no site da calculadora de fusíveis , depois de escolher o Atmega328PMCU na lista suspensa.

Verifique novamente se:

  • você tem tamanho suficiente para o carregador de inicialização (geralmente, quanto mais você fornecer, melhor);
  • você definiu corretamente a configuração de cristais para o seu design (que pode não ser compatível com as configurações padrão de Uno definidas pelo IDE do Arduino), verificando se você configurou corretamente o cristal externo em 16 MHz…

Por que a campainha sonora apita quando o processo é interrompido?

Isso ocorre porque quando o processador não possui a saída configurada, os valores nos registros estão em um estado indefinido e imprevisível. O que significa que geralmente mantém o último valor que tinha antes de uma redefinição ou estado alterado por causa de alguma estranheza eletrostática ou está produzindo uma saída PWM estranha por causa da influência de um relógio próximo.

Então, basicamente, há algo errado acontecendo quando você está enviando seu código e essa coisa errada tem um efeito indireto no áudio. Eu não me preocuparia muito com essas coisas, mas mais com a causa da pausa.

Infelizmente, não tenho uma resposta direta para você, mas, na melhor das hipóteses, alguns caminhos que você deve investigar mais. HTH


+1 Obrigado pelas dicas! Muito útil. Vou experimentá-los todos e informar em alguns dias.
Ricardo

Só queria que você soubesse que eu corrigi o problema. Veja minha resposta a esta pergunta. Obrigado mesmo assim!
Ricardo

3

Finalmente descobri o que estava causando o problema: o sinal de redefinição do pino 4 (DTR - Data Terminal Ready) no conector DB9-Female estava aumentando até 10V antes de ir para 0V e estava acionando a programação de alta tensão no ATmega. Abaixo está uma foto de escopo mostrando a situação:

Âmbito mostrando um pico de tensão de 10V

O traço amarelo é DTRsinal enquanto o traço verde é o RESETsinal no ATmega.

De acordo com a nota de aplicação Atmel AVR042: Considerações sobre o projeto de hardware do Atmel , deve-se adicionar um diodo ESD entre o ATmega RESETe Vccimpedir que o sinal de redefinição ative o modo de programação de alta tensão, da seguinte forma:

Conexão de pino RESET recomendada para o ATmegas

Depois de adicionar um diodo de sinal tão pequeno (1N4148) como a nota do aplicativo recomendada, resolvi o problema. Veja abaixo a foto da luneta tirada após a adição do diodo.

Âmbito de tiro depois de consertar a prancha

Agora o pico de 10V se foi.

Isso foi complicado !! Mas nunca consegui encontrar o que havia de errado sem a pesquisa e as ferramentas certas. Dinheiro em um escopo é dinheiro bem gasto!


11
Isso ocorre porque sua linha de redefinição não possui o tipo de conversor de nível aplicado à linha de dados seriais. A maioria usa um tradutor de nível ic e executa a redefinição através de um canal.
Chris Stratton

@ Chris - Sim, eu lembro de você me dizendo para usar o segundo conversor MAX232 para consertar isso. Vou dar outra olhada e ver se consigo consertar esse design. Obrigado!!
411 Ricardo

1

Não tenho certeza, mas o problema também pode estar relacionado ao recurso de redefinição automática da placa do conversor.

Copiei o design da placa conversora do Arduino Severino e, de acordo com o manual , a comunicação serial deve ser configurada em 19.200 bps para que o recurso de redefinição automática funcione.

Verifique se a velocidade da porta COM do computador está definida como 19200bps, caso contrário, a redefinição automática não funcionará corretamente.

Estou usando 115.200, então isso deve ser um problema.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.