Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

08/03/2010 #1


Atmega16 pwm
ola es que soy nuevo en la progamicion de micros y tengo como preyecto hacer un pwm con un ATmega 16 me han dicho que es muy facil pero no entiendo nada si me pudiesen ayudar se los agradesco mucho el proyecto es que el micro genere la señal de reloj producida en el cricuito pòr el 555 ,osea reemplazar el 555 por el micro
09/03/2010 #2


Respuesta: atmega16 pwm
En mi opinión, deberías poner el opto de entrada directo a una entrada de interrupción, y usar la salida del temporizador que quieras usar (OCRnx) a la entrada del optodíac. Un potenciómetro a la entrada analógica para el ajuste, aunque este punto igual te interesa que sea más flexible (teclas, puerto serie, etc).
25/06/2014 #3


atmega16 pwm
Buenas noches.

Deseo implementar un seguidor de lineas, el cual tenga como unidad de control un micro Atmega16, aprovechando los dos timers de 8 bits que posee (Timer0 y Timer2) para realizar un Fast pwm, los timer los configure de la siguiente forma: Fast Pwm, sin prescalado y no inversor, asi como se muestra en el siguiente codigo:

DDRB=0x08;
DDRD=0x80;
TCCR0|=(1<<WGM00)|(1<<COM01)|(1<<CS01)|(0<<CS00);
TCCR2|=(1<<WGM21)|(1<<WGM20)|(1<<COM21)|(1<<CS21)| (0<<CS20);

El ciclo de trabajo lo defino entre 0 y 255, siendo 255 el 100% y este valor se asigna al OCR0 y OCR2, mi problema radica en lo siguiente:

OCR0=255;
OCR2=255;

Cuando defino un ciclo de trabajo del 100% a los dos timers, los motores giran rapido, pero cuando disminuyo el ciclo util al 50% de UN timer y el otro lo dejo en 100%, el motor que esta al 100% ya no gira a la misma velocidad con que giraba cuando los dos tenian el ciclo util de 100%.

No se si estos dos timer tienen alguna dependencia, pero yo lo unico que deseo es poder sacar dos pwm independientes del atmega16 para asi controlar mis motores.

Realize un video con el problema simulado, para que me entiendan mucho mejor.


Muchas gracias de antemano.
25/06/2014 #4

Avatar de TRILO-BYTE

bueno con 1 solo timer puedes hacer el pwm
o sin timer eso es algo relativamente censillo

solo debes hacer un incremento

y definir hasta donde se hara el incremento es decir un periodo de X tamaño

y jugar con el flanco de subida por ejemplo
12/08/2014 #5


Atmega16 pwm
Buenas tardes.

Estoy realizando un seguidor de líneas con un Atmega16 en lenguaje C.

El código de funcionamiento es este:
Básicamente lo que hago es analizar los casos del sensor y activar el puente h para que gire a la derecha o izquierda según corresponda a través del puerto C.

Código:
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <adc_otro/adc.h>
#include <adc_otro/adc.c>


int main(void)
{
    DDRA=0x00;
    DDRC=0xFF;
    DDRD=0x0F;
    DDRB=0x01;    
    char izq,der;
    while(1)
        {
            izq=adc_read(0);
            der=adc_read(1);                        
            if((izq>210)&&(der>210))  //CASO 1   -> ADELANTE
                {
                    PORTC=0x17; 
                    PORTD=0x01;
                }
            if(izq<200)   //CASO 2    -> GIRAR DERECHA
                {
                    PORTC=0x07;    
                    PORTD=0x02;
                }
            if(der<200)   //CASO 3    -> GIRAR IZQUIERDA
                {
                    PORTC=0x13; 
                    PORTD=0x04;
                }                        
        }    
}

La libreria del adc que uso es:

#include <avr/io.h>


unsigned char adc_read(unsigned char x)
{
 unsigned char adch; 

  ADMUX = (1<< ADLAR) | (x);          
 
  ADCSRA = (1<<ADEN)|(1<<ADSC)|(0<<ADATE)|(0<<ADIF)|(0<<ADIE)|(0<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
    
  while(!(ADCSRA& (1<<ADIF)))
              ;

  adch = ADCH;
  ADCSRA = (1<<ADIF);

  return adch;
}
Mi problema es:
El ADC lee bien y funcionan bien los motores pero por poco tiempo, aproximadamente 20s, pasados los 20s el ADC ya no lee nada y toca reiniciar el micro. ¿Qué puede estar pasando?

Gracias de antemano.
19/08/2014 #6


Aunque es lo mismo que te sugiere duke1226 usando el ATMEGA16, mas cómodo es usar ARDUINO UNO por ejemplo.
El lenguaje para programarlo es mas amigable que el uso del mismo micro bajo C standard.
mira por tu cuenta

Arduino
19/08/2014 #7

Avatar de TRILO-BYTE

puede que tu problema sean desbordamientos de memoria

no es lo mismo char que unsigned char

no hagas caso de aurduino te vaz a mal acostumbrar y no aprenderas a programar

cuando usas char
el valor en un char es de -127 a127
y en un unsigned char va de 0 a 255

cuando usas char y en el ADC hay un unsigned char va haber un desborde de memoria segurito y los if dejan de trabajar

solo debes correjir poniendo unsigned char y ya! o trabajar con int
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.