Por dentro do programador de EPROM Pocket Programmer

Este aqui é um velho amigo que já me ajudou muito (principalmente a pagar as contas) e que estava esquecido, já que acabou sendo substituido por um mais novo. Este gravador fez um relativo sucesso no ínicio deste século, apesar da simplicidade. Lembro de ter visto até um clone nacional dele numa caixa azul e preta.

O Pocket Programmer grava EPROMs (e EEPROMS e Flashs paralelas) até 32 pinos. A conexão com o PC é feita pela porta paralela e funciona até no Windows 7 de 32 bits (já testei).

O painel parece ter sido feito no Word com o nome escrito com WordArt:

Programador de EPROM Pocket Programmer

Poderiam ter feito algo mais discretos e mais bonito. Mas vamos olhar a placa do aparelho:

Placa do programador de EPROM
Tudo CI´s TTL´s comuns, fácil de reproduzir um gravador igual (o que explica os clones). A bobina faz parte do circuito regulador de tensão para gerar as tensões de gravação (VPP até 21V). Falando em regulador, o 7805 do VCC vai montado na parte de baixo da PCB:

PCB do Programador de EPROm
Pela marcação da placa ela foi produzida em (ou depois de) 1998.

O software não é muito complexo e parece ter sido feito em Delphi:

Software do programador de EPROM

Existe a versão III do Pocket Programmer, agora com USB, vendida pela módica quantia de US$269,00. Quanto a este do post como não tem mais uso acho que terei que colocar para adoção...

Um estranho rádio portátil

Encontrei este rádio numa das caixas de "utilidades" e me lembrei que o havia guardado para escrever um post (o primeiro!) aqui no blog. Isso foi em 2008 e depois de tanto tempo, finalmente, vou falar sobre ele.

Trata-se de um rádio AM/FM/SW da marca DAK e as informações param por aí. Nem um "Made in Algum Lugar" pra indicar a origem.

radio receiver DAK
O receptor já estava sem o indicador...
Pelo que lembro ele estava guardado na casa da minha mãe e não funcionava. Abri pra dar uma olhada e era apenas a chave do AC, que neste aparelho fica no plug onde vai o cabo da alimentação. Ao conectar o cabo a chave desconectava as pilhas e conectava a rede. "Bypassei" a chave e o rádio ligou, mas o potenciômetro de volume (com chave liga/desliga) estava quebrado. 

Foi conferindo o potenciômetro que notei o estranho circuito do rádio, principalmente a ausência das bobinas coloridas do circuito de FI:
Placa do rádio
Na época até cheguei a perguntar nas listas de eletrônica se alguém já tinha visto algo igual ou tinha mais informações. Aparentemente é um receptor regenerativo, não muito eficiente pois só recebe as estações mais próximas. Na faixa de ondas curtas não pega nada.

Conferindo o receptor esta semana vi que o circuito do amplificador de áudio é o manjado amplificador em classe AB. Na foto abaixo da pra ver o amplificador, a fonte e o que acredito ser um circuito regulador com um transistor:
Amplificador e fonte do rádio

O circuito de RF está no lado esquerdo da placa, com os componentes presos por numa "cera" (procedimento comum em receptores de rádio):

Área de RF do rádio

Levantar o esquema desta área levaria um tempo que poderia ser usado para outros posts que estou planejando. Mas se alguém souber alguma coisa sobre o aparelho ou deduzir a partir das fotos, por favor deixe um comentário aí embaixo.

Atualizado em 02/02/2014: Foto da placa por baixo:

Som do PC: Montando as Caixas de Som Makizou (Parte 6 - Finalizadas)

Saí de férias no fim de Dezembro e deixei as caixas de som com meu irmão mais velho pintar. A idéia inicial era cobrir as caixas com folha de madeira, mas não encontrei o material por aqui. As caixas foram lixadas e niveladas com massa antes da pintura (com tinta esmalte na cor preto brilhante). Como eu não estava aqui não deu pra tirar fotos do processo. As caixas finalizadas podem ser vistas na foto a seguir, sem o feltro (seguindo a receita japonesa) que cobre a parte de baixo:

Caixas de som Makizou
Como sempre o flash da câmera atrapalha as cores...

Potenciômetro com memória

Como contei num post anterior, recuperei dois potenciômetros motorizados da Alps (RK168). Na tentativa de encontrar uma utilidade para eles montei um circuito e escrevi algumas linhas de código para memorizar a posição do potenciômetro. Fica mais fácil de entender vendo o vídeo do circuito em funcionamento:


