Autor Tema: Empezando con AVR  (Leído 90708 veces)

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

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Empezando con AVR
« Respuesta #30 en: 15 de Septiembre de 2009, 12:58:39 »
Ahora veremos la siguiente opción que usaré, que es la configuración del oscilador como RC interno, para ello otra vez recurrimos a la sabia hoja de datos que nos dice que debemos hacer:


y los bits de SUT igual:


En este caso yo usaría 4 u 8 MHz, el SUT al máximo y CKOPT siempre deshabilitado cuando se usa el Oscilador interno, como dice la hoja de datos:

CKSEL3:0 = 0011(4MHz) ó 0100(8Mhz)
SUT1:0=10 (16CK y 65ms)
CKOPT=1


Esta es mi segunda opción en cuanto a configuración de oscilador.

Por favor si he cometido algún error por favor háganmelo saber para que maneje información correcta y no le pase nada a los AVR's.

Y me quedó una duda dentro las características del ATmega8 está que puede trabajar a 16MIPS a 16MHz, cual sería la configuración para usarlo a tope? está bien de esta manera??:

CKOPT=0 CKSEL3:1=111

o que significa la ultima opción de la tabla 8-3 que esta en mi anterior post? 1.0<= :?

saludos
.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Empezando con AVR
« Respuesta #31 en: 15 de Septiembre de 2009, 14:06:42 »
Cabe aclarar que este micro, el ATmega8 tiene 2 bytes de fuses, y un byte de protección, llamados:

Fuse Low Byte: CKSEL0:3, SUT0:1, BODEN, BODLEVEL
Fuse High Byte: BOOTRST, BOOTSZ0:1, EESAVE, CKOPT, SPIEN, WDTON, RSTDISBL
Lock Bit Byte:   LB1:2, BLB01, BLB02, BLB11, BLB12

de los cuales ya vimos los que están en negrilla, entonces para terminar con el Low byte nos falta ver al Brown out, que es similar al de los micros PIC de microchip:

BODEN: habilitar o deshabilitar la detección del Brown-out ("1"=desactivado; "0"=activado)
BODLEVEL: establece el umbral del Broun-out en 2.7V ó 4.0V ("1"=2.7V; "0"=4.0V)



Ahora nos toca detallar el Fuse High Byte:
  • BOOTRST: Select Reset Vector, Salta a la dirección del Boot Loader ("0"=vector reset 0x00; "1"=otra dirección configurada según el tamaño del bootloader, siguientes 2 bits)
  • BOOTSZ0:1 Determina la cantidad de espacio reservado para el bootloader, por defecto el mínimo es 128Words (BOOTSZ0:1=11), los otros tamaños se seleccionan según la tabla de la hoja de datos:


  • EESAVE: La memoria eeprom es mantenida después del borrado del micro ("1"=no se mantiene; "0"=se mantiene)
  • SPIEN: Habilita la programación y descarga de datos serial ("0"=programación SPI habilitada; "1"=programación paralela activada). No se accede a este bit en modo de programación serial
  • WDTON: habilitación del Watch-Dog ("1"=deshabilitado; "0"=habilitado)
  • RSTDISBL: Selecciona si el pin PC6 es pin de I/O o pin de RESET ("1"=RESET; "0"=I/O)

NOTA.- En este último bit creo que es donde se debe tener un cuidado especial, ya que la hoja de datos dice que si se activa el pin PC6 como I/O, solo se puede cambiar a que funcione como RESET en modo de programación paralela o al menos eso entendí.
.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Empezando con AVR
« Respuesta #32 en: 15 de Septiembre de 2009, 14:26:16 »
Ahora solo falta el detalle de los Lock Bits, que son de protección, que para empezar no necesito proteger nada, pero si se desea proteger a cierto nivel, se puede escoger cualquiera de las opciones:




Entonces lo que haré es deshabilitar todo, osea no proteger nada:

LB2:1=11 Sirven para la Memoria de Programa y para la EEPROM
BLB02:01=11; BLB12:11=11 Son para accesos al Bootloader

