Autor Tema: Uso de Timer para determinar frecuencia de una onda  (Leído 8885 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado gioalex07

  • PIC10
  • *
  • Mensajes: 27
Re:Uso de Timer para determinar frecuencia de una onda
« Respuesta #15 en: 18 de Febrero de 2018, 16:40:33 »
Bueno primero quise solo mostrar en LCD el conteo del timer tcnt0 y esto hice pero no entra si entiendo como hacer esto pues ya sera más facil aplicar lo que me han publicado



#define F_CPU 8000000UL
#include <stdio.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "lcd.h"
volatile uint8_t variable = 0;
char *txt;

int main(void){
   
   CLKPR = 1 << CLKPCE; // Configuracion de prescaler bit 7
   CLKPR = 0; // Division del prescaler en 1
   DDRA |= 0;
   PORTA |= 0b00000000;
   TCCR1A |= 0;
   TCCR1B |= 0b00000111;
   TCNT1 = 0;
   lcd_init(LCD_DISP_ON);
   lcd_clrscr();
   lcd_home();
   lcd_gotoxy(0,0);
   lcd_puts("Frecuencia");
   
   while (1) {
      TCNT0 = 0;
      while(PA0 == 0){
         
      }
      while(PA0 == 1){
         variable += TCNT0;
      }
      
      if(variable == 255){
         lcd_gotoxy(0,1);
         lcd_puts("OverFlow");
      }
   }
}

si si lo tengo el usb ttl

Desconectado gioalex07

  • PIC10
  • *
  • Mensajes: 27
Re:Uso de Timer para determinar frecuencia de una onda
« Respuesta #16 en: 18 de Febrero de 2018, 16:41:06 »
Si lo tengo

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 258
Re:Uso de Timer para determinar frecuencia de una onda
« Respuesta #17 en: 18 de Febrero de 2018, 17:14:09 »
Cita de: gioalex07
Segundo: Utilizo el atmega644a con programador usbasp, son dos trabajos en 1, primero tengo que ser capaz de medir frecuencia de la red osea en mi caso para colombia es de 60 hz aproximadamente y si solo con el timer0 porque presente dudas al docente con timer1 y decia que era otro caso para manejar dicho timer, es decir, solo puedo usar el timer0 para saberlo manejar sin problemas, ya siendo capaz de medir esa frecuencia toca con un sensor infrarrojo leer la se?al emitida por un control remoto pero si yo no se como usar timers ni leer la frecuencia ni pulsos ni flancos ni nada literal pues no podre hacerlo.. es ese el problema.

Sólo una pregunta

¿El profesor les enseño el uso de los timers?

Todavía fuera una sola materia en la que tienes dudas pensaría más del lado del profesor que te esta dando la materia donde estas viendo los microcontroladores AVR, pero veo que también tienes lagunas en la parte del manejo de C.

Veo que preguntas por todos lados cosas que no tienen ningún tipo complejidad (mediavida, el rincon del C, etc.), que me da a pensar si es el profesor, el alumno o ambos.

Así que no se si les enseño o no el uso de los timers, su configuración y la lectura de las hojas de datos para saber que hace cada bit de los registros que lo controla, o sólo los dejó a su suerte.

Por tu afirmación pareciera que ni siquiera se los enseño, pero dudo que sea ese el caso.

Por lo general en todos lados el profesor da una introducción al manejo de los periféricos, incluidos los timers y ya es cuestión de uno inferir otros usos, para ello son las prácticas y dentro de esas prácticas tenemos que ganar la habilidad de interpretar las hojas de datos e incluso tenemos que aprender a trabajar con los recursos que nos ofrecen los microcontroladores.


Y con eso agrupaste al 95% de los estudiantes de educacion media. Y no quiero hablar mal pero tambien gran parte de los docentes de niveles medios.
El gran problema del estudiante, la comprension lectora, no comprenden lo que lee y es algo que al menos aca en Argentina y en el colegio donde me encuentro lo tienen todos los alumnos.

No se en que nivel esta gioalex07, pero por experiencia al dar clases me toco que por mas que le especifiques completamente todo, y para que se trata, el alumno siempre toma la mitad de las cosas, asi que no es sorprendente que el llegue con solo una parte. Una persona que se encuentra en la universidad, deberia minimo ponerse el a buscar.

Y por ende bastantes profesionales que aprendieron de esos maestros.

No estoy en la educación pero me ha tocado ver que, aún a nivel universitario, suben proyectos como el que está pidiendo gioalex07, y no importa la nacionalidad o universidad que sean, ni aún usando mbed, arduino y derivados son capaces de entender lo que deben de hacer.

Como anécdota, de la cual no voy a decir nombres, para no quemarlos y advertirles que están haciendo las cosas mal, así menos competencia.

Hay unas personas que se promocionan como los mejores del ramo del diseño de sistemas embebidos e incluso ofrecen cursos para que aprendas con los profesionales (que son ellos, por supuesto).

Tienen una tienda en línea en la cual venden productos que por lo general son módulos y kits de diversos tipos. El año pasado les mande un comentario sobre uno de los productos que anuncian y que por obvias razones lo están anunciando mal, pero, a pesar de especificarles cual era el problema, su respuesta me indicó que no comprendieron ni la mitad de las observaciones que les hice y lo único que mostró su respuesta fue un total desconocimiento y el ego exacerbado que tienen.

Lo peor es que cuentan con estudios de Maestría.

Ves sus vídeos en youtube y lo único que ves son errores, tras errores en su código, no muestran la capacidad de siquiera seguir la ejecución de los programas para percatarse de los errores que están cometiendo y todo de lo que la mayoría en Internet conocen a cerca del diseño de sistemas embebidos, lo pasan por alto.

En sí ya hay un problema de fondo que incluye:

1.- Padres totalmente desconectados de la educación de sus hijos.
2.- Un modelo educativo que se ha degenerado para incrementar estadísticas (no calidad) y a la vez crear mano de obra barata que no piense por si misma.
3.- Estudiantes que se sienten agusto con la situación.

De nada me sirve ir pasando de año si voy arrastrando problemas fundamentales, como bien mencionaste la lectura de comprensión y eso se hace notar cuando llegamos a la Universidad.

Además, tengo la impresión de que ya se ha tratado en el foro temas relacionados con frecuencímetros.

Ya me imagino yo dando  clases, me agarraría a todos por parejo.

Así que a nuestro amigo gioalex07 le recomiendo que deje de ver esos vídeos de youtube que no le aportan nada como "¿Cómo Dejar de Preocuparse y Comenzar a Vivir una Vida Extraordinaria?" y se concentre en leer libros de programación y diseño de sistemas embebidos, también hay infinidad de tutoriales en internet.

Menos youtube, más lectura.
Menos facebook, más lectura.


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Uso de Timer para determinar frecuencia de una onda
« Respuesta #18 en: 18 de Febrero de 2018, 17:40:43 »
Citar
Ya me imagino yo dando  clases, me agarraría a todos por parejo.

Jajajaj, me pasa lo mismo. Esto ya es Off-topic, pero llegas a un punto en el que comprendo a los docentes actuales.
Vos pones todo el esmero, explicas el PORQUE de las cosas, no es magia es lógico, la cual no deben aprender de memoria, le facilitas las cosas para que su desarrollo sea no mecanico, sino lógico, problemas extremadamente simples y como si nada no pueden hacerlo, la explicación es "Nunca lo vimos". Llegue al punto en que si no queres retrasarte en la materia por algunas personas, es dar la clase y aquel que desea molestar y no trabajar entonces lo lamento. Por supuesto, todas las dudas serán contestadas. Al menos el nivel medio aca es muy distinto de la universidad, el que va a la universidad va a aprender, en nivel medio van por obligación.
Por eso mismo voy a ser un poco mas justo con gioalex07, conociendo que ya no es un bebe de pecho.

Citar
¿El profesor les enseño el uso de los timers?
En mi caso en la universidad fue: "Tienen que hacer un proyecto con un PIC para final de año".. Y se paso hablando 1/4 de año de cualquier cosa. Cuando le preguntamos cuando nos iba a dar clases, aunque sea una introducción de como se programa en ASM, nos dijo, ahí tienen el datasheet, léanlo. Y esa fue toda la enseñanza.. Aprendí mas afuera de la universidad en tema programación que en la misma lamentablemente.


gioalex07:
Hay unos problemas con tu logica y GRAVES como ya menciono tsk (algunos no los voy a nombrar, solamente a los que incumben al Timer).

Código: C
  1. TCCR1A |= 0;
  2.    TCCR1B |= 0b00000111;
  3.    TCNT1 = 0;

Estas configurando el TC1 y luego usando el TC0

Código: C
  1. if(variable == 255){

El TCNT no queda siempre en 255, sino que al contar uno mas vuelve a 0. Esto es lo que se conoce como OVERFLOW
Se activa un bit que indica el mismo, el cual esta en uno de los registros del Timer.

Otra cosa es el tiempo en que llega a contar 256, o mejor dicho saber cuanto es el tiempo que le toma para contar una unidad... ESTO ES IMPORTANTE y que tenes que saber como calcularlo.
Tambien pensar que la rutina del LCD ocupa tiempo, y que ese tiempo puede ser mayor a la de la cuenta (y se produzca el overflow siempre), eso haria que se actualice el LCD muy rapidamente.
A tal punto que mejor es verlo con un osciloscopio y cambiar el estado de una salida. Asi ver el periodo del mismo y poder compararlo con la parte teorica

Código: C
  1. TCCR1B |= 0b00000111;

Suponiendo que sea el TC0
Para CS0x : 111 - External clock source on T0 pin. Clock on rising edge.

Es decir cuenta los pulsos externos que entren por el pin T0, y eso no es lo que planteamos, la idea es que cuenta lo del oscilador que posea el micro.

---------------------------------------

Te voy a decir algo, vos lo implementas si queres.
Cuando tengas que modificar registros y no poseas ninguna libreria para hacerlo o en este caso el entorno Arduino, si tenes que utilizar un modulo en CUALQUIER microcontrolador,
- Verifica TODOS los registros que involucran al funcionamiento del modulo.
- Configura cada uno de los registros, leyendo que hace cada bit. Y dandole el valor acorde a tu proposito.

Asi te vas a evitar sorpresas de que luego te falta algo. Y por demas esta decir que deberias leer el modulo, aunque sea la parte del Timer.
« Última modificación: 18 de Febrero de 2018, 18:07:13 por KILLERJC »

Desconectado gioalex07

  • PIC10
  • *
  • Mensajes: 27
Re:Uso de Timer para determinar frecuencia de una onda
« Respuesta #19 en: 18 de Febrero de 2018, 18:31:39 »
No quiero entrar en una discusión sin proposito.. No es mi fuerte la programación y si para ustedes es fácil los felicito pero no acusen porque si.. Si por haber pedido ayuda antes no puedo pedirla ahora es un problema ok simplemete no comentare más

Gracias

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Uso de Timer para determinar frecuencia de una onda
« Respuesta #20 en: 18 de Febrero de 2018, 18:36:45 »
Si lo tengo

Bien,
Ahora intenta conseguir que el micro envíe caracteres a través de la UART:

   putchar("*");

En el PC los puedes recibir con cualquier programa de terminal serie, como realterm.

Eso te servirá para hacer debug más adelante.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Uso de Timer para determinar frecuencia de una onda
« Respuesta #21 en: 18 de Febrero de 2018, 18:39:13 »
Con un Arduino esto iría mucho más rápido. (por si tienes uno por ahí)

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Uso de Timer para determinar frecuencia de una onda
« Respuesta #22 en: 18 de Febrero de 2018, 19:17:48 »
Con el display LCD también puedes hacer debug, aunque más limitado.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Uso de Timer para determinar frecuencia de una onda
« Respuesta #23 en: 18 de Febrero de 2018, 20:43:33 »
No quiero entrar en una discusión sin proposito.. No es mi fuerte la programación y si para ustedes es fácil los felicito pero no acusen porque si.. Si por haber pedido ayuda antes no puedo pedirla ahora es un problema ok simplemete no comentare más

Gracias

Por eso seguimos intentando ayudarte, nomas que el Off-topic gano.. Yo supongo lo peor de la otra persona, no porque así lo crea o conozca, es porque no doy por dado ningún conocimiento previo que posea la persona. La programación es "facil" luego de unos años pero nunca dejas de aprender, no me considero el mejor en el tema tampoco, y entiendo que vos estas iniciando recién. La única diferencia que hago es levantar la vara en la información dada a la persona según el conocimiento que demuestre. Por ejemplo si hubiera sabido de que cursabas la universidad te indicaba un par de preguntas para que buscaras en internet y no escribirlo por mi mismo. No por vagancia, sino que es la forma de hacerte buscar información y no darlo "servido en bandeja". Es un tema de aprendizaje para que luego vos puedas valerte por vos mismo. En el foro hay mucha gente que pregunta sin siquiera probar nada, y lo que tratamos de evitar es eso, es mas productivo que venga una persona y que demuestre lo que hizo, lo que probo y los resultados que obtuvo y que pregunte que esta mal, que hacer algo de cero como este tema. Este es mi ultimo post con Off-topic.

Respecto a seguir con el programa ahí te di algunos problemas que tenias, y que podrías hacer para solucionarlo.

Como ves cada uno tiene un punto de vista de como abarcar el problema. La cual comparto en algunos aspectos con Picuino (requisitos, la forma en que se debe dar la matricula, etc),  y otros no como hacer una comunicacion serie cuando solo se trata de un simple timer. Pero eso no deja de quitar que sean validas ambas.

Creo que la incognita para Picuino es... ¿Te permiten usar Arduino o su entorno?

Y espero tu solucion al tema. Sabes que si tenes alguna duda vamos a estar para responderla, de ahora en adelante solo voy a responder sobre el Timer.


 

anything