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