Estes hack já o dei como perdido e como reactivado novamente.
Quando vi no titulo do datasheet:

Pensei então (não de forma errada, pois ele também funciona assim), que o CI gerasse uma frequência fixa e de acordo com o transformador usado, assim variava a tensão de saída Vo.
Não liguei mais para o datasheet, mas ficou-me o bichinho a roer... Porquê? Eu vi quando desmontei o transformador , além do SG6849, havia também um opto-acoplador. Mas porquê ter um opto-acoplador se não para fazer o feedback?
Hoje tive um pouquinho de tempo para voltar a ver com calma o datasheet e ainda há esperança para o que eu queria fazer (subir a tensão para 5V).
Na página 13 do datasheet surge um esquema que tem feedback do secundário do transformador.
Não me devo enganar muito quando penso que o circuito presente no transformador será muito semelhante a esse.
Quando voltar a casa tenho de verificar melhor o circuito do e tentar encontrar as resistências dentro do rectângulo a vermelho. Ao manipular uma delas, devo conseguir variar Vo, só preciso entender melhor de que forma o poderei fazer.
U3 é um TL431 (ver AQUI datasheet), uma referencia de tensão ajustável, cujo ajuste se faz por aquelas 2 resistências...
Vamos aguardar por novos desenvolvimentos, mas agora já estou a ver a minha ideia de subir a tensão daqueles transformadores, mais próxima de se realizar :).

Este circuito saiu do baú de recordações.
Foi o meu primeiro circuito com placa de circuito impresso e com um MCU.
É um termómetro que mostra um digito de cada vez e liga o LED correspondente à sua posição. A cada 2min faz piscar todos os LED's e mostra a temperatura máxima e a mínima desde que se ligou.
Já nem me lembrava disto...
Usa um LM35 e mede de 0 a 55ºC, com uma referência máxima na ADC, o que lhe confere até bastante precisão... precisão que depois não é dada pelo display :D.

Tenho aqui 4 transformadores destes, 3V, 2,8A.
É uma tensão que não tem grandes aplicações. Os transformadores eram usados em carregadores de pilhas 1,5V.
O objectivo será tentar hackear isto e colocar na saída 5V. No fundo, fazer um pouco à semelhança do que fiz com a fonte de computador.
Este deve ser o artigo escrito em menos tempo. Bati o record do 5min...
PS: O CI controlador tem a referência "SG6849-65DZ   /   BAOT5650004Y".

Dado a boa adesão que tive para levar esta experiência em frente, vamos fazer o primeiro teste, sexta das 22h ás 24h. Infelizmente este Sábado será impossível para mim.
Adicionem "o.engenhocas" no skype e vamos tentar reunir o máximo de engenhocas no skype.

Qualquer questão, basta escrever em comentário ou contar-me por e-mail.

Reservem Sexta das 22h ás 24h para as primeiras 2 Horas das engenhocas.

Mais um video brilhante do Dave Jones, do EEVBLOG.
Fantástico, como ele torna tudo tão simples!
Quem sabe, uma engenhoca a fazer no futuro...

Hoje vi algo interessante e gostaria de partilhar aqui e deixar à consideração dos visitantes deste blogue.
Como o que importa é a fomentação pelo gosto das engenhocas, estava a considerar marcar 2 "Horas das engenhocas".
Isto seria um horário de por exemplo, Sábados das 22h ás 00h (sempre com marcação prévia aqui no blogue), onde se poderia abrir uma sala de chat, por exemplo no skype, e utilizar esse tempo para discussão de engenhocas, ideias, etc...
Achei a ideia muito interessante e conseguindo reunir um bom grupinho de "inventores" poderia-se tornar em algo bastante interessante...
A usar o skype, a ideia seria também eu receber os diversos convites e juntar toda a gente numa conversa. Durante aquele período todos podem conversar, mesmo não sendo "conhecidos" via skype.
Eu já registei no skype "0.engenhocas" e só iniciaria sessão com ele, nessa mesma altura.

O que acham desta ideia?
Poderia resultar, mas não participava.
Poderia resultar e eu participaria.
Não vai resultar.



PS: Obviamente, são aceites todas as sugestões, basta fazer um comentário e eu responderei :D.

Esta foi uma óptima oportunidade de juntar duas engenhocas em prol de um pequeno agapornis, um recente inquilino.
Liguei o datalogger e coloquei-o dentro da criadeira para monitorizar a temperatura ao longo das horas.
A temperatura variável pode ser "programada" através do potenciómetro tal como mostrado nos circuitos anteriores (ver categoria Proj. Criadeira).
O registo foi iniciado ás 00:00, tendo sido ligada a criadeira ás 00:25 e tudo foi desligado ás 19:30.
A temperatura manteve-se muito constante pelos 28.5ºC, tendo o máximo atingido os 29ºC.
Em suma, um resultado muito positivo, pois ainda não tinha comprovado metricamente o seu funcionamento.

