Forum: Mechanik, Gehäuse, Werkzeug CNC Maschinchen


von wilm j. (fca_mi)


Angehängte Dateien:

Lesenswert?

Hallo,

als kleine Spielerei entwickle ich gerade eine kleine cnc-Fräse aus 
Holz.
Dazu habe ich mir 3x 28BYJ-48 – 5V Schrittmotoren beim Chinesen meines 
Vetrauens bestellt.

Reicht ein Atmega8 aus, um die drei kleinen gleichzeiitig über eine usb 
uart Schnittstelle anzusteuern ?
Also das Progrämmchen auf dem PC ist schon in Visual Basic Express 
geschrieben. Es wird dem Atmega8 einfach sagen Motor x mach einen 
Schritt vorwärts, Motor y mach einen Schritt rückwärts, usw.

Um allen Zweiflern und Nörglern an diesem Projekt vorweg den Wind aus 
den Segeln zu nehmen:
1. Ich weiß, dass ich mit der Genauigkeit keinen Industriestandard 
erreichen werde, ist mir auch egal.
2. Ich weiß, dass diese Schrittmotoren nicht die schnellsten, ist mit 
auch egal, da es ja ein Hobbyprojekt ist und nicht nach Teilen pro 
Stunde bezahlt werde.
3. Ich weiß, dass meine bisher investierten 20€ vielleicht rausgeworfen 
sind, ist mir auch egal, ich gehe das Risiko aber ein und meine Familie 
ist trotzdem versorgt.

Also über jede konstruktive Hilfe wäre ich sehr dankbar und erfreut.

Anbei noch ein Bild vom aktuellen Entwicklungsstand meines kleinen 
Käsehobels.

: Verschoben durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

wilm j. schrieb:
> Reicht ein Atmega8 aus, um die drei kleinen gleichzeiitig über eine usb
> uart Schnittstelle anzusteuern ?
> Also das Progrämmchen auf dem PC ist schon in Visual Basic Express
> geschrieben. Es wird dem Atmega8 einfach sagen Motor x mach einen
> Schritt vorwärts, Motor y mach einen Schritt rückwärts, usw.

Das geht schicker. Wenn Du einen etwas größeren AtMega verwendest, 
kannst Du sogenannten G-Code verwenden, das hat den sehr großen Vorteil, 
daß deutlich weniger Daten übertragen werden müssen und daß alles 
timingkritische vom µC abgehandelt wird.

https://en.wikipedia.org/wiki/G-code

Die üblichen 3D-Drucker arbeiten auf diese Art und Weise, und der 
Sourcecode, der da verwendet wird, ist --dank open source-- frei 
verfügbar. Ein Beispiel ist "Marlin"

https://github.com/MarlinFirmware/Marlin

Auch wenn die Hardware Deiner Fräse von den üblichen Kritikern 
bestenfalls als "Käsefräse" bezeichnet werden wird, mit einer 
Ansteuerung auf G-Code-Basis hast Du einen Lerneffekt, den Du auf 
weitere Projekte übertragen können wirst.

von wilm j. (fca_mi)


Lesenswert?

Hallo,

g-code möchte ich erst einnmal nicht verwenden, ich möchte vorerst auch 
nur 2d-Bauteile bearbeiten.

Aber da Du meine Frage nicht verneint hast, gehe ich davon aus, dass ein 
Atmega8 reicht ?

von MaWin (Gast)


Lesenswert?

G-Code ist komplex, Beschleunigungsrampen in gekrümmten Kurven sind ein 
übliches Programmierproblem.
Für richtig verstandenen G-Code ist ein AVR unterdimensioniert, das 
macht ein PC mit Mach3. Ein AVR kann höchstens Geradenstückchen jeweils 
mit Anfahren und Bremsen, also unsinnig langsam.
Serielle mit Steps bei 115000bps und 3 Achsen pro Byte (und 4 bit für 
Zeitpunkt) erlaubt zwar 11000 Schritte pro Sekunde, aber im festen 
Raster von 1/11000 Sekunde, was zu ruckeligem Fahren führt (mit der 
Frage, ob das VB Programm hinterherkommt) . Pro byte nur 1 Achse aber 6 
bit Zeitpunkt macht 3600 Schritte pro Sekunde, besseres timing erlaubt, 
aber nur 500upm im Halbschritt erlaubt, Mikroschritt damit eher 
verbietet.
Vorausgesetzt, wilm kann ordentlich programmieren, der Holzaufbau mit 
absichtlich verklemmenden Gewindestangen sieht ja nicht danach aus.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das wirst Du selbst ausprobieren müssen. G-Code lässt sich auch für die 
Ansteuerung von 2D-Fräsen verwenden ...

Ich halte die Vorgehensweise, den PC mehr oder weniger direkt zur 
Schrittmotorsteuerung zu verwenden für eine Sackgasse.

von wilm j. (fca_mi)


Lesenswert?

Hallo,

das reicht erst einmal an Infos,

ich werde dann ein Bild vom 1. Frästeil posten :-)

von wilm j. (fca_mi)


Lesenswert?

da klemmt nix, ist alles recht freiläufig :-)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

MaWin schrieb:
> Für richtig verstandenen G-Code ist ein AVR unterdimensioniert, das
> macht ein PC mit Mach3. Ein AVR kann höchstens Geradenstückchen jeweils
> mit Anfahren und Bremsen, also unsinnig langsam.

Und was machen die ganzen AVRs, die auf den Steuerplatinen diverser 
3D-Drucker sitzen und dort G-Code interpretieren? Die Dinger bewegen 
sich deutlich schneller als übliche Fräsmaschinen.

von Peter H. (peterhofbauer)


Lesenswert?

Hallo!

Deine kleine Käsefräse sieht nicht schlecht aus, für Experimente 
ausreichend.
Schau Dir mal meine Steuerung an, ist mit wenig Kosten gebaut. Für ein 
"von Hand fahren" habe ich einen ATMEGA16 verwendet. Ansonsten ist die 
Lösung von Estlcam mit Arduino schon fast "Profi"-Version, jedenfalls 
bei meiner Steuerung.
Gruß Peter

http://www.hcp-hofbauer.de/indexcnc.htm

: Bearbeitet durch User
von Jemand (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> MaWin schrieb:
>> Für richtig verstandenen G-Code ist ein AVR unterdimensioniert, das
>> macht ein PC mit Mach3. Ein AVR kann höchstens Geradenstückchen jeweils
>> mit Anfahren und Bremsen, also unsinnig langsam.
>
> Und was machen die ganzen AVRs, die auf den Steuerplatinen diverser
> 3D-Drucker sitzen und dort G-Code interpretieren? Die Dinger bewegen
> sich deutlich schneller als übliche Fräsmaschinen.

Das Problem ist aber dass die m.W. kein G41/G42 unterstützen, was man 
zum Fräsen definitiv braucht. Bei Beschleuniging an Übergängen von Kreis 
zu Geraden haben die auch Probleme. Die Taktrate die sie schaffen ist 
auch nur auf dem Niveau von einem Parallelport.

MfG

von wilm j. (fca_mi)


Angehängte Dateien:

Lesenswert?

Hallo,

muss ich mir bei Gelegenheit mal genauer ansehen, danke für den Link.

Anbei noch ein Bild meiner kleinen Steuerungssoftware.

von Schreiber (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Und was machen die ganzen AVRs, die auf den Steuerplatinen diverser
> 3D-Drucker sitzen und dort G-Code interpretieren? Die Dinger bewegen
> sich deutlich schneller als übliche Fräsmaschinen.

Die Dinger bewegen sich nur deshalb so schnell weil die Schrittmotoren 
groß und die bewegten Massen (und damit auch die Kräfte) klein sind.

Bei einem Maschinentisch aus Gusseisen wird das alles etwas schwerer. 
Bei kleinen CNC-Fräsen (mit Schrittmotor) müssen nicht, wie beim 
3D-Drucker 500g sondern mindestens 5kg bewegt werden. Und das bei 
vergleichbarer Motorleistung!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Schreiber schrieb:
> Die Dinger bewegen sich nur deshalb so schnell weil die Schrittmotoren
> groß und die bewegten Massen (und damit auch die Kräfte) klein sind.

Das ist klar - aber die AVR-basierten Steuerungen können die 
Schrittmotoren mit diesen Geschwindigkeiten ansteuern, d.h. sie verfügen 
über ausreichend Rechenleistung, um diese Geschwindigkeiten zu 
erreichen.
Das ist der Punkt.

von Jemin K. (jkam)


Lesenswert?

Nette Bastelei. Mach doch noch ein paar Winkel an die Z-Achse, wird sie 
gleich stabiler.
Zu Ansteuerung würde ich Dir irgendsoein Open-Source Arduino Teil 
empfehlen.

http://www.precifast.de/cnc-steuerung-mit-arduino-und-grbl/

von Schreiber (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Das ist klar - aber die AVR-basierten Steuerungen können die
> Schrittmotoren mit diesen Geschwindigkeiten ansteuern, d.h. sie verfügen
> über ausreichend Rechenleistung, um diese Geschwindigkeiten zu
> erreichen.
> Das ist der Punkt.

nicht ganz:
1. ein 3D-Drucker bewegt sich meist nur in zwei Achsen gleichzeitig
2. die Hochachse wird nur für jede "Schicht" einmal betätigt
3. die geringen Massen erleichtern die Berechnung der 
Beschleunigungsrampen
4. Der Druckkopf ist relativ einfach anzusteuern, jeder Impuld gibt die 
gleiche Menge Kunststoff

Gewindeschneiden auf einer Fräsmaschine ist doch ein anderes Kaliber, 
ebenso das Fräsen von Freiformflächen mit Kurven in allen drei oder mehr 
Achsen.


Einfach mal einem 3D-Drucker zuschauen, dann einer 5-Achs-Fräse 
zuschauen und vergleichen...

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Schreiber schrieb:
> nicht ganz:
> 1. ein 3D-Drucker bewegt sich meist nur in zwei Achsen gleichzeitig

Der OP schrieb, dass er erstmal nur 2D-Bearbeitung wünscht.
Davon abgesehen kann bspw. Marlin ganz gut mit drei Achsen umgehen. Der 
Extruder stellt in Marlin übrigens eine vollwertige Achse dar.

> 3. die geringen Massen erleichtern die Berechnung der
> Beschleunigungsrampen

Das ist der Software völlig egal. Die berechnet die Rampen anhand der 
gewünschten Maximalbeschleunigung.
Bei größeren Massen und langsamerer Beschleunigung hat sie sogar mehr 
Zeit.

> 4. Der Druckkopf ist relativ einfach anzusteuern, jeder Impuld gibt die
> gleiche Menge Kunststoff

Bei Fräsen hat man nur die Drehzahl, die man üblicherweise einmal 
einstellt.

> Gewindeschneiden auf einer Fräsmaschine ist doch ein anderes Kaliber,
> ebenso das Fräsen von Freiformflächen mit Kurven in allen drei oder mehr
> Achsen.
>
> Einfach mal einem 3D-Drucker zuschauen, dann einer 5-Achs-Fräse
> zuschauen und vergleichen...

Ich empfehle dringend, sich das Foto des OP und seine Zielvorgaben 
anzuschauen.

Diese Fräse wird weder Gewinde schneiden noch 5-Achs-Bearbeitungen 
durchführen.

Dafür reicht ein AVR erstmal aus und die Arduino-Plattform mit Marlin 
dürfte dafür der preiswerteste Start sein (25€).

An den OP: Du solltest wirklich direkt mit G-Code beginnen. Das ist 
einfach der Standard und später kannst Du das recht problemlos auf eine 
eventuelle größere Maschine übertragen.

Eine andere kostenlose Möglichkeit wäre LinuxCNC auf PC.

von wilm j. (fca_mi)


Lesenswert?

Jemin K. schrieb:
> Nette Bastelei. Mach doch noch ein paar Winkel an die Z-Achse,
> wird sie
> gleich stabiler.
> Zu Ansteuerung würde ich Dir irgendsoein Open-Source Arduino Teil
> empfehlen.
>
> http://www.precifast.de/cnc-steuerung-mit-arduino-und-grbl/

Das würde die Entwicklungskosten verdoppeln ! :-)

von Tany (Gast)


Lesenswert?

wilm j. schrieb:
> Reicht ein Atmega8 aus, um die drei kleinen gleichzeiitig über eine usb
> uart Schnittstelle anzusteuern ?
> Also das Progrämmchen auf dem PC ist schon in Visual Basic Express
> geschrieben. Es wird dem Atmega8 einfach sagen Motor x mach einen
> Schritt vorwärts, Motor y mach einen Schritt rückwärts, usw.

MaWin schrieb:
> G-Code ist komplex, Beschleunigungsrampen in gekrümmten Kurven sind ein
> übliches Programmierproblem.
> Für richtig verstandenen G-Code ist ein AVR unterdimensioniert, das
> macht ein PC mit Mach3. Ein AVR kann höchstens Geradenstückchen jeweils
> mit Anfahren und Bremsen, also unsinnig langsam.

https://github.com/grbl/grbl/wiki/Configuring-Grbl-v0.9
Der 328er-Arduiono Booard schafft bis ca. 36 kHz Taktsignal für alle 3 
Achsen,kostet unter 10 Euro. Schnell genug nicht nur für Gerade, sondern 
auch Kreis, Bogen etc....
Bei 8µStep und einer Übersetzung von 2:1 erreiche ich locker 2,5m/min.
Beitrag "Projekt: SerialComCNC Serielles Frontend für CNC GRBL mit ATMega"

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Tany schrieb:
> https://github.com/grbl/grbl/wiki/Configuring-Grbl-v0.9
> Der 328er-Arduiono Booard schafft bis ca. 36 kHz Taktsignal für alle 3
> Achsen,kostet unter 10 Euro. Schnell genug nicht nur für Gerade, sondern
> auch Kreis, Bogen etc....
> Bei 8µStep und einer Übersetzung von 2:1 erreiche ich locker 2,5m/min.
> Beitrag "Projekt: SerialComCNC Serielles Frontend für CNC GRBL mit ATMega"

Das sieht doch schon recht interessant aus - danke für den Hinweis. Für 
einfache Steuerungen ist das durchaus eine Option :-)

von Nemesis (Gast)


Lesenswert?

Chris D. schrieb:
> Das sieht doch schon recht interessant aus - danke für den Hinweis. Für
> einfache Steuerungen ist das durchaus eine Option :-)

