TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: antoniopa en 04 de Mayo de 2012, 08:46:34
-
Hola, recientemente me introduje ligeramente con los AVR de Atmel, y he visto una diferencia que me ha llamado la atención que me ha generado una duda.
En los AVR de Atmel el micro es capaz de procesar un máximo de 20 millones de instrucciones por segundo, mientras que en los pic16 son 20/4=5 millones de instrucciones por segundo.
Esto es así para las demas familias de microcontroladores pic, pic18, 24 ...? porque si es así, parece mucho mejor el AVR de atmel, la diferencia es de cuatro veces mas rápido.
Saludos ¡¡
-
Los pics de gama baja (PIC18 y menores) ejecutan una instrucción por cada cuatro ciclos de reloj.
Por ejemplo el PIC18F2550 puede trabajar a 48Mhz = 12 millones de instrucciones por segundo.
Muchos PIC16 oscilan como máximo a 20Mhz = 5 millones de instrucciones por segundo.
Los PIC24 ejecutan una instrucción cada 2 ciclos de reloj con una frecuencia máxima de 32Mhz = 16 millones de instrucciones por segundo.
Pero estos son micros de 16 bits que hacen el doble en cada instrucción.
La potencia del micro no sólo depende de la velocidad. A mí, la mayoría de las veces, me sobra velocidad y lo que necesito son periféricos, que es lo que debes comparar también en 2 micros.
Saludos.
-
PIC18-> 12/16 MIPS
PIC24F-> 16 MIPS
PIC24H-> 40 MIPS
PIC24E-> 60 MIPS
PIC32 -> 80 MIPS
No creo que uno sea mejor que otro solo por los MIPS :shock:
-
Los PIC24 ejecutan una instrucción cada 2 ciclos de reloj....
....Pero estos son micros de 16 bits que hacen el doble en cada instrucción.
LOL WHAT?
-
PIC18-> 12/16 MIPS
PIC24F-> 16 MIPS
PIC24H-> 40 MIPS
PIC24E-> 60 MIPS
PIC32 -> 80 MIPS
No creo que uno sea mejor que otro solo por los MIPS :shock:
te olvidaste de los dspic33e @ 70MIPS
-
Bien bien, buenas respuestas, compararé los periféricos a ver cual me parece mas completo ,... gracias.
Saludos
-
PIC18-> 12/16 MIPS
PIC24F-> 16 MIPS
PIC24H-> 40 MIPS
PIC24E-> 60 MIPS
PIC32 -> 80 MIPS
No creo que uno sea mejor que otro solo por los MIPS :shock:
Suky, los PIC24E son como los DSPIC33E que menciona MerLinz en cuanto a velocidad, es decir, que van a 70MIPS. Al menos eso dice microchip: http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=8187&mid=14&lang=en
-
:mrgreen: Como no tenia idea, puse PIC24E MIPS en el buscador y en algún lado vi 60MIPS :D Yo uso PIC32 :P :D
-
Bien bien, buenas respuestas, compararé los periféricos a ver cual me parece mas completo ,... gracias.
Saludos
Una característica que me gusta mucho de los Atmel es que algunos tienen muchas salidas PWM (6 el atmega328 de Arduino). Para encontrar lo mismo en Microchip hay que irse a dsPIC.
Saludos.
-
Hay un PIC18 que tiene 7 PWM ;-)
-
el 16f1939 tiene 5 modulos de CCP que se pueden configurar todos como pwm, y tiene 3 timers diferentes para asociarlos a los pwms
-
en el dspic33e que yo uso tienes 16 OC (configurables como PWM) + otros 14pwm mas (30 en total).
Como siempre digo, cada cosa tiene su utilidad, no me imagino manejar tantos PWM con un pic de 8bits a 16MIPS.
-
Ese es uno de los 'inconvenientes' de los PIC. Hay tantos modelos con tantas características, que es difícil conocer todos. :D
http://www.microchip.com/productselector/MCUProductSelector.html
Saludos.
-
La verdad es que cuanto se trata de gama baja (PIC16 PIC18) los microcontroladores de ATMEL son superiores, alcanzan mas velocidad y tienen mucha mas memoria, pero cuando entramos a la gama media (PIC24 DSPIC) y gama alta (PIC32) Pic le gana a Avr, el pic32 alcanza 1.56DMIPS/MHz lo que significa un maximo de 124 DMIPS a 80 MHZ vs los 90 DMIPS del AVR32
-
Hay un PIC18 que tiene 7 PWM ;-)
Un Atmega2561 tiene 12 PWM programables de 2 a 16 bits.
Luego, en general, no se puede decir nada de cual es mejor. Lo que si se puede decir es las características de cada uno, los MIPS son una mentira más grande...
Ejemplo, en 8bits de ambas familias, te dicen corre a X MIPS pero no te explican cuantas instrucciones son necesarias para, por ejemplo, dividir un número de 16bits. El PIC por ejemplo con su arquitectura de monoacumulador nunca va a ser mejor que su competencia.
Además, decir que se va a X MIPS y necesitar tener un oscialdor de X Mhz no es lo mismo que el micro rinda X MIPS y solo necesite X/4 Mhz, y esto importa y mucho ante regulaciones de radiofrecuencia (como la FCC en USA), y tampoco es lo mismo el consumo de un micro a 48Mhz que a 12Mhz.
Las comparaciones son siempre odiosas, por eso cada vez que me preguntan digo:
"El mejor es el que más conozcas".
-
Hay un PIC18 que tiene 7 PWM ;-)
Un Atmega2561 tiene 12 PWM programables de 2 a 16 bits.
Luego, en general, no se puede decir nada de cual es mejor. Lo que si se puede decir es las características de cada uno, los MIPS son una mentira más grande...
Ejemplo, en 8bits de ambas familias, te dicen corre a X MIPS pero no te explican cuantas instrucciones son necesarias para, por ejemplo, dividir un número de 16bits. El PIC por ejemplo con su arquitectura de monoacumulador nunca va a ser mejor que su competencia.
Además, decir que se va a X MIPS y necesitar tener un oscialdor de X Mhz no es lo mismo que el micro rinda X MIPS y solo necesite X/4 Mhz, y esto importa y mucho ante regulaciones de radiofrecuencia (como la FCC en USA), y tampoco es lo mismo el consumo de un micro a 48Mhz que a 12Mhz.
Las comparaciones son siempre odiosas, por eso cada vez que me preguntan digo:
"El mejor es el que más conozcas".
En AVR no se como ira, pero los pics de 8bits no tienen division por hardware como mucho multiplicacion, por lo cual dependiendo de la funcion usada para dividir tardara X tiempo, este tiempo lo tendrias que calcular tu manualmente, si se ejecuta en 100Tcy pues esa es tu respuesta. En el caso de multiplicaciones te viene una tabla en el datasheet, por ejemplo en el 18f4550 multiplicar 2 numeros sin signo son 100ns a 40Mhz (10Mips) y multiplicar 2 numeros con signo de 16bits son 4us a 10MIPS
-
En AVR no se como ira, pero los pics de 8bits no tienen division por hardware como mucho multiplicacion, por lo cual dependiendo de la funcion usada para dividir tardara X tiempo, este tiempo lo tendrias que calcular tu manualmente, si se ejecuta en 100Tcy pues esa es tu respuesta. En el caso de multiplicaciones te viene una tabla en el datasheet, por ejemplo en el 18f4550 multiplicar 2 numeros sin signo son 100ns a 40Mhz (10Mips) y multiplicar 2 numeros con signo de 16bits son 4us a 10MIPS
No, AVR tampoco tiene división por HW, lo que digo es que las operaciones se pueden hacer mucho más fácilmente (sobre todo las de 16 bits)
En AVR tienes 32 registros acumuladores, trabajando de a pares puedes hacer operaciones de 16 bit en muy pocas instrucciones y sin acceso a la RAM.
Ejemplo:
;***************************************************************************
;*
;* "div16u" - 16/16 Bit Unsigned Division
;*
;* This subroutine divides the two 16-bit numbers
;* "dd8uH:dd8uL" (dividend) and "dv16uH:dv16uL" (divisor).
;* The result is placed in "dres16uH:dres16uL" and the remainder in
;* "drem16uH:drem16uL".
;*
;* [b]Number of words :19 [/b]
;* [b]Number of cycles :235/251 (Min/Max) [/b]
;* Low registers used :2 (drem16uL,drem16uH)
;* High registers used :5 (dres16uL/dd16uL,dres16uH/dd16uH,dv16uL,dv16uH,
;* dcnt16u)
;*
;***************************************************************************
;***** Subroutine Register Variables
.def drem16uL=r14
.def drem16uH=r15
.def dres16uL=r16
.def dres16uH=r17
.def dd16uL =r16
.def dd16uH =r17
.def dv16uL =r18
.def dv16uH =r19
.def dcnt16u =r20
;***** Code
div16u: clr drem16uL ;clear remainder Low byte
sub drem16uH,drem16uH;clear remainder High byte and carry
ldi dcnt16u,17 ;init loop counter
d16u_1: rol dd16uL ;shift left dividend
rol dd16uH
dec dcnt16u ;decrement counter
brne d16u_2 ;if done
ret ; return
d16u_2: rol drem16uL ;shift dividend into remainder
rol drem16uH
sub drem16uL,dv16uL ;remainder = remainder - divisor
sbc drem16uH,dv16uH ;
brcc d16u_3 ;if result negative
add drem16uL,dv16uL ; restore remainder
adc drem16uH,dv16uH
clc ; clear carry to be shifted into result
rjmp d16u_1 ;else
d16u_3: sec ; set carry to be shifted into result
rjmp d16u_1
Una división en 19 words, nada mal, no?
Existen rutinas para mejorar espacio usado o velocidad.
Más información sobre estas rutinas:
AVR202: 16 bits Aritmetics
http://www.atmel.com/Images/doc0937.pdf
AVR200: Multiply and Divide Routines
http://www.atmel.com/Images/doc0936.pdf
saludos.