Traduccion o creacion de manual para microcontroladores AVR

Bueno les dejo el código para probar el uso del PWM en el timer 0 del ATtiny2313:
Código:
/*************************************************
 PROGRAMAS DE EJEMPLO PARA EL ATTINY2313 - 20PU.
 PROGRAMADOR: Moyano Jonathan.
 Fecha: Setiembre del 2010.
 Programa: Enciende y apaga un LED conectado al 
           puerto PB2 del microcontrolador progresivamente mediante PWM.
 Cristal:  4Mhz.
 Programador: PK2-ISP.
 ************************************************/
 
#include <avr/io.h>     // Definiciones de hardware.
#include <util/delay.h> // Librería para generar retardos.

// Led conectado al PIN PB2 del micro donde está la salida PWM.
#define LEDPIN 2

// Definimos el valor máximo que puede tomar el PWM.
#define PWM_MAX 255


int main(void)
{
    DDRB = 0x1F;  // PB4 a PB0 como salidas.
    PORTB = 0x00; // Ponemos todas las salidas a 0.
    
    uint8_t brillo = 0; // Declara e inicializa la variable brillo 0 = led apagado; 0xFF = led con máximo brillo.
    

    // -------------------------
    // Iniciamos el módulo PWM.

    // PWM de 8 bits, fase correcta.
    // 8 bits nos darán 256 niveles de brillo.
    TCCR0A |= (1<<WGM00);

    // Limpiamos los bits OC0A/OC0B en el comparador.
    // Setea OC0A/OC0B en la parte inferior (Modo no invertido)
    TCCR0A |= (1<<COM0A1);

    // Seteamos el prescaler a 64.
    // 4 MHz / 64*256 = Frecuencia de PWM = ~235 Hz 
    TCCR0B = (1<<CS00)|(1<<CS01);

    // -------------------------
    
    
    while(1)
    {
        


          for(brillo=0; brillo<=PWM_MAX; brillo++) {
        
        // Cargamos el valor de brillo en el comparador.
        OCR0A = brillo;
        
        // Ponemos un retardo para ver el efecto.
        _delay_ms(10);

    }

    return 0;
  }

}

Espero les sirva (y)
 
Hola Moyano Jonathan, perdon por no responder antes es que ando muy ocupado con la escuela, respecto a lo del 555 pues te comento que yo uso el PonyProg para programar los AVR pero como no se le entiendo muy bien a lo de los fuses "los tiene invertidos" pues meti la pata varias veces de mover la configuracion de seleccion de reloj y efectivamente se pierde sincronia y ya no programa, por cierto con PonyProg no puedes cometer la falla de desactivar la programacion serie porque no te lo permite, volviendo al tema del 555 le di una leida al manual y efectivamente habla de la perdida de sincronia y te da como solucion inyectar una señal cuadrada de 5Volts con ciclo efectivo de 50% a una frecuencia de 100Khz por la patita de Xtal2 ellos te recomiendan que lo hagas con un generador de señales pero como no tengo pues configure un 555 con esas caracteristicas, a si le clavas la señal y conectas el programador y luego luego le das en programar fuses en el ponyprog ya previamente configurados y corregidos, a mi me funciona al 100% con el uso de un programador serial sencillo, por cierto en la universidad me han regalado 6 atmega8 por que segun ellos ya no sirve y en realidad la falla era esa, ahora ya tengo 8 de estos micros, no me digas rata por no regresarlos pero la verdad es que la mayoria son chavos pomposos que se creen mucho y les da igual comprar otro, ademas que tanto les cuesta leer y saber como recuperarlos no crees digo todo cuesta en esta vida
Sale nos vemos y prueba a desconfigurar tu micro y recuperarlos con el 555 si funciona recuerda que es por Xtal2

A casi se me pasaba gracias por los codigos que has subido, estoy pensadon en hacer un control de tono para audio con un micro de ST electronics el tda7449 el mismo funcionan a base de I2C a si que voy a utilizar tus codigos sale, no te preocupes si lo llego a publicar pongo la nota de a quien le pertenece esa seccion del codigo, yo una ves publique un codigo de una cerradura con 89C51 y mira si en chico internet un cabron de la escuela de mi salon lo presento como proyecto final y al guey le pusieron 8 sin haber hecho nada mas que copy-paste eso si encabrona pero ya ni pedo a mi en lo personal me encabrona que hagan eso y mas a nivel de ingenieria, jajaja ya me extendi sale gracias y nos vemos
 
@benito2312 mirá ponerse mal por que alguien usó tu código no vale la pena....inmaginate los que se gastan 600 millones en una pelicula y cualquiera se la descarga de internet en un par de horas.......

Ahora si tenés dudas con tu proyecto comentalas y en una de esas te vamos a poder ayudar.

Saludos y que andes bien !
 
