Hier eine kleine Sammlung an Fotos und Quelltexten etc. über ein altes
Projekt aus dem Jahr 1994:
Ein HPGL-Selbstbauplotter
Features:
- DIN A4 Papiergröße
- Eigene Intelligenz mit 8051-Prozessor und 32k RAM
- 2x16 Zeichen LCD-Display und 6-Tasten Bedienfeld, 3 Status-LEDs
- HPGL-Interpreter für Linienbefehle: PU, PD, PA (Pen up, Pen down, Pen absolute)
- Endschalter für alle Achsen
- serielle RS232-Schnittstelle
- Antrieb über 2 Unipolar-Stepper mit 200steps/U, Betrieb im Halfstep-Mode
- Fischertechnik-Ketten zur Kraftübertragung
- Ein Stifthalter mit Hubmagnet
- Kugelgelagerte Brücke für x-Achse
- Rahmenkonstruktion aus Plexiglas und Alu-L-Profilen
Hier ein paar Fotos:

Gesamtansicht

Controller, Bedienfeld, Y-Achse und Stifthalter (Klicken für Großbild)

... (Klicken für Großbild)

Contoller im Detail (Klicken für Großbild)

Das Controller-Board-Layout (Klicken für Großbild)

Das Bedienfeld-Layout (Klicken für Großbild)
Dazu gibt es die ASSEMBLER-Quelltexte (ich glaube ich habe damals den TASM/Table Driven Assembler von Speech Technology Inc. benutzt...) als ZIP
Die Board-Dateien des Controllers und des Bedienfeldes (konvertiert von EAGLE 2.05 nach 4.15) als ZIP. Die doppelseitig durchkontaktierte
Controller-Leiterplatte habe ich damals beim PCB-Pool herstellen lassen: Super Sache!
Die Schrittmotoren würde ich jetzt mit nem ULN2803 ansteuern, damals habe ich eine Endstufe mit Transistoren aufgebaut. Die Adressdecodierung bzw. Cipselect-Erzeugung kann
man statt mit einem GAL auch mit wired-or etc. erzeugen.
Der Kern des ganzen, der Bresenham-Linienalgorithmus als Pseudocode/Pascal-Quelltext:
Procedure PlotLine(x1,y1,x2,y2 : Integer);
Var
px, py, dx, dy, ax, sy, rest, j : Integer;
Begin
ax := 1; sy := 1;
dx := (x2-x1);
dy := (x2-yl);
px := 0;
py := 0;
If dx<0 Then
Begin dx := -dx; ax := -1 End;
If dy<0 Then
Begin dy := -dy. sY := -1 End;
rest := dx Div 2;
move stift to(px,py);
If (dx != 0)-And (dy != 0) Then
Repeat
px := px+ax;
rest := rest+dY.
If resT>=dx Then
Begin
py := py+sy;
rest := rest-dx;
move_x_Y; (*SCHRITT IN X- UND Y-RICHTUNG*)
End
Else
move x;(*SCHRITT IN X-RICHTUNG*)
Until px-~dx
Else If (dx=0) And (dy != 0) Then
RepeaT
py : = py+ sy;
move_y; (*SCHRITT IN Y-RICHTUNG*)
Until py=dy
Else If (dx!= 0) And (dy=0) Then
Repeat
px := px+ax;
move_x;
UnTil px=dx;
End;
Der Programmfluss der Assembler-SW in plotter1.zip als unvollständiges Pseudocode-Bruchstück:
10 Schalte LEDs aus
20 Springe zu LCD_Init
30 Fahre nach 0,0
35 Initialisiere Variablen, Clear RAM, Init RS232
40 Warte auf serielles Zeichen oder Taste
50 Wenn Taste, dann Menü behandeln ->goto MENU
60 Wenn Zeichen, dann PA, PD, PU auswerten -> goto COMMAND
70 Wenn Zeichen Dateiende -> goto WORKFIRST
80 gehe zu 40
100 COMMAND:
110 Ist es PU? Pen-Bit setzen
120 Ist es PD? Pen-Bit löschen
130 Ist es PA? Koordinaten von ASCII zu Binaer wandeln, ins RAM schreiben -> goto KOORDINATEN
140 goto 40
200 WORKFIRST:
210 Koordinaten aus RAM abarbeiten, Plotten
220 ...
300 MENU:
310 Tasten auswerten
320 ...
Hier gibt es noch eine ganz interessante Seite mit Selbstbau-Plottern und Algorithmen.
|