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

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

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Empezando con AVR
« Respuesta #15 en: 03 de Septiembre de 2009, 16:07:48 »
aqui un ejemplo de encender LED con el atmega 8, se puede hacer con otro Micro tambien.
 
Código: [Seleccionar]
;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

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Empezando con AVR
« Respuesta #16 en: 03 de Septiembre de 2009, 16:33:36 »
Eso si Microtronic xD las placas son una pasada , más las MEga que muestras.

Saludos!

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Empezando con AVR
« Respuesta #17 en: 03 de Septiembre de 2009, 16:40:09 »
sigo sin sacar el retardo, quisiera tener 1 seg con 4MHz de preferencia, pero aunque vario tanto los registros como las frecuencias nada, no genera nada. En ciclos, la 1ra opción en 1 (decide wether to input) ahi si lo genera, pero con la otra como deje, nada...

si lo hiciste con la opción "or time and cycle rate", te rogaría qeu me muestres una captura de tu pantalla, para que pueda como se hace, como dices si es necesario usar otro valor de cristal no hay problema, pero porque no puedo usar 4MHz?

gracias por el ejemplo Rafa

saludos
.

Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 453
Re: Empezando con AVR
« Respuesta #18 en: 03 de Septiembre de 2009, 23:37:03 »
Aqui tengo una version que lo baje año pasado esta si funciona para los segundos.
La ultima que baje solo funciona con ciclos.

