INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Up-Load funktioniert nicht mehr
11.11.2014, 22:59
Beitrag #1
Up-Load funktioniert nicht mehr
Hallo.
Ich habe einen Mega und einige AD-Wandler mit I2C und SPI zum laufen gebracht.
Ich wollte jetzt über den Seriellen Monitor die Configuration Bytes der Wandler
in das interne EE-Prom übertragen und nach Reset mit den neuen Werten die
Wandler betreiben. Verstärkung, Auflösung usw.
funktionierte einigermaßen aber neue änderungen im Programm kann ich nicht mehr
in den Mega hochladen.
Das Problem hatte ich schon mal, aber es fuktionierte plötzlich wieder.
Im Moment keine reaktion beim up-load mehr. Das Display zeigt 2 schwarze Reihen.
Habe schon anderen Rechner genommen aber auch kein Erfolg.
Wieviel mal kann man eigentlich Programme in den Mega laden.
Habe mal überschlagen so ca. 500 mal habe ich schon verschiedene Programme
hochgeladen.
Ist eventl. der Bootlader vom Seriellen Monitor gekillt worden.
Überlege gerade ob ich mir ISP-Programmer besorgen soll.
Hat jemand eine Idee?
Dank im vorraus.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.11.2014, 23:01
Beitrag #2
RE: Up-Load funktioniert nicht mehr
Ich habe den Fehler gefunden, kann es mir aber nicht erklären.
Nachfolgend der Programmteil:

void EE_Prom_Werte_Schreiben() {
EEPROM.write(1, Werte[1]); // Configuration K1
EEPROM.write(2, Werte[2]); // Configuration K2
EEPROM.write(3, Werte[3]); // Configuration K3
EEPROM.write(4, Werte[4]); // Configuration K4
EEPROM.write(5, Werte[5]); // Kanal Auswahl
// Serial.print(" Werte nach EE-Prom Geschrieben !!!");
// Serial.print(" "); Serial.print(EEPROM.read(1)); Serial.print(" ");
// Serial.print(EEPROM.read(2)); Serial.print(" "); Serial.print(EEPROM.read(3)); Serial.print(" ");
// Serial.print(EEPROM.read(4)); Serial.print(" Index "); Serial.println(Index);
}

Wenn ich folgende Programmzeile aktiviere bleibt der Ladebalken unten rechts am rechten Rand stehen und der Button
"Upload" bleibt gelb.
// Serial.print(" Werte nach EE-Prom Geschrieben !!!");
Am Display wird nach Abziehen und anschließender Stecken der USB-Verbindung, das Display blank.
Nach deaktivieren der Zeile und anschließendem UP-Load funktioniert alles wieder ohne Probleme ????????????
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.11.2014, 20:41
Beitrag #3
RE: Up-Load funktioniert nicht mehr
Hallo
Das mit dem herausnehmen des Serial Print, ist nicht logisch.
Gabs Fehlermeldungen beim Kompilieren?
Funktioniert es mit einem anderen Mega?
Dies ist ja auch nur ein Codeschipsel.
Wie groß ist das Programm, und wurde Serial initialisiert?
Ohne den Code gesehen zu haben, ergeben sich, wie Du sehen kannst, viele Fragen.
Gruß Joe

Unser Projekt Rolleyes http://global-science-circle.net http://global-science-circle.org http://global-science-circle.info UND http://radio-gsc1.info
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.11.2014, 11:58
Beitrag #4
RE: Up-Load funktioniert nicht mehr
Habe herausgefunden das wenn ich die 3 !!! im Anzeigestring weglasse alles ohne
Probleme funktioniert.
Anbei der kompl. Sketch.
Im Monitor kann man im Sendestring folgendes einstellen.
156,188,220,252,15,e,g,s,x
Die ersten 4 Zahlen stehen für die Configuration der 4 Messkanäle
Die 5. Zahl bedeutet, 1=K1, 2=K2, 4=K3, 8=K4. ZB. 12=K3+K4
e= Die eingegebene Configuration nach EE-Prom. Beim Neustart werden diese benutzt.
g= Grundwerte gesetzt und ins EE-Prom geschrieben.
s= Werte werden im Programm benutzt aber nicht ins EE-Prom geschrieben.
x= Ende des Eingabestring. x muss immer als letztes Eingegeben werden.