Hola!!
Soy nuevo en el foro pero me gustaria aportar en el manual, estado leyendo sus mensajes y no se que tan avansados estan en el.
he programado PIC y atmega8 y me gustaria aportar con mi experencia yo pienso que se deberia estructurar primero algo basico tanto en ensamblador como en C como configuracion de puertos, analogico digital, comparadores, configuracion stpointer, y como utilizar los ciclos basicos (for, while) tanto en c como en ensamblador
 
Pues creo que todos estamos en la mejor disposicion de ayudar y escuchar asi que sale con confianza pasanos tus aportes que te hemos de agradecer por ello sale
 
Hola aca de nuevo yo, oigan tengo un pequeño problema con un program, veran ya anteriormente habia programado el AVR para leer y grabar memorias EEPROM 24LC0X pero lo hacia mediante software, esta vez quise hacerlo usando el modulo TWI del AVR y nomas no puedo, no se que me esta fallando a ver si me pueden hechar una mano sale gracias y espero su ayuda, nota el programa solo logra grabar la posicion cero de la memoria y lo hace bien y cuando intento leer solo me devuelve el valor 0xA1 en vez del dato que deberia, por cierto A1 se supone que es la direccion que le envio para identifacar al esclavo y hacer que lea pero naranjas que leer y menos que grabe mas alla de la primera direccion.
Aca el codigo
--------------------------------------------------------------------------------------
//Definiciones
#define F_CPU 1000000UL
//Definiciones para TWI
#define MT_START 0x08
#define MT_REPEATED_START 0x10
#define MT_SLA_ACK 0x18
#define MT_DATA_ACK 0x28
#define MR_SLA_ACK 0x40
#define MR_DATA_ACK 0x50
#define SLA_W 0b10100000
#define SLA_R 0b10100001


//Librerias
#include <string.h>
#include <avr/io.h>
#include <util/delay.h>
#include "LCD.h"


//Formato de la direc_esclavo 0b 1 0 1 0 A2 A1 A0 R/W; R = 1 W = 0 ==> A1 o A0
void CONFIG_IO()
{
DDRB = 0xFF;
DDRC = 0xFF;
DDRD = 0xFF;
}
void CONFIG_TWI()
{
TWBR = 0x02; /Logrando una frecuencia de operacion de 50KHhz
TWSR = 0x00;
}
int Send_Start()
{
TWCR = (1<<TWEN)|(1<<TWINT)|(1<<TWSTA);
while((TWCR & 0x80) != 0x80){};
return 0;
}
int Send_Repeated_Start()
{
TWCR = (1<<TWEN)|(1<<TWINT)|(1<<TWSTA);
while((TWCR & 0x80) != 0x80){};
return 0;
}
void Send_Stop()
{
TWCR = (1<<TWEN)|(1<<TWINT)|(1<<TWSTO);
}
int MT_Send_SLA(int SLA)
{
TWDR = SLA;
TWCR = (1<<TWINT) | (1<<TWEN);
while((TWCR & 0x80) != 0x80){};
return 0;
}
int MT_Send_Data(int Data)
{
TWDR = Data;
TWCR = (1<<TWINT) | (1<<TWEN);
while((TWCR & 0x80) != 0x80){};
return 0;
}
void Grabar_Dato_Dispositivo(int direccion, int dato)
{
Send_Start();
MT_Send_SLA(SLA_W);
MT_Send_Data(direccion);
MT_Send_Data(dato);
Send_Stop();
}
char Lee_Dato_Dispositivo(int direccion)
{
Send_Start();
MT_Send_SLA(SLA_W);
MT_Send_Data(direccion);
Send_Repeated_Start();
MT_Send_SLA(SLA_R);
return TWDR;
}

int main()
{

CONFIG_IO();
CONFIG_TWI();
LCD_INI();
Grabar_Dato_Dispositivo(0x00, 'V'); //Grabo en la posicion 0
LCD_DATO(Lee_Dato_Dispositivo(0x00)); //Leo la posicion cero
//Siempre me rotorna 0xA1 y solo graba la posicion cero
while(1){};
}

Sale aver si me pueden ayudar, ya leei toda la datasheet sobre el tema y lo hice paso a paso y no sale, no se que me este saltando, por cierto estoy trabajando a 1Mhz
 
Bueno acá les dejo un programa para probar el funcionamiento de la USART del ATtiny2313.
Código:
/*************************************************
 PROGRAMAS DE EJEMPLO PARA EL ATTINY2313 - 20PU.
 Fecha: Octubre del 2010.
 Programa: Recibe un dato a través de RS232 y luego lo envía nuevamente a la PC aumentando 1 su valor .
 Cristal:  12Mhz.
 Programador: PK2-ISP.
 ************************************************/
#include <avr/io.h>        // Definiciones de hardware.
#include <util/delay.h>    // Librería para generar retardos.

