# Traduccion o creacion de manual para microcontroladores AVR



## asuryan87 (Ago 21, 2009)

Hola,

Hace unos meses me introduje en los microcontroladores avr y la verdad es que me han encantado, como toda persona que ya haya hecho algo con ellos sabra que prácticamente toda la información esta inglés por eso mi intención es crear un documento que sirva de guia y enseñe los aspectos básicos a todo aquel que quiera probarlos.

Busco voluntarios para crear un equipo con el que nos encargaremos de adquirir experiencia con estos micros y para escribir un libro que nos sirva de manual o traducir algun libro ya existente.


Por favor, comentad aqui aquellos que esten interesados en este proyecto.

Saludos.


----------



## Chico3001 (Ago 21, 2009)

Yo me apunto.....


----------



## microtronic (Ago 24, 2009)

yo me sumo tambien!!!!!


----------



## Meta (Ago 24, 2009)

Por fin alguien empezando con AVR.
Asociación de Robótica y Domótica de España • Ver Tema - El fin de la guerra PIC-AVR.


----------



## jmnlab (Ago 24, 2009)

Yo voy poniendo mis avances con un atmega 1280 en Jmnlab.com .Llevo poco más de un mes con él y no sé mucho pero si os sirve de algo lo que hay ahí pues usadlo, coo fuente estoy usando su datasheet.

Seguire haciendolo hasta cubrir todos los periféricos del arduino mega que necesito conocer para mis proyectos, ahora estoy con pwm, spi y la usart. 

Un saludo.


----------



## mecatrodatos (Ago 24, 2009)

Que tal compañeros subo traduccion del microcontroladores ATmega 32 primer capitulo de nueve comio aporte a la causa


----------



## asuryan87 (Ago 25, 2009)

Hola, gracias por participar, yo tengo la intensión de empezar a crear un manual basado de mi experiencia mas la del resto de participantes y un par de libros.

A mi personalmente me gusta programar en ensamblador pero parece que no muchos comparten mi opinión, ¿que os parece?¿se hace para ensamblador o para C?


----------



## Meta (Ago 25, 2009)

La verdad, antes que nada, leyendo por todas partes de google, la gente prefiere C. Yo uso el ASM en los PIC, todavía no he aprendido C, jejejejeje

¿Cómo ves ASM con AVR? En estos foros recuerdo que me han dicho que es más complicado que los PIC y los códigos son más largos.

Explica una breve instroducción.

A mi me da igual si es en ASM o C.

EDITO:
Como el PDF inficado arriba es bueno para empezar.

Vuelvo a poner estos enlaces para que lo sepan.
*Información general para AVR*

Guia de productos ATMEL *Descarga*

AVR Studio 4.15 *Descarga*

WinAVR compilador GCC (se integra al AVR Studio) *Descarga*

AVRdelayloop *Descarga* 

AVR Baud Rate Calculator 

AVRCalc *Descarga* 

Tutorial assembler para AVR AT90S2313 *Flash* 

Fusibles AVR *CGI*

*Programadores*

 Programador ISP 

 Programador para familia AT89S 

STK200 y PonyProg

*Información y proyectos con ATtiny11*

Registros en ATtiny11 *Descarga*

LED intermitente con ATtiny11 *Descarga*

Tono con ATtiny11 *Descarga*

Motor Paso a Paso con ATtiny11 *Descarga*

INT0 en ATtiny11 *Descarga*

UART con ATtiny11 *Descarga*

*Información y proyectos con AT90S1200*

Curso básico de AT90S1200

LED intermitente con AT90S1200 usando variable *Descarga*

*Información y proyectos con ATmega16*

BCD-7SEG con ATmega16 *Descarga*


----------



## microtronic (Ago 25, 2009)

meta el link del avr studio ya es un poco viejo la ultima version es 4.17 build 666...

aqui hay 9 capitulos traducidos del datasheet del atmega 32...

Capitulo1. Introduccion del ATmega32 (español)


----------



## asuryan87 (Ago 25, 2009)

A mi siempre me gusta aprender tanto el asm como C mas que nada por que asi conozco bien el micro, por eso queria preguntar, total, para los que ya sepan programar en C sabrán adaptarse a gcc y si además prospera el proyecto de pic-gcc, creo que gran parte de los usuarios de los compiladores como ccs o ht-pic se pasarian al software libre que junto con el arm-gcc se podria convertir en el compilador mas usado.  

En caso de escoger asm empezaria con el tiny2313 o el tiny48
Si empezamos con C yo cogeria un atmega 16 o 32 ya que tienen muchos periféricos.

De todas formas tenemos que debatir muchas cosas


----------



## Meta (Ago 25, 2009)

Pues a empezar a debatir.

Claro que me gustaría saber cosas como estas. PIC equivalente a AVR por ejemplo.

¿PIC16F84A a qué equivale a AVR? Ya es obsoleto, ahora es el PIC16F88 como el mejor sustituto y 16F628A para escapar.

Debo aprender muchas cosas de AVR.

PIC16F equivale a:
PIC18F equivale a:
etc...


----------



## Chico3001 (Ago 25, 2009)

Esa es una pregunta con truco por que Atmel no maneja micros de 18 pines , el mas cercano seria el ATTINY261 (461 o 861) que viene en DIP20

Pero en mi opinion el micro "de batalla" de Atmel seria el ATMEGA8 o el ATMEGA48 que vienen en DIP28


----------



## asuryan87 (Ago 25, 2009)

Pues veras, hacer las comparaciones lleva tiempo, me pondre a ello y espero tenerlo pronto, hace tiempo hoy que el 16f84 equivale al at90s1200 ya que son de los primeros y por tanto lo modelos mas anticuados. 

Mientras tanto, puedes comprobar todo lo que atmel ofrece bajando la tech library en la que puedes encontrar la documentación técnica de todos los modelos, descripción de cada gama(4bits 8bits, 32bits,) y cada arquitectura que usan(basada en el 8085,avr y arm) también estan los enlaces de paginas donde informaciónrmarte y descargarte avrstudio, distintos compiladores C etc.

AVR Technical Library Download Page

Buscaré tambien información de un artículo que lei en "resistor" que hablaba de un nuevo modelo de micros de atmel con 6 pines, alto rendimiento e infimo consumo que pintan muy bien.

P.D. Parezco un vendedor


----------



## asuryan87 (Ago 25, 2009)

Esta es la primera comparativa entre el *16f84* y el *90s1200*


*No. de instrucciones*
AVR: 89 PIC: 35

*Registros de trabajo*
AVR: 32  PIC: 1 

*Velocidad*
AVR: 12MIPS (12MHz) PIC: 20MHz  donde  un c/inst. es igual a  4 ciclos de reloj

*RAM*
AVR:-  PIC: 68b 

*ROM(flash)*
AVR: 1kb  PIC:1kb

*EEPROM*
AVR: 64b PIC: 64b

*Pines I/O*
AVR: 15  PIC: 13 

*Temporizador*
AVR: 1 de 8bit (preescalador desde CK hasta CK/1024) PIC: 1 de 8 bit (preescalador desde 1:2 hasta 1:256)

*Comparador analógico *
AVR: 1 PIC: -

*WTD*
AVR: si PIC: si

*Oscilador interno*
AVR: si PIC: si

*Niveles de pila (STACK)*
AVR: 3  PIC: 8

*Interrupciones*
AVR:5 PIC:4                                                                                                                                    *
Tensiones*
AVR: 2v-6V  PIC: 4V-5.5V


En mi opinión no ésta no tiene mucho interes por que ambos estan en desuso el 90s1200 nisiquiera aparece en el catalogo de atmel.

P.D. Incluyo el link de la noticia de los micros de 6 pines que dije antes
http://eurofach.es/es/node/318


----------



## microtronic (Ago 25, 2009)

vamos amigos lo que si seria bueno es que no se vuelva otra sucursal de pic vs avr...eso ya esta muy discutido....aquellos que quieran ingresar al mundo avr pues bien.....los que no sepan cual micro elegir diriganse al otro foro avr vs pic...aqui tratemos de llevar puro avr..


----------



## Meta (Ago 25, 2009)

NOTA:
REcuerda que ya sacaron la gama media 16F con el nuevo núcleo ya con 49 Instrucciones, 16 Stack, 32 bancos de memoria, más RAM, etc. Me la juego que los 18F en el futuro cambiarán también de núcleo. 

Con esto ya Atmel harán algo, un AVR de los buenos, no se quedarán atrás.

De todas formas, tanto un que con otro, al final hacen lo mismo. Activar y desactivar salidas, etc...

Sea como sea los AVR, si hay libros en español o tutoriales para empezar mejor que mejor.


----------



## cristian_elect (Ago 25, 2009)

yo probe que un atmega8 supera en velocidad de calculos en operaciones de variables float a un pic18 parecido con la misma velocidad del nucleo en 50% y su tamaño de codigo le cuesta al atmega un 45% menos que el pic. Y eso que los atmega son contemporaneos de los pic16.
Los compiladores que use son  le CCS y el codevisionavr.


----------



## Meta (Ago 25, 2009)

En este mismo foro, hará ya un año, me comentaron que AVR en ensamblador es más complejo y usa más código.  Por Internet, PIC se dice mucho en tutoriales que es muy semcillo de programar...

¿En qué quedamos?

Mira que no se nada de AVR y PIC soy un aprendiz.


----------



## asuryan87 (Ago 26, 2009)

Microtronic tiene razon, este no es el lugar apropiado para debatir y comparar los pic y los avr.

Si quereis se puede hacer en  avr vs pic o en otro pero aqui estamos intentando decidir como hacer un libro en castellano sobre avr.


P.D. Los 18F no se modificaran porque los 16F han cambiado de nucleo para adaptarse a los 18F.


----------



## asuryan87 (Ago 26, 2009)

Volviendo al tema, habia pensado en varios modelos para empezar con avr.

*tiny2313*:  18 pines  I/O, 120 instrucciones, 2Kb Flash, 128 EEPROM, 128 SRAM, 1 Temporizador de 8b y otro de 16b, 4 canales de PWM,1 USI, 1 USART y 1 comparador analógico.

*tiny48:*  24 pines I/O, 123 instrucciones, 4Kb flash, 64b EEPROM, 256 SRAM, 1 timer de  bits y otro de 16 con moculo de de captura y comparacion 6 canales ADC 10bits, SPI, TWI(I2C), 3 modos sleep.




Otra opcion seria empezar directamente con la seria mega.¿que opinais?


----------



## microtronic (Ago 26, 2009)

asuryan87 creo que seria mejor como empezar con el atmega8 o el atmega88 que son los mas populares y mas comerciales que los tiny

META.... mire amigo eso ya lo as escrito muchas veces que un micro sea mas facil de programar o que tenga menos instrucciones o mas instrucione esto no lo hace mas rapido lo que se diferencia del pic es que el avr es multiacumulador y se presta mas para compiladores en c y otras caracteristicas que no viene ya al caso explicarlas.....por favor meta mo incluyas ms en este tema cosas de PIC´s...

pd...este es un tema para hablar solo de ATMEL "AVR"...no cual es mejor...

saludos


----------



## asuryan87 (Ago 26, 2009)

me parece bien, yo tengo varios programas hechos con gcc para el atmega32 asi que la portabilidad es directa. Aunque a mi me sigue gustando la idea del asm aunque sean 130 instruccriones


----------



## Meta (Ago 26, 2009)

asuryan87 dijo:


> me parece bien, yo tengo varios programas hechos con gcc para el atmega32 asi que la portabilidad es directa. Aunque a mi me sigue gustando la idea del asm aunque sean 130 instruccriones



¿Por qué tienes esa idea del ASM? Bastante las tengo con el Microcontrolador PIC16F84. Desarrollo de proyectos. Editorial Ra-Ma EJEJEJEJ

Si el asm del AVR es mejor que entiendes y te sientes capaz de realizarlo aunque sean 459 instrucciones. Adelante...

Es bueno aprender ASM para entender bien el uC.


----------



## asuryan87 (Ago 26, 2009)

Soy meticuloso y me gusta llevar un control de cada cosa que pasa, ademas de que ayuda a no cometer fallos en C. Los novatos sienten pánico cuando se les habla de asm pero lo unico complicado es que has de usar un poco mas la imaginacion.

Una ventaja de tener tantas instrucciones de asm e que a la fuerza, muchas serán complementarias.

P.D. yo tambien aprendi con ese libro y me lo pulí en clase en 3 meses y no exagero, eran exigencias del profesor jeje


----------



## Meta (Ago 26, 2009)

Sienten pánico porque se sienten incapaz de aprenderlo. Me ha pasado eso y cada día se aprende cosas. Sólo con un buen libro a su idioma como el que nombré, se hacen maravillas en ASM.

Falta ASM en AVR. No lose, pero si sacas un libro en ensamblador de AVR, serías pionero, sobre todo si es de muchas prácticas como el de Ra-Ma. Si ese libro en ASM o C sale en español, soy el primero en comprarlo.


----------



## Belgi (Ago 26, 2009)

Que Tal El Manual Del AT90S8515 En Castellano Por- Ivan Trueba 
Para Empezar A Leer

Y Este Manual Del Manejo Del AvrStudio Para Empezar 
Con Esto Ya Tenemos Una Buena Base Para Estudiar El Avr 
Lo E Subido A Una Pagina Rapidshare 
Ya Que No Me Dejaba Subirlo El Foro Por Que Excedia Su Tamaño 



El archivo se ha guardado y podra ser descargado 10 veces


----------



## Meta (Ago 26, 2009)

Gracias puntalillo. La casualidad que no te aparece como 1 visitas si lo he descargado varias veces, siempre está 0. ¿ERROR del foro?

Aún así, gracias por el PDF.

EDITO:
Si se puede, a cachos con Winrar. Como se que ese servidor se caduca, lo pongo en el foro en dos partes.

Gracias de nuevos por los datos, para empezar está muy que biennnnnnn.

Al final, con un sólo archivo de winrar vale, sólo hay que comprimirlo al máximo y ya está, el mismo archivo con menos peso.


----------



## Belgi (Ago 26, 2009)

A Ver Subo A Rapidshare Tambien El Manual De Ivan Treuba AT90S8515 En Castellano  Porque Veo que Me Da Error Al Querer Bajarlo 



No Sé Porque Me da Este Error


----------



## Meta (Ago 26, 2009)

Lo puedo descargar con el error.


----------



## Belgi (Ago 26, 2009)

A Ver El Manejo Del Avr Studio por elfenix con Fotos.rar 
(819,1 KB (Kilobytes), 0 visitas)
Lo E Podido Descargar Correctamente 
Dime Si Puedes descargarte El Otro Sin Error 

 | 538 KB

Edito: Bien Ya Se Pueden Descargar Los Dos Archivos 

Archivos Adjuntos 
Escritorio.part1.rar (900,0 KB (Kilobytes), 0 visitas) 
Escritorio.part2.rar (445,2 KB (Kilobytes), 0 visitas) 

Solucionnado El Problema 
Gracias


----------



## Meta (Ago 26, 2009)

Te da error pero lo puedo descargar.

Arriba, los puse otra vez el enlace en dos partes pero está los dus tutos juntos.


----------



## elaficionado (Ago 26, 2009)

Hola.
Aquí les dejo esto.

Chao.
elaficionado.


----------



## asuryan87 (Ago 26, 2009)

Gracias por el aporte pero te has colado, aqui estamos hablando de AVR no de PIC.


Por favor evitad de comentar nada en relacion con los pic, compararlos con los avr ni pedirlo.
Este tema esta hecho para aquellos que sepan sobre AVR e interesados en colaborar para la creación de un tutorial o libro en español para AVR.

Gracias


----------



## Meta (Ago 26, 2009)

elaficionado, aquí hay algo de información.

https://www.forosdeelectronica.com/...nual-microcontroladores-avr-23286/#post194537

Saludo.


----------



## jmnlab (Ago 26, 2009)

Yo creo que el manual/libro puede comenzar con un ATMEGA 16, sería el equivalente al 18f que buscáis en pic (18f452, pin a pin con el 16f877), son de los que mas se ha escrito.

El lenguaje debe ser C ya que es lo que usa la mayoría, además cuando el código es largo no queda más remedio que programar en C sobretodo por la opciones de optimización del compilador que probablemente proporcione un código mejor que el que se obtendría si se escribe en asm por un programador medio cuando el programa es largo. 

Y ASM sólo usarlo para las partes críticas de tiempos.

ASM está muy bien para conocer el microcontrolador, pero muchos usuarios no tienen la necesidad de conocerlo para realizar sus proyectos.

El esquema a seguir es el del libro de RA-MA pero capítulos más extensos, aquí no hay límite de páginas.

Supongo que hacer un manual de este estilo va a ser un trabajo muy largo.



asuryan87 dijo:


> P.D. yo tambien aprendi con ese libro y me lo pulí en clase en 3 meses y no exagero, eran exigencias del profesor jeje



Si no te importa que te pregunte y sólo por curiosidad ya que me parece uno de los mejores libros que hay en español sobre micros, ¿en qué asignatura y en qué estudios te exigieron usar ese libro?

Gracias


----------



## asuryan87 (Ago 26, 2009)

jmnlab dijo:


> Si no te importa que te pregunte y sólo por curiosidad ya que me parece uno de los mejores libros que hay en español sobre micros, ¿en qué asignatura y en qué estudios te exigieron usar ese libro?
> 
> Gracias



Fue en un CFGS "Desarrollo de Productos Electronicos", la asignatura se llama "Lógica digital y microprogramable". Donde yo estudié se hace enfasis en el desarrollo de aplicaciones basadas en microprocesadores, y he hecho unos cuantos proyectos de dificultad media y alta tanto en asm como en C, (algunos pasan como proyectos de fin de carrera) aunque en otros sitios no lo tocan mucho segun me han contado gente de otras partes de españa.


----------



## Meta (Ago 26, 2009)

Si ese libro/manual al estilo del "Desarrollo de proyectos", recordar que primero te habla mucho de la arquitectura del microcontrolador, después el manejo de las instrucciones y cuando ya tengas las instrucciones, se empieza con periféricos, sea sensor de temperatura, LCD, motores pap, etc...

La verdad, es el mejor libro es español que he visto en ensamblador, en C no tengo idea y entre los dos mucha gente lo considera el mejor.

Hacer un libro/manual requiere tiempo que se consigue con el tiempo. Cuando te  des cuenta, el tiempo pasa volando y se ha hecho mucho. A animarse, suerte a tod@s.


----------



## asuryan87 (Ago 26, 2009)

nos volvemos a desviar del tema por favor, estas cosas en otro sitio a parte. o tendremos que cerrar este tema y hacer otro


----------



## Chico3001 (Ago 26, 2009)

Por que no vamos subiendo algunos ejemplos basicos en C para AVR? asi la gente va aprendiendo sobre la marcha, en lo personal se me hace mas instructivo de esa manera....


----------



## asuryan87 (Ago 26, 2009)

Esta bien, aqui tienes lo primero que hice con gcc, no es ni mucho menos la mejor forma de hacerlo ya que lo hice por probar algunas instrucciones, en este caso "switch".
Es un contador ascendente descendente mostrando un numero del 0 al 9 en un display bcd 7-segmentos controlado por dos pulsadores.

En el proximo post mostraré las diferentes formas de gestionar los pines I/O y cual de ellas es la más eficiente.

P.D. incluye el archivo .c y el circuito para que lo probeis en proteus, la versión es la 7.5 sp3


----------



## Meta (Ago 26, 2009)

Está bueno el entrenador. Por casualidad. ¿Puedes incluir también el .hex? Yo de GCC no entiendo nada.


----------



## asuryan87 (Ago 26, 2009)

Se me ha olvidado decir algo importante,  la configuracion de los puertos como entrada o salida se hace justo al contrario que en los pic

DDRB=0xFE  o dicho de otra forma DDRB=0x11111110  significa que el pin 0 del PORTB es de entrada y el resto de salida.


Ahi tienes el hex, el programa esta comprado asi que no deberia fallar


----------



## Meta (Ago 26, 2009)

Pues si es importante. Pues los PIc son así para no olvidar.

esta idea no se olvida nadie.

*0* = *O*ut
*1* = *I*n


----------



## asuryan87 (Ago 26, 2009)

piensa en 0 como un agujero por el que entran los datos y el 1 como en una flecha que lanza los datos quizas te ayude


----------



## Meta (Ago 26, 2009)

Se entiende, se entiende ejejejejej

Por cierto, ya me funciona el circuito. Los voy a guardar todos los que publiques. Poco a poco a coger ideas. He visto que en WinPic800 está el AT90S2313.

*Si van a subir archivos grandes. Que sepan que pueden subirlo desde SkyDrive que es lo mismo que vuestras cuentas de Hotmail 

Puedes subir cada archivo a 50MB, lo mejor de todo que no se caduca como RapidShared, MegaLoad, etc...
*


----------



## mecatrodatos (Ago 26, 2009)

Que tal amigos siguiendo la sugerencia de nuestro moderador les dejo primer proyecto en microcontrolador avr  ATmega 16 he aqui el codigo fuente en C :


```
/*****************************************************
Projecto 1 :
Secuenciador de luz por el puerto D , donde se encienden consecutivamente
leds ubicados en el pueto D del chip Atmega16 de derecha a izquierda y viceversa
Autor  : Mecatrodatos
microcontrolador : ATmega16
Oscilador Externo : 4.000000 MHz
*****************************************************/

#include<mega16.h>
#include<delay.h>
#define xtal 4000000

int i;

void main (void)
{
    
    DDRD = 0xFF;
    
    while(1)
    {
    
        for(i = 1; i <= 128; i = i*2)
        {
            PORTD = i;
            delay_ms(100);
        }    
            
        for(i = 128; i > 1; i = i/2)
        {
            PORTD = i;
            delay_ms(100);
        }    
        
    }
    
}
```


Dejo simulacion en proteus 7.5, codigo fuente en C , y .hex en archivo adjunto espero sea de utilidad.


----------



## Belgi (Ago 27, 2009)

*la configuracion de los puertos*

Los registros DDRA, DDRB, DDRC y DDRD, son los registros de Dirección de Datos y sirven
para configurar cada pin del puerto DDRx Sirve para decir que patitas son de entrada o salida
como entrada (con el valor 0) 
como salida (con el valor 1).

Los registros PORTA, PORTB, PORTC y PORTD, son los registros de SALIDA/Modo Eléctrico y
cada bit esta asociados a un pin del puerto. 

Si el bit del puerto está configurado como salida en DDRA, DDRB, DDRC o DDRC, lo que sea escrito en el bit equivalente de 
colocará en el pin asociado PORTA, PORTB, PORTC o PORTD (ya sea 1 o sea 0), se 
colocará en el pin asociado del puerto correspondiente (5 Vcc ó 0 Vcc).

Si el bit está configurado como entrada,entonces el bit de este registro nos permite configurar el modo de
funcionamiento “eléctrico” del bit (0 sería Alta Impedancia, y 1 sería Resistencia al positivo).

cada pin de cada puerto posee una resistencia de pull-up activable
poniendo el pin en question en entrada (Registro DDRx)
y poniendo a nivel logico a 1 (PORTx)

ejemplo:

DDRA = 10101010 = Sirve para decir que patitas son de entrada o salida
PORTA = 11111111

la resistencia de pull-up estan activadas en los pins 0,2,4,6 del puerto 
los otros pins estan como salidas y a nivel alto 
Si el pin esta DDRx configurado como entrada entonces el bit de este registro 
activa la resistencia de pull-up(1) o no (0).

Por ejemplo
DDRA = 0110 1111
PORTA = 1010 0110

Analizando los bits de izquierda a derecha tenemos:
• Bit 7: entrada con resistencia al positivo.
• Bit 6: salida a nivel 0 (0 Vcc)
• Bit 5: salida a nivel 1 (5 Vcc)
• Bit 4: entrada con alta impedancia.
• Bit 3: salida con nivel 0 (0 Vcc)
• Bit 2: salida con nivel 1 (5 Vcc)
• Bit 1: salida con nivel 1 (5 Vcc)
• Bit 0: salida con nivel 0 (0 Vcc)

```
Récapitulando
DDRx  PORTx  Entrada/Salida  Resistencia    Description
                             de pull-up 
 
0      0          Entrada     NO        el pin esta en entrada con alta impedancia  
0      1          Entrada     SI        el pin esta en entrada con resistencia al positivo  
 
1      0          Salida      NO        el pin esta en salida y con nivel 0  
1      1          Salida      NO        el pin esta en salida y con nivel 1
```
Los registros PINA, PINB, PINC y PIND son los registros de entrada.
Sus bits están asociados a los pins de los puertos, de tal manera que lo que se lea de estos
registros será el estado de los pins del puerto, que están configurados como entrada en los
correspondientes registros DDRA, DDRB, DDRC y DDRD.

Aqui Un Ejemplo Para Simular Con El AvrStudio En Asm 


```
;------------------------------------------------------ 
; Los Puertos :Sumar Dos Numeros : Sumar 15+2
;             :Transmitirlo Al Exterior" Por El Puerto B
;------------------------------------------------------ 
; Declaraciones estandar para este micro AT90S8515: 
 .include "8515def.inc" 
;----------------------------------------------------------- 
; Definicion de constantes y variables 
;-----------------------------------------------------------
; Pila
  .equ          PILA                   =0x0FF 
;-----------------------------------------------------            
.DSEG        
; MEMORIA RAM        
     .ORG                (PILA+1) 
;---------------------------------------------------- 
;            Vectores de interrupcion 
;----------------------------------------------------            
 .CSEG        
    .ORG     0x0000         
 rjmp        RESET                        ; RESET 
; -------------------------------------------------------- 
;                       RUTINA DE RESET 
; -------------------------------------------------------- 
RESET:  cli
        ldi        r16,HIGH ( PILA )         
 out        SPH,r16         
 ldi        r16,LOW (PILA )                          
 out        SPL,r16         
;*******DESDE AQUÍ VUESTRO CODIGO*****
ldi     r18,0x15  ; carga  00010101  0= Entrada 1=Salida
out     0x18,r18 ; r18 es enviado a PortB (Configura Salida Datos De Puerto.B) 
ldi     r17,0x02  ; carga  00000010 0= Entrada 1=Salida
out     0x17,r17  ; r17 es enviado a DdrB (Configura Salida De Direcion Puerto.B)  
add     r18,r17   ; carga  00010101 + 00000010 Suma Los 2 Registros
 
out     0x18,r18  ; salida de datos Por El puerto.B 
rjmp stop
;****HASTA AQUÍ VUESTRO CODIGO******** 
STOP:        rjmp        STOP   ;FIN DEL PROGRAMA
```


----------



## asuryan87 (Ago 27, 2009)

Como comlemento a la explicación de Belgi subo este archivo pdf en el que explico como se configuran y además unas técnicas básicas para su programación

Saludos



Meta dijo:


> Por cierto, ya me funciona el circuito. Los voy a guardar todos los que publiques. Poco a poco a coger ideas. He visto que en WinPic800 está el AT90S2313.



Winpic800 es un programa muy completo con el que grabar tanto pics como avr y también memorias. Como muchos de nosotros ya programamos pics seria interesante hacerse con uno de estos para poder programar ambos con este progamador
WinPic800 - GTP-USB [ plus ]

¿Que os parece? Lo de winpic me dijeron que funciona tambien en vista


----------



## microtronic (Ago 27, 2009)

GTP USB plus es pago...no es gratuito es trendo programador pero no es libre.....ademas solo tiene algunos avr no la mayoria....por ejemplo no tiene el atmega 1280 tampoco el atmega328 entre otros....

Amigos para avr creo que lo mejor para comenzar es adquirir una placa arduino....yo ando con ganas de comprarme la arduino mega....

programadores tenemos..
http://dybkowski.net/elka/ispprog_en.html ISP PROG
http://www.fischl.de/usbasp/  usbasp

saludos


----------



## Meta (Ago 27, 2009)

Buenas:

En vez de quejarse, a buscar solución. Para ello hay que moverse, si no nos movemos no avansamos, así es la vida.

Ya he comentado esto en WinPic800 - ¿Puedes meter más periféricos? - Foros

A ver si al final nos hacen caso, si no lo avisamos no se entera.


----------



## microtronic (Ago 27, 2009)

calma meta tu eres como *hiperactivo... 
*


----------



## asuryan87 (Ago 27, 2009)

jeje es verdad, los de winpic sacaron hace pocos meses la ultima version y los modelos mas importantes se pueden programar, total cuantos modelos necesitas? 100?


----------



## microtronic (Ago 27, 2009)

lo que pasa es que sisco segun yo se el es el diseñador y autor del hardware y software del mismo winpic800 y gtp plus....generalemente el proyecto nacio a la idea de hacer un porgramador de pic usb...el cual fue creciendo y se le fueron incorporando mas micros...pero si no estoy equibocado el proyecto esta basado mas que todo es a porgramar PICs no avr...los avr estan hay como opciones...mas no creoq ue sea el fuerte de el proyecto....
unque no esta de mas que le icluya mas micros avr....

los del atmega 328p es porque es el que se consigue por estos lares junto con el atmega 32, 16 y el 1280 para las aurduino junto con el 168


----------



## Meta (Ago 27, 2009)

Sisco me ha dicho que la idea de WinPic800 es programar muchos dispositivos hasta los motorola que aún no ha hecho por ahora. Me lo dijo antes de que aparecieran los PIC32.

Parece que si se actualizarán más AVR con el tiempo, al menos los más usados. Mientras...

...seguimos con información de AVR.

Si que es viejo el ATMEL. http://es.wikipedia.org/wiki/Atmel Hay otras curiosidades en http://es.wikipedia.org/wiki/AVR




EDITO:

** Sugerencia: *

Veo que unos quieren hacer ASM, otros bajo C. Por lo que veo van a doptar el C. Mi sugerencia es hacer una pequeña introducción desde el principio del libro como mover registros, datos a la RAM, incrementar valores, restar datos, preparar entradas y salidas, un largo etc. Está bien para conocer algo del microcontrolador de AVR por dentro paso a paso. No digo que se haga como el www.pic16f84a.org que es muy largo, si algo para tener conocimientos y se aprende mucho.

Después será todo en C. Ahora a ponerse de acuerdo qué se va hacer realmente.

*PD: No se olvide del SkyDrive de hotmail para subir archivos de 50MB cada uno cuando empiecen a subir archivos. Os dejo un ejemplo de uno de 22MB en PDF.

Manual Visual C#:

Descargar

Salu2.


----------



## asuryan87 (Ago 27, 2009)

Yo sigo partidario del asm pero lo haré con el tiny2313 o el tiny48 seguramente con el segundo que esta muy completo.

C siempre es el lenguaje preferido por todos pero siempre hay que empezar desde abajo total en C hacer rutinas para i2c, o una lcd no tiene tanto merito.


----------



## Meta (Ago 27, 2009)

asuryan87 dijo:


> Yo sigo partidario del asm pero lo haré con el tiny2313 o el tiny48 seguramente con el segundo que esta muy completo.
> 
> *También soy de esos.*
> 
> ...



*Como había dicho antes, un poco de ensamblador no viene mal, luego se centrarán en C.*


----------



## asuryan87 (Ago 28, 2009)

Por eso decia de empezar con asm, empezar con C es como empezar a leer un libro por la mitad


----------



## Meta (Ago 28, 2009)

Por lo que veo puedes empezar, claro que primero debes.


1-. Planificar.
2-. Organizar.
_3-. Diseño de la  Interfaz.
4-. Programación._

Luego ya harás un índice temporal de lo que vas hacer con el ensamblador. Una vez elegido el datasheet del AVR, publicarlo por aquí para ver su arquitectura interna. Ya me encargaré de meter una imagen del PDF por aquí.