Aber hat das Projekt wegen der Nutzung eines veralteten 
Schnittstellenkonzepts eine Zukunft?

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Nemesis schrieb:
> Chris D. schrieb:
>> Das sieht doch schon recht interessant aus - danke für den Hinweis. Für
>> einfache Steuerungen ist das durchaus eine Option :-)
>
> Aber hat das Projekt wegen der Nutzung eines veralteten
> Schnittstellenkonzepts eine Zukunft?

Das finde ich jetzt nicht so dramatisch. Serielle Schnittstellen kann 
man problemlos emulieren. Außerdem gibt es ja den Quellcode und man kann 
durchaus weitere Schnittstellen hinzufügen.

Natürlich wird man damit kein CNC-Zentrum betreiben, aber für einfache 
Anwendungen sollte es doch reichen (Dispenser, Bestückungsautomat, 
Frontplattenbearbeitung usw.).

von Michael B. (laberkopp)


Lesenswert?

wilm j. schrieb:
> Anbei noch ein Bild meiner kleinen Steuerungssoftware.

Das IST G-Code, von jemandem der dummerweise nicht vorher nachgeguckt 
hat, was G-Code ist und deswegen alles inkompatibel anders gemacht hat.

Echter G-Code kann natürlich mehr. Vor allem echte Kreis(bögen) sind 
schwieriger. Vereinfachend sind die über die Definitionsstelle 
weitergeltenden Parameter. Und schick ist es, jedes Kommando bloss als 
Makro aufzufassen (wie es Mach3 tut), dann kann man durch Ablegen eines 
Makros einfach ein neues Kommando definieren.

von Tany (Gast)


Lesenswert?

Nemesis schrieb:
> Aber hat das Projekt wegen der Nutzung eines veralteten
> Schnittstellenkonzepts eine Zukunft?

Welche Schnittstelle meinst du den jetzt?
Hab nirgendwo gelesen, daß demnächst USB oder Seriell abgelöst wird.
Mach3 benutzt im alter Version immer noch den Parallelport, es gibt auch 
schon Version mit USB für teueres Geld.

Chris D. schrieb:
> Natürlich wird man damit kein CNC-Zentrum betreiben...
Auf keinen Fall, für die Hobymaschine reicht's aber dicker!

Das Konzept von grbl finde ich aber sehr interssant. G-Code komplett in 
einem µC zu intergrieren. Im Gegesatz zu Mach3 oder anderen 
Fräsprogrammen ist das Frontend einfacher zu programmieren, man muß sich 
nicht mehr um die G-Code bemühen.
Ich finde zwar schade, dass grbl kein G41 und G42 unterstürzt, man kann 
aber doch einiges aber in Programm kompensieren.

von Walter T. (nicolas)


Lesenswert?

Tany schrieb:
> man muß sich
> nicht mehr um die G-Code bemühen.

So einfach ist das jetzt auch nicht. Zumindest dann nicht, wenn man das 
Programm NICHT nur von vorn bis zum Ende durchlaufen lassen will. Will 
man am PC eine Bewegungssimulation oder nur die Bahnen anzeigen, muß man 
den GCode-Interpreter dann sogar zweimal implementieren (und das 
hoffentlich kompatibel).

von Tany (Gast)


Lesenswert?

Walter T. schrieb:
> Will man am PC eine Bewegungssimulation oder nur die Bahnen anzeigen, muß > man 
den GCode-Interpreter dann sogar zweimal implementieren

Warum muß man 2 mal implementieren?
Mein dafür geschriebene Programm kann die Bahnen anzeigen, ohne die 
Fräser oder der Tisch ein mm zu bewegen.
Das Programm SerialComCNC kann das auch.

von Nemesis (Gast)


Lesenswert?

Tany schrieb:
> Welche Schnittstelle meinst du den jetzt?

Na, die Serielle. Auf Desktop findet man die zwar noch, aber nicht mehr
auf Notebooks/Laptops. Also nicht mehr kompromisslos verfügbar. Daher
wäre hier für die vorgestellte Software eine USB-Variante sinnvoll.

> Hab nirgendwo gelesen, daß demnächst USB oder Seriell abgelöst wird.
> Mach3 benutzt im alter Version immer noch den Parallelport, es gibt auch
> schon Version mit USB für teueres Geld.

Usb wird auch noch lange Bestand haben, sofern es nicht von Ethernet
in Zukunft abgelöst wird.

von Tany (Gast)