Con eso no más fuses que ver del micro con el que trabajaré, espero entonces sus comentarios, para ver si hay algún error por ahí o algo más que considerar?

saludos!
.

Desconectado MiCrOtRoNiC

  • PIC18
  • ****
  • Mensajes: 271
Re: Empezando con AVR
« Respuesta #33 en: 15 de Septiembre de 2009, 19:14:40 »
Ahora veremos la siguiente opción que usaré, que es la configuración del oscilador como RC interno, para ello otra vez recurrimos a la sabia hoja de datos que nos dice que debemos hacer:
En este caso yo usaría 4 u 8 MHz, el SUT al máximo y CKOPT siempre deshabilitado cuando se usa el Oscilador interno, como dice la hoja de datos:

CKSEL3:0 = 0011(4MHz) ó 0100(8Mhz)
SUT1:0=10 (16CK y 65ms)
CKOPT=1


Esta es mi segunda opción en cuanto a configuración de oscilador.

Por favor si he cometido algún error por favor háganmelo saber para que maneje información correcta y no le pase nada a los AVR's.

Y me quedó una duda dentro las características del ATmega8 está que puede trabajar a 16MIPS a 16MHz, cual sería la configuración para usarlo a tope? está bien de esta manera??:

CKOPT=0 CKSEL3:1=111

o que significa la ultima opción de la tabla 8-3 que esta en mi anterior post? 1.0<= :?

saludos

1.0<=
edit. tienes razon ma4826 :z)   

cryn eso quiere decir que si lo configuras asi es para frecuncias iguales o menores  mayores a 1mhz...

´para frecuencias mayores a 8mhz seria
cksel 1-3: 111
ckopt :0

saludos
« Última modificación: 16 de Septiembre de 2009, 10:53:31 por MiCrOtRoNiC »

Desconectado ma4826

  • PIC16
  • ***
  • Mensajes: 130
Re: Empezando con AVR
« Respuesta #34 en: 15 de Septiembre de 2009, 19:25:29 »
Ahora veremos la siguiente opción que usaré, que es la configuración del oscilador como RC interno, para ello otra vez recurrimos a la sabia hoja de datos que nos dice que debemos hacer:
En este caso yo usaría 4 u 8 MHz, el SUT al máximo y CKOPT siempre deshabilitado cuando se usa el Oscilador interno, como dice la hoja de datos:

CKSEL3:0 = 0011(4MHz) ó 0100(8Mhz)
SUT1:0=10 (16CK y 65ms)
CKOPT=1


Esta es mi segunda opción en cuanto a configuración de oscilador.

Por favor si he cometido algún error por favor háganmelo saber para que maneje información correcta y no le pase nada a los AVR's.

Y me quedó una duda dentro las características del ATmega8 está que puede trabajar a 16MIPS a 16MHz, cual sería la configuración para usarlo a tope? está bien de esta manera??:

CKOPT=0 CKSEL3:1=111

o que significa la ultima opción de la tabla 8-3 que esta en mi anterior post? 1.0<= :?

saludos

1.0<=

cryn eso quiere decir que si lo configuras asi es para frecuncias iguales o menores a 1mhz...

saludos por lo demas esta bien

Es justamente lo contrario, con esa configuración funciona para cristales de frecuencia igual o mayor de 1MHz y es el único modo posible para frecuencias mayores de 8MHz.

Saludos,

Miguel Ángel.


万人の友は誰の友でもない。

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Empezando con AVR
« Respuesta #35 en: 16 de Septiembre de 2009, 12:39:11 »
no sabía si era mayo o menor, que rareza eso, deberían hacerlo más entendible, creo que el signo debe ir siempre antes del numero...

en fin, supongo que es la opción que dice ma4826, ya que si no no hubiera posibilidad de usar frecuencias mayores a 8MHz, para llegar al tope de 16MHz que dice en sus características