Edición por moderador:
http://www.home.unix-ag.org/tjabo/avr/AVRdelayloop.html
« Última modificación: 04 de Septiembre de 2009, 13:06:34 por un Moderador »

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Empezando con AVR
« Respuesta #19 en: 04 de Septiembre de 2009, 00:09:33 »
creo que tengo una maldición, no puedo hacerlo :( sigue sin salir nada de código, como el la última imagen que mostré
.

Desconectado Belgitaes

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Empezando con AVR
« Respuesta #20 en: 04 de Septiembre de 2009, 02:33:54 »
Código: [Seleccionar]
sigo sin sacar el retardo,
quisiera tener 1 seg con 4MHz de preferencia

(Tiempo Reloj)= Periodo De Oscilador/Frecuencia Oscilador
Siendo El Tiempo De Muestreo = 1/Valor Del Oscilador
Usando Un Clock A 4Mhz Significa Que Cada Ciclos Son 0.25 Segundos

Eso Quiere Decir Que Si Queremos Obtener 0.25 Microsegundos
(T=1/f) = 1/4Mhz = 0,25Microsegundos Por Ciclo
Si Usamos Un Clock De 4Mhz
 
Estas Instrucciones Llevarian Segun El Datasheet
Instruction Set Summary
 
 ldi  r16,$04 ;Load Immediate (1 ciclo)                         
 out  sph,r16 ;Out Port           (1 ciclo)
 ldi  r16,$5F ;Load Immediate (1 ciclo)          
 out  spl,r16 ;Out Port              (1 ciclo)

1+1+1+1= 4 Ciclos x 0,25 Microsegundos = 1Microsegundo
Si Quieres Hacer Un Retardo De 1 Microsegundo

ldi r17,$01 ;Cargamos Retardo  : 0.25us = (1 ciclo)
dec r17     ;=  0.25us = (1 ciclo)                 
brne        ;= Cuando Salta = 0.50us = (2 ciclos)
            ;= Cuando No Salta =  0.25us = (1 ciclo)
Como r17 Ya Decremento No Salta Por Lo Que Tenemos = -> 0.75us = (3 Ciclos)
Y Como Buscamos 4 Ciclos Para Completar 1 Segundo
Le Añadimos Un Nop Quedando la Cosa Asi

delay:

nop           = (1 ciclo)
ldi r17,$01   = (1 ciclo)
dec r17       = (1 ciclo)
brne delay    = (1 ciclo)

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Empezando con AVR
« Respuesta #21 en: 04 de Septiembre de 2009, 10:08:53 »
 :? :?

nop           = (1 ciclo)
ldi r17,$01   = (1 ciclo)
dec r17       = (1 ciclo)
brne delay    = (1 ciclo)

ahí no son solo 1us??

lo que necesito son 1'000.000 de us que es igual a 1seg

supongo que tendría que ir por ese lado, calcular cada ciclo, etc y colocar valores en ciclos, y para eso debería ayudarnos un soft. No hay uno parecido al PICDEL para los micros pic?

gracias por responder, saludos
.

Desconectado MiCrOtRoNiC

  • PIC18
  • ****
  • Mensajes: 271
Re: Empezando con AVR
« Respuesta #22 en: 04 de Septiembre de 2009, 10:46:56 »
aqui para 1 seg  4MHZ

; =============================
;    delay loop generator
;     4000000 cycles:
; -----------------------------
; delaying 3999996 cycles:
          ldi  R17, $24
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
; =============================
« Última modificación: 04 de Septiembre de 2009, 11:06:50 por MiCrOtRoNiC »

Desconectado Belgitaes

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: Empezando con AVR
« Respuesta #23 en: 04 de Septiembre de 2009, 12:11:16 »
Código: [Seleccionar]
Vamos A ver No debo de Andar Mut Rate Cuando En El Mismo
Soft De MiCrOtRoNiC  Te Lo Pone

; =============================
;    delay loop generator
;     4000000 cycles:
; -----------------------------


; -----------------------------
; delaying 3 cycles:    ;= (3 Ciclos) = 0.75us
          ldi  R17, $01 ;Cargamos Retardo  : 0.25us = (1 ciclo)
WGLOOP3:  dec  R17      ;=  0.25us = (1 ciclo)
          brne WGLOOP3  ;= Cuando No Salta =  0.25us = (1 ciclo)
; -----------------------------
; delaying 1 cycle:     ;= (1 Ciclo) = 0.25us
          nop           ;=  0.25us = (1 ciclo)
; =============================

Código: [Seleccionar]
ahí no son solo 1us??

lo que necesito son 1'000.000 de us que es igual a 1seg
aqui para 1 seg  4MHZ

Te Lo Explico De Otra Manera

la Palabra Magnitud Significa Tamaño Dimension :

El Segundo Es La Unidad De La Magnitud Tiempo
1 Segundo Es Igual A 1 Unidad
Y Las Dimensiones Mas Pequeñas Que La Unidad ??
En Este Caso Utilizaremos SubMultiplos

En Electronica No Se Emplean Todos Los Multiples
Sino Que Se Recurre A Aquellos Que Van De 1000 En 1000
Es Decir:

Unidad = 1
MicroSegundo (us) = 0,000,001 us
NanoSegundo (ns) = 0,000,000,001 ns

El Microsegundo Es La Unidad De Tiempo Que Equivale A La Millonesima Parte De Un Segundo
1 Micro Segundo = 1 Millon / 1 Segundo

El Nanosegundo Es La Unidad De Tiempo Que equivale A La MIL Millonesima Parte De Un Segundo
1 Nano Segundo = 1000 Millon / 1 Segundo

Este Tiempo Tan corto No Se Usa En La Vida Diaria
Pero Es De Interes En La Electronica

Megahertz (MHz): = 1
El Mhz Es Una Unidad De Medida De Frecuencia
Es Una Medida Para Determinar El Numero De Repeticiones De Cualquier Accion Periodica En Una Unidad De Tiempo
1 Mhz Es Igual A 1.000.000 De Ciclos Por Segundo

Por Lo Que 1/4Mhz = 0,25 Que Es Lo Mismo Que
1/4000000 cycles = 0,000.000.25
0,000.000.25 * 4 Ciclos = 1 MicroSegundo Con Un Cristal De 4 Mhz
Y Como Quieres 1 Segundo Pues Lo Multiplicas Por 1 Million
; -----------------------------
; delaying 3999996 cycles:
          ldi  R17, $24
WGLOOP0:  ldi  R18, $BC
WGLOOP1:  ldi  R19, $C4
WGLOOP2:  dec  R19
          brne WGLOOP2
          dec  R18
          brne WGLOOP1
          dec  R17
          brne WGLOOP0
;-----------------------------

3999996 cycles + 4 Ciclos = 1.000.000 MicroSegundos





« Última modificación: 04 de Septiembre de 2009, 12:20:57 por Belgitaes »

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Empezando con AVR
« Respuesta #24 en: 04 de Septiembre de 2009, 13:11:14 »
ok, ahora si, 4'000'000 de ciclos, eso es porque la velocidad de cada ciclo es directamente 1/Fosc, verdad?

diferente de los Pic's que es 1/(4Fosc)

ok ahora si entendido.

muchas gracias microtonic y belgitaes por tus explicaciones

Ya lo tengo! mi primer programa acabado, parpadeo cada 1 seg, ahora solo espero por mis micros que pronto llegarán para probarlo físicamente.

Código: ASM
  1. ;--------------------------------------------------------------------------------
  2. ;       Programa:       Led on/off
  3. ;       Version:        0.0
  4. ;
  5. ;       Dispositivo: ATmega8                            Compilador: AVRASM2
  6. ;       Entorno IDE: AVR Studio4.15                     Simulador:      Proteus 7.5sp3
  7. ;
  8. ;       Notas:  Este programa hace parpadear un led conectado al pin RB0 del puerto
  9. ;                       B durante aprox. 0.5seg.
  10. ;      
  11. ;       Registros:      r0  -> sirve para el parpadeo del led al aplicarle un eor
  12. ;                               r16 -> On/Off led
  13. ;
  14. ;       Conexiones:     B1 -> Led
  15. ;--------------------------------------------------------------------------------
  16. ;DIRECTIVAS EN ENSAMBLADOR
  17. .include "m8def.inc"        ;ATmega8
  18.  
  19. ;DEFINICION DE REGISTROS
  20. .def  led_cambio=r0         ;registro para parpadeo del led
  21.  
  22. ;reset-vector address $0000                    
  23. .org $0000
  24.         rjmp main               ;ve al main
  25.  
  26. ;PROGRAMA PRINCIPAL
  27. main:                                                  
  28.         ldi  r16,$04            ;Configuracion de...
  29.         out  sph,r16   
  30.         ldi  r16,$5F                   
  31.         out  spl,r16            ;...la pila: Stack: $045F=RAMEND
  32.         ser  r16                ;r16 <- $FF
  33.         out  ddrb,r16           ;portB salida
  34.         ldi  r16,$02            ;r16 <- $02 -> Iluminar led conectado pin RB1
  35.         mov  led_cambio,r16     ;led_cambio <- r16 :variable para el parpadeo
  36.        
  37. loop:
  38.         out   portb,r16          ;actuamos sobre el led(conectado al pin RB0)
  39.         eor   r16,led_cambio     ;cambiamos estado on/off
  40.         rcall  delay_1s         ;retraso de 1seg
  41.         rjmp   loop             ;bucle infinito
  42.  
  43. ;*******************************
  44. ; =============================
  45. ;    delay loop generator
  46. ;     4000000 cycles:
  47. ; -----------------------------
  48. ; delaying 3999996 cycles:
  49. delay_1s:
  50.           ldi  R17, $24
  51. WGLOOP0:  ldi  R18, $BC
  52. WGLOOP1:  ldi  R19, $C4
  53. WGLOOP2:  dec  R19
  54.           brne WGLOOP2
  55.           dec  R18
  56.           brne WGLOOP1
  57.           dec  R17
  58.           brne WGLOOP0
  59. ; -----------------------------
  60. ; delaying 3 cycles:
  61.           ldi  R17, $01
  62. WGLOOP3:  dec  R17
  63.           brne WGLOOP3
  64. ; -----------------------------
  65. ; delaying 1 cycle:
  66.           nop
  67.                   ret
  68. ; =============================

aaah y los fuses que ahora mismo me fijo, directamente en el programa en asm hay alguna forma para incluirlos? estaré checando la hoja de datos del micro.

saludos.
.

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Empezando con AVR
« Respuesta #25 en: 04 de Septiembre de 2009, 14:08:02 »
Cryn para configurar los Fuses, con el Cristal o Oscilador debe tener la hoja de Micro a mano, buscalo en eso que te mande  :mrgreen:
Saludo

Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 453
Re: Empezando con AVR
« Respuesta #26 en: 04 de Septiembre de 2009, 18:30:32 »
El moderador me lo a cambiado la ruta de mi archivo.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Empezando con AVR
« Respuesta #27 en: 04 de Septiembre de 2009, 18:37:20 »
creo que estaba adjuntado, no?

quizá sea por liberar espacio, nose...

gracias por el aporte cristian_elect
.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Empezando con AVR
« Respuesta #28 en: 04 de Septiembre de 2009, 23:10:43 »
Publiqué el link a la página del software porque no deben subir programas ajenos al servidor. Es mejor tener el link y descargarlo desde allá.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Empezando con AVR
« Respuesta #29 en: 15 de Septiembre de 2009, 12:43:13 »
Bueno, de vuelta al tema, después de haber leído muchas hojas de las hojas de datos :D

y vuelvo por los fuses, porque veo que son muy importantes y hay que tener cuidado, no???

Empiezo por el Oscilador, hay varios tipos de configuración, según la hoja de datos son:

  • Cristal o Resonador cerámico externos
  • Cristal externo de baja frecuencia
  • Oscilador RC externo
  • Oscilador interno RC calibrado
  • Reloj Externo

Los que yo uso son el primero y el cuarto, el resto de momento no me interesa jaja, pero sus detalles como siempre están en la hoja de datos.

Para el cristal los fusibles reservados se llaman CKSEL3, CKSEL2, CKSEL1 y CKSEL0, son 4 bits, de ahora en adelante llamados como en la hoja de datos: CKSEL3:0

En la primera opción se usan los fusibles de 1111 - 1010 en CKSEL3:0, variando esas configuraciones se logran las distintas frecuencias, yo para empezar usaré un cristal de 4MHz, entonces haré lo que me dice la hoja de datos:


y usaré CKSEL3:1=111 y CKOPT=1, este último es un fuse de optimización del clock, que se lo usa cuando se usará la salida del OSC para conectar a otro micro, para entregar mayor potencia, por tanto consume mayor energía cuando esta activado, se desactiva si no se usará la salida de OSC y de esta manera ahorrar energía. Hay un detalle que la hoja de datos recalca casi cada vez que se habla de los fuses y es que 1 significa NO PROGRAMADO y 0 significa PROGRAMADO

Nos quedó un bit por configurar que es el CKSEL0, que va de la mano con SUT, este último son 2 bits de fusibles que determinan un tiempo para dejar que la tensión y  el oscilador se estabilicen antes de ejecutar la primera instrucción, es como el PUT (Power Up Timer o Power On Timer) de los micros PIC de Microchip.

Este esta detallado en la siguiente tabla en la hoja de datos:


el cual usaré el máximo jeje por si las moscas:
entonces tengo elegido: CKSEL0=1 y SUT1:0=11

Y hasta ahí tenemos configurado el cristal corriendo a 4MHz sin optimización de la salida de OSC del micro (para ahorro) y con 16CK y 65ms de tiempo para esperar estabilización en el oscilador
.