Como gestionar un LCD con Arduino


Tradicionalmente para visualizar información con microcontroladores se han usado leds, displays de leds de 7segmentos, «tubos nixie!,LCD , pantallas OLED, etc

Hay varias ventajas para usar pantallas LCD frente a otros medios:

  1. Fácil visualización de datos: La pantalla LCD permite una fácil visualización de los datos generados o recibidos por el Arduino, lo que simplifica la tarea de monitoreo y análisis.
  2. Interfaz de usuario: Las pantallas LCD pueden ser utilizadas para crear interfaces de usuario amigables para proyectos con Arduino, lo que hace más fácil para los usuarios interactuar con el sistema.
  3. Versatilidad: Las pantallas LCD pueden ser utilizadas en una amplia variedad de proyectos, desde monitoreo de sensores hasta juegos y aplicaciones de tiempo real.
  4. Ahorro de espacio: Las pantallas LCD son más compactas y requieren menos espacio que otras opciones de visualización, lo que las hace ideales para proyectos con restricciones de espacio.
  5. Fácil conexión: La conexión de una pantalla LCD con una placa Arduino es generalmente sencilla y requiere pocos componentes adicionales.
  6. Bajo consumo de energía: Las pantallas LCD utilizan poca energía y son adecuadas para proyectos con restricciones de energía o con requisitos de larga duración.

El principio detrás de las pantallas LCD para Arduino es el uso de la tecnología de cristal líquido para desplegar información en una pantalla. Una pantalla LCD para Arduino funciona mediante la aplicación de una tensión a los cristales líquidos en la pantalla, lo que los hace inclinarse y permitir o bloquear la luz detrás de ellos. De esta manera, se pueden crear diferentes patrones de luz y oscuridad en la pantalla para formar caracteres o gráficos.

Una placa Arduino (o cualquier variante) controla la tensión aplicada a los cristales líquidos a través de un controlador LCD específico, que envía señales a los pines de la pantalla LCD. El controlador recibe y procesa los datos enviados por el Arduino y los convierte en una señal que controla la tensión aplicada a los cristales líquidos. De esta manera, se puede desplegar información en tiempo real en la pantalla LCD.

Una pantalla LCD con una placa Arduino puede ser utilizada para desplegar información o datos en tiempo real que sean generados o recibidos por el Arduino. Esto permite una visualización más clara y accesible de los datos y puede ser utilizado en una amplia variedad de proyectos, como monitoreo de sensores, interfaces de usuario, juegos, entre otros.

La placa GeekPi ( LCD1602)

Para que sirva de ejemplo, vamos a estudiar la placa GeekPi que puede comprarse en Amazon por unos 5€/unidad aqui. Esta placa utiliza el protocolo I2C para reducir la ocupación de los puertos de E / S , lo que facilita la adición al proyecto y menos cableado lo cual es fantástico ya que tradicionalmente se usaban en función del bus de 4 o 8 bits al menos 7 pines de E/S. Esta placa es comúnmente utilizado en IoT, proyectos de bricolaje, animación doméstica, construcción inteligente, proyecto de bricolaje del fabricante, etc.

Asimismo esta placa es compatible con todas las placas de desarrollo actuales, como Arduino (y todas sus variantes incluyendo ESP32, ESP8266, ECT ) , Raspberry pi, Tinkerboard, Nano pi, Banana pi, stm32, etc.

Respecto a ajustes, tan solo necesita un potenciómetro que hay detrás del lcd donde podemos ajustar la retroiluminación (color: azul) y el contraste.

La alimentación: 5v y la dirección I2C es: 0x27 y sus dimensiones son : 80 mm x 35 mm x 11 mm

En caso de conectar este lcd a una placa Arduino (o similares como ESP32, ESP8266, etc. ), las conexiones son las siguientes

Para otras placas como la Raspberry, como vemos en la imagen la conexión es similar:

