www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Drucker am AVR anschlissen


Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte einen Centronix-Drucker an einen AVR hängen.
Dazu habe ich auch schon viele Seiten gefunden, auch einmal mit Code. Da 
ich nicht so viel vom Programmieren verstehe, hoffe ich hier auf Hilfe.
Mein Problem: Wie muss ich den Code abändern, dass ein String gedruckt 
wird? (ohne die ganzen LEDs und Taster, nur mit GOTO)



Der Code:
$regfile = "m8def.dat"
$crystal = 1000000

Ddrb = &B00000000                                           'Port B komplett als Eingang
Ddrc = &B00001111                                           'Am Port C PC0 bis PC3 Ausgang, Rest Eingang
Ddrd = &B11111111                                           'Port D komplett als Ausgang

Portb = &B00011110                                          'Pullup für PB1 bis PB4 aktivieren (Taster)
Portc = &B00001111                                          'Beim starten auf 0 setzen
Portd = &B00000000                                          'Beim starten auf 0 setzen

Dim Nutzdaten As String * 30
Dim Textstring As String * 30
Dim Bytewerte(30) As Byte At Textstring Overlay
Dim X As Byte
Dim Y As Byte

Led_gruen Alias Portc.0
Led_rot Alias Portc.1
Taster1 Alias Pinb.1
Taster2 Alias Pinb.2
Taster3 Alias Pinb.3
Taster4 Alias Pinb.4

Strobe Alias Portc.3
Init_signal Alias Portc.2
Busy Alias Pinb.5
Ack_signal Alias Pinb.6

'Portd ist DATA0 - DATA7 der Centronics Schnittstelle

Led_gruen = 0                                               'LED Grün an
Led_rot = 0                                                 'LED Rot an

Wait 1                                                      'Test, ob beide LEDs funktionieren

Led_rot = 1                                                 'LED Rot aus


Do
If Taster1 = 0 Then                                         'Taster 1 gedrückt
    Textstring = "!R! STAT1; EXIT; {012}"
    Gosub Senddata                                          'Rote LED aus
    Waitms 50                                               ' wegen dem Tastenprellen
End If
If Taster2 = 0 Then                                         'Taster 2 gedrückt
    Textstring = "!R! FRPO I1, 1; EXIT;"
    Gosub Senddata
    Waitms 50                                               ' wegen dem Tastenprellen
End If
If Taster3 = 0 Then                                         'Taster 3 gedrückt
    Textstring = "!R! ELOG; EXIT;"
    Gosub Senddata
    Waitms 50                                               ' wegen dem Tastenprellen
End If
If Taster4 = 0 Then                                         'Taster 4 gedrückt
    Waitms 50                                               ' wegen dem Tastenprellen
End If
Loop


Senddata:
    Led_gruen = 1                                           'Grüne LED aus

    Do
    Loop Until Busy = 1

    Led_rot = 0
    Init_signal = 0                                         'Init-Signal auf Low zum initialisieren
    Waitms 50                                               '50 millisekunden warten
    Init_signal = 1
    Waitms 50

    Y = Len(textstring)
    For X = 1 To Y Step 1
        Portd = Bytewerte(x)
        Waitms 10
        Strobe = 1
        Waitms 10
        Strobe = 0

        Do
        'Wartet, bis der Drucker ein ACK gesendet hat, um sicher zu gehen, dass kein Zeichen verloren geht
        Loop Until Ack_signal = 1

    Next X

    Led_gruen = 0                                           'Grüne LED an
    Led_rot = 1
Return

End


PS: Ich möchte nur Text drucken. Ohne Angaben zur Grösse und Schriftart.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Holger wrote:

> ich nicht so viel vom Programmieren verstehe, hoffe ich hier auf Hilfe.
> Mein Problem: Wie muss ich den Code abändern, dass ein String gedruckt
> wird? (ohne die ganzen LEDs und Taster, nur mit GOTO)

Die zentrale Ausgabefunktion ist bei Senddata.
Nimm dir dort den Abschnitt bis zum Return und schmiss alles raus was 
mit LED und Tastern zu tun hat.

Autor: Klaus2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Y = Len(textstring)
    For X = 1 To Y Step 1
        Portd = Bytewerte(x)
        Waitms 10
        Strobe = 1
        Waitms 10
        Strobe = 0

        Do
        'Wartet, bis der Drucker ein ACK gesendet hat, um sicher zu 
gehen, dass kein Zeichen verloren geht
        Loop Until Ack_signal = 1

    Next X


Da steckt alles drin!

Klaus.

Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ist "Textstring" der String der den zu druckenden Text enthält?
Wofür ist X und Y?

Autor: Klaus2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1) ja

2) x: zählvariable für auszugebne zeichen des strings

3) y: anzahl zeichen des strings

4) du hast zu wenig ahnung für sowas

Klaus.

Autor: Klaus2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
korrigiere:

1) nein, textstring ist eine VAR mit inhalt -> Textstring = "!R! STAT1; 
EXIT; {012}"

4) dabei bleibe ich aber :)

Was hast du denn vor???

Klaus.

Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
4) Kann sein, aber erkläre mal, villeicht verstehe ich es ja doch.

Kann man dieses !R! STAT1; EXIT setzen?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Holger wrote:
> 4) Kann sein, aber erkläre mal, villeicht verstehe ich es ja doch.

Ganz ehrlich.

Centronics ist so simpel anzusteuern, wenn du das in dem Quelltext nicht 
geschnallt hast, was da abgeht, dann hast du wirklich zuwenig Ahnung.

In der Schleife wird Zeichen für Zeichen an den Ausgabeport gelegt und 
nachdem das Zeichen am Port anliegt, wird Strobe einmal rauf und einmal 
runter gesetzt (mit einer kleinen Wertezeit dazwischen)

> Kann man dieses !R! STAT1; EXIT setzen?

Lern erst mal BASCOM.
Was denkst du, was diese Zeilen hier

    Textstring = "!R! ELOG; EXIT;"
    Gosub Senddata

wohl machen.

Ob du da "!R! ELOG; EXIT;" reinschreibst, oder "Das Leben ist schoen" 
oder "Ich hab von Bascom keine Ahnung" ist doch völlig wurscht. An eine 
Stringvariable wird ein Text zugewiesen.

Bin schon neugierig, wie du den Rest deines Projektes bewältigen willst, 
wenn es schon an derart simplen Sachen scheitert.

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.