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
Sketch läuft nur frisch aufgespielt
30.08.2014, 22:17
Beitrag #1
Sad Sketch läuft nur frisch aufgespielt
Hallo Leute,
mein Sketch läuft komischerweise nur frisch aufgespielt.
Wenn ich das USB Kabel abziehe und erneut verbinde, dann bleibt der Sketch hängen.
Auch geht es nicht mit einer externen Stromversorgung.
Hat jemand eine Idee wo es dran hängen könnte?

Bei meinem Sketch handelt es sich um ein Progamm, was die Counts von meinem Geigerzähler in uSv/h umrechnet.

Code:
// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(3,4,5,6,7,8);

// Conversion factor - CPM to uSV/h
#define CONV_FACTOR 0.00812

// Variables
int geiger_input = 2;
long count = 0;
long countPerMinute = 0;
long timePrevious = 0;
long timePreviousMeassure = 0;
long time = 0;
long countPrevious = 0;
float radiationValue = 0.0;

void setup(){
  pinMode(geiger_input, INPUT);
  digitalWrite(geiger_input,HIGH);
  for (int i=0;i<5;i++){
    
  }

  Serial.begin(19200);

  //set up the LCD\'s number of columns and rows:
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(" Wetterstation- ");
  lcd.setCursor(0,1);
  lcd.print(" Geigerzaehler  ");  
  delay(3000);

  lcd.clear();
  lcd.setCursor(0,1);  
  lcd.print("www.ederseewetter.de");
  delay(500);
  for (int i=0;i<5;i++){
    delay(200);  
    lcd.scrollDisplayLeft();
  }
  delay(500);


  lcd.clear();  
  lcd.setCursor(0, 0);
  lcd.print("CPM=");
  lcd.setCursor(4,0);
  lcd.print(6*count);
  lcd.setCursor(0,1);
  lcd.print(radiationValue);

  attachInterrupt(0,countPulse,FALLING);

}

void loop(){
  if (millis()-timePreviousMeassure > 10000){           //15000 Millisekunden sind 15 Sekunden = Die Zeit wo gezählt wird
    countPerMinute = 6*count;                           //Das ganze mal 4 ergibt hochgerechnet die Count`s pro Minute
    radiationValue = countPerMinute * CONV_FACTOR;      //Hier wird Multiplizier mal den Faktor für uSv/h
    timePreviousMeassure = millis();
    Serial.print("cpm = ");
    Serial.print(countPerMinute,DEC);
    Serial.print(" - ");
    Serial.print("uSv/h = ");
    Serial.println(radiationValue,4);      
    lcd.clear();    
    lcd.setCursor(0, 0);
    lcd.print("CPM=");
    lcd.setCursor(4,0);
    lcd.print(countPerMinute);
    lcd.setCursor(0,1);
    lcd.print(radiationValue,4);
    lcd.setCursor(6,1);
    lcd.print(" uSv/h");

  

    count = 0;

  }

}

