Fuente regulable de 0 a 25v. - 2,5 amp con dispay LCD

felixls dijo:
Diego, encontré este circuito de pablín de un potenciómetro digital con un DS1669, no tengo idea que tan fácil o dificil sería conseguirlo, pero parece una solución intermedia ya que provee 64 niveles con memoria.

Es decir 25v/64 nos da incrementos de ha 0.4v que te parece?

http://www.pablin.com.ar/electron/circuito/audio/digipot1/index.htm
chem pero yo por lo menos en los circuitos de pablin no confio jeje ( por lo menos los de rf la mayoria tienen errores )
y por que no ponerle el 675 sale 6 pesos no usa cristal y ya esta el programa echo fijate que de ese micro nos estan sobrando dos entradas , que podriamos implementar un ajuste fino , esa idea me gusta , el ds no creo conseguirlo por estos pagos ops:
 
Yo conseguí el encoder mecánico, que podría hacerse sacandolo de la ruedita del mouse.

Pensandolo bien, vale la pena revolver un mouse y armar el encoder, ya que luego es más cómoda la perilla que los botones, creo
 
Diego, este es mi avance sobre la reescritura del código en C de la fuente:

Estoy usando el compilador SDCC.

Estoy mostrando en el LCD el voltaje, pero en Hexadecimal.

Alguien sabe como mostrarla en forma decimal (00.000) desde C ?

EDITO.
Código va a estar disponible en mi blog.
 
hola de c ni idea , es mas estoy intentando compilar un programa en ese lenguaje y me esta haciendo parir jaja, aprovecho para preguntarte , donde estan las librerias que pones en tu codigo
#include "delay.h"
#include "lcd.h"
#include "serie.h"
#include "adc.h"
las creas vos o estan en el compilador , cual usas ? o las creas vos?yo estoy intentando con ccs
te pregunto porque encontre un programma que me intereso y me da error mi intensión es pasarlo a assem
 
El compilador es SDCC, no es específico de pic como el CCS, pero es gratis, el tema es que tenés que escribirte las librerías o traducirlas desde ASM.
 
Análisis del encoder.

Encoder para rotación continua con tres pines de salida.
Dos canales de salida de código grey

Genera tres secuencias binarias 11,10, 00, 01 por cada giro.
Código Gray de dos bits
00
01
11
10

El encoder posee tres terminales, uno es el común, y los otros son las salidas digitales generadas por los contactos internos del dispositivo.

Genera la siguiente secuencia
Canal A B
Estado1 0 0
Estado2 0 1
Estado3 1 1
Estado4 1 0

Conección al PIC
El terminal del medio va a masa y los otros dos se conectan cada uno a una resistencia de pullup de al menos 1k a VCC.

encoder-circuit.gif


Chuck McManis y su publicación "Quadratrack: Using Mechanical Rotary Encoders" es el autor original de la lectura del encoder en el código ASM de Valdorre.

URL: http://www.mcmanis.com/chuck/robotics/projects/lab-x3/quadratrak.html

Citando al autor:
Para una interrupción de 1khz desde el TMR0 en un sistema a 4MHZ se debe hacer este código (en ASM):
Código:
  ; * * * * * *
    ; * BANK 1 Operations
    ; * * * * * *
    BSF     STATUS,RP0      ; Set Bank 1
    MOVLW   B'0000010'      ; Set TMR0 prescaler to 8
    MOVWF   OPTION_REG      ; Store it in the OPTION register
    CLRF    TRISB           ; B all outputs
    BSF     TRISB,QUAD_A    ; Except for Quadrature inputs
    BSF     TRISB,QUAD_B
    ; * * * * * * * * * * *
    ; * BANK 0 Operations *
    ; * * * * * * * * * * *
    CLRF    STATUS          ; Back to BANK 0
    BSF     INTCON, T0IE    ; Enable Timer 0 to interrupt
    BCF     INTCON, T0IF    ; Reset interrupt flag
    BSF     INTCON, GIE     ; Enable interrupts

Luego el servicio de interrupción debería ser:

Código:
; Interrupt Service Routine Pre-amble, save state, 
; reset status to BANK 0
INTR_PRE:        
    MOVWF   TMP_W           ; Copy W to temp register
    SWAPF   STATUS,W        ; Swap Status and move to W 
    MOVWF   TMP_STATUS      ; Copy STATUS to a temp
    CLRF    STATUS          ; Force Bank 0
