Hi, ich würde gerne mit meinem ATMega "IDE" "sprechen". Ich habe aber aktuell nur noch zwei 8-Bit Ports und ein paar einzelne Pins auf einem 3. Port frei. Wie bekomme ich also die 24 Signalleitungen angeschlossen? Ich hatte folgende Idee: Auf einen Port (nennen wir ihn Port-A) schalte ich alle 8 benötigten Steuersignale der PATA-Schnittstelle. An den zweiten Port (nennen wir ihn Port-B) schließe ich 2 Bus-Transiever (z.B. 74245) an. An meine übrigen 3 Pins des dritten Port schließe ich einen Adreßdekoder an (74138 oder irgend sowas). Der Adressdecoder wird wie folgt verbunden: 0x01: /CS des Busstreiber "1" auf Low + Direction auf "Input" 0x02: /CS des Busstreiber "1" auf Low + Direction auf "Output" 0x03: /CS des Busstreiber "2" auf Low + Direction auf "Input" 0x04: /CS des Busstreiber "2" auf Low + Direction auf "Output" Wenn ich nun Daten schreiben will, schiebe ich auf den Adressdecoder 0x02, schiebe auf Port-B meine 16-Low Bits. Dann schiebe ich auf den Adressdecoder 0x04, und dann schiebe ich auf meinen Port-B meine 16-High Bits. Dann sage ich über Port-A der Festplatte "Daten abholen". Nun habe ich ein Problem - ich bräuchte Busstreiber welche die Daten puffern! Weil - wenn ich meinen 2. Bustreiber aktiv schalte um die 16-High Daten drauf zu parken, geht ja mein 1. Bustreiber wieder in den Schlummermodus - die Festplatte wird die 16Bit Daten aber "an einem Stück" brauchen, oder? Wie macht man das? I2C-Portexpander hatte ich auch schon überlegt - kam mir aber von den Datenblättern recht lahm vor.
Ich würde eher ein Schieberegister mit parallel I/O wie 74LS194 (das ist aber nur für 4 bit, vlt. gibt's da auch 8 oder 16 Bit pendants?) einsetzen, dafür benötigst du 4 Leitungen. Vielleicht bleiben damit genügend weitere Pins frei und du kannst dir den Adressdecoder usw. sparen. Klar ist das punkto Geschwindigkeit nicht berauschend, aber Geschwindigkeitsrekorde wirste mit dem AVR ohnehin nicht brechen. :)
Hi Oliver, hätte auf 74HCT573 oder 74HCT574 getippt, wenn sie nicht leistungsfähig genug sind, kann man ja noch ein HCT245 oder HCT645 nachschalten. Hast Du Dir mal den IDE-MP3-Player zu der Procyon-AVRlib mal angeschaut? http://www.procyonengineering.com/embedded/avr/avrlib/docs/html/index.html und hier findet man das Schaltbild http://www.procyonengineering.com/embedded/procyonmp3/index.html Viel Erfolg Hermann-Josef
74hc573 wären auch meine wahl, mehrere parallel, dann gibts du legst du deine 8 bits auf den Bus und ein kurzer Impuls an das entsprechende Latch welches die Daten übernimmt , danach die nächsten 8 Bits zum übernehmen gibts die nächsten 8 bits und ein anderes Latch antipsten. Wenn du alle 4 durch hast, ein gemeinsames Signal an alle Latches das sie ihre gespeicherten Daten ausgeben oder direkt so beschalten das Sie es gleich tun bei der Datenübernahme tun.
Jo die Schaltung dieses MP3 Players sieht ganz gut aus - für einmal 8 Bit die Latches könnte in der Tat reichen. Aber das muss ich mir noch überlegen weil.... öh - ich hab da noch einmal 8-Bit Eingangs und Ausgangsdaten die auch noch mit auf den Port müssen. Ich mache mir mal Gedanken.
Einfach einen größeren Controller nehmen? Wenn Du einen AVR mit externem Memory-Interface nimmst (z.B. einen Mega1281), kannst Du IDE sehr viel performanter implementieren. Dann ist das ganze Faktor 5 oder 10 oder so schneller. fchk
Mag sein, aber das System ist auf die Sende und Empfangsgeschwindigkeit einer Z80-PIO die an nem Z8001 hängt angewiesen. Die Schnittstelle bremst das ganze so sehr aus, das Geschwindigkeit.... nunja - 500KB/Sec reichen mir - dann bin ich so schnell wie mit der SD-Card heute ;) So sieht meine aktuelle Lösung aus... mal sehn ob ich noch Fehler finde ;) http://pofo.de/tmp/P8000_WDC_Emulator.pdf So sah der Spaß vorher aus http://pofo.de/tmp/P8000_WDC_SDCard.pdf Müßte dann so funktionieren: Schreibe Daten ATA (Latch=2D4) Setze ADDR0 auf Low, ADDR1 auf Low -> alles deaktiv Setze /ATA RD auf High Setze /ATA WR auf Low Setze ADDR0 auf High, ADDR1 auf High -> Nun werdent Daten in Den Address-Latch geschrieben Schreibe 16H Daten auf D0-7 Setze ADDR0 auf Low, ADDR1 auf Low -> Latch-Enable auf Low, Output Enable auf High (Latch komplett deaktiv) Schreibe 16L Daten auf D0-7 -> Daten direkt an den ATA-Port legen Setze ADDR0 auf Low, ADDR1 auf High -> Output-Enable des Latch setzen, und /WR Kommando an Festplatte senden Setze ADDR0 auf Low, ADDR1 auf Low -> alles deaktiv Lese Daten ATA (Latch=1D4) Setze ADDR0 auf Low, ADDR1 auf Low -> alles deaktiv Setze /ATA RD auf Low Setze /ATA WR auf High Setze ADDR0 auf Low, ADDR1 auf High -> Latch-Enable auf High, senden /RD Kommando an Festplatte. Lese 16L Daten auf D0-7 Setze ADDR0 auf High, ADDR1 auf High -> Latch-Enable auf Low, /RD liegt nicht mehr an Festplatte an, Output-Enable am Latch Lese 16H Daten auf D0-7 Setze ADDR0 auf Low, ADDR1 auf Low -> alles deaktiv
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.