A fonte já tinha ficado a funcionar da forma desejada, então a 2ª parte é ajeitar tudo, reforçar ligações e montar de forma a que fique tudo o mais sólido e resistente possível.
Antes de montar, estive a "aquecer" algumas resistências de potência... e enfim é vê-las ficar "quentinhas" eheh.
 A partir daqui começa o cortes de todos os fios dos rails não utilizados (-12V, -5V, 3.3V, 5V, etc).
Aqui foram feitas as ligações do "PWR_OK", do "PS_ON", e obviamente para a ventoinha.
Aproveitei para ligar um LED no "PWR_OK" para sinalizar o bom funcionamento da fonte.
Antes de fechar a caixa e bloquear o potenciómetro, dei um ajuste final para ficar o mais próximo possível do valor de tensão desejado, 13.8V.
Depois foi só certificar-me de que todos os fios estavam bem presos (led, ventoinha, interruptor, ...) e fechar o melhor possível a caixa.
Por enquanto não tenho um dummy load para corrente constante e testar a potência máxima da fonte.
Teoricamente será uma fonte com uma potência de 138W.

Mais um hack completo :).

"A necessidade aguça o engenho", esta é uma grande verdade e este é mais um artigo que prova isso.
Este fim de semana consegui arranjar algum tempo livre para levar a cabo uma ideia que queria ter posto em prática há mais tempo: transformar uma fonte de alimentação de computador para uma fonte de alimentação a usar como recurso no radio amadorismo.
Devido à sua construção e para o fim das mesmas, esta fontes têm um bom nível de filtragem, potência e portabilidade.
A ideia é conseguir alterar o rail superior, de +12V, para atingir a tensão de 13,8V comummente usada em rádios de amadores.
A fonte que usei já era bastante antiga (datada de 2002) e no rail de +12V, garante uma corrente de 10A.
Quando abri a fonte, tentei identificar qual o CI controlador do circuito e sendo ele o CI controlador é junto dele que terei de actuar para conseguir uma variação de tensão no "exterior"...
Neste caso o CI era um TL494 (ver AQUI o datasheet).
Enquanto de googla para encontrar o datasheet, uma passagem pelo separador de imagens, traz sempre alguns circuitos exemplo que dão importantes ajudas sobre a implementação e, neste caso, o hack do mesmo.
Em baixo está um desses esquemas e a vermelho está o que realmente importa.
O TL494 possui um pino de referencia interna de 5V (13), que passa por um divisor de tensão, ao qual liga o pino 2, que olhando o datasheet trata-se de uma entrada do amplificador de erro.
O pino 1 é a outra entrada, mas que faz também um divisor de tensão mas usando uma tensão de 5V na saída. Conclusão, o TL494, entre outras coisas, vai fazer oscilar o transformador de forma igualar as tensões no pino 1 e no pino 2.
Parecia fácil de mais para resultar. A primeira ideia foi cortar a trilha do pino 1, pegar num potenciómetro e usa-lo como divisor de tensão entre um dos rails (no meu caso o rail de +5V) e GND.
Independentemente do circuito que a minha fonte tivesse, estas alterações teriam de ser o suficiente para conseguir variar as tensões na saída da fonte. Simplesmente estava a "enganar" o amplificador de erro e fazer o circuito actuar como se os novos 13,8V correspondessem aos 12V...
A imagem em cima mostra o primeiro teste. Soldei 3 fios a um potenciómetro e soldei os mesmos na PCB.
Ao ligar a fonte, a ventoinha disparava por momentos, mas desligava de imediato.
Então rodei o potenciómetro todo para o mesmo lado e fui variando aos pontos enquanto ligava e desligava a fonte.
A certa altura, a ventoinha começou a rodar e o multímetro  que tinha a medir a tensão na saída de 12V, mostrou-me cerca de 9V. Sem desligar a fonte continuei a rodar e verifiquei que a tensão estava a variar também.
Tinha encontrado o "divisor de tensão" que me colocava no pino 1 uma tensão que já permitia a regulação e a medição de erro por parte do TL494.
Daí até ter 13,8V (aprox) foi um saltinho.
Estava encontrada a solução...
O resto foi testar a sua estabilidade ao funcionar desta forma e tratar de aperfeiçoar o resultado final, mas isso vou deixar para um outro artigo, a 2ª parte.