O circuito ficou assim:
Esquema microcontrolador potenciometro
Além do potenciômetro, reaproveitei também o controlador de motor BA6208 da sucata. O microcontrolador é um MC9S08QG8 da Freescale. O ideal seria um microcontrolador com alimentação de 5V que é a mesma tensão do motor do potenciômetro e do driver, mas como eu tinha alguns QG8 sobrando e a placa DEMO9S08QG8 (grava e debuga) optei por ele. A alimentação próxima a 3,3V foi conseguida a partir do 5V passando pelos três diodos 1N4148 em série.

O botão "MEM" grava o valor atual do potenciômetro na memória. O botão "MR" recupera o valor, levando o cursor do potenciômetro para a posição memorizada. O código que faz isso não tem muito segredo:
  MotorCtrl_PutVal(MOTOR_STDBY);  /* Desliga o motor */
  
  for(;;)
  {
    (void)AD1_Measure(0);         /* Inicia medida no conversor AD */
    
    Key = Teclas_GetVal();        /* Le as teclas */
    
    /* Verifica se uma tecla foi pressionada */
    if (Key == MEM_KEY)           /* Tecla de memoria? */
    {
      Mem_Value = AD_Value;       /* Memoriza novo valor */
      if (Mem_Value > MAX_VALUE)  /* Novo valor eh maior que o valor maximo permitido? */
      {                                
        Mem_Value = MAX_VALUE;    /* Nao passa do valor maximo permitido */
      }
      
      if (Mem_Value < MIN_VALUE)  /* Novo valor eh menor que o valor minimo permitido? */
      {
        Mem_Value = MIN_VALUE;    /* Nao passa do valor minimo permitido */
      }
      
      Key = NO_KEY;   /* Nenhuma chave pressioanada */
    } 
    else if (Key == RM_KEY) /* Tecla de recuperar? */
    {
      if (Mem_Value > AD_Value)         /* Verifica qual eh o valor maior */
      {
        while (Mem_Value >= AD_Value)   /* Enquanto nao ultrapassar o valor memorizado */
        {
           (void)AD1_Measure(0);        /* Inicia medida no conversor AD */
           MotorCtrl_PutVal(MOTOR_CW);  /* Gira motor no sentido horario */
        } 
        /* Talvez nao seja necessario freiar o motor, mas... */
        MotorCtrl_PutVal(MOTOR_BRAKE);  /* Freia o motor */
        Cpu_Delay100US(1000);           /* Espera 100ms */
        MotorCtrl_PutVal(MOTOR_STDBY);  /* Desliga o motor */
                   
      }else
      {
        while (AD_Value >= Mem_Value)   /* Enquanto nao ultrapassar o valor memorizado */
        {
           (void)AD1_Measure(0);        /* Inicia medida no conversor AD */
           MotorCtrl_PutVal(MOTOR_CCW); /* Gira o motor no sentido anti-horario*/       
        }  
        /* Talvez nao seja necessario freiar o motor, mas... */
        MotorCtrl_PutVal(MOTOR_BRAKE);  /* Freia o motor */
        Cpu_Delay100US(1000);           /* Espera 100ms */
        MotorCtrl_PutVal(MOTOR_STDBY);  /* Desliga o motor */       
      }
      
      Key = NO_KEY;   /* Nenhuma chave pressionada */  
      
    }
  }

O projeto completo com todo o código fonte pode ser baixado aqui (para CodeWarrior 6.3). Usei o Processor Expert do CodeWarrior pra facilitar as coisas e ganhar tempo. (Código sob licença WTFPL)

Trata-se de um loop infinito que fica checando se alguma tecla foi pressionada. A comparação para encontrar a posição memorizada foi feita apenas checando se a posição atual é "maior ou igual" ou "menor ou igual" que a memorizada. Isso causa um erro na posição final, ao parar o motor, mas nada que ultrapasse os 5%. Como o circuito foi montado apenas como uma prova de conceito não me preocupei muito com isso, já que pode ser melhorado no código depois.

O grande problema deste circuito é que se perde uma das pastilhas do potenciômetro para fazer o sensor de posição. Já não serve para controlar volume num amplificador estéreo, por exemplo. Até pensei em colocar mais um outro pot motorizado, seguindo o valor do outro e/ou outras firulas, mas preciso pesar se vale a pena fazer isso e se eu realmente vou usar.