Leer estado del puerto avr con C Pequeño detalle Atmega

luego lo probe en proteus para ver y en la simulacion tambien aparece que esta haciendo conversion a 10bits y yo quiero que lo haga a 8bits

Y dale con lo mismo... Ya desinstala eso que nomas te confunde mas.

Para que puedas leer los valores, solo usa el ajuste a la izquierda y lee la parte alta, eso es todo, no tiene falla. Usa la conversion con preescalador a 8, no necesitas mas para lo que quieres hacer. Incluso todavia se me hace rápido.

Otra cosa, recuerda conectar los voltajes de AVCC y AVSS, son la referencia de voltaje del ADC.
 
Y dale con lo mismo... Ya desinstala eso que nomas te confunde mas.

Para que puedas leer los valores, solo usa el ajuste a la izquierda y lee la parte alta, eso es todo, no tiene falla. Usa la conversion con preescalador a 8, no necesitas mas para lo que quieres hacer. Incluso todavia se me hace rápido.

Otra cosa, recuerda conectar los voltajes de AVCC y AVSS, son la referencia de voltaje del ADC.

Pues si ya los conecte, y pues del proteus la verdad cuando estas escasos de aparatos de medicion pues si te da mucho por usarlos, yo por ejemplo no he podido comprarme un osciloscopio aca en mexico andan por los 8000 pesos uno mas o menos y un multimetro fluke osea algo bueno estan en 2500 en fin entonces pues hay que hacerle con lo que se tiene pero bueno mañana voy a probar en la escuela aver como sale la señal sale gracias y luego te cuento
 
El PWM no tiene problema, conecta un led, y juega con su brillo.
Los led te pueden dar una cantidad de informacion cualitativa muy valiosa... Sabiendolos usar.
 
Pues ya me quedo lo del pwm ahora la parte del conversor de corriente a voltaje no me va muy bien, ya me prestaron una fuente de corriente para probar porque no me da la salida en voltaje correcta, como sale la señal invertida pues la volvi a invertir y no sale, algun circuito por hay??
 
Osea... como? No entiendo tu problema, habias dicho que si funcionaba bien...

Ha, y si quieres que salga positiva la señal, pues conecta el sensor al revez...
 
Última edición:
¬¬ primero que funcione todo el circuito así, y no en chafeuss... Si el circuito y atmega ya trabaja todo correctamente, entonces ya como por ultimo, te digo como lo trabajes con fuente simple. Solo que ahorita como es fase de desarrollo, hay que eliminar todos los errores posibles en diseños.
 
A ver es que eso pasa por no explicarme bien, mira ahorita toy en la escuela y ya vi la salida del PWM y si funciona bien, le meti el voltaje con un potenciometro para ir variando y va bien, a mayor voltaje el ancho crece, cuando llego a 5volts el ancho se vuelve al 100% osea eso ya me quedo, ahora estoy con la parte de la entrada, cuando me mandaste el convertidor de corriente a voltaje lo probe con un lm358 y funciono bien, claro esta que use una fuente simetrica y efectivamente sale bien pero en el circuito real no quiero usar una fuente simetrica y sin ella ya no funciona, por cierto tendras una referencia a un mosfet que pueda manejar una carga de 100Watts que se acople bien a señales digitales, por ahi oi hablar una ves de mosfet que diseñan especial para recibir de 0 a 5V en su base
 
Esos mosfet de 0-5V en gate, no los he conseguido fácil, y son mucho mas caros, lo que he hecho mejor es usar doble mosfet. Que frecuencia usaras de PWM? Que vas a controlar?

Y pues para controlar 100W, pues nomas ve que corriente maneja el mosfet, si no te da la corriente o se queda corto, usalos en paralelo y con la suma de sus corrientes ya calculas si la potencia te es suficiente.

Por otro lado, el truco para no usar fuente partida, es que conectes el opamp, a tierra y a +5V. El truco aqui es que, al sensor lo conectes a una tierra virtual, usando dos resistencias identicas como divisor de tension. De manera que para el sensor y el opamp, tendras tierra virtual, y +/- 2.5V
Me explico? Las resistencias deben ser lo mas pequeñas posibles sin que se quemen, claro que sacrificando el consumo de corriente del circuito. Pero si no es una aplicacion a baterías, no habra problema.
 
Poca aprox va ser 4Khz, bueno voy a tratar de buscar esos mosfet porque si me facilitaria, igual y uso un optotriac en fin y bueno lo de la virtual pues yo creo que si lo voy hacer asii, bueno dejame quemar algunas cositas y luego te cuento sale gracias
 
Encontre este en un libro y ya le entendi a la explicacion, he probado con el lm358 y parece funcionar, ahora que propones para continuar, en realidad tengo una pregunta, si le meto 1volt el micro debe generar un pwm de 0% ciclo util y si le meto 5volts debe generar el pwm al 100% como hago eso en el micro, cuando estaba probando nomas lo que hacia era restar al valor leido por el ADC lo de 1volt para que generar 0% de pwm pero cuando llega a 5volts entonces produce el pwm correspondiente a 4Volts porque se lo reste entonces nunca llega al 100% como hago eso, alguna idea
 

Adjuntos

  • Convertidor.JPG
    Convertidor.JPG
    13.5 KB · Visitas: 12
El valor decimal, de 1 volt, es el valor 51. Esto nos deja que, el ADC variara de 51 a 255, dando un total de 204 valores.

