Mojens,
Also ich habe mich für das RAMPS 1.4 entschieden. Da ich aber nicht noch mehr Motorentreiber bestellen wollte und auf dem alten Mainboard ja nun mal 4 Stück drauf sind hab ich mich dazu entschlossen das alte Mainboard als Erweiterung für das RAMPS zu benutzen.
Also Kleines Programm geschrieben und festgestellt in C ist das VIEL zu langsam. die Steuerimpulse für die Motortreiber haben ca 10ns High Pegel! also musste ich dadrunter kommen und habe mir Assembler und Register angeguckt.
was dabei Raus gekommen ist möchte ich gerne weitergeben:
Auch hirfür gillt der RAMPS Haftungsausschluss:
Inbesondere Lassen sie nie ihren 3D Drucker Alleine Arbeiten!
Gesunder Menschenverstand wird vorrausgesetzt!
!!! Haben sie keinen Rauchmelder?, dann Kaufen sie sich einen !!!
!!! Hinweisen möchte ich noch darauf das CMOS-Bausteine bei offenen Eingängen
!!! Keinen definirten zustand haben, oder um deutlich zu werden
!!! Wer beim Basteln Heitzun oder Exruderheitzung angeschlossen hat
!!! Dazu die Versorgungsspannung Eingeschaltet lässt,
!!! den Verbindungskabelbaum abzieht und dann in den Keller geht
!!! SOLTE SICH NICHT WUNDERN WENN DIE FEUERWEHR ZU BESUCH KOMMT !!!
/*
Dieses Programm ist Für den Drucker Anet A8 gedacht
für alle die ihr Altes Manboard Anet v 1.0 gegen
ein Arduino Mega mit Ramps v1.4 tauschen möchten aber
die Motortreiber & MOSFET Ausgänge & Temperatursensoren
des Alten Mainbords gerne verwenden möchten.
Dieses Programm macht nichts anderes als weiter unten definierte Eingänge
auf die Motortreiber und Ausgänge durchzureichen.
Mit hilfe des weiter unten eschrieben Kabelbaumes
und den weiter unten beschrieben Anpassungen der Skynet 2.2 Firmware
ist es hiermit möglich das Anet V1.0 Mainbord als Rampserweiterung zu nutzen
Leichte Programierkentnisse sowie umgang mit Lötkolben
und die Fähigkeit Elektronische Bauteile zu erkennen wird vorausgesetzt
Auch hirfür gillt der RAMPS Haftungsausschluss:
Inbesondere Lassen sie nie ihren 3D Drucker Alleine Arbeiten!
Gesunder Menschenverstand wird vorrausgesetzt!
!!! Haben sie keinen Rauchmelder?, dann Kaufen sie sich einen !!!
!!! Hinweisen möchte ich noch darauf das CMOS-Bausteine bei offenen Eingängen
!!! Keinen definirten zustand haben, oder um deutlich zu werden
!!! Wer beim Basteln Heitzun oder Exruderheitzung angeschlossen hat
!!! Dazu die Versorgungsspannung Eingeschaltet lässt,
!!! den Verbindungskabelbaum abzieht und dann in den Keller geht
!!!!!!! SOLTE SICH NICHT WUNDERN WENN DIE FEUERWEHR ZU BESUCH KOMMT !!!!!!!
Und wie immer: Ich schliße jegliche Haftung aus.
////////////////////////////////////////////////////////////////////
// Komplette zuordungsliste //
////////////////////////////////////////////////////////////////////
// Atmega 1284p Anet V1.0 <<<Whire>>> Atmega 2560 Ramps V1.4
// OUTPUT | INPUT <<< DIR >>> I/O
//Skynet 2.2 Var|IONr|Typ|Reg|Art |Ort |PinNr Art |IONr|Typ|Reg|Skynet 2.2 Var|PinArt|PinNr<Whire> IONr|Typ|PinArt|PinNr
// 31 A0 A0 -----------
//Z_ENABLE_PIN 26 A5 A5 Motor-Pins INT 10 D2 RXD1 LCD-PIN 4 <---------- 1 AUX-1 5
//E0_DIR_PIN 0 B0 Motor-Pins INT 30 A1 A1 LCD-PIN 9 <----???--- 66 A12 AUX-2 9
//E0_STEP_PIN 1 B1 Motor-Pins INT 29 A2 A2 LCD-PIN 7 <----???--- 44 AUX-2 7
//Z_DIR_PIN 2 B2 Motor-Pins INT 28 A3 A3 LCD-PIN 5 <---------- 64 A10 AUX-2 5
//Z_STEP_PIN 3 PWM B3 Motor-Pins INT 27 A4 A4 LCD-PIN 3 <---------- 2 AUX-1 7
//FAN_PIN 4 PWM B4 Fan-Pin & J3 J3 9 FAN_PIN 4 PWM B4 Fan-Pin & J3 J3 9 <---------- 5 PWM Servo 4
// 18 C2 ProgPWM Endstop-Pin X 1 TEMP_BED_PIN 25 A6 A6 Temp-Pin IN BED -RC Tiefpass>59 A5 AUX-2 3
// 19 C3 ProgPWM Endstop-Pin Y 1 TEMP_0_PIN 24 A7 A7 Temp-Pin IN TMP -RC Tiefpass>63 A9 AUX-2 4
//X_DIR_PIN 21 C5 Motor-Pins INT 5 B5 J3 6 <---------- 4 PWM Servo 3
//Y_STEP_PIN 22 C6 Motor-Pins INT 6 B6 J3 3 <---------- 42 AUX-2 8
//Y_DIR_PIN 23 C7 Motor-Pins INT 7 B7 J3 5 <---------- 65 A11 AUX-2 10
// 8 D0 -----------
// 9 D1 -----------
//HEATER_BED_PIN 12 PWM D4 Heater-Pin OUT BED 16 C0 SCL LCD-PIN 8 <-MussPWM-- 11 PWM Servo 1
//HEATER_0_PIN 13 PWM D5 Heater-Pin OUT TMP 17 C1 SDA LCD-PIN 10 <-MussPWM-- 6 PWM Servo 2
//XYE0_ENABLE_PIN 14 PWM D6 Motor-Pins INT 10 D2 RXD1 LCD-PIN 4 <---------- 1 AUX-1 5
//X_STEP_PIN 15 PWM D7 Motor-Pins INT 11 D3 TXD1 LCD-PIN 6 <---------- 40 AUX-2 6
//x x x x x x x x x x x x LCD-PIN 1 <---------> 0V x AUX-2 2
//x x x x x x x x x x x x LCD-PIN 2 <---------> 5V x AUX-2 1
// J3 10 <-------->3,3V x x 3,3V
// J3 8 <---------> 0V x x 0V
// J3 7 <--------->Rst x x Rst
// J3 4 <---------> 5V x x 5V
// J3 1 <---------> x x x BLE ???
// J3 2 <---------> x x x BLE ???
////////////////////////////////////
// Atmega 1284p //
//IO |Register|PB|BoardLayerPin //
//-----+--------+--+--------------//
//31 A0 PINA 0 ---
//30 A1 PINA 1 LCD-PIN_9
//29 A2 PINA 2 LCD-PIN_7
//28 A3 PINA 3 LCD-PIN_5
//27 A4 PINA 4 LCD-PIN_3
//26 A5 PORTA 5 Z_ENABLE_PIN
//25 A6 *PINA 6 Tmp-Pin_IN_BED
//24 A7 *PINA 7 Tmp-Pin_IN_E0
//0 PORTB 0 E0_DIR_PIN
//1 PORTB 1 E0_STEP_PIN
//2 PORTB 2 Z_DIR_PIN
//3 PWM PORTB 3 Z_STEP_PIN
//4 PWM PINB 4 J3_9 | Pan-Pin
//5 PINB 5 J3_6
//6 PWM PINB 6 J3_3
//7 PWM PINB 7 J3_5
//16 PINC 0 LCD_PIN_8
//17 PINC 1 LCD_PIN_10
//18 *PORTC 2 Endstop-Pin_X // PWM Ausgabe von Tmp-Pin_IN_BED
//19 *PORTC 3 Endstop-Pin_Y // PWM Ausgabe von Tmp-Pin_IN_E0
//20 PINC 4 Endstop-Pin_Z
//21 PORTC 5 X_DIR_PIN
//22 PORTC 6 Y_STEP_DIR
//23 PORTC 7 Y_DIR_PIN
//8 PIND 0 ---
//9 PIND 1 ---
//10 PIND 2 LCD-PIN_4
//11 PIND 3 LCD-PIN_6
//12 PWM PORTD 4 HEATER_BED_PIN
//13 PWM PORTD 5 HEATER_0_PIN
//14 PWM PORTD 6 XYE0_ENABLE_PIN
//15 PWM PORTD 7 X_STEP_PIN
///////////////////////////////////////////////////////////////////////
// Atmega 1284p //
// DIGITAL IO Portmanipulation Codebeispiele //
// # HIGH # LOW //
//-----------------+--------------------------------+----------------//
//Eingang if(( # PINx & (1 << PBx))) { code } # else { code }; //
//Ausgang PORTx # |= (1 << PBx); # &= ~(1 << PBx);//
///////////////////////////////////////////////////////////////////////
////////////////////////////////////////////
// Registerbeschreibung ADC / analogRead //
////////////////////////////////////////////
//ADMUX (REFS1 REFS0 ADLAR xxx MUX3 MUX2 MUX1 MUX0)
//ADCSRA
//ADEN
//"ADC Enable": Mittels ADEN wird der ADC ein und ausgeschaltet. Eine 1 an dieser Bitposition schaltet den ADC ein.
//ADSC
//"ADC Start Conversion": Wird eine 1 an diese Bitposition geschrieben, so beginnt der ADC mit der Wandlung. Das Bit bleibt auf 1, solange die Wandlung im Gange ist. Wenn die Wandlung beendet ist, wird dieses Bit von der ADC Hardware wieder auf 0 gesetzt.
//ADFR
//"ADC Free Running": Wird eine 1 an ADFR geschrieben, so wird der ADC im Free Running Modus betrieben. Dabei startet der ADC nach dem Abschluss einer Messung automatisch die nächste Messung. Die erste Messung wird ganz normal über das Setzen des ADSC-Bits gestartet.
//ADIF
//"ADC Interrupt Flag": Wenn eine Messung abgeschlossen ist, wird das ADIF Bit gesetzt. Ist zusätzlich noch das ADIE Bit gesetzt, so wird ein Interrupt ausgelöst und der entsprechende Interrupt Handler angesprungen.
//ADIE
//"ADC Interrupt Enable": Wird eine 1 an ADIE geschrieben, so löst der ADC nach Beendigung einer Messung einen Interrupt aus.
//ADPS2, ADPS1, ADPS0
//"ADC Prescaler": Mit dem Prescaler kann die ADC-Frequenz gewählt werden. Laut Datenblatt sollte diese für die optimale Auflösung zwischen 50kHz und 200kHz liegen. Ist die Wandlerfrequenz langsamer eingestellt, kann es passieren dass die eingebaute Sample & Hold Schaltung die Eingangsspannung nicht lange genug konstant halten kann. Ist die Frequenz aber zu schnell eingestellt, dann kann es passieren dass sich die Sample & Hold Schaltung nicht schnell genug an die Eingangsspannung anpassen kann.
///////////////////////////////////////////////////////////////////////////////////
// WieringList: //
//--------------------------------------------------------------------------------+
// Atmega 1284p ANET V1.0 <<<<<<<->>>>>>> Atmega 2568 Ramps 1.4 |
//-------------v---------v--------------v---<<<<<<<->>>>>>>--------v----v---v-----+
// SkynetV2.2 | Komment | PhysikalPort |Pin<----WIERE---->Pys.Port|Pin |I/O|Namme|
//-------------+---------+--------------+---<<<<<<<->>>>>>>--------+----+---+-----|
// TEMP_BED_PIN| ProgPWM | Endstop-Pin X| 1 --RC Tiefpass-> AUX-2 | 3 | 59| A5 |
// TEMP_0_PIN | ProgPWM | Endstop-Pin Y| 1 --RC Tiefpass-> AUX-2 | 4 | 63| A9 |
// x | x | LCD-PIN | 2 <-------------> AUX-2 | 1 | x| 5V |
// x | x | LCD-PIN | 1 <-------------> AUX-2 | 2 | x| 0V |
// Z_STEP_PIN | | LCD-PIN | 3 <-------------- AUX-1 | 7 | 2| |
// Z_ENABLE_PIN | RXD1 | LCD-PIN | 4 <-------------- AUX-1 | 5 | 1| |
// XYE0_ENABLE_PIN| RXD1 | LCD-PIN | 4 <-------------- AUX-1 | 5 | 1| |
// Z_DIR_PIN | | LCD-PIN | 5 <-------------- AUX-2 | 5 | 64|A10 |
// X_STEP_PIN | | TXD1 LCD-PIN | 6 <-------------- AUX-2 | 6 | 40| x |
// E0_STEP_PIN | | LCD-PIN | 7 <-------------- AUX-2 | 7 | 44| x |
// Y_STEP_PIN | | J3 | 3 <-------------- AUX-2 | 8 | 42| x |
// E0_DIR_PIN | | LCD-PIN | 9 <-------------- AUX-2 | 9 | 66|A12 |
// Y_DIR_PIN | | J3 | 5 <-------------- AUX-2 | 3 | 4|PWM |
// X_DIR_PIN| | J3 | 6 <-------------- Servo | 4 | 5|PWM |
// FAN_PIN |J3_9&Fan-Pin | J3 | 9 <-------------- Servo |10 | 65|A11 |
// HEATER_0_PIN| SDA | LCD-PIN |10 <---MussPWM---- Servo | 2 | 6|PWM |
// HEATER_BED_PIN| SCL | LCD-PIN | 8 <---MussPWM---- Servo | 1 | 11|PWM |
//---------------+-------+--------------+--------------------------+----+---------+
//////////////////////////////////////////////////////////
// RC-Tiefpass: //
//////////////////////////////////////////////////////////
// ANET 1.0 / Wihering / RAMPS 1.4 //
//////////////////////////////////////////////////////////
// Endstop-Pin X Pin 1 -RED--4K7Ohm----+---- AUX-2 Pin 3//
// | + //
// Endstop-Pin X Pin 2 -NC 100µF //
// | - //
// Endstop-Pin X Pin 3 -BLACK----------+ //
// //
// Endstop-Pin X Pin 3 -BLACK----------+ //
// | - //
// Endstop-Pin X Pin 2 -NC 100µF //
// | + //
// Endstop-Pin X Pin 1 -RED--4K7Ohm----+---- AUX-2 Pin 4//
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
// Vatiabelen für SKYNET v 2.2 pins_RAMS.h //
//////////////////////////////////////////////////////////
//
//
//#define SERVO0_PIN -1 //11
//#define SERVO1_PIN -1 // 6
//#define SERVO2_PIN -1 // 5
//#define SERVO3_PIN -1 // 4
//
//#define ANET_v10_Stepper_Enable_Pin 58
//
//#define X_STEP_PIN 40
//#define X_DIR_PIN 4
//#define X_ENABLE_PIN ANET_v10_Stepper_Enable_Pin
//#define X_CS_PIN -1
//
//#define Y_STEP_PIN 42
//#define Y_DIR_PIN 65
//#define Y_ENABLE_PIN ANET_v10_Stepper_Enable_Pin
//#define Y_CS_PIN -1
//
//#define Z_STEP_PIN 57
//#define Z_DIR_PIN 64
//#define Z_ENABLE_PIN ANET_v10_Stepper_Enable_Pin
//#define Z_CS_PIN -1
//
//#define E0_STEP_PIN 44
//#define E0_DIR_PIN 66
//#define E0_ENABLE_PIN ANET_v10_Stepper_Enable_Pin
//#define E0_CS_PIN -1
//
//#define TEMP_0_PIN 13 // Analog Input
//#define TEMP_BED_PIN 14 // Analog Input
//#define TEMP_1_PIN 15 // Analog Input
//#define TEMP_2_PIN 5//63//A5 // Analog Input
//#define TEMP_3_PIN 9//59//A9 // Analog Input
/////
//#define E1_STEP_PIN 54
//#define E1_DIR_PIN 55
//#define E1_ENABLE_PIN 38
//#define E1_CS_PIN 53
//
//#define E2_STEP_PIN 60
//#define E2_DIR_PIN 61
//#define E2_ENABLE_PIN 56
//#define E2_CS_PIN 49
//
//#define E3_STEP_PIN 46
//#define E3_DIR_PIN 48
//#define E3_ENABLE_PIN 62
//#define E3_CS_PIN 40
//
//#define E4_STEP_PIN 26
//#define E4_DIR_PIN 28
//#define E4_ENABLE_PIN 24
//#define E4_CS_PIN 42
//
//#define E5_STEP_PIN 36
//#define E5_DIR_PIN 34
//#define E5_ENABLE_PIN 30
//#define E5_CS_PIN 44
//
////
//// Heaters / Fans
////
//#ifndef MOSFET_D_PIN
// #define MOSFET_D_PIN -1
//#endif
//#ifndef RAMPS_D8_PIN
// #define RAMPS_D8_PIN 11 //ANET BED
//#endif
//#ifndef RAMPS_D9_PIN
// #define RAMPS_D9_PIN 6 //ANET Header E0
//#endif
//#ifndef RAMPS_D10_PIN
// #define RAMPS_D10_PIN 5 //ANET Fan E0
//#endif
//#ifndef RAMPS_D11_PIN
// #define RAMPS_D11_PIN 8 //D8 NC
//#endif
//#ifndef RAMPS_D12_PIN
// #define RAMPS_D12_PIN 9 //D9 Header E1
//#endif
//#ifndef RAMPS_D13_PIN
// #define RAMPS_D13_PIN 10 //D10 Fan E1
//#endif
//
//#define HEATER_0_PIN RAMPS_D9_PIN
//#define FAN_PIN RAMPS_D10_PIN
//#define HEATER_1_PIN RAMPS_D12_PIN
//#define FAN1_PIN RAMPS_D13_PIN
//#define HEATER_BED_PIN RAMPS_D8_PIN
*/
///////////////////////////////////////////////////////////////
// PROGRAMMCODE //
///////////////////////////////////////////////////////////////
////////////////////// Biblioteken ////////////////////////////
#include <avr/io.h>
#include <inttypes.h>
////////////////////// Globale Variablen //////////////////////
bool PINWAHL = LOW; // A6 vorwählen
word RESULT6, RESULT7, ZAHL = 0; // Schleifenzahler
const byte TEILER = 0; // Genauigkeit/Geschwindigkeit der PROG-PWM Einstellen 0 ca. 190Hz
const word TEMPKORECKT = -10; // Wert wid auf den gelesene wert von 0 bis 1024 Aufadiert
////////////////////// PRG Setup //////////////////////////////
void setup() {
// 76543210
DDRA = 0b00100000; // Ein und Ausgänge PortA Definieren
DDRB = 0b00001111; // Ein und Ausgänge PortB Definieren
DDRC = 0b11111100; // Ein und Ausgänge PortC Definieren
DDRD = 0b11110000; // Ein und Ausgänge PortD Definieren
RESULT6 = analogRead(A6); // Dummyread und ADC-Register Vorconfigurieren
RESULT7 = analogRead(A7); // Dummyread und ADC-Register Vorconfigurieren
};
////////////////////// PRG Loop ///////////////////////////////
void loop() {
//0=I 1=O 76543210 WriteO ReadI 76543210 Dir n ReadI 76543210 Dir n
/*DDRA = 0b00100000;*/ PORTA = (( PIND & 0b00000100 ) << 3 );
/*DDRB = 0b00001111;*/ PORTB = (( PINA & 0b00011110 ) >> 1 );
/*DDRD = 0b11110000;*/ PORTD = (( PINC & 0b00000011 ) << 4 ) | (( PIND & 0b00001100 ) << 4 );
if (ZAHL > ((1 << 10) >> TEILER)) { // Schleifenzähler bei 1024
ZAHL = 0; // Resetten
};
if (ADCSRA & (1 << ADIF)) { // Wenn ADCRedy dann
//
if (!PINWAHL) { // Wenn A6 dann
RESULT7 = (ADCW + TEMPKORECKT) >> TEILER; // Ergebnis von A7 Speichern
ADMUX = (1 << REFS0) | 6; // Kanal A6 des Multiplexers waehlen
} else { // Wenn A7 dann
RESULT6 = (ADCW + TEMPKORECKT) >> TEILER; // Ergebnis von A6 Speichern
ADMUX = (1 < REFS0) | 7; // Kanal A7 des Multiplexers waehlen
};
ADCSRA |= (1 << ADSC); // Naechste Wandlung Starten
PINWAHL = !PINWAHL; // Toggle Pinwahl A6 A7
};
PORTC = (PINB & 0b11100000) | ((ZAHL < RESULT6) << PB2) | ((ZAHL < RESULT7) << PB3); // Schreibe X- & Y_DIR & Y Step & ADC Result A6 & A7 in PWM auf PortC
ZAHL++; // Schleifenzahler +1
};
Zum Abschluss Hatte ich gelesen das hier jemand mehr als 4 Extruder am Drucker hatte,
- Stimmt das?
- Hatte derjenige auch die skynet FW Drauf?
Ich scheitere zz. an den Einstellungen für die Extruder
insgesammt 2 Headends
- Headend hat 1 Stepper für Stützmaterial
- Headend bekommt 5 Stepper für Rot Gelb Blau Weiß Schwarz und ist eine Mischdüse.
zu dem Grafik Display: hab ich noch nicht getestet und möchte ich noch was anderes Testen. Es gibt Display’s mit mc die kaum teurer sind als normalte TFT Module, diese werten RS232 TTL aus und sind frei Programierbar Bunt und könnten Theoretisch alles was Repiter-Host in der Mannuellen Kontrolle kann, wenn man es Programmiert und Wahrscheinlich zusätzliche rs232 befele in die Firmware des Druckers bastelt. Dazu Evenuell Später mehr denn erstmal soll der Drucker jetzt ans laufen kommen.
BedLeveling kümmer ich mich auch erst darumm wenn die offenen Baustellen abgeschlossen sind. Inni ist zwar schon dran aber step by step. Sonst geht garnix mehr. Aber schon mal ein dickes Danke für eure Arbeit und das Posten der selbigen!!! Wird ättliche Läute ermutigen weiter zu machen!!!