Y bueno ahora empezando con este ejemplo me quedan varias dudas, espero puedan ayudarme
1. Existe algún soft para generar retardos para AVR?
2. En el código de ejemplo no ví los fuses, palabra de configuración o equivalente para los AVR, no es necesario? o donde se lo hace? el cristal por ejemplo :?
3. En el proteus vi que existe una ventana muy diferente a la de los pic's, hay otras cosas más, y como saber las configuraciones correctas, esos ya son los fuses? con el código de arriba dejé con estas configuraciones en el proteus:(http://img405.imageshack.us/img405/1857/ventana.jpg) (http://img405.imageshack.us/img405/1857/ventana.jpg)
Muchas gracias por la ayuda, saludos
void delayLong() //retardo
{
unsigned int delayvar;
delayvar = 0;
while (delayvar <= 65500U)
{
asm("nop");
delayvar++;
}
} WGLOOP1: ldi R31, $C4
WGLOOP2: dec R31
brne WGLOOP2
dec R30
brne WGLOOP1
dec R29
brne WGLOOP0
; -----------------------------
; delaying 6 cycles:
ldi R29, $02
WGLOOP3: dec R29
brne WGLOOP3
; -----------------------------
; delaying 2 cycles:
nop
nop
; ============================= WGLOOP0: ldi R18, $BC
WGLOOP1: ldi R19, $C4
WGLOOP2: dec R19
brne WGLOOP2
dec R18
brne WGLOOP1
dec R17
brne WGLOOP0
; -----------------------------
; delaying 3 cycles:
ldi R17, $01
WGLOOP3: dec R17
brne WGLOOP3
; -----------------------------
; delaying 1 cycle:
nop
; =============================
;encled.asm
;LED en pin PORTB0 con resistencia 470 Ohm
.include "m8def.inc"
.cseg
.org 0
rjmp RESET ;Reset Handle
rjmp RESET
rjmp RESET
RESET: ldi r16, 0b11111111 ;cargamos el registro r16 como salida
out DDRB, r16 ;configuramos PORT B for all outputs
loopit: ldi r16, 0 ;cargamos todos PORTB a 0 al registro R16
out PORTB, r16 ;aqui encendemos todas las salida del PORTB
rjmp loopit
y luego sigo sigo sin sacar el retardo,
quisiera tener 1 seg con 4MHz de preferencia
Vamos A ver No debo de Andar Mut Rate Cuando En El Mismo
Soft De MiCrOtRoNiC Te Lo Pone
ahí no son solo 1us??
lo que necesito son 1'000.000 de us que es igual a 1seg
aqui para 1 seg 4MHZ
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
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
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
( 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
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
.........................................................................
;.....................................................................................
;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 ;
;....................................................................................
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
..................
Seguiré buscando algo de info para ver si se puede colocar
algún comando dentro del mismo código .asm
La Memoria Del Programa Se Divide En 2 Secciones
............ = 0x0000
. .
. .
. .
. .
. . Organizacion De La Memoria
. .
. . La Parte Alta Contiene El Codigo Del BootLoader(Boot Program section)
. .
. .
. .
. .
. . .
. . . .
. . . .
.. . .
. . La Parte Baja Contiene El Codigo De La Aplicacion (Application Program section)
.. .
. .
. .
............
Los Atmegas Poseen 6 Bits De Seguridad Para Proteger A La Memoria Independientemente De Los Bits De Fusibles
Que Estos Si Se Gravan A Traves Un Software
La Parte Alta De La Memoria Contiene El Codigo Del BootLoader Esta Protegida Por Los Bits BL1
cuando se programa en ASM o C,
se puede configurar estos fuses mediante líneas de código en el .asm o .c,
por ejemplo en ASM se hace así:
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF & _WRT_ENABLE_OFF & _LVP_OFF & _BODEN_ON
ó se puede colocar el equivalente en hexadecimal: __CONFIG 0x3f71
similares formas de trabajo como en los AVR,
estás son el cristal, el power on, el watch dog,
proteccion de flash contra lecturas,
protección de eeprom contra lecturas, etc, etc.
;---------------------------------------------------------
; Configuro La Uart Para 9600 Bauds Con Un Cristal De 4 Mhz
;----------------------------------------------------------
;\ Para fijar la velocidad tienes que pasar un valor a UBRR
; | Inicialisation Uart 9600 BDS Quartz
; | 9600*16 = 153.600
; | 4.000.000 / 153600)= 26,04 Decimal -1 = 25.04 Decimal
; | 25 Decimal = 19 Hexadecimal
; | UBRR = (frecuencia cristal/(16 * baudrate)) - 1
LDI R16,0x19 ; | UBRR = 25 Decimal= 19 Hexadecimal
STS UBRR0L,R16 ; /
;..........................................................
;UCSR0B: USART Control and Status Register B
;RXEN: Este Bit Debe De Estar A 1 Para validar El Funcionamiento De La UART En Modo Recepcion
; En Este Caso El Pin Del Puerto PD0 Es Compartido Con La Entrada De Datos
;|-------|-------|------|-----|-----|------|-----|-----|
;|RXCIE0 |TXCIE0 |UDRIE0|RXEN0|TXEN0|UCSZ02|RXB80|RXB80|
;|-------|-------|------|-----|-----|------|-----|-----|
; 0 0 0 1 1 0 0 0 LDI R16,0x18
LDI R16,0x18 ; Transmision Activada Bit3 TXEN0 Y/Recepcion Activada Bit 4 RXEN0 En UCSR0B
STS UCSR0B,R16 ; UCSR0B
;.............................................................................
pues como decia programar los Fuses a mano nunca lo he vistos, porque para eso ya lo hace el programador, digo yo!!
Perdoname Belgitaes pero tampoco te sigo comprendiendo, que tiene que ver un Bootloader con los Fuses!!! el temas que puso el amigo Cryn es si se podia compilar los Fuses, como los pic, cosas que con el Atmel es imposible, ya se comento muchos de esos, conclusion los Fuses de lo Atmel se configuran cuando se programa el micro, soy novato de verdad en Atmel, pero he leido muchos Tutorial de Atmel y nunca lei de programar los Fuse como tu lo explica, pero si tu esta convencido que se puede , te ruego que me ponga un Ejemplo en Assembler o GGC que se pueda quemar en el micro y funciones. repito soy un Novato en los Micros y estoy aqui para aprender con ustedes.
:mrgreen:
Saludos
Hola.con que quieres compilar MLO__, con WINAVR o con AVR STUDIO, porque el 1ro es para C y el segundo para ASM aunque el 1ro se integra al AVR STUDIO, como bien ya debes saber
Revisando los archivos de salida resultado de la compilación, no encuentro por ningún lado el .cof. Como se habilita la generación de este archivo? En la ayuda hay algo sobre los tipos de archivos soportados pero no indica que se deba hacer para que lo genere.
Saludos
Ya hay bastante con los fuses ahora empiecen con el winavr y con sub funciones por que a mí no me sale se pierde codigo cuando es optimizado en zize.
AKENAFAB, quería hacerte una consulta, ya que hablaste de algunas configuraciones del avr studio, es la siguiente:
casualmente hice mis cálculos para 4MHz y el avr studio está configurado para que en su simulación-depuración corra a esa misma velocidad, y fue una total coincidencia, aunque no es relevante, pues en cuanto a simulación de retardos prefiero no hacerlos en el avr studio porque parece que demora bastante, al menos no pude apreciarlo, colocaba un breakpoint después del retardo y nuca pasaba.. quizá algo hago mal por ahí pero en fin, esa no es mi duda, sino de que como se puede configurar la frecuencia de clock que se usará en el debug del avr studio??
Hola Cryn , no soy fino simulando en AVR pero haciendo prueba con el AVRStudio4 tu puede controlar la Simulacion, loo puede hacer paso a paso o avanzado, los del calculo del Reloj, si te va Opcion Debug alli cambie el Reloj :z) :z) quizas este diciendo burradas pero es la unica forma que se puede ver los modulos de los Registros y ver lo que sucede.
Saludo
ya lo encontré, si, está en el menú DEBUG, la opción AVR SIMULATOR OPTIONS y hay más opciones de simulación
saludos
Perdoname Belgitaes pero tampoco te sigo comprendiendo,
que tiene que ver un Bootloader con los Fuses!!!
;****************************************************************************************
;El Timer/Counter Puede Ser Sincronizado Por Un Reloj Interno O Una Fuente Externa
;El Reloj Fuente Esta Selecionando A Traves El Clock Select
;El Clock Select Son Tres Bits CS02 CS01 CS00
;Lo Cuales Permiten Selecionar La Fuente De Reloj A Emplear Por El Timer/Counter
;TCCR0B : Timer/Counter Control Register B :
;|------|------|------|------|------|------|------|------|
;|FOC0A |FOC0B | – | – |WGM02 | CS02 | CS01 | CS00 |
;|------|------|------|------|------|------|------|------|
; 1 0 1 = ClkI/O/1024 (From Prescaler)
; Table 14-9. Datasheet Pagina 106
;Si Se Utiliza El Modo Externo Para El Timer/Counter0 La Transmision Del Reloj Externo
;Sobre El Pin T0 Se Hara Igualmente Si El Pin Esta Configurado Como Salida
;Esta Particularidad Permite El Control Del Contador Por Software
LDI R17,0x05 ;Prescalado CLK/1024
OUT TCCR0B,R17 ;Timer/Counter
;****************************************************************************************
Muchas Gracias Cryn Ahora Si Los Puedo Simular En Proteus :g)De nada Belgitaes, que bueno que ahora si lo puedas ver en la simulación
me podrias decir que version de proteus estas utilizando , por lo que veo cuando armas el diseño en proteus sera necesario poner ese cristal mas los condensadores dado que solo es simulacion ?Parece que no te fijaste bien los ejemplos que puse, ni leíste los primeros post, porque algunas respuestas las tienes ahí.
igual en el circuto de reset que pasa si no los pongoEl reset tanto en simulación como en circuito armado debe estar conectado a Vcc, en simulación no hace falta la resistencia, pero en lo real debe estar. Y si o si se usan ya que si no leí mal en la hoja de datos si lo cambias a RESET no habilitado en programación serial, puede que después ya no funcione más. Y como sabrás uso modo serial para la programación del micro.
tengo problemas al simular en proteus la interrupcion del timer0 no hace lo que deberia hacer , pues me late que es el simulador proteus , si podrias por favor poner una imagen de como es la parte en que cargas el HEX en el proteus te agradeceria ver esa ventana del micro "Edit Componet".Eso lo puedes ver en el segundo post (http://www.todopic.com.ar/foros/index.php?topic=27420.msg225640#msg225640) del hilo, en la primera página.
haber si haces un programita donde se use interrrupciones INT0 por ejemplo y el TIMER0, y ver si se puede simular bien en el proteusYa hice un ejemplo de la interrupción externa INT0, es el Ejemplo 4. Contador de 00-99 (http://www.todopic.com.ar/foros/index.php?topic=27420.msg230381#msg230381). La interrupción y manejo del TIMER/COUNTER0 es mi siguiente ejemplo, lo estaba estudiando en la hoja de datos, no pude terminarlo todavía porque tuve algunos problemas con el grabador en mi PC, reinstale mi winxp 2 veces y nada, todavía sigo instalando algunos programas, será entre estos días que pueda estar más relajado.
graciela :mrgreen:
..en la casa de mi asistente..:shocked: :mrgreen: ;-)
jajaja que paso SUky, si a ti te gustan todos los lenguajes :D ya se viene pronto en C :mrgreen:See! pero me estoy acostumbrando a lo fácil :D :D
Realmente muy interesante! Pero me parece que voy a esperar tus primeros ejemplos en C :mrgreen: Basta de ASM :8} :D :D
..en la casa de mi asistente..:shocked: :mrgreen: ;-)jajaja que paso SUky, si a ti te gustan todos los lenguajes :D ya se viene pronto en C :mrgreen:See! pero me estoy acostumbrando a lo fácil :D :D
Saludos y animo en el aprendizaje!
Realmente muy interesante! Pero me parece que voy a esperar tus primeros ejemplos en C :mrgreen: Basta de ASM :8} :D :D
Pues creo yo tambien esperare a los ejemplos en C o talves realizamos algunos ejemplos en conjunto los tres Suky, Cryn y mi persona por supuesto, claro esta en menor medida ;-) porque ASM me da una pereza hace ya mucho que no lo utilizo... :?
Asi que por el momento consigo los programas necesarios para comenzar con C.
Que raro lo que comentas sobre el GTP USB+, si en algo puedo ayudar pues estoy a la orden Cryn.
Un saludo,
Erick
Hola.
El WINAVR no genera el .coff (o no he podido configurar eso). Los ejemplos son hechos con el CodeVisionAVR, sería como el CCS de los PIC jeje, muy fácil de usar.
Saludos
hay algo q no me queda muy claro..en los pic tenemos q una instruccion se realiza cada 4 ciclos de reloj, q con un crital de 4MHZ seria 1Us..ahora en los atmel ..cada instruccion se realiza a la par con el reloj? es decir en 0,25Us...entonces podria utilizar la misma formula del timer0 de los pic ..aqui en los atmel pero en lugar de (4/Fosc)..pongo 0.25Us?
(http://www.aquihayapuntes.com/images/stories/practicasPIC/recursos/tmr0Temp/formulatmr0.png)
En este ejemplo la funcion delay(...) se pierde. En la simulacion se salta.
Ya este ejemplo ya lo hice con cvavr, iar y trabaja normal.
En un atmega8.
#include <avr/io.h>
void delay( unsigned int a)
{
while(a){
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;
}
volatile unsigned int b;
void delay( unsigned int a)
{
b = a;
while(b){
b--;
}
}