gracias por las respuestas muchachos, ahora a la espera de los micros para que pueda probarlo físicamente

saludos.
.

Desconectado Belgitaes

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Empezando con AVR
« Respuesta #36 en: 19 de Septiembre de 2009, 03:33:37 »
El Atmega Tiene Un Oscilator Rc Interno Que Por Defecto Viene Programado Como A 1Mhz
Y Es Lo Primero Que Hay Que Mirar Y Es Muy Importante Estar Seguro De Lo Que Se Pone
No Sea Que Se Programé Para Funcionnar Con Uno Externo Y No Haya Ningun Cristal Puesto
Y Esto Suele Ser La Mayoria De Veces La Causa De que Los Micros Se Mueren Al Programarlos
Por Suerte Con Un Reloj Externo Se Pueden Resucitar

El Atmega Tiene Un Oscilator Rc Interno Y Sino Configuras Los Fuses Para Usar El Oscilator Externo
Terminas Usando El Oscilator Interno Por Defecto

El Atmega  Tiene Una Frecuencia De Funcionamiento De 8 Mhz Maxima Sin Cristal
Para Utilizar Una Frecuencia Mayor se Necesita Emplear Un Cristal Externo

Asi Que Esos Fuses Son Los Que Hay que Mirar Cuando Uno Programa El Micro

En El Datasheet Tienes:
External Crystal: CKSEL3..0  1111
Pero Cuidado Note:
Fuse and Lock bits that are programmed will be read as zero
Fuse and Lock bits that are unprogrammed will be read as one
Interpretando :
“1” means unprogrammed
“0” means programmed
Lo Mejor Antes De Manipularlos Es Darle La Opcion Read
Para Ver La Configuracion Actual
Es Decir Si Utilizas Ponyprog Y Lee La Configuracion De Los Bits
Normalmente Tendras

CLSEL3: “v” Señalado   = 0 PROGRAMADO
CLSEL2: “v” Señalado   = 0 PROGRAMADO
CLSEL1: “v” Señalado   = 0 PROGRAMADO
CLSEL0: “ ” NOSeñalado = 1 NO PROGRAMADO

Lo Que Corresponde Al Modo 1Mhz Interno

Tienes Una Pagina Web Que Hace De Funcion de Calculadora
Para Los Fuses

http://www.engbedded.com/fusecalc/
Ahi Podras Ver Todas Las Opciones de Configuracion Possible

AVR part name:  – please select –

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Empezando con AVR
« Respuesta #37 en: 19 de Septiembre de 2009, 11:25:33 »
Muy buenos datos Belgitaes, gracias! tendré cuidado en no matar a los micros, para no luchar por recusitarlos.

Si, eso del unprogrammed y programmed ya se me grabó, todo el tiempo lo repiten en la hoja de datos jaja

Vi la pagina, también me la dejó de link MiCrOtRoNiC, muy buena página;  pero tuve que estudiarlas a detalle y ver que significan dentro la hoja de datos, y las comprendo casi todas, gracias por los aportes amig@s! :mrgreen:

La duda que ahora me queda es que, si se peude incluir dentro del código en ASM los fuses, como en los pics con el comando __CONFIG ...    hay algo similar para AVR's, o solo se los programa cuando se está grabando el programa al micro?

muchas gracias por los comentarios, saludos
.

Desconectado Belgitaes

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Empezando con AVR
« Respuesta #38 en: 19 de Septiembre de 2009, 13:23:55 »
Código: [Seleccionar]
La duda que ahora me queda es que,
si se peude incluir dentro del código en ASM los fuses,
como en los pics con el comando __CONFIG ...    
hay algo similar para AVR's,
o solo se los programa cuando se está grabando el programa al micro?

muchas gracias por los comentarios, saludos


