Arduino: ColecoVision patron läsare (8 / 13 steg)

Steg 8: Arduino skiss fil

Den följande Arduino skiss filen orsakar Arduino att vänta på en linje från värddatorn. Om raden läser i "Läsa alla", kommer att Arduino göra följande:

  • Skicka en "START:" linje till värddatorn.
  • Läsa alla data från patronen och skicka den till värddatorn i HEX, en byte per rad.
  • Skicka en ": slutet" linje till värddatorn.

När patronen data har skickats till värddatorn, är Arduino redo för sin nästa kommando från värddatorn.

ColecoVision / ADAM Cartridge läsare
för Arduino UNO
2014-11-25
//----------------------------------------------------------------------------------

Arduino Pins
CONST int gcChipSelectLine [4] = {A0, A1, A2, A3};
CONST int gcShiftRegisterClock = 11;
CONST int gcStorageRegisterClock = 12;
CONST int gcSerialAddress = 10;
CONST int gcDataBit [8] = {2, 3, 4, 5, 6, 7, 8, 9};

Skiftar ett 16-bitarsvärde ut till ett skiftregister.
Parametrar:
dataPin - Arduino Pin ansluten till skiftregister data stift.
clockPin - Arduino Pin ansluten till data klocka stift skiftregister.
//----------------------------------------------------------------------------------
void shiftOut16 (int dataPin, int clockPin, int bitOrder, int värde)
{
Flytta ut highbyte för MSBFIRST
shiftOut (dataPin, clockPin, bitOrder, (bitOrder == MSBFIRST? (värde >> 8): värde));
flytta ut lowbyte för MSBFIRST
shiftOut (dataPin, clockPin, bitOrder, (bitOrder == MSBFIRST? värde: (värde >> 8)));
}

Välj vilka chipet på patronen att läsa (låg = aktiv).
Använd -1 för att ange alla chip Välj rader hög.
//----------------------------------------------------------------------------------
void SelectChip(byte chipToSelect)
{
för (int currentChipLine = 0; currentChipLine < 4; currentChipLine ++)
{
digitalWrite (gcChipSelectLine [currentChipLine], (chipToSelect! = currentChipLine));
}
}

Ange adress linjer
//----------------------------------------------------------------------------------
void SetAddress (unsigned int adress)
{
SelectChip(-1);

Avaktivera SKIFT register utgång fördriva tiden lastande adress
digitalWrite (gcStorageRegisterClock, låg);

Skriva ut adressen
shiftOut16 (gcSerialAddress, gcShiftRegisterClock, MSBFIRST, adress);

Aktivera SKIFT register utgång
digitalWrite (gcStorageRegisterClock, hög);

int chipToSelect;

om (adress < 0xA000) {
chipToSelect = 0;
} else om (adress < 0xC000) {
chipToSelect = 1;
} else om (adress < 0xE000) {
chipToSelect = 2;
} annat {
chipToSelect = 3;
}
SelectChip(chipToSelect);
}

