Autor Tema: ¿ Como emigrar de PIC a AVR entiendo pero por donde comienzo?  (Leído 6737 veces)

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

Desconectado pantera

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
¿ Como emigrar de PIC a AVR entiendo pero por donde comienzo?
« en: 07 de Diciembre de 2006, 03:23:47 »
Hola he estado revisando y comparando microcontroladores y pues poderosamente veo que ATMEL es muy poderoso.

Sin embargo nose bien como comenzar, Que microcontrolador seria el mejor para comenzar. Me gustaria entender el micro mas basico para comprender los demas.

Espero pueden ayudarme.

De antemano gracias
La música es sinónimo de libertad, de tocar lo que quieras y como quieras, siempre que sea bueno y tenga pasión, que la música sea el alimento del amor y del alma.

        :-)El Rock es Cultura :-)

Desconectado Flugplatz

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 279
    • Mi canal de YouTube
Re: ¿ Como emigrar de PIC a AVR entiendo pero por donde comienzo?
« Respuesta #1 en: 07 de Diciembre de 2006, 13:25:01 »
Si escribes desde España, es relativamente fácil encontrar el  Atmel AVR ATMega8, por unos 4 Euros.

Si consigues un ATMega8L-8P, que es el de 8Mhz, tendrás un micro de similares carácterísticas al PIC18F242 con una configuración de 8Mhz + HSPLL, pero con 8K de Memoria Flash

Si consigues un ATMega8-16P, que es la de 16MHz, tendrás un micro de similares características al PIC18F242, pero muuucho más rápido, y también con 8K de memoria Flash

En ambas versiones puedes optar por utilizar el oscilador interno configurado a 1, 2, 4 o 8Mhz calibrado de fábrica, pero con la posibilidad de reescribir durante el programa el Registro OSCCAL, que es el ajuste fino de la frecuencia.

Según mi opinión, es igual de potente que el PIC, y en algunas cosas es cláramente superior, pero hay mucha menos documentación en la Red, y, sobre todo, su sistema de programación ICSP es más complejo.

En cualquier caso,  si quieres cacharrear con él, puedes utilizar lo siguiente:

Como programador: El GTP-USB Plus que lo programa sin problemas.

Como entorno de desarrollo:

   Con depurador, ensamblador y compilador de C incluido, el AVRStudio, que podrás obtener gratis en su WEB.

Como compiladores sueltos:

   El Bascom AVR, cuya DEMO GRATUITA te permite hacer programas de hasta 4K

   Y el WinAVR, que es un compilador GNU de C para AVR.

Edito para añadir que si quieres un micro de 40 patas, tambien tienes por las tiendas el ATMega16, y el ATMega32, que son equivalentes al 18F442 y al 18F452. La relación que existe entre estos y el ATMega8 es la misma que la que hay entre los 18F2x2 y los 18F4x2.
« Última modificación: 07 de Diciembre de 2006, 13:48:07 por Flugplatz »
Mi canal de YouTube

Un saludo desde Madrid

Desconectado manuelroin24

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 665
Re: ¿ Como emigrar de PIC a AVR entiendo pero por donde comienzo?
« Respuesta #2 en: 07 de Diciembre de 2006, 14:01:48 »
Alguien tiene algun manual de uso basico del AVR studio yo tambien recien empiezo con los ATMEGA8 pero no se como manejar el AVR STUDIO si pueden amigos unas ayuditas al menos con lkas directivas q se usan en un programita para prender un led nada mas se me complica saber q cabecxceras usar , muchas gracias
El conocimiento se consigue a base de esfuerzo...

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
Re: ¿ Como emigrar de PIC a AVR entiendo pero por donde comienzo?
« Respuesta #3 en: 08 de Diciembre de 2006, 08:16:23 »
Pues aquí un ejemplo para hacer parpadear un led (en ASM para un ATMega16):

