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 https://global-science-circle.net http://global-science-circle.info http://global-science-circle.de http://radio-gsc1.info und neuerdings https://gch.global https://entsalzung.gch.global
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
  NeoPixels: Sketch will nicht - Problem mit delay? Zabsi 5 329 22.08.2017 15:17
Letzter Beitrag: Tommy56
  BME280 - Luftdruckoffset nicht einstellbar ? Stargazer 17 994 13.08.2017 15:38
Letzter Beitrag: hotsystems
  Arduino funktioniert immer erst nach reset Maxi290997 11 910 25.07.2017 09:38
Letzter Beitrag: Maxi290997
  Ich komme mit millis nicht weiter !!! Gonmaus 8 736 09.07.2017 21:24
Letzter Beitrag: Tommy56
  WEMOS Motorshield funzt nicht Rumpl-X 8 568 07.06.2017 21:10
Letzter Beitrag: Tommy56
  LCD geht nicht - keine Ahnung warum?? DL1AKP 12 836 15.05.2017 13:17
Letzter Beitrag: DL1AKP
  433mHz Funkmodule senden/empfangen nicht metzgefa 2 721 06.05.2017 13:30
Letzter Beitrag: metzgefa
  SD Karte wird nicht erkannt Maxi290997 6 431 31.03.2017 06:05
Letzter Beitrag: Bitklopfer
Sad Sketch funktioniert auf dem Mega 2560 nicht Frank1234 16 1.139 26.03.2017 14:15
Letzter Beitrag: oOSpikeOo
  Mein Skript macht nicht das was es soll ;( DerMatze79 4 502 16.03.2017 22:19
Letzter Beitrag: MicroBahner

Gehe zu:


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