Saya mengalami masalah dalam mengendalikan Floppy Disk Drive 3,5 "dengan Arduino Uno.
Saya memiliki floppy disk drive yang diaktifkan dengan catu daya komputer yang dihidupkan, dan Arduino ditenagai oleh USB komputer saya. Saya telah memotong pita konektor IDC 34-pin untuk dapat mengarahkan pin ke Arduino saya. Saya dapat menyalakan motor floppy disk dan memindahkan kepala baca / tulis bolak-balik, tetapi saya tidak pernah bisa membaca pulsa dari pin Track-0 atau Index.
Saya memiliki pin 7, 15, 17, 19, dan 25 dari floppy yang semuanya terhubung ke Arduino, dan saya memiliki pin 8, 16, 18, 20, dan 26 dari floppy yang terhubung ke arduino saya sebagai pin output sehingga saya dapat mengontrol drive.
Saya mengharapkan Indeks berdenyut saat motor disk melakukan rotasi, dan untuk Track 0 berubah ketika saya berada di luar disk, tetapi keduanya selalu RENDAH. Apakah saya melewatkan sesuatu?
Berikut adalah spesifikasi yang saya temukan untuk bagian belakang unit floppy disk
2 /REDWC Input Density Select
4 n/c N/A Reserved
6 n/c N/A Reserved
8 /INDEX Output Index
10 /MOTEA Input Motor Enable A
12 /DRVSB Input Drive Sel B
14 /DRVSA Input Drive Sel A
16 /MOTEB Input Motor Enable B
18 /DIR Input Direction
20 /STEP Input Step
22 /WDATE Input Write Data
24 /WGATE Input Floppy Write Enable
26 /TRK00 Output Track 0
28 /WPT Output Write Protect
30 /RDATA Output Read Data
32 /SIDE1 Input Head Select
34 /DSKCHG Output Disk Change/Ready
Berikut skema dari apa yang telah saya kaitkan (Papan tempat memotong roti di diagram sirkuit ini mewakili konektor IDC yang dicolokkan ke floppy drive 3,5 ".)
Ini adalah foto Connector IDC dan saya memberi label kabel mana yang terhubung ke Arduino.
Inilah kode yang saya jalankan.
//constants
static const int IN = LOW;
static const int OUT = HIGH;
static const int pulseDelayTime = 6;
//pins
int indexPin = 2; //8 on the drive INDEX
int track0Pin = 3; //26 on the drive. TRACK 0
int dirPin = 6; //18 on the drive. DIRECTION
int stepPin = 7; //20 on the drive. STEP
int motorEnableBPin = 9; //16 on the drive. MOTOR ENABLE B
unsigned long motorSpinTime = 1000UL; //in ms
void setup() {
//initial delay
delay(3000);
//setup serial monitor
Serial.begin(9600);
//setup pins.
pinMode(dirPin, OUTPUT);
pinMode(stepPin, OUTPUT);
pinMode(motorEnableBPin, OUTPUT);
pinMode(indexPin, INPUT);
pinMode(track0Pin, INPUT);
//turn the motor off initially
digitalWrite(motorEnableBPin, HIGH);
//print state here.
printState("Setup done.");
//spin the disk some.
printState("Begin to spin motor");
spinMotorForThisManyMs(motorSpinTime);
spinMotorForThisManyMs(motorSpinTime);
printState("Done spinning motor");
//step read/write head all the way in.
stepAllTheWayIn();
//spin the disk some more.
printState("Begin to spin motor");
spinMotorForThisManyMs(motorSpinTime);
spinMotorForThisManyMs(motorSpinTime);
printState("Done spinning motor");
//step read/write head all the way out.
stepAllTheWayOut();
//spin the disk even more.
printState("Begin to spin motor");
spinMotorForThisManyMs(motorSpinTime);
spinMotorForThisManyMs(motorSpinTime);
printState("Done spinning motor");
//never completes.
waitForIndex();
}
void loop() {
}
//spins the disk motor for a number of ms and prints the state
void spinMotorForThisManyMs(unsigned long msToSpin) {
//start spinning
digitalWrite(motorEnableBPin,LOW);
//delay.. keep printing the state
unsigned long maxTimeMs = millis() + msToSpin;
while(millis() < maxTimeMs ) {
printState("Spinning");
}
//stop spinning
digitalWrite(motorEnableBPin,HIGH);
}
//step the read/write head all the way to the center
void stepAllTheWayIn() {
for(int i=0;i<100;i++) {
printState("Stepping In");
stepInALittle();
}
}
//step the read/write head all the way to the outside
void stepAllTheWayOut() {
for(int i=0;i<100;i++) {
printState("Stepping Out");
stepOutALittle();
}
}
//print the state of the index and track
void printState(const char* charPrint) {
Serial.print(" Index:");
Serial.print(digitalRead(indexPin));
Serial.print(" Track:");
Serial.print(digitalRead(track0Pin));
Serial.print(" ");
Serial.println(charPrint);
}
//move the head towards the outside a little
void stepOutALittle() {
digitalWrite(dirPin,HIGH);
stepPulse();
}
//move the head towards the center a little
void stepInALittle() {
digitalWrite(dirPin,LOW);
stepPulse();
}
//pulse the step pin
void stepPulse() {
digitalWrite(stepPin,LOW);
delay(pulseDelayTime);
digitalWrite(stepPin,HIGH);
}
//waits for the index to trigger. this never gets completed.
void waitForIndex() {
printState("beginning to wait for index pin to pulse");
//start spinning
digitalWrite(motorEnableBPin,LOW);
//wait for pulse
while(digitalRead(indexPin));
//wait for end of pulse 0
while(!digitalRead(indexPin));
printState("end of waiting for index pin to pulse");
//stop spinning
digitalWrite(motorEnableBPin,HIGH);
}
Inilah output yang saya dapatkan.
Index:0 Track:0 Setup done.
Index:0 Track:0 Begin to spin motor
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Done spinning motor
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Begin to spin motor
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Done spinning motor
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Begin to spin motor
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Done spinning motor
Index:0 Track:0 beginning to wait for index pin to pulse
UPDATE: Saya sekarang menerima hasil yang saya harapkan karena jawaban geometrikal. Saat meneliti masalah ini, saya menemukan beberapa contoh kode Arduino ke Floppy Drive. Saya perhatikan bahwa mereka mengatur pin input mereka ke TINGGI, tetapi saya tidak pernah menyadari mengapa mereka melakukan ini. Setelah memperbaiki masalah saya, saya menemukan ini di beberapa dokumentasi Arduino (yang membuat saya menyadari contoh kode yang saya gunakan menggunakan versi yang lebih lama dari IDE Arduino):
"Sebelum Arduino 1.0.1, dimungkinkan untuk mengkonfigurasi pull-up internal dengan cara berikut:"
pinMode(pin, INPUT); // set pin to input
digitalWrite(pin, HIGH); // turn on pullup resistors`
Di Arduino 1.0.1+ Anda dapat melakukannya dengan cara ini.
pinMode(pin, INPUT_PULLUP);
sumber
Jawaban:
Menurut ini (tautan mati):
http://bitsavers.trailing-edge.com/pdf/nec/FD1035_Product_Description_Jul84.pdf
Keluarannya adalah kolektor terbuka, jadi diperlukan resistor pull-up. Sebagai gantinya, Anda dapat mengaktifkan pull-up internal Arduino pada pin tersebut
sumber
Anda harus mengganti
int
denganunsigned long
di semua lokasi di mana Anda berurusan dengan waktu dalam milidetik.Intinya adalah bahwa
millis()
mengembalikan sebuahunsigned long
, sehingga menggunakanint
untuk menyimpanmillis()
nilai, Anda memiliki kehilangan informasi karena pemeran otomatis dilakukan oleh kompiler.Perubahan yang harus Anda lakukan adalah:
dan:
Perhatikan bahwa saya juga telah melakukan beberapa optimasi dalam loop menunggu dengan menghitung waktu maksimum satu kali dan kemudian membandingkannya
millis()
langsung dengan nilai itu. Ini tidak wajib tetapi saya hanya merasa sedikit lebih bersih.sumber