Läsa data linjer
//----------------------------------------------------------------------------------
void ReadDataLines()
{
CONST char cHexLookup [16] = {
'0', '1', '2', '3', '4', '5', ' 6', ' 7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

int highNibble = 0;
int lowNibble = 0;
booleska dataBits [8].
char byteReadHex [4].

för (int currentBit = 0; currentBit < 8; currentBit ++)
{
dataBits [currentBit] = digitalRead(gcDataBit[currentBit]);
}

highNibble = (dataBits [7] << 3) + (dataBits [6] << 2) + (dataBits [5] << 1) + dataBits [4].
lowNibble = (dataBits [3] << 3) + (dataBits [2] << 2) + (dataBits [1] << 1) + dataBits [0];

Serial.write(cHexLookup[highNibble]);
Serial.write(cHexLookup[lowNibble]);
Serial.println();
}

Läsa alla data från kassetten.
//----------------------------------------------------------------------------------
void ReadCartridge()
{
unsigned int baseAddress = 0x8000;

Serial.println("start:");

Läs aktuella Chip (patronen är 32K, varje chip är 8k)
för (unsigned int currentAddress = 0; currentAddress < 0x8000; currentAddress ++)
{
SetAddress (baseAddress + currentAddress);
ReadDataLines();
}

Serial.println(":end");
}

Returnerar nästa rad från den seriella porten som en sträng.
//----------------------------------------------------------------------------------
Sträng SerialReadLine()
{
CONST int BUFFER_SIZE = 81.
char lineBuffer [BUFFER_SIZE];
int aktuellaposition = 0;
int currentValue;

göra
{
Läs tills vi får nästa tecken
göra
{
currentValue = Serial.read();
} medan (currentValue == -1);

Ignorera '\r' tecken
om (currentValue! = '\r')
{
lineBuffer [aktuellaposition] = currentValue;
aktuellaposition ++;
}

} medan ((currentValue! = "\n") & & (aktuellaposition < BUFFER_SIZE));
lineBuffer [aktuellaposition-1] = 0;

återvända String(lineBuffer);
}

Tyder på fjärrdatorn Arduino är redo för nästa kommando.
//----------------------------------------------------------------------------------
void ReadyForCommand()
{
Serial.println("Ready:");
}

void setup()
{
Setup Serial Monitor
Serial.BEGIN(57600);

Setup Chip Välj stift
för (int chipLine = 0; chipLine < 4; chipLine ++)
{
pinMode (gcChipSelectLine [chipLine], produktionen);
}

Setup seriell adress Pins
pinMode (gcShiftRegisterClock, produktionen);
pinMode (gcStorageRegisterClock, produktionen);
pinMode (gcSerialAddress, produktionen);

Setup Data stift
för (int currentBit = 0; currentBit < 8; currentBit ++)
{
pinMode (gcDataBit [currentBit], INPUT_PULLUP);
}

tag (!. Serial) {
; vänta för seriell port att ansluta. Behövs för Leonardo endast.
}

Återställ utdatarader
SetAddress(0);

ReadyForCommand();
}

void loop()
{
om (Serial.available() > 0)
{
String lineRead = SerialReadLine();
lineRead.toUpperCase();

om (lineRead == "Läsa alla")
{
ReadCartridge();
} / / lineRead = "Läs alla"

ReadyForCommand();

} / / Serial.available
}

Om du har tur nog att använda en Arduino ombord med 29 eller mer digitala I/O stift (t.ex. den Arduino Due, Arduino MEGA ADK, Arduino Mega 2560, etc.) och du inte använder SKIFT register krets, funktionen SetAddress i filen skiss ovan kommer att behöva skrivas igen.

Se Steg
Relaterade Ämnen

Arduino brain wave läsare

denna tutorial ska show dig hur till lätt hacka spelet leksak till en USB-brain wave läsare.Ett exempel på slutresultatet kunde vända på en LED samtidigt koncentrera sig och stänga av medan du kopplar av.Låt oss börja.Steg 1: delar Maskinvara:-USB-ka...

Arduino kod & eeprom läsare

Arduino programvara tillåter för att programmera din arduino ombord lätt.Med den här guiden kommer du nu läser och skriver alla arduino minnen.Steg 1: Hämta MCU-programmerareMCU-programmerare är en öppen källa redskapen att läsa och skriva mikro-kont...

Tankeläsare med Arduino

Hej alla!Detta är min tankeläsare för Arduino.Tankeläsare kan berätta vilken bokstav i alfabetet (ABC) eller som spelar kort du har föreställt med bara några frågor.Det är ett mycket enkelt projekt för församlingen och med några tråd anslutningar men...

RFIDuino - med en Arduino & RFID-läsare för att göra ett pussel GeoCache

jag njuta av både Geocaching och elektronik och har gjort ett par elektroniska pussel cachar med en Arduino.Min senaste skapelse (med hjälp av en kollega cacher för koden) är att använda en Arduino och RFID-läsare för att göra ett pussel geocache vi...

Arduinolyzer.js: Förvandla din Arduino till en logik Analyzer

När jag jobbade på Intel som hårdvara designer, använde jag en logik analyzer för felsökning mikroprocessorer och chipsets. En logik analyzer är en maskin som ansluter till din krets och omvandlar det som händer i kretsen i en vågform på en skärm. De...

Inomhus träning stepper med Raspberry Pi & Arduino Iot

Hej alla.Syftet med detta projekt är att använda en inomhus träning stepper med Raspbery Pi och Arduino. Denna typ av stepper har oftast liten display och du måste titta ner under träningen att se dina steg. I denna tutorial använder vi Raspberry Pi...

RFID-dörrlås med Arduino

I grund och botten handlar detta projekt om hur man gör ditt hus, office plats och även din personliga skåp. Detta projekt gör du förstå arduino med RFID och hur är den anslutna tillsammans.Så låt oss komma igångSteg 1: Saker krävs Arduino uno R3RFID...

Arduino Tutorials (del 3-17 Tutorial Pack)

Detta är Arduino Tutorial Pack Del3.Den 1: a delen finns här:Del 2 här:Till skillnad från andra tutorials här brukar jag ge någon bakgrund i teorin hur det fungerar. Den är inriktad på resultatet hur uppnå det - att göra mätningar från massor av sens...

Online grafer med ingenting men en Arduino, Ethernet Shield och Sensor

Slutligen har jag beslutat att lägga några av mina befintliga projekt på instructables. Här är anpassade från mitt Super Graphing Data Logger projekt.Vad är Super Graphing Data Logger (SGDL)? Det är en Arduino projekt som integrerar dataloggning och...

Kapacitiv Sensor för flytande

För nästa våren planerar jag att göra en helautomatisk hydroponiska installationsprogrammet. Medan våren är över 6 månader kvar nu (det är ganska mycket höst just nu), det finns fortfarande mycket att göra. En av de saker jag behöver för automation ä...

Komma igång med RFID

Har du någonsin undrat hur ditt ID tag fungerar?I denna handledning kommer vi att kunna visa dig hur man läsa en RFID -knappen, eller tag, om det hålls upp mot ID-12 RFID-läsare eller någon 125 KHz modul. Även är detta projekt ett enkelt och roligt s...

Adventure Time's BMO: GBC Mod replika

"It's Adventure Time,Kom igen, ta dina vännerVi ska gå till mycket fjärran länderMed Jake hunden och Finn mänskligaRoligt tar slut aldrig är det äventyr tid!"Hej Instructabrarians, vad är klockan?... Äventyr tid!Gott folk, jag frickin' älskar de...

Finger powered skivspelare

Jag fick titeln för detta instructable från ett ljud prov används i utmärkt "Nufonia måste Fall" Album av Kid Koala.Skivspelaren gjordes för min son (5 år) som blev helt förvånad när han såg en skivspelare för första gången. Ända sedan han ville...

Interaktiva virtuella spel för barnens födelsedagskalas

någonsin tittat på en Wii eller Xbox spel och tänkte "Jag önskar jag kunde göra ett spel som mina barn skulle vilja spela". Tja, detta instructable visar dig hur. Vi börjar med begreppet spelet innan spel design, maskinvara och inbyggd programva...

Med hjälp av Pololu 5V Boost Regulator

driva din Arduino projekt med 2 "AA" batterier.Nyligen arbetade jag på ett projekt som krävs en Arduino att drivas av 2 AA-batterier.En annan twist var vi förväntade användaren tillhandahåller och installerar batterierna i en 2 "AA" ba...

RFID kontrollerade dörren

Detta instructable skapades enlighet projektet kravet på Makecourse vid University of South Florida (www.makecourse.com)Fumla för att nå för dig nycklar och då med att hitta rätta för motsvarande dörren är oftast den första eller sista huvudvärken un...

RFI-DJ: MP3 spelar RFID sak

The RFI-DJ är en USB-enhet för att spela MP3-filer från din dator. Du har en uppsättning av RFID-kort, var och en med en låtnamn skrivet på den. Du väljer ett kort och placera den på den RFI-DJ, och datorn kommer att spela den låten. Sin magi!Egentli...

Magiska musik tabell nr menyer, inga knappar

Obs:Detta instructable är nu något gammalt och en bättre maskin har gjorts med lägre kostnad delar och mycket bättre programvara som automatiskt gör att du kan "par" nya kort med nya låtar som de läggs till iPod spellista.iPod-uppspelning Spåra...

Tweeting katt dörr

Obs: för att se allt på en sida, vänligen gå till: www.tweetingcatdoor.com Efter att ha fått många mail begära instruktioner och kit för att bygga "Tweeting katt dörr ", jag bestämde mig att göra en version som är fristående och inte behöver en...