Drucker am AVR anschlissen

Gast #1246675
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:
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.
#1246688
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.
#1246793
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren