Eenvoudige massa-opslag voor uw microcontroller project (5 / 5 stap)

Stap 5: Schrijven van de code


Het schrijven van code is een beetje ingewikkeld, maar laten we beginnen eenvoudig. Stuur de uDrive slechts 1 byte, een teken van U, op uw genomineerde baud-rate, en ofwel krijg je drie dingen terug. Een 06, wat betekent dat het werkte, een 15, wat betekent dat het de byte kreeg maar niet begreep het, of niets, wat betekent dat de drive is niet aangesloten of niet bekabeld recht.

Hier is sommige vb.net code om dit te doen:

SerialPort.Open() ' de poort openen
SerialPort.DiscardInBuffer() ' de input buffer wissen
OutPacket(0) = Strings.Asc("U") ' een toegestuurd en Hiermee stelt u de baud-rate
SerialPort.Write (OutPacket, 0, 1) ' verzenden gegevens in outpacket beginnen met 0, 1 byte
Sleep(100) ' wacht op antwoord
SerialPort.Read (InPacket, 0, 1) ' lezen van 1 byte terug, moet 06
SerialPort.Close()

Voortaan zullen alle comms deze baud-rate. Prijzen van 300 tot 38400 werken praten op een PC met een kabel van 3 meter. Met een kortere kabel zou het gemakkelijk gaan sneller.

De onderstaande code is de volledige broncode in vb.net (vb.net is beschikbaar kostenloos). De belangrijkste complicaties zijn de manier de uDrive splitst bestanden in stukken - moet u kijken naar de arrays en de integer division en division van de rest en deze routines schrijven in de taal van uw voorkeur voor uw micro.

Kosten van de uDrive is $30US.

De uDrive kan ook werken in Raw-modus, waar u lezen en schrijven naar individuele sectoren. Dit is nuttig op een interface naar een bestaand besturingssysteem, zoals de CP/M waar u wilt. Meer brainstormen gebeurt op de Vintage Computer forum, het forum Picaxe en het N8VEM forum.

Verblijf gestemd, zoals de volgende kleine project te krijgen een $3 picaxe 08M om te schrijven een klein bestand dat kan worden gelezen door een PC.

Veel plezier!

' uDrive-voorbeeldcode voor vb.net
' test setup is een uDrive in gesprek met de seriële poort van een PC via een max232
' James Moxham mei 2009 moxhamj op internode.on.net

Invoer van de System.IO ' die nodig zijn voor het uitvoeren van diverse oproepen
Hiermee importeert u tekenreeksen = Microsoft.VisualBasic ' dus kunt dingen zoals links (en rechts (voor strijkers
Public Class Main
Dim WithEvents SerialPort als nieuwe IO. Ports.SerialPort ' seriële poort verklaren
Openbare Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Integer) ' voor de verklaringen van de slaap
Openbare InPacket(0 To 2000) As Byte ' insect met serial.write snaren als chr(255) zal niet gaan
Openbare OutPacket(0 To 50) As Byte ' meestal alleen sturen een paar bytes al zo kon dit kleiner maken
Private Sub Initialise_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) verwerkt Initialise.Click
"initialiseren
' Stuur een U de geselecteerde baud rate baud te initialiseren
Probeer
SerialPort.PortName = "COM1"
SerialPort.BaudRate = "38400" ' 38400
SerialPort.Parity = IO. Ports.Parity.None ' geen pariteit
SerialPort.DataBits = 8 ' 8 bits
SerialPort.StopBits = IO. Ports.StopBits.One ' one-stop bits
SerialPort.ReadTimeout = 1000' milliseconden dus een time-out optreedt in 1 seconde als geen reactie
SerialPort.Open() ' de poort openen
SerialPort.DiscardInBuffer() ' de input buffer wissen
OutPacket(0) = Strings.Asc("U") ' een toegestuurd en Hiermee stelt u de baud-rate
SerialPort.Write (OutPacket, 0, 1) ' gegevens verzenden in matrix outpacket beginnen bij 0 met 1 byte
Sleep(100) ' wacht op antwoord
SerialPort.Read (InPacket, 0, 1) ' lezen van 1 byte terug, moet 06
SerialPort.Close()
Catch ex als uitzondering
MsgBox ("Error opening seriële poort - is een ander programma met COM1?")
SerialPort.Close()
Einde proberen
Als InPacket(0) = 6 Then
TextBox1.Text += "Initialised" + vbCrLf ' succes
Anders
TextBox1.Text += "Initialisatie is mislukt" + vbCrLf ' mislukken
End If
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) verwerkt Button2.Click
' shutdown het programma - zorg ervoor dat de seriële poort is gesloten
SerialPort.Close()
Einde
End Sub

