¿Aún no conoces AMA?

Hazte socio de Acuariofilia Madrid Asociación.
ABIERTO EL PLAZO DE INSCRIPCIÓN: DEL 1 AL 15 DE JUNIO.

Más info
image01

Atlas de peces de AM

¡Hemos alcanzado las 800 fichas! Visita nuestro atlas de peces actualizado.

Más info
image01

Cardúmenes y sociabilidad

Nueva actualización de la tabla con una extensa relación de peces, donde podrás conocer qué entorno necesita cada especie, su sociabilidad y si convive o no en cardumen. ¡Pasa a descubrirla!

Mas info
image01
Aula Arduino para principiantes.
Respuestas: 1783    Visitas: 440275
#901
Si te fijas a la salida del pin hay una resistencia de 2k2 que limita la corriente. Para 5v sería 5/2200=.0022727 (2.3mA)

Un pequeño led de 20mA conectado a la salida consumiría unas diez veces más.

Creo que continuas sospechando del TIP141, pero en mi opinión, el TIP141 en PWM funcionará bien o no funcionará en absoluto. No veo que pueda existir margen para que funcione regular, ya que trabaja con pulsos de anchura variable pero de voltaje constante.
#902
hola Antonio no e estado estos días porque estoy con el simple dimer y te comento puse el lcd a funcionar te paso el simple dimer para que le eches un ojo si puedes cuando no estés muy liado por lo siguiente que me pasa que es que imprime todo bien pero no para de repetir el ciclo de luz con las modificaciones que ise en el cao 1 beta me funciona también pero claro como tu lo tenias para tu lcd qe es de 20x4 y el mio es de 16x2 pos ahí esta un poco el problema y el otro es la botonera yo pongo el pin A1 que es el de la botonera pero para mover por el menu del cao1 beta es el mismo botón o como es mis botones estan en estos codigos

int lcd_key = 0;
int adc_key_in = 0;

#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5

if (adc_key_in > 1000) return btnNONE;

// For V1.1 us this threshold
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 250) return btnUP;
if (adc_key_in < 450) return btnDOWN;
if (adc_key_in < 650) return btnLEFT;
if (adc_key_in < 850) return btnSELECT;

para que sepas cual es cual

cuando tu puedas le echas un ojo al Simple dimer y me cuantas cual serian los fallos por ser de 16x2 .....
pero que veas que le dedico horas a esto porque quiero que este bien Desde ya muchas gracias
en el cao1 beta el reloj esta mal la hora y la fecha y esta parado puede ser por los pin del ds ?
https://www.dropbox.com/sh/lryef2wqtu03a...nhyga?dl=0
#903
No no, no sospecho que sea el TIP. Sabes que tengo solo 5 led que controlo independientemente con 5 canales PWM, y se me ocurrio conectar primero 2 TIP y luego 3 TIP a un mismo canal PWM, por eso lo del consumo, pero el caso es que fucionan perfectamente estando conectados juntos a un mismo canal.
Entiendo que un transistor Darlington actua como puerta para la masa sino me equivoco, una pata va a masa, otra a masa del led, y la tercera que es la que va al pin PWM es la que actua como puerta entre las dos anteriores si no me falla mi razonamiento, pero tenia que estar seguro del consumo para no quemar el pin PWM. La verdad que es un consumo ridiculo, asi que pudo estar seguro
que quemarse no se va quemar, pero ignoro si para tal proposito tendria que poner un diodo o un multiplexor inverso para su correcto funcionamiento.

Sabemos que el DUE tiene 12 bit reales en sus entradas analogicas y en sus dos convertidores DAC, asi que ni corto ni perezoso hice la preuba de Fade pero seleccionando el DAC0, y bueno, funcionar funciona, y a 4095 valores, primero hice una prueba con un led normal y luego me atrevi con los TIP, y el resultado es espectacular, estando en PWM y en el paso PWM1 los leds se encienden de una manera que ya iluminan el acuario, pero estando conectados en el DAC se empiezan a iluminar desde muy abajo casi siendo imperceptible por el ojo y con una suavidad que asombra, no pude hacer pruebas con el polimetro ya que se me estropeo el otro dia pero no observe ni calentamiento en los TIP ni en la la placa.