Como vemos el LCD1602 usa I²C utilizando sólo dos líneas bidireccionales open-drain, Serial Data Line (SDA) y Serial Clock Line (SCL),con resistencias. Los voltajes típicos utilizados son +5 V o +3,3 V, aunque se permiten sistemas con otros voltajes. Puede funcionar siempre que sea compatible con la placa de desarrollo I2C como ya se ha comentado (las comunes Arduino, Raspberry pi, Stm32, etc.).

Este es un resumen de sus características:

  • Ocupa menos puertos de E/S.
  • Soporta el protocolo IIC.
  • La biblioteca I2C LCD1602 es fácil de conseguir
  • Con un potenciómetro para ajustar la retroiluminación y el contraste
  • Retroiluminación azul
  • uente de alimentación 5v
  • La dirección I2C es: la nueva versión es 0x3F, la versión antigua es 0x27

Cómo conectarlo a Arduino


Conecte el módulo LCD1602 a la placa Arduino Uno como se muestra en la siguiente imagen:
I2C LCD1602 placa Arduino Uno
GND GND
VCC 5V
SDA A4 /pin 20 mega2560
SCL A5 /pin 21 mega2560

Cómo programarlo en Arduino


1.Descarga la librería LiquidCrystal_I2C
2.Abre el IDE de Arduino,Selecciona Sketch -> Include Library -> Add ZIP Library
3.Encuentra el archivo LiquidCrystal_I2C que acabas de descargar.
4.Haga clic en abrir y, a continuación, se le pedirá por «Biblioteca añadido a sus bibliotecas.
5.Marque ‘Importar bibliotecas'».
6.Abra el archivo ->Sketch->Include Library->LiquidCrystal_I2C.
7.Copia el siguiente código en el IDE de Arduino, haz click en el icono upload para subir el código a la placa de control:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x27, if new version please use 0x3F instead.

void setup()
{
  lcd.init();  //initialize the lcd
  lcd.backlight();  //open the backlight
}

void loop()
{
  lcd.setCursor(3, 0); // set the cursor to column 3, line 0
  lcd.print("Hello GeeekPi");  // Print a message to the LCD
  
  lcd.setCursor(2, 1); // set the cursor to column 2, line 1
  lcd.print("hello world");  // Print a message to the LCD.
}

POSICIONAR EL TEXTO
La función mylcd.lcd_display_string() imprime texto en la pantalla y también permite elegir dónde posicionarlo.
La función se usa como mylcd.lcd_display_string(«TEXTO A IMPRIMIR», FILA, COLUMNA).
El siguiente código imprime «¡Hola Mundo!» en la fila 2, columna 3:
En un LCD de 16×2, las filas están numeradas del 1 al 2, mientras que las columnas están numeradas del 0 al 15. Por lo tanto, para imprimir «¡Hola Mundo!
Así que para imprimir «¡Hola Mundo!» en la primera columna de la fila superior, usted usaría

mylcd.lcd_display_string(“Hello World!”, 1, 0)

BORRAR LA PANTALLA
La función mylcd.lcd_clear() borra la pantalla

import I2C_LCD_driver
from time import *
mylcd = I2C_LCD_driver.lcd()
mylcd.lcd_display_string("This is how you", 1)
sleep(1)
mylcd.lcd_clear()
mylcd.lcd_display_string("clear the screen", 1)
sleep(1)
mylcd.lcd_clear()

TEXTO PARPADEANTE
Podemos utilizar un simple bucle while con las funciones mylcd.lcd_display_string() y mylcd.lcd_clear() para crear un efecto de texto parpadeante continuo:

import time
import I2C_LCD_driver
mylcd = I2C_LCD_driver.lcd()

while True:
    mylcd.lcd_display_string(u"Hello world!")
    time.sleep(1)
    mylcd.lcd_clear()
    time.sleep(1)


Puede usar la función time.sleep() en la línea 7 para cambiar el tiempo (en segundos) que el texto permanece encendido.
El tiempo que el texto permanece apagado se puede cambiar en la función time.sleep() en la línea 9.
Para finalizar el programa, pulse Ctrl-C.

IMPRIMIR LA FECHA Y LA HORA
El siguiente programa imprime la fecha y hora actual en la pantalla LCD:

import I2C_LCD_driver
import time
mylcd = I2C_LCD_driver.lcd()


while True:
    mylcd.lcd_display_string("Time: %s" %time.strftime("%H:%M:%S"), 1)
    
    mylcd.lcd_display_string("Date: %s" %time.strftime("%m/%d/%Y"), 2)

IMPRIME TU DIRECCIÓN IP
Este código imprime la dirección IP de tu conexión ethernet (eth0).
Para imprimir la IP de tu conexión WiFi, cambia eth0 por wlan0 en la línea 18:

import I2C_LCD_driver
import socket
import fcntl
import struct

mylcd = I2C_LCD_driver.lcd()

def get_ip_address(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915, 
        struct.pack('256s', ifname[:15])
    )[20:24])

mylcd.lcd_display_string("IP Address:", 1) 

mylcd.lcd_display_string(get_ip_address('eth0'), 2)

DESPLAZAR TEXTO DE DERECHA A IZQUIERDA CONTINUAMENTE
Este programa desplazará una cadena de texto desde el lado derecho de la pantalla LCD hacia el lado izquierdo y hará un bucle continuo:

import I2C_LCD_driver
from time import *

mylcd = I2C_LCD_driver.lcd()

str_pad = " " * 16
my_long_string = "This is a string that needs to scroll"
my_long_string = str_pad + my_long_string

while True:
    for i in range (0, len(my_long_string)):
        lcd_text = my_long_string[i:(i+16)]
        mylcd.lcd_display_string(lcd_text,1)
        sleep(0.4)
        mylcd.lcd_display_string(str_pad,1)

DESPLAZAR TEXTO DE DERECHA A IZQUIERDA UNA VEZ


El siguiente código desliza texto en la pantalla de derecha a izquierda una vez, luego se detiene y deja una pantalla limpia.

import I2C_LCD_driver
from time import *

mylcd = I2C_LCD_driver.lcd()

str_pad = " " * 16
my_long_string = "This is a string that needs to scroll"
my_long_string = str_pad + my_long_string

for i in range (0, len(my_long_string)):
    lcd_text = my_long_string[i:(i+16)]
    mylcd.lcd_display_string(lcd_text,1)
    sleep(0.4)
    mylcd.lcd_display_string(str_pad,1)

DESPLAZAR TEXTO DE IZQUIERDA A DERECHA UNA VEZ
Este programa desliza texto en la pantalla de izquierda a derecha una vez, luego se detiene y deja los primeros 16 caracteres de la cadena de texto en la pantalla.

import I2C_LCD_driver
from time import *

mylcd = I2C_LCD_driver.lcd()

padding = " " * 16
my_long_string = "This is a string that needs to scroll"
padded_string = my_long_string + padding

for i in range (0, len(my_long_string)):
   lcd_text = padded_string[((len(my_long_string)-1)-i):-i]
   mylcd.lcd_display_string(lcd_text,1)
   sleep(0.4)
   mylcd.lcd_display_string(padding[(15+i):i], 1)

