www.mikrocontroller.net

Forum: PC-Programmierung 8255 über Druckerport programmieren


Autor: Christoph Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe folgendes Problem :
Ich versuche über den Druckerport (Major 99/ Linux)
einen 8255 zu beschreiben und zu lesen.
Schreiben geht, aber beim Lesen bekomme ich immer, was ich zuletzt auf
B geschrieben habe -  nicht, was z.B. auf Port C anliegt.

Woran kann das liegen ?

cs

Autor: Feadi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schaltest Du denn den Druckerport in den tristate Modus?

Feadi

Autor: Christoph Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
danke erstmal für den Tip.

Ich Nutze ( zwischenzeitlich ) ioctl mit
1. PPDATADIR (input = 1) und ioctl(fd,PPRDATA &x)
um die Daten in x einzulesen.
entsprechend
PPDATADIR (output=0) und PPWDATA, &x
zum schreiben.

Das Problem mit dem Wiedereinlesen scheint damit teilweise gelöst.

Jetzt kann ich zwar lesen, aber noch nicht das, was ich erwarte.
Es sind halb-reproduzierbare "Hausnummern" die aber mit dem
geschriebenen nichts zu tun haben.

(Erklärung :
Ich will mit dem 8255 einen 6264 oder später einen 28C64(EEPROM)
Speicherbaustein beschreiben.
Adressieren klappt (messbar). Beim Beschreiben bin ich mir noch nicht
sicher, da die gelesenen Ergebnisse nicht schlüssig sind.)

Den 8255 muß ich zwischendurch auf Port C von Ausgabe auf Eingabe
umschalten. Das Ganze geschieht über die Steuerleitungen
(Strobe, INIT, Autofeed und Select) Zwie Leitungen steuern, welche
Register, die anderen beiden sind für Schreiben oder Lesen.
Die WE, CS ect. Leitungen werden durch die für die Adressierung des
Speichers nicht benötigten Bits geschaltet.

Der Reiz der Schaltung liegt in dem Minimalistischen Aufwand der
Bauteile. Die Idee stammt von folgender Internetseite :
http://users.swing.be/gonzague.colpaert/prog.html
Allerdings ist in seinem Schaltungsentwurf ein kleiner Fehler.
Die Reset Schaltung ist so immer gesetzt ! Dann läuft gar nichts.

Ich habe das ganze sehr ähnlich - leicht veränderte Leitungsführung und
damit eine veränderte Adressierung - nachgebaut (Lochraster)
und möchte aber unter Linux entwickeln.


Gruß
cs

Autor: Christoph Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur um sicher zu gehen,
was heist "schaltest Du den Druckerport in den TriState Modus" ?
Wie schaltet man ihn denn dahin bzw. wie holt man ihn da heraus ?

cs

Autor: Feadi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du das hier schon gelesen?
http://www.mikrocontroller.net/articles/Ports_benu...

Wie hast Du den Druckerport mit dem 8255 verbunden?

Gruß, Feadi

Autor: Feadi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da fällt mir gerade noch ein: Pin 16 ist "andersrum" ;)
Der Pin hat 0 Volt wenn man in das Register eine 1 schreibt, und 5 Volt
bei einer 0.

Feadi

Autor: Christoph Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt, die INIT Leitung ist ander herum, als beschrieben.
Das hatte ich Gott sei Dank schon bald bemerkt.

Ich glaube aber daß ich das Problem gefunden habe.

Der 8255 "latched" A, B und C, aber C nur bei der Ausgabe, nicht bei
der Eingabe.
Wenn ich dann zur Datenübernahme ( -RD wieder auf High) Port B
benutze,
dann gehen die gelesenen Daten genau in diesem Moment auf C verloren.

Folglich geht die Schaltung (so wie sie ist) nur zum Programmieren des
Speichers,
nicht aber zum Verifizieren!

Man könnte allerdings die OE - Leitung fest auf Low legen, und den Pin
für einen zusätzlichen Latch Baustein verwenden. Mit dem
Minimalistischen Aufbau ist es dann allerdings nicht mehr ganz so
toll.

cs

Autor: Christoph Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, erst wenn man sich intensiv
damit beschäftigt hat, dann sieht man
wo der  Fehler liegt.

Der ganze Entwurf (http://users.swing.be/gonzague.colpaert/prog.html
) hat meiner Ansicht nach seinen Fehler darin, das
man PORT C für den Datentransfer nimmt.

Wenn ich richtig liege, wäre man mit PORT A besser beraten.
Dieser ist nämlich in beide Richtungen "gelatched",
vergisst also nicht, was man geschrieben hat.
Das ist nötig, denn wenn -OE wieder auf high gehen soll braucht man
einen der anderen PORTs (Adresse bleibt gleich, aber Steuerleitungen
sind ja Teil der zusammengesetzten Adresse (5 Bit Aresse im Highbyte
+ 3 Bit Steuerletungen)

Beim nächsten Entwurf werde ich wohl umbauen auf Port A,
aber für's Erste reicht wohl auch nur Schreiben und mit
Prüfsumme testen, ob Ok

cs

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.