Lesenswert?

Nemesis schrieb:
> Na, die Serielle
Na dann zum Glück kann man mit Arduino Board schon per USB kommunizieren 
:-)

von Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite


Lesenswert?

MaWin schrieb:
> Für richtig verstandenen G-Code ist ein AVR unterdimensioniert, das
> macht ein PC mit Mach3. Ein AVR kann höchstens Geradenstückchen jeweils
> mit Anfahren und Bremsen, also unsinnig langsam.
> Serielle mit Steps bei 115000bps und 3 Achsen pro Byte (und 4 bit für
> Zeitpunkt) erlaubt zwar 11000 Schritte pro Sekunde, aber im festen
> Raster von 1/11000 Sekunde, was zu ruckeligem Fahren führt (mit der
> Frage, ob das VB Programm hinterherkommt) . Pro byte nur 1 Achse aber 6
> bit Zeitpunkt macht 3600 Schritte pro Sekunde, besseres timing erlaubt,
> aber nur 500upm im Halbschritt erlaubt, Mikroschritt damit eher
> verbietet.

Wenn man über ein Thema nicht wirklich Bescheid weiss, sollte man nicht 
solch einen Unsinn posten.
MaWin ich bin von Dir echt enttäuscht :)

Ich empfehle Dir dringend das Studium von
https://github.com/grbl/grbl/wiki

: Bearbeitet durch User
von wilm j. (fca_mi)


Lesenswert?

Hallo,

habe mir jetzt einen "Serial Converter CP2102" zugelegt und ein kleiner 
Atmega8 ist auch schon bestellt.

Hat jemand einen link wo beschrieben ist, wie ich die beiden genau 
miteinander verbinde ?

von Tany (Gast)


Lesenswert?


von wilm j. (fca_mi)


Lesenswert?

is' ja cool


und der emuliert mir auch gleich meine serielle schnittstelle ?

und programmieren kann ich ihn auch gleich ?

von wilm j. (fca_mi)


Lesenswert?

mh, sehe gerade, dass das teil nur 14 I/O Pins hat, das wird knapp für 
obiges vorhaben

3x motoren mit je 4 pins bin ich schon bei 12

fräsmotor an/aus schalten vielleicht nochmal 2 ?

da sind rückmeldungen zum rechner nicht mehr möglich

von W.S. (Gast)


Lesenswert?

wilm j. schrieb:
> Also das Progrämmchen auf dem PC ist schon in Visual Basic Express
> geschrieben. Es wird dem Atmega8 einfach sagen Motor x mach einen
> Schritt vorwärts, Motor y mach einen Schritt rückwärts, usw.

Genau DAS ist der falsche Denkansatz.

Bedenke doch, daß das BS auf dem PC den Anwendungen die Rechenzeit nach 
seinem Gutdünken zuteilt. Darauf kannst du keine zeitabhängigen 
Funktionen aufbauen. Sowas MUSS also in den µC hinein. Der muß dann die 
Koordination aller beteiligten Dinge, also X zu Y, Anlaufverhalten, 
Bremszeiten usw. erledigen.

Auf der Schnittstelle zwischen PC und µC sähe das dann etwa so aus:
wert X; wert Y; up Fräser; schnellgang; stop;
wert X; wert Y; down Fräser; geraderfräsgang; stop;

und alle Zeit- und Koordinatenberechnungen macht der µC anschließend.

W.S.

von Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite


Lesenswert?

wilm j. schrieb:
> Dazu habe ich mir 3x 28BYJ-48 – 5V Schrittmotoren beim Chinesen meines
> Vetrauens bestellt.

Also diese hier:
http://www.ebay.de/itm/28BYJ-48-5V-Schrittmotor-DC-inkl-Endstufe-ULN2003-Treiber-Board-fur-Arduino-/171564426881?hash=item27f2096681

Wenn Du die mit den beliegenden ULN2003 Treiber Board mit 5V betreibst, 
dann kannst Du Fräsen knicken. Die Achse hält man mit 2 Fingern locker 
fest.

Ich habe damit auch schon mal experimentiert und um dem Ganzen etwas 
Drehmoment zu verleihen hilft:
ULN2003 Treiber Board mit 12 V betreiben. Dann werden die Motörchen 
allerdings heiss.

Oder gleich besser A4988 Boards an mind. 12V nehmen:
http://www.ebay.de/itm/A4988-Stepper-Motor-Schrittmotor-Treiber-Driver-3D-Drucker-Arduino-RepRap-CNC-/221727610250?hash=item339ffed58a
Die Temperatur der Motörchen bleibt dabei gemässigt und das Drehmoment 
ist für die nagelgrossen Motörchen gut.
Und Du kommst dann auch mit den benötigten Pins zurecht. Pro Achse nur 
Step- und Direction-Pin, event. noch Enable.

Allerdings wird Dir das Fräsen trotz allem keinen Spass bereiten.
Die 28BYJ-48 Motörchen haben unglaubliches Vor- Rückwärts-Spiel im 
eingebauten Getriebe. Fast schon eine viertel Achsumdrehung.

wilm j. schrieb:
> habe mir jetzt einen "Serial Converter CP2102" zugelegt und ein kleiner
> Atmega8 ist auch schon bestellt.

Warum einen ollen Atmega 8 und CP2102?
Tany hat Dir dazu ja auch schon geschrieben.

Aber mach mal, jeder muss da seine eigenen Erfahrungen machen.
Ich musste da auch mal durch :)

: Bearbeitet durch User
von wilm j. (fca_mi)


Lesenswert?

W.S. schrieb:
> wilm j. schrieb:
>> Also das Progrämmchen auf dem PC ist schon in Visual Basic Express
>> geschrieben. Es wird dem Atmega8 einfach sagen Motor x mach einen
>> Schritt vorwärts, Motor y mach einen Schritt rückwärts, usw.
>
> Genau DAS ist der falsche Denkansatz.
>
> Bedenke doch, daß das BS auf dem PC den Anwendungen die Rechenzeit nach
> seinem Gutdünken zuteilt. Darauf kannst du keine zeitabhängigen
> Funktionen aufbauen. Sowas MUSS also in den µC hinein. Der muß dann die
> Koordination aller beteiligten Dinge, also X zu Y, Anlaufverhalten,
> Bremszeiten usw. erledigen.
>
> Auf der Schnittstelle zwischen PC und µC sähe das dann etwa so aus:
> wert X; wert Y; up Fräser; schnellgang; stop;
> wert X; wert Y; down Fräser; geraderfräsgang; stop;
>
> und alle Zeit- und Koordinatenberechnungen macht der µC anschließend.
>
> W.S.