De Pic No Entiendo Nada
Bueno Te Cuento El Vicio Mio Es Desemsamblar Algunos Codigos
Para ver Como Estan Hechos
De Esta Manera Es Como Aprendi Un Poco A Manejar el Avr
Mirando Como Lo Hacian Los Demas
Es Otra Forma De Aprender
Consegui Desemsamblar Un Codigo Protegido Por Los Locks bits
De Un Firmware Hecho Con Un Atmega88
Asi Que Te Pondre El Code Donde Efectivamente Habia Algo De Eso
Para Que Veas Que Si Se Puede Hacer

En Principio Vamos A Ver El Significado De Cada Uno :

Código: [Seleccionar]

( LOCK BITS)

Seguridad De la Memoria : Tipo De Protecion
************************
..............
LB2  .  LB1  .
..............
 1   .   1   . Sin Habilitar La Protecion De La Memoria
..............
 1   .   0   . Deshabilita Futuras Programacion De La Flash Y EEprom En Los Modos Paralelo Y Serial
.............. Los Bits De Los Fusibles De Programacion Estan Asegurados En Ambos Modos
     .       .
 0   .   0   . Igual Al Anterior Y Tambien Se Deshabilita La Verificacion
..............


Seguridad De la Aplicacion : Tipo De Protecion
***************************
..................
BLB02  .  BLB01  .
..................
  1    .    1    . Sin Restriciones En Las Instruciones SPM o LPM Para El Acceso
.................. A La Seccion De La Aplicacion
       .         .
  1    .    0    . SPM No Esta Permitido Para Escribir En La Seccion De La Aplicacion      
..................
  0    .    0    . Igual A Lo Anterior Y Posterior Pero Juntos
..................
  0    .    1    . LPM Ejecutada En El BootLoader No Esta Permitida Para Leer
                 . Desde La Seccion De La Aplicacion    
                 . Si Un Vector De Interupcion Es Puesto En La Seccion Del BootLoader
                 . La Interupcion Esta Deshabilitada Mientra Se Ejecuta Desde La Seccion De La Aplicacion
..................  

Seguridad De la Seccion Del Bootloader  : Tipo De Protecion
***************************************
..................
BLB12  .  BLB11  .
..................
  1    .    1    . Sin Restriciones En Las Instruciones SPM o LPM Para El Acceso A La Seccion Del BootLoader
..................
       .         .
  1    .    0    . SPM No Esta Permitido Para Escribir En La Seccion Del BootLoader      
..................
  0    .    0    . Igual A Lo Anterior Y Posterior Pero Juntos
..................
  0    .    1    . LPM Ejecutada En La Aplicacion No Esta Permitida Para Leer
                 . Desde La Seccion Del BootLoader    
                 . Si Un Vector De Interupcion Es Puesto En La Seccion De La Aplicacion
                 . La Interupcion Esta Deshabilitada Mientra Se Ejecuta Desde La Seccion Del BootLoader

Código: [Seleccionar]
La Memoria Del Programa Se Divide En 2 Secciones
  ............ = 0x0000
  .          .
  .          .
  .          .  
  .          .
  .          .  Organizacion De La Memoria
  .          .  
  .          .  La Parte Alta Contiene El Codigo Del BootLoader
  .          .
  .          .
  .          .
  .        .
  .      .   .
  .    .   . .
  .  .   .   .
  ..   .     .
     .       .la Parte Baja Contiene El Codigo De La Aplicacion
  ..         .    
  .          .
  .          .
  ............
  .          .
  .          . Flash Para La Seccion Del Boot
  ............ = 0x 0FFF/0x1FFF

  La Parte Baja Contiene El Codigo De La Aplicacion Y Esta Protegida Por Los Bits BLB02  BLB01
  La Parte Alta Contiene El Codigo Del BootLoader Y Esta Protegida Por Los Bits BLB12  BLB11

.........................................................................


Desde El Bootloader Se Puede Escribir De Muchas Maneras
Normalmente Cuando Se Necesita Poner Un Nuevo Software En Un Micro
El LLamado Programador Se Connecta Por Ejemplo A Traves Del Puerto RS232
Lee El Nuevo Software Desde El PC Y Lo Pone En La Parte Principal
Llamada Seccion De Aplicacion De La Flash
 
