Translate

segunda-feira, 14 de abril de 2014

Acertando o Atmega8-16PU para testes com o USBAsp


    Tive um pequeno problema ao programar o Atmega8 somente tendo o protoboard e o USBAsp. A dica é ligar um crystal de 16Mhz e dois capacitores cerâmicos de 22 pF como no esquema do Minimal Shrimp.
    Depois basta ligar o USBAsp nos pino 17 a 20, 22 e 1, conforme  http://webappfreelancer.blogspot.com.br/2013/06/bootloader-no-arduino-minimal-shrimp.html. jumpeia-se somente os pinos 7 com 20 e 22 com 8. O restante dos componentes são dispensáveis. 


    Acertamos os fuses para 8MHz internos (os meus fuses ficaram com L:0xE4 e H:0xD9. 
    Pode se retirar os capacitores e o crystal. 
    Agora o circuito com o Atmega8 funciona praticamente sem qualquer componente extra a 8Mhz.
    Lembre-se que a precisão não é tão boa quanto quando utilizamos um crystal externo, além dos ciclos serem mais demorados. Mas vários projetos que não demandam muita velocidade podem ser utilizados dessa maneira.
    Planejo utilizar para manipular um controle remoto com IR, que deve ser meu próximo projeto.

domingo, 13 de abril de 2014

Entendendo os fuses de AVR - attiny, atmega



Baseado na página http://embedderslife.wordpress.com/2012/08/20/fuse-bits-arent-that-scary/ e http://www.ladyada.net/learn/avr/fuses.html, como o próprio nome diz, não deve ser tão assustador de se entender os bits de fuse dos microcontroladores AVR.

Nem vou traduzir fuse e lock porque não tem esse sentido ao pé da letra. Fuse=fusível é feito para queimar e lock seria travar. A idéia do uso não é esta. Baseado no site acima e em alguma pesquisa para confirmar a veracidade das informações, vai um resumo e algumas considerações e obsevações.


Cada modelo de AVR tem uma configuração diferente. Caso queira uma calculadora online, podemos utilizar  http://www.engbedded.com/fusecalc ou http://eleccelerator.com/fusecalc/fusecalc.php (prefiro o último devido às descrições serem mais detalhadas).


Observe que são bits. Bits que configuram de alguma forma o comportamento o AVR "como acesso à memória, clock e seu divisor, as opções de inicialização, de programação e assim por diante".

AVISO: manipular os bits de fuse e lock incorretamenta podem "bricar" o seu microcontrolador, isto é, eles ficam inacessíveis. Caso aconteça isso, tente seguir algumas medidas destas páginas: http://www.larsen-b.com/Article/260.html e https://sites.google.com/site/wayneholder/attiny-fuse-reset (não testadas). Resumindo, muito cuidado ao manipular pois o simples erro de configurar o clock já pode bricar o AVR.

Outro ponto interessante é que para ativar um item de configuração temos que zerar o bit correspondente (isto é o inverso da lógica aprendida em informática), causando muita confusão.

Os bits de fuse e lock podem variar conforme o modelo dos AVRs. É sempre importante conferir nos datasheets de cada modelo. Abaixo estão alguns exemplos. As observações valem para qualquer modelo.

Lock bits

O ideal é evitar mexer nestes bits. Dizem respeito à bootloader, des/ativação da pinagem, etc. 
lock bits do Attiny25/45/85

lock bits do Atmega328P

LB1 caso seja ativado (zero) desabilita a programação da Flash e EEPROM
LB2 caso seja ativado (zero) desabilita a programação e verificação da Flash e EEPROM

High fuse bits

Os 3 bits abaixo são os mais problemáticos quando alterados sem conhecimento:
RSTDISBL: este bit corresponde ao pino de RESET, liberando para I/O caso esteja ativado. Atenção: a maioria dos programadores de AVR utilizam este pino para fazer o upload do programa; quando ativado poderá impossibilitar a reprogramação.
DWEN: também altera o comportamento do pino de RESET. Ativa o modo DebugWire para este pino, podendo causar os mesmos problemas que em RSTDISBL.
SPIEN: desliga a programação no sistema.

Os bits abaixo afetam o comportamento dos AVRs sem tantos problemas ou bricks.
WDTON: WatchDog timer sempre ligado. Watchdog reinicia o microcontrolador quando detectado algum problema (normalmente quando não passa periodicamente por uma determinada instrução do programa, pois todo programa AVR tem um loop).
BOOTRST: controla se a execução do microcontrolador se inicia pelo programa do Flash ou pela seção de bootloader.
EESAVE: preserva o conteúdo da EEPROM mesmo que executado um Chip Erase (apagamento do chip).


Low fuse bits


CKDIV8: quando zerado causa a divisão do clock por 8; caso o clock interno de 8Mhz esteja selecionado o clock efetivo será de 1Mhz;
CKOUT: permite usar o clock para dispositivos externos quando necessário.
SUT1,0: definem o tempo de startup - inicialização:

Atmega328P tempo de startup 

Attiny25/45/85 tempo de startup 

CKSEL3,2,1: definem a faixa do clock a ser utilizado e quais capacitores de cerâmica a serem utilizados.


CKSEL0: juntamente com SUT1,0 definem o tipo de crystal e tempo de startup

CKSEL0 + SUT1,0 - Attiny25/45/85
(valores para Atmega328P são bem próximos)

Extended fuse bits - também e melhor não alterar

BODLEVEL0, 1, 2: (Brown-out Detect) em alguns modelos podem fazer parte do high fuse bits. São usados para configuração da tensão interna de desligamento do AVR. Caso a tensão caia muito o chip se desligará até a normalização, evitando erros de memória, tempo, etc.
SELFPRGEN: habilitação da programação pelos próximos 4 ciclos de clock. Ele se auto-limpa após esse período.

Dica: sempre que possível, leia os valores dos fuse bits (o AVRDudess consegue), transfira o valor para uma das calculadoras de fuse bits, altere o que for necessário e transfira o valor para o o aplicativo que consiga gravar (o AVRDudess também faz isso)






segunda-feira, 24 de fevereiro de 2014

tinyUSBboard - programável SEM conversor usb-serial adicional e também programador USBasp



Fiz dar certo, mas tenho que ir fazendo o reverso do que fiz para explicar.
Trata-se de um Atmega8 que pode ser programado diretamente na usb.
Somente montei parcialmente o circuito, baseado no site http://matrixstorm.com/avr/tinyusbboard/
O material é extenso, mas testei e fez o que prometeu de início.


Do circuito acima, retirei os switches e os leds, menos o da perna 15, que ficou sinalizando no início.

Montado o circuito e carregado o programa via usbasp e avrdudess, deixei o windows no wordpad e conectei o circuito: ele "digitou" sozinho depois de alguns segundos ligado (e olha que estranhei porque a primeira vez ele ativou e digitou no menu iniciar no espaço de digitação:


demonstrando que funcionou depois de várias tentativas.

Vou complementar esse material mais tarde, porque o projeto promete, mas é meio complicado, pois tenho que mexer na pasta hardware da IDE do arduino de uma versão mais antiga que a que estou usando.

Republicando também a tabela de pinagem do atmega8 disponível no site referido.

e o arquivo que deve ser colocado na pasta hardware (arduino 1.0.4)

-----------------------------------------------------------------------------------------------

Desta vez projetei um pouco mais e consegui desenvolver melhor o circuito final, ainda que errando um pouco. Segue o endereço http://fritzing.org/projects/tinyusbboard-on-solderable-breadboard e uma tela de amostra. Compartilhei o esquema no site do app. Maravilhoso esse aplicativo grátis, o Fritzing.


a placa padrão pode ser encontrada na loja física ou virtual Multcomercial (Santa Efigênia). Em Março/2014 encontrei por R$ 2,50 a und. Agora que aprendi a usar o Fritzing, ficou muito mais fácil. Observando que a parte cobreada apesar de estar sendo vista, é na parte de trás da placa, olhando na figura acima. Gastei uns dois dias aprendendo e montando o diagrama acima, mas valeu a pena. Mais uma vez, recomendo a utilização.


Final: com headers e o resto dos leds. Me obrigou a mudar um pouco o layout e o esquema.

-----------------------------------------------------------------------------------------------
Vai deixar informação difícil de encontrar e de entender assim lá na #¨$&*.
O cara explica as coisas todas espalhadas por vários sites. Até conseguir fazer funcionar, foi uma tarde inteira. Affffffff. Mas acabou dando certo. Dentro da expectativa. Vou dar tudo mastigadinho. O firmware que funcionou no meu Windows 8.1 com arduino IDE 1.0.5-r2. nem estava noticiado na página. Mas achei aqui. O firmware (.hex) somente deixei no meu google drive. Vai que amanhã desaparece do Github...
Algumas dicas: alterar o fuse para L=0x3F e H=0xC0; carregar o firmware_usbasploader094.hex com um programador USBAsp:
conecte o seu tinyUSBBoard; se der dispositivo desconhecido, problemas, que pode ser desde a montagem do circuito até problema na carga ou versão do firmware; eu tive de tudo - se tiver também, confira tudo, inclusive as mensagens de erro do avrdudess; baixe o arduino IDE do site do arduino; baixe a configuração do tipo de placa aqui (ou no google drive); descompactar para a pasta do arduino (na verdade, vai adicionar arquivos dentro do arduino/hardware); abra o programa a ser carregado no atmega8 e configure o ambiente: tipo de programador: usbasp, tipo de placa: tinyusbboard, atmega8, 16 Mhz....; deixe apertado o botão PROG do tinyUSBboard e aperte e solte o RESET dele; solte o botão PROG; se olhar no gerenciador de dispositivos, deve aparecer um libusb-win32 devices/USBasp; talvez tenha que mudar a porta serial no arduino IDE (o meu manteve como COM1); tudo certo, dê o upload no programa; para que ele comece a funcionar após o upload, aperte e solte o RESET e voilá ;). 
Não encontrei referência do driver USBasp nos meus posts anteriores. Caso não tenha, pegue aqui. Necessário para fazer upload pelo USBasp.
Próxima tarefa: fazer funcionar como um programador USBasp.

Uma coisa bacana: programei o atmega8 no próprio tinyUSBboard. Nem precisei ficar desconectando para dar carga, nem para testar. Espero conseguir fazer um programador tão com quanto esse. É o meu melhor programador de AVRs e inicialmente a minha intenção era montar programadores com o atmega8.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Deu certo!! Carreguei o firmware do site matrixstorm (aqui no google drive) fiz as ligações e funcionou (acredita que inverti o atmega8 para programar e fiquei quebrando a cabeça? então, não foi de primeira) !!!
Virou um programador USBasp funcionando para upar em um segundo atmega8. Divino esse circuito! Incríveis esse Stephan Baerwolf e outros que ajudaram no projeto vusb.
Tudo igual ao esquema acima. Adicionam-se as ligações do tinyUSBboard com o atmega8 montado no Shrimp minimal:
tinyUSBboard - descrição - atmega8
16 - rst - 1
17 - Mosi - 17
18 - Miso - 18
19 - Sck - 19
20 - VCC - 20 
(p/ VCC podem ser usados os pinos 8-8)
22 - GND - 22
(p/ GND podem ser usados os pinos 7-7)


Testado com sucesso no Arduino IDE e no AVRDudess

-----------------------------------------------------------------------------------------
Próximo estágio: fazer o mesmo com um atmega328p-pu. Um arduino auto-programável, se conseguir. E tem os arquivos no site do matrixstorm! 
Outro projeto poderia ser o circuito final do USBasp  que mencionei em um post anterior. Mas pensando melhor, este circuito do tinyUSBboard é muito mais simples e funcionou muito bem, tendo até outra utilidade (placa auto-programável). 
Dá vontade de tentar o One-chip arduino ver. 2.0. Só agora estou entendendo bem o conteúdo e termos usados.





terça-feira, 18 de fevereiro de 2014

POV com arduino


   O código mais simples para POV (Persistence Of View) foi o do Blog ilblogdidami.blogspot.com que continha um erro corrigido no código postado aqui. Thanks to Mr. Damiano for the almost perfect code.
   O esquema é muito simples: conectar 7 leds e seus respectivos resistores (utilizei os de 330 ohms) nas portas digitais 2 a 8 do arduino. Pino comun no GND e
   Desta vez usei um arduino pro mini (ching ling, lógico) mas que funciona muito bem. O esquema está no Fritzing (freeware) fácil, fácil.
   Caso utilize uma fonte com mais de 5 V, recomendo ligar nos pinos RAW (+) e GND(-) no caso do Arduino Pro Mini.
   O fonte para Arduino 1.5.5 r2 Beta e o esquema podem ser encontrados aqui.


-----------------------------------------


A partir disso, cosntrui a base giratória para testar. Um cooler velho, uma tampinha de pet, uma apoio de cpu sff, um header 90 graus, um parafuso, uma fonte 12 v e super bonder. Como não caprichei, ficou tudo meio fora de centro, girando um pouco excêntrico. Deu certo, mesmo a excentricidade tirando bastante a velocidade do cooler. Talvez num próximo projeto eu faça os cálculos de centro com mais perfeição.





Desculpe a qualidade, mas é uma câmera de 2003, que eu adoro.
-------------------------------------------------------------------------------------------------------
Fiz uma segunda versão - 28/Fev/2014

Base de HD a 7200 rpm (nunca vai girar nessa velocidade). Tks to Edilson pela dica e por fornece o primeiro HD.

Usei uma Nikon mais nova. O resultado é muito melhor, apesar da velocidade ser bemmmmm maior.

Usei um Samsung 80J de base. A haste do motor fica exposta e não precisa nem aumentar a altura. Se notarem, existe um CD de base no suporte. Incrivelmente o furo do CD é do tamanho exato da haste do HD. Bastou fazer 4 furos para os parafusos e encaixar o CD aproveitando todas as partes da haste. Calculei o centro de gravidade do suporte equilibrando sobre um lápis. Método científico, kkkk. Mas o nível de vibração diminui muito desde o início da montagem. Não conseguia segurar na mão no começo.  Gambiarras e mais gambiarras, gastei muitas lagartixas (lacres de fita plásticos) até conseguir o melhor posicionamento das pilhas.

Quer fazer funcionar? A bagunça me ajudou, kkk.


Infelizmente, a velocidade não chega até os 7200, seja pelo atrito com o ar ou pelo balanceamento que nunca chega a 100%. Depois de alguma voltas, o HD para sozinho, pois tenta chegar aos 7200 mas falha e depois de algumas vezes já desliga.
Uma coisa que notei é que ao girar mais devagar, conseguimos mostrar muito mais letras em menor espaço. Velocidade mais lenta é mais controlável e exige menos balanceamento. 


sexta-feira, 14 de fevereiro de 2014

Conectando e upando programas para o Arduino Pro Mini com CP2102



   Outra vez quebrei a cabeça com tentativa e erro. Segue, mastigadinho, um tutô para conectar o Arduino Pro Mini via Programador CP2102 - o que tenho é Baite - www.betencu.cn - modelo que dificilmente aparece nos demais tutoriais e fotos mas que vende bastante no Brasil.

                 Pro Mini                CP2102
                  GND ------------------- GND
                  VCC ------------------- 5V (DEPENDE DO MODELO)
                  RX -------------------- RXD
                  TX -------------------- TXD
                  GRN ------------------- DTR (EMBAIXO)

No Arduino IDE 1.5.5-r2, acertar para Placa Arduino Pro ou Pro Mini, Processador para Atmega328 (5V, 16 Mhz), Porta para a porta detectada, e Programador para AVRISP mkII.

Caso o CP2102 não tenha o pino de DTR, seguir o tutorial: Programador CP2102 SEM Autoreset - upload com botão de reset

segunda-feira, 10 de fevereiro de 2014

Construindo um USBasp - programador AVR


   Após uma semana tentando, refazendo, verificando, consegui fazer um programador USBasp prototipado, conseguindo programar um outro Atmega8. Orgasmo mental de felicidade.
   Segue a receita de bolo abaixo, em um protoboard.
   Seguindo o esquema do blog do Denilson Figueiredo de Sá, fiz o circuito, errado, mas consertei seguindo o esquema original. O Denilson fez um grande favor de arrumar o esquema para um formato físico mais próximo do real, facilitando a identificação das pernas do Atmega8 e suas ligações. Meu principal erro foi a inserção de um resistor (2k2) errado no lugar de outro que omiti (10k). Erros e mais erros de identificação do hardware, me desanimando um pouco.
   Republico os esquemas abaixo, porque os sites vivem desaparecendo.
Esquema do Denilson

Esquema original 

   Retirar o driver windows aqui, o libusb_1.2.4.0. Retirar também o firmware usbasp.2011-05-28 aqui. Utilizei o arquivo hex da pasta bin/firmware.

   Para fazer upload do firmware e acertar os fuses, utilizei um USBasp ching-ling da Baite, via mercado livre, que eu já citei neste blog anteriormente, e o programa avrdudess_20140102.zip no mesmo repositório logo acima.
   Os fuses recomendados são: LFUSE=0xef. HFUSE=0xc9.
   Para mais informações confira algumas instruções do avrdudess aqui.
   Uma observação é que não utilizei nenhum dos jumpers/switches e funcionou de primeira. Atentar para os fuses originais.



   Protótipo montado e funcionando. No soquete tipo Shrimp Minimal, está outro Atmega8 que foi programado. Tanto o exemplo blink via Arduino IDE como o firmware USBasp firmware via AVRDudess foram gravados com êxito. Isto causa o famoso dilema chicken-or-egg, pois o chip programado vira um chip programador.
   Infelizmente comecei por um projeto prometedor que era o tinyUSBboard. A idéia é excelente, pois pode atuar como um arduino standalone ou como um programador. Como não consegui fazer o circuito funcionar, pela falta de experiência com eletrônica, esquemas, etc, após várias tentativas e revisões, acabei desistindo. Mas recomendo, pois aparentemente várias pessoas conseguiram confeccionar o seu.

terça-feira, 3 de setembro de 2013

Configurar Ubuntu Server para instalação do CD/DVD (12.04/13.04)

1. Montar o cd na pasta /media/cdrom: $ mount /dev/cdrom /media/cdrom
2. Caso necessário, executar o comando para atualizar a lista de pacotes do CD: $ apt-cdrom -m add
3. Instalar pelo apt-get, por exemplo: $ apt-get install lamp-server^