ja das habe ich mittlerweile auch eingesehen, werde es jetzt so machen, 
dass die teilstrecke übertragen wird den rest macht dann der atmega


> Wenn Du die mit den beliegenden ULN2003 Treiber Board mit 5V betreibst,
> dann kannst Du Fräsen knicken. Die Achse hält man mit 2 Fingern locker
> fest.

das kann ich nicht nachvollziehen, habe sie getestet und gemerkt, dass 
sie recht kraftvoll sind
spiel habe ich ebenfalls nicht festellen können


aber wie verbinde ich denn nun den Serial Converter CP2102 mit dem 
atmega ?

: Bearbeitet durch User
von Tany (Gast)


Lesenswert?

wilm j. schrieb:
> das kann ich nicht nachvollziehen, habe sie getestet und gemerkt, dass
> sie recht kraftvoll sind
> spiel habe ich ebenfalls nicht festellen können

Aber nur wegen 64:1! Getriebe. Und somit kannst du die "Machine" im 
Schneckentempo bewegen. Und es ist ein Unipolar-Stepper!!!

wilm j. schrieb:
> aber wie verbinde ich denn nun den Serial Converter CP2102 mit dem
> atmega ?
Na wie sonst: RX <-> TX und TX <->RX

von wilm j. (fca_mi)


Lesenswert?

hallo, gibt es irgendwo ein beispiel für die kommunikation zwischen pc 
und cp2102 in bascom ?

von Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite


Lesenswert?

wilm j. schrieb:
> hallo, gibt es irgendwo ein beispiel für die kommunikation zwischen pc
> und cp2102 in bascom ?

Google kaputt?
Bascom Hilfe defekt?
Befehle print input get irgenwo verloren?

von wilm j. (fca_mi)


Lesenswert?

hallo,

ich habe jetzt die verbidnung hinbekommen.
ich kann vom pc senden und empfangen.

leider ist die übertragung recht fehlerhaft, nur ca. jedes 3. 
sendesignal kommt korrekt an.

die baudrate ist im controller und im pc auf 1200 eingestellt.

aus dem bascom progi:

$regfile = "m8adef.dat"
$crystal = 1000000
$hwstack = 100
$swstack = 100
$framesize = 100
$baud = 4800
Kommunikation mit dem pc
Enable Urxc
On Urxc Onrxd
Enable Interrupts
Dim Ts As String * 10
do
...
...
loop

Onrxd:
   Ts = Ts + Chr(udr)
Return

von Dieter F. (Gast)


Lesenswert?

wilm j. schrieb:
> die baudrate ist im controller und im pc auf 1200 eingestellt.

wilm j. schrieb:
> $baud = 4800

Ja?

von wilm j. (fca_mi)


Lesenswert?

ne sind schon 1200 auf beiden seiten

von Dieter F. (Gast)


Lesenswert?

wilm j. schrieb:
> ne sind schon 1200 auf beiden seiten

Und warum dann das Coding mit 4800?

Stop-Bit?

Fluss-Steuerung ausgeschaltet?

Einstellung virt. COM-Port?

von wilm j. (fca_mi)


Lesenswert?

wilm j. schrieb:
> ne sind schon 1200 auf beiden seiten

Und warum dann das Coding mit 4800? war hier falsch übernommen, es sind 
1200

Stop-Bit? 1

Fluss-Steuerung ausgeschaltet? ja

Einstellung virt. COM-Port?
1200 bits/sek
datenbits: 8
parität: keine
stoppbits: 1
flusssteuerung: keine

von Dieter F. (Gast)


Lesenswert?

Die Steuerungs-SW ist selbst geschrieben?

Sicher, dass dort alles O.K. ist?

Ich würde mal mit HTERM ein paar Daten / Befehle austauschen.

Aufbau gelötet oder via Steckbrett?

von wilm j. (fca_mi)


Lesenswert?

Die Steuerungs-SW ist selbst geschrieben? jo, aber sie macht ja auch 
nicht viel außer ein paar zeichen senden und empfangen. und ab und zu 
kommt ja auch der richtige wert zurück.

Sicher, dass dort alles O.K. ist? jo

Ich würde mal mit HTERM ein paar Daten / Befehle austauschen.

Aufbau gelötet oder via Steckbrett? steckbrett

würde ein quarz evtl. die sache etwas stabiler in der übertragung machen 
?

von Dieter F. (Gast)


Lesenswert?

wilm j. schrieb:
> steckbrett

Mit Steckbrettern habe ich so meine (negativen) Erfahrungen ...
Teilweise resultieren Probleme, die man an anderer Stelle sucht, aus 
Kontaktproblemen der Steckbretter.

Bitte mal mit HTERM versuchen (kostenloser Download).

Bei 1200 Baud und 1 MHz internem Takt dürfte der Baudratenfehler 
verschmerzbar sein. Quarz muss nicht unbedingt sein - denke ich. Kenne 
aber Bascom nicht und was aus Deinen Einstellungen gemacht wird. Daher 
nochmal: HTERM nutzen und das Protokoll anschauen.

Optimal wäre natürlich, das Ganze mit einem Logic Analyser oder einem 
Digital-Oszilloskop mit Analyser-Funktion zu beobachten. Für solche 
Fälle habe ich z.B. einen SALEAE16(Clone) und einen Bus Pirate hier. 
Beides sehr nützlich, um Komminikationsprobleme mit USART, SPI, TWI zu 
analysieren. Aber bitte erstmal HTERM und schauen, was so ankommt ...

von wilm j. (fca_mi)


Angehängte Dateien:

Lesenswert?

habe jetzt eine text-datei über hterm gesendet

die daten stimmen

von Dieter F. (Gast)


Lesenswert?

wilm j. schrieb:
> habe jetzt eine text-datei über hterm gesendet
>
> die daten stimmen

wilm j. schrieb:
> Die Steuerungs-SW ist selbst geschrieben? jo, aber sie macht ja auch
> nicht viel außer ein paar zeichen senden und empfangen. und ab und zu
> kommt ja auch der richtige wert zurück.
>
> Sicher, dass dort alles O.K. ist? jo