Por Lo Que Al Software Se Le Puede Dar Al Mismo Actualizaciones Individuales
Sin El Riesgo De Ingenieria Inversa O Firmware Hackeado

La Organizacion De La Memoria Flash Esta dividida En Dos Secciones
Una Aplica La Seccion De Aplicacion y La Otra La Seccion De Carga De Boot(Autoarranque)
La Seccion De Aplicacion Contiene El Codigo Principal Para Su Uso
Mientras La Seccion De Autoarranque (BootLoader o Carga De Boot) Contiene El Codigo Para La Autoprogramacion Real

Vamos A Ver Como Lo Hicieron A Traves El Mismo Firmware ( Codigo Asm)

Si Nos Fijamos Bien En La Tabla Que Segun El Datasheet Del Atmega88

..................

Esto Seria Parte Del Desemblado Del Firmware

Código: [Seleccionar]

;.....................................................................................
;Configura El Boot Loader Lock Bits Con SPM
;Bits:                                                
;|--7--|--6---|--5---|--4---|--3---|--2--|--1--|--0--|
;|-----|------|------|------|------|-----|-----|-----|
;|  1  |  1   |BLB12 |BLB11 |BLB02 |BLB01| LB2 | LB1 |
;|-----|------|------|------|------|-----|-----|-----|
;   0     0      0     0       1      0     0     0  | =LDI     R17,0x08
;               SI    SI      NO     SI    SI    SI
;...........................................................................................

 LDI     R17,0x08         ;Configura El Boot Loader Lock Bits Con SPM En R17
 OUT     SPMCSR,R17       ;Copia Los Datos En SPMCSR
 SPM                      ;Ejecuta SPM
 RCALL   SPM              ;Espera SPM Y Vuelve Aqui

Esto Seria Otra Parte Del Firmware

;Configura El Boot Loader Lock Bits Con SPM
;Bits:                                                
;|--7--|--6---|--5---|--4---|--3---|--2--|--1--|--0--|
;|-----|------|------|------|------|-----|-----|-----|
;|  1  |  1   |BLB12 |BLB11 |BLB02 |BLB01| LB2 | LB1 |
;|-----|------|------|------|------|-----|-----|-----|
;   0     0      0     0       1      0     0     1  | =LDI     R17,0x09
;               SI    SI      NO     SI    SI    NO

Esto Seria Otra Parte Del Firmware

 LDI     R17,0x09         ;Configura El Boot Loader Lock Bits Con SPM En R17
 OUT     SPMCSR,R17       ;Copia Los Datos En SPMCSR
 SPM                      ;Ejecuta SPM
 RCALL   SPM              ;Espera SPM Y Vuelve Aqui
;.................................................................................

 SPM:      ;Espera SPM
 
 IN      R17,SPMCSR       ;
 SBRC    R17,0            ;Salta A La Siguiente Instrucion Si r17 = 0
 RJMP    PC-0x0002        ;Salta SPMCSR Si r17 Es Positivo
 RET                      ;
;....................................................................................


Es Decir Como El Firmware Necesita Rellenar La Parte Superior Del Micro
Que Es La Que No Se Ve Ya Que Esta Es La Que Esta Protegida Una Parte De Ella A Traves El Mismo Firmware
Y La Otra A Traves El AvrDude o El Win Pic

Una Aplica La Seccion De Aplicacion y La Otra La Seccion De Carga De Boot(Autoarranque)
La Seccion De Aplicacion Contiene El Codigo Principal Para Su Uso La Que No Se Vé
Mientras La Seccion De Autoarranque (BootLoader o Carga De Boot) Contiene El Codigo Para La Autoprogramacion Real
De La Parte Oculta
La Instruccion SPM Solo Puede Ser Ejecutada Desde La Seccion De BootLoader(Autoarranque)