Te animo Antonio a que hagas un aprueba, a ver que te parece.
#904
Que yo sepa el DAC no usa PWM. Usando salidas DAC obtendrás un voltaje que varía entre 0 y 3.3 voltios. No entiendo que eso te haga un buen fade con unos LEDs que necesitarán minimo un par de voltios para encender. Huh

[Imagen: graficaled.jpg]

Yo creo que es muy complicado regular bien el brillo de un LED regulando voltaje. No sé si entendí bien lo que has hecho.

He comprado TIPs 120 para regular motorcitos de ventiladores. Ya te contaré.
#905
hola antonio con el tema de la botonera no hay forma jajaj solo me funciona un boton por mas que cambio los numeros no se sera por que como estos botones estan en el lcd
#906
(25-10-2014, 10:30 AM)william escribió: hola antonio con el tema de la botonera no hay forma jajaj solo me funciona un boton por mas que cambio los numeros no se sera por que como estos botones estan en el lcd

Si el LCD viene con botones necesitarás usar la librería de ese hardware. No he querido usar cosas de este tipo porque te hace demasiado dependiente de un tipo especial de hardware. A fin de cuentas pulsadores y resistencias son muy baratos y montar la botonera como yo lo diseñé es bastante sencillo.

Yo no sé como está hecha esa botonera. A menos que el enfoque de esa botonera fuera muy similar al mío (algo poco probable), la adaptación del software de la botonera de CAO1 sería muy complicada de hacer. Habría que reescribir gran parte de ese módulo que tiene algunas funciones que costaron bastante esfuerzo de programación.
#907
hola si se que seria super dificil porque yo e probado a modificar cambiando por los numeros que hacen funcionar mi botonera pero solo me funciona uno ajhjjjaja una cosas le echastes un ojo a el simple dim que te pase ?
#908
(25-10-2014, 05:18 PM)william escribió: hola si se que seria super dificil porque yo e probado a modificar cambiando por los numeros que hacen funcionar mi botonera pero solo me funciona uno ajhjjjaja una cosas le echastes un ojo a el simple dim que te pase ?
Si solo fuera eso estaría chupao. Bastaría poner una traza en el puerto Serial y ver que valores devuelve para cada botón. Yo no sé si esa botonera usa el mismo principio que mi botonera que se limita a entregar diferentes valores en una entrada analógica. Tendría que estudiarme ese hardware. Si localizas algo de información específica sobre el funcionamiento de la botonera de ese LCD me pasas la URL y con algo de suerte quien sabe.
#909
hola Antonio mira te paso estos link
http://www.hackshed.co.uk/arduino-lcd-ke...nu-system/

http://www.freetronics.com/pages/16x2-lc...Ev9jmdO6Um
#910
(25-10-2014, 10:44 PM)william escribió: hola Antonio mira te paso estos link
http://www.hackshed.co.uk/arduino-lcd-ke...nu-system/

http://www.freetronics.com/pages/16x2-lc...Ev9jmdO6Um

Buena noticia. Han usado el mismo principio que yo. Una linea analógica los botones formando un divisor de tensión.

