Autor Tema: Atmega 168 y Pwm phase correct  (Leído 3853 veces)

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

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Atmega 168 y Pwm phase correct
« en: 22 de Junio de 2014, 21:18:30 »
Buenas todos, tengo el siguiente problema, he programado un atmega 168 para tener dos señales Pwm centradas esto es algo así
___|-------|_____
_____|--|_________

Pero al probarlo en mi placa con el osciloscopio me queda alineado a la izquierda, por decirlo de alguna manera, tal que así.
___|-------|_____
________|--|_____


En proteus si que me funciona bien alguien tiene idea de lo puede estar pasando???

Código: [Seleccionar]

hours, in proteus works well but in the microcontroller no.

Code:

#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/pgmspace.h>//Librería necesaria para el PCD8544
#include <util/delay.h>
#include <avr/interrupt.h>
#include "pcd8544.h"
#include "pcd8544.c"
#include "stdlib.h"
#include <stdint.h>
#include <avr/eeprom.h >



void Configura_Puertos (void)
{
    //         76543210
   DDRD=0b01100000;//Puerto
   //     ||||||||___
   //     |||||||____
   //     ||||||_____
   //     |||||______
   //     ||||_______
   //     |||________ PWM1
   //     ||_________ PWM2
   //     |__________
   //PORTD=0b00000111;   //Activo los pull-ups
   
   DDRC|=0b00000100;//Puertos
   PORTB|=0b00000100;//Retroiluminación GLCD
       
}

void Config_PWM_8b (void)
{
   TCCR0A=0b10100001;
   //       ||||||||_   WGM00
   //       |||||||__   WGM01
   //       ||||||___
   //       |||||____
   //       ||||_____   COM0B0  TOGLE OC0A
   //       |||______   COM0B1
   //       ||_______   COM0A0
   //       |________   COM0A1
   TCCR0B=0b00000001;
   //       ||||||||_   CS00
   //       |||||||__   CS01
   //       ||||||___   CS02
   //       |||||____   WGM02
   //       ||||_____
   //       |||______
   //       ||_______   FOC0B
   //       |________   FOC0A
   
   //TCNT0=0b00000001;
   
   OCR0B=0b11000000;
   OCR0A=0b11110001;
   //OCR0B=0b00001111;
}





int main(void)
{
   Configura_Puertos ();
   Config_PWM_8b();


   while(1)
   {

   }
   
}


Muchas gracias
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Atmega 168 y Pwm phase correct
« Respuesta #1 en: 23 de Junio de 2014, 01:08:51 »
Hola QIQE!,
ha leido el Datasheet del Atmega168? el ese Atmega tiene 6 puerto PWM que son
PuertoD.3 (PCINT19/OC2B/INT1)
PuertoD.5 (PCINT21/OC0B/T1)
PuertoD.6 (PCINT22/OC0A/AIN0)
PuertoB.1 (OC1A/PCINT1)
Puertob.2 (SS/OC1B/PCINT2)
Puertob.3 (MOSI/OC2A/PCINT3)
Cuando configura asi:
DDRD=0b01100000;//Puerto
   //     ||||||||___
   //     |||||||____
   //     ||||||_____
   //     |||||______
   //     ||||_______
   //     |||________ PWM1  
   //     ||_________ PWM2
   //     |__________
   //PORTD=0b00000111;   //Activo los pull-ups


no puedo ayudarte muchos porque yo de GGC no se muchos.
yo en tu lugar probaria sin activar la Pulldown, aunque si no tiene muchas experiencia, te recomiendo que haga un Test solo usando los PWM, juega con ellos, asi aprendi yo, pero en Basic, yo uso BASCOM-AVR.

Mirar este ejemplo por aqui
http://www.protostack.com/blog/2011/06/atmega168a-pulse-width-modulation-pwm/

Saludos
« Última modificación: 23 de Junio de 2014, 01:15:29 por stk500 »

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Atmega 168 y Pwm phase correct
« Respuesta #2 en: 23 de Junio de 2014, 06:13:25 »
si uso D.5 y D.6 los pull ups no los empleo están comentados.
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado Snaut

  • PIC12
  • **
  • Mensajes: 57
Re: Atmega 168 y Pwm phase correct
« Respuesta #3 en: 26 de Junio de 2014, 16:53:17 »
Buenas. He probado tu programa tanto en proteus como en un atmega 2560 (aprovecho una placa arduino para hacer pruebas rápidas) y tu programa creo que me ha funcionado correctamente. Te adjunto una foto para que lo veas. Si lo ves correcto tal vez sea algún problema de los fuses, aunque no sabría decirte cual... Sino tal vez por algún ajuste del osciloscopio. Lo único que he cambiado ha sido el OCR0A y B por el OCR1A y B ya que en este micro el 0 no está pero por lo demás el programa es el tuyo. Un saludo.
« Última modificación: 26 de Junio de 2014, 16:56:51 por Snaut »

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Atmega 168 y Pwm phase correct
« Respuesta #4 en: 26 de Junio de 2014, 21:05:54 »
Muchísimas gracias, si que era un problema del osciloscopio del trigger, una vez ajustado ha funcionado sin problemas una vez mas muchas gracias
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado Snaut

  • PIC12
  • **
  • Mensajes: 57
Re: Atmega 168 y Pwm phase correct
« Respuesta #5 en: 27 de Junio de 2014, 09:46:08 »
De nada, me alegro que te haya funcionado bien. Un saludo.