Mais um pequeno programa.
Neste procurei ambientar-me com os registos ADRESH e ADRESL assim como com o setup dos ADC.
É feita a leitura analógica do canal ANS0, que resulta na variável "adc3".

Deixo aqui apenas 2 curiosidades que nunca tinha visto "com olhos de ver":
* O resultado destas ADC é de 10bits, e cada registo é de apenas 8. Como não "cabe" tudo num só registo, tem de ser usados 2 registos, no entanto 2 registos armazenam até 16 bits. Quer dizer que há 6 bits sem informação.
O registo ADCON1.ADFM, define se esses 6 bits devem ficar à esquerda do registo mais significativo (ADRESH) ou à direita do registo menos significativo (ADRESL).

* Como mostra a figura o registo ADRESH deve ser colocado há esquerda do ADRESL e então o valor deve ser lido como um só. No caso de ADFM=1, tem de se fazer 8 deslocamentos há esquerda do ADRESH e depois fazer a soma com o ADRESL.


Agora tudo faz sentido, mas nesta história passei quase uma tarde a partir pedra.

O código de teste (para 16F88):

#include <xc.h>

#pragma config CP=1, DEBUG=1, LVP=0, BOREN=0, MCLRE=0, PWRTE=1, WDTE=0, FOSC=INTOSCIO

#define _XTAL_FREQ 4000000

void main()
{
int adc1, adc2, adc3;

//portos
TRISA = 0b00000001; //RA0 como entrada
TRISB = 0b00000000;
PORTA = 0;
PORTB = 0;

//oscilador
OSCCONbits.IRCF = 0b110;
OSCCONbits.OSTS = 1;
OSCCONbits.IOFS = 1;
OSCCONbits.SCS  = 0b00;

//ADC config
ANSEL = 0b0000001;

ADCON1bits.ADFM  = 1;
ADCON1bits.ADCS2 = 0;
ADCON1bits.VCFG  = 0b00;

ADCON0bits.ADCS = 0b11;
ADCON0bits.CHS  = 0b000;
ADCON0bits.ADON = 1;


//programa leitura
ADCON0bits.GO_nDONE = 1;                     //iniciar leitura da ADC
__delay_ms(10);
adc1=ADRESH;
adc2=ADRESL;
adc3=((ADRESH<<8)+(ADRESL)); //deslocamento à esquerda
__delay_ms(100);

}

Hello World - MPLAB XC8

Postado por David Martins às 14:00 0 Comments

O meu primeiro programa de teste usando o compilador MPLAB XC8.

Este é o tipico programa do LED a piscar.

#include <xc.h>

#pragma config CP=1, DEBUG=1, LVP=0, BOREN=0, MCLRE=0, PWRTE=1, WDTE=0, FOSC=INTOSCIO

#define _XTAL_FREQ 4000000                           //freq de trabalho 4MHz