;
; State is saved, and we've expended 3 Tcy plus the
; 3 Tcy (4 worst case) of interrupt latency for a total
; of 6(7) Tcy.
; 
; Now loop through until we've satisfied all the 
;pending interrupts.
;
ISR_0:
    ; ... test bit to see if it is set
    BTFSS   INTCON,T0IF     ; Timeer0 Overflow?
    GOTO    ISR_1           ; No, check next thing.
    ;
    ; Else process Timer 0 Overflow Interrupt
    ;
    BCF     INTCON, T0IF    ; Clear interrupt
    MOVLW   D'133'          ; Reset 1khz counter
    MOVWF   TMR0            ; Store it.
    CALL    QUAD_STATE      ; Check Quadrature Encoders.
    GOTO    ISR_1           ; Nope, keep counting
ISR_1:  
;
; Exit the interrupt service routine. 
; This involves recovering W and STATUS and then
; returning. Note that putting STATUS back 
; automatically pops the bank back as well.
;  This takes 6 Tcy for a total overhead of 12 Tcy for sync
;  interrupts and 13 Tcy for async interrupts.
; 
INTR_POST:
    SWAPF   TMP_STATUS,W    ; Pull Status back into W
    MOVWF   STATUS          ; Store it in status 
    SWAPF   TMP_W,F         ; Prepare W to be restored
    SWAPF   TMP_W,W         ; Restore it
    RETFIE

Como se puede ver, primero se recarga la interrupción TMR0 para asegurar un ratio de ticks (y además esta es la primer interrupción verificada!)
Luego se verifica el estado del encoder en la llamada a QUAD_STATE:

Código:
;
; QUAD State
;
; A quadrature encoder traverse a couple of states
; when it is rotating these are:
;       00      |  Counter
;       10      |  Clockwise
;       11      |     ^
;       01      V     |
;       00  Clockwise |
;
;
QUAD_STATE:
    BCF     STATUS,C        ; Force Carry to be zero
    MOVF    PORTB,W         ; Read the encoder
    ANDLW   H'6'            ; And it with 0110
    MOVWF   Q_1             ; Store it
    RRF     Q_1,F           ; And rotate it right. 
        
    RLF     Q_NOW,F         ; Rotate Q_NOW Left
    RLF     Q_NOW,W         ; by two 
    IORWF   Q_1,W           ; Or in the current value
    MOVWF   QUAD_ACT        ; Store at as next action
    MOVF    Q_1,W           ; Get last time
    MOVWF   Q_NOW           ; And store it.
    ;
    ; Computed jump based on Quadrature pin state.
    ;
    MOVLW   high QUAD_STATE
    MOVWF   PCLATH
    MOVF    QUAD_ACT,W      ; Get button state
    ADDWF   PCL,F           ; Indirect jump
    RETURN                  ; 00 -> 00
    GOTO    DEC_COUNT       ; 00 -> 01 -1
    GOTO    INC_COUNT       ; 00 -> 10 +1
    RETURN                  ; 00 -> 11
    GOTO    INC_COUNT       ; 01 -> 00 +1
    RETURN                  ; 01 -> 01
    RETURN                  ; 01 -> 10 
    GOTO    DEC_COUNT       ; 01 -> 11 -1
    GOTO    DEC_COUNT       ; 10 -> 00 -1
    RETURN                  ; 10 -> 01
    RETURN                  ; 10 -> 10
    GOTO    INC_COUNT       ; 10 -> 11 +1
    RETURN                  ; 11 -> 00
    GOTO    INC_COUNT       ; 11 -> 01 +1
    GOTO    DEC_COUNT       ; 11 -> 10 -1
    RETURN                  ; 11 -> 11
INC_COUNT:
    INCF    COUNT,F
    MOVLW   D'201'
    SUBWF   COUNT,W
    BTFSS   STATUS,Z
    RETURN
    DECF    COUNT,F
    RETURN
DEC_COUNT
    DECF    COUNT,F
    MOVLW   H'FF'
    SUBWF   COUNT,W
    BTFSS   STATUS,Z
    RETURN          
    INCF    COUNT,F
    RETURN

Por mi parte encontré este útil link con explicación en lenguaje BASIC y diagrama de flujo que explica el funcionamiento de este tipo de encoders mecánicos:
http://www.scmstore.com/scm-hacker/num21/project/posicion.htm

Más tarde publico la versión en C.
 
Simulación de encoder mecánico:

Este es un código en C# que armé para simular la respuesta a los datos digitales que envía un encoder y sirve para ver como funciona.