La forma mas facil es que, el timer tenga como TopCount, el valor 204, entonces al valor del ADC, le restas 51 y el valor resultante, lo metes directamente al PWM y ya es todo. Así te evitas hacer multiplicaciones por punto fijo para hacer una proporcion.
 
El valor decimal, de 1 volt, es el valor 51. Esto nos deja que, el ADC variara de 51 a 255, dando un total de 204 valores.

La forma mas facil es que, el timer tenga como TopCount, el valor 204, entonces al valor del ADC, le restas 51 y el valor resultante, lo metes directamente al PWM y ya es todo. Así te evitas hacer multiplicaciones por punto fijo para hacer una proporcion.

Aver hice esto pero nunca llega el pwm al 100%

void config_pwm_8()
{
TCCR2 = (1<<WGM20)|(1<<WGM21)|(1<<COM21)|(1<<CS20);
TCNT2 = 204; //Aqui ponemos el valor con que se compara
OCR2
}

while(1)
{

lecturaADC = LEE_ADC();

if(lecturaADC <= 51) //Para mantenerlo en 0 cuando haya 1volt
{ OCR2 = 0;}
else
{ // caso contrario entonces le resto 51 pero se supone que el topcounter es de 204 porque no llega a 100% en el pwm si ha 255 del adc menos 51 es 204 pero no da
OCR2 = lecturaADC-51;
}

}
 
Ya vi que esta pasando... Estas usando el timer 2, y no recordaba que este no puedes controlar el Top Count.

El PWM esta trabajando desde 0 hasta 255 y ahi el problema. Aqui tenemos una de dos.
O usas el Timer1 para poder controlar el TopCount, o multiplicamos los valores del ADC por un numero fraccional.

Tu decide cual camino tomar y ya te digo como se hace.

P.D. Me deba flojera abrir el datasheet XD XD
 
Orale esa no me la sabia, humm tu que me recomiendas, yo pienso que para no modificar la parte del adc mejor multiplicamos pero eso como se hace?? oye por cierto conoces las librerias avrlibc que tal andan, hoy voy a probarlas aver que

Mejor aguantame tantito estoy jugando con el timer1 aver que saco sale, aunque si dime como es eso de multiplicar por un fraccional

Esto no funciona aun con el timer1 no se modifica el TOPcounter del TCNT1, mira hice esto y no funciona
DDRD = 0xFF;
TCNT1 = 204; //Hasta aqui va contar
OCR1A = 102; // ciclo util
ICR1 = 0xFF; //Resolucion a usar en este caso a 8bits

//PWM no invertida, en su modalidad rapida con prescala a 1
TCCR1A = (1<<COM1A1)|(1<<WGM10);
TCCR1B = (1<<WGM12)|(1<<CS10);
 
Última edición:
El problemita es que yo programo exclusivamente en ensamblador, el C lo uso para hacer aplicaciones para PC en windows.
Así que no se como este esa libreria.

Y para lo de tu problema, intenta con esto.

Código:
float a;
float b;
b = 1.25;
a = LEE_ADC();
if (a > 50)
{
 a = (a-51)*b; 
 OCR2 = a;
}

A ver como queda esto...
 
Me estoy empezando a dar cuenta que solo tu respondes ¿porque?, jeje en fin pues si si funciona esa relacion pero la pregunta forzada ¿De donde sale ese 1.25? digo se que sale de 255/204 pero porque o cual fue tu razonamiento?? :unsure:

Oye pues por adelantado te doy las gracias porque entonces ya quedo esto, un optotriac un irfz y le puse un foco de 60w y si jala bien, ahora nomas porque me sobra tiempo voy a ponerme a usar el pwm pero con resolucion a 10bits aver que me sale, imagino que se puede controlar mucho mejor el brillo pues tendre 1024 pasos a diferencia de los 255 en fin, aver como se ve asi (y)

POr cierto usar (int8_t)(float A) para forzar la conversion un entero de 8bits no funciona pero si haces (char)(float A) si funciona y no sabo porque
 
Última edición:
Pues supongo que como yo ya llebaba el tema encausado, ya no tiene caso confundir con mas ideas, bueno al menos yo asi cuando veo un tema ya con alguien que lo va llevando, no digo ya nada para no confundir mas a la pobre victima.

Y sobre ese numero magico, salio con la famosísima y universal regla de 3.

(255/204)*numADC
Simplemente hice una proporcion.

Y si, sospechas bien, si usas el ADC a 10 bits y el timer1, tendras mas resolucion en el PWM.

Y sobre ese detallito de los flotantes y enteros, ahi si te voy a quedar mal, por que ya es una cuestion del compilador, y pues como te repito, yo programo los microcontroladores exclusivamente en ensamblador. Entonces yo no tengo problemas de pelearme con los compiladores. Al unico compilador C que si le conozco bien es al de Borland para aplicaciones windows.
 
O si hermosa regla de 3 de cuantas nos han sacado o al menos da con muchas soluciones, sale mi hermano nos vemos luego subo lo que he hecho digo no es mucho pero espero le sirvan despues a alguien mas
 
Pues yo cuando empezaba con estos circos, un ejemplito de estos me hubiera ahorrado una tarde de sufrimiento. Ya le servira a alguien mas, eso tenlo por seguro.
 
Atrás
Arriba