Todavían ya pueden poner ejemplos, si quieres pueden  hacer los mismos ejemplos del Microcontrolador PIC16F84. Desarrollo de proyectos. Editorial Ra-Ma para guiarse y no perder mucho el tiempo mientras se hace bien. Tengo ganas de ver el ensamblador.

Ánimo a tod@s.


----------



## asuryan87 (Ago 28, 2009)

Tranqui si ya tengo pensado como hacerlo. aunque el libro del 16f84 tiene ejemplos un poco obsoletos asi que intentare hacer una version mas moderna o sustituirlos.

P.D. A partir del dia 2 estare sin conectarme casi 1 mes asi que intentaré subir un ultimo ejemplo en C de como usar una lcd 2X16 + la biblioteca, la encontre hace tiempo y tiene un manual de uso bastante extenso, tengo traducido la mitad asi que intentare ternerlo listo antes del lunes ademas de esto subiré un ejemplo de uso de interrupciones externas, solo necesito comentarlo y listo.


----------



## Meta (Ago 28, 2009)

Ok.

¿Qué compilador van a usar al final tanto a C como en ASM para saberlo? Por curiosidad quiero ver como es, hace cerca del año lo instalé pero no se usar nada de él. Suerte con traducir el manual que dices.

Mira las opiniones de otros por aquí.

Ya pueden dejar claro que AVR van a usar para todo el manual/libro.






PD: _¿Dime qué ejemplos tiene obsoleto del libro y por qué? Por ahora estoy aprendiendo con ese libro mucha cosas y es el mejor libro que he visto sobre ASM para PIC. Lo que veo obsoleto es algunos proyectos como el SAA1064, en ADC, DAC, sólo proyectos, no la programación. Se que ya están los nuevos núcleos ya mejorados de los 16F que puedes ver aquí._


----------



## microtronic (Ago 28, 2009)

META... como ya se ah dicho....para C se va a utilizar AVRGCC "WINAVR" en windows que se integra a la perfeccion con el AVRSTUDIO... para ensamblador pues ovbiamente el AVRSTUDIO..


----------



## Meta (Ago 28, 2009)

Buenas:

Descargar WinAVR.

Descargar aquí en AVRSTUDIO

*Descargar* Tutorial AVR

Saludo.


----------



## asuryan87 (Ago 28, 2009)

Como dije aqui tengo el ejemplo de las interrupciones, las instrucciones estan en el archivo.c. Es sencillo pero funcional, siguiendo las indicaciones de este ejemplo se puede usar para otros cometidos, como la del generar la interrupción para leer un teclado 4x4 que subiré mas adelante.

El archivo incluye el esquema en proteus 7.5 sp3, archivo .c y .hex

Aqui teneis un esquema de un circuito para la lectura de un teclado con interrupción


----------



## cristian_elect (Ago 28, 2009)

Yo no uso mucho winavr por al crear funciones no me reconoce las variables y salta a la siguiente linea.
Solamente lo realiza bien si declaro a las variables como volatile, ese tipo de variables generalmente se usa en interrupciones.


----------



## microtronic (Ago 28, 2009)

cristian.. que compilador para avr utilizas mas " codevison avr, iccv7, iar avr???


----------



## asuryan87 (Ago 29, 2009)

cristian_elect dijo:


> Yo no uso mucho winavr por al crear funciones no me reconoce las variables y salta a la siguiente linea.
> Solamente lo realiza bien si declaro a las variables como volatile, ese tipo de variables generalmente se usa en interrupciones.



Pues no entiendo por que te ocurre eso, en ese aspecto jamas he tenido ese problema con winavr. quezas es algo que haces mal.


----------



## Meta (Ago 29, 2009)

Buenas:

¿Pueden hacer un minituto con capturas en Word de WinAVR sobre configuración, seleccionar un AVR y el botón de compilar?

Es fácil, pulsa en el teclado "Alt+Impr PetSis" para capturar la ventana de WinAVR. Luego lo pegas en el Word con "Control + V". De esa manera muy rápido. Ya me encargaré de mejorarlo a mi manera y pasarlo a pdf.

Salu2.


----------



## cristian_elect (Ago 29, 2009)

Yo mas uso el iar para avr por que es que mejor performance tiene.
@asuryan87 manda un ejemplo con fuciones extras echas por ti mismo en win avr por que a mi no me sale se salta.


----------



## asuryan87 (Ago 29, 2009)

ok, pero puedes especificar un poco con tu problema es que no lo acabo de entender


----------



## Chico3001 (Ago 29, 2009)

cristian_elect dijo:


> Yo no uso mucho winavr por al crear funciones no me reconoce las variables y salta a la siguiente linea.
> Solamente lo realiza bien si declaro a las variables como volatile, ese tipo de variables generalmente se usa en interrupciones.



El WinAVR siempre esta tratando de dejar el menor codigo posible.... si la variable no esta declarada como volatile y el compilador detecta que no se esta modificando el valor entonces asume que no es necesaria en esa parte del programa y la elimina automaticamente....


----------



## microtronic (Ago 30, 2009)

aqui hay información que exlican sobre las interrupciones y tambien dicen sobre declarar las variables como no volatiles

climber's información on AVR programming - Interrupts


----------



## cristian_elect (Ago 31, 2009)

En este simple ejemplo me sucede que retardo no existe. Optimizado en zize.
En cualquier otro compilador que use para avr optimizado en zize si lo toma en cuenta la función retardo.



```
#include <avr/io.h>

void retardo(unsigned int a){
 while(a--);
  }


int main(void){

PORTB= 0;
DDRB= 0x0f;
 while(1){
 PORTB= 0;
 retardo(5000);
 PORTB= 15;
 retardo(5000);
 }
return 0;
}
```


----------



## asuryan87 (Ago 31, 2009)

hola, 
y dices que no tiene en cuenta la funcion retardo??
 yo he probado  a compilarlo con avrwin en avrstudio y funciona de maravilla


----------



## Meta (Ago 31, 2009)

Una curiosidad. ¿El C de PIC se parece al C de AVR?


----------



## cristian_elect (Ago 31, 2009)

pasame el proyecto que probaste en *.rar para ver la configuracion.


----------



## asuryan87 (Ago 31, 2009)

Toma te envio el projecto entero y con esquema de proteus.


P.D. prometi subir la libreria traducisa para el manejo de una ldc 2x16 pero no me ha dado tiempo a traducir todo, a finales de septiembre la subire


----------



## Chico3001 (Ago 31, 2009)

Meta dijo:


> Una curiosidad. ¿El C de PIC se parece al C de AVR?



La verdad no he usado C de PIC, pero si ambos son ANSI entonces si deberian ser iguales y en teoria solo se tiene que cambiar las librerias para poder cambiar de procesador.... 

Obvio... la teoria nunca aplico a la practica


----------



## cristian_elect (Ago 31, 2009)

Si te das cuenta la funcion retardo  solo toma menos de un useg y lo salta en la simulacion.
Te doy este ejemplo que me diste pero agregado lo que e echo en IAR optimizado en zize.


----------



## Moyano Jonathan (Sep 1, 2009)

Meta el compilador que más se acerca al C para AVR es C18 y C32 de microchip, los demás como el C de CCS no es C standar.


----------



## asuryan87 (Sep 12, 2009)

Hola, ya estoy de vuelta, veo que no ha habido mucha actividad.

Bueno, aqui esta el manual y la biblioteca para usar una LCD 16x2


----------



## cristian_elect (Sep 12, 2009)

Del ejemplo viste como lo salta tengo que poner las varibles como volatile para que lo tome en cuenta eso solo me pasa el winavr. El compilador atmanavr tiene un generador de codigo de inicio para el winavr algo parecido al codevisionavr.
Con lcd, serial, adc y mas configuraciones incluidas.


----------



## asuryan87 (Sep 12, 2009)

Desde luego el atman esta muy bien aunque no he tenido la oportunidad de usarlo mas que nada por no comprarlo, aunque por ahora el winavr va perfectamente. Por lo que parece la portabilidad atman winavr es muy sencilla.


----------



## zefepb (Oct 28, 2009)

Que tal comunida...

Hace tiempo que empece a programar microcontroladores AVR, y bueno, me parecen fantasticos, pero ese no es el tema.

Se por experiencia propia que no es facil calcular los fusibles de un AVR, asi que investigando un poco y con ayuda del profesor David Infante, escribi este tutorial que espero les sea de mucha utilidad a todos los amantes de estos microcontroladores.​ 
Esto lo hago como una forma de agradecer a este foro, y a la comunidad, las ocaciones en que me han ayudado.​


----------



## Moyano Jonathan (Oct 28, 2009)

Exelente aporte se merece el destacado !! Muy bueno para los que comenzamos en el mundo de los AVR.


----------



## zefepb (Oct 28, 2009)

Que tal comunidad...

Bueno... quiero compartir con ustedes este pequeño tutorial que hice despues de tanto investigar como controlar una pantalla LCD de 16x2, y finalmente lo logre, utilizando un microcontrolador ATMEGA8535, el codigo que controla la pantalla, esta escrito en ASM y en C++, espro les sea de utilidad.


----------



## Chico3001 (Oct 29, 2009)

Uni los temas con otro que habla de lo mismo para que sea mas facil encontrar este tipo de archivos

Gracias por tu ayuda.......


----------



## Hernan83 (Oct 29, 2009)

Muy buena la idea,me sumo en lo que pueda....


----------



## cristian_elect (Nov 6, 2009)

Hay consegui un manual del atmega164p en español completo se encuentra en este link.
http://www.taringa.net/posts/ebooks-tutoriales/2223584/Manual-Atmega164p-espanol.html


----------



## peluzo (Nov 12, 2009)

hola a todos aprovechando esto, quisiera inciarme en el mundo de los avr solo que no se por donde empezar podrianayuudarme por donde empezar y que gama de atmel seria la mas sencilla gracias


----------



## Moyano Jonathan (Nov 12, 2009)

Lo mejor sería empezar por conseguir toda la info que sea posible de estos micros ( no hay mucha en español ). Hay comunidades como AVRfreak.net que es lo mejor y más completo que hay de estos micros en inglés. Ahi vas a encontrar todo lo necesario para empezar, después te podrías ir armando algún programador ya sea por USB,PARALELO,SERIE,etc....que podés encontrar en la red
Luego de esto armar alguna placa de pruebas tipo arduino con un ATmega8 que es muy utilizado por los que recién comienzan...
Para programar podrías a empezar a aprender ASM del AVR o C y bajarte el IDE AVRstudio y el WINAVR para programar..
Un saludo !!


----------



## asuryan87 (Dic 3, 2009)

hacia tiempo que no pasaba por aqui, he estado ocupado pero he seguido buscando, recopilando y creando tutoriales e informacion.

esto lo encontre hace algun tiempo, es el data sheet del atmega32 en castellano

No esta completo pero puede ayudar bastante.


----------



## Meta (Dic 3, 2009)

Muchas gracias, pequeños cúmulos de aportes se convierte en grande...


----------



## cbr2510 (Dic 14, 2009)

Yo me apunto,, ya era hora      

No es muy extenso,, pero es un buen inicio  :estudiando:


----------



## Perrotron (Feb 23, 2010)

Hola!!! No se si este tema ya se termino, pero aquí dejo un manual que realmente te lleva de la mano,es de un curso que tome. Yo empece con ASM y siempre me gusto mucho pero ahora con esta forma de programar en C es mas sencillo aun que se ocupa mas espacio en memoria, Tambien tengo un codigo que generé alguna vez para manejar una LCD Gráfica de 128X64, TWI, y configuraciones maestro-esclavo , pero están en ensamblador.


----------



## StrySG (Mar 13, 2010)

Muchas gracias -a todos- por los manuales aqui encontre mas ayuda que googleando para encontrar manuales y tutoriales de AVR, especialmente a -*asuryan87*- me han ayudado muchos las hojas que dejaste especialmente por que estan en español, pero no estan completas no soy nadie para exijir algo aqui, pero me encantaria que termines de publicar las partes que faltan de la hoja de datos del Atmega 32...

Si las tienes por supuesto... o a cualquiera que las tenga-


----------



## asuryan87 (Mar 16, 2010)

Hola, hacia mucho tiempo que escribia por aqui, 

Veras StrySG la persona que colgo eso solo ha publicado 9 capitulos, los  que hacen referencia al manejos de las partes mas importantes del micro  por lo que si quieres algo en concreto siempre se puede intentar  traducir entre unos cuantos.

Yo por desgracia estoy muy saturado con mi actividad diaria y los  estudios, que las ingenierias no son faciles jaja, en verano retomare  los ejemplos de como usar los prerifericos y alguna que otra libreria en  la que he he ido trabajando desde entonces como el bus en una linea.

De todas formas a parte del los manuales que yo y otra gente ha colgado tambien hay  ejemplos hechos con proteus por si te pueden servir. 

P.D.También los ejemplos en ensamblador por si alguien los quiere, no son gran cosa pero muestra como funcionan algunas funciones


Un saludo a todos


----------



## StrySG (Mar 16, 2010)

Bueno de todos modos muchas gracias -*asuryan87*- ...

Por otra parte Tal vez esto que pida sea algo ambicioso pero me gustaria que alguien publique algún tutorial, ejemplos, datos o links acerca de como hacer comunicación USB usando AVRs  no voy a ser exigente y agradecería info o direcciones en ingles.


----------



## asuryan87 (Mar 17, 2010)

hola,

pues si lo que buscas es información debes ir a la página de atmel, ellos ponen tutoriales para poder usar sus periféricos puedes buscar aqui:
http://www.atmel.com/dyn/general/se...n6tp4lcm&cof=FORID:9&ie=UTF-8&q=usb&sa=Search

De paso te pongo una introducción sencilla de como se implementa 


Un saludo


----------



## Lithiumrd (Mar 17, 2010)

Buenas, es mi primera intervención en este post. Meta tengo un GRAN  ?, estoy intentando armar una base zif para los Atmega con el quemador de Eclip-se (te pregunto porque se que lo conoces y ayudaste a depurarlo) y necesito saber que pines son los que voy a utilizar, porque con pic no tengo problemas, ademas existen muchos ejemplos en internet. El detalle esta en que en los pines de salida de Eclip-se tengo:

    XTL1
    MOSI
    MISO
    CLK
    RST
    VDD
    GND 


y en los datasheet de atmega encuentro en general:

    RESET
    MOSI
    MISO
    VCC
    XTAL1

 mi pregunta es la siguiente, que conecto con que???? yo estoy intentando conectandolo de esta manera pero no estoy seguro porque apenas estoy empezando a utilizar la familia atmel

    XTL1  <-->   XTAL1
    MOSI  <-->   MOSI
    MISO  <-->   MISO
    CLK    <-->   ???
    RST    <-->   RESET
    VDD    <-->   VCC
    GND    <-->   GND

agradezco de antemano la ayuda que me puedan dar y en lo que tenga lista la base zif la posteare.


----------



## Chico3001 (Mar 17, 2010)

La conexion es correcta... deja CLK sin conectar...y me parece que XTAL1 tambien va sin conectar... pero no recuerdo...


----------



## asuryan87 (Mar 19, 2010)

He encontrado esto relacionado con aplicaciones usb y AVR:

http://www.alldiy.info/usb.html

http://www.obdev.at/products/vusb/index.html

espero que te sirva, eso si, esta en ingles


----------



## StrySG (Mar 19, 2010)

Si sirven de mucho, muchas ¡gracias otra vez! trataré de traducirlos lo mejor que pueda para mi entendimiento,seguramente esto servirá a muchos además hay otros interesantes proyectos...


----------



## Meta (Abr 6, 2010)

Te esperamos la traducción.


----------



## cybor8 (Abr 12, 2010)

asuryan87 dijo:


> Hola,
> 
> Hace unos meses me introduje en los microcontroladores avr y la verdad es que me han encantado, como toda persona que ya haya hecho algo con ellos sabra que prácticamente toda la información esta inglés por eso mi intención es crear un documento que sirva de guia y enseñe los aspectos básicos a todo aquel que quiera probarlos.
> 
> ...


No conocia este foro, me parece buena idea de hacer o traducir un manual para el uso de microcontroladores de Atmel, yo tengo cerca de 5 años conociendo el at90s8515, atmega8 y atmega8515, y me encontré un chasco, casi no hay información o tutoriales para la creación de proyectos con estos micros. También conozco los pic's. desde la gama enana hasta la media, y se hizo más fácil aprender de ellos porque hay mucha información tanto del fabricante como el software y gratis, solo que la mayoría maneja el lenguaje ensamblador. En cambio atmel la información es escasa y no hay software gratuito o trials, y tienen razón el lenguaje en C es más sencillo, pero hay que estudiar lenguaje C y el set de instrucciones de Atmel, y la verdad a mi se hizo muy complejo, pero ahora que se como funcionan y a base de golpes he aprendido como funciona el compilador AVRcodevision, sólo hay que armar el rompecabezas de C con el manual cvavrman de atmel.com, que esta inglés. Y si es bueno y mas económicos que los pic's.
Luego edito mi aportación porque hoy es mi primer día en este foro. cybor8.


----------



## Meta (Abr 13, 2010)

Bienvenido.

Es bueno que des tu opinión. Será eso también que es más complejo los AVR hasta en C que los PIC también en C. A pesar de que los PIC se usa más en ensamblador que es más difícil que el C es por algo, que hay mucha información, sobre todo los PIC.

Pues parece que la traducción de los Atmel no llega.

Saludo.


----------



## Moyano Jonathan (Abr 13, 2010)

Lo que pasa meta es que traducir un documente no es joda ajaja hay que ponerse muchas horas frente al monitor...yo con USB me pasa eso...el proceso es el siguiente...leer la info en inglés....tratar de dijerir lo que transmite el documento....y ponerse a trasladar el texto al español.
PD: Con USB ahora tengo la info para hacer control por USB a través de ETHERNET. Algo asi como lo que vos tenías para RS232.


----------



## Cryn (Abr 13, 2010)

Hola, disculpen que me entrometa, pero he realizado unos primeros pasos con los AVR, particularmente con el ATmega8. Comencé a trabajar en ASM como saben con el AVRStudio, hice algunos ejemplos para aprender, posteriormente pretendo hacer los mismo ejemplos pero en lenguaje C de WINAVR. Y a medida que avance veré que más se podría hacer...

Bueno les dejo el link al foro donde lo he puesto, espero que no sea molesto para el foro que coloque el link acá, de ser así les ruego eliminen el post.

Espero que les sirva y yo espero seguir avanzando por ahí, lo he dejado un poco colgado por lo mismo de siempre, el tiempo que no nos sobra 

saludos!


----------



## asuryan87 (Abr 13, 2010)

> Bueno les dejo el link al foro donde lo he puesto, espero que no sea  molesto para el foro que coloque el link acá, de ser así les ruego  eliminen el post.



Todos los aportes que puedan ayudar a la gente a aprender mejor son bienvenidos.

Para lo que dijo cybor8:


> En cambio atmel la información es escasa y no hay software gratuito o  trials, y tienen razón el lenguaje en C es más sencillo


Eso no es cierto, yo he encontrado muchisima información, librerias, proyectos, ejemplos, instrucciones de como hacer determinados buses que no estan implementados en el propio micro etc.

Excepto los proyectos y algunas librerias, el resto se puede encontrar en la propia pagina de atmel incluso yo me baje la "techlib" que se renueva cada año con información sobre todas las familias de micros que frabrican, datasheets, etc.

Para los proyectos y librerias debeis mirar en el foro oficial reconocido por atmel. avrfreaks  http://www.avrfreaks.net  pero claro está en ingles como casi todo, de hecho si lo piensas bien, microchip no ofrece nada en español, todo lo que hay ha sido por gente que ha traducido o hecho libros que es lo que falta para que los avr se extiendan por los paises hispanoparlantes.

Igualmente, hoy en día el ingeniero que no sabe inglés está muy limitado en su capacidad.

un saludo a todos


----------



## StrySG (Abr 13, 2010)

No sabia que existiera otro compilador en C para AVRs aparte del WIN AVR, en cuanto a la traduccion me doy cuenta que no soy el indicado para hacerlo al menos por el momento, hay muchas cosas de los AVR que aun no se y estan en dichos links.

Por recomendacion de varias personas comence a programar e implemetar AVRs solo utilizando el lenguaje C ya que vi que el Assembler de los AVR es más dificil...ç


Por otra parte estuve intentando la comunicacion entre un ATMEGA32 o ATMEGA16 con el DS1302, lo consegui modificando un código hecho anteriormente al parecer hace mas de 5 años para WINAVR, pero el WINAVR actual no compila dicho codigo, haciendo algunas midificaciones al mismo he conseguido finalmente la comunicaicon con el DS1302
 __Por ejemplo se debe reemplazar todas las instrucciones como

cbi(PORTB,io) ----por----  PORTB&=~(_BV(io)) 
                         y
sbi(DDRB,io)  ----por-----  PORTB|=_BV(io)

asi para todas las lineas que tengan la instruccion cbi o sbi... afortunadamente el WINAVR tiene la opcion REplace y utilizandola se puede ahorrar el trabajo de revisar donde esta esta instruccion.


para la version actual del WINAVR se debe typear #include<util/delay.h> en lugar de #include "delay.h"
y reemplazar los delay_us() y delay_ms() ---- por---- _delay_us()  y _delay_us() solo si se ha hecho el reemplazado anterior.


Aqui les dejo el proyecto que encontre que incluye como hacer comunicacion utilizando el modulo USART y la comunicacion con el RTC DS1302. pero no funcionara si no se hacen dichas modificaciones...

Espero que alguien se beneficie con esta libreria para AVRs en C


----------



## Cryn (Abr 13, 2010)

puff que feos cambios que le ponen en WINAVR, osea que quien sabe si después nuevamente cambian algunas instrucciones a la anterior forma o a otra nueva todavía...

No es tan difícil el ASM de los AVR de 8bits, más bien facilita en parte el que tenga varias instrucciones, solo es cuestión de acostumbrarse a ellas y siempre tener a la mano impreso la lista de instrucciones, con el tiempo seguramente te vas aprendiendo varias...

saludos.


----------



## asuryan87 (Abr 14, 2010)

Lo que dice cryn es cierto, al principio necesitas tener la hoja con las instrucciones pero te acostumbras rápidamente por que muchas de ellas son complementarias como:

SBIC: Salta si un determinado bit de los registros I/O vale 1 
 y 
SBIS: Salta si un determinado bit de los registros I/O vale 0

como esta hay muchas por lo que es facil aprenderse 60 o 70 instruciones en poco tiempo, las demás vendrán con la necesidad de cada uno al crear un programa.


----------



## Meta (Abr 14, 2010)

Con razón que siempre se trabaja con PIC la mayoría. Cad vez más veo que usan el C.


----------



## StrySG (Abr 14, 2010)

asuryan87 dijo:


> Lo que dice cryn es cierto, al principio necesitas tener la hoja con las instrucciones pero te acostumbras rápidamente por que muchas de ellas son complementarias como:
> 
> SBIC: Salta si un determinado bit de los registros I/O vale 1
> y
> ...




Bueno he encontrado el set de instrucciones resumido de AVR en inglés igual de todas formas casi todo lo que se encuentra de AVR esta en ingles... 
Escuche que el AVRStudio es una herramienta  de programacion poderosa y creo que tambien tiene algun tipo de interfaz con WINAVR.  Pienso que puedes programar cualquier micro en C  y te facilitará las cosas pero si sabes Assembler es como tener un grado superior mas...


----------



## Cryn (Abr 14, 2010)

exacto el WINAVR se integra al AVRSTUDIO, yo lo tengo así, aunque todavía no he visto nada de C para AVR's

Los conceptos de lo que hacen las instrucciones son fáciles de comprender, ya que no hay mucho texto que explique ello, simplemente dice lo que hace cada sentencia.


----------



## asuryan87 (Abr 15, 2010)

tambien cabe decir que puedes integrar isis-proteus al avr studio que viene muy bien a la hora de depurar el programa si lo estas simulando.


----------



## Cryn (Abr 15, 2010)

Eso de integrar al ISIS todavía no lo pude hacer, no sabía que se podía, me podrías dar una mano?

Se puede en ASM y/o en C?


----------



## asuryan87 (Abr 15, 2010)

Es sencillo y funciona para asm y c sin problemas.

Si creas un nuevo proyecto, al llegar a la parte de "Select a debug platform and device", ves que hay dos ventas, a la izquierda para "debug platform" y a la derecha device, pues en la de la izquierda busca en la lista hasta que veas "Proteus VSM viewer", lo seleccionas y luego escogers el micro en la parte de "device" como haces siempre, pero has de tener en cuenta que el numero de dispositivos que isis es capaz de simular no es muy extenso por lo que no podras usarlo para micros muy especificos.

Si partes de un proyecto ya creado, abres la pestaña "debug" y haz clic en select "platform and device" y haz lo mismo que lo explicado antes.

Una vez hecho esto deberia aparecer la ventada de proteus dentro del avr studio, abres el esquema del circuito que previamente hayas hecho y si no recuerdo mal no es necesario hacer mucho mas.

Uno de los incovenientes es que no pódras modificar mucho el esquema, para eso mejor usa isis.

Espero que te funcione.

Acabo de ver que labcenter ha puesto instrucciones y las operaciones basicas, te dejo la pagina por si prefieres leerlo.
Operaciones básicas


----------



## COSMICO (Abr 19, 2010)

Tambien me apunto.
mas vale tarde que nunca, y como decia mi abuelo
Peor diligencia es la que no se hace


----------



## asuryan87 (Abr 24, 2010)

Bienvenida sea toda ayuda, pero como ves no hay mucho movimiento y ademas últimamente yo no tengo mucho tiempo por lo que hasta el verano no podre ir subiendo los programas que he ido haciendo. Hasta entonces puedo ir resolviendo dudas que tengais.


----------



## cybor8 (Abr 27, 2010)

Tengame paciencia para la aportación acerca del manual de AVRcodevision estoy trabajando en eso:http://www.hpinfotech.ro/html/download.htm
Con algunos ejemplos de aplicación práctica con hyperterminal.

Bajen el manual de usuario que esta en inglés, este es el manula al tomo como referencia para su traducción y agregar detalles de mi cosecha.
[http://www.hpinfotech.ro/html/cvavr_doc.htm

Manual codevisionAVR v2.04.3 http://www.hpinfotech.ro/html/cvavr_doc.htm


----------



## COSMICO (Abr 27, 2010)

Trabaja tranquilo amigo cybor8; pasiente sere por mi parte
es un gran trabajo y merece tiempo.


----------



## nietzche (May 30, 2010)

Hola a tod@s, no se si ya tengan este tipo de informacion pero de todas maneras la posteo, Dios me libre del castigo que me daria mi profesor de microprocesadores si me ve posteando su creacion, asi que este credito es para mi profe y no para mi, ya que mi profe trabajo arduamente para traducir los manuales de los AVR los PIC y los MC80 de motorola. Aqui les dejo el conjunto de instrucciones de los AVR en espanol y explicados, con un pequeno intro de su estructura interna y de todo eso,
luego posteo el uso del AVRStudio y otros modulos del AVR, especialmente del atmega8 y variantes, y como no me gusta gastar en cristales para el pic ahora me quedo con el AVR, bay.


----------



## Meta (May 30, 2010)

Muchas gracias, está uy bueno y bien en castellano.

El que quiere traducir un manual parece que se echó  hacia atrás, deja ver si se le levanta los ánimos o nos quedamos simepre con los PIC.


----------



## COSMICO (May 30, 2010)

Si que esta bueno graciasss


----------



## Cryn (May 31, 2010)

nietzche dijo:


> y como no me gusta gastar en cristales para el pic ahora me quedo con el AVR, bay.


Existen muchos microcontroladores con oscilador interno, depende de uno el escogerlo o no.

Muy buena la guía que posteaste, muchas gracias


----------



## amontano (Jun 2, 2010)

Gracias por los aportes, muy educativos...


----------



## mamun (Jun 21, 2010)

Hola a todo el Foro, como les va con los AVR
ya probaron lenguaje basic para el AVR, estoy usando el BASCOM-AVR y se ve muy bien.

Saludos...


----------



## nietzche (Jul 9, 2010)

no, yo prefiero usar el lenguaje casi-nativo que es el assembles, jamas he trabajado con otros codigos


----------



## Moyano Jonathan (Jul 9, 2010)

Yo para empezar en el mundo de los AVR empece en ASM pero me di cuenta de la gran eficiencia que tienen los mismos al ejecutar código C compilado.


----------



## StrySG (Jul 10, 2010)

Estoy de acuerdo, de hecho desde hace tiempo estuve buscando un tutorial completo de la programación utilizando WIN-AVR que también se lo llama AVR GGC, por que yo particularmente para hacer uso de algunas funciones como escritura en la EEPROM y el uso del Watch Dog, tuve que abrir con el block de notas y revisar los archivos .c y .h que son propios del programa para controlar estas funciones, fue dificil entenderlas excepto la del Watch Dog, todo por que no pude encontrar información que me sirviese con este compilador.


----------



## mamun (Jul 12, 2010)

Yo tambien he programado en lenguaje ensamblador, pero tambien estoy utilizando basic y estoy intentando aprender C, pero basic te da muchas facilidades y es mas facil.
Prueben el Bascon-AVR y me dan su opinion.

Saludos...


----------



## Vladkraune (Jul 13, 2010)

He visto esta web
http://winavr.scienceprog.com/
lo se, está en inglés, pero es un buen material para traducir, cosa que trataré de empezar a hacer...


----------



## EmiF (Jul 28, 2010)

Buenas, nunca he trabajado con microcontroladores que no sean PIC, ahora estoy analizando un proyecto que utiliza un ATMEL AT90S4433 o algo asi, que programador necesito, me refiero tanto a hardware como software.....


----------



## nietzche (Jul 29, 2010)

pues yo uso el AVRStudio para programar y el pony prog para grabar, el hardware es sencillo, mañana lo pongo si kieres


----------



## EmiF (Jul 29, 2010)

Seria de mucha utilidad si subes un programador ya funcionando. Esos programas corren en Linux o tambien lo hacen en Windows??


----------



## nietzche (Jul 29, 2010)

solo lo probe en XP, usa el puerto serial, no me he puesto a investigar sobre USB, este programador me sirvio para el atmega8(L), se supone que sirve para el ATS pero no lo he probado, creo que se deben de cambiar unos pines, en el adjunto envio la explicacion de como se debe hacer

aqui esta el esquematico y los componentes, tmb creo que van archivos para el proteus


----------



## EmiF (Jul 29, 2010)

Ok, muchas gracias nieztche. Voy a empezar a investigar un poco mas sobre el tema, para ver si lo hago con estos micro o no

El CI ATMEGA que figura en el diagrama es parte del programador, no es el chip que vamos a grabar, verdad???

Como se coloca el chip a grabar??


----------



## nietzche (Jul 29, 2010)

el ATMEGA es el chip a programar, y se coloca como esta en el diagrama, con la muesca en donde se ve el dibujo, en donde va el atmega tmb puede ir la serie ATS de ATMEL, pero te digo que no lo probe con el ATS, yo personalmente prefiero la serie ATMEGAx, ke vas a hacer con el micro ?


----------



## EmiF (Jul 31, 2010)

Ahh yo pense que el chip era parte del programador, pero mejor asi, mas simple y barato.
Es un contador de frecuencia, aca lo podes ver

http://www.ibiblio.org/pub/linux/docs/LDP/linuxfocus/Castellano/September2002/article253.shtml


----------



## solider (Ago 20, 2010)

estas presentaciones nos las proporciono mi maestro de ucontroladores, mi. carlos canto quintal del itslp mexico, me sirvieron para aprender avr, ire subiendo mas

Ver el archivo adjunto GCC_on_Atmel_AVR.rar


----------



## Fogonazo (Ago 20, 2010)

solider dijo:


> ESTAS PRESENTACIONES NOS LAS PROPORCIONO MI MAESTRO DE uCONTROLADORES, MI. CARLOS CANTO QUINTAL DEL ITSLP MEXICO, ME SIRVIERON PARA APRENDER AVR, IRE SUBIENDO MAS
> 
> Ver el archivo adjunto 38188


*Reglas generales de uso del foro (Extended Version)*

*01)* No escribir todo en Mayúsculas. Las mayúsculas equivalen a elevar la voz.