Em baixo deixo o código já organizado para fazer e chamar um caractere especial (como um smile).
Estes displays dispõem de uns endereços na sua memória para alojar caracteres especiais. O problema aqui é que esses endereços estão numa memória RAM e quando há uma falha de energia, têm de ser "feitos" novamente.
Os caracteres podem ser feitos com base numa matriz de 5x8 pontos (sendo que a ultima linha deve ser deixada em branco). No caso do código que aqui apresento essa matriz é definida como elementos do vector "caracter[]". A função "chamar_especial()" apenas acessa o endereço onde foi previamente escrito o caracter. Aqui de futuro, não agora, ainda devo fazer alterações de modo a que consiga mudar facilmente o endereço do novo caracter especial.

Rotina para fazer e chamar ao display o caracter especial:
void especial()
{
    char endereco;
    char caracter[8]={0b00000,      //Matriz 5x8
                                     0b01010,
                                     0b01010,
                                     0b00000,
                                     0b10001,
                                     0b01110,
                                     0b00000,
                                     0b00000};


    PORTB = 0b11000000;         //DDRAM
    __delay_us(50);
    PORTBbits.RB7=0;
    __delay_us(50);
    PORTB = 0b11000000;
    __delay_us(50);
    PORTBbits.RB7=0;
    __delay_us(50);

    for(endereco=0;endereco<8;endereco++)
    {
        PORTB = 0b10001000;
        __delay_us(50);
        PORTBbits.RB7=0;
        __delay_us(50);
        PORTB = ((endereco<<1) & 0b1110) + 0b10000000;
        __delay_us(50);
        PORTBbits.RB7=0;
        __delay_us(50);

        PORTB = ((caracter[endereco]>>3) & 0b10) + 0b11000000;
        __delay_us(50);
        PORTBbits.RB7=0;
        __delay_us(50);
        PORTB = ((caracter[endereco]<<1) & 0b11110) + 0b11000000;
        __delay_us(50);
        PORTBbits.RB7=0;
        __delay_us(50);
    }

    chamar_especial();
}

Rotina para chamar ao display o caracter especial do endereço em que foi gravado:
void chamar_especial()
{
    PORTB = 0b11000000;     //DDRAM do crac especial
    __delay_us(50);
    PORTBbits.RB7=0;
    __delay_us(50);
    PORTB = 0b11000000;
    __delay_us(50);
    PORTBbits.RB7=0;
    __delay_us(100);
}

Como disse no artigo anterior, a solução acabaria por fazer a mina própria biblioteca, assim este artigo é sobre o estado em que se encontra a mesma.
Consegui fazer com que os primeiros caracteres aparecessem no ecrã.
Daí dei um jeito no código "em bruto", para ficar mais flexível e fácil de usar no futuro.
Basicamente o que estou a fazer é a inicialização do LCD, a colocação do cursor num endereço e a escrita de caracteres com incremento automático do endereço do cursor.
Código para utilização do LCD com comunicação a 4 bits.

Rotina de configuração do LCD:
void config_lcd()
{
    // E   RS  RW  D7  D6  D5  D4
    // RB7 RB6 RB5 RB4 RB3 RB2 RB1

    char i;
    char config[7]={
                    0b10000100, //1ª config - 4bits
                    0b10000100, //4bits; 2linhas; 5x8pontos + E
                    0b10010000, //4bits; 2linhas; 5x8pontos + E
                    0b10000000, //E + display ON; mostra cursor; cursor pisca
                    0b10011110, //E + display ON; mostra cursor; cursor pisca
                    0b10000000, //E + cursor incrementa; sem display shift
                    0b10001100, //E + cursor incrementa; sem display shift
                  };

    for(i=0;i<7;i++)
    {
        PORTB = config[i];
        __delay_us(50);
        PORTBbits.RB7=0;
        __delay_us(50);
    }  
}

Rotina de posição do cursor:
void cursor_lcd_pos(char posicao)
{
    /*
     * 00h -> linha 1
     * 40h -> linha 2
     */

    PORTB = ((posicao>>3) & 0b1110) + 0b10010000;
    __delay_us(50);
    PORTBbits.RB7=0;
    __delay_us(50);
    PORTB = ((posicao<<1) & 0b11110) + 0b10000000;
    __delay_us(50);
    PORTBbits.RB7=0;
}

Rotina de escrita no display:
void escrever_lcd(char texto[])
{
    char length, i;

    length=strlen(texto);

    for(i=0;i<length;i++)
    {
        PORTB = ((texto[i]>>3) & 0b11110) + 0b11000000;
        __delay_us(50);
        PORTBbits.RB7=0;
        __delay_us(50);
        PORTB = ((texto[i]<<1) & 0b11110) + 0b11000000;
        __delay_us(50);
        PORTBbits.RB7=0;
        __delay_us(50);
    }
}

Exemplo de código main();
void main()
{
    PIC_init();

    config_lcd();
    cursor_lcd_pos(3);
    escrever_lcd("Ola mundo ");

}