Código:
  public partial class EjemploEncoder : Form
  {
    private int Aviejo = 0;
    private int Bviejo = 0;
    private int A;
    private int B;
    private int pos;

    public EjemploEncoder()
    {
      InitializeComponent();

      lstHistorial.Items.Add("00");
      A = Aviejo;
      B = Bviejo;
    }

    private void Procesar()
    {
      A = Int32.Parse(txtBit.Text.Substring(1,1));
      B = Int32.Parse(txtBit.Text.Substring(0,1));

      //BA BA BA BA BA
      //00 01 11 10 00

      if (A == Bviejo && B == Aviejo)
        return;

      if (B == Bviejo)
      {
        if (A > Aviejo)
        {
          if (B == 1)
            Decremento();
          else
            Incremento();
          return;
        }
        
        if (B == 1)
          Incremento();
        else
          Decremento();
        return;
      }

      if (B>Bviejo)
      {
        if (A == 1)
          Incremento();
        else
          Decremento();
        return;
      }

      if (A == 1)
        Decremento();
      else
        Incremento();
    }

    private void Incremento()
    {
      lstHistorial.Items.Add(B.ToString() + A.ToString());
      pos++;
      txtAccion.Text = "Incremento";
      txtPosicion.Text = pos.ToString();
      Aviejo = A;
      Bviejo = B;

    }

    private void Decremento()
    {
      lstHistorial.Items.Add(B.ToString() + A.ToString());
      pos--;
      txtAccion.Text = "Decremento";
      txtPosicion.Text = pos.ToString();
      Aviejo = A;
      Bviejo = B;
    }

    private void txtBit_KeyDown(object sender, KeyEventArgs e)
    {
      if (e.KeyCode == Keys.Enter)
      {
        Procesar();
        txtBit.SelectAll();
      }
    }


  }

Adjunto el ejecutable.

Para hacerlo funcionar hay que ingresar de a uno los pares de bits de las entradas digitales, pulsar ENTER, y como respuesta se incrementará o decrementará un contador, que a nuestros fines de la fuente sería el voltaje/amperaje/memoria.
 

Adjuntos

  • simuencoder_480.zip
    4.5 KB · Visitas: 159
bien felixls , le estas poniendo garras a la fuente jeje, y yo no me decido que controlador usar jeje , segui asi che seguro vas a buen puerto ,

lo del enco es con los ccp?
 
Gente, ya terminé el 100% del código en C de la fuente!

Cambios a la fuente de Valdorre:

1- Código reescrito desde 0 en C del compilador gratuito SDCC.
2- Posibilidad de usar dos pulsadores con solo cambiar una línea.
3- Control de ventilación al superar 1A.
4- Placas a una cara sin puentes.
5- Señalización sonora y visual de corte de corriente.
6- Conectividad RS232 para obtener información y/o controlar la fuente.

y mucho más...