Código:
void mainMenu() {
  //State = 0 every loop cycle.
  int state = 0;
  //Refresh the button pressed.
  int x = analogRead (0);
  //Set the Row 0, Col 0 position.
  lcd.setCursor(0,0);

  //Check analog values from LCD Keypad Shield
  if (x < 100) {
    //Right
  } else if (x < 200) {
   //Up
    state = 1;
  } else if (x < 400){
   //Down
    state = 2;
  } else if (x < 600){
    //Left
  } else if (x < 800){
    //Select
    state = 3;
  }

[Imagen: lcd-button-ladder.png?100430]

El planteamiento de la botonera de CAO1 es muy similar. Distintos valores de resistencias, y distinta disposición del divisor de tensión.

[Imagen: 0eYqFiQ.jpg]

Mira en n el fichero Cao1_Botonera5Puls.h
Las constantes para mis resistencias figuran como:

Código:
#define V_0                     1023 // 0 Ohm
#define V_2K2                   842  // 2K2       // 840
#define V_4K7                   697  // 4k7       // 698
#define V_10K                   510  // 10K       // 511
#define V_22K                   319  // 22K       // 322
#define V_INF                   0    // Sin pulsador

Por desgracia nada de esto tiene sentido ya, así que esta parte que ves arriba se puede suprimir ya que no se puede usar.

Habrá que modificar lo siguiente:

Código:
#define B_NULL     V_INF   // ningún botón pulsado
#define B_SELECT   V_0     // Boton central      SELECT
#define B_DOWN     V_2K2   // Botón inferior     DOWN
#define B_UP       V_22K   // Boton superior     UP
#define B_LEFT     V_10K   // Botón izquierdo    LEFT
#define B_RIGHT    V_4K7   // Botón derecho      RIGHT
#define B_UNDEF    35      // Indicador de valor no reconocible

En lugar de ello, hay que olvidarse del tema de las resistencias porque ya tienen poco que ver con nuestro hardware y nos centraremos en el valor que se va a recibir en la entrada analógica. No conocemos esos valores, pero tres de los valores necesarios te los puedo proporcionar ya mismo.

Código:
#define B_NULL      0   // ningún botón pulsado
#define B_SELECT      1023     // Boton central      SELECT
#define B_UNDEF    10      // Indicador de valor no reconocible

Hay cuatro valores más que tienes que averiguar tú, porque yo no tengo ese hardware.
Tendrás que poner una traza al puerto Serial después de la sentencia analogRead (0).

Código:
//Refresh the button pressed.
  int x = analogRead (0);
Serial. println(x);

Apretando los distintos botones obtendrás en la traza el valor que debes poner para cada botón. Analizándo la lógica del programa te puedo decir dentro de que rango de valores se va a encontrar cada uno de los botones restantes. Te pongo los rangos entre paréntesis. Tu tienes que averiguar el valor exacto y ponerlo.

Código:
#define B_DOWN     (200..400)   // Botón inferior     DOWN
#define B_UP          (100..200)   // Boton superior     UP
#define B_LEFT       (400..600)   // Botón izquierdo    LEFT
#define B_RIGHT    (0..100)   // Botón derecho      RIGHT

Todo esto son deducciones, pero al no poder verificar con el hardware, me puedo equivocar.

La buena noticia es que tu hardware se puede adaptar para ser usado con CAO1, pero mi software solo acepta determinados valores con un margen de error, porque así se eliminan posibles lecturas falsas por interferencias. Por ello hay que tantear pulsando botones y mirando en las trazas para averiguar los valores exactos.

Yo te iré ayudando en todo lo que pueda.
#911
hola Antonio mira estos son los valores de cada botón

1000) btnNONE
< 50) btnRIGHT;
< 250) btnUP;
< 450) btnDOWN;
< 650) btnLEFT;
< 850)btnSELECT;
quedaría algo asi o esta mal
#define TOLERANCIA 8 // Porcentage de error admisible (tipicamente +/- 8%)
/*
#define V_0 850 // 0 Ohm
#define V_2K2 450 // 2K2 // 840
#define V_4K7 50 // 4k7 // 698
#define V_10K 650 // 10K // 511
#define V_22K 250 // 22K // 322
#define V_INF 1000 // Sin pulsador
*/
#define MICROS_ENTRE_LECT 10 // Numero de microseg. entre lecturas individuales.
#define LECTURAS20 5 // Numero de lecturas promediadas de 20 en 20
#define AUTO_REPEAT_DELAY 500 // milisegundos de presion sobre un boton para empezar a repetir boton
#define TIMEOUT_GET_BUTT 20 // Maximo de segundos sin pulsar nada para lectura con espera

#define B_NULL 0 // ningún botón pulsado
#define B_SELECT 850 // Boton central SELECT
#define B_DOWN 450 // Botón inferior DOWN
#define B_UP 250 // Boton superior UP
#define B_LEFT 650 // Botón izquierdo LEFT
#define B_RIGHT 50 // Botón derecho RIGHT
#define B_UNDEF 35 // Indicador de valor no reconocible
#912
(26-10-2014, 01:26 PM)william escribió: hola Antonio mira estos son los valores de cada botón

