Sencillo almacenamiento masivo para su proyecto de microcontroladores (5 / 5 paso)

Paso 5: Escribir el código

Escritura de código es un poco complicada, pero vamos a empezar simple. Enviar el uDrive a 1 byte, carácter U, en su velocidad en baudios nominado, y tampoco recibira tres cosas. Un 06, lo que significa trabajado, a 15 que significa que se el byte pero no entendía, o nada, que significa la unidad no es conectada o no conectada encima de la derecha.

Aquí le damos algunos código de vb.net para ello:

SerialPort.Open() ' abrir el puerto
SerialPort.DiscardInBuffer() ' borrar el búfer de entrada
OutPacket(0) = Strings.Asc("U") ' enviar un y esto fija la tasa de baudios
SerialPort.Write (OutPacket, 0, 1) ' enviar datos en outpacket 0, 1 byte de comienzo
Sleep(100) ' esperar respuesta
SerialPort.Read (InPacket, 0, 1) ' leer detrás de 1 byte, debe ser 06
SerialPort.Close()

De ahora en adelante, toda comunicación será a esta velocidad. Velocidades de 300 a 38400 trabajo hablar a un PC con un cable de 3 metros. Con un cable más corto fácilmente iría más rápido.

El código siguiente es el código fuente completo en vb.net (vb.net está disponible gratis). Las principales complicaciones son la manera el uDrive divide archivos en pedazos - necesita ver los arreglos de discos y el resto división y división de enteros y escribir estas rutinas en su idioma preferido para tu micro.

Costo de la uDrive es $30US.

El uDrive también puede trabajar en modo Raw, donde leer y escribir en distintos sectores. Esto es útil donde desea que la interfaz a un sistema operativo existente, tales como CP/M. Ideas más está sucediendo en el foro de equipo Vintage, el Picaxe y el forum de N8VEM.

Estad atentos, que el próximo proyecto poco será obtener un $3 picaxe 08M escribir un pequeño archivo que puede ser leído por un ordenador.

¡Que te diviertas!

' uDrive ejemplo de código para vb.net
' configuración de prueba es un uDrive hablando al puerto serie del PC mediante un max232
' James Moxham moxhamj de mayo de 2009 en internode.on.net

Las importaciones de System.IO ' necesaria para ejecutar varias llamadas
Las importaciones de cadenas = Microsoft.VisualBasic ' por lo que puede usar cosas como izquierda (y derecha (para cuerdas
Public Class Main
Dim WithEvents SerialPort como nuevo IO. Ports.SerialPort ' declarar puerto serie
Público Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Integer) ' para los Estados de sueño
InPacket(0 To 2000) público como Byte ' bug con serial.write cadenas como chr(255) no salen
OutPacket(0 To 50) público como Byte ' envían generalmente solamente unos pocos bytes aunque así podría hacerlo más pequeño
Privada Sub Initialise_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) maneja Initialise.Click
' inicializar
' enviar una U a la velocidad en baudios seleccionada baudios tasa al inicializar
Tratar de
SerialPort.PortName = "COM1"
SerialPort.BaudRate = "38400" ' 38400
SerialPort.Parity = IO. Ports.Parity.None ' sin paridad
SerialPort.DataBits = 8 ' 8 bits
SerialPort.StopBits = IO. Ports.StopBits.One ' bits de parada
SerialPort.ReadTimeout = 1000' milisegundos tan tiempo en 1 segundo si no hay respuesta
SerialPort.Open() ' abrir el puerto
SerialPort.DiscardInBuffer() ' borrar el búfer de entrada
OutPacket(0) = Strings.Asc("U") ' enviar un y esto fija la tasa de baudios
SerialPort.Write (OutPacket, 0, 1) ' enviar datos en el array outpacket Inicio en 0 con 1 byte
Sleep(100) ' esperar respuesta
SerialPort.Read (InPacket, 0, 1) ' leer detrás de 1 byte, debe ser 06
SerialPort.Close()
Captura como excepción
MsgBox ("Error apertura port serial - es otro programa mediante COM1?")
SerialPort.Close()
Prueba final
Si InPacket(0) = 6 entonces
TextBox1.Text += "Initialised" + vbCrLf ' éxito
Otra cosa
TextBox1.Text += "Error de inicialización" + vbCrLf ' dejar de
End If
End Sub

