Drucker am AVR anschlissen

Gast #1246675
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:
1
$regfile = "m8def.dat"
2
$crystal = 1000000
3

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

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

12
Dim Nutzdaten As String * 30
13
Dim Textstring As String * 30
14
Dim Bytewerte(30) As Byte At Textstring Overlay
15
Dim X As Byte
16
Dim Y As Byte
17

18
Led_gruen Alias Portc.0
19
Led_rot Alias Portc.1
20
Taster1 Alias Pinb.1
21
Taster2 Alias Pinb.2
22
Taster3 Alias Pinb.3
23
Taster4 Alias Pinb.4
24

25
Strobe Alias Portc.3
26
Init_signal Alias Portc.2
27
Busy Alias Pinb.5
28
Ack_signal Alias Pinb.6
29

30
'Portd ist DATA0 - DATA7 der Centronics Schnittstelle
31

32
Led_gruen = 0                                               'LED Grün an
33
Led_rot = 0                                                 'LED Rot an
34

35
Wait 1                                                      'Test, ob beide LEDs funktionieren
36

37
Led_rot = 1                                                 'LED Rot aus
38

39

40
Do
41
If Taster1 = 0 Then                                         'Taster 1 gedrückt
42
    Textstring = "!R! STAT1; EXIT; {012}"
43
    Gosub Senddata                                          'Rote LED aus
44
    Waitms 50                                               ' wegen dem Tastenprellen
45
End If
46
If Taster2 = 0 Then                                         'Taster 2 gedrückt
47
    Textstring = "!R! FRPO I1, 1; EXIT;"
48
    Gosub Senddata
49
    Waitms 50                                               ' wegen dem Tastenprellen
50
End If
51
If Taster3 = 0 Then                                         'Taster 3 gedrückt
52
    Textstring = "!R! ELOG; EXIT;"
53
    Gosub Senddata
54
    Waitms 50                                               ' wegen dem Tastenprellen
55
End If
56
If Taster4 = 0 Then                                         'Taster 4 gedrückt
57
    Waitms 50                                               ' wegen dem Tastenprellen
58
End If
59
Loop
60

61

62
Senddata:
63
    Led_gruen = 1                                           'Grüne LED aus
64

65
    Do
66
    Loop Until Busy = 1
67

68
    Led_rot = 0
69
    Init_signal = 0                                         'Init-Signal auf Low zum initialisieren
70
    Waitms 50                                               '50 millisekunden warten
71
    Init_signal = 1
72
    Waitms 50
73

74
    Y = Len(textstring)
75
    For X = 1 To Y Step 1
76
        Portd = Bytewerte(x)
77
        Waitms 10
78
        Strobe = 1
79
        Waitms 10
80
        Strobe = 0
81

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

86
    Next X
87

88
    Led_gruen = 0                                           'Grüne LED an
89
    Led_rot = 1
90
Return
91

92
End


PS: Ich möchte nur Text drucken. Ohne Angaben zur Grösse und Schriftart.
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.
Gast
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.
Gast
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.
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.