Hier eine kleine Sammlung an Fotos und Quelltexten etc. über ein altes Projekt aus dem Jahr 1994:
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=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.