La Totalidad De La Flash Memory Tanto En Seccion De Aplicacion Como Seccion De Carga De Boot
Esta Dividida en Paginas Que Contienen 32, 64, o 128 Words Cada Una

Segun El Datasheet Del Atmega88 :
La Limitacion Para No Read-While-Write section (NRWW)Pagina 282 Datasheet Table 26-7.
ATmega88 NO Read-While-Write section (NRWW) = 32 Paginas 0xC00 - 0xFFF

Es Decir Hara Boot Reset Address (Start (Carga De Boot)BootLoader Section) En La Direcion 0xC00
La Instrucion LPM Sirve Entonce Para Leer Unos Valores
Ya Colocadas En La Memoria Flash En El Momento De La Carga

La Direcion De La Pagina Sera Tomada En La Parte Alta Del Registro Z
Las Instruciones Son Todas De 16 Bits O 32 Bits
Y Ocupan 1 o 2 Direciones En La Memoria Flash (1 o 2 x 16 Bits = 2 o 4 Bytes)
+00000000:   FFFF   = 16 Bits ( 2 Bytes)

POR ESO!!!
Configura Despues Con El WinPic o AvrDude Los Bits BLB12  BLB11 =“v” means = 0 PROGRAMADOS
Para No Permitir Escribir Ni Leer El Contenido Una Vez Programado El Chip

Código: [Seleccionar]

Seguridad De la Seccion Del Bootloader  : Tipo De Protecion
***************************************
..................
BLB12  .  BLB11  .
..................
  1    .    1    . Sin Restriciones En Las Instruciones SPM o LPM Para El Acceso A La Seccion Del BootLoader
..................
       .         .
  1    .    0    . SPM No Esta Permitido Para Escribir En La Seccion Del BootLoader      
..................
  0    .    0    . PROGRAMADOS  PERO ESTA VEZ A 00 A Traves El Software Win Pic
                 . El Cual Lo Interpreta De Esta Manera =“v” means = 0
                 . (Igual A Lo Anterior Y Posterior Pero Juntos)  
..................
  0    .    1    . LPM Ejecutada En La Aplicacion No Esta Permitida Para Leer
                 . Desde La Seccion Del BootLoader    
                 . Si Un Vector De Interupcion Es Puesto En La Seccion De La Aplicacion
                 . La Interupcion Esta Deshabilitada Mientra Se Ejecuta Desde La Seccion Del BootLoader
..................  


Una Vez Hecho Eso
La Funcion Del Software Es La Que Le Corresponde Mandar Aquellas 32 Paginas En Formato De Comandos
2 Bytes * 32 Paginas = 64 Bytes Por Cada Comando
Para Actualizar En Conjunto Con El BootLoader Section
Hasta Rellenar La Totalidad De La Seccion De Aplicacion ( Parte Oculta )
La Cual No Podremos Ver Despues Una Vez Rellenado El Micro En Su Totalidad
Debido A La Protecion Puesta Por Los Bits De Seguridad

Por Lo Que Al Software Se Le Puede Dar Al Mismo Actualizaciones Individuales
Sin El Riesgo De Ingenieria Inversa O Firmware Hackeado

Cuando El Bit BOOTRST Esta Programado El Dispositivo Saltara A La Direccion « Boot Loader » Automaticamente
BootLoader Flash Seccion =  0C00 - 0FFF
La Configuracion Mas Tipica De Programacion Y Interupciones Para La Transmision De Direciones En El Atmega88 Son :
Org 0x0C00

Pon BOOTRST a 1. Eso Deshabilita El Bootloader Y Todo Arrancara Como Quieres

En Fin Toda Teoria Sin Practica No Vale Nada
Yo Solamente Aplico La Teoria
Creo Que No Me Equivoque En Nada

