Hallo,
Das Board Melzi Creality 1.1.3 Sanguino mit dem Atmega 1284p stammt
eigentlich aus einem 3D Ender Drucker. Da das Board ausgetauscht wurde,
wird es für ein neues Projekt benutzt. Dieses Projekt ist eine PCB Fräse
mit der Open Source Firmware cyclone.
Die Fräse und das Display mit Menuauswahl funktioniert schon
einwandfrei, es fehlt nur noch der card reader, damit die Fräse ohne
einen weiteres Gerät(PC) funktioniert und die Befehle aus der SD Karte
ausliest und die Motoren steuert. Wenn ich das Board NUR am USB
verbinde, kann ich die benötigten Befehle aus einem txt file lesen und
abspeichern. Wenn ich aber das Netzteil mit 12 V mit dazustecke
funktioniert es nicht mehr. Genauso wenn NUR das Netzteil von 12V
angesteckt ist funktioniert es nicht.
Hier der Code den ich benutze um das File zu lesen:
1
#include <SPI.h>
2
#include <SD.h>
3
4
File data;
5
const int cs = 10;
6
7
8
void read_txt(){
9
10
data = SD.open("test.txt");
11
if(data){
12
Serial.println("test.txt");
13
while(data.available()){
14
Serial.write(data.read());
15
}
16
data.close();
17
}
18
else{
19
Serial.println("file can not open");
20
}
21
22
}
23
24
void setup()
25
{
26
Serial.begin(9600);
27
while(!Serial){
28
}
29
if(!SD.begin(cs)){
30
Serial.println("Initialization failed!");
31
return;
32
}
33
Serial.println("Initialization succesfull.");
34
read_txt();
35
}
36
37
void loop(){
38
39
}
Meine Vermutung war das die serial Verbindung(PC) mit der SD Karte
kollidiert. Also hab ich den Code umgeschrieben und statt den Serial ein
paar LED getoggelt:
1
#include <SPI.h>
2
#include <SD.h>
3
4
File data;
5
const int cs = 10;
6
7
int led_red = 20;
8
int led_green = 19;
9
10
void read_txt(){
11
12
data = SD.open("test.txt");
13
if(data){
14
while(data.available()){
15
}
16
data.close();
17
}
18
else{
19
}
20
21
}
22
23
void setup()
24
{
25
pinMode(led_red, OUTPUT);
26
pinMode(led_green, OUTPUT);
27
28
if(!SD.begin(cs)){
29
digitalWrite(led_red, HIGH);
30
return;
31
}
32
digitalWrite(led_green, HIGH);
33
//read_txt();
34
}
35
36
void loop(){
37
}
Leider ist es hier unverändert, sobald ich den Netzstecker von 12V
anschließe funktioniert es nicht mehr. Nur per USB funktioniert es.
Habt ihr noch Ideen?
Die SD Karte benötigt "VCC3.3V", das hast du nur, wenn du USB
anschliesst.
Aus dem 12V Netzteil werden nur die "VREG-5V" generiert.
Edit:
Ich glaub das war nicht ganz so richtig...
(nochmal genauer nachschauen)
Evtl. J5 / CON3 ...wo ist der auf dem Board.
Irgendwie bekomme ich den Schaltplan im Zusammenhang mit dem Bild nicht
ganz nachvollzogen.
So wie es aussieht, kann man wohl über J5 / CON3 die Quelle der Spannung
auswählen, ob vom Netzteil oder USB.
Was aber eigentlich kein Sinn ergibt, da es ja mit Netzteil auch laufen
muss, bzgl. der Motortreiber.
ja würde ich dir Zustimmen, aber das Board hat ja vorher auch am 3D
Drucker funktioniert, nur mit dem Netzstecker von 12 V. Deswegen bin ich
mal mit einem multimeter ran gegangen und hab die Pins gemessen ohne
Netzstecker und mit. Ergebniss siehe Bild. Komme aber mit den Daten
nicht weiter.
Vielen Dank für die schnelle Hilfe.
AN U5 liegen 5V an Pin 5.
Woher weis ich welcher pin der pin20 ist am board?
Hab einen Fehler im Bild gehabt mit netzteil liegen nicht 3,36V an
sondern 3,5V bei den zwei Pins. Ist es der Pin 20? Warum sind sind zwei
Pins auf 3,5V oder 3,36V?
Max M. schrieb:> Pin 20 hat 3,5V nur mit Netzstecker und 3,3V nur mit USB Versorgung.
Ja dann haben ja alle benötigten Bauteile ihre Spannungsversorgung.
Sehr seltsam.
Adam P. schrieb:> Weiterhin habe ich so das Gefühl, das der Schaltplan nicht zu dem> Board> passt.
Ja das ist gut möglich. Vom Hersteller gibt es keinen Schaltplan. Ich
hab noch einen im Netz gefunden. Vielleicht kannst du mit dem mehr
anfangen.
Also die 3.5V find ich ein wenig zu viel, aber ok.
Sonst sehe ich keinen Grund warum es nicht funktionieren sollte.
Wo springt er denn rein im Source, wenn du Netzteil verwendest:
Serial.println("file can not open"); ?
Adam P. schrieb:> Also die 3.5V find ich ein wenig zu viel, aber ok.> Sonst sehe ich keinen Grund warum es nicht funktionieren sollte.>> Wo springt er denn rein im Source, wenn du Netzteil verwendest:> Serial.println("file can not open"); ?
Nein er springt beim initialisieren schon hier rein:
if(!SD.begin(cs)){
Serial.println("Initialization failed!");
return;
Edit:
Es sind eher sogar 3,6V.
Wenn ich das board mit USB starte und danach die 12V mit anschließe
bleibt der Pin 20 bei 3,3V. Sobald ich den USB stecker ziehe wandert der
Wert auf 3,6V.
Adam P. schrieb:> Zusammengefasst:>> Nur USB: Das lesen funktioniert.> Und sobald du das Netzteil anschliesst funktioniert das lesen nicht> mehr?
Ja genau.
Die Initialisierung SD.begin(sc) funktioniert mit USB einwandfrei.
Nehme ich das board komplett vom Strom und schalte es nur über das
Netzteil 12V an funktioniert SD.begin(sc) nicht mehr.
mhhhhh
Kann sich eine Pin Belegung irgenwie ändern wenn das board eine andere
Spannung bekommt. Magie?
Max M. schrieb:> Kann sich eine Pin Belegung irgenwie ändern wenn das board eine andere> Spannung bekommt. Magie?
Nein.
Aber probier mal folgendes,
setz mal ein Delay in das Setup rein:
1
voidsetup()
2
{
3
Serial.begin(9600);
4
5
while(!Serial){
6
}
7
8
delay(5000);
9
10
if(!SD.begin(cs)){
11
Serial.println("Initialization failed!");
12
return;
13
}
14
15
Serial.println("Initialization succesfull.");
16
read_txt();
17
}
Hab da so eine Vermutung und will mal wissen ob es das sein könnte.
Wie zum Teufel.... Wahnsinn. Adam P. ich nehme dich in mein Abend Gebet
mit auf. Geil Danke dir es funktioniert. Kannst du mir das erklären? So
simpel? Kann ich mir nicht erklären!!!
Edit:
bin jetzt total gespannt...! Wenn du natürlich noch Zeit hast. Wenn ich
das delay auf 0,5s mache funktioniert es schon nicht mehr.
Max M. schrieb:> Kannst du mir das erklären?
Vermutlich startet der Mikrocontroller schneller als das Netzteil.
Manche Netzteile liefern in den ersten paar hundert ms noch keine
stabile Ausgangsspannung.
Stefan ⛄ F. schrieb:> Max M. schrieb:>> Kannst du mir das erklären?>> Vermutlich startet der Mikrocontroller schneller als das Netzteil.> Manche Netzteile liefern in den ersten paar hundert ms noch keine> stabile Ausgangsspannung.
Du warst mir 5000ms schneller. Wollte ich gerade auch als Gedanke mit
rein bringen. VIELEN VIELEN DANK. Schönen Tag noch
Stefan ⛄ F. schrieb:> Vermutlich startet der Mikrocontroller schneller als das Netzteil.
Das war aber nicht meine Vermutung :-P
Und zwar was ich mir dachte:
Mit USB (UART) startet dein Atmega langsamer, da er wohl die Verbindung
erkennt etc. (siehe main() von Arduino: USB Init.)
Mit Netzteil ohne USB, startet er schneller.
Da aber die SD Karte auch eine gewisse Zeit braucht um Betriebsbereit zu
sein, fällt es mit USB nicht auf, aber mit Netzteil schon.
Ja man müsste in die Specs schauen was SD da definiert hat, aber ja OK..
mach 1000ms und gut ist ;-)
Edit:
Hatte das Problem bei meinem Projekt mit nem Cortex-M4.
Zu schnell nach Power ON ist die Karte mal da, mal nicht gewesen.
Max M. schrieb:> Wahnsinn. Adam P. ich nehme dich in mein Abend Gebet> mit auf.
Ah passt schon ;) Hat mich ja selbst interessiert.
Sowas ist immer weider lustig.
LED nach dem USBDevice.attach() aufleuchten lassen:
Mit USB ca. nach 5sec, LED geht an.
Mit Netzteil, LED geht instantly an.
Durch die initialisierung des USB Devices dauert es ein paar sec. länger
wie beim delay.
Wenn ich mit dem Multimeter, beim anstecken, am HC541 Pin 20 messe, kann
ich eine Latenzzeit beobachten.
In dieser Zeit hat aber der Controller versucht die SD Karte schon zu
initialisieren. Konnte es aber nicht weil das SD Modul noch kein Strom
hatte. Ist das so richtig?
Vielen Dank nochmal!
Max M. schrieb:> Ist das so richtig?
Ich glaub in diesem Fall kommen mehrere Dinge zusammen.
Angenommen alle Bauteile erhalten gleichzeitig eine stabile Spannung,
dann benötigen diese aber unterschiedlich viel Zeit um betriebsbereit zu
sein.
Selbst wenn der HC541 genau dann schon betriebsbereit ist, wenn der
controller den Zugriff startet, heißt das noch lange nicht, dass zu
diesem Zeitpunkt die SD Karte auch schon so weit ist.