mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie Parallelport anschliessen?


Autor: Niki Hammler (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So, die Enttäuschung ist da. Endlich mühevollst alles fertig aufgebaut 
und es geht natürlich nicht. Der Drucker gibt keinen Mucks von sich.

Zum Austesten müsste es ja theoretisch reichen, wenn man alle 
Datenleitungen auf 5Volt legt, 10us wartet, STROBE von HIGH auf LOW 
wieder 10us wartet, STROBE wieder auf HIGH legt...Eigentlich ist es ja 
zum probieren für ein Zeichen egal ob ich ACK oder BUSY auswerte...oder?

Wenn ich durchmesse stimmt alles genau.
Wenn ich ein Zeichen "sende" ist das Bitmuster korrekt in den 
Datenleitungen (0xff, d.h. ich lege für den Versuch alle auf HIGH).
Und wenn ich zum Probieren die 10us auf 1 Sekunde raufsetze sehe ich 
auch wie STROBE von HIGH auf LOW geht und dann wieder umgekehrt.

Wie genau ist der Parallelport bei den timings? Meine Funktion rwait() 
sollte 10us brauchen, weiss aber nicht ob das wikrlich so ist.
Ich habe gelesen dass die Intervalle nur 0,5us min sein müssen, da war 
aber kein max.

Und der Kollege mit seinem 8031er wartet ganze 10us.


Den Parallelport habe ich ganze simpel OHNE Widerstände und sonst was 
angeschlossen.



Im Anhang habe ich zumindest das Source Listing zum Testen. Wenn über 
das UART irgendein Zeichen kommt, sollte der Drucker zumindest IRGENDWAS 
tun.



Kann es sein dass ich soch einen 7407 dazwischenschalten muss?


Zum testen verwende ich einen uralten Matrix Drucker der sicher 
kompatibel zu dem STANDARD Protokoll ist.



Also für mich gibt es zwei Möglichkeiten: Die Funktion rwait (@4Mhz) ist 
falsch getimt oder ich brauche den 7407.

Was haltet ihr für wahrscheinlicher? Oder nen anderen Vorschlag Idee? 
Kanns sein dass ich was vergessen habe?


Vielen Dank,

Niki

Autor: Niki Hammler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleiner Nachtrag: Hab ich es richtig verstanden dass 0,5us
asm volatile("nop" "\n\t" "nop");

bei 4Mhz sind?

...geht noch immer nicht...ich glaub es liegt nicht an den Zeiten...

Autor: Niki Hammler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1.) Wie schliesse ich jetzt den BUSY an? Da kommen ja Daten in den AVR 
rein.
Mit
cbi(DDRD, 2);
Habe ich den I/O Port als Eingang definiert und
while(bit_is_set(PORTD, 2));
ich warte bis der Drucker wieder bereit ist.
Ist damit jetzt ggf ein nötiger interner Pullup aktiviert?

2.) Das kommt mir alles komisch vor: Wenn ich die Leitung vom Drucker 
durchmesse (auch ohne anzustecken) dann ist fast alles auf HIGH, auch 
Daten und STROBE. Aber sollte ich die nicht HIGH schalten?
Und das bei 2 verschiedenen Druckern....

3.) Als ich beim 2. Drucker (HP Deskjet 500C) das eine Zeichen geschickt 
habe ist dort das LED "BUSY" angegangen.

4.) Kann es vielleicht sein dass es bei den Druckern auch noch ein 
Software Protokoll gibt ohne das die Drucker keinen Mucks machen? 
Beispielsweise dass es nicht reicht wenn ich ein einzelnes Zeichen 
schicke?

Ich versteh des einfach nicht..ich les mir die Parport Beschreibung 
jetzt noch ein 5. Mal durch....

Niki

Autor: Andreas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das Eingangsregister heißt PIND, nicht PORTD!

Hab mal ein Programm für 8051 aus dem 
"Mikrocontroller-Applikations-Kochbuch" angehängt, vielleicht hilft das 
weiter.

MfG
Andreas

Autor: Ingo B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

versuche man zum Abschluß einen Seitenvorschub zu senden. (FormFeed - 
ich glauche ASCII 12).

Der Drucker wartet nämlich, bis die Seite voll ist (oder ein manueller 
Vorschub kommt).

Bis dann,
Ingo.

Autor: Holger Buss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Niki!

Den Druckvorgang immer mit den Zeichen
27  (ESC)
64  (@)

einleiten und mit:

12 (Formfeed)
abschliessen.
Am besten testest Du das mit einem uralten Drucker (Nadeldrucker)
Die sind da nicht so zimperlich. Vielleicht kann Dein Drucher auch 
keinen ASCII drucken. Vielleicht will der immer einen komplizierten 
Treiber.

Gruss,
Holger

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.