----------



## EME_JuanAndrade (Ago 20, 2010)

Holas. Yo tengo como un año que me tropece con los AVR y en mi opinion son la neta. Aprendi a programar en c para el compilador CodeVision AVR. Si alguien lo conoce, sabra que es muy sencillo. En un par de lineas (despues de elegir algunas opciones) se puede mandar texto a un LCD, o intercambiar datos por 2wire SPI, o leer un lm35, etc. Pone las cosas realmente faciles, aunque sin sacrificar la posibilidad de hacerlo a la antigua. Por cierto tiene una versión de prueba que solo esta limitada al tamaño del codigo generado. La verdad es que me ha servido sin problema para todo lo que he hecho, incluso cuando hice una maquinita de POV y tube que meterle mucho a la memoria.

Si quieren visitar mi pagina tengo algunos ejemplos basados en el atmega8. La pagina esta demasiado enfocada al programador usbasp, pero en teoria podria ser util para cualquier programador. Tambien esta muy enfocada al Atmega8, pero ahora me ha sido realmente dificil conseguirlos. Estan muy caros. De hecho he preferido comprar Atmega16 o Atmega32 de montaje superficial. Por cierto me bronqueaba mucho con ellos por que tienen habilitado el J-tag. 

Actualmente estoy preparando un texto formal sobre la programacion de AVR con este compilador, en cuanto este completo lo subo.

De momento agrego algunos links que me han sido utiles en esto de los AVR:

Para configurar los fusibles (me funciona genial con avrdude) Con ayuda de esta pagina pude configurar mis atmega8L para correr a 8Mhz con solo el oscilador interno. Ademas de desactivar el JTAG de los Atmega16 y Atmega32.

Para generar caracteres de usuario en un lcd HD44780 

Para bajar el CodeVision AVR


Espero que esto les sirva de algo.


----------



## nietzche (Ago 22, 2010)

Ah gracias por la informacion, a mi me gusta bastante el atmega.
las razones son varias, tienen mas instrucciones, tienen por ejemplo instrucciones de lectura de bit, lo que evita testear el bit para saber si es 1 o 0.

Ademas lo que mas me encanta es el modulo PWM, ya que tiene una resolucion de 16 bits, eso permite tener pwm con frecuencias muy bajs no como el pic que solo tiene resolucion de 10 bits.

Ademas tiene 32 registros acumuladores no solo un registro W


----------



## COSMICO (Ago 22, 2010)

Un saludo juanministrador.
Hace tiempo que quiero programar otro tipo de micros,por la cosa de la sensibilidad
de los pic frente al ruido, y la cantidad de cosas que debo hacer para evitar su reset frente a los motores, sobre todo de escobillas.

La cosa es. ¿Estos avr tienen mejor inmunidad al ruido?


----------



## EME_JuanAndrade (Ago 23, 2010)

Saludos Cosmico.

Aunque mi experiencia es limitada, trabajando con motores de escobillas (carbones) de 12v-24 (a  travez de un mosfet logico) he logrado hacer pwm sin problema, ni  reseteos, ni puertos dañados ni nada parecido. Trabajando con voice coils el atmega8 se  mostro bastante estable incluso cuando por accidete conecte el voice  coil sobre la alimentación digital de 5v con un relé y sin diodo de  protección. Por supuesto que no volveria a hacerlo, pero mi chip smd  sobrevivio y sigue funcionando sin problemas aparentes. 

Tambien hice un maquinita de P.O.V. que se alimentaba atravez de un  balero (rodamiento) y aunque al principio el chip se reiniciaba a causa  de pequeñisimas desconexiones, al agregar un capacitor de 2200uF (aunque  uno de 250uf parece ser suficiente) trabajo sin problema. Aclaro que la  energia la tomaba de la misma linea que el motor y  acabo de comprobar  que no le puse diodo de protección.

Asi que supongo que puedo opinar que son microcontroladores todo terreno y muy aguantadores.

He desoldado y soldado mi atmega8L-au (smd) unas 8 veces. Soldo con un  cautin barato de lapiz sin aterrizado, trabajo en una mesa de madera y a  veces sobre un vidrio. Alimento casi todos mis proyectos atravez del usb  pasando por el programador (propiamente atravez del atmega8 del  programador). Viendolo todo en retrospectiva, me sorprende que me hayan  aguantado...

Aunque he hecho pequeñas incursiones con los PIC mi frustración al no poder programarlos me ha llevado a casi aborrecerlos, por ende carezco casi de experiencia con ellos, asi que no sabria emitir un juicio objetivo sobre si son mas sensibles al ruido electrico.

Espero esto les sea util

Por cierto. Aqui les agrego un PCB para la version SMD del atmega8 La he estado vendiendo como tablilla de desarrollo. Es para un solo lado aunque usa unos jumpers enormes. A ver si a alguno le sirve. 


Por cierto, estoy a punto de comprar 500 Atmega16/32 por un costo de menos de un dolar cada uno, aun asi es un gasto grande, asi que si a alguien le interesa comprar una parte del lote tal vez podamos negociar. Si comprueban en el mercado del menudeo estos cuestan entre 6 y 8 dolares. No quiero que piensen que uso el foro para hacer negocios. Prometo entregar una copia de la factura donde se demuestre que no voy a ganar un centavo. Si alguien quiere comprarlos por su lado tambien puedo darles los datos de mi vendedor (Arrow Electronics). (Administrador. Si consideras que violo las normas del foro, elimina solo este parrafo por favor).


----------



## nietzche (Ago 25, 2010)

buen diseño, pero no me gusta el logo del chile ni el "a huevo", se me hace un poco naco, sin ofender


----------



## EME_JuanAndrade (Ago 25, 2010)

No me ofende. Soy un "naco" por elección personal. Ciertamente olvide quitar esos logos que son de mi marca propia, pero cuando lo noté ya no tenia el boton [editar]. De hecho tambien queria eliminar el parrafo de los 500 atmega16, ya que no tendre posibilidad de comprarlos. Empero, decidi no solicitar ayuda de algun moderador esperando que el diseño fuera útil a alguien de cualquier forma.


----------



## Meta (Ago 25, 2010)

¿Realmente se está traduciendo un libro al español de AVR?

Por un lado está bien poner enlaces de Web sobre ello.


----------



## Moyano Jonathan (Ago 25, 2010)

Yo recompilando la info en la web tengo todo listo para empezar un manual pero me falta el hardware del programador placa base para experimentos + programador USB


----------



## EME_JuanAndrade (Ago 25, 2010)

Pues en USBASP esta muy facil y nunca me ha fallado. Hay muchos pcb's en la red, pero si gustan podemos hacer uno propio del foro, solo habria que definir algunos lineamientos. Por ejemplo, que sea de una sola cara y pueda ser fabricado por el metodo de toner-papel, la posibilidad de generar 2 versiones, para DIL o SMD TQFP, elegir el formato del conector para grabar (en  mi caso prefiero 6 pines en linea para poder usarlo en una protoboard), etc.

Teniendo un programador estandarizado, la literarura que propone Moyano Jonathan podria ser bien especifica.

A mi me funciona el USBASP por que mi laptop, como la mayoria de las recientes, no tiene ni puerto paralelo ni puerto serial.

Si se tiene un puerto paralelo en la pc se puede hacer un programador muy simple. Tambien por puerto serial.


----------



## Moyano Jonathan (Ago 25, 2010)

Yo estoy viendo como consigo los componentes para armar mi quemado de AVR por USB ...me parece que me voy a armar el ISP MKII Clone que tiene soporte en AVRDUDE y AVRstudio http://www.embedded-projects.net/index.php?page_id=178

Con respecto a la literatura quiero armar algo parecido al libro del PIC16F84A pero con el ATmega8 o superiores.


----------



## nietzche (Ago 27, 2010)

caballeros, necesito urgentemente realizar un sistema con el aclamado atxmega256d3, para ocupar el a/d de 12 bits y el modulo infrarojo, pero no encuentro un grabador, no saben de uno ?


----------



## EME_JuanAndrade (Ago 27, 2010)

Mira, yo no he trabajado con los Xmega, pero segun esta pagina http://www.aliexpress.com/wholesale?SearchText=atxmega&x=15&y=12 el tipo de programacion es JTAG, compatible con los programadores MKII JTAG ICE. Aclaro que es mera especuación.


----------



## R-Mario (Ago 28, 2010)

Hola juanministrdor que tal oye veo que vas a comprar avr por mayoreo, a mi me interezan algunos atmega32 si los compras me avisas yo me apunto para adquirir unos porque eso de comprarlos al menudeo te despeluchan por uno solo, por cierto de donde eres yo soy del estado de mexico, mas exactamente en atizapan de zaragoza,

A por cierto se me olvidad si de verdad quieren empezar a traducir algo sobre avr y hacer un buen manual yo me apunto, nada mas manden la informacion y en mis tiempos libres lo empiezo a traducir, un profe del poli nos dio unos apuntes si quieren los subo con gusto


----------



## EME_JuanAndrade (Ago 28, 2010)

Holas Benito2312. Te comento, inicialmente me ofrecen 500 atmega32-16AU por al rededor de $8.00 pesos mexicanos. Me es de momento imposible invertir los $4000.00 yo solo, asi que estuve tratando de conectar con gente que pudiera adquirir una parte. Si logramos dividir entre 4 nos tocaria de a $1000.00 cada uno y obtendriamos 125 chips. En este momento ya no tienen disponibles, asi que la venta se pospone por 30 dias aprox. A mi cada atmega32 me cuesta como $80.00 de menudeo, asi que bien valdria la pena. Tambien me ofrecen 10 LCDs 2x16 iluminados en azul por $300.00 pero tardan de 20 a 30 dias en llegar. Voy a comprar un lote de esos y ya les cuento. Aclaro que los Atmega32 que me ofrecen son SMD de 44 pines. Si quieren los datos de la persona que los vende para otras cuestiones envienme un mensaje privado. 

Por cierto, radico en Ecatepec de Morelos.

En otras cuestiones, ¿sera prudente traducir alguna datasheet para empezar?

Si alguien esta de acuerdo me comprometo a traducir el manual del CodeVision (que es donde tengo alguna experiencia).


----------



## Meta (Ago 28, 2010)

Ni más componentes quiere comprar.


----------



## EME_JuanAndrade (Ago 28, 2010)

¿Que quieres decir Meta?


----------



## Meta (Ago 28, 2010)

Nada importatne, sólo que me parece mucho la compra de AVR. Tantas cantidades.


----------



## EME_JuanAndrade (Ago 28, 2010)

Ciertamente son muchos.


----------



## R-Mario (Ago 29, 2010)

Pues si son muchos pero toma en cuenta que pagar 80 pesos por cada uno cuando ellos los compran  10 pesos pues vale la pena, igual y toma nota de los que se interezen en comprarlos, tambien me intereza un par de LCDs, mientras a esperar igual y mas interezados en estos micros se apuntan y nos salga mas barato no!!!.

Cambiando de tema yo opino que estaria bien traducir un manual por ejemplo el del Atmega8 que es de la gama baja pero bien sirve para entender el resto, que practicamente son los mismo solo con algunas funciones extras.

Nomas nos hace falta alguien que organize lo que nos tocaria a cada quien, por ejemplo el que abrio este tema.

A por cierto Ecatepec de Morelos te refieres a Ecatepec del Estado de MExico verdad!!!


----------



## EME_JuanAndrade (Ago 29, 2010)

Asi es Benito Ecatepec de Morelos, Estado de México. A mi tambien me gusta la idea del Atmega8. Tiene 6 ADC y 2 puertos de 8 bits + 1 de 6 bits. El patillaje esta bien desordenado, pero es un buen micro para empezar. El problema es que actualemnte estan escasos y cuesta mas barato comprar un Atmega16. El Atmega16 tiene 4 puertos de 8 bits y 8 ADC (en el puerto A). Alguien me comentaba que estaban a punto de ser definitivamente remplazados los Atmega8 por los Atmega48, Atmega88, Atmega168, etc.


----------



## R-Mario (Ago 29, 2010)

Pues si lo creo ya que si es viejo pero aun lo siguen fabricando yo tengo uno que compre y tiene la fecha de fabricacion de la sexta semana de este año, y si me late mas el atmega16 por contar con el puerto A, sale sigo a la espera de que se animen a la traduccion


----------



## EME_JuanAndrade (Ago 29, 2010)

A ver que les parece. Las primeras tres hojas de la datsheet del Atmega16 para que vallan corigiendo u opinando. Si todo va bien, creo que puedo hacer unas 3-5 hojas diarias.

Lo que esta en azul es lo que ya esta traducido o a mi parecer no requiere traducción. 

Agreque el nombre del Foro y mis datos a la hoja, espero que esto no represente un problema. Reconozco que la ortografía no es lo mio, asi que si hay algun error por favor indiquenmelo.

Lo mismo si la mayoria vota por otro avr, pues empezamos con otro.


----------



## Meta (Ago 29, 2010)

Buen trabajo y muchísimas gracias.


----------



## Moyano Jonathan (Ago 29, 2010)

Exelente laburo muy prolijo !


----------



## R-Mario (Ago 30, 2010)

Oye que programa usaste para darle el mismo formato al del datasheet? A mi aguantenme para el domingo y me pongo en chinga, digo esto porque el miercoles y jueves tengo examenes en la escuela!!


----------



## EME_JuanAndrade (Ago 30, 2010)

Estoy trabajando todo en Corel Draw, no se usar otro programa para  diseño, ahi tambien hago mis PCB. Hoy no he podido avanzarle, pero en la  noche me apuro pa otras 2 o 3 paginas. Si alguien quiere encargarse de  una parte, indique de que pagina a que pagina pa que no hagamos doble  trabajo. Claro, si están de acuerdo.

Subo la datasheet original que tengo para que podamos compartir la misma.

 Lo siento es que mide mas de 3 MB. No pude subirla. ¿Les parece qie partamos de la versión de la pagina oficial?


----------



## Moyano Jonathan (Ago 30, 2010)

@juanministrador te ayudaría pero ya estoy con la traducción del manual del pickit2 y un sinfin de proyectos más


----------



## EME_JuanAndrade (Ago 30, 2010)

Se agradece Moyano, ya habra tiempo.

Ok. 2 hojitas mas. No voy a hacer por hoy por que vengo regresando de un viaje y me siento muy desgastado. Quiza sera mejor subir avances por semana.

Si ven algun error por favor indiquenme. Ya corregi en la pagina 1 que dice 16Kbits por 16Kbytes.


----------



## Meta (Ago 31, 2010)

Muy bueno, campeón. No te estreses, poco a poco está muy bien. estás haciendo un gran esfuerzo  para los demás.


----------



## Sectorbeat (Ago 31, 2010)

pues en mi escuela estamos viendo el ATMEGA8 y los capitulos que nos dieeron para estudiarlo estan muy buenos y en español, se los adjun to para que puedan checarlos a ver si les sirve, saludos a todos...


----------



## Meta (Ago 31, 2010)

Buenísimo, esto me anima mucho.


----------



## Moyano Jonathan (Ago 31, 2010)

Exelente como para ir empezando


----------



## Meta (Ago 31, 2010)

¿Y el capítulo 7?

Hay dos capítulos 12.


----------



## Sectorbeat (Ago 31, 2010)

Meta dijo:


> ¿Y el capítulo 7?
> 
> Hay dos capítulos 12.



no estoy seguro, pero deja lo checo con otros compañeros para ver si realmente me falta o se compensa con el 12twi


----------



## EME_JuanAndrade (Ago 31, 2010)

Olle, Que buenos estan los cursillos SectorBeat. Gracias por compartirlos.


----------



## R-Mario (Sep 1, 2010)

Hola de nuevo a todos, que tal SectorBeat, pues les cuento que al parecer tenemos el mismo profesor, Eduardo Balderas, jajaja por si quieren saber es un profe que me califica con puro examen al 100% y pregunta el mas minimo detalle en sus examenes, como por ejemplo para que sirve el bit DOR del registro  USART y en que direccion esta y en que posicion del registro esta, pues tenia que ser es un profe de la vieja escuela pero es muy bueno tiene doctorados y maestrias por monto estudio en el Politecnico aca en mexico, y trabajo en un planta nuclear y en la nasa, y pues como veran si que sabe, actualmente creo que esta jubilado y da clases en el poli donde imparte el curso de microcontroladores y el prefiere por mucho a los Atmega, bueno les envio el capitulo 7 y en efecto solo son 12 capitulos.

Si les falta otro o se repitio alguno se los mando, tengo todos, perdon por todo lo que escribi pero  es bueno reconocer a la persona que lo escribio, todos sus ejemplos son el lenguaje C que por cierto ocupa mucho espacio cuando se genera el Hex, por ejemplo un programa en C que hace parpadear un Led ocupa casi 1 Kb  mientras que escrito en ASM ocupa aprox. 200 Bytes, tenia que ser no creen


----------



## StrySG (Sep 1, 2010)

Me alegra puedan compartir informacion asi, justo ayer me compre un *ATMEGA8L* para armar el grabador USB-ASP, pero creo que no me servira para eso por que solo soporta un cristal hasta 8Mhz y el grabador necesita un cristal de 12Mhz.

Estaba desanimado, pero gracias a estos manuales le voy a dar mutiples usos, Gracias... y espero que en el futuro podamos tratar AVRs mas avanzados como el ATMEGA32u4 o otros AT90s.


----------



## Sectorbeat (Sep 1, 2010)

Benito2312 dijo:


> Hola de nuevo a todos, que tal SectorBeat, pues les cuento que al parecer tenemos el mismo profesor, Eduardo Balderas, jajaja por si quieren saber es un profe que me califica con puro examen al 100% y pregunta el mas minimo detalle en sus examenes, como por ejemplo para que sirve el bit DOR del registro  USART y en que direccion esta y en que posicion del registro esta, pues tenia que ser es un profe de la vieja escuela pero es muy bueno tiene doctorados y maestrias por monto estudio en el Politecnico aca en mexico, y trabajo en un planta nuclear y en la nasa, y pues como veran si que sabe, actualmente creo que esta jubilado y da clases en el poli donde imparte el curso de microcontroladores y el prefiere por mucho a los Atmega, bueno les envio el capitulo 7 y en efecto solo son 12 capitulos.
> 
> Si les falta otro o se repitio alguno se los mando, tengo todos, perdon por todo lo que escribi pero  es bueno reconocer a la persona que lo escribio, todos sus ejemplos son el lenguaje C que por cierto ocupa mucho espacio cuando se genera el Hex, por ejemplo un programa en C que hace parpadear un Led ocupa casi 1 Kb  mientras que escrito en ASM ocupa aprox. 200 Bytes, tenia que ser no creen



mira que pequeño es el mundo, pues me parece fregon que la comunidad politecnica ande por este y otros lados de la red, muchas gracias por subir el capitulo 7, al parcer al que me los paso se le perdio, bueno supongo que nos vemos en clase, nos vemos.


----------



## EME_JuanAndrade (Sep 1, 2010)

Hola StrySG. Los ATmega(x)L-8(xx) y los ATmega(x)-16(xx) se fabrican del mismo waffer y por el mismo proceso. Una vez que se termina de empacar en el epoxico se someten a una prueba y de ese modo se clasifican entre los L que alcanzan a correr a 8Mhz a 2.7V y los standard que no alcanzan. El USBASP requiere un cristal de 12MHz. Los ATmega8 tienen velocidades de hasta 16MHz. Lo que trato de decirte es que el ATmega8 que compraste muy problemente pueda trabajar a 12Mhz. Claro que deberas configurar los fusibles para trabajar con un cristal extenrno en modo de alta velocidad. Esta pagina te da la configuración de los fusibles para el avrdude. Yo he overclockeado (valgame la expresión) ATmega8 hasta 18Mhz trabajando a 5v y ATmegas8L a 12Mhz. No todos funcionan, en teoria, pero hasta ahora no me ha fallado ninguno.

Por cierto, probe un programa para hacer parpadear un led en el compilador de C CodeVisionAVR y me dice:

*AVRASM: AVR macro assembler 2.1.17 (build 435 Apr 10 2008 09:27:55)
Copyright (C) 1995-2008 ATMEL Corporation

F:\Atmel\Programas\List\1.asm(1182): No EEPROM data, deleting F:\Atmel\Programas\Exe\1.eep

ATmega16 memory use summary [bytes]:
Segment   Begin    End      Code   Data   Used    Size   Use%
---------------------------------------------------------------
[.cseg] 0x000000 0x0000cc    204      0    204   16384   1.2%
[.dseg] 0x000060 0x000160      0      0      0    1024   0.0%
[.eseg] 0x000000 0x000000      0      0      0     512   0.0%

Assembly complete, 0 errors.

*Asegun son 204 bytes ya compilado.


----------



## R-Mario (Sep 3, 2010)

Pero cual es el error o que es lo que te hace? Oye juanministrador por cierto que paso con los LCD si los vas a conseguir cuando y cuanto? porque necesito unos para un proyecto en el trabajo


----------



## EME_JuanAndrade (Sep 3, 2010)

Nope, es que habia un comentario de que en C el programa para hacer un led parpadeante ocupaba casi un kbyte, y en ensamblador 200bytes, asi que hice uno para probar y midio 204bytes ya en lenguaje maquina, claro que el retraso de tiempo lo hice con un loop y no incluyendo delay.h. Culpa mia no haber hecho cita.

Los LCD ya los pedi, pero es un envio desde China. Nunca habia yo pedido nada de por alla, asi que no tengo certeza cuanto se tarde. En cuanto lleguen te aviso. De hecho si vemos que valen la pena voy a encargar mas.


----------



## R-Mario (Sep 4, 2010)

A ya te entendi, de hecho fui yo el del comentario, y es que es cierto, lo que pasa es que luego acostumbran mucho a usar las librerias del C y sopas el peso del programa crece como loco, aun asi lo que dices que peso tu programa que hace parpadear el Led en C ocupa mucho mas porque hecho en ensamblador te ocupara si lo haces bien compacto unos cuantos bytes.

Respecto a los LCD pues seguire esperando, pero ya no me digiste cuantos pediste y a como saldrian y lo de los AVR ya conseguiste mas que se animen a entrarle.


----------



## rafa387 (Sep 7, 2010)

Saludos, he trabajado mucho con los PIC`s, pero no hay duda en cuanto a la potencia y flexibilidad de los AVR`s desde todos los ángulos, ya que están orientadso bajo la premisa del "Software Libre".  Tengo una Guia paso a paso para AVR en español, partiendo desde cero con el ATmega8 q es el mas popular, de hecho les digo que si aprenden a trabajar con el Atmega8, aprenden a trabajar con todos los modelos, AT90xxxx, ATtinyxxx, ATmegaxxxx, ATxmegaxxx, ya sea en "Assembler",  "Basic" (con BASCOM-AVR) o C (con AVRSTUDIO4)


----------



## R-Mario (Sep 7, 2010)

Hola que tal rafa387 oye a mi me intereza mucho esa info no seas mala onda pasamela no, te mande un MP con mi correo ojala no sea mucha molestia sale gracias


----------



## COSMICO (Sep 7, 2010)

igual me interesa amigo rafa387.
Si eres  tan amable..Los pic me vuelven loco a ratos.
Gracias ..


----------



## J2C (Sep 8, 2010)

rafa387 dijo:


> ... si quieren envienme su e-mail y se la hago llegar.


 
Rafa387

Y si lo subes al thread asi lo compartes con todos???.

O si colocas un link donde lo puedan bajar todos???.

Saludos, JuanKa.-


----------



## rafa387 (Sep 8, 2010)

Ok. Amigos, disculpen. Tube un problema con mi PC. Apenas solvente, coloco las Guias para que todos la puedan bajar.


----------



## StrySG (Sep 8, 2010)

Gracias *juanministrador* es que al ver la hoja de datos del ATMEGA8(L) crei que el ATMEGA8L no alcanzaba velocidades mayores a 8Mhz, voy a continuar haciendo el grabador USBASP...

*rafa387*.
 en cuanto tengas bien la PC te agradeceria uqe subas ese manual.


----------



## GermanDario (Sep 9, 2010)

Yo tambien quiero ser parte de este grupo compaÑeros, ya qque el circuito que estoy haciendo sera controlado por un (atmega 32 - 16 - 8). . . Aprvechando esto, les pido de si alguien me puede ayudar con un programa que haga un conteo down que se muestre en (4) display´s desde un numero cualquiera y cuando entre una seÑal sea de un pulsador o un sensor, me incremente el tiempo en 2 veces el que estabe de igual forma si la seÑal no se dispara sigue el tiempo normal hasta que se accione. . .gracias a la persona que me pueda ayudar con este ya que apenas estoy aprendiendo sobre microcontroladores (avr). . .

Att: Gernman dario rodriguez


----------



## EME_JuanAndrade (Sep 9, 2010)

Saludos GermanDario Para poder ayudarte en una forma clara necesito preguntarte algunas cosas:

¿Que tipo de display estas usando? (anodo/catodo comun, sencillos, dobles, tetradas, etc) de ser posible indica el modelo presiso.

¿Vas a trabajar los display directamente de las salidas del ATmega o vas a usar algun Shift Register? (m74hc595 por ejemplo)

¿Necesitas ingresar el tiempo al iniciar la aplicación o tiene un tiempo preestablecido? (Considera que si quieres ingresar el tiempo habra que agregarle un teclado o algun otro metodo de adquisición).

¿Al pulsar el botón, el tiempo que se duplica es el tiempo inicial o el que se muestra al momento?

¿El tiempo lo vas a medir en segundos decimales (ejemplo 72 segundos) o en arreglo de hora (01.12)?

¿La unidad minima de tiempo a considerar sera el segundo o las decimas de seg? ¿Cual es el tiempo maximo a considerar?

Creo que seria lo mas importante hasta el momento.


----------



## GermanDario (Sep 10, 2010)

juanministrador : HOLA, respondiendo a tus preguntas:

1) el tipo de display que voy a usar es anodo comun 7 seg. sencillos ( serian 4) dos parejas


2) utilizare 1 salida y 1 entrada del ATmega, la salida sera para los display´s por medio de lacht(74ls373) logicamente utilizando un decodificador (74ls139), y las entrada si sera por medio del ATmega que seran para dos pulsadores o mas.


3) el tiempo estara preestablecido en el programa si se quiere hacer algun cambio se debe de reprogramar el ATmega.


4) al pulsar cualquiera de los pulsadores, el tiempo que se debe de incrementar es el tiempo que continua despues de terminar el que se esta ejecutando. 

  Ejemplo: * para el primer par de display:

               inicio en segundos (20 - 19 - 18 - 17 - 16-(puso1)- 15 - 14 - . . . - 3 - 2 - 1 - 0)

               inicio incremento  ( 40 - 39 - 38 - 37 - 36 - . . . - 3 - 2 - 1 - 0 )

               * para el segundo par de display:

               inicio en segundos (40 - 39 - 38 - 37 - 36-(puso1)- 35 - 34 - . . . - 3 - 2 - 1 - 0)

               inicio incremento  ( 80 - 79 - 78 - 77 - 76 - . . . - 3 - 2 - 1 - 0 )

y si se esta ejecutando el tiempo de incremento y se vuelve a pulsar, se debe de mantener el incremento, el inicio seria siempre desde 40 segundos y 80sg. . . si no se vuelve a pulsar, el inicio retomaria los 20sg para el primer par de display y 40sg para el segundo par .


5) el tiempo sera siempre en segundos


juanministrador: quiero pedirte tambien un favor, si por casualidad tienes un programa tambien para ATmega16 o 32
sobre un reloj digital a 12 horas (HH, MM, SS), con pulsadores de arreglo de hora. . .

gracias por la atencion prestada.

att: german


----------



## EME_JuanAndrade (Sep 10, 2010)

Orales German. Me esta costando un poco de trabajo entenderlo, dime si es correcto:

Necesitas que cada par de displays inicien un conteo diferente. Uno desde 20 a 0 y otro de 40 a cero. Si durante este conteo se recibe un pulso el siguiente conteo iniciara desde 40 para uno y 80 para el otro. ¿si se realiza en este conteo ya extendido otro pulso, este se ignora? (a sabiendas de que duplicar el conteo del segundo display llegaria a 160 y no alcanzaria un par de displays.

Esa seria la mecanica verdad?

Por otro lado no veo la necesidad del decodificador 74ls139, incluso podrias omitir el 74ls373 ya que el ATmega16/32 tienen 32 pines de I/O. Sin embargo entiendo si usas un latch por display puedes librarte del engorro de recalcular los tiempos que requeriria una salida "escaneada". 

Podrias platicarnos para que es este timer?

Respecto al reloj en formato de hora que dices, no le veo problema mientras no requieras precision en el tiempo, de otro modo seria mejur usar un RTC para no errarle. Intento el programa al ratito y lo subo por la noche.


----------



## rafa387 (Sep 10, 2010)

Saludos Amigo. Asumiendo que empezamos desde cero, te recomiendo, lo primero que tienes que hacer es contar con una herramienta para cargar los archivos " *.hex " dentro de la memoria flash de los micros. Esta herramienta se llama "Programador" y los hay de muchas formas, tipos, tamaños, económicos y super costosos. Tambien depende de la interfaz entre este y el PC, por ejemplo:

Los AVR poseen 4 formas de programarlos (Paralelo HV, ISP, Serial y JTAG), pero la mayoría de los  Programadores comerciales utilizan un conector de 4 pines llamado: ISP (4 pines: MISO, MOSI, CLK y Reset), por medio del cual programaremos cualquier micro AVR, ya q todos tienen este puerto.

Tipos de Programadores:

- Programador por Puerto "Paralelo" ->  (Muy Fácil de Hacer y muy Barato,   
                                                              pero " NO" programan la mayoría de los AVR")
- Programador por Puerto "Serial"---------->  (Medianamente Fácil de Hacer y Barato, pero " 
                                                               NO programan la mayoría de los AVR" )
- Programador por Puerto "USB" ----------->  (Relativamente Fácil de Hacer y No tan 
                                                               barato "pero son los mejores ya que 
                                                                programan la mayoría de los AVR") 
- Programador por Puerto "ETHERNET", etc-->  (Costosos).​
----------------------------------------------------------------------------------------

Por ejemplo un buen programador USB  es el "AVR-ISP"  o el "AVR DRAGON" (ambos Programadores son compatibles con el software "AVR Studio4" de Atmel.) 

Si no, aquí te envío una Guía Paso a Paso, para utilizar un programador llamado "AVR-PROG",  q tu mismo puedes construir si lo deseas, si no, puedes consultar en internet cualquier otro, por ejemplo, el programador Serial "PONY-PROG". (http://www.lancos.com/prog.html), pero recuerda q a veces estos programadores NO los programan todos.

Lo bueno del "AVR-Prog", es que siempre se actualiza con micros nuevos...

Ojo:

-- Descarguen la ultima version del "AVRSTUDIO4" (tienes q registrarte). Con este puedes 
    programar en Assembler o Lenguaje C ):
http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725

-- Tambien vas a necesitar las librerias de Win-Avr:
http://winavr.sourceforge.net/download.html

-- y el Trial de" BASCOM-AVR" (para programar en BASIC, si lo deseas): http://www.mcselec.com/index.php?option=com_docman&task=cat_view&gid=99&Itemid=54

... te recomiendo q bajes tambien la version 1.11.8.3, ya que puedes descargar el XXXX y ponerlo full, entonces copias la libreria del Bascom (ultima version) y lo pegas dentro de la libreriade la version 1.11.8.3 para mantenerlo actualizado.  Este truquito me ha dado buenos resultado...

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

Tambien existe una plataforma de desarrollo super-facil llamada "Arduino", el cual utiliza" generalmente" micros AVR de 28 pines como el Atmega8, Atmega168 y el Atmega 328p,
se programa en lenguaje C, pero hay q comprar la placa Arduino en cualquiera de sus modelos, o hacerla, comprando un Atmega328p y precargandole un programa llamado "BOOTLOADER", para que puedas conectarlo al PC ya sea por el puerto serial o USB. 
Lo bueno de Arduino es que hay mucha información y tutoriales  en español, ya q su creador es Latino-Español-Italiano, algo asi.

- El software arduino  es 100% libre.
-Con Arduino NO necesitas programador

Visita estos Link para mas informacion de arduino:
http://www.arduino.cc/es/

Bajate este Tutorial Bio-Arduino:
todbot.com/blog/bionicarduino

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

- y por supuesto, visita las paginas siguientes, aqui encuentras cualquier informacion vital, claro, a veces en ingles, pero con el "traductor de google" es mas facil:

Tutoriales y proyectos en Españo (muy bueno), presiona AVR-MT:
http://www.olimex.cl/present.php?page=tutoriales

Full Proyectos en Basic:
http://www.mcselec.com/index.php?option=com_content&task=category&sectionid=7&id=79&Itemid=57

Proyectos basicos en Basic:
http://www.avrprojects.net/

Full Herramientas y proyectos en todos los lenguajes (tienes q registrarte):
www.avrfreaks.net/

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


----------



## Meta (Sep 10, 2010)

Gracias por el palique.


----------



## GermanDario (Sep 10, 2010)

orale juanministrador:

1) Sí necesito que cada par de Display´s comience en un conteo diferente, el primer par comienza en 20sg y el segundo par en 40sg; cuando halla una interrupcion cualquiera, sea de un pulsador y/o un sensor,  el conteo que seguira despues de que termine el que se esta ejecutando, sera el conteo de interrupcion, es decir, el doble de tiempo que se ejecuta si no hay interrupcion. 

ejemplo :

tiempo normal si no hay interrupcion para los dos pares de display´s:  20segundos para el primer par y 40segundos para el segundo par.

tiempo si hay interrupcion, y se cumplira despues de terminar el conteo anterior:  40sg  y  80sg

NOTA: sino hay interrupcion, el conteo siempre sera 20sg y 40sg; pero si hay interrupcion, el conteo sera de 40sg para uno y 80sg para el otro par de display´s; si por casualidad ocurre otra interrupcion mientras se esta ejecutando el conteo, guarde esta interrupcion para que cuando se cumpla mantenga el conteo en 40sg y 80sg. . . solo utilizare esos dos cambios de tiempo, por lo cual solo necesito dos display´s para cada conteo. 


2) el decodificador (74ls139) y los latches (74ls373) los utilizare para expandir los puertos del ATmega, para asi solo utilizar dos puertos, uno de entradas de interrupcion y el otro de salidas de conteo down (timer).


3) lo que quiero hacer con este proyecto es un control automatico accionado por los vehiculos, para el control de los tiempos de los semaforos en luz verde y luz roja, es decir, cuando halla un apilamiento de autos en uno de los crucez de alguna via, el tiempo en luz verde se incremente en este y de igual forma el de los otros cruces en luz roja se incrementa.

estos tiempos se podran ver en los display´s. De esta forma los peatones y los conductores podran ver cuando va a cambiar de rojo a verde. . . 


PD: gracias por la ayuda *juanministrador*


ATT: German Dario


----------



## J2C (Sep 11, 2010)

rafa387 dijo:


> Saludos Amigo. .........


 
Rafa387

EXCELENTE!!!!!!!!!!!, mis FELICITACIONES por toda la información y link's que has compartido.

Saludos, JuanKa.-


----------



## Moyano Jonathan (Sep 25, 2010)

Por mi lado acá dejo manual introducción a AVRstudio + WinAVR


----------



## Moyano Jonathan (Sep 28, 2010)

Alguien sabe de alguna librería en C  de GCC  - WINAVR para I2C ??


----------



## R-Mario (Sep 28, 2010)

Pues que crees que va a ser dificil que la encuentres porque en general depende mucho del dispositivo que vallas a usar y no creo que nadien quiera hacer librerias para cada componente que utilice i2C imaginate, mejor deberias darle una leida al protocolo en la misma hoja de datos del componente que quieres utilizar, yo tengo una que hice nomas para probar un circuito que controla 8 leds y utiliza i2c dejame buscarla porque entre tantos gigas de informacion que tengo no se donde este sale


----------



## Moyano Jonathan (Sep 28, 2010)

Creo que encontré la librería junto a muchas otras muy interesantes como control de GLCD,Decodificacion de protocolo NMEA, RC5, etc....en cuanto la pruebe pongo mis resultados.


----------



## R-Mario (Sep 28, 2010)

Pasalas para checarlas digo luego aprendes buenos "codigos"


----------



## Moyano Jonathan (Sep 29, 2010)

Te paso el link:  http://www.mil.ufl.edu/~chrisarnold/components/microcontrollerBoard/AVR/avrlib/docs/html/index.html


----------



## R-Mario (Sep 29, 2010)

Ya estas, le voy a dar una buena leida gracias por el aporte


----------



## Moyano Jonathan (Sep 29, 2010)

Hay muchisimas librerías , con muchas funciones implementadas...solo hay que ver como trabajan e implentarlas.


----------



## Moyano Jonathan (Sep 29, 2010)

Hola a todos , bueno luego de dar algunas vueltas y hacer varios ejemplos con WInAVR me embarque en la tarea de hacer funcionar una memoria eeprom 24C256, con resultados por el momento negativos.
Quisiera saber si alguien ha tenido experiencias con el bus I2C por software.
Les dejo la librería y el programa para un ATTINY2313.
1º - La librería I2C:

```
/*************************************************
 LIBRERÍA DE CONTROL PARA BUS I2C EN MODO MASTER.
 PROGRAMADOR: Moyano Jonathan.
 Fecha: Setiembre del 2010.
 Compilador: WinAVR 
 ************************************************/

// Acá definimos el puerto y los pines involucrados en la comunicación I2C.
// Puerto SCL.
#define SCLPORT    PORTD    // PUERTO RELOG I2C.
#define SCLDDR    DDRD    // DIRECCIÓN PUERTO RELOG.
// Puerto SDA.
#define SDAPORT    PORTD    // PUERTO DATOS I2C.
#define SDADDR    DDRD    // DIRECCIÓN PUERTO DATOS.
#define SDAPIN    PIND    // PUERTO DE ENTRADA DE DATOS.
// Asignaciones de pines.
#define SCL    PD4     // PUERTO DE RELOG SCL I2C.
#define SDA    PD3    // PUERTO DE DATOS SDA I2C.

// i2c 1/4 bit delay. (5uS)
#define QDEL    asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop");
// i2c 1/2 bit delay. (10uS)
#define HDEL    asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop");

#define I2C_SDA_LO      SDAPORT &= ~(1<<SDA); // Pone la línea SDA, en bajo nivel.
#define I2C_SDA_HI      SDAPORT |= 1<<SDA;    // Pone la línea SDA, en nivel alto.

#define I2C_SCL_LO      SCLPORT &= ~(1<<SCL); // Pone la línea SCL, en bajo nivel.
#define I2C_SCL_HI      SCLPORT |= 1<<SCL;    // Pone la línea SCL, en nivel alto.

#define I2C_SCL_TOGGLE  HDEL I2C_SCL_HI HDEL I2C_SCL_LO
#define I2C_START       I2C_SDA_LO QDEL I2C_SCL_LO      // Condición de START.
#define I2C_STOP        HDEL I2C_SCL_HI QDEL I2C_SDA_HI HDEL // Condición de STOP.

// Definición de funciones:

// Iniciamos las comunicaciones.
static void i2c_start(void); 

// Paramos las comunicaciones;
static void i2c_stop(void);

// Enviamos datos por el bus I2C.
int i2c_write(int data);

// Recibimos datos por el bus I2C.
int i2c_read(void);
/*****************************************************************************************/

// FUNCIONES PARA TRABAJAR CON EL BUS I2C.
static void i2c_start(void) {
 I2C_START
 }
static void i2c_stop(void) { 
 I2C_SDA_LO // Limpiamos la línea de datos.
 I2C_STOP
 }

int i2c_write(int data) {
 
  uint8_t mascara = 0x80;
  uint8_t i = 8;
   
    while(i--) {

        if(data & mascara)  //Si es 1.....
         
         I2C_SDA_HI // Pone a nivel alto la salida SDA.
         else       // Si no es 1....
         I2C_SDA_LO // Pone a nivel bajo la salida SDA.
       
      mascara >>= 1;
           
       I2C_SCL_TOGGLE // Cambio de flanco en el pin SCL.
   }
  
 I2C_SDA_HI           // Dejamos SDA en alto.
 SDADDR &= ~(1<<SDA);    // Configuramos SDA como entrada.        
 HDEL                 // Esperamos 10us.
 I2C_SCL_HI          // Dejamos SCL en alto.

      i = SDAPIN & (1<<SDA);    // Obtenemos el bit ACK.

 HDEL                 // Esperamos 10us.
 I2C_SCL_LO          // Dejamoslínea SCL en bajo.
 SDADDR |= 1<<SDA;    // Configuramos nuevamente SDA como salida.
 HDEL                 // Esperamos 10us.
 return i;     // Retornamos el valor de ACK. 

          }
     
int i2c_read(void) {

  uint8_t datos = 0;
  uint8_t i = 8;

   I2C_SDA_HI          // Dejamos SDA en alto.
   SDADDR &= ~(1<<SDA);     // Configuramos SDA como entrada.    

   while (i--)
    {
        HDEL                 // Esperamos 10us.
        I2C_SCL_HI         // Dejamos SCL en alto.
        datos <<= 1;         // Rotamos el resultado a la izquierda.
        if (SDAPIN & (1<<SDA))
            datos += 1;      // Si hay un uno en la línea de datos lo agregamos
                             // al arreglo.

        HDEL                 // Esperamos 10us.
        I2C_SCL_LO           // Dejamoslínea SCL en bajo.
    }

   SDADDR |= 1<<SDA;    // Configuramos nuevamente SDA como salida.
   I2C_SCL_TOGGLE       // Cambio de flanco en el pin SCL. 
   I2C_SDA_HI           // Dejamos SDA en alto.
   return datos;      // retornamos con el dato leido.
}
```
y 2º el programa que implementé...me compila bien pero no me está funcionando , en la salida siempre obtengo 0xFF ....


```
/*************************************************
 PROGRAMAS DE EJEMPLO PARA EL ATTINY2313 - 20PU.
 PROGRAMADOR: Moyano Jonathan.
 Fecha: Setiembre del 2010.
 Programa: Graba 4 datos en una memoria EEPROM 24CL256. Luego
           lee las memorias y muestra los valores guardados en 
           el puerto B.
 Cristal:  8Mhz.
 Programador: PK2-ISP.
 ************************************************/
#include <avr/io.h>     // Definiciones de hardware.
#include <util/delay.h> // Librería para generar retardos.
#include <util/i2c_software.c> // Librería para el manejo de I2C por 
                               // software.

void init_ext_eeprom()
{
   SDAPORT |= 1<<SDA;    // Pone la línea SDA, en nivel alto.
   SCLPORT |= 1<<SCL;    // Pone la línea SCL, en nivel alto.
}

void write_ext_eeprom(uint32_t address, uint8_t valor)
{
   int status;
   i2c_start();
   i2c_write(0xa0);
   i2c_write((address>>8)&0x1f);
   i2c_write(address);
   i2c_write(valor);
   i2c_stop();
   i2c_start();
   status=i2c_write(0xa0);
   while(status==1)
   {
      i2c_start();
      status=i2c_write(0xa0);
   }
}

uint8_t read_ext_eeprom(uint32_t address) {
        uint8_t _datos;
        i2c_start();
        i2c_write(0xa0);
        i2c_write((address>>8)&0x1f);
        i2c_write(address);
        i2c_start();
        i2c_write(0xa1);
        _datos =i2c_read();
        i2c_stop();
        return(_datos);
}
int main(void)
{
    DDRB = 0x1F;  // PB0-PB4 salidas.
    PORTB = 0x00; // Ponemos todas las salidas a 0. 

    uint8_t k; // Variable auxiliar.

        init_ext_eeprom();
        write_ext_eeprom(0x01,0x01);
        write_ext_eeprom(0x02,0x02);
        write_ext_eeprom(0x03,0x03);
        write_ext_eeprom(0x04,0x04);
    
    while(1) // Loop infinito.
    {
        for(k=0; k<=4; k++){
        PORTB = read_ext_eeprom(k);
        _delay_ms(250);
    }
}
}
```


----------



## R-Mario (Oct 1, 2010)

Nadien que te heche una mano??? mira no es mala onda pero tengo tres examenes esta semana y estoy dandolo duro a lo microcontroladores, PDS y espacio de estado, pero igual ahora que pasen le doy una leida a tu codigo, por lo mientras no se si ya lo tengas pero bueno igual y no te dejo algo de informacion sobre el protocolo i2C en español
http://www.clubse.com.ar/download/pdf/notasrevistas16/nota01.htm


----------



## Moyano Jonathan (Oct 3, 2010)

Ahi me están brindando mucha info en AVR freaks , por como se ven las cosas está un poco complicado el asunto este...pero de a poco se va sacando.


----------



## Moyano Jonathan (Oct 3, 2010)

Acá les dejo el código arreglado y funcionand para que todos lo puedan aprovechar. Está en AVR GCC compilado  con WINAVR.

```
/*************************************************
 PROGRAMAS DE EJEMPLO PARA EL ATTINY2313 - 20PU.
 Fecha: Setiembre del 2010.
 Programa: Guarda 1 dato en la EEPROM y luego lo lee.
 Cristal:  8Mhz.
 Programador: PK2-ISP.
 ************************************************/
#include <avr/io.h>
#include "i2cmaster.h"
#include <util/delay.h>

char i,status;

int main(void)
{
    DDRB = 0x07;  // PB0-PB2 salidas.
    PORTB = 0x00; // Ponemos todas las salidas a 0. 
    
    i2c_init(); // Iniciamos I2C.
    
    i2c_start_wait(0xA0+I2C_WRITE);
    i2c_write(0x00); // Dirección ALTA.
    i2c_write(0x01); // Dirección BAJA.
    i2c_write(0x05); // Datos.
    i2c_stop(); 
    
    
    i2c_start_wait(0xA0+I2C_WRITE);
    i2c_write(0x00); // Dirección ALTA.
    i2c_write(0x01); // Dirección BAJA.
    
    status = i2c_rep_start(0XA0+I2C_READ);
    if(status != 0) {
      i2c_stop();
        PORTB = 0x04;
         _delay_ms(2000);
           }
             else
  
    i = i2c_readNak(); // Leemos dato.
    PORTB = i;
    _delay_ms(2000);
    i2c_stop();
}
```


----------



## StrySG (Oct 4, 2010)

Te agradezco que te hayas tomado el tiempo de hacer funcionar este codigo para i2c y además que todo este comentado asi es mas facil de entender... esta es una buena solucion en micros que no tengan i2c por hardware, también debo agradecerte por el tuto que subiste del manejo del AVR studio con AVRGCC , hasta el momento solo había compilado en WINAVR, pero gracias a ese tutorial me inicié en AVR studio.

Aparte tengo una pequeña duda, no se si utilizaste el grabador USBASP, bueno este es de programación serial y según las hojas de datos, para grabar un micro con cristal externo con grabadores seriales se debe introducir una señal de clock externa al pin XTAL1. el hecho es que nunca lo he probado, No sabes si  ¿realmente se puede grabar con el USBASP un micro configurado en cristal externo...? o por intentarlo el micro puede quedar -ingrabable- para programadores seriales...


----------



## Moyano Jonathan (Oct 4, 2010)

> Aparte tengo una pequeña duda, no se si utilizaste el grabador USBASP, bueno este es de programación serial y según las hojas de datos, para grabar un micro con cristal externo con grabadores seriales se debe introducir una señal de clock externa al pin XTAL1. el hecho es que nunca lo he probado, No sabes si ¿realmente se puede grabar con el USBASP un micro configurado en cristal externo...? o por intentarlo el micro puede quedar -ingrabable- para programadores seriales...



Yo utilizo el Pickit2 para grabar mis micros, es mucho más facil que armar un programador dedicado.
El USBasp , tiene algunos bug's no muy sustanciales pero los tiene. Que es lo que pasa ??
1º - En caso de configurar mal el bit SPIEN de los fuses de cualquier AVR, el micro queda inutilizable para las prácticas salvo que tengas un STK500 o un HVPROG paralelo de alto voltaje con el que podés recuperar el micro para seguirlo trabajando con ISP.

2º - En caso de que la velocidad configurada en los fuses no coincidad con el cristal conectado al micro, el mismo se vuelve inestable y no sincroniza. Por lo tanto el micro te queda inutilizable ( por carne propia lo he visto ).

3º - Lo que tenés que hacer antes de grabar cualquier programa en un micro AVR es ver lo siguiente.

a - PRIMERO QUE NADA configurar bien los fuses para el cristal que vallas a usar, luego de esto conecta el cristal al micro y luego el programador. En tu ventana de programación graba los fuses antes configurados.
Una vez hecho esto ya tenés sincronizado el grabador y el micro.

b -  En tu programa declara la frecuencia de clock utilizada (caso de usar WINAVR solo) o si trabajas con el AVRstudio , desde las configuraciones del menu pone la frecuencia de trabajo.

c - luego de tener la Frecuencia configurada , compilas tu código y grabás el microcontrolador con tu programa.

Esos pasos te van a asegurar un buen funcionamiento.

En caso de trabajar en WINAVR...te recomiendo que uses directamente el IDE de winavr y compiles con MAKEFILES, es menos laborioso.


----------



## COSMICO (Oct 4, 2010)

Hola amigo moyano y StrySG.
ustedes que saben del tema, que tal es el BASCOM AVR. y creo que mikrobasic tambien los 
maneja..algun tuto sobre esto existe por la red..


----------



## Moyano Jonathan (Oct 4, 2010)

BASCOM está bueno , pero su optimización del código no es del todo buena. Algo para tener en cuenta al igual que con Mikrobasic PRO para AVR es que disponen de muchas librerías.


----------



## StrySG (Oct 5, 2010)

Bueno gracias por la info acerca del USBASP, creí que este era el grabador ideal dado su relativa sencillez.
Pero viendo esto de los fuses... dado que ya bloqué un micro via programación serial por usar fuses configurados en crsital externo y otro micro mas pequeño quedó bloqueado por habilitar el fuse *-RSTDSBL-*. 
Mejor me limitaré a configurar los Micros con oscilador RC interno, aparte me parece interesante este grabador Pickit2 no había planeado construirlo, pero dado sus ventajas creo que comenzare a conseguir los materiales para armarlo...


----------



## R-Mario (Oct 5, 2010)

Hola StrySG a mi ya me paso eso de perder sincronia con el oscilador en los AVR pero se soluciona facil con el 555, ademas si usaste PonyProg el mismo no te deja deshabilitar la programacion serial por lo que todo mal que le puedas hacer al micro queda en solo la perdida de sincronia que repito se puede solucionar con el 555


----------



## Moyano Jonathan (Oct 5, 2010)

@benito2312 ese metodo del 555 lo había leido antes, sabés como se hace ??


----------



## mamun (Oct 7, 2010)

Hola COSMICO, ami se me hace muy bien programar con el BASCOM-AVR, igual estoy aprendiendo C te dejo una pagina donde puedes descargar informacion de Bascom en español, pero es para el 8051 es casi similar al AVR igual te puede servir: http://www.dinastiasoft.com.ar/Software.htm
tambien hay algunos manuales para el AVR son fotocopiados pero no recuerdo la pagina buscalos en TARINGA.

Saludos


----------



## COSMICO (Oct 7, 2010)

Gracais amigo mamun..


----------



## Moyano Jonathan (Oct 8, 2010)

Acá les dejo el código para manejar dispositivos mediante SPI usando la USI del ATtiny2313:

```
/***************************************************************** 
   Fecha: Setiembre del 2010.
   Cristal:  4Mhz.
   Programador: Moyano Jonathan
 *****************************************************************/
#include <avr/io.h>     // Definiciones de hardware.
#include <util/delay.h>

// Declaramos funciones utilizadas.
void    spi_init(uint8_t velocidad);  // Inicia el bus SPI y setea velocidad de trabajo. 
uint8_t spi_write(uint8_t dato);      // Escribe un dato en el bus SPI.

// Definimos los pines para la comunicación SPI.
#define SDI PINB6  
#define SDO PINB5  
#define SCK PINB7  

void spi_init(uint8_t velocidad) {

 if (velocidad==1) { // Si velocidad = 1, la velocidad del bus es máxima.
        PORTB |= (1<<SDO)|(1<<PINB4);       
        DDRB = (1<<SCK)|(1<<SDI)|(1<<PINB4);
        USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USICLK);
        PORTB &= ~(1<<PINB4);    // Habilitamos esclavo.
    } else { // Si velocidad es 0....
        PORTB |= (1<<PINB4);     // Deshabilitamos esclavo.
        DDRB &= ~((1<<SCK)|(1<<SDO)|(1<<SDI)|(1<<PINB4));
        USICR = 0;
    }
}

uint8_t spi_write(uint8_t dato) {

 USIDR = dato; // Carga el dato a enviar.
    USISR = (1<<USIOIF);
    do {
        USICR = (1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC); // Configuramos la USI.
    } while ((USISR & (1<<USIOIF)) == 0); // En caso de que termine de enviar el dato, retorna el valor
                                           // De USIDR.
    return USIDR;    
}
```


----------



## StrySG (Oct 8, 2010)

> Acá les dejo el código para manejar dispositivos mediante SPI usando la USI del ATtiny2313:


Una vez más gracias por la info,  me agrada mucho que coloques códigos con comentarios asi son fáciles de entender...




> eso de perder sincronia con el oscilador en los AVR pero se soluciona facil con el 555


Una vez intente hacerlo con un oscilador en base a AO's pero no funcionó, pls será que puedes darnos algun Link...


----------



## Moyano Jonathan (Oct 8, 2010)

Bueno les dejo el código para probar el uso del PWM en el timer 0 del ATtiny2313:

```
/*************************************************
 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


----------



## R-Mario (Oct 11, 2010)

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


----------



## Moyano Jonathan (Oct 11, 2010)

@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 !


----------



## ADUART (Oct 18, 2010)

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


----------



## R-Mario (Oct 18, 2010)

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


----------



## R-Mario (Oct 23, 2010)

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


----------



## Moyano Jonathan (Oct 24, 2010)

Bueno acá les dejo un programa para probar el funcionamiento de la USART del ATtiny2313.

```
/*************************************************
 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


----------



## R-Mario (Oct 24, 2010)

Chale y que nadien me va ayudar


----------



## Moyano Jonathan (Oct 24, 2010)

Te ayudaría pero no he trabajado con el TWI...acá en el hilo postee la librería para trabajar con I2C por software y funciona muy bien


----------



## R-Mario (Oct 24, 2010)

NI modo voy a seguir buscando


----------



## Moyano Jonathan (Oct 24, 2010)

Planteá tu pregunta en AVRfreaks


----------



## R-Mario (Oct 24, 2010)

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


----------



## mamun (Oct 25, 2010)

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.


----------



## R-Mario (Oct 25, 2010)

mamun dijo:


> 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


----------



## marlithjdm (Oct 29, 2010)

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.... 

*


----------



## R-Mario (Oct 29, 2010)

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,


----------



## Moyano Jonathan (Oct 30, 2010)

@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


----------



## marlithjdm (Nov 1, 2010)

....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....


----------



## Moyano Jonathan (Nov 1, 2010)

@marlithjdm te recomiendo que investigues en los foros de AVRfreaks ahi tienen proyectos muy interesantes y te pueden ayudar con tu problema, es más tiene gente que se dedica hace mucho tiempo a los AVR y la tienen re clara....


----------



## marlithjdm (Nov 1, 2010)

Hola Jonathan gracias por la informacion, voy a revisar el foro....


----------



## mamun (Nov 2, 2010)

Hola a todos,
No voy a discutir si es mejor el Bascom, lo que si se es que puedes hacer cosas muy rapidas con BASCOM-AVR, lenguaje C es universal es por eso que lo estoy aprendiendo a usar.

Revisa los ejemplos que hay en Bascom-Avr, pero sobre RS485.

Saludos...


----------



## SPECTR068 (Nov 7, 2010)

hola primero tienes que enviar la direccion a la cual deseas acceder y luego iniciar nuevamente la secuencia pero esta ves de lectura.. asi:

para la escritura la cual deseas leer
inicio de comunicacion--> direccion esclavo+w  -->  direecion la cual deseas leer --> stop

para la lectura del dato que deseas leer
inicio de comunicacion --> direccion esclavo +R --> lees el dato que te envio -- >  stop


----------



## R-Mario (Nov 11, 2010)

Hace rato que no escribia, porque ando muy ocupado, pero les cuento que si pude hacer funcionar la TWI del atmega con una eeprom, el problema estaba en que la memoria necesita enormes 1mS para grabar los datos, por eso solo guardaba datos en forma salteada y lo de que no podia leer era porque la interfas i2C dice que el bus debe permanecer libre durante al menos 5uS por eso tampoco lograba leer los datos, ja bueno asi se aprende practicando practicando y practicando y porque no hasta hechando a perder jejeje sale haber cuando vuelvo a escribir


----------



## pou (Dic 30, 2010)

hola, dejo unas preguntillas rapidas 

-AVR usa nucleo ARM??

-hay micros de AVR de mas de 8 bits?

-por lo que e leido, el juego de instrucciones del micro depende de la arquitectura (ARM o lo que sea) Entonces todos los AVR tienen las mismas instrucciones que otros micros aunque sean de distinto fabricante?

-de ARM que marcas preferis?

bueno saludos


----------



## Meta (Dic 30, 2010)

pou dijo:


> hola, dejo unas preguntillas rapidas
> 
> -AVR usa nucleo ARM??
> 
> ...




Feliz Navidades 2010.


----------



## dukex (Feb 15, 2011)

hola a todos, yo utilizo el codevisioAVR para programar en C este tambien permite programar en ASM, pero encontré este Macroassembler Grafico visual (editor, compiler, simulator, programmer) me parece muy interesante además gratis"creo" http://algrom.net/  alguien ha escuchado de él??

saludos


----------



## Moyano Jonathan (Feb 15, 2011)

Meta , en realidad si existen microcontroladores atmel con núcleo ARM fijate en la página de ATMEL ahí en las versiones de 32 bits, tiene una línea completa con núcleo ARM.



> hola a todos, yo utilizo el codevisioAVR para programar en C este  tambien permite programar en ASM, pero encontré este Macroassembler  Grafico visual (editor, compiler, simulator, programmer) me parece muy  interesante además gratis"creo" http://algrom.net/  alguien ha escuchado de él??
> 
> saludos



Es freeware ?

En caso de que no lo sea...hay una herramienta profesional específica llamada Flowcode pro para AVR que se programa mediante diagramas de flujo.


----------



## Meta (Feb 15, 2011)

Es verdad, hasta el viejo.


----------



## dukex (Feb 15, 2011)

Moyano Jonathan dijo:


> Meta , en realidad si existen microcontroladores atmel con núcleo ARM fijate en la página de ATMEL ahí en las versiones de 32 bits, tiene una línea completa con núcleo ARM.
> 
> 
> 
> ...



Si,  ya averigué.... es freeware!.  dejo la ruta a la página traducida y una ruta de descarga del programa

página traducida:
http://translate.google.com.ar/translate?u=http://algrom.net/&sl=en&tl=es&hl=es&ie=UTF-8

programa:
http://algrom.net/AB544.exe

saludos.


----------



## mamun (Mar 3, 2011)

Buen dia a Todos,

He estado investigando sobre los RTOS, y encontre uno que me ha parecido muy interesante y facil de utilizar les dejo el link para quien este interesado.
Parece que fue creado para PIC pero ya hasido portado para los AVR's, no requiere mucho recursos en ram.

http://www.pic24.ru/doku.php/en/osa/ref/download/intro

Saludos...


----------



## mems (Abr 25, 2011)

hola.........
 me preguntaba si podrías subir  algún pdf sobre la sección del ADC y la USART del atmega 32
en español, te lo agradecería mucho.
gracias.


----------



## xxxxxxxxxx (Abr 25, 2011)

mems dijo:


> hola.........
> me preguntaba si podrías subir  algún pdf sobre la sección del ADC y la USART del atmega 32
> en español, te lo agradecería mucho.
> gracias.



Que tal bueno pues en la red hay manuales del atmega pero te aconsejo que revisees manuales en ingles para que te vallas falmiliarizando, creo que tengo manuales en espanol deja y reviso y te los mando, que tienes que hacer con el adc y la usart?
 SALUDOS


----------



## mems (Abr 26, 2011)

ok 
pues es solo quiero documentarme un poco, ya que  llevo una materia en la que es necesario aprender a manejar el atmega.

gracias.....tomare en cuenta tu consejo.


----------



## xxxxxxxxxx (Abr 29, 2011)

mems dijo:


> ok
> pues es solo quiero documentarme un poco, ya que  llevo una materia en la que es necesario aprender a manejar el atmega.
> 
> gracias.....tomare en cuenta tu consejo.



k tal pues aki te dejo una idea de lo que la usart, cualquier cosa me escribes, espero que te sirva


El ATmega164P/324P/644P tiene dos USART’s, USART0 y USART1.
La funcionalidad para todos los USART’s es descrito a continuación, la mayoría
de registros y bits de referencia en esta sección son escritas en forma general. La
letra minúscula “n” reemplaza el número USART.


La Generación lógica de reloj genera la base de reloj para la Transmisión y
Recepción. El USARTn soporta cuatro modos de operación de reloj: Asincrónico
Normal, Doble velocidad Asincrónica, Maestro Sincrónico y Modo esclavo
Sincrónico. El bit UMSELn en USART Control de Registro de Estado C
(UCSRnC) selecciona entre operación Asincrónica y Sincrónica. Doble
velocidad (solo modo asíncrono) es controlada por el U2Xn encontrado en el
registro UCSRnA. Cuando se usa modo síncrono (UMSELn = 1), el Registro de
Dirección de Datos para el pin XCKn (DDR_XCKn) controlan si la fuente de
reloj es interna (modo Maestro) o externa (modo esclavo). El pin XCKn es solo
activado cuando se usa modo Síncrono.


Descripción de la Señal:
txclk Reloj de Transmisión (Señal Interna).
rxclk Reloj Receptor (Señal Interna).
xcki Entrada desde el pin XCK (Señal Interna). Usada para operación Esclavo
sincrónica.
xcko Salida desde el pin XCK (Señal Interna). Usada para operación Maestro
sincrónica.
fOSC Frecuencia del pin XTAL (Sistema de Reloj).


Generación del Reloj Interno- Generador de Velocidad de transmisión
en Baudios
Generación Interna de Reloj es usada por los modos de operación Maestro
síncrono. La USART Registro de Velocidad de Baudios (UBRRn) y el contador-
Bajo conectados a esta función como prescalador programable del registro de
velocidad de Baudios. El contador-bajo, corriendo como sistema de reloj (fosc),
es cargado con el valor UBRRn cada vez que el contador ha contado
descendente hasta cero o cuando el Registro UBRRln es escrito. El reloj es
generado cada vez que el contador se hace cero. Este reloj es el generador de
velocidad de transmisión en Baudios a la salida (= fosc/(UBRRn+1)). La
transmisión divide el generador de velocidad de transmisión en Baudios a la
salida por 2, 8 o 16 dependiendo del modo. El generador de velocidad de
transmisión en Baudios a la salida es usada directamente por el reloj receptor y
las unidades de recuperación de datos. Sin embargo, la recuperación unitaria
usa la (state machine) que usa 2, 8 o 16 dependiendo del modo uno por la
condición del los bits UMSELn, U2Xn yDDR_XCKn.

Doble Velocidad de Operación (U2Xn)
La proporción transferida puede ser duplicada por la configuración del bit
U2Xn en UCSRnA. Configurando solo este bit tiene efecto para la operación
asíncrona. Poner este bit a cero cuando se usa una operación síncrona.
Configurando este bit reduciría la división de la proporción de baudios
dividida para 16 a 8, efectivamente doblando la proporción de transferencia
para comunicación asíncrona. Note sin embargo que al Receptar en este caso
solo se usa la mitad de números de ejemplo (Reducido desde 16 a 8 ) para datos
de ejemplo y tiempo de recuperación, y además a mas exactas proporciones en
baudios y sistemas de reloj son requeridas cuando este modo es usado. Para la
Transmisión no hay downsides.


3 Reloj externo
El reloj externo es usado para el modo de operación Esclavo síncrono. La
entrada de Reloj Externo desde el pin CCKn es mostrada por la sincronización
del registro para minimizar la oportunidad de una mayor estabilidad. La salida
desde el la sincronización del registro es minimizada al perder la oportunidad.
La salida desde el registro sincronizado pasa luego a través del detector de
flanco antes que pueda ser usada para la Transmisión y Recepción. Este proceso
introduce dos periodos de reloj del CPU demorados y por consiguiente la
máxima frecuencia de reloj externo XCKn es limitada por la siguiente ecuación:
Note que la fosc depende de la estabilidad de la fuente del sistema de reloj.
Esto es recomendado al agregar más flancos para evitar posibles pérdidas de
datos en las variaciones de frecuencia.


Operación de Reloj Síncrona
Cuando el modo síncrono es usado (UMSELn = 1), el pin XCKn seria usado
como entrada de reloj (Esclavo) o Salida de reloj (Maestro). La dependencia
entre el flanco del reloj y los datos muestreados o datos cambiados es lo mismo.
El principio básico es que la entrada de datos (en Rn) es muestreada a la
oposición del flanco del reloj XCKn del flanco de la salida (Tn) es oportuno.
El bit UCPOLn en UCRSC selecciona cual flanco de reloj XCKn es usada para
probar los datos y para cambiar los datos. Cuando UCPOLn es cero los datos
serán cambiados al flanco de subida XCKn y probados en el flanco de bajada
XCKn y probados en el flanco de subida XCKn.

Formato de Trama
La Trama serial es definida para ser una característica de bits de datos con
sincronización de bits (Bits que enmiendan y terminan), y opcionalmente la
paridad del bit para chequear errores. USART acepta en total 30 combinaciones
de los siguientes formatos de trama:
• 1bit empieza
• 5, 6, 7, 8 o 9 bits de datos
• bit de paridad impar
• 1 o 2 bits de parade
La trama comienza con el bit de comienzo, seguido por el bit de dato menos
significativo. Luego el siguiente bit de dato, sube a un total de nueve, teniendo
éxito, finalizando con el bit más significante. Si es habilitado, la paridad del bit
es insertada después de los bits de datos, antes de los bits de parada. Cuando
una trama es completada es transferida, esta puede ser direccionada seguida
por la nueva trama, o la línea de comunicación puede ser un estado en alto.
Formatos de Tramas
El formato de la trama usado por la USART es uno por el USCZn2:0, UPMn1:0
y los bits USBSn en UCSRnB y UCSRnC. La Recepción y transmisión usa la
misma configuración. Note que cambiando la configuración de cualquiera de
estos bits puede dañar la comunicación tanto de recepción como de
Transmisión.
El tamaño de los caracteres de los bits de USART (UCSZn2:0) seleccionan el
número de bits de datos en la trama. Los bits del modo paridad de la USART
(UPMn1:0) habilita y pone el tipo de paridad del bit. La selección entre uno o
dos bits de parada es hecha por el bit de paro de la USART seleccionando el bit
(USBSn). La Recepción ignora la segunda parada del bit. FE (Error de trama)
será solo detectada en los casos cuando el primer bit de parada es cero.


1 Cálculo del bit de Paridad
El bit de paridad es calculado utilizando una or-exclusiva en todos los bits de
datos. Si la paridad impar es usada, el resultado de la or exclusiva es invertido.
La relación entre el bit de paridad y los bits de datos es el siguiente:
Peven Bit de paridad usando el nivel de paridad
Podd Bit de paridad usando paridad impar
Dn bit de datos en el carácter n
Si son usados, el bit de paridad es localizado entre el último bit de datos y el
primer bit de parada de la trama serial.


Inicialización del USART
La USART tiene que ser inicializada antes de que cualquier comunicación
pueda tener lugar. El proceso de inicialización normalmente consiste de
configuraciones del tiempo en baudios, el formato de configuración de la trama
y habilitación de la Transmisición o la Recepción dependende del uso. Para
manejar la operación de interrupción USART, la Bandera de Interrupciones
Globales debería ser puesta en cero y las interrupciones USART deberían ser
deshabilitadas.
Antes de hacer la re inicialización con el tiempo en baudios cambiado o el
formato de trama, seria seguro que no hay transmisión durante el periodo en el
que los registros son cambiados. La Bandera TXCn puede ser usada para
chequear que transmisión ha sido completada en todas las transferencias, y la
bandera RXc puedan ser usadas para chequear que no hay lectura de datos en
la recepción del buffer. Note que la bandera TXCn puede ser puesta en cero
antes de cada transmisión (antes que UDRN es escrito) si esto es usado para
este propósito. La siguiente USART inicializa con un código simple mostrado
en asembler y en C que son equivalentes en funcionamiento. Los ejemplos
asumen una operación asíncrona sin la habilitación de interrupciones y
arreglando el formato de trama. La velocidad en baudios es dada como
parámetro de función. Para el código asembler, el parámetro de velocidad en
baudios es asumido para ser guardado en los registros r17:r16.


Transmisión de Datos – La transmisión USART
La transmisión del USART es habilitada por la configuración de habilitación del
bit de transmisión (TXEN) usada en el registro UCSRnB. Cuando la
transmisión es habilitada, la normal operación del pórtico del pin Tn es
sobrepuesto por el USART y dada la función como la Transmisión de salida
serial. La velocidad en Baudios, modo de operación y formato de trama seria
instalada una vez ante de cualquier transmisión. Si la operación síncrona es
usada, el reloj en el pin XCKn seria sobrepuesto y usado como reloj de
transmisión.


Enviando Tramas con 5 hasta 10 Bits de datos
La transmisión de datos es inicializada por la carga del buffer de transmisión
con el dato a ser transferido. La CPU puede cargar el buffer de transmisión por
la escritura en la localidad de E/S UDRn. El buffer de datos en la transmisión
seria movido al Register cuando es leído y enviado una nueva trama. El registro
movido es cargado con el nuevo dato si este no envía la transmisión o
inmediatamente después del último bit de parada de la trama previa es
transmitida. Cuando el registro movido, es cargado con un nuevo dato, esto
transferiría una trama completa a la velocidad dada por el registro de baudios,
bit U2Xn o XCKn dependiendo del modo de operación.
Los siguientes código de ejemplo muestran la simple USART transmitiendo
funciones basadas en el registro de datos vació de la bandera (UDRn). Cuando
se usa tramas con menos que ocho bits, la mayoría bits significativos escritos en
el UDRn son ignorados. El USART tiene que ser inicializada antes que la
función pueda ser usada. Para el código asembler, el dato a ser enviado se
asume que ha sido guardado en el registro R16.
La función simplemente espera la transmisión del buffer a ser limpiada por el
chequeo de la bandera UDREn. Antes de ser cargada con el nuevo dato a ser
transmitido. Si el Registro de Datos es limpiado la interrupción es utilizada, la
rutina de interrupción escribe el dato en el buffer.

Envió de Tramas con 9 bits de datos
Si son usados 9-bits (UCSZn = 7), el noveno bit seria escrito en el bit TXB8 en
UCSRnB antes de que el byte en bajo del carácter es escrito a UDRn. El siguiente
código muestra la función de transmisión a 9 bits. Para el código asembler, el
dato a ser enviado es asumido al ser guardado en los registros R17:R16.
El noveno bit puede ser usado para indicar la dirección de la trama usando un
multi procesador en modo de comunicación o por otro protocolo del manual
como para el ejemplo de sincronización.


----------



## microtronic (May 20, 2011)

bueno amigos aqui les dejo un archivo de excel para la configuracion de fuses, lo baje de la red no me acuerdo de donde espero sea de utilidad..


----------



## denis92 (May 23, 2011)

hola como hago para realizaer un tema nuevo sobre una consulta que tengo)??


----------



## diego666 (Jun 20, 2011)

Hola tengo estos videos en los cuales explico algunas aplicaciones con microcontroladores Atmega espero que te sirva para tu manual...


----------



## microtronic (Jun 21, 2011)

Gracias amigo buen tuto... y lo mejor en c y en codevision  !!!
saludos


----------



## dukex (Jun 22, 2011)

Si, estoy de acuerdo, es un excelente aporte.

Ojalá mas personas se cambien a AVR con esta información en español.


----------



## Meta (Jul 10, 2011)

dukex dijo:


> Si, estoy de acuerdo, es un excelente aporte.
> 
> Ojalá mas personas se cambien a AVR con esta información en español.



Para ello debe haber mucho interés como los PIC.He visto en lavadores usar AVR y más aparatos, ahora están usando en Barcelona, www.salicru.com SAI o UPS que incorporan AVR también. Lo se porque ahora estoy trabajando de técnico sobre reparación de SAI o UPS pequeños y industriales tipo mueble que cuestan cada uno 22.000 € y son peligrosos.

Eso si, aunque sea un poco, cada vez noto interés por él. Es más barato y todo.

Saludo.


----------



## alepusto (Jul 18, 2011)

Los PIC han tenido un gran mercado en países de habla hispana, primordialmente por la documentación que se encuentra en español, además según supe, su estrategia de mercadeo fue muy buena en cuanto a que ofrecieron las herramientas directamente a las universidades, junto con cursos gratuitos para aprender a utilizarlas. Pero dejando de lado el mercadeo y la publicidad, si nos vamos a analizar directamente la arquitectura, AVR es superior a la familia 16 y 18 de Microchip (32 registros conectados a ALU, instrucciones optimizadas para programación en C, frecuencia de reloj directa, lo que permite casi concluir que freq. XTAL = MIPS del microcontrolador, etc). Es cierto que es necesaria e indispensable la documentación en nuestro idioma, y probablemente esta iniciativa no venga de la misma empresa. Por eso me uno a esta causa. Sería bueno generar documentación específica sobre los periféricos más comunes (UART, SPI, TWI, ADC, etc)...


----------



## Meta (Jul 18, 2011)

¿En habla hispana o mundial?

dsPIC o PIC de 16 bits, no se si es verdad, me han confirmado gente que sabe y está por Internet que es muy, muy superior, los 16 bits frente  a los AVR de 16 bits. Los PIC32 también es superior a los 32 bits de AVR (no todos, si la mayoría), normal, los PIC32 son muy modernos.

alepusto, te faltó comentar lo que escribí arriba.

Unos dicen que los AVR son má baratos, otros que son más caros, ni idea.

En cuanto a documentación, ojalá salgan libros en Español. Aún siguen sacando a la luz libros de PIC en español y algo más moderno como este libro ya con los 16F88x. Puede que en el futuro saquen el del 16F1xx (gama mejorada).

¿Dónde están los libros en español sobre AVR?

¿Por qué no lo hacen?

Saludo.


----------



## foxil (Jul 18, 2011)

Según lo que se, todo depende de la parte comercial, ya que al ser los PIC más conocidos desde hace varios años, los distribuidores han logrado abastecerse de estos microcontroladores, a aparte que ya tiene sus contactos que les permiten obtener estos micros de una forma fácil e inmediata.
En cambio empezar a distribuir AVRs les implica buscar nuevos proveedores, a parte que algunos no solo venden los PIC si no también programadores, tarjetas de entrenamiento, libros, dan cursos, hacen proyectos para estudiantes.
Por eso es que algunos cuando escuchan AVRs, o que hay algún nuevo programador de AVRs ni caso hacen ya que eso implica perdida de dinero para ellos


----------



## Meta (Jul 18, 2011)

Estoy en un empleo de UPS o SAO ahora mismo, y la marca española (catalana, Barcelona) www.salicru.com usan componentes AVR. Mi lavadora usa AVR. Aún no he visto que usen PIC en temas comerciales como lo que dije. Por algo será.


----------



## alepusto (Jul 18, 2011)

Bueno, continuando con las comparaciones, y con la guerra santa PIC vs. AVR: Yo estoy comparando (y lo dejé claro en el anterior post) los AVR de 8 bits vs. los PIC familia 16 y 18, que también son de 8 bits. En esta comparación, ganan los AVR indiscutiblemente, en lo que a CPU se refiere. Indico nuevamente las grandes diferencias:

*32 registros conectados a la ALU*: facilitan tremendamente las operaciones lógico/aritméticas que se vayan a realizar. En los PIC16 y 18 la mayoría de isntrucciones utilizan exclusivamente el registro W.
*Instrucciones optimizadas para compiladores C*: Justamente este fue el principio por el cual se rigió el diseño del núcleo AVR. Además cuentan con instrucciones optimizadas para trabajo con formatos númericos de 32 bits.
*Sin divisor de frecuencia*: La frecuencia de reloj del núcleo AVR es la misma del cristal. Ya que la gran mayoría de instrucciones se ejecutan en un solo ciclo de máquina, se puede asumir que los MIPS (millones de instrucciones por segundo) equivalen a la frecuencia del cristal: XTAL ~ MIPS. Para PIC16 y 18, las MIPS son un cuarto de la frecuencia del cristal. Un ejemplo: si el cristal es de 16MHz, entonces el núcleo AVR ejecuta alrededor de 16 MIPS, mientras que un PIC16 o 18 ejecuta 16/4 = 5 MIPS.
*Manejo de pila*: Se tiene control total sobre la pila del dispositivo, mapeada en RAM, mientras que con los PIC 16 no se puede y con los 18 la profundidad de la pila es mínimo.
*Generación de interrupciones independientes*: Cada interrupción tiene su respectivo vector de interrupción asociado, lo que significa que la entrada a la rutina de interrupción es mucho más rápido en AVR que en PIC16 o 18. La latencia de interrupción es mayor en PIC.

Estos son a grandes rasgos, las diferencias entre los microcontroladores de 8 bits comparados.

Ahora, hablando de dsPIC, no tiene sentido compararlo directamente con una arquitectura AVR de 8 bits. dsPIC si es comparable con los ATxMega, que son de 16 y 32 bits, e incluyen un núcleo AVR además de un manejador de eventos y DMA. Cuál es mejor? Esta comparación la dejo pendiente, ya que aún no he probado estas arquitecturas, pero pronto... pronto!

Estamos de acuerdo en que una limitante es que la información de AVR en español, aunque hay mucha, la mayoría se encuentra en inglés. A mi parecer considero que en este mundo globalizado debería ser indispensable el conocimiento de este idioma, pero respeto quien prefiera documentación en español como un requerimiento de selección vital para elegir un microcontrolador. Al fin de cuentas, lo importante realmente es con qué microcontrolador esté más familiarizado el usuario. Si éste ha manejado PIC toda su vida, y es reacio al cambio, pues no hay problema, que siga con PIC, lo importante es que los proyectos que implemente sean funcionales. Pero no por eso PIC16 y 18 es mejor que AVR. Es como decir que Windows es mucho mejor sistema operativo que Linux solo por el hecho de que la mayoría lo usa.

Si vamos a afirmar que una arquitectura es mejor que otra, coloquemos los argumentos, no es hablar por hablar.


----------



## Meta (Jul 18, 2011)

Hay que cambiar de microcontrolador, no siempre el mismo. Está claro que si cambias y cambias de marca o familias, la verdad que te vuelves _mucho de aprendiz y poco de maestro_.

Si te fijas por Internet, hay microcontroladores muchísimos mejores en rendimiento y mil cosas más que los famosos y populares PIc y AVR o incluso ARM y FreeSacale.

Aquí una pequeña lista, seguro que se me escapa algunos.



ARM
Atmel
Cypress
Digi
Diodes
Ember
Energy Micro
Fairchildsemi
FreeScale
FTDIchip
Fujitsu
Hitachi
Holtek
IDT
Infineon
Intersil
JMicron
LSI
Maxim-IC
Micrel
Microchip
Microsemi
National
NEC
Nuvoton
Oki
On Semi
Parallax
Philips
Picaxe
Rabbit
Renesas
Rohm
Samsung
Semtech
Silabs
STMicroelectronics
TI
Toshiba
Winbond USA
Xmos

Ya tienes donde escoger.

Saludos.


----------



## alepusto (Jul 18, 2011)

Yo considero que lo importante no es cambiar de microcontrolador, sino seleccionar el idóneo para la aplicación que se esté diseñando. La idoneidad se define, entre otros, por los siguientes parámetros: microcontrolador fácil de conseguir en el mercado, velocidad del microcontrolador, arquitectura (8/16/32 bits), periféricos y obvio, precio, documentación, herramientas de desarrollo, etc. Claro, estoy de acuerdo en que existen muchas marcas disponibles, los PsoC de Cypress son potentes, la arquitectura ARM ha arrasado en sistemas móviles, Hitachi y su familia H8S también tiene fuerza. Los Rabbit son supremamente interesantes por el low EMI. No defiendo a AVR a capa y espada, simplemente lo comparo con PIC16 y 18, no es más. Simplemente son unas arquitecturas muy populares en microcontroladores de 8 bits.


----------



## Meta (Jul 18, 2011)

PIC y AVR son los más populares, ahora de escoger uno o otra marca o familia más bien es el que más se adapte a tus necesidades.

Si AVR no tiene libro en español (por ahora), me imagino que tendrá la lista que puse, hasta cuesta encontrar foros por cada microcontrolador o marca.

Se lleva años en traducir libros y nada, la gente esperan a que traduzca uno y vienen los demás, suele ocurrir en otras cosas con los libros.


----------



## COSMICO (Jul 18, 2011)

De todas formas, el pic de microchip tiene mas soporte en información
y es mucho mas facil construir un programador para estos; el unico problemilla
que yo le veo, es su gran sensibilidad al ruido.


----------



## alepusto (Jul 18, 2011)

Dirás más soporte en información en español, ya que para AVR consigues excesiva información pero en su gran mayoría en inglés. Insisto, me parece que el idioma no debería ser una limitante. Con respecto a los programadores para AVR, también consigues unos muy sencillos, por ejemplo si cuentas con un puerto paralelo puedes hacer un programador únicamente con un buffer 74LS244.


----------



## Meta (Jul 18, 2011)

Si el inglés usa  mucho AVR, el PIC en muchos más.


----------



## pieromoretto (Jul 19, 2011)

Saludos!
Me gustaria aprender AVR, se que una de sus principales ventajas es la rapidez de ejecucion del codigo.
Me gustaria ayudar en esta iniciativa. Puedo ayudar a traducir algun documento. 
Ya tengo experiencia con microcontroladores PIC, en assembler y C.


----------



## alepusto (Jul 19, 2011)

Excelente pieromoretto, ya se han hecho algunos aportes en este blog, la idea es continuar con esta iniciativa. Yo creo que lo ideal seria seleccionar un dispositivo AVR para traducir la hoja de datos, aunque si mal no recuerdo vi alguna vez que esta tarea ya la habian realizado para el ATmega32. Voy a verificar y estaré posteando los links. Saludos!

Y si... lo encontré! Estos documentos, aunque no los he leído completamente, me parecen una excelente iniciativa, dejo los primeros enlaces:

http://es.scribd.com/doc/7828553/Capitulo1-Introduccion-del-ATmega32-espanol
http://es.scribd.com/doc/7842803/Capitulo2-Arquitectura-del-ATmega32-espanol
http://es.scribd.com/doc/7842870/Ca...namiento-e-Instrucciones-del-ATmega32-espanol
http://es.scribd.com/doc/7842926/Capitulo4-Directivas-y-Software-Del-AVR-Studio-espanol
http://es.scribd.com/doc/7842948/Capitulo5-Sentencias-de-Control-Programacion-del-ATmega32-espanol-
http://es.scribd.com/doc/7842963/Capitulo6-Timer0-del-AVR-del-ATmega32-espanol
http://es.scribd.com/doc/19073773/Capitulo7-Timer1-del-AVR-del-ATmega32-espanol
http://es.scribd.com/doc/7843052/Capitulo8-USART-del-ATmega32-espanol
http://es.scribd.com/doc/7843072/Capitulo9-Convertidor-Analogo-Digital-del-ATmega32-espanol


----------



## Meta (Jul 19, 2011)

alepusto dijo:


> Excelente pieromoretto, ya se han hecho algunos aportes en este blog, la idea es continuar con esta iniciativa. Yo creo que lo ideal seria seleccionar un dispositivo AVR para traducir la hoja de datos, aunque si mal no recuerdo vi alguna vez que esta tarea ya la habian realizado para el ATmega32. Voy a verificar y estaré posteando los links. Saludos!
> 
> Y si... lo encontré! Estos documentos, aunque no los he leído completamente, me parecen una excelente iniciativa, dejo los primeros enlaces:
> 
> ...




Buenísimo. Cosas de estas debe estar en el primer post.


----------



## COSMICO (Jul 20, 2011)

Lastima que no se puedan descargar..O sii


----------



## alepusto (Jul 20, 2011)

Scribd te deja descargar archivos si como contraprestacion tu subes uno... entonces si podrías descargarlos, es cuestión de loggearse y subir un archivo cualquiera....


----------



## COSMICO (Jul 20, 2011)

okk gracias por el dato..


----------



## DANDY (Jul 24, 2011)

genial ya me consegui el flowcode 4 paraAVR buenisimo,necesito familiarizarme mas con los diagramas de flujo y tecnicas de programacion con el flowcode, alguien me puede guiar donde aprender?,yo hago aplicaciones en industria y ya solucione problemas de ruido con pic, pero ahora que estoy trabajando en maquinaria pesada (usa sistema automotriz 24VDC) pienso aplicar AVR


----------



## R-Mario (Jul 24, 2011)

Meta dijo:


> Estoy en un empleo de UPS o SAO ahora mismo, y la marca española (catalana, Barcelona) www.salicru.com usan componentes AVR. Mi lavadora usa AVR. Aún no he visto que usen PIC en temas comerciales como lo que dije. Por algo será.



Eso es cierto hee y es curioso en internet se habla mucho de los PIC pero casi no los he encontrado en aparatos reales, es curioso, y mira que he destapado aparatos como no tienes idea, en cambio AVR si he encontrado hace una semana destape un receptor DISH y me encontre un atmega128 jeje claro esta ya se lo quiete para darle uso, despues de todo ya no servia el dish, tambien me topo con un atmega8 en un UPS y bueno pa acabar pronto tengo 6 AVR que he sacado de aparatos, y solo un pic16f877 que saque de otro ups, pues en lo personal me gusta la flexibilidad de los avr, y no es dificil empezar con ellos y mas si trabajas en C, por ejemplo si quieres usar el CAD vas a la hoja de datos y directo a la seccion del CAD, configuras 3 o 4 registros y ya estas usando el CAD, el pic tambien me gusta y lo he usado, aunque honestamente lo unico que me agrada mas del pic que del avr es la cantidad de informacion disponible para pic, ademas la che microchip nunca me regalo un mugre microcontrolador y atmel pues tampoco jejeje



alepusto dijo:


> Yo considero que lo importante no es cambiar de microcontrolador, sino seleccionar el idóneo para la aplicación que se esté diseñando. La idoneidad se define, entre otros, por los siguientes parámetros: microcontrolador fácil de conseguir en el mercado, velocidad del microcontrolador, arquitectura (8/16/32 bits), periféricos y obvio, precio, documentación, herramientas de desarrollo, etc. Claro, estoy de acuerdo en que existen muchas marcas disponibles, los PsoC de Cypress son potentes, la arquitectura ARM ha arrasado en sistemas móviles, Hitachi y su familia H8S también tiene fuerza. Los Rabbit son supremamente interesantes por el low EMI. No defiendo a AVR a capa y espada, simplemente lo comparo con PIC16 y 18, no es más. Simplemente son unas arquitecturas muy populares en microcontroladores de 8 bits.



Eso es cierto hay quienes usan un PIC18 para hacer un mugre termometro con salida por sobre temperatura que activa un rele y una chichara y todo lo muestan en una LCD, y entonces para que tanto pic si con un C71 se puede o no?? jeje



DANDY dijo:


> genial ya me consegui el flowcode 4 paraAVR buenisimo,necesito familiarizarme mas con los diagramas de flujo y tecnicas de programacion con el flowcode, alguien me puede guiar donde aprender?,yo hago aplicaciones en industria y ya solucione problemas de ruido con pic, pero ahora que estoy trabajando en maquinaria pesada (usa sistema automotriz 24VDC) pienso aplicar AVR



Yo que tu me olvida de flowcode, yo lo intente usar y solo me fruste y gaste mucho tiempo y ademas no puedes hacer grandes cosas y no es muy profesional que digamos mejor mete directamente en C, tampoco te digo que en ensamblador porque son 100 y pico de instrucciones que dan flojera aprender todas, y pues he de decirte que AVR en muy bueno cuando se trabaja en ambientes ruidosos segun he leido en varios lugares ademas si quieres aplicarlo a la industria te recomiendo el clasico 8051 hay versiones especiales para aplicacion indutrial


----------



## COSMICO (Jul 24, 2011)

Eso de usar un pic de gama alta para una aplicacion sencilla.
Se llama, desperdicio de recursos, es como usar un camión para mudarse de casa
con una sola silla..


----------



## Meta (Jul 24, 2011)

DANDY dijo:


> genial ya me consegui el flowcode 4 paraAVR buenisimo,necesito familiarizarme mas con los diagramas de flujo y tecnicas de programacion con el flowcode, alguien me puede guiar donde aprender?,yo hago aplicaciones en industria y ya solucione problemas de ruido con pic, pero ahora que estoy trabajando en maquinaria pesada (usa sistema automotriz 24VDC) pienso aplicar AVR



Mejor te centras en C que los que dices,ya sabrás el motivo, C te vale para casi todo.


----------



## R-Mario (Jul 24, 2011)

Jajajaj cumpli mi primer byte de mensajes 2^8 = 255 mensajes



COSMICO dijo:


> Eso de usar un pic de gama alta para una aplicacion sencilla.
> Se llama, desperdicio de recursos, es como usar un camión para mudarse de casa
> con una sola silla..



Verdad que si pero apoco no hay un chingo de esos ejemplo en internet, imagino que empiezan aprendiendo pic16f877 y luego todo lo quieren hacer con ese, yo empeze con atmega8 y ahora tuve que usar un atmega32 que practicamente es lo mismo nada mas que necesitaba mas puertos de IO y un poco mas de memorias


----------



## alepusto (Jul 24, 2011)

Que buena actividad que está teniendo este foro! Por mi lado yo también recomiendo usar C, aunque la herramienta Flowcode puede ser muy buena para prototipado rápido. Ahora que mencionan ruido, quiero compartir con ustedes unas guías de Atmel para diseño de circuitos con sus microcontroladores, son muy buenas e interesantes, incluso hay varios puntos que se pueden considerar para diseño de circuitos con cualquier microcontrolador, como los loops de corriente en el ruteo de alimentación o los Capacitores bypass. Estos son los enlaces:

www.atmel.com/atmel/acrobat/doc2521.pdf
www.atmel.com/dyn/resources/prod_documents/doc8128.pdf 
www.intersil.com/data/an/an1325.pdf 
www.atmel.com/atmel/acrobat/doc1619.pdf


----------



## Meta (Jul 24, 2011)

Dseda86 dijo:


> Jajajaj cumpli mi primer byte de mensajes 2^8 = 255 mensajes
> 
> 
> 
> Verdad que si pero apoco no hay un chingo de esos ejemplo en internet, imagino que empiezan aprendiendo pic16f877 y luego todo lo quieren hacer con ese, yo empeze con atmega8 y ahora tuve que usar un atmega32 que practicamente es lo mismo nada mas que necesitaba mas puertos de IO y un poco mas de memorias



Si es con idea de aprender a fondo el PIC18F, ahí se entiende usar PIC de gama alta para hacer cualquier desperdicio, en realidad no lo es. 

Si ya usas un PIC18F para mostrar el estado de unas entradas digitales con unas salidas para LEd, ahí mejor usa los PIC16F o lo más modernos PIC16F1 mejorada.

Para cosas de comunicaciones USB o otros medios es mejor usar el PIC de gama alta ya que están preparados para ellos.

En temas de señales de audios, los dsPIC, en vídeos también para dsPIC 16 colores o los PIC32. También se incluyen los AVR o otras _marcas_ que no conocemos.

AVR lleva años sin traducirse y llevará más tiempo por lo que veo, si otras marcashttps://www.forosdeelectronica.com/posts/527256/ lo hacen, ya saben lo que pasará.


----------



## R-Mario (Jul 24, 2011)

alepusto dijo:


> Que buena actividad que está teniendo este foro! Por mi lado yo también recomiendo usar C, aunque la herramienta Flowcode puede ser muy buena para prototipado rápido. Ahora que mencionan ruido, quiero compartir con ustedes unas guías de Atmel para diseño de circuitos con sus microcontroladores, son muy buenas e interesantes, incluso hay varios puntos que se pueden considerar para diseño de circuitos con cualquier microcontrolador, como los loops de corriente en el ruteo de alimentación o los Capacitores bypass. Estos son los enlaces:
> 
> www.atmel.com/atmel/acrobat/doc2521.pdf
> www.atmel.com/dyn/resources/prod_documents/doc8128.pdf
> ...



BUen material, el primero basicamente dice "un capacitor ceramico lo mas cerca posible a los pines de alimentacion del microcontrolador adicionalmente y si asi lo requiere colocar una bobina formando el clasico filtro LC pasa bajas"  y el segundo dice "hay que usar planos de tierra locales en la seccion del cristal y colocar este ultimo lo mas cerca posible", hablando de esto ¿Cual es la maxima frecuencia en la que puede operar un circuito digital montado sobre un protoboard? debido a la capacitancia entre laminas y contactos y esas cosas


----------



## pou (Ago 12, 2011)

epa, aqui hay una pagina con explicaciones y programillas de ejemplo:
http://hetpro-store.com/index.php?option=com_content&view=category&id=4&Itemid=7&lang=es

y lo siguiente es sobre el Atmega8535: (no lo e mirado, pero no pinta mal no??  )
proyecto: http://148.206.53.231/UAMI14423.pdf  "osciloscopio a base de micro y pc"
y el adjunto creo que es un manual de este micro.

y postear un libro aunque me lo haya descargado gratis no es plan no?? la pagina no me acuerdo ya, ni la encuentro. Es este: "C Programming for Microcontrollers
Featuring ATMEL’s AVR Butterfly and the Free WinAVR Compiler"


----------



## R-Mario (Ago 12, 2011)

Orale esta bueno el de la UAM, aunque en realidad casi un 60% es la traduccion de la datasheet, por cierto que tan bueno sale comprar en hetpro nunca lo he hecho, pero se me hacen algo caro sus productos


----------



## INGRODRI (Sep 1, 2011)

rafa387 dijo:


> Saludos, he trabajado mucho con los PIC`s, pero no hay duda en cuanto a la potencia y flexibilidad de los AVR`s desde todos los ángulos, ya que están orientadso bajo la premisa del "Software Libre". Tengo una Guia paso a paso para AVR en español, partiendo desde cero con el ATmega8 q es el mas popular, de hecho les digo que si aprenden a trabajar con el Atmega8, aprenden a trabajar con todos los modelos, AT90xxxx, ATtinyxxx, ATmegaxxxx, ATxmegaxxx, ya sea en "Assembler", "Basic" (con BASCOM-AVR) o C (con AVRSTUDIO4). si quieren envienme su e-mail y se la hago llegar.


 
por favor emviame el tutor q


----------



## COSMICO (Sep 1, 2011)

Que buen tutorial 
Gracias.


----------



## thunder2 (Sep 6, 2011)

Hola muchachos, queria preguntar si ustedes tienen algun tutorial sobre atmega168, estoy que peleo con este Micro para programar. Con el he logrado en arduino, pero fuera de la placa es cuando cambia la historia. Los programadores que he utilizado son el serial en configuracion API/0 en ponyprog, pero no entiendo como configurar los bits o fuses para que arranque. San Google me da respuestas, pero no entiendo muy bien, para hacerlo el prototipo a 16 Mhz y lo programo con bascom.

Muchas gracias y perdón si genero molestias.


----------



## R-Mario (Sep 6, 2011)

Primero, debes saber que modificar los fuses puede dejar inutilizado tu micro, si lo configuras para que trabaje a 16Mhz con cristal externo despues ya no lo vas a poder programar con tu programador serial, tendrias que comprar uno paralelo o armar el resux "tupidos de atmel" segundo no hay mucha info en español sobre avr y dudo mucho que encuentres informacion especifica de un solo micro en este caso del atmega168 no obstante te cuento que casi todos son muy parecidos en su manejo por no decir que practicamente iguales, por ejemplo cambiar de un atmega8 a un atmega32 es practicamente transparente, arduino me da guacala no le veo sentido abra quienes si pero yo no, bascom tambien me da guacala no te deja que tu hagas mucho y te sepera mucho del entendimiento del micro controlador cosa que puede ser buena o no, en mi caso yo digo que no, en ese caso mejor usa C bajate la quinta version de avr studio, ya incluye el compilador de C, bascom aunque se enojen los demas se me hace como para niños, y por ultimo si quieres configurar tus fuses usa esta pagina, solo selecciona como quieres que trabaje tu micro y listo en ponyprog marca las casillas tal cual lo dice lo dice la pagina.

http://www.engbedded.com/fusecalc/

Cualquier duda hay nos dices? nota no me preguntes sobre bascom jejej no se ni me intereza aprenderlo ni usarlo


----------



## StrySG (Sep 7, 2011)

Estoy algo confundido, 
Algunas veces cuando utilizo una fuente en base a una batería y un regulador lm7805 para alimentar un AVR pero tengo el siguiente problema, Algunas veces el micro se cuelga y ni siquiera un reset reinicia el programa . tengo que esperar un tiempo después de quitarle la alimentacién  para que el micro vuelva a funcionar me pregunto por qué...

  ¿SAben como se llama este fenómeno? no solo me paso con avr sino también con PIC si tienen un LINK no importa en *Inglés* []publiquenlo no me importaría traducir una parte.


----------



## J2C (Sep 7, 2011)

StrySG

No olvides que como minimo siempre caen unos 3 V entre la entrada y salida de los 7805, no sea cosa que ante un pico de corriente de tu circuito la bateria te entregue menos de 8V y por lo tanto disminuya la tensión de salida del regulador y eso sea lo que bloquea a tu µControlador.

Saludos, JuanKa.-


----------



## R-Mario (Sep 7, 2011)

Pues a mi me parece extraño, lo que dice J2C no lo creo tanto, los micros pueden trabajar hasta con 3.3V o algunos con menos, bueno ahora si me quede con cara de what porque no le veo motivo, humm no sera que al final es mala programacion del micro y no de la bateria y el 7805, checa que los AVR y PIC trean un circuito de reset brow-out humm cuando se detecta bajo voltaje se resetea y si no sube ese voltaje puede estar resetenadose a cada rato, pero no al grado de no responder, prueba a medir el voltaje de la fuente cuando pasa esto


----------



## dukex (Sep 8, 2011)

StrySG dijo:


> , Algunas veces el micro se cuelga y *ni siquiera un reset reinicia el programa* . tengo que esperar un tiempo después de quitarle la alimentacién  para que el micro vuelva a funcionar me pregunto por qué...



 éso es raro


----------



## Chico3001 (Sep 8, 2011)

J2C dijo:


> StrySG
> 
> No olvides que como minimo siempre caen unos 3 V entre la entrada y salida de los 7805, no sea cosa que ante un pico de corriente de tu circuito la bateria te entregue menos de 8V y por lo tanto disminuya la tensión de salida del regulador y eso sea lo que bloquea a tu µControlador.
> 
> Saludos, JuanKa.-



A mi nunca me ha pasado ese efecto.... no puedes postear tu circuito y tu programa?


----------



## StrySG (Sep 9, 2011)

Subire el circuito y el programa despues, es un POV que utuiliza la memoria EEPROM, pero quisiera una sugerencia para traducir un PDF o link que hable mas acerca de los problemas eléctricos que suceden por n motivos ahora -*alepusto*- subio unos links muy utiles pero no encontre nada relacionado a este problema que tengo (estare entendiendo mal los PDF)  y son demasiado largos para traducirlos no tendran unos similares mas cortos...


----------



## thunder2 (Sep 9, 2011)

Gracias Dseda, estoy realizando mas bien el empleo de un micro de Microchip, otro dia intentare realizarlo con este atmega168, que esta dando canas verdes. Por otro lado, el atmega32 ¿Tiene los mismos fuses que el atmega8?, si es asi, lo compro de una. Ya que tiene mas memory.

Gracias por tu respuesta y un saludo.


----------



## Meta (Sep 9, 2011)

Como se nota que hay falta de información sobre AVR. Libros AVR al español, por favor.


----------



## thunder2 (Sep 9, 2011)

Si señor, falta información y lo poco que hay en español es la traducción, hace falta alguien que tenga la iniciativa de hacer un totorial, obvio si es experto en estos micros. Con microchip la mayoria se siente comodo por la abundante información. Lastima.


----------



## R-Mario (Sep 9, 2011)

Si pero a menos siento como que decir "Se programar PIC" esta perdiendo fuerza es que hay tanta gente que le entra nada mas a estos habiendo una lista inmensa de otras marcas, bueno bueno respecto a lo que dices el atmega8 y el atmega32 son casi casi casi lo mismo, claro las diferencias notorias son su mayor cantidad de memoria y claro sus puertos, los fuses trabajan igual y casi son los mismo, pero insisto para cuando uno empieza a manejar estos micros lo mejor es no meterce con los fuses, cuando lo compras te lo venden con los fuses por default osea con reloj interno a 1Mhz, lo mejor es que trabajes asi, y ya cuando te sientas mas seguro con ellos prueba a modificar los fuses, si te recomiendo que compres el atmega32 tiene mas puertos, ademas curiosamente en mexico es mas barato este que el atmega8 y no me preguntes porque, porque no se


----------



## RUIZ13 (Sep 10, 2011)

Hola a todos les recomiendo el programa flow code 4 para avr es un programa muy intuitivo para programar , es en diagrama de flujo, es muy completo hay formulas para comparacion de señales, trabajar con coma flotante etc, genera los archivos C .EX y asm se los recomiendo yo trabajo con la serie pic de la gama enana, media y he hecho programas que con asm me hubiera llevado la mitad de mi vida y aparte tiene un simulador que lo guia en el desarrollo, en la version 4 todavia hay ciertos problemas con algunas simulaciones, pero han prometido la version 5 dicen que han depurado la mayoria de esos problemas les recomiendo este programa a los que como yo les es dificil programar en asm c o basic


----------



## R-Mario (Sep 10, 2011)

A mi no me gusta, ademas lo mejor es introducirce a C ya que es mas universal y gratis, dudo que alguien te quiera contratar y le digas que solo sabes usar flow code, humm no en cambio C es gratis y casi por no decir universal, mejor dedicale mas tiempo al C y te apuesto que te sera mas facil cambiarte a cualquier otro micro despues, del ensamblador ahi si difiero un poco, no le veo mucho sentido aprender las 130 instrucciones "atmega" y luego mudarte a otro micro y aprender otras 130 instruccion ahi si se me hace una perdida de tiempo aunque tenga sus ventajas "Nota es mi humilde opinion"


----------



## RUIZ13 (Sep 10, 2011)

Pues como le s comentaba lo que dices coon respecto al flow code no es cierto el le ayuda ha hacer las cosas mas faciles y de paso le puedes incluir codigo c cada vez que quieras a los conocedores les dices flow code y saben que el tiempo de programacion es menor que en cualquier otro lenguaje y te ayudas con codigo c por ejemplo el comando sleep en flow lo colocas con codigo c lo que pasa es que todo el mundo asocia a flow code con niple sin querer desmejorar a niple,  y niple es otro tipo de programa con el nunca pude trabajar con coma flotante mas con flow si, al conocer el programa veras es  mas facil para la configuracion de el chip como tal, es como pelar un cambur con los pies facil facil facil 

  no quiero entrar en polemicas por supuesto Dseda conoces por lo menos el area de trabajo de flow code? lo invito a que lo conozcan y se animen y despues de conocerlo veran

http://www.matrixmultimedia.com/


----------



## R-Mario (Sep 10, 2011)

Jejeje no te enojes pero parece que me lo quieres vender, si he usado flow code y como dije "En mi humilde opinion" No me gusta, y no me gusta el area de trabajo ademas dudo que exista flow code como para por ejemplo micros Renseas o Texas o ST thomson etc etc, y en ese caso una persona que sabe C es mas facil que encuentre relativamente comoda la migracion de AVR o PIC a otro clase de micros, en cuyo caso te llevarian ventaja a ti, ves es solo eso no te enojes ni nada, solo es una opinion que deberias considerar, ya que avr y pic quizas esten bien para "Jugar en casa" pero cuando salgas a trabajar probablemente no te digan "Sabe usar AVR o PIC y flow code??" nop lo mas seguro es que te digan hay esta este micro que nos vendieron barato, desarrolle esta aplicacion!!


----------



## RUIZ13 (Sep 10, 2011)

En esa explicacion  que me das tienes toda la razon, " para nada mi enojo" si ganara con venderlo seria buenisimo, ahora con respecto a la migracion full estoy contigo pero lei un post en el cual decia que le era dificil a esa persona configurar un avr para esas personas asi " como yo" que nos es dificil programar en c asm o basic mejor dicho en programacion de bajo y alto nivel el flow code es exelente, les pongo mi ejemplo estudie en la decada de los 70 y me cambie de profesion me estoy jubilando me queda mucho tiempo lo quiero ocupar quiero programar pues tengo nociones elementales de electronica pero quiero programar ya no esperar aa buscar un curso de asm o c o basic y dentro de quien sabe cuando voy ha hacer mi primera prueva
ya me cachas la idea ningun curso en la web lo hee visto que sea facil de aprender, tengo 3 libros de asm 1 de c y no aprendo nada por las explicaciones


----------



## R-Mario (Sep 10, 2011)

Orale pense que era un chavo, jejeje "no me lo tome a mal", bueno si decide aprender C para micros y en especial para AVR cuente con mi ayuda que por aqui andare, yo empeze con pic pero me gustaron mas lo avr, en fin, yo apenas voy a terminar la carrera y desde que empeze le dan duro con el C por eso le decia, en fin lenguajes hay un monton, pero C ha acapardo un buena porción, de flow code honestamente hise 2 o 3 practicas y no me gusto asi que decisti de seguir, sale pues cualquier custion no dude en preguntar que aca buscaremos quien nos heche una mano sale


----------



## RUIZ13 (Sep 10, 2011)

Para nada mi hermanazo se y entiendo la jerga de ustedes, cuando estaba estudiando se hablaba del z80 que tal me fui a otra profesion en vialidad especificamente i ahi dure 30 años me jubile y estoy ahora en la corriente de los pics nada mejor para la electronica y la ciencia y bien por todos ustedes que tienen estos medios de discusion, saludos 

y gracias por su oferta pero debo primero dominar los chip que indique obtener experiencia y despues pasar a algo mas profundo, con este programa he hecho un odometro, y practicas de luces lo que en mi epoca se les decia sicodelicas ..... ja ja ja  todo con les e trabajado con pwm en luces y motores pero bueno trate en mis inicios con pic de trabajar con asm despues con c y con basic mas o menos me defiendo pero con flow fue que en realidad despegue y entendi mejor el algoridmo para darle una solucion y gracias a todos por la atencion saludos desde Venezuela la tierra de los oprimidos " en estos momentos " 

saludos


----------



## Meta (Sep 10, 2011)

El mejor es el más estandar, ASM y C nos guste o no.

Los compiladores de C para PIC no son gratuitos, si el ASM.

Hay un buen tuto del C18 para PIC.
http://www.micros-designs.com.ar/tutorial-mplab-c18/

Sobre el tema de Flow Code, mejor usar el ASM o mejor aún el C. Es más estandar y te adaptar muy rápido a cualquier micro que use C, entre ello esta pequeña lista de microcontroladores que no conozco.



ARM
Atmel
Cypress
Digi
Diodes
Ember
Energy Micro
Fairchildsemi
FreeScale
FTDIchip
Fujitsu
Hitachi
Holtek
IDT
Infineon
Intersil
JMicron
LSI
Maxim-IC
Micrel
Microchip
Microsemi
National
NEC
Nuvoton
Oki
On Semi
Parallax
Philips
Picaxe
Rabbit
Renesas
Rohm
Samsung
Semtech
Silabs
STMicroelectronics
TI
Toshiba
Winbond USA
Xmos
Seguro queme falta alguno, tienes para escoger.


----------



## StrySG (Sep 10, 2011)

Es verdad que faltan tutoriales de AVR en castellano pero creo que hay los suficientes en Inglés. Es mejor actuar mas, asi que repito para empezar quisiera traducir un articulo, documento,etc que especifique los problemas eléctricos que se pueden presentar en los AVR (¿Sugerencias?).

Aprovecho también para subir el código y el diagrama esquemático del POV que hice el cual tiene los problemas que ya les mencioné espero que alguien me pueda ayudar y no importa si esa documentacion esta en *Inglés.*


----------



## Meta (Sep 10, 2011)

Muy bueno el esquema, las dudas en otra parte de foro.

En cuanto a usar transistores para encender cada Led, no es mala idea pero tampoco hace falta gastar ese dinerillo, tiempo y espacio en la PCB.


----------



## StrySG (Sep 10, 2011)

> las dudas en otra parte de foro



Buen punto,  volviendo al tema ¿alguna sugerencia para empezar a traducir documentacion para AVR?


----------



## Meta (Sep 10, 2011)

Tener _*ganas*_ y timepo de buscar mucha información en Inglés y ponerse a traducir.

¿Quién le apetece si la mayoría incluido yo esperamos encontrar algún libro en español o que alguien traduzca?

Esto lleva sí muchos años, ya han pasado una década desde que lo espero y mira por donde, sacan más libros de PIC en español y bien actualizdos.

Libros nuevos edición 2011.
http://www.ra-ma.es/libros/MICROCONTROLADORES-PIC-CON-PROGRAMACION-PBP/27944/978-84-9964-042-6

http://www.creacionescopyright.com/...product_id=128&option=com_virtuemart&Itemid=2

Me la juego que seguirán viviendo y paa los nuevos PIC de gama media mejorada de 14 instrucciones nuevas como las 16F1xxx.

Ya te digo, que si aparece el priner libro es español, aparecerán muchos más como los PIC. La mayoría se copian ideas de otras ideas en otros libros.


----------



## StrySG (Sep 10, 2011)

Seguramente eso alienta a escoger los PIC, pero quizás no todos quieran un libro con todas las de la ley. Quiero decir un libro es algo muy completo y no se puede comparar con los pequeños manuales que hay en español sobre AVR. 

Por ahora me parece bien una compilacion de todo la informacion de AVRs que hay en español para despejar la mayor parte de las dudas asi que me parece buena idea -dividir- el trabajo de traduccion en Partes específicas por ejemplo.

- problemas  comunes eléctricos.
- Tutoriales de compialdores.
- herramientas en Linux, Windows, MAC.
- ETC.

hay una cantidad insuficiente pero con algunas mas pueden formar una documentacion importante si las reunes.


----------



## Meta (Sep 10, 2011)

La gente pide mucho, y hacemos poco.

En cuanto a los libros, te ayuda a profundicar hasta lo último, sobre todo libros muy completos como www.pic16f84a.org y te valen para más PIC. Cuando acabes el libro, tienes ganas de ahcer más cosas.

En cuanto a los manuales y tutoriales, solo son guía paso a paso a realizar algo, no profundiza sobre los microcontroladores a fondo y sientes un vacío por dentro, sientes que grandes deseos de aprender de verdad.

¿Conclusión?



Primero ver youtube proyectos.
Buscar tutoriales y ejemplos pequeños para hacer los primeros pinitos y saber de que va este mundo.
Si te gusta y quieres aprender de verdad, libros prácticos.
Luego, más tutoriales por internet y hacer tus propios proyectos.

Por eso es bueno los libros y después unas artes de tutpriales y ejemplos por Internet.


----------



## R-Mario (Sep 10, 2011)

StrySG dijo:


> Estoy algo confundido,
> Algunas veces cuando utilizo una fuente en base a una batería y un regulador lm7805 para alimentar un AVR pero tengo el siguiente problema, Algunas veces el micro se cuelga y ni siquiera un reset reinicia el programa . tengo que esperar un tiempo después de quitarle la alimentacién  para que el micro vuelva a funcionar me pregunto por qué...
> 
> ¿SAben como se llama este fenómeno? no solo me paso con avr sino también con PIC si tienen un LINK no importa en *Inglés* []publiquenlo no me importaría traducir una parte.



Honestamente no le veo el detalle que pueda estar haciendo esto que tu dices, sobre todo porque dices "algunas veces" y es que podria esperace que ocurriera algo asi por culpa del ruido de una fuente pero tu estas usando una bateria, o sea que por hay no va, luego eso de que no se pueda resetear el micro, no te lo creo porque en la hoja de datos especifica claramente que el REset es la maxima interrupcion que puede pasar osea sea lo que sea que este haciendo el micro debe de dejar de hacerlo y obedecer al RESET, lo que si puede pasar es que el programa se cuelgue a la hora de grabar en la eeprom, pero el reset debe reiniciarlo,  no sera que ya te cansaste y por el momento ya no sabes que pensar y estas cometiendo un error tan bobo que no te das cuenta asi me ha pasado a mi te quedas horas con cara de  y luego dices  che cable estaba desconectado, la verdad no te puedo creer eso de que no se reinicie, prueba a quitar los transistores de todos modos no hace falta, ahorita que recuerdo algo, no sera que en alguna parte de tu codigo estas deshabilitando el pin de RESET, porque eso si puede pasar en cuyo caso no podras hacer un reset, pero en ese caso ni siquiera podrias programar el micro porque no reacciona a la programacion


----------



## jaimepsantos (Nov 12, 2011)

Saludos foro les traigo un aporte algunos ejemplos de un programador aplicados al uC ATMEGA8, como manejo de LCD, del ADC, de PWM entre otros, es el manual del programador HETPRO 3.0 igual se le puede sacar jugo para todos les dejo el link 

Manual Programador USBaspV3 HTP


----------



## StrySG (Nov 14, 2011)

Esta muy útil el aporte, Gracias  cuanto mas info mejor...


----------



## kero_19 (Dic 1, 2011)

saludos al foro, pues les cuento que en la materia de micros de mi facu utilizamos avr's y en especial para los laboratorios el atmega8 y atmega16 y los programamos con el bascom avr que es lenguaje c, ahora en mi facu hacemos proyectos semestrales y pues este nos toco hacer un libro tipo guia de las diferentes practicas para la cual estamos trabajando en el libro y en un entrenador para atmega16 si me esperan este mes mas ya lo podria subir para aquellos que quieran empezar con avr en lenguaje c
Saludos


----------



## mamun (Dic 3, 2011)

Buen día a Todos,

Antes que nada les comento que no soy un experto en lenguaje C, lo he estado aprendiendo poco a poco, y uno de mis problemas fue que al estar trabajando con varios periféricos y al hacerse mas complejo el programa no encontraba la manera en que todo funcionara sin demoras y a la perfección, por ejemplo tenia que escanear un teclado, tenia que multiplexar 4 displays de 7 segmentos para mostrar datos, tenia que mover 3 motores a pasas a distintas velocidades y además transmitir y/o recibir información por el puerto serie (UART) y procesarla.

La solución a este problema la encontré al usar el RTOS OSA que anteriormente ya les había mencionado.

Aquí les dejo un pequeño programa y la simulación con Proteus con el que he estado aprendiendo más sobre el RTOS y sobre lenguaje C.
El código esta dividido en 6 tareas una de ellas es para el control de escritura en la pantalla LCD de 16X2, otra tarea simula un pequeño RTC (un reloj que solo contara 24 horas), dos tareas que se sincronizan con semáforos controlan el movimiento de 8 leds una a la derecha y otra a la izquierda, y otras dos tareas controlan dos canales (4 botones) para incrementar o decrementar algún valor, esto es como si se tratase de dos entradas análogas y después de procesarlas mostraran alguna información en pantalla.

En el programa podrán ver lo que se dice "DIVIDE y VENCERAS"
El programa es meramente con fines educacionales tal vez exista alguien que diga esto se podría hacer de otra manera mas fácil, pero como mencione no soy experto en C y es la forma que encontré para solucionar los problemas.

Espero que de algo les sirva

Saludos...


----------



## rash (Dic 3, 2011)

muy buenos los aportes... gracias a todos...

saludos


----------



## dakos (Dic 7, 2011)

Estimados, quisiera aportar con info. Yo también me he encontrado con la falta de información en español. Ahora, tengo la ventaja de saber inglés y alemán, por lo que me arreglo y sugiero que de a poco empiezen a estudiar inglés (junto con el C, jaja) porque es y será (a menos que los chinos impongan) el lenguaje para la electrónica y demases. Para hacer mi proyecto de título utilizé el AVR Atmega168 pero obviamente tuve que aprender a programarlo antes! Por eso leí y estudié y practiqué con el micro famoso, que es bueno y potente. Todo eso terminó en un conjunto de circuitos y códigos en C que organizé en un trabajo de Licenciatura. Lo acabo de subir hace poco al foro:

https://www.forosdeelectronica.com/f24/uso-programacion-avr-atmega168-mediante-gcc-67340/

Utilizo el AVR Studio 4 (versión 4.18) adjuntando el compilador AVRGCC, que muestro cómo hacerlo también. El AVR Studio es un entorno muy bueno y completo, lo pueden descargar gratuitamente (Ahora está el 5 disponible) y les servirá para programar en Assembly o en C (con GCC) como gusten. Yo me viré hace tiempo al C (de hecho nunca aprendí ASM) que les aseguro tiene muchas ventajas hoy en día sobre ASM (Tiempo de desarrollo, compatiblidad, estandarización, etc.) pero eso no quiere decir que saber Assembly no sea bueno, de hecho yo ahora lo estoy estudiando de a poco porque sirve para muchas cosas (desensamblar, ingeniería inversa, optimización, rapidez, etc.).
Espero les sirva la info y que les de un aventón a aprender C (Hay varios libros buenos rondando, en inglés y español) ya que es un lenguaje excelente. De ahí se van al C++ para aplicaciones en PC, comunican con el micro en C y se toman el mundo!!jaaja
Saludos


----------



## javi20 (Ene 6, 2012)

rafa387 dijo:


> Saludos, he trabajado mucho con los PIC`s, pero no hay duda en cuanto a la potencia y flexibilidad de los AVR`s desde todos los ángulos, ya que están orientadso bajo la premisa del "Software Libre".  Tengo una Guia paso a paso para AVR en español, partiendo desde cero con el ATmega8 q es el mas popular, de hecho les digo que si aprenden a trabajar con el Atmega8, aprenden a trabajar con todos los modelos, AT90xxxx, ATtinyxxx, ATmegaxxxx, ATxmegaxxx, ya sea en "Assembler",  "Basic" (con BASCOM-AVR) o C (con AVRSTUDIO4).




Hola rafa387, estaba buscando en el foro información sobre microcontroladores avr y me encontré con un tema donde tu indicas que tienes una buena información, me podrías por favor compartir esta información

Gracias de antemano


----------



## RUIZ13 (Ene 6, 2012)

hola rafa quisiera a prender a trabajar con avr gracias de antemano


----------



## kero_19 (Ene 15, 2012)

Saludos amigos como les dije hace unas semana nos toco realizar un folleto con varias practicas para el ATmega 8 asi que aqui les dejo el capitulo tres de mi proyecto que se trata de todas las practicas desde las mas faciles que es ensendido de un led hasta manejo de servos, espero que les sirva y si tienen alguna duda no duden en preguntar!!.
Hasta la proxima.

http://www.4shared.com/file/wuJOiMds/CAPITULO_3.html

Nota: Como era muy grande y no se puede adjuntar por aca les dejo un enlace de 4shared ojala no lo eliminen.


----------



## javi20 (Ene 15, 2012)

buen aporte kero_19; si tienes mas informacion me la podrias pasar y muchas gracias


----------



## StrySG (Feb 13, 2012)

Pido disculpas tengo algunos problemas al subir el archivo, al parecer no puede subir archivos por alguna configuraciondentro mi PC publicare la traduccion cuando solucione el problema...


----------



## StrySG (Feb 14, 2012)

Hola, bueno ahora logre subir el archivo tuve algunos problemas con el proveedor de Internet...

Se trata de una traducción que hice de la Nota de Aplicaciones *AVR040* - EMC Design Considerations (Consideraciones de diseño de CEM) CEM = _Compatibilidad Electromagnética_. 
Contiene importantes criterios e información acerca del diseño *CEM*.

Muy útil para quienes diseñan sistemas en especial microcontrolados y dessean hacer sus sistemas con buena inmunidad al ruido, transitorios, ESD (Descargas electroestáticas), OEM (Ondas electromagnéticas), criterios de diseño de PCB de 1,2 y multicara, Uso de diodos, capcitores de desacople y bobinas en serie entre otros...

Espero les sirva mucho  y aunque estoy corto de tiempo  quisiera traducir algún otro material relacionado  tal vez la nota de aplicación  AVR042 consideraciones de diseño de Hardware, pero antes necesito alguna retroalimentación acerca de la primera traducción acerca de posibles errores de traducción...


----------



## Meta (Feb 14, 2012)

Hola StrySG:

Has puesto hasta gráficos o esquemas incluidos.Por la cantidad de textos te has pegado un tiempo y dedicación. Nos ayuda mucho a entender los AVR.

Buen trabajo.


----------



## Moyano Jonathan (Feb 14, 2012)

Excelente trabajo muchas gracias !


----------



## Belgi (Feb 14, 2012)

Excelente 
Muchisismas Gracias


----------



## StrySG (Feb 14, 2012)

Un consejo para los que creen tener conocimiento acerca de CEM y dessen ir directamente al grano del documento tomen en cuenta los siguientes puntos:  


​punto 3: Tratar con fenómenos de CEM.

​punto 4: Reglas de diseño.

Supongo que son las partes más útiles del documento para quienes ya están dentro el diseño de sistemas, en otros casos también recomiendo leer todo el documento..

Nota.- El documento original (en inglés) esta publicado en este tema por *alepusto* solo basta con revisar la página 15 para verificar partes que creen que estan mal traducidas


----------



## pacojavier (Feb 28, 2012)

Sectorbeat dijo:


> pues en mi escuela estamos viendo el ATMEGA8 y los capitulos que nos dieeron para estudiarlo estan muy buenos y en español, se los adjun to para que puedan checarlos a ver si les sirve, saludos a todos...




Yo tambien tengo los mismos apuntes pues yo creo que estudiamos en la misma escuela, solo que en los programas y uno de los capitulos tienen errores, asi que si quieren correr los programas chequen bien


----------



## R-Mario (Feb 29, 2012)

A si me imagino que son los disipulos de baldera, jejeje, Aun sigue pidiendo que se aprendan cada nombre de cada bit de cara registro del micro controlador?????

Qee pesado


----------



## Javisco (Mar 8, 2012)

Bunas....hace ya tiempo aprendi lo muy basico para programar en avrstudio para un atmega8, en realidad estoy en blanco ahora...alguien me podria dar alguna pauta para poder programar solamente un pequeño pulso y necesito que dure 6.44us...es para una practica que tengo que hacer para disparar un mosfet....solamente necesito la pauta porfavor jeje...muchas gracias!!


----------



## pacojavier (Mar 8, 2012)

jajaja yo no soy disipulo de balderas solo entre a su clase y ya =P y



Bueno si quieres generar un pulso que dure 6.44 micro segundos debes configurar algun timer de los 3 que tiene el ATmega8 para que te genere ese tiempo, pero no se si llegaste a congfiurar los mismos? en base a como divides el reloj y si pones un valor determinado al registro que lleva la cuenta es como puedes generar un pulso a determinada frecuencia, pero necesito que me digas hasta donde viste para ayudarte, saludos.


----------



## Javisco (Mar 8, 2012)

orale....gracias amigo.....pues en realidad no recuerdo mucho ya tiene como 3 años que no toco este tema...pues recuerdo que hay que declarar primero las entradas y las salidad y me referenciaba en el manual del atmega para activar una rutina...pero no recuerdo bien donde viene lo del timer....


----------



## pacojavier (Mar 8, 2012)

Pues en el manual viene donde dice Timer/counter ahi puedes checar los registro que intervienen para lo que tu quieres necesitas ver el registro TCNT0 del Timer 0 TCNT1H,TCNT1L del Timer 1 y TCNT2 del Timer 2 y los registros de control TCCR0,TCCR1B,TCCR2


----------



## Javisco (Mar 8, 2012)

graciotas viejo....psss ahorita a darle..jeje....chido one



una ultima preg...para el pulso necesito un cristal no recuerdo si es de 4Mhz??o de que depende


----------



## Javisco (Mar 9, 2012)

necesito hacer un pulso que este en estado alto durante solo 6.4us


$regfile = "M8def.dat" 
$crystal = 1000000 
Config Portb.0=Output 

Pinb.0=0
Waitms 2000
Pinb.0=1
Waitus 6.4
End

en que estoy fallando?


----------



## R-Mario (Mar 9, 2012)

Oye Javisco si estar usando un reloj de 1Mhz una instruccion dura 1 us entonces no vas a poder obtener 6.4 uS, en toda caso prueba un cristal mas grande por ejemplo 10Mhz asi cada instruccion o incremento en el TCNT sera de 0.1uS asi si podras obtener los 6.4uS, dejame buscar yo lo hice igual para dispara un triac



No se como le vallas a hacer para dispara el pulso de 6.4uS, yo lo haria con la interrupcion INT0, por ejempl asi.


```
F_CPU 1000000
void configurar_interrupcion()
{
	MCUCR |= (1<<ISC01)|(1<<ISC00); //Interrupcion por INT0 con el filo de subida
	GIMSK |= (1<<INT0);			//Habilitamos interrupcion por INT0
}
ISR(INT0_vect)					//Cuando flanco de subida en INT0 
	OCR1A = 60;	//Valor al cual se debe llegar y generar interrupcion 60 cuentas = 60uS @ 1Mhz
	TCNT1 = 0x00;   //Habilita interrupcion por igualacion de OCR1A con TCNT1
	GIMSK |= (0<<INT0);		//deshabilitamos interrupcion por INT0
	TIMSK |= (1<<OCIE1A);        //Habilitamos interrupcion cuando TCNT1 = OCR1A
         salida_on                  //Salida encendida
	sei();
}
ISR(TIMER1_COMPA_vect)	//Cuando se halla cumplido el retardo entonces desactivamos la salida
{	cli();				
	salida_0ff;
	TIMSK |= (0<<OCIE1A);
	GIMSK |= (1<<INT0);	//Habilitamos interrupcion por INT0 para empezar de nuevo
	sei();
}
void configurar_modo_CTC()
{	
	//Modo CTC comparado con OCR1A, sin prescala por tanto se incremente en uno cada microsegundo
	TCCR1B |= (1<<WGM12)|(1<<CS10);
}

void main()
{
   void configurar_interrupcion();
   configurar_modo_CTC();
while(1);
}
```


----------



## hamster (Mar 12, 2012)

Hola.... 
Me apunto a lo del tutorial... acá dejo las mismas librerias XLCD para PIC18, nada más que modificadas para que funcionen en AVR, creo que es buena idea que las librerias sean bastantes parecidas, asi es fácil andar de micro en micro.


----------



## deadlyslayer100 (Mar 13, 2012)

yo quisiera saber como realizo un retardo en C .... o en su defecto si lo tengo en asm como hago para citar dichas instrucciones, tengo entendido que es algo como:
asm (ldi  R18, $09
       WGLOOP0:  ldi  R19, $BC
       WGLOOP1:  ldi  R20, $C4
       WGLOOP2:  dec  R20
          brne WGLOOP2
          dec  R19
          brne WGLOOP1
          dec  R18
          brne WGLOOP0 ) 

pero al compilarlo me resulta un error... tengo entendido que cambia segun el compilador que este usando, por lo que adviero que uso el AVR Studio 5.0 
Gracias por su ayuda


----------



## R-Mario (Mar 14, 2012)

Porque no usas las funciones _delay_us(); o delay_ms() o _delay_loop()

La verdad mi asm esta muy pobre.


----------



## cosmefulanito04 (Mar 14, 2012)

Ajna dijo:


> Porque no usas las funciones _delay_us(); o delay_ms() o _delay_loop()
> 
> La verdad mi asm esta muy pobre.



Dependiendo de la familia (suponé un Atmega8), esas funciones pesan mucho en código.


----------



## R-Mario (Mar 14, 2012)

No tanto como uno imagina, ademas facilitan mucho la tarea, aun con 2k te van bien, y nunca menciono nada respecto al tamaño, y en su defecto _delay_loop() es casi casi como una macro para asm, bueno nomas era una sugerencia


----------



## Meta (Mar 14, 2012)

Hola:

¿Nadie para traducir un datasheet de un AVR al castellano o español?

Por ejemplo, escoger un AVR que le interese a la mayoría. Luego las personas se ponen de acuerdo y traducimos nuestra parte.

En su día se intentó con el PIC16F628A, luego con el PIC16F88. Aquí se hizo uno al español del 12F629/675 y bien  hecho. Esta es la primera parte de seis.

http://www.micropic.es/mpforo/index.php?topic=792.0

Es una sugerencia.


----------



## cosmefulanito04 (Mar 14, 2012)

Yo no tengo problemas en dar una idea de como funcionan casi todos los periféricos de un Atmega8/16 (y no se que otro se le parece) y poner ejemplos de código, creo que es la mejor forma de aprender a programarlos, con ejemplos concretos.


----------



## R-Mario (Mar 14, 2012)

Ya por ahi un usuario subio una semi traduccion, fue de una tesis y sobre un atmega8215, la verdad Meta llegue a la conclusion que no tiene sentido traducir las hojas datos y que lo mejor aunque nos duela es aprender ingles, aleman y en un futuro chino.


----------



## cosmefulanito04 (Mar 14, 2012)

Ajna dijo:


> Ya por ahi un usuario subio una semi traduccion, fue de una tesis y sobre un atmega8215, la verdad Meta llegue a la conclusion que no tiene sentido traducir las hojas datos y que lo mejor aunque nos duela es aprender ingles, aleman y en un futuro chino.



Es que la hoja de datos normalmente tiene la información básica necesaria para saber que registros usar y algún que otro consejo, el resto dependerá de uno.


----------



## foxil (Mar 14, 2012)

Ajna dijo:


> Ya por ahi un usuario subio una semi traduccion, fue de una tesis y sobre un atmega8215, la verdad Meta llegue a la conclusion que no tiene sentido traducir las hojas datos y que lo mejor aunque nos duela es aprender ingles, aleman y en un futuro chino.


De acuerdo con esto, hay que usar el sentido común en lo relacionado con la tecnología. Porque perder el tiempo traduciendo data sheet, es como querer traducir las sentencias de programación: if, else, while switch, for, etc. al español.


----------



## R-Mario (Mar 15, 2012)

foxil dijo:


> if, else, while switch, for, etc. al español.



Yo las tradusco.

if ---> Si
else --> de otro modo
while --> mientras
switch --> "No le veo sentido como traduccion pero si a la analogia con un interruptor"
for  --> para



Un cosa rapida en AVR al puerto "x" le llaman PORTx ej. PORTA
en PIC le llaman igual PORTA entonces para que traducimos si ya sabemos que vamos encontrar algo parecido  



Esto es lo que yo hago mejor, por ejemplo si quiero usar el ADC anoto esto. que es muy parecido a por ejemplo los PICs


```
Si 50Khz<fosc<200Khz, resolucion del ADC = 10bits

ADPS2 	ADPS1 	ADPS0 	PRESCALAR
0 		0 		0 		2
0 		0 		1 		2
0 		1	 	0 		4
0 		1 		1 		8
1 		0 		0 		16
1 		0 		1 		32
1 		1 		0 		64
1 		1 		1 		128

ADMUX3	ADMUX2	ADMUX1	ADMUX0	INPUT ADC
0		0		0		0 		ADC0
0		0		0		1 		ADC1
0		0		1		0		ADC2
0		0		1		1 		ADC3
0		1		0		0	 	ADC4
0		1		0		1	 	ADC5
0		1		1		0 		ADC6
0		1		1		1 		ADC7

REFS1	REFS0	REFERENCIA
0 		0 		AREF, Internal Vref turned off
0 		1 		AVCC with external capacitor at AREF pin
1 		0 		Reserved
1 		1 		Internal 2.56V Voltage Reference with external capacitor at AREF pin

Configuracion ADMUX
	REFSx	Referencia interna, con capacitor externo en AREF
	ADELAR	Ajuste a la derecha
	MUX		Canal de conversion PC4
		
Configuracion ADCSRA
	ADEN	Habilito modulo
	ADSC	Inicio conversion
	ADFR	Modo no-free running
	ADIE	Habilito interrupciones
	ADPSx	Preescala
*/
```


----------



## cosmefulanito04 (Mar 15, 2012)

Ajna dijo:


> ....
> 
> ```
> Si 50Khz<fosc<200Khz, resolucion del ADC = 10bits
> ...



Eso que haces está muy piola para ver la configuración rápidamente en el mismo código y no tener que estar con la hoja de datos encima, ..... me parece que voy hacer un copiar y pegar


----------



## Moyano Jonathan (Mar 15, 2012)

Yo hace poco migré del WinAVR a la versión integrada del AVRSTUDIO 5 y me parece una suite excelente. El único problema fue configurar el programador que tenía...USBtinyISP para integrarlo con la IDE.
Para eso les hice un videotutorial por si alguno de ustedes tenía ese problema:


----------



## COSMICO (Mar 15, 2012)

Gracias amigo Moyano.
Ojalá pronto acaben mis problemitas, y pueda dedicarle tiempo a este tema.
Espero poder contar con tu ayuda.
Un saludo.


----------



## StrySG (Mar 16, 2012)

Hace poco pude compilar un codigo escrito con WINAVR de windows desde linux ubuntu, no tuve que usar wine encontré una herramienta similar al Programmer's Notepad pero para Linux, se llama -*Anjuta*- Y es software libre solo que tambien tuve que descargar las librerias avr-gcc para linux... funciona muy bien y es muy similar al programer's notepad aunque aun tengo algunas dudas.También pude simular AVRs usando proteus con wine. Me pregunto si ustedes conocen algunas otras herramientas para Ubuntu.


----------



## Meta (Mar 17, 2012)

Muy bueno.

En Microchip está el MPLAB v8.84 y el MPLAB X 1.10 por el momento. También los C18, C32 etc en el lenguaje C.

En Atmel.
¿Cuál es el IDE oficial?
He visto varios y son del C.

Otra pregunta.
El PIC para aprender es el 16F84A y tiene su propio libro dedicado a ello y es de los mejores. El 16F886 también con su libro en ASM y C, se que hay mejores que este.

En Atmel. ¿Cuáles son los AVR más usados para aprender?
Se que en PIC se usa mucho los 12F629, 16F84A/628A/88, 16F886/887, 18F2550/4550 y algunos más. Es para hacer referencia.

Un cordial saludo.


----------



## Moyano Jonathan (Mar 17, 2012)

> En Atmel.
> ¿Cuál es el IDE oficial?
> He visto varios y son del C.



AVR Studio 5.1 es la IDE oficial. Se puede programar en C o ASM, es totalmente free y soporta micros de 8 y 32 bits.

Tiene el compilador de C integrado, es estandar y está muy optimizado.



> En Atmel. ¿Cuáles son los AVR más usados para aprender?
> Se que en PIC se usa mucho los 12F629, 16F84A/628A/88, 16F886/887, 18F2550/4550 y algunos más. Es para hacer referencia.



No hay libros en español sobre ATMEL propiamente dichos, pero hay muchisimos libros de AVR en inglés muy bien explicados.

Te invito a que comiences a investigar del tema de AVR y te armes algún programador. Ya sea serial o USB para hacer las primeras prácticas, te vas a dar cuenta que no te va a hacer falta un libro para aprender...


----------



## Meta (Mar 17, 2012)

Gracias por responder, haber libros en Inglés de AVR es un primer paso.
Lo de que si me doy cuenta que no hace falta libro, me imagino que lo dirás por el tema que tengo algo de conocimento de PIC, ya que el cambio sería más fácil.


----------



## gonpa (Mar 22, 2012)

che moyano que debo estar haciendo mal?

command: D:\compiladores\SinaProg_2.0\data\avrdude.exe
arguments: -c usbtiny -p t2313 -u flash:w:$(ItemFileName)
initial directory: D:\compiladores\programas en GCC\attiny2313\pwm_motordc\PWM_MOTORDC\PWM_MOTORDC\Debug


me sale esto:


avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude.exe: Device signature = 0x1e910a
avrdude.exe: NOTE: FLASH memory has been specified, an erase cycle will be performed
             To disable this feature, specify the -D option.
avrdude.exe: erasing chip
avrdude.exe: reading input file "PWM_MOTORDC"
avrdude.exe: error opening PWM_MOTORDC: No such file or directory
avrdude.exe: input file PWM_MOTORDC auto detected as invalid format
avrdude.exe: can't open input file PWM_MOTORDC: No such file or directory
avrdude.exe: write to file 'PWM_MOTORDC' failed

avrdude.exe: safemode: Fuses OK

avrdude.exe done.  Thank you.


----------



## R-Mario (Mar 22, 2012)

Chas que mala onda que hagas preguntas especificamente a alguien.

Es tu primera ves en avrstudio 5.1??

Talves no modificaste la optimizacion del compilador y el archivo .hex que genera lo hace muy grande y cuando intentas grabarlo te sale ese error, o al menos asi me paso la primera ves



Correcion viendo la imagen no creo que sea tu primera ves.


----------



## gonpa (Mar 22, 2012)

hace casi como un año creo que programa en avrstudio, y si me dirijo a alguien puntual es por que ese alguien fue quien vino con la noticia y me imaginaba que podía solucionar. y con respecto a la optimización estan todas bien es solo un programa de unos 320bites.

lo curioso es que hice todo tal cual...creo .

saludasos!


----------



## Moyano Jonathan (Mar 22, 2012)

No lo has hecho todo igual, fijate bien como está en el video que puse más atrás. El error es por que te has equivocado de carpeta y no encuentra el archivo .hex
También puede ser que la carpeta de destino donde está el .hex tiene un nombre muy largo.
Fijate bien como lo configuré en el video y las carpetas que intervienen.
Un saludo !


----------



## gonpa (Abr 5, 2012)

Hola tengo un problemon con el AVRSTUDIO 5.0 estoy desarrollando un equipo que mide frecuencia tensión dela red y también sera parte de un SCADA. En un principio lo hice con un ATmega8 pero tenia problemas con la comunicación a 8Mhz (usaba la versión L) y conseguí los ATmega168 para trabajarlos a 20MHz y la comunicación serial anda  de 10 pero al pasar mi código del ATmega8 a ATmega168 me da un error que es el siguiente:

"
Error	1	R_AVR_13_PCREL against symbol `__fixunssfsi' defined in .text section in c:/program files/atmel/avr studio 5.0/avr toolchain/bin/../lib/gcc/avr/4.5.1/avr5\libgcc.a(_fixunssfsi.o)	

D:\compiladores\programas en GCC\ATMEGA168-PROGRAMAS\SCADA2\SCADA2\Debug/.././SCADA2.c	144	1	SCADA2
"

y me señala aqui

        F = (float)T/Registro_ICR1;
        F = (F/2)*100;
-->   Frecuencia = F;       (y se soluciona al declararla como int solamente)


pero yo anteriormente la habia declarado como uint16_t y el mega8 andaba todo perfecto
y todo esto me llama la atención por que a la hora de multiplicar por 100 da cualquier numero y no puedo mostrarlos.

espero que me puedan ayudar por que la verdad no se.

Saludos.


----------



## Meta (Abr 12, 2012)

Hola:

Un granito más de arena.

http://www.ele.uva.es/~jesus/perifericos/avr_gcc.pdf

Otra cosa, tanto hablar de traducción que nadie hace, normal, es muy amplio el tema. Ya están los Arduinos desde hace tiempo y en español.







http://www.arduino.cc/es/

Un saludo.


----------



## R-Mario (Abr 12, 2012)

Sigo renuente a querer utilizar arduino, la verdad no se que mucho de ellos, aun asi cuando veo las imagenes pienso que se trata de herramientas para aprender en las escuelas, humm la realidad es que no se jejeje


----------



## Moyano Jonathan (Abr 12, 2012)

> Sigo renuente a querer utilizar arduino, la verdad no se que mucho de ellos, aun asi cuando veo las imagenes pienso que se trata de herramientas para aprender en las escuelas, humm la realidad es que no se jejeje



Si sabés programar en AVRGCC, programás ARDUINO. Su núcleo es AVRGCC (C++), la verdad para algunas cosas es muy sencillo utilizarlo, pero para otras quizás se pueda llegar a complicar..

Saludos !


----------



## an6el (May 7, 2012)

Creo que esto no funcionará. Necesitamos planearlo y llevar un orden.


----------



## Moyano Jonathan (May 7, 2012)

> Creo que esto no funcionará. Necesitamos planearlo y llevar un orden.



A que te referís ?


----------



## R-Mario (May 7, 2012)

Creo que se refiere a que a pesar de que ya casi son 19 paginas de este tema, aun no hay mucho de lo que dice el titulo del mismo


----------



## Moyano Jonathan (May 7, 2012)

> Creo que se refiere a que a pesar de que ya casi son 19 paginas de este tema, aun no hay mucho de lo que dice el titulo del mismo.



Lo que yo pienso sinceramente del tema es que todos necesitan un manual o una guía de ejercicios pero nadie se ha puesto a investigar esta familia de microcontroladores AVR.
Yo por ejemplo el año pasado me puse a realizar algunas prácticas con el ATtiny2313 y este año empecé con el ATmega328P y Arduino. Si alguien necesita aprender más sobre esta familia de microcontroladores la única forma es usarlos y programar....no esperen a que venga nadie y les de un manual de 500 páginas en español y gratis.

Un usuario que ha hecho una guía de prácticas: https://www.forosdeelectronica.com/f24/tutorial-avr-desde-0-a-74592/

Yo por mi lado estoy escribiendo algo similar a lo que ha hecho este usuario pero orientado a AVR Studio 5.

Mi recomendación es que se armen un programador por puerto serial, paralelo o USB y que comiencen a programar.


----------



## Meta (May 7, 2012)

Hola:

La gente habla de hacer manuales, la mayoría esperan que los haga alguien, en mi caso, estoy centrado mucho al PIC. Un poco del AVR como curiosidad, como cuesta conseguir esos AVR, no les presto demasiado atención. Ahora noto que lo están vendiendo al menos en Arduino donde compro PIC, por algo se empiexa, si esto sigue así, todo el mundo con los AVR.

Saludo.


----------



## javi20 (May 7, 2012)

bueno yo actualmente e empezado a programar los micros avr y e obtenido buena informacion respecto a un ide llamado bascom avr si alguien desea les puedo dar esta informacion


----------



## darben911 (May 7, 2012)

meta dijo:


> por fin alguien empezando con avr.
> asociación de robótica y domótica de españa • ver tema - el fin de la guerra pic-avr.



de una  cuenten con  migo pa las que sea


----------



## R-Mario (May 8, 2012)

Yo sigo pensando que se ha vuelto absurdo hablar de cual micro es mejor, al final aprendes a usar el que mas te guste (ya sea por facilidad precio etc) o porque el gordo feo de tu jefe te oblige a usar un micro en especial.
De ahi en fuera no le veo sentido ha hacer guerras entre microcontroladores. Es evidente que mientras mas potente sea un micro mas costoso sera, y a las empresas que diseñan aparatejos lo que mas les importa es el precio.

Hace poco estuve jugando con los 851 de renesas "y al final dije.. creo que es mucho microcontrolador para mi" jeje


----------



## gonpa (Jun 8, 2012)

Hola yo estoy elaborando un manual de los AVR y de como programarlos paso a paso con el avr studio 5 en C. Esta muy muy claro pero no puedo terminarlo me quede en el 3° ejemplo que es de PWM.....estoy seguro que sera de mucha ayuda pero no logro terminarlo.....si puedo avanzar mas subo todo.

he estado algo ocupado.

saludos!


----------



## R-Mario (Jun 8, 2012)

No te entendi, estas elaborando un manual pero aun no dominas los AVR, y a que te refieres con el ejemplo 3 ¿cual es el ejemplo?

Ciertamente los timer's son la parte mas dificil de entender en un micro controlador por la cantidad de opciones que tienen.

Ahora que si pones tu duda igual te podamos ayudar.


----------



## hamster (Jun 14, 2012)

en http://www.cursomicros.com/ librerias gratuitas y la licencia permite modificarlas.


----------



## R-Mario (Jun 14, 2012)

Se ve magnifico el sitio, ya lo puse en favoritos, lastima que no se pueda descargar.


----------



## gonpa (Jun 17, 2012)

Mira Ajna, quien te dijo que no los domino a los avr? trabajo con ellos hace mas de 3 años y creo que son los mejores uC (es mi opinion), y si plantee una duda no quiere decir nada mas.....y fue problema del complilador una opcion que tenia mal tildada....em no entiendo tu preocupación de que yo sepa o no usar los AVR..... (?)

cuando hablo del ejemplo 3 en mi manual es por que me quede en ese ejemplo en mi manual....ahora....en ves de cuestionar si se o no programar los AVR por que no esperas a que suba el manual y sacas tu conclusiones? y tomar o no los conocimientos de ese manual si no te sirve a vos a otro seguro que si.


----------



## Meta (Jun 17, 2012)

gonpa dijo:


> Mira Ajna, quien te dijo que no los domino a los avr? trabajo con ellos hace mas de 3 años y creo que son los mejores uC (es mi opinion),



Los de 8 bits son los reconocidos mejores, en 16 bits no. Me refiero la arquitectura de los µC.


----------



## gonpa (Jun 17, 2012)

"Los de 8 bits son los reconocidos mejores, en 16 bits no. Me refiero la arquitectura de los µC."

si pasa que gracias a la arquitectura de estos se los podría tratar como bien dice en su pagina avr 8/16 bit pero para nosotros la cpu es de 8 bit, y casi nadie ya recomienda los uC de 16 en gral, el salto es de 8 bit a 32 bit, y los avr de 32 bit estaaan imprecionantes.

espero que me lleguen prontos los ATXmega128A3 que pedí, mi jefe también medio a elegir el atmega mas poderos para que hagamos un desarrollo y ando viendo cual es el que mejor se adapta.

saludos Meta


----------



## R-Mario (Jun 18, 2012)

gonpa dijo:


> Mira Ajna, quien te dijo que no los domino a los avr? trabajo con ellos hace mas de 3 años y creo que son los mejores uC (es mi opinion), y si plantee una duda no quiere decir nada mas.....y fue problema del complilador una opcion que tenia mal tildada....em no entiendo tu preocupación de que yo sepa o no usar los AVR..... (?)
> 
> cuando hablo del ejemplo 3 en mi manual es por que me quede en ese ejemplo en mi manual....ahora....en ves de cuestionar si se o no programar los AVR por que no esperas a que suba el manual y sacas tu conclusiones? y tomar o no los conocimientos de ese manual si no te sirve a vos a otro seguro que si.



Calmate y respira, nadien te dijo que no los dominaras, creo que estas inteerpretando mal las cosas, por un lado dices estar haciendo un manual y por otro dices tener problemas en terminar el ejemplo 3, cosa que me confundio y mas aun porque no pusiste cual era el problema con el ejemplo 3.


----------



## hamster (Jun 18, 2012)

.


----------



## Meta (Jun 18, 2012)

Hola:

En mi caso no do ino ninguno, intento dominar un PIC con ASM y C, no lo dominaré al 100% nunca, por ahora sólo lo básico, un 4% y mucho me parece, configurar puertos como entrada y salida, lo mismo en Analógico, manejar las instrucciones, LCD, motores, PWM, entre algunas cosillas, aún así me cuesta, hablo del PIC, en cuanto al AVR, probé el Teensy 2++, muy fácil de programar.

Para mi, no se si en el futuro reinarán los 32 bits y los de 8 desaparecerán algún día, sobre todo cuando decidan sacar los 64 bits. _(Cuando apareció los 32 bits de PIC32, se dijo que tienen los de 64 bits hechos pero no los venden, nadie lohace por ahora)._

Lo bueno de los PIC32 que son fáciles de programar, he seguido hace un tiempo un libro en Inglés sobre ellos. Lo bueno que tiene 32 bits que controla pantallas a color como los Galaxy III con soltura, son para este tipo de cosas.







*Aquí hay datos para curiosear:*

Migración de 8 bits a 32 bits.
http://www.electronicosonline.com/2010/01/07/Definen-como-esencial-migracion-de-8-a-32-bits/

¿8 bits o 32 bits?
http://telecontrolgsm.blogspot.com.es/2009/05/8-bits-x-32-bits.html

Por ahora para hacer cosas sencillas los 8 bits es suficiente, sobre controlas entradas y salidas, en temas más avanzados ya los 32 bits, para eso están, no de adornos.

Salu2.


----------



## StrySG (Ago 3, 2012)

Hola parece haber poca actividad por aqui , Bueno comparto la traducción que hice de la Nota de aplicación _AVR4027_... que encontré en la página de Atmel.

Este documento brinda importantes trucos para todos aquellos que programan microcontroladores AVR de 8 bits en *lenguaje C*. Si utilizan *AVR-GCC* este documento les puede ser de gran utilidad, si lo que quieren es optimizar su código para reducir tamaño o aumentar velocidad de ejecución, si quieren ir al grano le puse el índice de contenido al final del documento.

Seguramente tendrá algunos errores de traducción pero espero los detecten y los corrijan en todo caso pido disculpas si existen  no me vendría mal alguna realimentación del documento pera mejorar la técnica de traducción...

Espero les sirva...


----------



## alepusto (Ago 3, 2012)

Muy bueno el documento, buen aporte!


----------



## hamster (Ago 3, 2012)

Buen trabajo StrySG! es de calidad.


----------



## Meta (Ago 4, 2012)

Buenísimo. No sabía que se puede manejar tipos de datos de 64 bits en un AVR de 8 bits.

Un saludo.


----------



## Moyano Jonathan (Ago 4, 2012)

Muchísimas grácias es de gran ayuda tu documento.


----------



## gonpa (Ago 26, 2012)

Hola moyano el link de unos de tus post anteriores ya no anda : (

"Te paso el link: http://www.mil.ufl.edu/~chrisarnold/...tml/index.html "

sabes si esta en otro lado?


Otra cosita mas, estuve haciendo el soft para manejar la memoria 24lc256, como no andaba bien me fije aquí en el foro y me tope con esto. Hay algunas cosas que no entiendo como ser:

el QDEL, este retardo de 5 ciclos maquina que haces con nop a 8MHz serian 625nS cierto?

En el datasheet de esa memoria observe que el bit menos significativo se manda primero, y tu lo haces al revés, por que?

Ahora para mandar un dato yo hago esto:

```
void Write_memoria(unsigned char HighDir, unsigned char LowDir, unsigned char Dato)
{
    unsigned char i;
    unsigned char ControlByte=0b10100010;    
    //                               ||||||||__R=1, /W=0
    //                            |||||||___A0=1
    //                            ||||||____A1=0
    //                            |||||_____A2=0
    //                            ||||______0
    //                            |||_______1
    //                            ||________0
    //                            |_________1
    //****************************************************
    StartCondition();
    SCLK_CLR();
    
    for (i=0;i<8;i++)
    {
        if ((ControlByte & 0X01))
        {SDA_SET();}
        else
        {SDA_CLR();}
            
            Delay_i2c();
            SCLK_SET();
            ControlByte = ControlByte>>1;    //DESPLAZO EL DATO
            Delay_i2c();
            SCLK_CLR();
    }
    
    //Noveno clock para el acknowledge    
    Delay_i2c();
    SCLK_SET();
    Delay_i2c();
    SCLK_CLR();
    
    for(i=0;i<8;i++)
    {
        if ((HighDir & 0x01))
        {SDA_SET();}
        else
        {SDA_CLR();}
            
                Delay_i2c();
                SCLK_SET();    
                HighDir=HighDir>>1;
                Delay_i2c();
                SCLK_CLR();
    }
    
    //Noveno clock para el acknowledge    
    Delay_i2c();
    SCLK_SET();
    Delay_i2c();
    SCLK_CLR();
    //Delay_i2c();
    for(i=0;i<8;i++)
    {
        if ((LowDir & 0x01))
        {SDA_SET();}
        else
        {SDA_CLR();}
            
                Delay_i2c();
                SCLK_SET();    
                LowDir=LowDir>>1;
                Delay_i2c();
                SCLK_CLR();
    }
    
    //Noveno clock para el acknowledge    
    Delay_i2c();
    SCLK_SET();
    Delay_i2c();
    SCLK_CLR();
    //Delay_i2c();
    for(i=0;i<8;i++)
    {
        if ((Dato & 0x01))
        {SDA_SET();}
        else
        {SDA_CLR();}
                
                Delay_i2c();
                SCLK_SET();    
                Dato=Dato>>1;
                Delay_i2c();
                SCLK_CLR();
    }
    
    //Noveno clock para el acknowledge
    Delay_i2c();
    SCLK_SET();
    Delay_i2c();
    SCLK_CLR();
    
    StopCondition();
}
void StartCondition()
{
    A0_Enable;    //Habilito el chip
    SDA_SET();    //Aseguro sda en alto 
    SCLK_SET();    //clock en alto 
    SDA_CLR();  //bajo la linea de sda
    Delay_1uS();
}
void StopCondition()
{
    SCLK_SET();
    SCLK_SET();
    SDA_SET();
    Delay_1uS();
}
void Init_I2C()
{
    SDA_DDR|=(1<<SDA_PIN);
    SCLK_DDR|=(1<<SCLK_PIN);
    SDA_SET();
    SCLK_SET();
}
void Delay_i2c()
{
    _delay_us(10);
}
```

estoy haciendo bien? o que estoy haciendo mal? jeje

espero me puedan dar un amano es para un proyecto de la facultad y queria usar una memoria
saludos y muchas gracias.

PD: dejo el programa modificado hace un rato asi alguien lo pruebe y pueda decirme que ocurre  
solo leo FF, me fije en el osciloscopio las lineas sclk y sda y parece estar bien a unos 114kHz da el clock por favor si alguien meayuda a sacar andando este soft se los agradeceria.


----------



## gonpa (Sep 2, 2012)

Hola seguí modificando mi soft logre que corra en Proteus pero no en la vida real jaja, alguien puede compilarlo y sacar el problemita o comentármelo? ya no se que hacerle al código : (

use un tutorial de como usar el modulo i2c de este avr y funciona de 10 osea mi circuito esta bien hecho así que es el soft.

lo adjunto aquí por favor si alguien me diera una mano se los agradecería


----------



## alepusto (Sep 2, 2012)

Hola gonpa,

Sin revisar el código, puesto que dices que te funciona en Proteus, has verificado los fusebits del microcontrolador? Recuerda que al ser una comunicación por I2C, es susceptible a la frecuencia de reloj del microcontrolador. Entonces, verifica que estés trabajando a la frecuencia que tienes programada en F_CPU que según veo es de 11.059 MHz, verifica que el cristal conectado coincida con ese valor, y además que no tengas activado algún fusebit que divida la frecuencia (comúnmente en 8), o que esté trabajando con el oscilador interno (usualmente a 8MHz)... es solamente una posibilidad, no digo que justamente ese sea tu problema, verifica a ver y nos comentas....


----------



## gonpa (Sep 5, 2012)

Hola alepusto,

  Gracias por contestar, ya revisé todos esos detalles posibles y está todo en orden funcionando bien. Necesito que estas rutias sean hechas por soft y no por el modulo, ya que es facil migrarlas a otro lado. con el modulo i2c que presentan en "cursomicros.com" funciona muy bien pero bueno mi fin es otro.
  Si alguien descubre el error que estoy cometiendo me ayudaría? por favor. 

  yo sigo intentando.

saludos!


----------



## mamun (Feb 1, 2013)

Hay una pagina en internet que se llama comunidad atmel:
www.comunidadatmel.com
Se encuentra algo de informacion sobre los micros AVR con el compilador codevision.

Les dejo un par de archivos.

Saludos.


----------



## mamun (Feb 1, 2013)

Hola, 
encontre un par de archivos sobre los micros AVR, y su pagina se llama comunidad ATMEL

Saludos...


----------



## darben911 (Feb 20, 2013)

mamun dijo:


> Hola,
> encontre un par de archivos sobre los micros AVR, y su pagina se llama comunidad ATMEL
> 
> Saludos...




hola a tod@s los que les gusta los atmel, les un enlace de una pagina en donde hay ejercicios y se explica el funcionamiento del atmega16, es una muy buena pagina

http://vduenasg.blogspot.com/


----------



## Moyano Jonathan (Feb 21, 2013)

Por el problema de comunicaciones i2c por software:

Los tiempos como se marcan más arriba son muy específicos. Por lo tanto los delay no pueden realizarse con las rutinas normales de temporización.
Yo les dejo una rutina que utilizo para comunicar memorias y otros dispositivos i2c, cuando no está la posibilidad de comunicarse via TWI.


```
;*************************************************************************
; Title	:    I2C (Single) Master Implementation
; Author:    Peter Fleury <pfleury@gmx.ch>  http://jump.to/fleury
;            based on Atmel Appl. Note AVR300
; File:      $Id: i2cmaster.S,v 1.12 2008/03/02 08:51:27 peter Exp $
; Software:  AVR-GCC 3.3 or higher
; Target:    any AVR device
;
; DESCRIPTION
; 	Basic routines for communicating with I2C slave devices. This
;	"single" master implementation is limited to one bus master on the
;	I2C bus. 
;  
;       Based on the Atmel Application Note AVR300, corrected and adapted 
;       to GNU assembler and AVR-GCC C call interface
;       Replaced the incorrect quarter period delays found in AVR300 with 
;       half period delays. 
;
; USAGE
;	These routines can be called from C, refere to file i2cmaster.h.
;       See example test_i2cmaster.c 
; 	Adapt the SCL and SDA port and pin definitions and eventually 
;	the delay routine to your target !
; 	Use 4.7k pull-up resistor on the SDA and SCL pin.
;
; NOTES
;	The I2C routines can be called either from non-interrupt or
;	interrupt routines, not both.
;
;*************************************************************************

#if (__GNUC__ * 100 + __GNUC_MINOR__) < 303
#error "This library requires AVR-GCC 3.3 or later, update to newer AVR-GCC compiler !"
#endif


#include <avr/io.h>



;***** Adapt these SCA and SCL port and pin definition to your target !!
;
#define SDA     	3		// SDA Port B, Pin 3  
#define SCL		4		// SCL Port B, Pin 4
#define SDA_PORT        PORTB           // SDA Port B
#define SCL_PORT        PORTB           // SCL Port B         

;******

;-- map the IO register back into the IO address space
#define SDA_DDR		(_SFR_IO_ADDR(SDA_PORT) - 1)
#define SCL_DDR		(_SFR_IO_ADDR(SCL_PORT) - 1)
#define SDA_OUT		_SFR_IO_ADDR(SDA_PORT)
#define SCL_OUT		_SFR_IO_ADDR(SCL_PORT)
#define SDA_IN		(_SFR_IO_ADDR(SDA_PORT) - 2)
#define SCL_IN		(_SFR_IO_ADDR(SCL_PORT) - 2)


#ifndef __tmp_reg__
#define __tmp_reg__ 0
#endif

.section .text
	

;*************************************************************************
; delay half period
; For I2C in normal mode (100kHz), use T/2 > 5us
; For I2C in fast mode (400kHz),   use T/2 > 1.3us
;*************************************************************************
	
.func i2c_delay_T2	        ; delay 5.0 microsec with 12 Mhz crystal.	

i2c_delay_T2:                

          ldi  R17, 0x0E
WGLOOP0:  dec  R17
          brne WGLOOP0
	  ret         
.endfunc                        ; total 60 cyles = 5.0 microsec with 12 Mhz crystal. 


;*************************************************************************
; Initialization of the I2C bus interface. Need to be called only once
; 
; extern void i2c_init(void)
;*************************************************************************
	.global i2c_init
	.func i2c_init
i2c_init:
	cbi SDA_DDR,SDA		;release SDA
	cbi SCL_DDR,SCL		;release SCL
	cbi SDA_OUT,SDA
	cbi SCL_OUT,SCL
	ret
	.endfunc


;*************************************************************************	
; Issues a start condition and sends address and transfer direction.
; return 0 = device accessible, 1= failed to access device
;
; extern unsigned char i2c_start(unsigned char addr);
;	addr = r24, return = r25(=0):r24
;*************************************************************************

	.global i2c_start
	.func   i2c_start
i2c_start:
	sbi 	SDA_DDR,SDA	;force SDA low
	rcall 	i2c_delay_T2	;delay T/2
	
	rcall 	i2c_write	;write address
	ret
	.endfunc		


;*************************************************************************
; Issues a repeated start condition and sends address and transfer direction.
; return 0 = device accessible, 1= failed to access device
;
; extern unsigned char i2c_rep_start(unsigned char addr);
;	addr = r24,  return = r25(=0):r24
;*************************************************************************

	.global i2c_rep_start
	.func	i2c_rep_start
i2c_rep_start:
	sbi	SCL_DDR,SCL	;force SCL low
	rcall 	i2c_delay_T2	;delay  T/2
	cbi	SDA_DDR,SDA	;release SDA
	rcall	i2c_delay_T2	;delay T/2
	cbi	SCL_DDR,SCL	;release SCL
	rcall 	i2c_delay_T2	;delay  T/2
	sbi 	SDA_DDR,SDA	;force SDA low
	rcall 	i2c_delay_T2	;delay	T/2
	
	rcall	i2c_write	;write address
	ret
	.endfunc


;*************************************************************************	
; Issues a start condition and sends address and transfer direction.
; If device is busy, use ack polling to wait until device is ready
;
; extern void i2c_start_wait(unsigned char addr);
;	addr = r24
;*************************************************************************

	.global i2c_start_wait
	.func   i2c_start_wait
i2c_start_wait:
	mov	__tmp_reg__,r24
i2c_start_wait1:
	sbi 	SDA_DDR,SDA	;force SDA low
	rcall 	i2c_delay_T2	;delay T/2
	mov	r24,__tmp_reg__
	rcall 	i2c_write	;write address
	tst	r24		;if device not busy -> done
	breq	i2c_start_wait_done
	rcall	i2c_stop	;terminate write operation
	rjmp	i2c_start_wait1	;device busy, poll ack again
i2c_start_wait_done:
	ret
	.endfunc	


;*************************************************************************
; Terminates the data transfer and releases the I2C bus
;
; extern void i2c_stop(void)
;*************************************************************************

	.global	i2c_stop
	.func	i2c_stop
i2c_stop:
	sbi	SCL_DDR,SCL	;force SCL low
	sbi	SDA_DDR,SDA	;force SDA low
	rcall	i2c_delay_T2	;delay T/2
	cbi	SCL_DDR,SCL	;release SCL
	rcall	i2c_delay_T2	;delay T/2
	cbi	SDA_DDR,SDA	;release SDA
	rcall	i2c_delay_T2	;delay T/2
	ret
	.endfunc


;*************************************************************************
; Send one byte to I2C device
; return 0 = write successful, 1 = write failed
;
; extern unsigned char i2c_write( unsigned char data );
;	data = r24,  return = r25(=0):r24
;*************************************************************************
	.global i2c_write
	.func	i2c_write
i2c_write:
	sec			;set carry flag
	rol 	r24		;shift in carry and out bit one
	rjmp	i2c_write_first
i2c_write_bit:
	lsl	r24		;if transmit register empty
i2c_write_first:
	breq	i2c_get_ack
	sbi	SCL_DDR,SCL	;force SCL low
	brcc	i2c_write_low
	nop
	cbi	SDA_DDR,SDA	;release SDA
	rjmp	i2c_write_high
i2c_write_low:
	sbi	SDA_DDR,SDA	;force SDA low
	rjmp	i2c_write_high
i2c_write_high:
	rcall 	i2c_delay_T2	;delay T/2
	cbi	SCL_DDR,SCL	;release SCL
	rcall	i2c_delay_T2	;delay T/2
	rjmp	i2c_write_bit
	
i2c_get_ack:
	sbi	SCL_DDR,SCL	;force SCL low
	cbi	SDA_DDR,SDA	;release SDA
	rcall	i2c_delay_T2	;delay T/2
	cbi	SCL_DDR,SCL	;release SCL
i2c_ack_wait:
	sbis	SCL_IN,SCL	;wait SCL high (in case wait states are inserted)
	rjmp	i2c_ack_wait
	
	clr	r24		;return 0
	sbic	SDA_IN,SDA	;if SDA high -> return 1
	ldi	r24,1
	rcall	i2c_delay_T2	;delay T/2
	clr	r25
	ret
	.endfunc



;*************************************************************************
; read one byte from the I2C device, send ack or nak to device
; (ack=1, send ack, request more data from device 
;  ack=0, send nak, read is followed by a stop condition)
;
; extern unsigned char i2c_read(unsigned char ack);
;	ack = r24, return = r25(=0):r24
; extern unsigned char i2c_readAck(void);
; extern unsigned char i2c_readNak(void);
; 	return = r25(=0):r24
;*************************************************************************
	.global i2c_readAck
	.global i2c_readNak
	.global i2c_read		
	.func	i2c_read
i2c_readNak:
	clr	r24
	rjmp	i2c_read
i2c_readAck:
	ldi	r24,0x01
i2c_read:
	ldi	r23,0x01	;data = 0x01
i2c_read_bit:
	sbi	SCL_DDR,SCL	;force SCL low
	cbi	SDA_DDR,SDA	;release SDA (from previous ACK)
	rcall	i2c_delay_T2	;delay T/2
	
	cbi	SCL_DDR,SCL	;release SCL
	rcall	i2c_delay_T2	;delay T/2
	
i2c_read_stretch:
    sbis SCL_IN, SCL        ;loop until SCL is high (allow slave to stretch SCL)
    rjmp	i2c_read_stretch
    	
	clc			;clear carry flag
	sbic	SDA_IN,SDA	;if SDA is high
	sec			;  set carry flag
	
	rol	r23		;store bit
	brcc	i2c_read_bit	;while receive register not full
	
i2c_put_ack:
	sbi	SCL_DDR,SCL	;force SCL low	
	cpi	r24,1
	breq	i2c_put_ack_low	;if (ack=0)
	cbi	SDA_DDR,SDA	;      release SDA
	rjmp	i2c_put_ack_high
i2c_put_ack_low:                ;else
	sbi	SDA_DDR,SDA	;      force SDA low
i2c_put_ack_high:
	rcall	i2c_delay_T2	;delay T/2
	cbi	SCL_DDR,SCL	;release SCL
i2c_put_ack_wait:
	sbis	SCL_IN,SCL	;wait SCL high
	rjmp	i2c_put_ack_wait
	rcall	i2c_delay_T2	;delay T/2
	mov	r24,r23
	clr	r25
	ret
	.endfunc
```

Está en ASM y hay que calcular una subrutina, según el clock del oscilador externo/interno.



> *************************************************************************
> ; delay half period
> ; For I2C in normal mode (100kHz), use T/2 > 5us
> ; For I2C in fast mode (400kHz),   use T/2 > 1.3us
> ...



Ahí está calculado para 12Mhz, que es el cristal que utilizo. Ahora si se necesita cambiar de cristal pueden generar una rutina de temporización de 5 microsegundos utilizando un software como el siguiente: http://www.electronics-lab.com/downloads/mcu/003/index.html

También hay que configurar los pines SDA/SCL.


```
;***** Adapt these SCA and SCL port and pin definition to your target !!
;
#define SDA     	3		// SDA Port B, Pin 3  
#define SCL		4		// SCL Port B, Pin 4
#define SDA_PORT        PORTB           // SDA Port B
#define SCL_PORT        PORTB           // SCL Port B
```

Como es complejo de implementar en un programa excrito en C, el autor nos deja la librería con las funciones declaradas en c, que llaman a las funciones hechas en ASM, esto lo realiza luego el linker, por eso hay que declarar el uso del archivo ASM con las funciones en nuestro Makefile.


```
#ifndef _I2CMASTER_H
#define _I2CMASTER_H   1
/************************************************************************* 
* Title:    C include file for the I2C master interface 
*           (i2cmaster.S or twimaster.c)
* Author:   Peter Fleury <pfleury@gmx.ch>  http://jump.to/fleury
* File:     $Id: i2cmaster.h,v 1.10 2005/03/06 22:39:57 Peter Exp $
* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3
* Target:   any AVR device
* Usage:    see Doxygen manual
**************************************************************************/

#ifdef DOXYGEN
/**
 @defgroup pfleury_ic2master I2C Master library
 @code #include <i2cmaster.h> @endcode
  
 @brief I2C (TWI) Master Software Library

 Basic routines for communicating with I2C slave devices. This single master 
 implementation is limited to one bus master on the I2C bus. 

 This I2c library is implemented as a compact assembler software implementation of the I2C protocol 
 which runs on any AVR (i2cmaster.S) and as a TWI hardware interface for all AVR with built-in TWI hardware (twimaster.c).
 Since the API for these two implementations is exactly the same, an application can be linked either against the
 software I2C implementation or the hardware I2C implementation.

 Use 4.7k pull-up resistor on the SDA and SCL pin.
 
 Adapt the SCL and SDA port and pin definitions and eventually the delay routine in the module 
 i2cmaster.S to your target when using the software I2C implementation ! 
 
 Adjust the  CPU clock frequence F_CPU in twimaster.c or in the Makfile when using the TWI hardware implementaion.

 @note 
    The module i2cmaster.S is based on the Atmel Application Note AVR300, corrected and adapted 
    to GNU assembler and AVR-GCC C call interface.
    Replaced the incorrect quarter period delays found in AVR300 with 
    half period delays. 
    
 @author Peter Fleury pfleury@gmx.ch  http://jump.to/fleury

 @par API Usage Example
  The following code shows typical usage of this library, see example test_i2cmaster.c

 @code

 #include <i2cmaster.h>


 #define Dev24C02  0xA2      // device address of EEPROM 24C02, see datasheet

 int main(void)
 {
     unsigned char ret;

     i2c_init();                             // initialize I2C library

     // write 0x75 to EEPROM address 5 (Byte Write) 
     i2c_start_wait(Dev24C02+I2C_WRITE);     // set device address and write mode
     i2c_write(0x05);                        // write address = 5
     i2c_write(0x75);                        // write value 0x75 to EEPROM
     i2c_stop();                             // set stop conditon = release bus


     // read previously written value back from EEPROM address 5 
     i2c_start_wait(Dev24C02+I2C_WRITE);     // set device address and write mode

     i2c_write(0x05);                        // write address = 5
     i2c_rep_start(Dev24C02+I2C_READ);       // set device address and read mode

     ret = i2c_readNak();                    // read one byte from EEPROM
     i2c_stop();

     for(;;);
 }
 @endcode

*/
#endif /* DOXYGEN */

/**@{*/

#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304
#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !"
#endif

#include <avr/io.h>

/** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */
#define I2C_READ    1

/** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */
#define I2C_WRITE   0


/**
 @brief initialize the I2C master interace. Need to be called only once 
 @param  void
 @return none
 */
extern void i2c_init(void);


/** 
 @brief Terminates the data transfer and releases the I2C bus 
 @param void
 @return none
 */
extern void i2c_stop(void);


/** 
 @brief Issues a start condition and sends address and transfer direction 
  
 @param    addr address and transfer direction of I2C device
 @retval   0   device accessible 
 @retval   1   failed to access device 
 */
extern unsigned char i2c_start(unsigned char addr);


/**
 @brief Issues a repeated start condition and sends address and transfer direction 

 @param   addr address and transfer direction of I2C device
 @retval  0 device accessible
 @retval  1 failed to access device
 */
extern unsigned char i2c_rep_start(unsigned char addr);


/**
 @brief Issues a start condition and sends address and transfer direction 
   
 If device is busy, use ack polling to wait until device ready 
 @param    addr address and transfer direction of I2C device
 @return   none
 */
extern void i2c_start_wait(unsigned char addr);

 
/**
 @brief Send one byte to I2C device
 @param    data  byte to be transfered
 @retval   0 write successful
 @retval   1 write failed
 */
extern unsigned char i2c_write(unsigned char data);


/**
 @brief    read one byte from the I2C device, request more data from device 
 @return   byte read from I2C device
 */
extern unsigned char i2c_readAck(void);

/**
 @brief    read one byte from the I2C device, read is followed by a stop condition 
 @return   byte read from I2C device
 */
extern unsigned char i2c_readNak(void);

/** 
 @brief    read one byte from the I2C device
 
 Implemented as a macro, which calls either i2c_readAck or i2c_readNak
 
 @param    ack 1 send ack, request more data from device<br>
               0 send nak, read is followed by a stop condition 
 @return   byte read from I2C device
 */
extern unsigned char i2c_read(unsigned char ack);
#define i2c_read(ack)  (ack) ? i2c_readAck() : i2c_readNak(); 


/**@}*/
#endif
```

Yo realice la librería para usar con una memoria 24C256, adaptable a cualquier memoria I2C.


```
/*************************************************
 Driver para la memoria EEPROM 24C256.
 Lenguaje: C - Compilador: AVRGCC.
 programador: Moyano Jonathan.
 ************************************************/
#include <avr/io.h>
#include "i2cmaster.h"
#include <util/delay.h>

// Variables usadas:
uint8_t status,datos;


void external_eeprom_init(void) {

    i2c_init(); // Iniciamos I2C.
 }

void write_external_eeprom(uint8_t dato, uint16_t direccion) {

	i2c_start_wait(0xA0); // Enviamos comando de escritura de la memoria EEPROM.

	i2c_write(direccion>>8); // Enviamos parte alta de la dirección.
        i2c_write(direccion);    // Enviamos parte baja de la dirección.
        i2c_write(dato);

	i2c_stop(); 
	
   }

uint8_t read_external_eeprom(uint16_t direccion){

	i2c_start_wait(0xA0);
	i2c_write(direccion>>8); // Enviamos parte alta de la dirección.
        i2c_write(direccion);    // Enviamos parte baja de la dirección.
	
	status = i2c_rep_start(0XA1); // Enviamos comando para leer la memoria EEPROM.

	if(status != 0) { // Si el proceso de lectura falló...cerramos el bus I2C.

	  i2c_stop();

		   }
             else
  
	datos = i2c_readNak(); // caso contrario leemos dato.

  return(datos);

}
```

Y el programa ejemplo:


```
/*************************************************
 PROGRAMAS DE EJEMPLO PARA EL ATTINY2313 - 20PU..
 EJERCICIO Nº14: Usos de comunicación I2C por software (master - esclavo).
 Fecha: 2011.
 Programa: Control de la memoria 24C256.
 Cristal:  12Mhz.
 Programador: USBtinyISP
 ************************************************/

#include <avr/io.h>
#include "i2cmaster.h"  // Librería I2C por software.
#include <util/delay.h>
#include "UARTlbr.c"    // Librería para manejar la UART.
#include <stdlib.h>     // Funciones de conversión de tipos de datos.
#include "24C256.c"     // Funciones de control de la memoria 24C256.


uint8_t lectura; // Variable donde guardamos el dato leido desde la memoria EEPROM.
char Buffer[7];  // Buffer auxiliar.


int main(void)

{
	DDRB = 0x07;   // PB0-PB2 salidas.
	PORTB = 0x00;  // Ponemos todas las salidas a 0. 
	Init_UART(77); // Inicializamos la UART a 9.6Kbps 8N1.

   for(uint16_t i=0; i<=250; i++) {    // Hacemos 250 iteraciones , grabamos 250 datos en las
                                       // primeras 250 posiciones.

	void external_eeprom_init(void);
         
        write_external_eeprom(i,i);

        _delay_ms(5);
		
		lectura = read_external_eeprom(i); // Luego leemos las 250 posiciones de manera 
                                                   // consecutiva...
		
		  itoa(lectura,Buffer,10);         // convertimos el valor leido en ascci.

	      put_str(Buffer);                     // lo mostramos por el puerto serie.
		  
		  _delay_ms(5);
    }
        
}
```

Y la librería para manejar la USI, con el ATtiny2313 - 20PU.


```
// Librería UARTlbr.c
// Esta librería contiene las funciones de control de la UART del ATtiny2313.
// Programador: Moyano Jonathan.
// Lenguaje: AVR - GCC.
// Año: 2011.

/* A través de esta función iniciamos la UART configurando los siguientes parámetros:

- BAUDRATE: Velocidad de comunicación.
- Modo de comunicación: Seteamos Asincrono por defecto.
- Paridad de datos: Sin bit de paridad.
- Bits de datos: 8 bits de datos.

*/

void Init_UART (uint16_t ubrr_value)
{
   // Seteamos la velocidad de comunicación.
   UBRRL = ubrr_value;
   UBRRH = (ubrr_value>>8);
   /* 
   Parametros de la comunicación.
   >> Modo asincrono.
   >> NO paridad de datos.
   >> 1 Bit de stop.
   >> 8 bits de datos.
   */

   UCSRC = (1 << UCSZ1) | (1 << UCSZ0);
   // Habilitamos el envío/recepción de datos.
   UCSRB=(1<<RXEN)|(1<<TXEN);

}

// Función que recibe un byte desde la UART.

unsigned char get_byte(void)
{
  // En espera de datos entrantes.
  while (!(UCSRA & (1 << RXC)));

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


// Función que transmite un byte por la UART.

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;
}

// Función que transmite una cadena por la UART.

void put_str(char *s)
{
	while(*s)			
	{
		put_byte(*s);	// Envía los datos de la cadena uno a uno.
		s++;		// Aumenta el contador de caracteres.
		_delay_us(50);  // Espera 50us.
	}
}
```

Espero les sirva, les dejo adjunto el proyecto también, hecho en WINAVR.



PD: Lo mejor para comenzar a programar con ATMEL es una pequeña placa de desarrollo, programador USB como por ejemplo el USBtinyISP y el WINAVR. Como microcontrolador, recomiendo el ATmega644 o en caso de andar corto de dinero el ATtiny2313 O ATmega8 (el PIC16F84 de los AVR..muy conocido y con mil ejemplos)


----------



## ByAxel (Mar 17, 2013)

Hola a todos.
 Hace poco he vuelto a usar los microcontroladores de Atmel motivado más por el entorno de programación “Atmel Studio” que ellos ofrecen, con soporte GCC.



 Algunas características:
  Es un entorno basado en el IDE de Visual Studio (en mi opinión, es más amigable).
  Soporta a microcontroladores AVR y ARM de Atmel; incluye soporte para Arduino.
  Incluye plantillas con soporte para todos los módulos AVR.
  Soporte para lenguajes C/C++ y ASM (GCC).
  Etc.
http://www.atmel.com/microsite/atmel_studio6/

¿Lo han usado?, ¿Cuál es su opinión?

PD: Esto aníma a crear un hilo en el foro dedicado a los AVR como los hay para los PIC "Curso/Tutorial de ....".


----------



## R-Mario (Mar 17, 2013)

Es excelente, claro necesitas una pc medianamente potente de lo contrario tardaras horas esperando a que cargue, yo lo uso y me encanta, otro aspecto es el terrible tamaño que usa cuando lo instalas completo, pero si solo vas usar micros de 8 bits entonces reduce bastanten que eso ultimamente no importa con tremendos discos duros de Teras.


----------



## Meta (Mar 18, 2013)

Hola:

¿Visual studio?

No sabía que Atmel puede programarse bajo Visual Studio .net, si te refieres al IDE de Microsoft. Ojalá hagan en el futuro y muy seriamente el C#, al menos le C++ que es más potente que solo el C.

Saludo.


----------



## ByAxel (Mar 18, 2013)

Me refiero al IDE de Visual Studio ya que el instalador integra el "Microsoft Visual Studio 2010 Shell" que básicamente es una serie de archivos para que el Atmel Studio se paresca al Visual Studio. En fin, es como programar en VC++.


----------



## miguelfgp (Abr 2, 2013)

que tal amigos alguien tiene un tutorial de atmel donde vengan los significados de ciertos comandos como por ejemplo lo que es DDRB en un atmel? los tipo de datos, como definir variables etc es que quiero pasar un codigo de atmel para un pic pero tengo duda en algunas parte del programa,el codigo esta en c pero para atmel, gracias


----------



## Belgi (Abr 3, 2013)

por ejemplo lo que es DDRB en un atmel?

Los registros DDRA, DDRB, DDRC y DDRD, 
son los registros de Dirección de Datos y sirven para configurar
cada pin del puerto como entrada (con el valor 0)
o como salida (con el valor 1).

Los registros PORTA, PORTB, PORTC y PORTD, 
son los registros de Salida/Modo Eléctrico y
cada bit esta asociados a un pin del puerto.


----------



## StrySG (Abr 3, 2013)

En la pág anterior de este mismo tema esta la traducción de la nota de aplicación de Atmel AVR04027 para la optimización del código en lenguaje C para AVRs de 8 bits...

https://www.forosdeelectronica.com/f24/traduccion-creacion-manual-microcontroladores-avr-23286/index20.html

Están tipos de datos sus definiciones y otras cosas...


----------



## hamster (Abr 6, 2013)

Hola gente ! tengo un problema y necesito ayuda.

Estaba haciendo pruebas con el WAV PLAYER AVR usando el MCU ATMEGA328P y las librerias petit FAT de Elm-Chan y pues a nivel de código todo parece bien , ademas con proteus no hay problema y simula perfecto, pero cuando lo pruebo en tabla de nodos es otra cosa... da muchos errores........
despues de un largo analisis al código , me di cuenta que no es el código....

y que el AVR STUDIO no esta compilando algunas funciones ,, ya rebusque las configuraciones del AVR studio, hasta cargue varias librerias, pero nada..... no compila varias funciones unas de ellas son:
_delay_ms(); y _delay_us();  definidas en <util/delay.h>
he usado el AVR studio en muchas ocasiones, pero es primera vez que me pasa esto.... hasta los proyectos que estaban buenos y ya probados.. si los recompilo me dan problemas..

subire los archivos en proteus y avr studio por si alguien quiere verlos


----------



## R-Mario (Abr 6, 2013)

Ya revisaste las directivas de optimizacion, yo una ves casi me ahorcaba porque parecia que el codigo se saltaba ciertas cosas, y despues de mucho batallar resulto ser el nivel de optimizacion y mis tecnicas sucias de programacion jejeje


----------



## hamster (Abr 7, 2013)

Hola amigo Ajna ,,, ya revise los niveles de optimización. he probado con todos...
Os, O0,O1...etc
no me compila las funciones que usan retardos usando _delay_ms y _delay_us .... intentare cambiar la libreria delay.h

consegui otra versión de la libreria delay.h y no me funciono de todo bien... compilo pero no estaban bien los tiempos.

alguno de ustedes que tenga avr studio y que al compilar las funciones  _delay_ms y _delay_us no les de problema.... por favor podrian buscar  los archivos delay.h y delay_basic.h y subirlos aca...

se los agradeceria mucho..


----------



## Moyano Jonathan (Abr 7, 2013)

A mi me compiló perfectamente en ATMEL Studio 6, probalo para ver si te funciona. Y probalo en la realidad...el simulador no te sirve para este tipo de pruebas...


----------



## hamster (Abr 8, 2013)

O.k.. gracias Moyano mañana mismo montare el circuito....


----------



## miguelfgp (Abr 8, 2013)

que tal foreros después de estar un tiempo tratando de entender un código de atmel no eh podido entenderlo ya que lo que quiero es pasar el código para usar con el compilador c18 de microchip y ya lo pase tal cual simplemente configurando para el c18 y la simulación no me da igual que con el atmel no se cual sea el problema y no es mucho código lo que quiero pasar  lo que se hace es una señal de clock, datos y reset para poder controlar un modulo de sonido WTV020-SD, en el código de atmel ya esta funcionando, lo encontré en internet y reduje el código a lo mas simple que es lo que yo necesito, pero ya al tratar de pasarlo a un pic18 con el compilador c18 ya no da igual que con la simulación del atmel16 y lo que quiero lograr es eso para asegurarme de que funcione en el pic18f458.

Este es el codigo de atmel16 con atmel studio 6.0


```
#include <avr/io.h>
#include <util/delay.h>


#define DI                  PB0
#define CLK         PB1
#define RST         PB2
#define WTV20_PORT    PORTB

int main(void)
{
    DDRB=0B00000111;
    PORTB=0B00000111;
    
    WTV20_PORT&=~(1<<RST);
    _delay_ms(5);
    WTV20_PORT|=(1<<RST);
    _delay_ms(300);
    
    
    WTV20_PORT&=~(1<<CLK);
    _delay_ms(2);

    int i;
    for ( i=15; i>=0; i--)
    {
        _delay_us(50);
        if(([B]0xFFFE[/B]>>i)&0x0001 >0)   //El dato 0xFFFE es el que se sustituye 
        {                                              //para enviar diferentes comandos de 16 bits
                                                    //el 0xFFFE es el comando play
                     WTV20_PORT|=(1<<DI);
        }
        else
        {
            WTV20_PORT&=~(1<<DI);
        }
        _delay_us(50);
        WTV20_PORT|=(1<<CLK);
        _delay_us(50);
        
        if(i>0)
        WTV20_PORT&=~(1<<DI);
        else
        WTV20_PORT|=(1<<DI);
        _delay_us(50);
        
        if(i>0)
        WTV20_PORT&=~(1<<CLK);
        else
        WTV20_PORT|=(1<<CLK);

    }
    
    _delay_ms(20);
    while(1)
    {
        
    }
}
```
Ahora con el código para c18 es prácticamente lo mismo, pero no sé porqué no me funciona la simulación,
tal vez sea por los corrimientos de los bits que no es igual que un atmel o no sé la verdad ya estoy sin ideas 

```
#include <P18F458.h>
#include <delays.h>

#pragma config OSC=XT, OSCS=OFF    //Cristal como reloj, apaga reloj interno
#pragma config WDT=OFF            //Apaga WDT
#pragma config PWRT=ON, BOR=ON    //Activa Power On Reset
#pragma config DEBUG=OFF          //Desactiva debug
#pragma config LVP=OFF, STVR=OFF  //No reset overflow stack y patita PB5=I/O

#define DI                 PORTBbits.RB0
#define CLK                PORTBbits.RB1
#define RST            PORTBbits.RB2
#define WTV20_PORT        PORTB

    
void main(void)
{

    int i;

    PORTB=0;
    TRISB=0b11111000;
    PORTB=0b00000111;

    WTV20_PORT&=~(1<<RST);            
    Delay100TCYx(50);            // 5 ms
    WTV20_PORT|=(1<<RST);            
    Delay1KTCYx(300);            // 300 ms



    WTV20_PORT&=~(1<<CLK);
    Delay100TCYx(20);                    //2 ms

    
    for( i=15;i>=0;i--)
    {
        Delay10TCYx(5);                                  //50 us
        if((0xFFFE>>i)&0x0001>0)                   //0xFFFE comando a enviar
        {
            WTV20_PORT|=(1<<DI);
                
                                
        }

        else
        {
            WTV20_PORT&=~(1<<DI);
            
                            
        }
        Delay10TCYx(5);                                    //50 us
        WTV20_PORT|=(1<<CLK);
        Delay10TCYx(5);                                     //50 us            
     
        if(i>0)
        WTV20_PORT&=~(1<<DI);
        else
        WTV20_PORT|=(1<<DI);
        Delay10TCYx(5);                                 //50 us                 
    
        if(i>0)
        WTV20_PORT&=~(1<<CLK);
        else
        WTV20_PORT|=(1<<CLK);
                    
    
    }

    Delay100TCYx(200);                    //20 ms
      while(1)
        {    
    
      }
}
```
Adjunto la simulación del proteus de código para el atmega16 así como del pic18f458 espero me puedan ayudar gracias.


----------



## Meta (Sep 18, 2013)

Ahora te pasas al XC8, que es el sustituto preferiblemnte del C18 y más actualizado. más adelante el C18 dejará de actualizarse.


----------