1000) btnNONE
< 50) btnRIGHT;
< 250) btnUP;
< 450) btnDOWN;
< 650) btnLEFT;
< 850)btnSELECT;
quedaría algo asi o esta mal
#define TOLERANCIA 8 // Porcentage de error admisible (tipicamente +/- 8%)
/*
#define V_0 850 // 0 Ohm
#define V_2K2 450 // 2K2 // 840
#define V_4K7 50 // 4k7 // 698
#define V_10K 650 // 10K // 511
#define V_22K 250 // 22K // 322
#define V_INF 1000 // Sin pulsador
*/
#define MICROS_ENTRE_LECT 10 // Numero de microseg. entre lecturas individuales.
#define LECTURAS20 5 // Numero de lecturas promediadas de 20 en 20
#define AUTO_REPEAT_DELAY 500 // milisegundos de presion sobre un boton para empezar a repetir boton
#define TIMEOUT_GET_BUTT 20 // Maximo de segundos sin pulsar nada para lectura con espera

#define B_NULL 0 // ningún botón pulsado
#define B_SELECT 850 // Boton central SELECT
#define B_DOWN 450 // Botón inferior DOWN
#define B_UP 250 // Boton superior UP
#define B_LEFT 650 // Botón izquierdo LEFT
#define B_RIGHT 50 // Botón derecho RIGHT
#define B_UNDEF 35 // Indicador de valor no reconocible

No uses el valor medio. Averigua el valor real con la traza y si eso no va bien utiliza DemoBotonera
Tendrias que cambiar el pin de la botonera por el que corresponda.
#define PinBotonera A11 // Pin de linea analogica para leer botonera
#913
hola Antonio mira te comento con la demo botonera saque estos números funciona todo menos el UP no sale su numero no se que será los demás botones si eso ya esta echo ahora te comento la fecha y la hora que aparece en el lcd es 01/05/2022 23:46
y en esa esta parada pero en el ,monitor serial me sale bien
Ini. Botonera.
Botonera OK.
<Ring>
<<BEEP>>
CAO Version 1.0.2 BETA DESPACHO
Fecha compilacion
Oct 27 2014 11:04:56
<<BEEP>>
que podrá ser y ahora tendrías que echarme una mano con el lcd porque claro el mio es 16, 2 no se si será por eso lo de la hora

se me paso poner como queda
#define TOLERANCIA 8 // Porcentage de error admisible (tipicamente +/- 8%)
/*
#define V_0 850 // 0 Ohm
#define V_2K2 450 // 2K2 // 840
#define V_4K7 50 // 4k7 // 698
#define V_10K 650 // 10K // 511
#define V_22K 250 // 22K // 322
#define V_INF 1000 // Sin pulsador
*/
#define MICROS_ENTRE_LECT 10 // Numero de microseg. entre lecturas individuales.
#define LECTURAS20 5 // Numero de lecturas promediadas de 20 en 20
#define AUTO_REPEAT_DELAY 500 // milisegundos de presion sobre un boton para empezar a repetir boton
#define TIMEOUT_GET_BUTT 20 // Maximo de segundos sin pulsar nada para lectura con espera

#define B_NULL 1015 // ningún botón pulsado
#define B_SELECT 717 // Boton central SELECT
#define B_DOWN 308 // Botón inferior DOWN
#define B_UP 100 // Boton superior UP
#define B_LEFT 478 // Botón izquierdo LEFT
#define B_RIGHT 0 // Botón derecho RIGHT
#define B_UNDEF 35 // Indicador de valor no reconocible
#914
El LCD ha de ser de 20x4. Se usa no solo para mostrar datos de monitorización, sino para el sistema de menús. El tuyo es de 16x2. La cantidad de código que habría que modificar es muy grande.
#915
ok Antonio

Usuarios navegando en este tema: 2 invitado(s)


Salto de foro: