Forum: Mikrocontroller und Digitale Elektronik Wie Parallelport anschliessen?


von Niki Hammler (Gast)


Angehängte Dateien:

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

von Niki Hammler (Gast)


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...

von Niki Hammler (Gast)


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

von Andreas (Gast)


Angehängte Dateien:

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

von Ingo B. (Gast)


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.

von Holger Buss (Gast)


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

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
Noch kein Account? Hier anmelden.