void main()
{
//portos
TRISA = 0b00000000;                                  // tudo como saída
TRISB = 0b00000000;
PORTA = 0;
PORTB = 0;

//oscilador
OSCCONbits.IRCF = 0b110;
OSCCONbits.OSTS = 1;
OSCCONbits.IOFS = 1;
OSCCONbits.SCS  = 0b00;

while(1)
{
RA1 = 1;
__delay_ms(500);
RA1 = 0;
__delay_ms(500);
}

O que é?


O free cooling consiste numa técnica que explora a existência de diferenças de temperatura entre ambientes (entalpia) para a produção de arrefecimento.
Esta técnica permite resultados bastante satisfatórios com um custo bastante baixo.
É aplicado a sistemas térmicos que utilizam a temperatura do ar ambiente exterior para arrefecerem um elemento de refrigeração - líquido, sólido ou gasoso - sem o auxílio de máquinas frigoríficas ou de máquinas activas (AC's).

Existem várias formas de implementar este sistema de arrefecimento. A mais simples que já vi consistia apenas em apenas 2 sensores, um pequeno circuito controlador e um ventilador.
O modo de funcionamento era bastante básico, mas eficiente. Algumas estações de comunicações móveis (normalmente aquelas "casinhas" perto das torres de RF) utilizam-no para arrefecer os seus emissores. Basta que a diferença de temperatura entre o exterior e o interior seja negativa, ou superior a uma determinado valor, para que seja accionado o ventilador e se arrefeça o interior do edifício.

Claro que em "competição" com os sistemas activos, a nível de dissipação ele perde, no entanto a longo prazo o consumo de um sistema activo pode pagar 3 ou 4 sistemas free cooling.


PS: Lembrei-me ainda de um sistema que quase todos temos e nem associamos ao free cooling. Um computador, quando tem as suas ventoinhas a trabalhar, parte do principio que o ar exterior é mais fresco que o interior e bombeia ar para dentro com o intuito de arrefecer toda a electrónica.







O recente e muito falado Data Center da PT na Covilhã vai utilizar muito este sistema para poupar uns euros valentes :D.

Para mais info, clicar AQUI.

PIC Tutorials

Postado por David Martins às 01:14 0 Comments

Link para tutoriais PIC, usando vários compiladores.

De momento tenho andado muito sossegado por aqui, pois ando a estudar programação MPLAB XC8 nos tempos livres. Não há engenhocas por agora :(.


The eco-friendly tree planting robot as its creator named it, is a four legged planting robot. This robot is equipped with a planting arm and a planting head. The legs of the robot reduce the pressure applied on the forest floor and allow the machine to be smaller, while still being able to move through tough terrain. Today, most parts of the forestry industry in Sweden is completely mechanized. Planting, on the other hand, is mainly done by hand. In this way, deforestation is more rapid then the replanting process. This is a hard work and getting increasingly difficult to find willing labors. The existing planting machines developed throughout the years are still inefficient and inflexible. These machines are big in size and function, creating a strain on the environment which is not necessary. The tree planting robot, designed by Anna-Karin Bergkvist prepares the planting spot in an environmentally friendly way by using hot steam to kill competing vegetation. The seedling is planted with a protective barrier made of biodegradable plastic.





This barrier protects the seedling from bugs, without the use of toxic insecticides. The engine is steam based, being fueled by forestry waste, like wood chips or pellets. Steam engine allows the cooling process to be made with water instead of oil. The robot has a seedling ramp on the back which allows it to carry up to 320 in one single load. The seedlings are fed one by one to the front of the robot, where they are loaded onto a revolving cartridge on the planting head. 

When the cartridge is full, the arm extends to plant the seedling in a pattern around the robot. After all the seedlings in the cartridge have been planted in the area where the arm can reach, it retracts to pick up more. This process allows the robot to move in a different area and continue the reforestation process until all the seedlings on the load ramp have been given a spot to grow in. The robot is transported to theplanting area in a trailer, that also contains the seedlings, fuel and water.

When the robot has consumed all of its seedlings, it returns to the trailer for a refill. The trailer acts as a portable service station for the robot, the refueling and refilling is done automatically. The tree plantingrobot is indeed a nature’s ally, helping fast reforestation outcome the deforestation.
 

Após ter tido vários problemas com a temporização do micro, tal como prova a semana de teste que passou não é fácil obter um tempo certo.
Hoje coloquei de lado a utilização do sleep mode quando vi que alimentado a 4V, com clock de 125KHz e usando o Timer1 para "cronometrar" consumia apenas 400uA. Não é tão bom como os 256uA do sleep mode, mas é muito mais preciso assim.

Agora estou a utilizar mudança da freq de clock a meio do programa, para reduzir o consumo. Durante as medições e escrita na EEPROM, utilizo 2MHz, mas para "passar o tempo" baixo para 125KHz (INFO).

Usando um timer a contar ciclos de clock, faz com que consiga ter mais precisão temporal do que usando o INTRC de 31KHz do Watch Dog Timer.

Esta é a pequenina parte do código que não existia e foi acrescentada hoje para fazer com que tudo funcione certo.

SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_4);
(...)
setup_oscillator(OSC_125KHZ);
#USE delay(clock=125KHz)
(...)
SET_TIMER1(0);
ENABLE_INTERRUPTS(INT_TIMER1);
while(!acorda);
DISABLE_INTERRUPTS(INT_TIMER1);
(...)
#INT_TIMER1
void tempo()
{
j++;
if(j==108)
{
acorda=1;
}
}
Até ao momento, passadas já 4h30min de teste, ainda não ganhou nem perdeu um segundo de "erro", o que a meu ver é óptimo!


Próximos passos:

Esta semana que se segue vou preparar todos os componentes para a construção do Radiation Shield.
Infelizmente a montagem "definitiva" do circuito está dependente de um conversor USB-Serial que ainda não chegou. Não gosto de avançar com a produção da PCB sem ter tudo a funcionar na breadboard.
Lá para a "parte 20" já devo estar muito perto de terminar.

CLKO MCU micro

Postado por David Martins às 18:35 0 Comments

Para se ter algo muito controlado, temos de ter a certeza de que o oscilador está no valor que se pretende.


A foto em baixo, mostra pequenos pulsos de 10us no programa de interrupção de um Timer interno. Ontem fiz várias medições deste tipo para ter a certeza de que Postscaler usado estava a "marcar" correcto.


Cheguei à pouco a casa e vim logo ver como estava o meu datalogger.

Olhando para o relógio até que o LED piscasse, reparei no atraso de 7min, era esperável que piscasse ás 16h, mas piscou ás 15:53.
Foram gravadas 571 temperaturas, o que dá um atraso de 735ms em cada wake-up. Não é coisa que se meça com facilidade cronometrando à mão, mas com muitos registos o erro vai acumulando e resulta nestas diferenças maiores facilmente cronometradas.

Resta-me estudar melhor o que está acontecer e provavelmente este erro estará a ser provocado por um desvio no oscilador interno do micro.
Poderia usar um cristal externo, mas tal como já disse noutros posts ia aumentar o consumo e isso não me agrada nada.


No último artigo sobre este projecto, expliquei algumas modificações que foram feitas para baixar o consumo de energia de modo a que as pilhas durem ainda mais, mas também como utilizei a temporização do WDT para obter 15min quase certos.

Esta noite ficou tudo a funcionar e como é obvio o erro vai acumulando, mas na medição das 13:02, havia apenas um erro de 20 segundos, ou seja, um LED no circuito haveria de ter piscado ás 13:02 certas e não ás 13:02:20... mas já foi corrigido e atrasei um pouquinho os tempos e agora está bem.

Série de dados da noite passada.



A próxima semana deixarei tudo a funcionar para que na sexta possa ter a 1ª semana de reolha de dados, ver se tudo correu bem, qual é o atraso, etc...

Número de visitas

Postado por David Martins às 02:37 0 Comments

Não sei se este número irá dar sorte ou não, mas é um número de visitas interessante e que já ultrapassa aquilo que esperava.

A todos os visitantes regulares, aos visitantes ocasionais e a todos os outros, o meu OBRIGADO :D.


Hoje tive finalmente algum tempo para poder dar mais um retoques neste projecto.
Na parte 13 tinha surgido o problema do consumo, que não era mau, mas também não era o ideal.

Após a discussão no fórum electronicapt, surgiram várias alternativas, algumas das quais já tinha pensado mas que descartei à partida por estupidez (admito).
Repensando em tudo novamente, a solução que de facto se justifica é sem dúvida a de colocar o micro em sleep mode quando não está a fazer nada... quer dizer, ele fica a contar o tempo, mas é como se não estivesse a fazer nada.
Entrando no modo sleep, o micro baixa o consumo brutalmente e tudo pára, excepto um pequena percentagem que mantém as suas funções. É o caso do Watch Dog Timer.

Daí até chegar á conclusão de como me deveria aproveitar deste temporizador, foi mais um passo. Este micro em vários prescalers que se podem adaptar a praticamente todos os tempos!

Como o intervalo de tempo que eu pretendia era 15min, calculei todas as hipóteses numa folha excel e cheguei à conclusão:
WDT_1152MS x 128 dentro de um "for" a contar até 5;
WDT_288MS x 16 dentro de um "for" a contar até 32;
Estes valores, embora apoiados em alguns cálculos, foram o resultado de várias experiências de tentativa e erro (técnica bastante valiosa :p ).

Medição do consumo de corrente

Pode parecer complicado medir alguns uA, mas até nem custa muito!
Tudo é feito com a lei de Ohm. Colocando uma resistência de 1K em série com o circuito, vai provocar uma determinada queda de tensão. Ora uma queda de 1V, significa que a resistência de 1K está a ser percorrida por uma corrente de 1mA.
Como se pode ver no multímetro em baixo, 0.286V corresponde, claro está, a 286uA, corrente durante o sleep mode, pois quando está a ler o sensor chega aos 5mA (mas por breves instantes).



Levitação sem recurso a imans

Postado por David Martins às 02:46 0 Comments

De certeza de já muitos viram estes pequenos iluminadores à venda em locais de bricolage.
Ontem vi vários à venda por apenas 1.99€ e achei um bom "investimento" para peças.


A base sai muito facilmente e apenas 2 parafusos prendem a tampa inferior.



Lá dentro pode-se ver uma pequena PCB com o circuito onde liga o painel solar e o interruptor.
O circuito é muito simples, pois utiliza um ANA618. Este circuito integrado faz a medição do painel solar e se o valor de tensão for alto, então o circuito age como sendo dia e carrega uma pequena bateria de NiCd. Quando a tensão no painel desce, o circuito age como sendo noite e faz com que o Led seja alimentado a partir da energia guardada na bateria.



Quando olhei o circuito reparei numa bobina (L1) e achei estranho estar ali, mas calculei que que houvesse por ali algum PWM, para reduzir o consumo do LED.
Só por curiosidade liguei o osciloscópio lá e comprova-se que há por ali uma oscilação com uma frequência de 500KHz.. 



Deste iluminador aproveita-se tudo... aliás, terei de comprar outro para juntar os 2.
Daqui aproveita-se o painel, como é obvio, a bateria e possivelmente até o ANA618.

Comprar mais um porquê?

Bem, com mais outro  vou ter o dobro dos componentes em cima. O painel quando iluminado fornece perto de 1.5V, logo 2 em série vão criar um DDP perto de 3V. Tal como as baterias em série fico com 3V, para alimentar um circuito de baixo consumo, como é o caso do datalogger :D.

Ao que parece alguém denunciou o meu blogue, como sendo um blogue de spam.
Recebi o aviso da google, mas já tratei de resolver tudo.

Não sei, mas é possível que possa haver alguns problemas no acesso ao blogue nestes dias... ou talvez não!


Olá, O seu blogue em http://blogoengenhocas.blogspot.com/ foi identificado como um potencial blogue de spam. Para corrigir esta situação, preencha o formulário em http://www.blogger.com/unlock-blog.g?lockedBlogID=3141644733721608664 para solicitar uma avaliação. Caso não seja avaliado, o blogue será eliminado dentro de 20 dias e os seus leitores irão visualizar uma página de aviso durante este período. Depois de recebermos o seu pedido, procederemos à avaliação do blogue, e ao respectivo desbloqueio, no prazo de dois dias úteis. Quando tivermos avaliado o seu blogue e determinado que o mesmo não é spam, o blogue será desbloqueado e a mensagem no seu painel de controlo do Blogger deixará de ser apresentada. Se este blogue não lhe pertence, não será necessária qualquer acção da sua parte e outros blogues que tenha não serão afectados. Encontramos o spam através da utilização de um classificador automático. A detecção de spam automática é naturalmente imprecisa e, por vezes, um blogue como o seu pode ser assinalado incorrectamente. As nossas desculpas por este erro. No entanto, através da utilização deste tipo de sistema, podemos dedicar mais armazenamento, largura de banda e recursos de engenharia aos utilizadores de blogues e não aos autores de spam. Para obter mais informações, consulte a Ajuda do Blogger: http://help.blogger.com/bin/answer.py?answer=42577 Agradecemos a sua compreensão e ajuda relativamente aos nossos esforços de combate ao spam. Atentamente, A Equipa do Blogger P.S. Lembramos mais uma vez que, a menos que solicite uma análise, o seu blogue será eliminado dentro de 20 dias. Clique nesta hiperligação para solicitar a avaliação: http://www.blogger.com/unlock-blog.g?lockedBlogID=314164473372160866

Pelas pesquisas que fiz... parece ser procedimento de rotina em alguns casos. 

À primeira vista, talvez este pareça um circuito impresso comum, mas esta placa – feita por Yuri Suzuki – na verdade mostra o mapa do metro de Londres. E se você olhar mais de perto, lá estão componentes e resistores escolhidos para recriar o London Underground.

A engenharia da placa foi feita por Masahiko Shindo. Ele criou uma coleção de objetos funcionais que tentam desmistificar a eletrônica, e dar ao usuário uma compreensão melhor de como as coisas funcionam. A placa é uma tentativa de explicar melhor como funciona um circuito impresso.

Ao posicionar estrategicamente certos componentes de bateria, alto-falantes e resistores por todo o mapa, os usuários podem entender visualmente as complexas redes associadas à eletricidade, e como a energia é gerada dentro de um rádio.



Window Cling Solar Charger

Postado por David Martins às 12:18 0 Comments

Simples e eficiente o Window Cling Solar Charger é um carregador de celular que pode ser usado em qualquer lugar. Basta colocar o carregador direcionado ao sol e conectar em seu celular.



Acabou de me surgir um problema, ao qual não tenho uma resolução muito obvia ainda.
Devido ao protocolo de comunicação "1wire" que estou a usar para comunicar com o sensor da MAXIM,  não consigo baixar a frequência de clock para menos de 2MHz, ficando por isso com um consumo mais elevado que aquele que esperava.


Estou a testar na breadboard e tenho uma consumo de cerca de 1mA... queria reduzir mais um pouco, mas já não é mau. Uma bateria de 1,5A (uteis) alimenta o circuito para 62 dias aprox.

Em sleep mode a consumo cai para 500uA... só tenho de estudar bem o modo sleep deste micro.


EDIT

Não posso recorrer ao sleep mode, no meu caso, pois este micro só sai deste modo com um pulso externo e não tenho nada capaz de lhe fornecer esse pulso.
Na pior das hipóteses ficar a consumir 1mA já não é muito mau.

Desmontar leitor de CD's

Postado por David Martins às 22:00 0 Comments

Este teve apenas o objectivo de matar a minha curiosidade em como seria o laser dos mesmos.

Ainda vou estudar a forma de funcionamento, uma vez que tem 3 pinos e não é muito obvio para mim o modo de funcionamento.


PS: última foto mostra que um dos pinos não tem de ser usado.







Mais uma noite de registos. Hoje confirmo que tudo funciona bem e posso avançar para a fase de montagem.
Foram feitos 1040 registos com intervalos de cerca de 30s.
Tenho aqui um fenómeno qualquer por volta das 8:30 que não consigo explicar muito bem.
Já ontem fez o mesmo... tenho de me levantar um dia a essa hora para ver o que acontece eheheh

Cliquem aqui para ver maior
(canto inferior esquerdo da imagem - "expand to actual size")



"Bombas de Semente"

Postado por David Martins às 11:00 0 Comments

Uma ideia bastante criativa.




Seed Bomb é sem dúvida um dos projetos mais criativos já criados para reflorestar áreas devastadas. Desenvolvido pelos designers Hwang Jin Wook, Jeon You Ho, Han Kuk Il e Kim Ji Myung o Seed Bomb é um conceito de “bombas” feitas em plástico biodegradável que ao serem lançadas soltam cápsulas com sementes para recuperar áreas degradadas.



Cada cápsula possui um solo artificial contendo as sementes. Ao “bombardear” o solo a cápsula se prende ao terreno e mantém a planta viva até que a umidade produzida por ela derreta o plástico e a planta consiga se fixar no solo. Com uma “arma” destas ao nosso alcance, poderíamos transformar grandes áreas devastadas em lindas paisagens.


Para ver mais, clique AQUI.


Engenheiros de Singapura criaram uma antena supercompacta, de alto desempenho, capaz de suportar um tráfego de dados 200 vezes maior do que a tecnologia Wi-Fi atual.

A antena é totalmente baseada na tecnologia do silício, o que significa que ela está pronta para ser incorporada nos aparelhos em fabricação.
Segundo os pesquisadores, a antena permitirá, além do aumento da potência, a miniaturização dos aparelhos.
Medindo 1,6 mm x 1,2 mm, ela custa o equivalente a um terço das antenas atuais, mesmo sendo centenas de vezes mais eficiente. 


Operando na faixa de 135 GHz, a antena consegue suportar uma velocidade de transferência de dados de 20 Gbps - 200 vezes mais rápido do que o Wi-Fi - o padrão 802.11 suporta dados na faixa dos 100 Mbps.
Segundo os pesquisadores, isto viabilizará a recepção de conteúdos de multimídia, como filmes, apresentações online, teleconferência e entretenimento.


Ver noticia completa AQUI.

O universo da electrónica permite que as engenhocas/projectos de ontem são as peças de hoje!
No lixo "electrónico" aparecem verdadeiras surpresas.
Deixo aqui alguma fotos, mas infelizmente fiquei sem bateria. O grande destaque vai para o "AMIGA A1200". Computador lançado em 1992 e descontinuado em 1996.
Vale a pena visitar a pagina do wikipédia sobre ele.