Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

08/02/2015 #41

Avatar de JoaquinFerrero

¡Cuidado con hacerle fotos a la Pi2!

http://www.xataka.com/otros/a-la-nue...flash-de-xenon
08/02/2015 #42

Avatar de dinoelectro

JoaquinFerrero dijo: Ver Mensaje
¡Cuidado con hacerle fotos a la Pi2!

http://www.xataka.com/otros/a-la-nue...flash-de-xenon
por eso mejor espero un tantito hasta que se vaya depurando todos esos fallos y luego me la compro
08/02/2015 #43

Avatar de hamster

Meta dijo: Ver Mensaje
¿Has probado BPi 2 Modelo B?
Es cierto tengo un error, lo siento..... con respecto a RPi B+... es lo que queria decir!!!
09/02/2015 #44

Avatar de Meta

dinoelectro dijo: Ver Mensaje
por eso mejor espero un tantito hasta que se vaya depurando todos esos fallos y luego me la compro
¿Cuánto vas a esperar?

Total, todavía no lo han traído en mi local más cecano. No olvides que aunque haya pasado seis meses, puede tener la peor versión que todavía no ha vendido.

No se si esperar un poco más hasta que salga la nueva revisión. Raspberry Pi 2 para mi, bajo mi punto de vista, está hecho con actualizaciones menores, y no ha incluido el reloj de serie y hay que recurrir al famoso DS1307 por nombrar alguno.



Dejaré pasar unos meses como tu, y lo compraré.

Saludos.
09/02/2015 #45

Avatar de cosmefulanito04

Para que se den una idea del poder de este tipo de placas, yo estoy usando un BeagleBone Black (BBB), que tiene un poco más de uP, pero al lado del Raspberry no tiene la gran ventaja multimedia de resolver los codecs por hard.

Sin embargo, con el BBB me dá para tomar una señal PAL/NTSC en blanco y negro (70nS por pixel), mostrar en pantalla con el OpenCv y procesar la imagen (aplicar filtros, máscaras, realce de contraste, etc). La ventaja que creo que tiene el BBB respecto al Raspberry, es la comunidad y que tooodo es abierto.
09/02/2015 #46

Avatar de Meta

Si es cuestión de potencia, poes e Galileo o el Odroe.


Viendo lo visto por todo internet, para el precio que pago. Mejor Raspberry Pi 2, ya que cuesta más barato, hay más información e incluso libros en papel, muchos documentos y ejemplos por Internet, así que los demás no les veo mucha ventaja a cara el futuro.

Lo que le deberían poner en P 2 era un reloj incorporado, USB 3, más procesador, y más cosas. Ojalá en el Pi 3 dentro de un par de años haga algo decente.

Lo que pasa que estas gente su filosifía es barato y que lo pueda tener todo el mundo, por eso es el más recomendado en documentación.

Saludos.

Saludos.
09/02/2015 #47

Avatar de cosmefulanito04

Yo creo que más allá de la potencia, lo importante es conseguir una buena comunidad que ayude, porque salvo que la tengas muy clara, para resolver ciertos proyectos, estos bichos suelen ser demasiados complejos.
10/02/2015 #48

Avatar de Meta

Pues si, tiene que ser muy apoyado por la comunidad o se quedará en el olvido. Mira como Rapberry Pi 2 a pesar de ser muy nuevo y menos potente la mayoría opta por él.

¿Por qué?

Saludos.
10/02/2015 #49

Avatar de foso

cosmefulanito04 dijo: Ver Mensaje
Para que se den una idea del poder de este tipo de placas, yo estoy usando un BeagleBone Black (BBB), que tiene un poco más de uP, pero al lado del Raspberry no tiene la gran ventaja multimedia de resolver los codecs por hard.