Private Sub ReadFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) verwerkt ReadFile.Click
' een bestand terug te lezen
' vijl naamwoord zit in het tekstvak in de indeling FILENAME. TXT waarbij naam 1 tot en met 8 tekens en extensie is 3 tekens
Dim bestandsnaam As String
Dim LengthFilename As Integer
Dim i As Integer
Dim j As Integer
Dim Counter As Integer
Dim BytesToRead As Integer
Filesize As Long Dim ' grootte van het bestand te lezen terug
Dim packetomvang As Integer
Pakketten As Long Dim ' aantal pakketten
Rest As Long Dim ' rest
Dim Readarray(50000) As Byte ' matrix om gegevens in te lezen
Dim Readcounter As Long ' teller voor de readarray
Readcounter = 0' reset van de teller voor de readarray
Packetomvang = 10' gebruik 10 net zo gemakkelijk voor picaxe
Filename = TextBox2.Text ' naam van het bestand om te lezen
LengthFilename = Strings.Len(Filename) ' lengte van deze bestandsnaam
OutPacket(0) = Strings.Asc ("' opdracht om te lezen
OutPacket(1) = Strings.Asc("a")
OutPacket(2) = packetomvang ' krijgen in blokken van n bytes
Counter = 3' increment teller
Voor i = 1 To LengthFilename ' bestandsnaam afgeven
OutPacket(Counter) = Strings.Asc (Strings.Mid (Filename, i, 1))
Counter = Counter + 1
Volgende
OutPacket(Counter) = 0' null-reeks om een einde te
Counter = Counter + 1' een meer byte
SerialPort.Open() ' de seriële poort openen
SerialPort.Write (OutPacket, 0, Counter) ' gegevens verzenden in matrix outpacket beginnen bij 0
Sleep(100) ' wacht op antwoord
BytesToRead = SerialPort.BytesToRead ' hoeveel bytes in de buffer? Moet 4
SerialPort.Read (InPacket, 0, BytesToRead) ' lezen in
' krijgen de bestandsgrootte in bytes, msb eerste, 4 bytes
Filesize = InPacket(0) * 16777216 + InPacket(1) * 65536 + InPacket(2) * 256 + InPacket(3)
Filesize = Filesize + 1-nummer van bytes plus is er een < ack > op het einde
Counter = 0' reset van de teller
Pakketten Filesize = \ packetomvang ' integer divisie
Rest = Filesize Mod PacketSize "en links resterende
Voor i = 0 tot pakketten - 1' krijgt de n blokken gegevens
OutPacket(0) = 6' ack
SerialPort.Write (OutPacket, 0, 1) ' een blok aanvragen
Sleep(100) ' korte vertraging
SerialPort.Read (InPacket, 0, packetomvang) ' oplezen van een blok
For j = 0-packetomvang - 1' op te slaan in een array
Readarray(Readcounter) = InPacket(j)
Readcounter += 1' er 1 bij optellen om te readcounter
Volgende
Volgende
' nu de rest
OutPacket(0) = 6' ack
SerialPort.Write (OutPacket, 0, 1) ' een blok aanvragen
Sleep(100) ' wachten om terug te komen
SerialPort.Read (InPacket, 0, rest) ' Lees de rest bytes, laatst moet 06
For j = 0 tot en met rest - 1' op te slaan in een array
Readarray(Readcounter) = InPacket(j)
Readcounter += 1' er 1 bij optellen om te readcounter
Volgende
' print een bericht om te zeggen als het werkte of niet, ie is de laatste teken = 06
Als Readarray (Readcounter - 1) = 6 Then
TextBox1.Text += vbCrLf "Lezen succes" + vbCrLf
Anders
TextBox1.Text += vbCrLf "Lezen fail" + vbCrLf
End If
' als het werkelijke bestand 4 bytes lang is is er nu een < ack > aan het einde
' = 5 bytes en de laatste readcounter += 1 maakt readcounter = 6
' dus trim af en maak de readcounter correct
Readcounter = Readcounter - 1' nu zal worden = 4
Readarray(Readcounter) = 0 ' verwijderen van de ack (aannemen dat het kwam door, het moet)
SerialPort.Close() ' Sluit de seriële poort
' vb.net test code - afdrukken van het bestand in een tekstvak
Voor i = 0 tot Readcounter - 1
TextBox1.Text += Strings.Chr(Readarray(i))
Volgende
End Sub
Private Sub Dir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) verwerkt Dir.Click
Dim DirBytes As Integer
Dim i As Integer
OutPacket(0) = Strings.Asc ("' opdracht om te lezen
OutPacket(1) = Strings.Asc("d") ' directory
OutPacket(2) = Strings.Asc("*") ' krijgen alle
OutPacket(3) = 0' nul te beëindigen
SerialPort.Open() ' de seriële poort openen
SerialPort.Write (OutPacket, 0, 4) ' gegevens verzenden in matrix outpacket beginnen bij
Sleep(2000) ' een tijdje wachten, grote stortplaatsen nemen een lange tijd (of gewoon poll de input)
DirBytes = SerialPort.BytesToRead ' aantal te lezen bytes
SerialPort.Read (InPacket, 0, DirBytes)
SerialPort.Close()
' weer te geven
TextBox1.Text += vbCrLf
Voor i = 0 tot DirBytes - 2' -1 en vervolgens 1 minder voor de ack eind
Als InPacket(i) <> 10 dan ' 10 is het scheidingsteken in deze lijst
TextBox1.Text += Strings.Chr(InPacket(i))
Anders
' vervangen door een nieuwe regel
TextBox1.Text += vbCrLf
End If
Volgende
End Sub
Private Sub Era_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) verwerkt Era.Click
Dim bestandsnaam As String
Dim LengthFilename As Integer
Dim i As Integer
Dim Counter As Integer
Filename = TextBox3.Text
LengthFilename = Strings.Len(Filename)
OutPacket(0) = Strings.Asc ("
OutPacket(1) = Strings.Asc("e") ' wissen
Counter = 2
Voor i = 1 To LengthFilename ' bestandsnaam afgeven
OutPacket(Counter) = Strings.Asc (Strings.Mid (Filename, i, 1))
Counter = Counter + 1
Volgende
OutPacket(Counter) = 0' lege tekenreeks te beëindigen
Teller += 1
SerialPort.Open() ' de seriële poort openen
SerialPort.Write (OutPacket, 0, counter) ' gegevens verzenden in matrix outpacket beginnen bij 0
Sleep(100) ' wacht op antwoord
SerialPort.Read (InPacket, 0, 1) ' erkennen
Als InPacket(0) = 6 Then
TextBox1.Text += "Erase succes" + vbCrLf ' succes
Anders
TextBox1.Text += "Erase mislukt" + vbCrLf ' mislukken
End If
SerialPort.Close()
End Sub

Private Sub Writefile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) verwerkt Writefile.Click
Dim Filestring As String ' handig om op te slaan als een tekenreeks voor het testen
Dim Filearray(1000) As Byte ' werken met arrays voor het bestand
Dim FileLength zo lang
Dim packetomvang As Integer
Dim i As Integer
Dim j As Integer
Dim bestandsnaam As String
Dim pakketten zo lang
Dim PacketRemainder As Integer
Dim FileCounter zo lang
FileCounter = 0
Filename = TextBox5.Text ' naam van het bestand op te slaan
Filestring TextBox4.Text = ' deze gegevens zou normaal komen van ergens anders
Packetomvang = 10
FileLength = Strings.Len(Filestring)
' de tekenreeks in de array te verplaatsen. (Deze string is gewoon een gemak voor het testen)
Voor i = 1 To FileLength
Filearray (i - 1) Strings.Asc (Strings.Mid (Filestring, i, 1)) = ' converteren naar ASCII-waarde
Volgende
' bestand is klaar voor de uitvoer van
OutPacket(0) = Strings.Asc ("' opdracht
OutPacket(1) = Strings.Asc("t") ' schrijven
OutPacket(2) = packetomvang ' omvang van de pakketten van 0-50, nieuw bestand (niet toevoegen binnen wijze)
SerialPort.Open() ' de seriële poort openen
SerialPort.Write (OutPacket, 0, 3) ' gegevens verzenden in matrix outpacket beginnen bij 0
Voor i = 1 To Strings.Len(Filename) ' afgeven van de bestandsnaam
OutPacket(0) = Strings.Asc (Strings.Mid (Filename, i, 1))
SerialPort.Write (OutPacket, 0, 1) ' Stuur dit byte-bereik
Volgende
OutPacket(0) = 0
SerialPort.Write (OutPacket, 0, 1) ' afgeven van een null-tekenreeks te beëindigen
' nu afgeven aan de 4 bytes voor de bestandslengte
OutPacket(0) = FileLength \ 16777216' integer divisie
SerialPort.Write (OutPacket, 0, 1)
OutPacket(0) = FileLength \ 65536' integer divisie
SerialPort.Write (OutPacket, 0, 1)
OutPacket(0) = FileLength \ 256' integer divisie
SerialPort.Write (OutPacket, 0, 1)
OutPacket(0) = FileLength Mod 256' rest
SerialPort.Write (OutPacket, 0, 1)
Sleep(100) ' wachten voor erkennen
SerialPort.Read (InPacket, 0, 1) ' 06 moet worden
Als InPacket(0) <> 6 dan
TextBox1.Text += "Fout met eerste lezen"
End If
' nu afgeven aan de gegevens in packetomvang groepen
Pakketten FileLength = \ packetomvang ' integer divisie
PacketRemainder = FileLength Mod packetomvang
Voor i = 1 To pakketten
For j = 1 To packetomvang
OutPacket(0) = Filearray(FileCounter)
SerialPort.Write (OutPacket, 0, 1)
FileCounter = FileCounter + 1
Volgende
Sleep(100)
SerialPort.Read (InPacket, 0, 1)
Als InPacket(0) <> 6 dan
TextBox1.Text += "Fout met packet"
End If
Volgende
' nu de rest afgeven indien aanwezig
Als PacketRemainder <> 0 dan
For j = 1 To PacketRemainder
OutPacket(0) = Filearray(FileCounter)
SerialPort.Write (OutPacket, 0, 1)
FileCounter = FileCounter + 1

Volgende
Sleep(100)
SerialPort.Read (InPacket, 0, 1)
Als InPacket(0) <> 6 dan
TextBox1.Text += "Write fail on last packet"
End If
End If
SerialPort.Close()
End Sub
Einde van de klasse

Gerelateerde Artikelen

Eenvoudige opslag voor een Semi-automatisch geweer

Eenvoudige opslag voor een Semi-automatisch geweer

lijkt de pinterest link werkt best de stappen bekijken en kunnen om de tekst te lezen.Probeer het hier.http://Simple opslag voor een Semi-automatisch geweerDe volgende pagina's zijn niet zo informatief.Stap 1: Eenvoudige opslag voor een Semi-automati
Haptische Feedback apparaat voor de slechtzienden [Project HALO]

Haptische Feedback apparaat voor de slechtzienden [Project HALO]

ik zag onlangs een aflevering van Stan Lee's supermensen die featured een blindman die een aantal klikken, als een vleermuis, gebruikt om echo zoek zijn omgeving. Ikkreeg te denken over andere blinden en hun vermogen om te navigeren in de vrij-zonder
Ontwikkel bord voor Attiny84 Microcontroller

Ontwikkel bord voor Attiny84 Microcontroller

Dit is een ontwikkeling-board voor Attiny84 microcontroller. Tha Attiny84 chip heeft 11 pinnen adresseerbare met de Arduino IDE, 8k flash geheugen voor programma opslag en 512 bytes RAM beschikbaar voor de stack en programma variabelen.Een kenmerk va
CoroPlast muur opslag voor gereedschappen en speelgoed

CoroPlast muur opslag voor gereedschappen en speelgoed

Ik ben altijd proberen om mijn winkel meer ordelijke dat dus vandaag maakte ik enkele cubbies opslag voor mijn elektrisch gereedschap. Ze zijn snel, gemakkelijk, goedkoop en sterk. Ik testte één uit en was in staat om op te hangen eraf, zoals te zien
Waar te koop onderdelen voor uw volgende Project

Waar te koop onderdelen voor uw volgende Project

U kunt een heleboel tijd en geld als je waar weet te zoeken naar specifieke delen. Voordat u de aankoop van onderdelen voor uw volgende project, rekening houden met de volgende (Bill Nye stem):Kopen in bulk als je kunt. Je kunt 50 lagers uit China go
Eenvoudig leuk ambachten voor kinderen: Diy papier krokodil Tutorial

Eenvoudig leuk ambachten voor kinderen: Diy papier krokodil Tutorial

Kinderen! Deze felle maar schattig Papier krokodil aan uw papieren dieren collectie toevoegen. Deze Easy Fun Craft for Kids is een verbazingwekkende DIY gemakkelijk ambachtelijke idee dat alle jonge geitjes houden van zou te maken. Deze fantastische
DIY spier Sensor / EMG Circuit voor een Microcontroller

DIY spier Sensor / EMG Circuit voor een Microcontroller

meten van spier activering via elektrische potentiaal, hierna aangeduid als elektromyografie (EMG) , heeft van oudsher gebruikt voor medisch onderzoek en diagnose van neuromusculaire aandoeningen. Echter met de komst van de krimpende ooit nog krachti
Rommel Cutter: Opslag voor Garage, winkel en schuur

Rommel Cutter: Opslag voor Garage, winkel en schuur

Deze rommel Cutter is een eenvoudige, leuke opslagoplossing voor binnenshuis of uit.Zo veel als ik hou van het werken op mijn tuin en landscapeI afkeer wroeten rond in een garage, schuur, shop, kelder of buiten opslaggebied ontwarren van de verschill
Hoe maak je een eenvoudige macht beheertoepassing voor desktop

Hoe maak je een eenvoudige macht beheertoepassing voor desktop

Hallo, ga vandaag ik je leren "Hoe maak je eigen power control app voor uw computer"Het hoofddoel van de Power Control app is, het zal u helpen om een onmiddellijke toegang tot uw werkelijke verborgen macht-besturingselementen die niet zijn vers
Eenvoudig papier ambachten voor meisjes: Hoe maak je een mooi papier Clutch tas

Eenvoudig papier ambachten voor meisjes: Hoe maak je een mooi papier Clutch tas

Dames! Het is tijd voor u om uw crafting caps op en check deze prachtige gemakkelijk papieren ambachtelijke voor meisjes. Pak sommige gekleurd papier en samen met mij in leren Hoe maak je vrij papier Clutch tas. Een eenvoudig papier ambachtelijke ide
Eenvoudige Kids Ladder voor Swing instellen, stapelbed, Etc.

Eenvoudige Kids Ladder voor Swing instellen, stapelbed, Etc.

een vriend van mij berichten me zeggen dat haar man een groot man, maar niet een erg handig persoon was. Dus ze besloten om te zien of als bereid zijn om een nieuwe ladder toevoegen aan haar kinderen buiten spelen set. Na het kijken van de speler die
Hoe maak je een eenvoudige katrol systeem voor kids

Hoe maak je een eenvoudige katrol systeem voor kids

Dit is een super eenvoudige katrol systeem voor kinderen.(Bekijk Video)U hoeft alleen drie karabijnhaken, sommige touw en een plek om te hangen van het systeem.De kinderen zullen graag zien hoeveel gewicht zij van de grond tillen kunnen.
OPSLAG voor handgereedschap

OPSLAG voor handgereedschap

Kasten voor de opslag van gereedschappen en benodigdheden is zeer kostbaar, tenzij u denkt buiten de doos en opnieuw doel andere dingen aan uw behoeften past. Ik heb geleefd op 15 hectare in centraal Oklahoma, Verenigde Staten voor meer dan 40 jaar.
EENVOUDIGE hoofdtelefoon opslag hacks

EENVOUDIGE hoofdtelefoon opslag hacks

u ooit hebt u een bos van draden / of hoofdtelefoon die u spullen in een lade en alleen hoeft niet een manier om hen te houden allen opgelost? Nou zijn hier een paar eenvoudige ideeën voor houden ze opgelost met alleen keuken of kantoor benodigdheden