Código: C
  1. ;--------------------------------------------------------------------------------
  2. ;                       VsZeNeR'06
  3. ;                  05/Julio/06
  4. ;                vszener@gmail.com
  5. ;
  6. ;       Programa:       Led on/off
  7. ;       Version:        0.0
  8. ;
  9. ;       Dispositivo: ATmega16                           Compilador: AVRASM2
  10. ;       Entorno IDE: AVR Studio4.12sp2          Simulador:      Proteus 6.7sp3
  11. ;
  12. ;       Notas:  Este programa hace parpadear un led conectado al pin RB0 del puerto
  13. ;                       B durante aprox. 0.5seg.
  14. ;      
  15. ;       Registros:      r0  -> sirve para el parpadeo del led al aplicarle un eor
  16. ;                               r16 -> On/Off led
  17. ;
  18. ;       Conexiones:     B0 -> Led
  19. ;--------------------------------------------------------------------------------
  20. ;DIRECTIVAS EN ENSAMBLADOR
  21. .include "m16def.inc"                   ;ATmega16
  22.  
  23. ;DEFINICION DE REGISTROS
  24. .def            led_cambio=r0           ;registro para parpadeo del led
  25.  
  26. ;reset-vector address $0000                    
  27. .org            $0000
  28.         rjmp    main                            ;ve al main
  29.  
  30. ;PROGRAMA PRINCIPAL
  31. main:                                                  
  32.         ldi             r16,$04                         ;Configuracion de...
  33.         out             sph,r16
  34.         ldi             r16,$5F                
  35.         out             spl,r16                         ;...la pila: Stack: $045F=RAMEND
  36.  
  37.         ser     r16                 ;r16 <- $FF
  38.         out     ddrb,r16            ;portB salida
  39.  
  40.         ldi             r16,$01                         ;r16 <- $01 -> Iluminar led conectado pin RB0
  41.  
  42.         mov             led_cambio,r16          ;led_cambio <- r16 :variable para el parpadeo
  43.        
  44. loop:
  45.         out             portb,r16                       ;actuamos sobre el led(conectado al pin RB0)
  46.  
  47.         eor             r16,led_cambio          ;cambiamos estado on/off
  48.        
  49.         rcall   delay                           ;retraso de 0.5seg
  50.  
  51.         rjmp    loop                            ;bucle infinito
  52.  
  53.  
  54. ;************************************
  55. ;       Subrutina: Delay
  56. ;
  57. ;       Genera un retardo via software de
  58. ;       aproximadamente 0.5seg
  59. ;
  60. ;       Tiempo= 0.75us + 1.5us + 0.75us +
  61. ;                       490.8875ms + 0.5us + 1.5us
  62. ;                       + 1us = 490.8935ms
  63. ;
  64. ;       Se conserva todo
  65. ;*************************************
  66. delay:                                  ;llamada a subrutina -> 3#clocks -> 0.75seg
  67.         push    r16                     ;apilamos...         : 0.5us
  68.         push    r1                      ;                                    : 0.5us
  69.         push    r2                      ;registros r16,r1,r2 : 0.5us --> 3·0.5 = 1.5us
  70.  
  71.         ldi             r17,$0A         ;Cargamos retardo  : 0.25us
  72.         clr             r1                      ;r1 <- 0           : 0.25us  
  73.         clr             r2                      ;r2 <- 0           : 0.25us  --> 3·0.25 = 0.75us
  74. delay_1:                       
  75.         dec             r1                      ;r1--              : 255·(0.25us + 0.5us)=191.25us                                                    
  76.         brne    delay_1         ;cuando es cierto  : 0.5us
  77.         dec             r2                      ;r2--              : 255·(191.75us + 0.5us + 0.25us)=49.0875ms
  78.         brne    delay_1         ;cuando es cierto  : 0.5us
  79.         dec             r17                     ;r17--                     : 10(49.088ms + 0.5us + 0.25us)=490.8875ms
  80.         brne    delay_1         ;cuando es cierto  : 0.5us
  81.        
  82.         pop             r16                     ;desapilamos...    : 0.5us
  83.         pop             r1                      ;                                  : 0.5us
  84.         pop             r2                      ;...registros      : 0.5us --> 3·0.5 = 1.5us
  85.  
  86.         ret                                     ;fin subrutina delay : 1us