Sin embargo, con el BBB me dá para tomar una señal PAL/NTSC en blanco y negro (70nS por pixel), mostrar en pantalla con el OpenCv y procesar la imagen (aplicar filtros, máscaras, realce de contraste, etc). La ventaja que creo que tiene el BBB respecto al Raspberry, es la comunidad y que tooodo es abierto.
Lo interesante de la Beaglebone es que tiene un microcontrolador Sitara, no es solo microprocesador, trae módulos analógicos, salidas PWM, módulos de comunicación.
Pero es cierto que ya tendrían que avanzar con el microprocesador, ya es algo viejito el Cortex A8, quedó en tecnología de 45 nm. El A7 multicore me parece el procesador perfecto para estas placas, buena eficiencia y se deja agregar núcleos sin usar disipador. No sé porque no lo toma Texas Instruments para producirlo, tanto que hincha las bolas con la eficiencia energética. Bueno, es el que usa la nueva Raspberry.

Y sino se podrían jugar con uno de estos:


Pero si puede ser que la vean orientada a aplicaciones industriales donde le saca soberbia ventaja a cualquier microcontrolador de gama media.
Imágenes Adjuntas
Tipo de Archivo: jpg a15.jpg (76,6 KB (Kilobytes), 112 visitas)
11/02/2015 #50

Avatar de cosmefulanito04

Los PRU del BBB son un golazo, tenés 2 uP aparte que te permite aislarte del principal y por ende si estás en Linux (o cualquier SO que no sea RT) podés manjear puertos/memoria en tiempo real.

Por ej. no sería muy difícil armarte un generador muuuy interesante con eso.
13/02/2015 #51

Avatar de JoaquinFerrero

Dices bien, cosmefulanito04... en cuanto los vi, me dije que ya tenía resuelto algo tan vital como el redibujado de displays de segmentos. O la comunicación serie con otros dispositivos. Y todo ello sin preocuparme de interrupciones en la CPU principal.

Impresionante... tienes 3 CPU independientes a tu disposición...
13/02/2015 #52

Avatar de Hellmut1956

Para responder las preguntas que me fueron hechas sobre que es lo que pienso hacer con la software Mathematica y SystemModeler de Wolfram y de porqué requiero de tanta capacidad de procesamiento como lo ofrecen las placas LPCXpresso, lo que sigue. Aquí encuentran un hilo en este foro en que presento los datos sobre el proyecto motivo de estos estudios.
Se trata de usar la modelación y la posibilidad resultante de simular la modelación de mi sistema de control de escotas. Verificar la calidad del modelo que pienso desarrollar de mi sistema de control de escotas el introducir valores medidos en la hardware real me apoyará. Ademas existen funciones en Mathematica, llamadas "solver", que pueden definir una función que se aproxime a valores medidos. Entendiendo y portando lo que existe, "Mathematica y Wolfram Language" en el RaspBerry Pi y la comunicación existente entre SystemModeler y la placa Teensy 3.1 que usa el protocolo "Firmata" como implementación del nivel 2, "nivel de presentación", quiero beneficiarme partiendo de algo que existe! Dentro del nivel 2 del modelo de comunicación OSI de 7 niveles, es donde se reflejan las funcionalidades de la "hardware" como registros y periferias. Mi idea es que un protocolo que se beneficie de las definiciones dentro de las librerías CMSIS existentes para los controladores del tipo ARM Cortex Mx, podría crear una "representación" de las funcionalidades de una cierta instancia de controlador usando las definiciones en la libreria "*.h" a incluir que existen. NXP es ejemplar en la calidad de su soporte de CMSIS.
13/02/2015 #53

Avatar de JoaquinFerrero

Pruebas de velocidad (preliminar) de la nueva Raspberry Pi 2.

Pruebas de CPU y de rendimiento de bases de datos.

Resultados de CPU: Una Pi 2 es cinco veces más rápida que una Raspberry 512 MB, a igual frecuencia, y siete veces a velocidad normal.

Resultados de base de datos: doble de velocidad que la de 512 MB, a igual frecuencia, pero hay que tener en cuenta algunos detalles indicados en el mensaje enlazado.
14/02/2015 #54

Avatar de Hellmut1956