Privada Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) maneja Button2.Click
' apagar el programa - Asegúrese de que está cerrado el puerto serie
SerialPort.Close()
Final
End Sub

Privada Sub ReadFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) maneja ReadFile.Click
' volver leer un archivo
' nombre de archivo está en el cuadro de texto en el formato de nombre de archivo. TXT donde nombre es 1 a 8 caracteres y extensión es de 3 caracteres
Dim nombre de archivo como cadena
Dim LengthFilename como entero
Dim te como entero
Dim j como entero
Dim contador como enteros
BytesToRead DIM como entero
Dim Filesize como largo ' tamaño del archivo a leer hacia atrás
PacketSize DIM como entero
Dim paquetes como largo ' número de paquetes
Atenuar resto como mucho ' resto
Dim Readarray(50000) como Byte ' array para leer los datos en
Dim Readcounter como mucho ' contador para el readarray
Readcounter = 0' reiniciar el contador para el readarray
PacketSize = 10' uso 10 como conveniente para picaxe
Nombre de archivo = TextBox2.Text ' nombre del archivo a leer
LengthFilename = Strings.Len(Filename) ' longitud de este archivo
OutPacket(0) = Strings.Asc ("' comando para leer
OutPacket(1) = Strings.Asc("a")
OutPacket(2) = PacketSize ' consigue en bloques de números bytes
Contador = 3' incremento contador
Para i = 1 To LengthFilename ' Enviar archivo
OutPacket(Counter) = Strings.Asc (Strings.Mid (nombre de archivo, i, 1))
Contador = contador + 1
Siguiente
OutPacket(Counter) = 0' string null para terminar
Contador = contador + 1' uno bytes más
SerialPort.Open() ' abrir el puerto serie
SerialPort.Write (OutPacket, 0, contador) ' enviar datos en el array outpacket Inicio en 0
Sleep(100) ' esperar respuesta
¿BytesToRead = SerialPort.BytesToRead ' cuántos bytes en el buffer? Debe ser 4
SerialPort.Read (InPacket, 0, BytesToRead) ' leer en
' obtener el tamaño del archivo en bytes, msb primeros, 4 bytes
Tamaño de archivo = InPacket(0) * 16777216 + InPacket(1) * 65536 + InPacket(2) * 256 + InPacket(3)
Tamaño de archivo = Filesize + 1' número de bytes más hay un < ack > en el extremo
Contador = 0' reiniciar el contador
Paquetes = Filesize \ PacketSize ' División de enteros
Resto = Filesize Mod PacketSize ' y resto de izquierda sobre
Para i = 0 a paquetes - 1' conseguir los números bloques de datos
OutPacket(0) = 6' ack
SerialPort.Write (OutPacket, 0, 1) ' solicitar un bloque de
Sleep(100) ' corto retardo
SerialPort.Read (InPacket, 0, PacketSize) ' leer de nuevo un bloque
Para j = 0 To PacketSize - 1' la tienda en una matriz
Readarray(Readcounter) = InPacket(j)
Readcounter += 1' Añadir 1 al readcounter
Siguiente
Siguiente
' ahora conseguir el resto
OutPacket(0) = 6' ack
SerialPort.Write (OutPacket, 0, 1) ' solicitar un bloque de
Sleep(100) ' esperar a volver
SerialPort.Read (InPacket, 0, resto) ' leer el resto de bytes, debe ser ultima 06
Para j = 0 para el resto - 1' la tienda en una matriz
Readarray(Readcounter) = InPacket(j)
Readcounter += 1' Añadir 1 al readcounter
Siguiente
' impresión de un mensaje para decir si funciono o no, es decir, es el último carácter = 06
Si Readarray (Readcounter - 1) = 6 Then
TextBox1.Text += vbCrLf + "Leer el éxito" + vbCrLf
Otra cosa
TextBox1.Text += vbCrLf + "Read error" + vbCrLf
End If
' si el archivo actual es 4 bytes de longitud y ahora es un < ack > al final
' = 5 bytes y el último hace que readcounter += 1 readcounter = 6
' así que recortar y hacer la readcounter correcta
Readcounter = Readcounter - 1' ahora va ser = a 4
Readarray(Readcounter) = 0 ' borrar el ack (suponga que vino a través, debe tener)
SerialPort.Close() ' cerrar el puerto serie
«vb.net prueba código: imprimir el archivo en un cuadro de texto
Para i = 0 To Readcounter - 1
TextBox1.Text += Strings.Chr(Readarray(i))
Siguiente
End Sub
Privada Sub Dir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) maneja Dir.Click
Dim DirBytes como entero
Dim te como entero
OutPacket(0) = Strings.Asc ("' comando para leer
OutPacket(1) = Strings.Asc("d") ' directorio
OutPacket(2) = Strings.Asc("*") ' conseguir todos
OutPacket(3) = 0' cero para poner fin a
SerialPort.Open() ' abrir el puerto serie
SerialPort.Write (OutPacket, 0, 4) ' enviar datos en matriz outpacket desde
Sleep(2000) ' esperar un rato, volcados grandes tardan mucho tiempo (o encuesta a la entrada)
DirBytes = SerialPort.BytesToRead ' número de bytes a leer hacia atrás
SerialPort.Read (InPacket, 0, DirBytes)
SerialPort.Close()
' Mostrar
TextBox1.Text += vbCrLf
Para i = 0 a DirBytes - 2' -1 y luego 1 menos para el ack final
Si InPacket(i) <> 10 entonces ' 10 es el delimitador en la lista
TextBox1.Text += Strings.Chr(InPacket(i))
Otra cosa
' reemplazar con una nueva línea
TextBox1.Text += vbCrLf
End If
Siguiente
End Sub
Privada Sub Era_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) maneja Era.Click
Dim nombre de archivo como cadena
Dim LengthFilename como entero
Dim te como entero
Dim contador como enteros
Nombre de archivo = TextBox3.Text
LengthFilename = Strings.Len(Filename)
OutPacket(0) = Strings.Asc ("
OutPacket(1) = Strings.Asc("e") ' borrar
contador = 2
Para i = 1 To LengthFilename ' Enviar archivo
OutPacket(Counter) = Strings.Asc (Strings.Mid (nombre de archivo, i, 1))
Contador = contador + 1
Siguiente
OutPacket(Counter) = 0' string null para terminar
Contador += 1
SerialPort.Open() ' abrir el puerto serie
SerialPort.Write (OutPacket, 0, contador) ' enviar datos en el array outpacket Inicio en 0
Sleep(100) ' esperar respuesta
SerialPort.Read (InPacket, 0, 1) ' reconoce
Si InPacket(0) = 6 entonces
TextBox1.Text += "Erase el éxito" + vbCrLf ' éxito
Otra cosa
TextBox1.Text += "Borrar error" + vbCrLf ' dejar de
End If
SerialPort.Close()
End Sub

Privada Sub Writefile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) maneja Writefile.Click
Dim de memoria As String ' conveniente para almacenar una cadena de pruebas
Dim Filearray(1000) como Byte ' con arreglos de discos para el archivo
Dim FileLength mientras
PacketSize DIM como entero
Dim te como entero
Dim j como entero
Dim nombre de archivo como cadena
Dim paquetes mientras
Dim PacketRemainder como entero
Dim FileCounter como tiempo
FileCounter = 0
Nombre de archivo = TextBox5.Text ' nombre de archivo para guardar
Memoria = TextBox4.Text ' estos datos normalmente vendría desde otro lugar
PacketSize = 10
FileLength = Strings.Len(Filestring)
' mover la cadena en la matriz. (Esta cadena es simplemente una conveniencia para pruebas)
Para i = 1 para FileLength
Filearray (i - 1) = Strings.Asc (Strings.Mid (memoria, i, 1)) ' convertir a valor ascii
Siguiente
' archivo está listo para la salida
OutPacket(0) = Strings.Asc ("' comando
OutPacket(1) = Strings.Asc("t") ' escribir
OutPacket(2) = PacketSize ' tamaño de paquetes 0-50, el nuevo archivo (no añadir modo)
SerialPort.Open() ' abrir el puerto serie
SerialPort.Write (OutPacket, 0, 3) ' enviar datos en el array outpacket Inicio en 0
Para i = 1 To Strings.Len(Filename) ' enviar el nombre del archivo
OutPacket(0) = Strings.Asc (Strings.Mid (nombre de archivo, i, 1))
SerialPort.Write (OutPacket, 0, 1) ' enviar byte que
Siguiente
OutPacket(0) = 0
SerialPort.Write (OutPacket, 0, 1) ' enviar una cadena null para terminar
' ahora enviar 4 bytes para la longitud del archivo
OutPacket(0) = FileLength \ 16777216' división entera
SerialPort.Write (OutPacket, 0, 1)
OutPacket(0) = FileLength \ 65536' división entera
SerialPort.Write (OutPacket, 0, 1)
OutPacket(0) = FileLength \ 256' división entera
SerialPort.Write (OutPacket, 0, 1)
OutPacket(0) = FileLength Mod 256' resto
SerialPort.Write (OutPacket, 0, 1)
Sleep(100) ' espera para reconocer
SerialPort.Read (InPacket, 0, 1) ' debe ser 06
Si InPacket(0) <> 6 entonces
TextBox1.Text += "Error con la primera lectura"
End If
' enviar los datos en grupos packetsize
Paquetes = FileLength \ PacketSize ' División de enteros
PacketRemainder = FileLength Mod PacketSize
Para i = 1 a paquetes
Para j = 1 To PacketSize
OutPacket(0) = Filearray(FileCounter)
SerialPort.Write (OutPacket, 0, 1)
FileCounter = FileCounter + 1
Siguiente
Sleep(100)
SerialPort.Read (InPacket, 0, 1)
Si InPacket(0) <> 6 entonces
TextBox1.Text += "Error con el paquete"
End If
Siguiente
' ahora enviar el resto si es que existe
Si PacketRemainder <> 0 entonces
Para j = 1 To PacketRemainder
OutPacket(0) = Filearray(FileCounter)
SerialPort.Write (OutPacket, 0, 1)
FileCounter = FileCounter + 1

Siguiente
Sleep(100)
SerialPort.Read (InPacket, 0, 1)
Si InPacket(0) <> 6 entonces
TextBox1.Text += "Error de escritura el último paquete"
End If
End If
SerialPort.Close()
End Sub
Fin clase

Artículos Relacionados

Control de Motor Reversible, fácil para Arduino (o cualquier microcontrolador)

Control de Motor Reversible, fácil para Arduino (o cualquier microcontrolador)

este proyecto utiliza tres componentes principales para proporcionar control de avance y retroceso de un solo motor.  Fácilmente pueden interconectar a un Arduino o cualquier otro microcontrolador.Es tan simple - usted alambre encima de "forma libre&
Cartón y ductape lego caja de almacenamiento - Caja para almacenar lego de cartón y precinto

Cartón y ductape lego caja de almacenamiento - Caja para almacenar lego de cartón y precinto

Hola otra vez!Mi hijo recibió de su primo una bolsa llena de piezas de lego y la caja donde almacena el lego a ser poco para toda esta cantidad de piezas. También, con todo lo que cantidad y clasificación ni orden en todo es imposible encontrar nada.
3 canales Dimmer/atenuador para Arduino u otro microcontrolador

3 canales Dimmer/atenuador para Arduino u otro microcontrolador

En un anterior instructable presenté un simple AC TRIAC fader/atenuador que podría controlarse con un Arduino. En varias reacciones que tiene, un número de personas que expresaron su interés en un atenuador de 3 canales RGB. Pero ya no he visto todav
Para empezar con un microcontrolador 8051

Para empezar con un microcontrolador 8051

Hola a todosMe encanta proyectos de microcontroladores. Utilizo a menudo ambas tarjetas Arduino y "desnudo" AVR microcontroladores (dispositivos ATTINY y ATMEGA) para mis proyectos.Para mi cultura, decide estudiar un tipo de microcontroladores,
Sencillo almacenamiento de Paracord de rápido barato!!!!!!

Sencillo almacenamiento de Paracord de rápido barato!!!!!!

Si eres algo como yo, estás cansado de cavar a través de cualquier envase mantenga el paracord, sólo a sentirte Clark W. Griswold con sus luces de Navidad.He probado muchas cosas incluyendo los "donuts" poco lujo.Aquí está mi problema: soy perez
IsoLocker - cerradura y almacenamiento caja para fachadas, elemento de refrigeración

IsoLocker - cerradura y almacenamiento caja para fachadas, elemento de refrigeración

¿Usted ha estado alguna vez en la situación que usted necesite para almacenar algo, en algún lugar y proteger a esa cosa de extraños? ¿Y has probado a guardar alimentos o bebidas en verano, sólo para notar que todas estas cosas se molesto calientes d
Cómo hacer un dispensador de pasta de soldadura para los proyectos de SMD...

Cómo hacer un dispensador de pasta de soldadura para los proyectos de SMD...

Recientemente construí un horno de reflujo SMD usando un horno tostador y un kit de controlador. Esto ha hecho muy fácil para la soldadura de SMD PCB (placas de circuito impreso del dispositivo de montaje superficial). Simplemente ponga gotas de past
Construir una cama de almacenamiento Modular para baratos como 5 segundos. Y salvar un poco el mundo.

Construir una cama de almacenamiento Modular para baratos como 5 segundos. Y salvar un poco el mundo.

Mi otra mitad y yo somos nómadas actualmente vive en Boulder, CO, hasta que averiguar nuestro siguiente movimiento. Ser nómadas significa hemos estado durmiendo en un colchón en el piso durante unos meses. Camping urbano es divertido por un rato, per
Cómo hacer tu primer sencillo llevó abrir y cerrar proyecto en Pi2 frambuesa

Cómo hacer tu primer sencillo llevó abrir y cerrar proyecto en Pi2 frambuesa

Felicidades a ti, para ti conseguir una frambuesa pi2. El ahora super emocionado empezar y movimiento, pero no saben nada donde empezar sobre.La razón por la que estoy compartiendo este proyecto es que, en etapas iniciales donde no está familiarizado
ATTiny USI I2C introducción - una interfaz de comunicación de gran alcance, rápido y conveniente para sus proyectos ATTiny!

ATTiny USI I2C introducción - una interfaz de comunicación de gran alcance, rápido y conveniente para sus proyectos ATTiny!

I2C, es un estándar que ha sido de alrededor de alrededor de 20 años y ha encontrado aplicaciones en casi todos los rincones del universo de la electrónica.  Es una tecnología muy útil para nosotros aficionados del microcontrolador, pero puede parece
Un vivo y trabajo organizado de espacio para reuniones, proyecto de trabajo, bricolaje y ocio

Un vivo y trabajo organizado de espacio para reuniones, proyecto de trabajo, bricolaje y ocio

yo soy un diseñador/artista de tiempo completo que está compartiendo un espacio de trabajo/vivir con otro diseñador. El espacio es un apartamento con techos altos y mucha luz, pero no hay armarios. Técnicamente eso es una mentira, pero un armario que
Utilizando powertool baterías como una fuente de alimentación genérica para otros proyectos

Utilizando powertool baterías como una fuente de alimentación genérica para otros proyectos

En este proyecto, voy a mostrar cómo aprovechar Ryobi baterías de powerpack para otros usos.¿Por qué hacer esto? Powertool batteires vienen con protección integrada de calidad, buena calidad cargadores, piezas son fácilmente disponible (es decir, más
Crear Custom títulos en iMovie 09--agregar Logos e imágenes transparentes para tus proyectos de Video!

Crear Custom títulos en iMovie 09--agregar Logos e imágenes transparentes para tus proyectos de Video!

¿Desea Agregar títulos personalizados y las capas de la imagen transparente para tus proyectos de vídeo iMovie? Este tutorial te enseña cómo añadir archivos de imagen transparente png a imovie y superposición sobre el vídeo. Esto puede usarse para añ
Super soldadura embutido para sus proyectos de carpintería

Super soldadura embutido para sus proyectos de carpintería

Aprende a hacer incrustaciones de Metal de la soldadura para sus proyectos de carpinteríaEn pocos pasos puede crear una gran incrustación metal mira utilizando una soldadura que se puede comprar en cualquier ferretería.Ver más imágenes en mi página w