Na, da wäre ich mir jetzt aber nicht mehr so sicher :-)

von wilm j. (fca_mi)


Lesenswert?

keine ahnung was man da falsch machen kann, in der steuerungs-sw steht 
jedenfalls das hier :

        SerialPort1.PortName = "COM6"
        SerialPort1.BaudRate = "1200"
        SerialPort1.DataBits = 8
        SerialPort1.Parity = Parity.None
        SerialPort1.StopBits = StopBits.One
        SerialPort1.Handshake = Handshake.None
        SerialPort1.Encoding = System.Text.Encoding.Default
        SerialPort1.Open()

zum senden benutze ich dann:

        SerialPort1.Write("blabla" & vbCr)

sollte doch so funktionieren, oder gibt es beim atmega8 besonderes zu 
beachten ?

von Dieter F. (Gast)


Lesenswert?

wilm j. schrieb:
> sollte doch so funktionieren, oder gibt es beim atmega8 besonderes zu
> beachten ?

Da bin ich jetzt auch auf dünnem Eis - könnte es sein, dass Du die 
falsche Codepage (also Windows-Zeichenatz statt ASCII-Zeichensetz) 
verwendest?

wilm j. schrieb:
> SerialPort1.Encoding = System.Text.Encoding.Default

Könnte sich dahinter verbergen ...

von Dieter F. (Gast)


Lesenswert?

Zeichensatz ... natürlich

von max (Gast)


Lesenswert?

Für einfache Experimente kann ich auf jeden Fall das RAMPS-Board 
empfehlen:
http://de.aliexpress.com/item/Mega-2560-R3-1pcs-RAMPS-1-4-Controller-5pcs-A4988-Stepper-Driver-Module-for-3D-Printer/1439959836.html?ws_ab_test=201556_10,201527_2_71_72_73_74_75,0_0 
damit kannst Du das Teil ohne großen Aufwand ansprechen! (Hab ich auch 
schon gemacht)

Im nächsten Schritt, wenn Dir das nicht mehr ausreicht kann ich aus 
eigener Erfahrung auf jeden Fall LinuxCNC empfehlen!

von wilm j. (fca_mi)


Lesenswert?

mh, habe jetzt anstatt "default" "ascii" genommen

wie vorher, funktioniert die datenübertragung nur ab und zu korrekt

von Dieter F. (Gast)


Lesenswert?

Hmm, wie gesagt - dünnes Eis - ...

Es gibt noch read- und write-timeout Einstellungen, z.B.

        serialPort1.WriteTimeout = 500;

Vielleicht hilft da ein Nachsteuern. Es liegt aus meiner Sicht 
offensichtlich am PC-Programm (da HTERM ja funktioniert). Also Parameter 
oder Timing- / Event-Steuerung im Programm, aber da kenne ich mich 
leider nicht aus - bzw. kenn Dein Programm ja auch nicht.

Hast Du beim virtuellen COM-Port die Puffer auf Maximum eingeschaltet?

von wilm j. (fca_mi)


Angehängte Dateien:

Lesenswert?

bringt auch alles nix

von Dieter F. (Gast)


Lesenswert?

O.K. dann weiß ich auch nicht weiter. Wie geschrieben kenne ich Dein 
PC-Programm nicht und weiß auch nicht, wo es da haken kann.

Übrigens zeigst Du eine Hardcopy von den COM2-Einstellungen und im 
Programm  nutzt du COM6 ...

von wilm j. (fca_mi)


Lesenswert?

hatte mittlerweile zum testen auf com2 umbenannt, hat aber auch nix 
gebracht

hterm habe ich auch nochmals angeschmissen, hatte mich vertan, es 
werdern doch nicht alle daten korrekt zurückgegeben


shit..

von wilm j. (fca_mi)


Angehängte Dateien:

Lesenswert?

folgende zeilen liefern ein exakte übereinstimmung der daten:
Onrxd:
   I = Udr
   Print Chr(i);
Return
(siehe anhang weißes feld zeile 1-6)

wenn es so eingestellt ist, ist die übertragung fehlerhaft:
Onrxd:
   I = Udr
   Print Chr(i)
Return
(siehe anhang weißes feld zeile 7-)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

wilm j. schrieb:
> Print Chr(i);

> Print Chr(i)


Das Print-Kommando hängt einen Zeilenvorschub an, wenn es nicht mit 
einem Semikolon abgeschlossen wird.

Der Empfang funktioniert also völlig korrekt, Du hast die empfangenen 
Daten nur "falsch" ausgegeben.

von wilm j. (fca_mi)


Angehängte Dateien:

Lesenswert?

nein warum auch immer nicht, denn der code

Onrxd:
   I = Udr
      Ts = Ts + Chr(i)
      Print Ts
Return

liefert das ergebnis wie im anhang dargestellt.

übertragen wurde das wort "spindel"

von Joachim B. (jar)


Lesenswert?

wilm j. schrieb:
> mh, sehe gerade, dass das teil nur 14 I/O Pins hat, das wird knapp für
> obiges vorhaben
>
> 3x motoren mit je 4 pins bin ich schon bei 12
>
> fräsmotor an/aus schalten vielleicht nochmal 2 ?
>
> da sind rückmeldungen zum rechner nicht mehr möglich

vielleicht ein Arduino mighty 1284p mit mehr flash, mehr Ram, mehr 
Ports?
http://www.ebay.com/itm/Mighty-Mini-ATMega1284p-compatible-with-Arduino-/331463717483

dazu noch einen FTDI oder CH340 Adapter für USB an PC

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

wilm j. schrieb:
> nein warum auch immer nicht, denn der code

Hier liegt der Fehler darin, daß Du die Print-Anweisung in Onrxd 
aufrufst, was je nach Menge der bereits empfangenen Zeichen einfach 
länger dauert, als Du dafür Zeit hast.

Bedenke, daß die Zeichen mit einer konstanten Datenrate eintrudeln; wenn 
Du aber Dich noch mit einem einzelnen Zeichen beschäftigst, wenn schon 
das nächste ankommt, dann geht dieses nächste Zeichen unweigerlich 
verloren.

Du solltest in Onrxd die empfangen Zeichen nur in einen Puffer 
stopfen, die Auswertung (und vor allem das Wieder-Zurücksenden) aber an 
anderer Stelle.