void countPulse(){
  detachInterrupt(0);
  count++;
  while(digitalRead(2)==0){
  }
  attachInterrupt(0,countPulse,FALLING);
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.08.2014, 22:52
Beitrag #2
RE: Sketch läuft nur frisch aufgespielt
(30.08.2014 22:17)Thrillhouse schrieb:  Hallo Leute,
mein Sketch läuft komischerweise nur frisch aufgespielt.
Wenn ich das USB Kabel abziehe und erneut verbinde, dann bleibt der Sketch hängen.
Auch geht es nicht mit einer externen Stromversorgung.
Hat jemand eine Idee wo es dran hängen könnte?

Bei meinem Sketch handelt es sich um ein Progamm, was die Counts von meinem Geigerzähler in uSv/h umrechnet.

Code:
// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(3,4,5,6,7,8);

// Conversion factor - CPM to uSV/h
#define CONV_FACTOR 0.00812

// Variables
int geiger_input = 2;
long count = 0;
long countPerMinute = 0;
long timePrevious = 0;
long timePreviousMeassure = 0;
long time = 0;
long countPrevious = 0;
float radiationValue = 0.0;

void setup(){
  pinMode(geiger_input, INPUT);
  digitalWrite(geiger_input,HIGH);
  for (int i=0;i<5;i++){
    
  }

  Serial.begin(19200);

  //set up the LCD\'s number of columns and rows:
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(" Wetterstation- ");
  lcd.setCursor(0,1);
  lcd.print(" Geigerzaehler  ");  
  delay(3000);

  lcd.clear();
  lcd.setCursor(0,1);  
  lcd.print("www.ederseewetter.de");
  delay(500);
  for (int i=0;i<5;i++){
    delay(200);  
    lcd.scrollDisplayLeft();
  }
  delay(500);


  lcd.clear();  
  lcd.setCursor(0, 0);
  lcd.print("CPM=");
  lcd.setCursor(4,0);
  lcd.print(6*count);
  lcd.setCursor(0,1);
  lcd.print(radiationValue);

  attachInterrupt(0,countPulse,FALLING);

}

void loop(){
  if (millis()-timePreviousMeassure > 10000){           //15000 Millisekunden sind 15 Sekunden = Die Zeit wo gezählt wird
    countPerMinute = 6*count;                           //Das ganze mal 4 ergibt hochgerechnet die Count`s pro Minute
    radiationValue = countPerMinute * CONV_FACTOR;      //Hier wird Multiplizier mal den Faktor für uSv/h
    timePreviousMeassure = millis();
    Serial.print("cpm = ");
    Serial.print(countPerMinute,DEC);
    Serial.print(" - ");
    Serial.print("uSv/h = ");
    Serial.println(radiationValue,4);      
    lcd.clear();    
    lcd.setCursor(0, 0);
    lcd.print("CPM=");
    lcd.setCursor(4,0);
    lcd.print(countPerMinute);
    lcd.setCursor(0,1);
    lcd.print(radiationValue,4);
    lcd.setCursor(6,1);
    lcd.print(" uSv/h");

  

    count = 0;

  }

}

void countPulse(){
  detachInterrupt(0);
  count++;
  while(digitalRead(2)==0){
  }
  attachInterrupt(0,countPulse,FALLING);
}

Hi,
also was mir auffällt ist das du in der Interrupt Servicereoutine dettach une attach Interrupt verwendest Sad , also um Interrupts zu unterbinden und wieder freizugeben sind die Befehle noInterrupts() und interrupts() vorgesehen. Auch macht es sich schick am Ende der Setup Routine mit interrupts() die Interrupts auch freizugeben. Habe es noch nicht verifiziert ob mit der Interruptdeklaration schon die Interrupts auch freigegeben sind.
In der Int-Serviceroutine bringt das sperren der Interrupts aber nichts da der Atmega in der Zeit eh keinen anderen Interrupt annimmt.
Ansonsten müßte dein Sketch laufen. delay() wird durch den Interrupt unterbrochen was wir neulich hier schon mal verifiziert haben.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.08.2014, 12:51
Beitrag #3
RE: Sketch läuft nur frisch aufgespielt
Es läuft! ich hatte ein Kabel vom Trigger dummerweise in der Digitalen-Erde
Das hat natürlich das Programm gestoppt weil die Schwelle nicht mehr erreicht wurde
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Brauche einen Sketch zum Testen HDT 12 585 22.06.2017 07:37
Letzter Beitrag: HDT
  Sketch ändern für ACS712 Sandro2504 3 262 04.06.2017 05:55
Letzter Beitrag: Bitklopfer
  arduino sketch Fuhsering 11 559 30.03.2017 12:47
Letzter Beitrag: hotsystems
Sad Sketch funktioniert auf dem Mega 2560 nicht Frank1234 16 890 26.03.2017 14:15
Letzter Beitrag: oOSpikeOo
  Probleme mit einem Sketch für einen LED Cube 5x5x5 Frank1234 5 401 13.03.2017 12:12
Letzter Beitrag: Tommy56
  Problem mit Sketch senden an Uno feuerwehr 5 806 31.01.2017 20:41
Letzter Beitrag: Tommy56
  Sketch geht,geht nicht? malsehen 0 369 25.12.2016 21:24
Letzter Beitrag: malsehen
  Text läuft wie verrückt Atwist 12 521 20.11.2016 18:41
Letzter Beitrag: Tommy56
  Arduino Mega 2560 läuft nicht Wolfgang50 6 571 13.11.2016 10:50
Letzter Beitrag: Wolfgang50
  Sketch vom Arduino Board Herunterladen Sarius 2 679 27.07.2016 15:26
Letzter Beitrag: Sarius

Gehe zu:


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