En mi caso Joaquín, la placa RaspBerry Pi no es mas que plataforma de estudio para entender como dialogar entre software de Wolfram en el ordenador con aquella en la placa RaspBerry Pi. Ademas me va a servir para estudiar y aprender algo sobre Linux. Ahí estoy bastante seguro que la placa RaspBerry Pi 2 me va a alcanzar. Lo mismo es aplicable a la placa "Teensy 3.1". Ella puede comunicarse con SystemModeler de Wolfram en el ordenador usando el protocolo "Firmata". Pienso usar ese entorno para poder de allí partir desde un sistema que funciona a mi objetivo de implementar el diálogo entre las placas LPCXpresso con los controladores ARM Cortex Mx de NXP. Hoy me compré y me descargue los 2 libros sobre el entorno de "FreeRTOS" para la placa LPCXpresso1769 y el manual de referencia. tengo la intención de usar FreeRTOS en las placas de mi sistema de control de escotas del modelo de mi velero! Quizá en un futuro la placa RaspBerry Pi 2 o alguna posterior me permitirán sumar la función de "webserver" en mi modelo y usar el Internet como medio de comunicación!
15/02/2015 #55

Avatar de JoaquinFerrero

Hellmut1956 dijo: Ver Mensaje
Quizá en un futuro la placa RaspBerry Pi 2 o alguna posterior me permitirán sumar la función de "webserver" en mi modelo y usar el Internet como medio de comunicación!
Todas las placas con microprocesador (y algunas con microcontrolador) ya tienen servidores web. Un servidor web no es muy complicado. Ejemplo en Arduino. En máquinas como Raspberry y siguientes, también es sencillo, ya que traen el Apache: Servidor web con Raspberry Pi
15/02/2015 #56

Avatar de cosmefulanito04

Estuve jugando un poco con assembler para ver la diferencia con C (usando GCC como compilador).

La operación realizada fue aplicar una máscara a una imagen en blanco y negro, es decir por un lado tengo el puntero de la imagen original y por el otro un puntero de una imagen que contiene todos los bytes en 0xFF menos aquellos bytes que deseo llevar a 0x00 (negro), para luego aplicar una AND entre las dos imágenes.

Se usa OpenCv para obtener la imagen original a partir de un archivo y al finalizar la rutina, se guarda el resultado en otro archivo.

Código en C:

