hi, ich möchte gerne einen Drucker an einen avr anschliessen und dadrauf zunächst simple asciis ausgeben. das problem ist auch nicht das parallele protokoll, und auch nicht die pinnbelegung der parallelen schnittstelle sondern ehr die hardware spezifikationen, dazu habe ich noch nichts wirklich konkretes gefunden. zunächst einmal: kann ich die daten leitungen einfach an die avr portpins hängen, oder sollte man irgendwelche absicherungen dazwischen setzen? soweit ich weiss arbeitet aber beides mt ttl pegeln, von daher sollte es also gehen dann: wie werden busy und strobe angeklemmt? direkt, und mit oder ohne pullups? ich habe jetzt hier einfach alle leitungen direkt an die pins gehängt und komme nicht wirklich zu guten ergebnissen. ich habe mein programm jetzt zig mal durchgearbeitet und finde keinen möglichen fehler mehr, ich halte mich genau ans centronics protokoll, und bekomme trotzdem nur mist, daher die idee mit dem pullup für die strobe line wenn jemand eine idee oder ein par codeschnipsel hätte wär ich sehr dankbar mfg Michael
Was für einen Drucker hast Du eigentlich angeschlossen? Bist Du sicher daß er ASCII kann? Prinzipiell würde ich vorschlagen: Druck mal den Text vom PC aus und protokollier das mit dem AVR mit. Dann kannst Du ja sehen, was der PC anders macht und warum es da klappt.
der drucker ist ein epson nadeldrucker, und ich bin sicher dass er ascii kann, die ansteuerung, und die druckersteuerung sind mir auch klar, das einzige was mir unklar ist sind die elektronischen spezifikationen der parallelen schnittstelle trotzdem danke, mfg Michael
Hallo, die genauen Spezifikationen sind mir zwar auch nicht bekannt, aber bei meinem (Ur-)Alten NDR-Klein-Computer ist der Par-Port mit TTL Bausteinen (74LS244 und '374) aufgebaut und das Teil läuft immer noch ;) Gruß -=jens=-
Wenn die Leitungen nicht allzu lang sind kannst du den Drucker direkt an die AVR Ports hängen, dazu sind 10 i/o-Leitungen ausreichend D0-D7 Daten und Strobe zum Drucker und BUSY als Status vom Drucker. etwas kritisch ist die Generierung des Strobe Signal. Ursprünglich war es so, daß die Daten mit fallender Flanke H/L vom Drucker übernommen wurden. Je nach Firmwareversion reagieren einige Modelle auch erst auf die nachfolgen postive Flanke L/H. Daher ist sicherzustellen das die Daten min. 500 ns vor und nach dem Strobe-Impuls stabil anstehen. Der Strobeimpuls selbst sollte eine Breite von min. 1 µs aufweisen.
ahh... dann liegts wahrscheinlich am timing... der drucker druckt zwar, aber nicht das was ich ihm "füttere" stimmten immer ein oder zwei bits nicht. werd das wenn ich was zeit finde mal mit längerem timing austeste, vielen dank erstmal Gruß Michael
Ok, ich habs jetzt nochmal mit dem richtigen Timing versucht, aber immernoch keine Erfolgserlebnisse. Ich poste mal meinen Code, wäre nett wenn vielleicht mal einer drüberschauen könnte, ich kann nämlich beim besten willen keinen Fehler finden. Dazu ist noch folgendes zu sagen: da ich keinen 8 bit Datenbus mehr frei habe habe ich das Byte auf zwei 6 bit i/o's aufgeteilt, was meiner Logik nach nichts ausmachen sollte da der Drucker ja erst beim Strobe liest. Also: portb0-4=druckerdaten0-3, portc0-3=druckerdaten4-7, portc4=busy, portc5=strobe print_send: push temp ; temp sichern andi temp, 0b00001111 ; unteres nibble isolieren (druckerdaten auf 2 ports verteilt) out portb, temp ; unteres nibble abschicken pop temp ; gesichertes temp zurueckholen swap temp ; oberes nibble nach unten bringen andi temp, 0b00001111 ; und oberes entfernen sbr temp, 0b00100000 ; strobe auf 1 lassen out portc, temp ; temp senden nop ; > 1 usec warten nop nop print_busy: sbis pinc, 4 ; warten, wenn drucker busy rjmp print_busy cbi portc, 5 ; strobe senden (strobe ist inverted!) nop ; > 0,5 usec warten nop sbi portc, 5 ; strobe fertig nop ; > 1 usec warten nop nop ret Vielen Dank im Voraus, Gruß Michael
Nachtrag: der Code war in Ordnung, der Fehler lag an der angelöteten Sub-d Buchse, bei der ein Anschlusspin keinen Kontakt bekam, deshalb kam als Ergebnis nur Müll. trotzdem danke an alle gruß Michael
Ich hatte mal einen Adapter seriell -> parallel Drucker gemacht. Die Schaltung paßt in ein Steckergehäuse 9-pol. -> 25-pol. und wird vom Drucker versorgt. /Reset muß an VCC gelegt werden, wenn das Programm nicht mehr verändert wird. Der Quarz ist unkritisch - wie auch alles andere; ich hatte Restbestände 3,58MHz (o.ä.)verbaut.
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.