von Tany (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Du solltest in Onrxd die empfangen Zeichen nur in einen Puffer
> stopfen

Ich sehe nirgendwo eine Puffer deklariert, weder für rx nocht tx...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Tany schrieb:
> Ich sehe nirgendwo eine Puffer deklariert, weder für rx nocht tx...

Eben. Das muss er halt alles noch basteln.

von wilm j. (fca_mi)


Lesenswert?

ich dachte folgender code würde zum erfolg führen:

On Urxc Onrxd
Enable Urxc
Enable Interrupts

Dim Ts As String * 10

do
.
.
.
loop

Onrxd:
   I = Udr
   Ts = Ts + Chr(i)
Return


tut's aber nich, oder eben nur manchmal

von wilm j. (fca_mi)


Lesenswert?

und wenn ich anstatt

Onrxd:
   I = Udr
   Ts = Ts + Chr(i)
Return

mit

Onrxd:
   I = Udr
   Print Chr(i);
Return

i direkt ausgebe

werden die richtigen daten ausgegeben

also wo bleiben denn wohl die fehlenden zeichen wenn ich versuche den 
string wieder zusammenzusetzen?

von Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite


Lesenswert?

Wenn Du hier immer nur Bruchstücke des kompletten Codes einstellst wird 
das nix.

von wilm j. (fca_mi)


Lesenswert?

$regfile = "m8adef.dat"
$crystal = 1000000
$hwstack = 100
$swstack = 100
$framesize = 100
$baud = 1200
'Config Serialin = Buffered , Size = 10

'Kommunikation mit dem pc
'Config Serialin = Buffered , Size = 30 , Bytematch = 13
On Urxc Onrxd
Enable Urxc
Enable Interrupts
Dim I As Byte
Dim Ez As Integer 
'kontrollzaehler für empfangswerte (bei ez=3)alles empfangen
Dim Uee As String * 1                                       'zum 
festestellen des uebertragungsende
Dim Ts As String * 100                                      'teilstring 
emfangener daten
Dim Ltsk As Integer                                         'laenge 
teilstring mit abgeschnittenem "enter"
Dim Dx As Long
Dim Dy As Long
Dim Dz As Long
Dim Actcom As String * 100                                  'aktuelles 
kommando
'fräsarbeiten
Declare Sub Bewegung(byval Wx As Long , Byval Wy As Long , Byval Wz As 
Long , Byval Spmm As Long)
Declare Sub Motorx(rx As Integer)
Declare Sub Motory(ry As Integer)
Declare Sub Motorz(rz As Integer)
Dim Indx As Integer , Indy As Integer , Indz As Integer     'zustaende 
für motorx,y,z
   Indx = 1
   Indy = 1
   Indz = 1

'ports setzen
Config Portb = Output
Config Portc = Output
Config Portd.7 = Output                                     'spindel


'motorzustaende
  'motorx
   Dim Mx(4) As Byte
   Mx(1).1 = 1
   Mx(1).2 = 1
   Mx(1).3 = 0
   Mx(1).4 = 0
   Mx(2).1 = 0
   Mx(2).2 = 1
   Mx(2).3 = 1
   Mx(2).4 = 0
   Mx(3).1 = 0
   Mx(3).2 = 0
   Mx(3).3 = 1
   Mx(3).4 = 1
   Mx(4).1 = 1
   Mx(4).2 = 0
   Mx(4).3 = 0
   Mx(4).4 = 1
  'motory
   Dim My(4) As Byte
   My(1).1 = 1
   My(1).2 = 1
   My(1).3 = 0
   My(1).4 = 0
   My(2).1 = 0
   My(2).2 = 1
   My(2).3 = 1
   My(2).4 = 0
   My(3).1 = 0
   My(3).2 = 0
   My(3).3 = 1
   My(3).4 = 1
   My(4).1 = 1
   My(4).2 = 0
   My(4).3 = 0
   My(4).4 = 1
  'motorz
   Dim Mz(4) As Byte
   Mz(1).1 = 1
   Mz(1).2 = 1
   Mz(1).3 = 0
   Mz(1).4 = 0
   Mz(2).1 = 0
   Mz(2).2 = 1
   Mz(2).3 = 1
   Mz(2).4 = 0
   Mz(3).1 = 0
   Mz(3).2 = 0
   Mz(3).3 = 1
   Mz(3).4 = 1
   Mz(4).1 = 1
   Mz(4).2 = 0
   Mz(4).3 = 0
   Mz(4).4 = 1






Do
'Kommandoempfangsroutine
Uee = Right(ts , 1)
If Asc(uee) = 13 Then
   Ltsk = Len(ts) - 1
   Ts = Left(ts , Ltsk)
   Print "Ts:"
   Print Ts
   'Actcom auswerten
   If Actcom = "dx" Then
      Dx = Val(ts)
      Actcom = ""
      'Print "dx: " ; Dx
      End If
   If Actcom = "dy" Then
      Dy = Val(ts)
      Actcom = ""
      'Print "dy: " ; Dy
      End If
   If Actcom = "dz" Then
      Dz = Val(ts)
      Actcom = ""
      'Print "dz: " ; Dz
      End If

   'TS auswerten
   If Ts = "dx" Then
      Actcom = "dx"
      'Print "Actcom = dx"
      End If
   If Ts = "dy" Then
      Actcom = "dy"
      'Print "Actcom = dy"
      End If
   If Ts = "dz" Then
      Actcom = "dz"
      'Print "Actcom = dz"
      End If
   If Ts = "spindel" Then
      Actcom = "spindel"
      End If
   If Ts = "go" Then
      Actcom = "go"
      End If
   Ts = ""
End If
   If Actcom = "spindel" Then
      Toggle Portd.7
      Actcom = ""
      End If
   If Actcom = "go" Then
      Call Bewegung(dx , Dy , Dz , 4000.1)
      Actcom = ""
      End If


Loop



Onrxd:
   I = Udr
   Ts = Ts + Chr(i)
Return

Sub Bewegung(byval Wx As Long , Byval Wy As Long , Byval Wz As Long , 
Byval Spmm As Long)
   'schritte und teilschritte
   Dim Schritt As Long
   'nötige schritte
   Dim Srx As Long , Sry As Long , Srz As Long
   'maximale schritte aus srx,sry,srz
   Dim Srmax As Long
   'hilfsvar
   Dim Srmaxsrx As Long , Srmaxsry As Long , Srmaxsrz As Long
   'schritte ermitteln
   Srx = Wx * Spmm
   Sry = Wy * Spmm
   Srz = Wz * Spmm
   If Srx >= Sry Then
      Srmax = Srx
      Else
      Srmax = Sry
      End If
   If Srz > Srmax Then
      Srmax = Srz
      End If
   'go signale für schrittmotorimpuls 1=vorwärts, -1=rückwärts
   Dim Gox As Integer , Goy As Integer , Goz As Integer
   'auslöseintervalle
   Dim Isrx As Long , Isry As Long , Isrz As Long
   Isrx = 0
   Isry = 0
   Isrz = 0
   For Schritt = 1 To Srmax
      Gox = 0
      Goy = 0
      Goz = 0
      'Motor x
      If Srx <> 0 Then
         Isrx = Isrx + 1
         Srmaxsrx = Srmax / Srx
         If Isrx = Abs(srmaxsrx) Then
            Isrx = 0
            Gox = Abs(srx) / Srx
            End If
         End If
      'Motor y
      If Sry <> 0 Then
         Isry = Isry + 1
         Srmaxsry = Srmax / Sry
         If Isry = Abs(srmaxsry) Then
            Isry = 0
            Goy = Abs(sry) / Sry
            End If
         End If
      'Motor z
      If Srz <> 0 Then
         Isrz = Isrz + 1
         Srmaxsrz = Srmax / Srz
         If Isrz = Abs(srmaxsrz) Then
            Isrz = 0
            Goz = Abs(srz) / Srz
            End If
         End If
      'Daten zum Motor schicken
      Call Motorx(gox)
      Call Motory(goy)
      Call Motorz(goz)

      'aktuelle koordinaten
'      Akx + = Gox / Spmm
'      Aky + = Goy / Spmm
'      Akz + = Goz / Spmm
      Next
End Sub

Sub Motorx(rx As Integer )
   Indx = Indx + Rx
   'wenn obergrenze erreicht, dann auf anfang setzen
   If Indx > 4 Then
      Indx = 1
      End If
   'wenn untergrenze erreicht, dann auf ende setzen
   If Indx < 1 Then
      Indx = 4
      End If
   'ports setzen
   Portb.0 = Mx(indx).1
   Portb.1 = Mx(indx).2
   Portb.2 = Mx(indx).3
   Portb.3 = Mx(indx).4
End Sub
Sub Motory(ry As Integer )
   Indy = Indy + Ry
   'wenn obergrenze erreicht, dann auf anfang setzen
   If Indy > 4 Then
      Indy = 1
      End If
   'wenn untergrenze erreicht, dann auf ende setzen
   If Indy < 1 Then
      Indy = 4
      End If
   'ports setzen
   Portb.4 = My(indy).1
   Portb.5 = My(indy).2
   Portc.0 = My(indy).3
   Portc.1 = My(indy).4
End Sub
Sub Motorz(rz As Integer )
   Indz = Indz + Rz
   'wenn obergrenze erreicht, dann auf anfang setzen
   If Indz > 4 Then
      Indz = 1
      End If
   'wenn untergrenze erreicht, dann auf ende setzen
   If Indz < 1 Then
      Indz = 4
      End If
   'ports setzen
   Portc.2 = Mz(indz).1
   Portc.3 = Mz(indz).2
   Portc.4 = Mz(indz).3
   Portc.5 = Mz(indz).4
End Sub

von Bastler (Gast)


Lesenswert?

Warum ist der Serial Buffer auskommentiert?
Ich habe von Bascom nicht viel Ahnung, allerdings eh der ganze 
Rattenschwanz abgearbeitet ist, sind bestimmt eingehende Zeichen 
verloren. Anscheinend ist das Print in der ISR dann doch noch schneller 
und es funktioniert damit. Aber in eine ISR gehört niemals ein Print. 
Also den Buffer wieder rein. Vielleicht müssen ja für die Serial Buffer 
Funktion noch Interrupts enabled werden. Schau mal in die Bascom Hilfe.

von wilm j. (fca_mi)


Lesenswert?

hab das ganze mal entschlackt und auf das nötigste reduziert:

$regfile = "m8adef.dat"
$crystal = 1000000
$hwstack = 100
$swstack = 100
$framesize = 100
$baud = 1200

On Urxc Onrxd
Enable Urxc
Enable Interrupts
Dim I As Byte
Dim Uee As String * 1
Dim Ts As String * 100

Do
Uee = Right(ts , 1)
If Asc(uee) = 13 Then
   Print "Ts:"
   Print Ts
   Ts = ""
End If

Loop

Onrxd:
   Ts = Ts + Chr(udr)
Return



funktioniert aber immernoch nich richtig

von Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite


Lesenswert?

Von Bascom habe ich kaum Ahnung, aber das funktioniert zuerst mal auch 
mit 115200 baud. Must nur den Kopf anpassen. An deiner Stelle würde ich 
aber für alle Fälle einen Buffer vorsehen damit nichts verloren geht..
1
$regfile = "m328pdef.dat"
2
$crystal = 16000000
3
$hwstack = 100
4
$swstack = 100
5
$framesize = 100
6
$baud = 115200
7
8
On Urxc Onrxd
9
Enable Urxc
10
Enable Interrupts
11
12
Dim Ts As String * 100
13
Dim Flagrx As Boolean
14
15
Ts = ""
16
Flagrx = 0
17
18
Do
19
20
If Flagrx = 1 Then
21
  If Right(ts , 1) = Chr(13) Then
22
    Print "Ts: " ; Ts
23
    Ts = ""
24
  End If
25
  Flagrx = 0
26
End If
27
28
Loop
29
30
31
32
Onrxd:
33
   Ts = Ts + Chr(udr)
34
   Flagrx = 1
35
Return

: Bearbeitet durch User
von wilm j. (fca_mi)


Lesenswert?

besten dank an albert für den überarbeiteten code, es funktioniert,
allerdings mit $baud = 4800

warum der coe besser funktioniert als meiner verstehe ich allerdings 
nicht, aer egal.

jetzt bräuchte ich allerdings noch eine güntige stromquelle.
hat da jemand was für folgende verbraucher:
3x schrittmotor 28BYJ-48 – 5V
1x fräsmotor 5 -12V
1x atmega

kann man da vielleicht auch ein altes pc-netzteil nehmen ?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.