CARACTERES PERSONALIZADOS
Puede crear cualquier patrón que desee e imprimirlo en la pantalla como un carácter personalizado.
Cada carácter es una matriz de 5 x 8 píxeles.
Hasta 8 caracteres personalizados pueden ser definidos y almacenados en la memoria del LCD.
Este generador de caracteres personalizados le ayudará a crear la matriz de bits necesaria para definir los caracteres en la memoria de la LCD.
enlace: [ https://omerk.github.io/lcdchargen/ |generador de caracteres personalizados ]


IMPRIMIENDO UN CARACTER PERSONALIZADO
El siguiente código genera un caracter «<«:

import I2C_LCD_driver
from time import *

mylcd = I2C_LCD_driver.lcd()

fontdata1 = [      
        [ 0b00010, 
          0b00100, 
          0b01000, 
          0b10000, 
          0b01000, 
          0b00100, 
          0b00010, 
          0b00000 ],
]

mylcd.lcd_load_custom_chars(fontdata1)
mylcd.lcd_write(0x80)
mylcd.lcd_write_char(0)

IMPRIMIR VARIOS CARACTERES PERSONALIZADOS
Este programa imprime una flecha grande hacia la derecha (→) en la pantalla:

import I2C_LCD_driver
from time import *

mylcd = I2C_LCD_driver.lcd()

fontdata1 = [
        # char(0) - Upper-left character
        [ 0b00000, 
          0b00000, 
          0b00000, 
          0b00000, 
          0b00000, 
          0b00000, 
          0b11111, 
          0b11111 ],

        # char(1) - Upper-middle character
        [ 0b00000, 
          0b00000, 
          0b00100, 
          0b00110, 
          0b00111, 
          0b00111, 
          0b11111, 
          0b11111 ],
        
        # char(2) - Upper-right character
        [ 0b00000, 
          0b00000, 
          0b00000, 
          0b00000, 
          0b00000, 
          0b00000, 
          0b10000, 
          0b11000 ],
        
        # char(3) - Lower-left character
        [ 0b11111, 
          0b11111, 
          0b00000, 
          0b00000, 
          0b00000, 
          0b00000, 
          0b00000, 
          0b00000 ],
       
        # char(4) - Lower-middle character
        [ 0b11111, 
          0b11111, 
          0b00111, 
          0b00111, 
          0b00110, 
          0b00100, 
          0b00000, 
          0b00000 ],
        
        # char(5) - Lower-right character
        [ 0b11000, 
          0b10000, 
          0b00000, 
          0b00000, 
          0b00000, 
          0b00000, 
          0b00000, 
          0b00000 ],
]

mylcd.lcd_load_custom_chars(fontdata1)

mylcd.lcd_write(0x80)
mylcd.lcd_write_char(0)
mylcd.lcd_write_char(1)
mylcd.lcd_write_char(2)

mylcd.lcd_write(0xC0)
mylcd.lcd_write_char(3)
mylcd.lcd_write_char(4)
mylcd.lcd_write_char(5)

Fuente https://wiki.52pi.com/index.php?title=Z-0234

Solucionar problema diskpart Clean Error del servicio de disco virtual


Usando Windows 11 (o versiones anteriores), en ocasiones puede que conectemos una unidad de memoria USB y su contenido no aparezca en el explorador de archivos. A veces, el dispositivo aparece en la Administración de discos con una casilla vacía, pero no aparece en el Explorador de archivos. Además, el «dispositivo» es diverso porque puede obtener «No hay medios en el dispositivo» en HP USB Flash, tarjeta SanDisk SD, Transcend StoreJet, DVD/CD, Pen Drive, Tarjeta de Memoria, incluso SSD/HDD bajo diferentes situaciones. En estos casos, aunque la memoria perfectamente puede estar dañada ( y esto debemos entender que pueda suceder), podemos hacer uso del administrador de discos o lo mas normal el comando diskpart para intentar solucionar el problema.

Dependiendo del estado del pendrive es posible que nos encontremos con algún error durante el proceso de intentar restaurar una unidad usb dañada utilizando el comando diskpart (ejecutados en la herramienta Símbolo como Administrador) y tras ejecutar todos estos comandos en el orden que aquí vemos mas abajo, formateará por completo nuestra memoria USB o lo que es lo mismo, lo mas normal es que solucionemos el problema (consejo: No escriba ningún dato nuevo en el dispositivo que tiene el problema de «no media» hasta que lo resuelva).

 -DISKPART> list disk //(Discos encontrados en el PC)
- DISKPART> select disk Nº del disco //(Seleccionar el disco/Pendrive deseado. Ejemplo: select disk 2)
- DISKPART> attributes disk clear readonly// (Para borrar el atributo de sólo lectura para el disco seleccionado)
- DISKPART> clean //(Borrar todo el disco)
- DISKPART> convert mbr o gpt// (Convierte al tipo de particiones mbr o gpt)
- DISKPART> create partition primary //(crear una partición primaria)
- DISKPART> select part Nº de partición //(Seleccionar la partición deseada. En caso de querer seleccionar la partición primaria: select part 1)
- DISKPART> active //(Para activar la partición seleccionada)
- DISKPART> format fs=Fat32 o Format fs=NTFS //(Formatear la USB en formato Fat32 o NTFS)
- DISKPART> assign letter Letra //(asignación de una letra en la memoria USB. Ejemplo: assign letter H)
- DISKPART> list volume //(ver como ha quedado la memoria USB tras el formateado: Volúmenes, letras, formato, etc.)

No obstante, en ocasiones, la ejecución de estos comandos no puede llevarse a cabo, debido a diversos errores que se pueden producir durante la ejecución de alguno de estos comandos citados anteriormente, lo cual hará que nos quedemos atascados en uno de los pasos a llevar a cabo, impidiéndonos continuar con el siguiente comando y por lo tanto terminar el proceso.

Ahora intentaremos recoger todos esos problemas comunes que nos puede dar el usb de la utilidad Diskpart, describiendo los errores mas habituales, junto a su posible solución.

Empecemos comentando segun la gravedad de mayor a menor los errores mas habituales:

ERROR 1:»Error del servicio de disco virtual»

Dentro de los fallos de error del servicio de disco virtual podemos encontrar unas cuantas variantes:

  • «Error del Servicio de disco virtual: No hay medios en el dispositivo«. Este fallo significa que el sistema no es capaz de comunicarse con la memoria USB. Para el PC es una unidad vacía. Como consecuencia, no puede acceder a los datos almacenados en la unidad (este es el error más grave y por ello lo trataremos al final de este post dado que muchas veces es achacable a un problema fisico).
  • «Error del Servicio de disco virtual: Se agotó el tiempo de espera para la operación«. Este mensaje lo que nos dice es que se ha intentado contactar con la unidad, pero ésta no responde.
  • «Error diskpart ha encontrado un error: no se puede realizar la solicitud por un error del dispositivo de E/S«. Al igual que en los casos anteriores, estamos ante un error de comunicación entre la memoria USB y el ordenador.
  • «DiskPart ha encontrado un error: El dispositivo no está listo«. Una vez más, este error nos indica que el sistema de Windows no puede ponerse en contacto con la unidad USB.

Estos 4 errores relacionados con el disco virtual muchas veces significan que el pendrive tiene una avería de hardware:

  • Si el USB se ha mojado podemos intentar ponerlo en una bolsita de arroz durante un par de días. Dejamos que absorba bien la humedad y volvemos a intentar conectarlo.
  • Si el caso es que se ha dado un golpe o simplemente hace mucho tiempo que no lo utilizamos, es posible que se haya deteriorado o estropeado para siempre.

Ante esta situación, poco podemos hacer, la verdad. Queda la posibilidad de que todo esto venga de un error a la hora de asignar una letra a la unidad, aunque es poco probable. Es un fallo que surge cuando conectamos un USB con una letra que ya está asignada a otro disco en el PC (otro pendrive, el propio disco duro del equipo, etc.). Podemos intentar solucionarlo cambiando la letra asignada al pendrive:

  • Abrimos el panel de «Administración de discos» (desde el panel de control o desde Cortana).
  • Seleccionamos nuestro pendrive y haciendo clic derecho pulsamos sobre «Cambiar la letra y rutas de acceso de la unidad«. Asignamos una nueva letra (que esté libre y sin usar) y guardamos los cambios.

ERROR 2 :»Error de servicio de disco virtual: El medio está protegido contra escritura. Consulte el registro de eventos del sistema para obtener más información o Acceso Denegado«

Este error nos indica que el pendrive o memoria USB solo tiene permisos de lectura. Normalmente podemos solucionarlo moviendo la pestaña de bloqueo contra escritura que suelen incorporar la mayoría de USBs del mercado.

En caso de no disponer de ninguna pestaña también podemos obtener permisos de escritura ejecutando el comando «attributes disk clear readonly» (sin comillas) en MS-DOS, justo antes de borrar el USB mediante el comando Clean. Una vez que haya eliminado la protección contra escritura, ya podrá llevar a cabo el formateado.

ERROR 3 :»Error del servicio de disco virtual: el volumen es demasiado pequeño»

Este error ocurre cuando ejecutamos el comando DISKPART> format fs=Fat32. Es otro fallo con el disco virtual, pero que esta vez podemos solucionar sin demasiados dramas. Lo único que tenemos que hacer es formatear el USB en formato NTFS en lugar de FAT32.

En este caso pues lo que tendremos que hacer será formatear nuestra memoria USB en el formato NTFS, para lo cual, cuando estemos realizando el formateo mediante comandos, en lugar de utilizar el comando «format fs=FAT32» utilizaremos «format fs=NTFS«.

Si esto no funciona, realizaremos la siguiente serie de comandos:

  • diskpart
  • clean
  • convert gpt
  • format fs=NTFS

ERROR 4 :»Error del servicio de disco virtual:«El volumen es demasiado grande»

Seguimos con otro fallo del disco virtual al intentar formatear nuestro pendrive. En este caso el problema está en que Windows no es capaz de formatear ningún disco a FAT32 con un tamaño superior a 32GB. Un dato bastante curioso teniendo en cuenta que el sistema sí que es capaz de montar y leer unidades de mayor tamaño.

En cualquier caso, para poder formatear una unidad USB que tenga un tamaño de 1TB, 500GB o similar, tendremos que utilizar una aplicación de terceros que sí esté habilitada para formatear este tipo de discos. Una buena herramienta gratuita para llevar a cabo este proceso es FAT32 Format (disponible AQUÍ).

ERROR 5 :»chkdsk no está disponible para archivos RAW»

Este error nos saltará al intentar reparar los fallos en disco con el comando chkdsk. Cuando una unidad está en formato RAW significa que ha perdido su formato de archivos. Por tanto, para poder ejecutar la herramienta de chequeo de disco primero tendremos que darle formato (tal y como explicamos en los métodos #2 y #3).

ERROR 6 : «Acceso denegado porque no tiene privilegios suficientes»

Si no ejecutamos la ventana de MS-DOS con permisos de administrador el comando diskpart, obtendremos este error. Lo podemos solucionar simplemente haciendo esto:

  • Si utilizamos Cortana: Escribimos «cmd«, y cuando aparezca el icono del símbolo del sistema, en lugar de pulsar sobre él hacemos clic derecho y seleccionamos «Ejecutar como administrador«.
  • En versiones anteriores a Windows 10: Nos desplazamos hasta la carpeta C:\Windows\System32 y buscamos el ejecutable «cmd.exe». Hacemos clic derecho sobre el archivo mientras presionamos la tecla «shift» y seleccionamos «Ejecutar como administrador«.

Error del Servicio de disco virtual:No hay medios en el dispositivo.

ERROR 7: «Error del Servicio de disco virtual: No se puede convertir el disco especificado. Los CDs y DVDs son ejemplos de discos no convertibles».

Este error ocurre tras ejecutar el comando: DISKPART> convert mbr . Si ha recibido este mensaje de error, se debe a que su memoria USB contiene archivos almacenados en su interior, por lo que deberemos borrar todo su contenido antes de convertir las particiones.

Esto podrá hacerlo gracias al comando: DISKPART> clean. Tras este comando ya puede realizar la conversión

ERROR 8 :» No se encontró ninguna extensión disponible utilizable. Es posible que no haya suficiente espacio disponible para crear una partición con el tamaño y desplazamiento especificados. Especifique valores de tamaño y desplazamiento distintos o no especifique ninguno de estos valores para crear la partición con el tamaño máximo. Es posible que las particiones del disco se crearán con el formato de particiones de disco MBR y que el disco contenga cuatro particiones principales (ya no pueden crearse más particiones) o tres particiones principales y una extendida (solo pueden crearse unidades lógicas)

Este error ocurre tras haber ejecutado el comando DISKPART> create partition primary

En este caso tendrás que ejecutar el comando: DISKPART> clean para justo despues volver a ejecutar el comando DISKPART> convert gpt. Una vez que halla ejecutado los comandos anteriores, ya podrá ejecutar el comando DISKPART> create partition primary para continuar con el proceso.

ERROR 9: Error del Servicio de disco virtual: El volumen no está en línea.

Este error ocurre cuando ejecutamos el comando DISKPART> format fs=Fat32.

En este caso si recibimos este error tendremos que ejecutar los siguientes comandos antes de realizar el formateado en el orden especificado: DISKPART> online diskDISKPART>create partition primaryDISKPART> convert mbr.

ERROR 10: « Error del Servicio de disco virtual:No hay medios en el dispositivo«

Por qué aparece el error «No hay medios en el dispositivo»? Cuando se obtiene el error, se sugiere desconectar la unidad USB y volver a conectarlo a otra máquina para ver si es el problema con su unidad flash. Si lo es, los siguientes factores pueden explicar el error:

  • La unidad USB está fallando o ha fallado. Al igual que un disco duro, una unidad flash tiene una vida útil. Si la memoria USB nos puede servir para un par de años, puede llegar al final y fallar gradualmente. Los daños físicos como estampidas, caídas de altura o golpes frecuentes también pueden dañar la unidad USB.
  • El MBR o PBR del dispositivo está dañado. MBR es la abreviatura de Master Boot Record, que también se conoce como sector de arranque maestro. Es el primer sector que debe leerse cuando se enciende el PC para acceder al disco duro.El MBR recoge el tamaño y la ubicación de cada partición en el disco duro.El MBR consta de tres partes  El código de arranque maestro (ocupa 466Bytes), la tabla de particiones del disco (ocupa 648Bytes) y la firma de arranque. El uso inadecuado de la unidad, como desenchufar la unidad flash mientras está en funcionamiento, es probable que dañe las tablas de búsqueda internas de la unidad e invocar la corrupción en Master Boot Record (MBR) o Partition Boot Record (PBR).
  • El error también puede ser causado por otras razones desconocidas que no se han encontrado hasta ahora. Sin embargo, lo que cuenta a continuación es encontrar soluciones que resuelvan el problema de «No hay medios en el dispositivo».

Por tanto para reparar el error «No hay medios en el dispositivo», primero puede cambiar el puerto USB o desenchufar y enchufar la unidad varias veces, o conectar la unidad a otros ordenadores, tal vez con diferentes sistemas operativos como Linux, para probar si funciona. Si el problema persiste, AOMEI Partition Assistant Professional puede INTENTAR realizar la recuperación de particiones de unidades USB, tarjetas SD, discos duros y SSD ( por cierto no siempre con éxito). Este software viene con una versión Demo para una prueba gratuita.

  1. Conecte el dispositivo a un ordenador. 2. Inicie AOMEI Partition Assistant y haga clic en Partition Recovery Wizard en el lado izquierdo.
  2. Seleccione el dispositivo. Puede distinguirlo por la capacidad del disco y la marca.
  3. Elija el modo de búsqueda, Búsqueda rápida o Búsqueda completa. Seleccione la partición que desea recuperar y haga clic en Continuar para empezar. 5. Espere a que finalice el proceso.

Nota: si los datos de ese dispositivo son muy vitales para usted, y el método anterior no funciona, se sugiere recurrir a un software profesional de recuperación de datos.