PD: El AVRStudio es bastante intuitivo de usar, y el simulador es bastante ameno.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado manuelroin24

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 665
Re: ¿ Como emigrar de PIC a AVR entiendo pero por donde comienzo?
« Respuesta #4 en: 08 de Diciembre de 2006, 16:07:20 »
Ese es uno de mis problemas pq colocas "asm2" no entiendo cual es la diferencia

otra pregunta tambien.

.org      $0000
rjmp   main   

es obligatorio poner RJMP despues de org no continua su contador de programa co lo q sigue??? y ese simbolo de dolar es obligatorio no lo interpreta de la misma forma???

el r16 es usado como el W en los PIC , pq no puedo usar  otro registro cualquiera o desde q registros se pueden emepzar para utilizar como variables?? y  el R0 ???

Pq mueves ese numero a la PILA ???

ser    r16                 ;r16 <- $FF
out    ddrb,r16            ;portB salida
ldi   r16,$01            ;r16 <- $01 -> Iluminar led conectado pin RB0
mov   led_cambio,r16      ;led_cambio <- r16 :variable para el parpadeo

donde exactamente prende el LED mi amigo??? en LDI o en MOV . Yo pensaba q despues de mover el 01 al R16 tenias q mover el r16 al puerto B
Gracias amigo.
« Última modificación: 08 de Diciembre de 2006, 16:17:35 por manuelroin24 »
El conocimiento se consigue a base de esfuerzo...

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
Re: ¿ Como emigrar de PIC a AVR entiendo pero por donde comienzo?
« Respuesta #5 en: 09 de Diciembre de 2006, 07:28:29 »
Por partes:

· Lo del asm2, ¿a qué te refieres concretamente?

· Lo del RJMP despues de org, no es obligatorio, simplemente es para saltar el vector de interrupción, como se hacía con los pic's en AVR es igual. Lo del símbolo del dollar $, es pura nomenclatura, igual que en freescaler, el dollar $ significa que estamos tratando el dato como hexadecimal.

· Concretamente en el ATMega16, hay varios registros que se pueden usar como en W en los pic's, pero en el data sheet del microcontrolador, te indican que tipo de operaciones puedes usar con los registros, y en este caso el registro R0 no sirve para apilar para almacenar datos (esto esta en el data sheet y hay que respetarlo  :mrgreen: )

· Apilo ese registro para poder crear un retardo de aproximadamente 0.5s, en el ATMega16, para crear funciones, primeros debes inicializar la pila (cosa realizada al principio del programa), y posteriormente cada vez que usas una función, pues los datos, para que dicha función no modifique ningún registro ni absolutamente nada, pues se apilan, como es en este caso, una función que simplemente es de retardo, la cual conserva todos los parámetros de entrada de cada registro y de salida.

· Iluminamos el led, concretamente en esta línea de código out  portb,r16  el registro r16 actua como idicador del led a encender, pero para que el registro R16 diga sobre que pin actuar, previamente está la línea de código siguiente ldi r16,$01, la cual carga en el registro r16 el valor 01 que conjunto a la instrucción del portb indica que pin está en funcionamiento.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
Re: ¿ Como emigrar de PIC a AVR entiendo pero por donde comienzo?
« Respuesta #6 en: 09 de Diciembre de 2006, 10:39:01 »
Contesto a otra pregunta que no la he visto clara hasta revisar el post, con respecto al AVRASM2, bien, ¿por que ese 2? AVR ha desarrollado un compilador mejorado que el anterior que incluye nuevas instrucciones incluso, aquí, en el manual del avrasm2 te lo explican mejor.

Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado manuelroin24

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 665
Re: ¿ Como emigrar de PIC a AVR entiendo pero por donde comienzo?
« Respuesta #7 en: 09 de Diciembre de 2006, 22:04:13 »
Bueno mi gran amigo tendre q leer mejor la data sheet de nuevo el ingles me tiene loco , pero ni modo a seguir leyendo nomas , gracias mi amigo.

Me aclaraste muchas cosas.
El conocimiento se consigue a base de esfuerzo...