159,188,220,252,4,s,x bedeutet.
Kanal 1 = Verstärkung x 8, 4Messungen / Sekunde.
Kanal 2-4 = Verstärkung x 1, 4Messungen / Sekunde.
Angezeigt und gemessen wird nur Kanal 3.

Sketch:
Code:
#include <LiquidCrystal.h>
//#include <Timer1.h>
#include <Wire.h>
#include <EEPROM.h>
//-----------------------------------------------
LiquidCrystal lcd(12, 11, 2, 3, 4, 5); // Festlegung der Ausgaenge
byte HB = 0;    // High Byte Messwert
byte MB = 0;    // Mittel Byte Messwert
byte LB = 0;    // Low Byte Messwert
byte Co = 0;    // Configurations Register aktueller Wert
long Erg = 0;   // Zwischenergebnis Messwert binaer
double Ana;
long Komma;
String Nullen = " ";
byte Werte[10];
byte Conf[10];
int Index = 1;
byte i = 0;         // For-Next-Schleifen
byte Ka = 0;        // Auswahl Messkanal
byte M0 = 0;        // Verstaerkung 1-2-4-8
byte M1 = 0;        // Aufloesung 12-14-16-18 Wert 0-3
byte M2 = 0;        // Auswahl bei Monitoreingabe
byte M3 = 0;        // Index Conf.Byte 1-4
//###############################
####################
void setup() {
lcd.begin(20, 4); // Display 20 Zeichen, 4 Zeilen
analogReference(INTERNAL2V56); // Interne 2,56 Volt Referenzspannung
Serial.begin(115200); // Schnittstelle bit/Sekunde
Wire.begin();
lcd.clear();
// for(i=0; i <= 9; i++) Conf[i] = 0;
// Conf[1] = 156; Conf[2] = 188; Conf[3] = 220; Conf[4] = 252; // Grundwerte
// for(i=0; i <= 9; i++) Werte[i] = 0;
// Conf[5] = 15; // Alle 4 Kanaele angewaehlt
lcd.setCursor(0, 0); lcd.print("K1="); lcd.setCursor(16, 0); lcd.print("Volt");
lcd.setCursor(0, 1); lcd.print("K2="); lcd.setCursor(16, 1); lcd.print("Volt");
lcd.setCursor(0, 2); lcd.print("K3="); lcd.setCursor(16, 2); lcd.print("Volt");
lcd.setCursor(0, 3); lcd.print("K4="); lcd.setCursor(16, 3); lcd.print("Volt");
if(EEPROM.read(5) == 0) EE_Prom_Grundwerte_Schreiben();
EE_Prom_Werte_Lesen(); // Configurationswerte Laden
// EE_Prom_Grundwerte(); // Standart Konfig. nach EE-Prom
}
//###################################################
void loop() {
if ( Serial.available() ) {
Index = 1;
M2 = 0;
EE_Prom_NeueWerte();
}
Serial.print(" Configuration "); Serial.println(Conf[5]);

if (bitRead(Conf[5], 0) == 1) { // Anwahl Kanal 1
Ka = 1; // Kanal 1
Messwerte_MCP(); // Messen Kanal 1, Verstaerkung und Aufloesung ermitteln
if (M1 == 0) Aufloesung_12_Bit(); // Ergebnis errechnen und anzeigen
if (M1 == 1) Aufloesung_14_Bit(); // Ergebnis errechnen und anzeigen
if (M1 == 2) Aufloesung_16_Bit(); // Ergebnis errechnen und anzeigen
if (M1 == 3) Aufloesung_18_Bit(); // Ergebnis errechnen und anzeigen
Serial.print(" K1= "); Serial.print(Erg); // An der Schnittstelle ausgeben
}
if (bitRead(Conf[5], 1) == 1) { // Anwahl Kanal 1
Ka = 2; // Kanal 2
Messwerte_MCP(); // Messen Kanal 1, Verstaerkung und Aufloesung ermitteln
if (M1 == 0) Aufloesung_12_Bit(); // Ergebnis errechnen und anzeigen
if (M1 == 1) Aufloesung_14_Bit(); // Ergebnis errechnen und anzeigen
if (M1 == 2) Aufloesung_16_Bit(); // Ergebnis errechnen und anzeigen
if (M1 == 3) Aufloesung_18_Bit(); // Ergebnis errechnen und anzeigen
Serial.print(" K2= "); Serial.print(Erg); // An der Schnittstelle ausgeben
}
if (bitRead (Conf[5], 2) == 1) { // Anwahl Kanal 1
Ka = 3; // Kanal 3
Messwerte_MCP(); // Messen Kanal 1, Verstaerkung und Aufloesung ermitteln
if (M1 == 0) Aufloesung_12_Bit(); // Ergebnis errechnen und anzeigen
if (M1 == 1) Aufloesung_14_Bit(); // Ergebnis errechnen und anzeigen
if (M1 == 2) Aufloesung_16_Bit(); // Ergebnis errechnen und anzeigen
if (M1 == 3) Aufloesung_18_Bit(); // Ergebnis errechnen und anzeigen
Serial.print(" K3= "); Serial.print(Erg); // An der Schnittstelle ausgeben
}
if (bitRead (Conf[5], 3) == 1) { // Anwahl Kanal 1
Ka = 4; // Kanal 4
Messwerte_MCP(); // Messen Kanal 1, Verstaerkung und Aufloesung ermitteln
if (M1 == 0) Aufloesung_12_Bit(); // Ergebnis errechnen und anzeigen
if (M1 == 1) Aufloesung_14_Bit(); // Ergebnis errechnen und anzeigen
if (M1 == 2) Aufloesung_16_Bit(); // Ergebnis errechnen und anzeigen
if (M1 == 3) Aufloesung_18_Bit(); // Ergebnis errechnen und anzeigen
Serial.print(" K4= "); Serial.print(Erg); // An der Schnittstelle ausgeben
}
Serial.println(" Ende");
}
//##################################################
void Messwerte_MCP() {
Neu: // ------------------------------ K1 ----------------------------------
Wire.beginTransmission(104); // Adresse MCP
Wire.write(Conf[Ka]); // config register %1001 1100
Wire.endTransmission();
Wire.requestFrom(104, 4); // Lesen von MCP3424 4 Byte
if (Wire.available() != 4) { // Test ungleich 4, 4 Byte Messwert Ok
Serial.println("Wire.available failed");
}
HB = Wire.read(); // High-Byte
MB = Wire.read(); // Mittel Byte
LB = Wire.read(); // Low-Byte
Co = Wire.read(); // Configuration
if (Co > 127) goto Neu; // Fehler neue Abfrage
M0 = 1 << (Conf[Ka] & 3); // Ermittel Verstaekung 1,2,4,8
M1 = (Conf[Ka] >> 2) & 3; // 0-3 Aufloesung 12-18 Bit
}
//###################################################
void Aufloesung_12_Bit() {
if (bitRead(HB, 3) == 0) // 0 = Messwert positiv
{
Erg = 0;
Erg = HB & 7; // 17.Bit bleibt, rest 0
Erg = Erg << 8; // Erg 8 bit nach links. Rechts 8bit 0
Erg = Erg | MB; // MB bitweise OR
Ana = ((2.048 / 2047) * Erg) / M0;
Vor_Nachkomma_Stelle();
lcd.setCursor(4, Ka-1); lcd.print(" ");
lcd.setCursor(5, Ka-1);
lcd.print(HB); lcd.print("."); lcd.print(Nullen); lcd.print(Komma);
}
else
{
Erg = -256; // Messwerte negativ
Erg = Erg | HB;
Erg = Erg << 8;
Erg = Erg | MB;
Ana = ((-2.048 / 2048) * Erg) / M0;
Vor_Nachkomma_Stelle();
lcd.setCursor(3, Ka-1); lcd.print(" ");
lcd.setCursor(4, Ka-1);
lcd.print("-"); lcd.print(HB); lcd.print("."); lcd.print(Nullen); lcd.print(Komma);
}
}
//###################################################
void Aufloesung_14_Bit() {
if (bitRead(HB, 5) == 0) // 0 = Messwert positiv
{
Erg = 0;
Erg = HB & 31; // 17.Bit bleibt, rest 0
Erg = Erg << 8; // Erg 8 bit nach links. Rechts 8bit 0
Erg = Erg | MB; // MB bitweise OR
Ana = ((2.048 / 8191) * Erg) / M0;
Vor_Nachkomma_Stelle();
lcd.setCursor(4, Ka-1); lcd.print(" ");
lcd.setCursor(5, Ka-1);
lcd.print(HB); lcd.print("."); lcd.print(Nullen); lcd.print(Komma);
}
else
{
Erg = -256; // Messwerte negativ
Erg = Erg | HB;
Erg = Erg << 8;
Erg = Erg | MB;
Ana = ((-2.048 / 8192) * Erg) / M0;
Vor_Nachkomma_Stelle();
lcd.setCursor(3, Ka-1); lcd.print(" ");
lcd.setCursor(4, Ka-1);
lcd.print("-"); lcd.print(HB); lcd.print("."); lcd.print(Nullen); lcd.print(Komma);
}

}
//###################################################
void Aufloesung_16_Bit() {
if (bitRead(HB, 7) == 0) // 0 = Messwert positiv
{
Erg = 0;
Erg = HB & 127; // 17.Bit bleibt, rest 0
Erg = Erg << 8; // Erg 8 bit nach links. Rechts 8bit 0
Erg = Erg | MB; // MB bitweise OR
Ana = ((2.048 / 32767) * Erg) / M0;
Vor_Nachkomma_Stelle();
lcd.setCursor(4, Ka-1); lcd.print(" ");
lcd.setCursor(5, Ka-1);
lcd.print(HB); lcd.print("."); lcd.print(Nullen); lcd.print(Komma);
}
else
{
Erg = -256; // Messwerte negativ
Erg = Erg | MB;
Erg = Erg << 8;
Erg = Erg | LB;
Ana = ((-2.048 / 32768) * Erg) / M0;
Vor_Nachkomma_Stelle();
lcd.setCursor(3, Ka-1); lcd.print(" ");
lcd.setCursor(4, Ka-1);
lcd.print("-"); lcd.print(HB); lcd.print("."); lcd.print(Nullen); lcd.print(Komma);
}

}
//###################################################
void Aufloesung_18_Bit() {
if (bitRead(HB, 1) == 0) // 0 = Messwert positiv
{
Erg = 0;
Erg = HB & 1; // 17.Bit bleibt, rest 0
Erg = Erg << 8; // Erg 8 bit nach links. Rechts 8bit 0
Erg = Erg | MB; // MB bitweise OR
Erg = Erg << 8; // Erg 8 bit nach links. Rechts 8bit 0
Erg = Erg | LB; // LB bitweise OR
Ana = ((2.048 / 131071) * Erg) / M0;
Vor_Nachkomma_Stelle();
lcd.setCursor(4, Ka-1); lcd.print(" ");
lcd.setCursor(5, Ka-1);
lcd.print(HB); lcd.print("."); lcd.print(Nullen); lcd.print(Komma);
}
else
{
Erg = -256; // Messwerte negativ
Erg = Erg | MB;
Erg = Erg << 8;
Erg = Erg | LB;
Co =(HB & 1); if(Co == 0) bitClear(Erg, 16);
Ana = ((-2.048 / 131072) * Erg) / M0;
Vor_Nachkomma_Stelle();
lcd.setCursor(3, Ka-1); lcd.print(" ");
lcd.setCursor(4, Ka-1);
lcd.print("-"); lcd.print(HB); lcd.print("."); lcd.print(Nullen); lcd.print(Komma);
}
}
//###################################################
void Vor_Nachkomma_Stelle() {
HB = long (Ana);
Komma = long((Ana*1000000)-(HB*1000000));
if (Komma < 10 ) Nullen = "00000";
if (Komma < 100 && Komma >= 10) Nullen = "0000";
if (Komma < 1000 && Komma >= 100) Nullen = "000";
if (Komma < 10000 && Komma >= 1000) Nullen = "00";
if (Komma < 100000 && Komma >= 10000) Nullen = "0";
if (Komma < 1000000 && Komma >= 100000) Nullen = "";
}
// ################################################
void EE_Prom_Grundwerte_Schreiben() { // bei ,g, Grundwerte setzen
EEPROM.write(1, 156); // Grundwerte K1 Setzen
EEPROM.write(2, 188); // Grundwerte K2 Setzen
EEPROM.write(3, 220); // Grundwerte K3 Setzen
EEPROM.write(4, 252); // Grundwerte K4 Setzen
EEPROM.write(5, 15); // Grundwert alle 4 Kanaele
// Serial.println(" Grundwerte gespeichert");
}
//###################################################
void EE_Prom_Werte_Lesen() { // Letzte ueberbertragene Werte beim Einschalten lesen
Conf[1] = EEPROM.read(1); // MCP3424 Configuration K1
Conf[2] = EEPROM.read(2); // MCP3424 Configuration K2
Conf[3] = EEPROM.read(3); // MCP3424 Configuration K3
Conf[4] = EEPROM.read(4); // MCP3424 Configuration K4
Conf[5] = EEPROM.read(5); // Kanal Auswahl
// Serial.print(" Start ");
}
//###################################################
void EE_Prom_Werte_Schreiben() {
EEPROM.write(1, Werte[1]); // Configuration K1
EEPROM.write(2, Werte[2]); // Configuration K2
EEPROM.write(3, Werte[3]); // Configuration K3
EEPROM.write(4, Werte[4]); // Configuration K4
EEPROM.write(5, Werte[5]); // Kanal Auswahl
Serial.println(" Werte nach EE-Prom Geschrieben "); // (" Werte nach EE-Prom Geschrieben !!! ")
}
//###################################################
void EE_Prom_NeueWerte() { // Eingabestring 156,188,220,252,15,egs,x z.B.
// Konfiguration der 4 Kanaele Verstaerkung-Aufloesung-usw.
while (Serial.available() > 0)
{
char ch = Serial.read();
if (ch >= '0' && ch <= '9') {
Werte[Index] = (Werte[Index] * 10) + (ch - '0'); } // Zahlen 0-9
if (ch == ',' || ch == ' ') Index++; // Weiterschalten naechstes Konfig. Byte
if (ch == 'e') bitSet(M2, 0); // Wenn 'e' 1= nach EE-Prom schreiben
if (ch == 'g') bitSet(M2, 1); // Wenn 'g' 2= Grundwerte speichern
if (ch == 's') bitSet(M2, 2); // Wenn 's' 4= Werte nach Config Variablen
if (ch == 'x') { // x letztes Zeichen im Eingabestring
if (bitRead(M2, 0) == 1) EE_Prom_Werte_Schreiben();
if (bitRead(M2, 1) == 1) EE_Prom_Grundwerte_Schreiben();
if (bitRead(M2, 2) == 1) { // Werte nach Config Variablen
Conf[1] = Werte[1]; Conf[2] = Werte[2]; Conf[3] = Werte[3];
Conf[4] = Werte[4]; Conf[5] = Werte[5];
Serial.print(" Neue Werte "); Serial.print(" Index "); Serial.println(Index);
}
break;
}
}
for(i=0; i <= 9; i++) Werte[i] = 0;
Index = 1;
Serial.println(" Werte uebernommen");
}
// ################################################
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.11.2014, 15:48
Beitrag #5
RE: Up-Load funktioniert nicht mehr
Hallo Nachtrag:
Für den A/D-Wandler benutze ich den Typ MCP3424.
4 Kanäle.
Einstellbare Auflösung 12-18 bit
I2C.
4 Adressen einstellbar
Interne Verstärkung 1-2-4-8 fach
Interne Ref. 2,048 Volt
Messpannung +/-
Im Datenblatt können die Werte für Adresse und Config.Byte eingesehen werden.
Viel Glück mit Nachbau.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino lässt sich nicht installieren bergfrei 4 147 20.11.2016 18:34
Letzter Beitrag: bergfrei
  Arduino Mega 2560 läuft nicht Wolfgang50 6 185 13.11.2016 10:50
Letzter Beitrag: Wolfgang50
  Ardublock übertragt nicht an IDE oder UNO R3 tobi83 5 345 16.10.2016 14:07
Letzter Beitrag: Pit
  Upload funktioniert nicht Levi 5 247 22.09.2016 20:19
Letzter Beitrag: hotsystems
  ESP8266 tuts nicht sowerum 7 396 19.09.2016 21:01
Letzter Beitrag: sowerum
  If-Bedingung funktioniert nicht bei Serial1.write Datatom 6 226 16.09.2016 20:36
Letzter Beitrag: Datatom
  SD Karte wird nicht erkannt... Maxi290997 2 208 16.08.2016 14:36
Letzter Beitrag: Maxi290997
  Arduino lässt sich nicht mehr beschreiben Maxi290997 15 984 07.08.2016 11:40
Letzter Beitrag: Maxi290997
  Arduino Uno+Motor Shield+Velleman Mustercode funktionieren nicht Dubidu 8 489 20.07.2016 19:05
Letzter Beitrag: Scheams
  Sketch konnte nicht angelegt werden Sarius 2 241 16.07.2016 15:59
Letzter Beitrag: Sarius

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste