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
  sketch Bewaesserungsanlage golex 5 280 08.05.2018 17:19
Letzter Beitrag: KampfHund
  upload sketch ab EEPROM ADDRESS xx sepp01 2 198 06.05.2018 23:12
Letzter Beitrag: sepp01
  Nachtwächter - Fehler im Sketch juergen001 15 784 24.04.2018 06:54
Letzter Beitrag: juergen001
  Brauch hilfe bei einnem Sketch MrMagoo 10 619 11.02.2018 13:49
Letzter Beitrag: hotsystems
  Echtzeituhrmodul läuft nicht scritch 64 3.596 28.01.2018 14:16
Letzter Beitrag: Tommy56
  Sketch kleiner und effektiver gestalten? Gonmaus 4 487 26.01.2018 23:41
Letzter Beitrag: Tommy56
  Arduino Sketch mit ArduBlock öffnen bertl68 4 584 04.01.2018 15:08
Letzter Beitrag: Binary1
  NeoPixels: Sketch will nicht - Problem mit delay? Zabsi 5 881 22.08.2017 15:17
Letzter Beitrag: Tommy56
  Brauche einen Sketch zum Testen HDT 12 1.464 22.06.2017 07:37
Letzter Beitrag: HDT
  Sketch ändern für ACS712 Sandro2504 3 564 04.06.2017 05:55
Letzter Beitrag: Bitklopfer

Gehe zu:


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