www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Drucker an AVR


Autor: Michael Kiausch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Markus Kaufmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Michael Kiausch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: DerInder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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=-

Autor: mikki merten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Michael Kiausch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael Kiausch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael Kiausch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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

Bewertung
0 lesenswert
nicht lesenswert
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.

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.