Más detalles en mi blog (http://sergiols.blogspot.com/).

saludos!
 
jeje, no es que alguien se este rompiendo la cabeza , es solo el espiritu de investigador el que lleva a cada uno de nosotros a tratar de armar e incluso mejorar lo ya echo por otro
 
He seguido con atensión el hilo de este foro y vi que podia aportarles este link, que investigando en la red encontre, es un grano de arena, para el entendimiento y mejoramiento del proyecto.

Lo de "para que no se maten la cabeza" lo dije en buena onda.

Efectivamente, la idea es entender y mejorar lo que ya ha hecho alguien mas.

Seguimos en el proyecto.
 
felixls dijo:
Gente, ya terminé el 100% del código en C de la fuente!

Cambios a la fuente de Valdorre:

1- Código reescrito desde 0 en C del compilador gratuito SDCC.
2- Posibilidad de usar dos pulsadores con solo cambiar una línea.
3- Control de ventilación al superar 1A.
4- Placas a una cara sin puentes.
5- Señalización sonora y visual de corte de corriente.
6- Conectividad RS232 para obtener información y/o controlar la fuente.

y mucho más...


Más detalles en mi blog (http://sergiols.blogspot.com/).

saludos!


Hola capo,

entiendo entonces que en vez de usar el encoder, podemos tener dos butonitos para seleccionar el V/A deseado?

quiero decir, en vez de ser un encoder optico, la cosa seria con 2 pulsadores? seria genial eso :cool:

saludos!
 
Hola a todos Soy nuevo en esta area aunq normalmente la electronica que aplico es Digital con PIC y compuertas no me defiendo muy bien en electronica Analogica... y desearia q me ayuden

actualmente estoy haciendo una fuente a mi gusto (sin ofender esta seccion) pues a base de esta FUENTE tome la idea de hacerme una fuente con GLCD. Es decir, "LCD Grafica" ya la tengo casi lista solo me falta hacer la lectura de Aperes y no se como medir en consumo de Amperes

pues para hacer q aparesca en la GLCD nesesito una tension de 0v a 5V que seria variasion de la lectura de 00.00Amp a 10.00Amp

00.00A - 10.00A = 0V - 5V

o q me identifique en este circuito q parte es la q se encarga de esa lentura pues imagino q esa lectura de amperaje q aparece en las imagenes de esta Fuente es independiente a la lectura de voltaje...

Agradeceria muchisimo de su ayuda pues tengo varios proyectos mas q subire al foro incluyendo este
 
jaio21 dijo:
Hola a todos Soy nuevo en esta area aunq normalmente la electronica que aplico es Digital con PIC y compuertas no me defiendo muy bien en electronica Analogica... y desearia q me ayuden

actualmente estoy haciendo una fuente a mi gusto (sin ofender esta seccion) pues a base de esta FUENTE tome la idea de hacerme una fuente con GLCD. Es decir, "LCD Grafica" ya la tengo casi lista solo me falta hacer la lectura de Aperes y no se como medir en consumo de Amperes

pues para hacer q aparesca en la GLCD nesesito una tension de 0v a 5V que seria variasion de la lectura de 00.00Amp a 10.00Amp

00.00A - 10.00A = 0V - 5V

o q me identifique en este circuito q parte es la q se encarga de esa lentura pues imagino q esa lectura de amperaje q aparece en las imagenes de esta Fuente es independiente a la lectura de voltaje...

Agradeceria muchisimo de su ayuda pues tengo varios proyectos mas q subire al foro incluyendo este

para hacerlo bien cencillo , puedes medir la caida de tensión sobre una resistencia de .01 ohm , y amplificarla 10 veces con un operacional por ej,, que es como se esta haciendo en este circuito , ya que veo manejas glcd te pregunto yo ahora , estoy renegando con una pantalla de siemens a55 , y e logrado enviarle un texto pero solo me lo muestra si le digo imagen invertida y despues de mostrarlo unos milisegundos la pantalla se queda negra , o si le envio pantalla normal no me muestra nada , tenes alguna idea de que puede ser ? hace unos dias que no logro un joraca con esto
 
diego_z dijo:
para hacerlo bien cencillo , puedes medir la caida de tensión sobre una resistencia de .01 ohm , y amplificarla 10 veces con un operacional por ej,, que es como se esta haciendo en este circuito , ya que veo manejas glcd te pregunto yo ahora , estoy renegando con una pantalla de siemens a55 , y e logrado enviarle un texto pero solo me lo muestra si le digo imagen invertida y despues de mostrarlo unos milisegundos la pantalla se queda negra , o si le envio pantalla normal no me muestra nada , tenes alguna idea de que puede ser ? hace unos dias que no logro un joraca con esto


Si al principio me pasaba lo mismo con la GLCD comunes; amigo en este caso lo q tienes q hacer es enviar el texto en modo invertido y controlar el puerto de RESET sucede q el texto llega a la GLCD pero como el reset aun esta sin controlar te borrar el texto

ejemplo:

Si tienes la pantalla en Normal osea fondo blanco... el texto q estas enviando se esta enviando en normal tienes q invertir el texto mira eso me pasaba con un programa q comense a usar mucho tiempo atras llamado LCDHype

Que lenguaje estas usando para manipular esta LCD del siemens a55?
 

Adjuntos

  • lcdhype__105.gif
    lcdhype__105.gif
    180.8 KB · Visitas: 102
jaio21 dijo:
diego_z dijo:
para hacerlo bien cencillo , puedes medir la caida de tensión sobre una resistencia de .01 ohm , y amplificarla 10 veces con un operacional por ej,, que es como se esta haciendo en este circuito , ya que veo manejas glcd te pregunto yo ahora , estoy renegando con una pantalla de siemens a55 , y e logrado enviarle un texto pero solo me lo muestra si le digo imagen invertida y despues de mostrarlo unos milisegundos la pantalla se queda negra , o si le envio pantalla normal no me muestra nada , tenes alguna idea de que puede ser ? hace unos dias que no logro un joraca con esto


Si al principio me pasaba lo mismo con la GLCD comunes; amigo en este caso lo q tienes q hacer es enviar el texto en modo invertido y controlar el puerto de RESET sucede q el texto llega a la GLCD pero como el reset aun esta sin controlar te borrar el texto

ejemplo:

Si tienes la pantalla en Normal osea fondo blanco... el texto q estas enviando se esta enviando en normal tienes q invertir el texto mira eso me pasaba con un programa q comense a usar mucho tiempo atras llamado LCDHype

Que lenguaje estas usando para manipular esta LCD del siemens a55?


Hola amigos como estan? les queria comentar que no es bueno desvirtual los threads; para hablar de algo en concreto como los LCD siemens deberian abrir otro hilo...

no se lo tomen a mal por favor, saludos cordiales
 
Atrás
Arriba