Código PHP:
void enmascarar(void *ptr,void *image_data,unsigned int tamanio)
{
    
unsigned int cont_tamanio;

    for(
cont_tamanio=0;cont_tamanio<tamanio;cont_tamanio++)
    {
        *(
unsigned char*)(image_data+cont_tamanio)&=*(unsigned char*)(ptr+cont_tamanio);
    }

Código en Assembler común:

Código PHP:
.global enmascarar
.type enmascarar, %function

enmascarar:
   
push {r4-r10}
   
   
mov r4#0
 
   
LOOP:      
    
ldrb r5, [r0r4]
    
ldrb r6, [r1r4]
    
    AND 
r5r5r6
    
    strb r5
, [r1r4]    
   
   
add r4r4#1
   
cmp r2r4
   BNE    LOOP
   
   pop 
{r4-r10}
   
mov pclr 
En Assembler, r0-r3 son los registros usados como argumentos de la función (en este caso r3 no se usa), r4-r11 se pueden usar como registros de uso general, pero deberán guardarse antes de usar y al final de la rutina devolver sus valores. En este caso la función no devuelve nada, pero en caso de hacerlo, se hace mediante el registro r0-r1.

El código se puede mejorar un poco ahorrando la instrucción "ADD" y "CMP" usando directamente una resta ("SUB") y en vez de usar r4 como índice, se podrían usar los punteros originales de esta forma:

Código PHP:
ldrb r5, [r0]! 
Carga en r5 el contenido apuntado por r0 y suma en 1 a r0. Será necesario usar otro registro como puntero de destino:
Código PHP:
...
mov r7r1
LOOP
:
...
  
strb r5, [r7]! 
Código en Assembler usando instrucciones NEON:

Código PHP:
.global enmascarar
.type enmascarar, %function

enmascarar: @r0ptr de la máscarar1ptr de la imagen (destino), r2cantidad de píxeles
   push 
{r4-r10}
   
mov r2r2LSR#4 @Al trabajar con variables de 128bits (qn), trabajo de a 16bytes => la cantidad de píxeles deberán ser divididos por 16 o desplazar 4 veces a la derecha los bits 
   
mov r5r1
   mov r4
#0
   
   
LOOP:      
     
vld1.8 {q0}, [r0]! @Cargo los 1eros 16 bytes de la máscara y le sumo 16 a r0 (!= suma el índice por la cantidad de bytes leídos)
     
vld1.8 {q1}, [r1]! @Similar al anterior
    
     vand q2
q0q1
     
     vst1.8 
{q2}, [r5]! @Almaceno en la memoria apuntada por r5 el resultado de la operación.       
   
   
add r4r4#1
   
cmp r2r4
   BNE    LOOP
   
   pop 
{r4-r10}
   
mov pclr 
Al igual que antes, el loop se podría resolver con el uso de "SUB" en vez de "ADD" y "CMP".

Llamada reiterativa en todos los casos:

Código PHP:
unsigned int current_timestamp() {
    
struct timeval te;
    
gettimeofday(&teNULL); // get current time
    
return te.tv_usec
}

main()
{
 ...
  for(
cont=0cont<10cont++)
    {
        
t_0=current_timestamp();
        
enmascarar(ptrimg->imageDataimg->width*img->height);
        
t_1=current_timestamp();

        
printf("La diferencia de tiempo (uS): %d\n",(t_1-t_0));
    }
 ...

Resultados:

- Con C:

consola dijo:
La diferencia de tiempo (uS): 8691
La diferencia de tiempo (uS): 8669
La diferencia de tiempo (uS): 8647
La diferencia de tiempo (uS): 8661
La diferencia de tiempo (uS): 8652
La diferencia de tiempo (uS): 8700
La diferencia de tiempo (uS): 8995
La diferencia de tiempo (uS): 8687
La diferencia de tiempo (uS): 8683
La diferencia de tiempo (uS): 8678
- Con Assembler común:

consola dijo:
La diferencia de tiempo (uS): 3483
La diferencia de tiempo (uS): 3445
La diferencia de tiempo (uS): 3309
La diferencia de tiempo (uS): 3385
La diferencia de tiempo (uS): 3448
La diferencia de tiempo (uS): 3422
La diferencia de tiempo (uS): 3429
La diferencia de tiempo (uS): 3431
La diferencia de tiempo (uS): 3386
La diferencia de tiempo (uS): 3424
- Con Assembler usando instrucciones Neon:

consola dijo:
La diferencia de tiempo (uS): 1091
La diferencia de tiempo (uS): 1123
La diferencia de tiempo (uS): 1120
La diferencia de tiempo (uS): 1128
La diferencia de tiempo (uS): 1110
La diferencia de tiempo (uS): 1125
La diferencia de tiempo (uS): 1121
La diferencia de tiempo (uS): 1122
La diferencia de tiempo (uS): 1197
La diferencia de tiempo (uS): 1124
Hay una diferencia considerable a pesar de que la operación es simplemente una "AND", incluso el tiempo obtenido por la función "current_timestamp" tal vez no sea la mejor referencia de tiempo, pero dá una buena idea de la optimización del uso de Assembler en ciertas rutinas críticas.

Les dejo la imagen original y su resultado.

NOTA: originalmente en el programa guardo el archivo en BMP, por el tamaño, el foro no me dejo subir dicho archivo, por lo tanto lo convertí a jpg. Podía haber obtenido el jpg directamente desde el OpenCv, pero bue... no lo hice, tampoco cambia el resultado obtenido.
Imágenes Adjuntas
Tipo de Archivo: jpg lena.jpg (153,7 KB (Kilobytes), 8 visitas)
Tipo de Archivo: jpg Resultado.jpg (137,4 KB (Kilobytes), 8 visitas)
16/02/2015 #57

Avatar de Hellmut1956

Donde encontré que Linux aún no ha sido adaptado
Hola amigos, en la página de Internet anunciando la disponibilidad de la nueva placa RaspBerry Pi 2, aquí el enlace. En el párrafo inmediatamente encima de donde se menciona que Windows 10 será disponible, menciona que va a tomar unas semanas para hacer disponible distribuciones apoyadas en la versión anterior de Linux que realmente apoyen los múltiples núcleos. eso sí, también menciona que nuevas distribuciones de Linix, como Ubuntu, ahora funcionan en la nueva versión!
16/02/2015 #58

Avatar de JoaquinFerrero

cosmefulanito04 dijo: Ver Mensaje
Estuve jugando un poco con assembler para ver la diferencia con C (usando GCC como compilador).

Hay una diferencia considerable a pesar de que la operación es simplemente una "AND", incluso el tiempo obtenido por la función "current_timestamp" tal vez no sea la mejor referencia de tiempo, pero da una buena idea de la optimización del uso de Assembler en ciertas rutinas críticas.
Hola.

Deberías echar un vistazo a la sección 1.4.3. Automatic vectorization, de la documentación de ARM, donde explica qué opciones poner para que el compilador pueda optimizar una operación de vectorización.

Y en la sección anterior, la 1.4.2. Intrinsics, te indica cómo incorporar los registros NEON al programa en C.

Con un poco de habilidad, se puede conseguir un código final casi igual al del ensamblador.
16/02/2015 #59

Avatar de cosmefulanito04

Por lo que averigüe, es muy pobre el uso de las funciones intrínsecas.

Te dejo esta página:

http://hilbert-space.de/?p=22

Tal vez con el tiempo mejoró el compilador, ya que el artículo es del 2009, pero sin duda no hay nada mejor que tu propia optimización en esa rutina crítica.
22/02/2015 #60

Avatar de cosmefulanito04

Del código Neon que publiqué, todavía se puede mejorar un poco:

Código PHP:
.global enmascarar
.type enmascarar, %function

enmascarar: @r0ptr de la máscarar1ptr de la imagen (destino), r2cantidad de píxeles
   push 
{r4-r10}
   
mov r2r2LSR#5 @Se trabaja con 4 variables del tipo dn
   
mov r5r1
   
   LOOP_ENMASCARAR
:      
     
vld4.8 {d0-d3}, [r0]! @Cargo los 1eros 32 bytes de la máscara y le sumo 32 a r0 (!= suma el índice por la cantidad de bytes leídos)
     
vld4.8 {d4-d7}, [r1]! @Similar al anterior
    
     vand d0
d0d4
     vand d1
d1d5
     vand d2
d2d6
     vand d3
d3d7
     
     vst4.8 
{d0-d3}, [r5]! @Almaceno en la memoria apuntada por r5 el resultado de la operación.       
   
   
subs r2r2#1
   
BNE    LOOP_ENMASCARAR
   
   pop 
{r4-r10}
   
mov pclr 
A diferencia del código anterior, ahora estoy trabajando con 4 registros de 64bits (dn) a la vez, lo que sería trabajar con 32 bytes a la vez (antes trabajaba con 16 bytes). Lamentablemente no se puede trabajar con registros de 128 bits (qn). Tal vez se me siga escapando alguna optimización, hasta donde ví, no hay forma de hacer la AND con los 4 registros a la vez.

Esta mejora trae los siguientes tiempos:

consola dijo:
La diferencia de tiempo (uS): 988
La diferencia de tiempo (uS): 994
La diferencia de tiempo (uS): 884
La diferencia de tiempo (uS): 897
La diferencia de tiempo (uS): 882
La diferencia de tiempo (uS): 901
La diferencia de tiempo (uS): 883
La diferencia de tiempo (uS): 897
La diferencia de tiempo (uS): 828
La diferencia de tiempo (uS): 945
A lo que apunto con esto, es que la cantidad de alternativas es bastante grande y dejando de lado las funciones intrínsecas que menciona el compañero de arriba, si se realiza una operación demasiado compleja donde el tiempo es vital, es muy importante aprender a usar este tipo de instrucciones.
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Arduino y Raspberry Pi

Cerrar
Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.