www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LPT Acknowledge Pulslänge


Autor: Ja mann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich schreibe mir gerade einen "Druckersimulator" auf einem AVR Mega16, 
der dazu dient Daten von einem Messgerät, welches seine Daten über eine 
LPT Schnittstelle drucken kann, mitzuloggen. Der Ablauf findet nach ganz 
normaler "SPP Manier" statt; also auf STROBE warten, BUSY setzen, 
Datenleitungen lesen, BUSY löschen und auf ACK einen Impuls ausgeben. 
Die Frage ist nun: Wie lange muss der ACK Impulse sein ? Sendet der Host 
erst wieder nachdem ACK gelöscht wurde ?

Gruß
Ja mann

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Laut IEEE 1284 500 ns bis 10 µs.

http://de.wikipedia.org/wiki/Centronics-Schnittste...

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das kann auch stark von der Laune des Programmierers abhängen.
Da es vom Timing bei Ack und Busy ohnehin mindestens 2 Varianten gab 
(Epson und der Rest der Welt), wurde z.B. bei C64-Userport-Druckroutinen 
meist nur auf das Ende von Busy gewartet und dann das nächste Byte zum 
Drucker geschickt.
Kann durchaus sein, daß das Messgerät es auch so hält, da hilft dann nur 
probieren...
Die Längen sind relativ unkritisch, das geht für heutige Verhältnisse 
alles recht geruhsam ab.

Gruß aus Berlin
Michael

Autor: Skua C:\> (skua)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ack wird normalerweise nicht beachtet bzw. nur im interrupt Betrieb 
genutzt.

Einfach testen.

Autor: Ja mann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>bei C64-Userport-Druckroutinen
>meist nur auf das Ende von Busy gewartet und dann das nächste Byte zum
>Drucker geschickt.

>Ack wird normalerweise nicht beachtet bzw. nur im interrupt Betrieb
>genutzt.

Danke, das war's; ich hatte durch das Erzeugen des Ack-Impulses Zeichen 
verloren, nachdem ich das entfernt hatte ging es ohne Probleme!

Für alle die das gleiche Problem haben und diesen Beitrag mit der Suche 
finden:
  BUSYOFF;
  ERROFF;
  SELON; //Printer online
  while (1)
  {
    loop_until_bit_is_clear(PINC, PC5); //Wait for STROBE
    BUSYON;
    loop_until_bit_is_set(UCSRA, UDRE);
    UDR = PINA;
    BUSYOFF;
  }


Vielen Dank,
Ja mann

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.