// Iniciamos la UART.
void Init_UART (unsigned int baud)
{

  // Seteamos el BAUDRATE...tiene haber +/- .2% de error de clock para asegurar buen funcionamiento.
  
  UBRRH = (unsigned char)(baud>>8);
  UBRRL = (unsigned char)baud;
 
  // Habilitamos el módulo de la UART.
  UCSRB = (1 << RXEN) | (1 << TXEN);

  // Configuración de la UART: 8bits de datos 2 bits de stop.
  UCSRC = UCSRC = (1<<USBS)|(3<<UCSZ0);

}

// Recibe un byte del puerto RS232.
unsigned char get_byte(void)
{
  // En espera de datos entrantes.
  while (!(UCSRA & (1 << RXC)));

  // En cuanto recibimos un datos retornamos con el.
  return UDR;
}


// Envía un byte por el puerto RS232.
void put_Byte (unsigned char data)
{
  // Espera a que el buffer de transmisión este libre.
  while (!(UCSRA & (1 << UDRE)));

  // Comienza con la transmisión.
  UDR = data;
}



int main(void) {

Init_UART(77); // Iniciamos las comunicaciones RS232 a 9.6Kbps.

   while(1) {

      put_Byte ('H');
      put_Byte ('O');
      put_Byte ('L');
      put_Byte ('A');
      put_Byte (' ');
      _delay_ms(1000);

     }

Espero les sirva (y)
 
Jaja ya la hice y el unico sopenco que me contesto me dijo
sorry dont quite understand what you say
Ya nomas porque no hablo ingles bueno ya le cambie la velocidad pensando que posiblemente necesitaria trabajar la memoria a minimo 100Khz pero nada de nada ahora solo graba la posicion cero la tres y la cinco y ya ¿Que sera pues ya me aburri ahora hasta mañana que pueda platicar con el profe gracias de todos modos
 
Buen dia a Todos,
Oye Benito2312, te puedes apollar en la informacion del datasheet del Atmega8 en la pagina 177, explican los pasos a seguir de este modulo TWI.

Espero te sirva.
 
Buen dia a Todos,
Oye Benito2312, te puedes apollar en la informacion del datasheet del Atmega8 en la pagina 177, explican los pasos a seguir de este modulo TWI.

Espero te sirva.

Ya lo habia hecho, imprimi toda la info sobre el modulo TWI y ya lo leei y lo hice paso a paso tal cual lo dice la datasheet, el problema es que solo almacena el dato en la primera localidad y en la tercera y asi casi de forma aleatoria y ademas no he podido hacer lectura, ya use varias eeprom y en ninguna funciona bien y no es la memoria porque si lo hago mediante software si funciona bien, pero quiero ahorra codigo y ademas usar el modulo TWI que trae si no para que lo trae jajaj no creen, bueno ya les contare despues voy a bajar info de atmel acerca del tema, encontre un ejemplo a ver si con ese funciona
 
Hola todos.... espero que me puedan ayudar estoy realizando un proyecto de comunicación con avr's tengo un maestro (atmega 32L) y 4 esclavos (atmegas8)... es la primera vez que trabajo con estos micros.....estuve programandolos en bascom e intente enviar datos de atmega a atmega con el serin y serout pero no funciona.
los requisitos de mi proyecto son:
-usar una interfaz 485
-crear mi propio protocolo para enviar información del estado(comportamiento de sensores y actuadores) de los esclavos al maestro y luego mostrar los datos en una PC, para monitoreo.

Tengo que presentar como adelanto la comunicación por lo menos entre dos micros, realmente estoy preocupada porque no tengo muchos conocimientos acerca de como realizar el trabajo... porfis si alguien puede ayudarme le estaría realmente agradecida....

 
Y para que escuela es?? Pues es tu primer mensaje y pides mucho jejeje, porque no empiezas por poner lo que has hecho, el tema de 232 que es casi lo mismo que 485 ya esta muy platicado, yo te ayudaria pero solo se programar en lenguaje C, bascom no me gusta "por cierto no se como es que basic sigue vivo" porque no utilizas la interfas SPI o TWI ,A si se me pasaba ya descubri cual era el error que tenia con la EEPROM y el TWI, el problema es que la memoria le toma enormes 5ms para grabar y no consistentes en el tiempo de escritura y tiempo de bus libre que deberia ser en total 1.47uS pero no funciona si no le das 5uS, volviendo al tema si te interesas por TWI te puedo ayuda al igual que con SPI, con el USART aun no me he metido ya pronto lo hare,
 
@marlithjdm espero no te enojes....pero no hacemos la tarea en el foro...te recomiendo que leas la hoja de datos de ambos microcontroladores y luego veas como implementar la comunicación rs232 ...RS485 no es un protocolo software ...es un tipo de enlace fisico punto a punto
 
....Hola otravez... que mal de verdad que mi pregunta haya sido mal interpretada... lo unico que queria era informacion de como mas o menos hacerlo porq como ya dije ya he intentado varias cosas y no me funciona y la infomacion que tengo para programar en bascom es limitada.... pero enfin gracias de todas maneras....
 
Atrás
Arriba