edito para Corregir Algo
Hasta Rellenar La Totalidad De La Seccion De Aplicacion
Borrado
Parte Oculta
Para Actualizar En Conjunto Con El BootLoader Section
Hasta Rellenar La Parte Alta Del Codigo Del BootLoader
Parte Del Codigo QUE NO SE VÉ
La Seccion De Aplicacion Contiene El Codigo Principal Para Su Uso
La Que Se Vé
« Última modificación: 19 de Septiembre de 2009, 14:53:39 por Belgitaes »

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Empezando con AVR
« Respuesta #39 en: 26 de Septiembre de 2009, 01:27:29 »
Hola Belgitaes, primeramente quiero pedirte disculpas por no responder rápido, es que me he entretenido con otras cosas, de los pic's esencialmente..

muchas gracias por tu respuesta, si que hay bastante información de la que no mucho entendí.

Tienes una forma interesante de aprender, lo que yo hago es leer las hojas de datos, ver otros códigos (ya sea en asm o en c) y tratar de entenderlos, merodear por los foros y generalmente preguntar ahí cuando no entiendo algunas cosas :mrgreen:.

Creo que todavía estoy algo newbee en los AVR's y por eso que no logre comprender todo lo que dijiste.

Seguiré buscando algo de info para ver si se puede colocar algún comando dentro del mismo código .asm para configurar algunos o los que se pueda de los fuses, quizá no se pueda, pero en fin, sigo en la busqueda...

Saludos.
.

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Empezando con AVR
« Respuesta #40 en: 26 de Septiembre de 2009, 03:14:52 »
Pues Cryn si lo encuentra pon un mensaje por aqui, ya que yo hace muchos tiempos pensaba lo mismo que tu, pero deberia darte cuenta que la mayoria de programadores que yo usos los Fuses se programan por Software , todavia no he visto nada en Asm o Basic que se pueda hacer, uso muchos el Bascom AVR ,Studio4 AVR y WinAVR y la verdad son los mas ventajoso y hay muchas informaciones en internet.
por eso te dije que para quemar un Atmel siempre debe tener el Datasheef del micro.
Saludos

Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 453
Re: Empezando con AVR
« Respuesta #41 en: 26 de Septiembre de 2009, 13:37:31 »
El C de Winavr no se pero no funciona bien.
Hago sub. funciones y no lo ejecuta lo salta eso solo me sucede en winavr en otros compiladores no.
Para que lo tome en cuenta tengo que declarar las variables como volatile. Ese tipo de declaraciones solo lo hacia para funciones dentro de interrupciones.
en -0s se pierde la funcion delay.

#include <avr/io.h>   


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

int main(void){
char a=0;
 DDRB=255;
 PORTB=0x00;
 delay(50);
 while(1){
   PORTB=a;
   ++a;
   delay(10000);
   if(a>254)
     a=0;
  }
  return 0;
}

Es unico compilador que me sucede esto optimizado en size.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Empezando con AVR
« Respuesta #42 en: 26 de Septiembre de 2009, 14:04:45 »
Del winavr todavía nose mucho, pero si conozco un poco del lenguaje C, pues he programado en lenguaje C de CCS para microcontroladores de microchip, y en algunas materias de la U llevé C++

y me parece muy extraña tu condicional

  while(a--){
  ;
   }

acaso el while testea valores bytes? hasta donde yo se, pregunta por bits. Probablemente si el byte por el que preguntas en el while no es cero, la condicional toma el valor de 1, manteniéndose el ciclo while activo y en ese caso tendría que funcionar tu condición. Pero si no creo que va por ahí el problema

Seguramete tendrás que colocar:

while(a!=0){
a--;
}

me parece que esta forma es más correcta.

bueno espero sirva, saludos
.

Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 453
Re: Empezando con AVR
« Respuesta #43 en: 26 de Septiembre de 2009, 14:13:20 »
La condicion si lo hace.
Pero si lo pones de otra forma la mas legible igual el compilador no lo toma la funcion delay().
sin optimizacion si funciona normal.

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Empezando con AVR
« Respuesta #44 en: 26 de Septiembre de 2009, 14:38:44 »
pues como decia programar  los Fuses a mano nunca lo he vistos, porque para eso ya lo hace el programador, digo yo!!