37 votos

¿Por qué los Arduinos vienen con un cristal de 16MHz en lugar de 20MHz?

¿Por qué las placas Arduino vienen con un cristal de 16MHz en lugar de 20MHz? Al fin y al cabo, están preparadas para funcionar a 20MHz.

Supongo que hay algunas ventajas de funcionar más lentamente (menor consumo de energía, mayor duración), pero debo estar perdiéndome algo.

1 votos

Esto también se preguntó en el antiguo foro de Arduino: arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1240016311

3 votos

Tenga en cuenta que esta diferencia de velocidad de aplicación del 25% se puede ganar muchas veces con una programación adecuada. Sin embargo, trato de mantenerme alejado de los límites extremos de cualquier CI.

30voto

JW. Puntos 145

Yo me creería la respuesta del foro de Arduino:

El Arduino ATmega8 original funcionaba a 16MHz, que era la velocidad de velocidad de reloj para la cpu ATmega8 utilizada. Cuando se "actualizó" a ATmega168 (con una velocidad máxima de 20MHz), el reloj se dejó en 16MHz (probablemente) porque los diseñadores pensaron que más gente/código tendría problemas de retrocompatibilidad con una nueva velocidad de reloj que se beneficiarían del 25% extra de rendimiento de la cpu. I Ciertamente, creo que tenían razón...

7voto

Van Gale Puntos 387

La pregunta tiene poco o ningún sentido si no es en coordenadas proyectadas, porque un "cuadro delimitador" e incluso un rumbo constante tienen significados ambiguos en un esferoide. En el plano proyectado, sólo hay que girar los puntos para que el rodamiento sea horizontal o vertical. La búsqueda de la caja delimitadora se realiza entonces de la forma habitual (obteniendo los valores extremos de las coordenadas). La rotación de esta figura hacia atrás termina el trabajo.

Para mantener una alta precisión, gire los puntos alrededor de algún lugar central (o cercano).


Si imagináramos un SIG que soportara las operaciones básicas de (a) rotar figuras y (b) encontrar cajas delimitadoras -lo que hace la mayoría de ellos-, su solución sería la siguiente:

BoundingBox = Rotate(Extent(Rotate(points, bearing)), -bearing)

donde

Rotate(p, a)

gira una característica p por una cantidad a y

Extent(p)

devuelve la extensión (rectangular) de una característica.


Aquí hay un ejemplo que muestra las situaciones girada y original:

Figure

R (que es fácilmente trasladable a Python o a cualquier otra plataforma que soporte operaciones matriciales básicas). La mayor parte se limita a generar datos de muestra y a trazar los resultados.

#
# Sample data (looking like those of the question,
# with typical ranges of projected coordinates).
#
xy <- cbind(1:4 + 200000, c(0,5,0,4) + 4000000)
bearing <- 45 * pi/180 # Radians east of north
#
# Helper functions.
#
rotate <- function(xy, a, origin=c(0,0)) {
  c <- cos(a); s <- sin(a)
  return(t(matrix(c(c, -s, s, c), 2) %*% (t(xy) - origin) + origin))
}
extent <- function(xy) {
  e <- apply(xy, 2, range)
  return(matrix(c(e[1,1], e[2,1], e[2,1], e[1,1],
                  e[1,2], e[1,2], e[2,2], e[2,2]), ncol=2, byrow=FALSE))
}
#
# Compute the oriented bounding box.
#
center <- apply(xy, 2, mean)
bb <- rotate(extent(rotate(xy, bearing, center)), -bearing, center)
#
# Display the points and their oriented bounding box.
#
plot(rbind(bb, xy), type="n", asp=1, xlab="X", ylab="Y", main="Solution")
polygon(bb, col="#f0f0f0")
points(xy, pch=19, col="Red")

6voto

Pascal Rosin Puntos 123

Un tercer punto es que el oscilador de cristal de bajo consumo del ATmega168 y del ATmega328 no funciona por encima de los 16 MHz. Así que si tienes un cristal de 20 MHz conectado a los pines XTAL, tienes que usar el Oscilador de Cristal Full Swing que consumirá más energía (o no usar ningún cristal).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X