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
  Text läuft wie verrückt Atwist 12 205 20.11.2016 18:41
Letzter Beitrag: Tommy56
  Arduino Mega 2560 läuft nicht Wolfgang50 6 172 13.11.2016 10:50
Letzter Beitrag: Wolfgang50
  Sketch vom Arduino Board Herunterladen Sarius 2 341 27.07.2016 15:26
Letzter Beitrag: Sarius
  Sketch konnte nicht angelegt werden Sarius 2 237 16.07.2016 15:59
Letzter Beitrag: Sarius
  SHT21 in Sketch integrieren PrinzEisenherz1 6 589 06.04.2016 14:38
Letzter Beitrag: PrinzEisenherz1
Question Arduino Pro Micro verlangt keyboard.h im sketch weinema 0 308 01.03.2016 19:04
Letzter Beitrag: weinema
  Sketch läßt sich nicht hochladen - not in sync Stephan_56 20 1.768 17.01.2016 23:00
Letzter Beitrag: Bitklopfer
  Sketch VOM Mega IN die IDE holen? torsten_156 9 703 05.01.2016 15:41
Letzter Beitrag: René Hitz
  LED-Fade Sketch Hilgi 6 746 14.12.2015 11:00
Letzter Beitrag: Hilgi
  8x7 Segment LED Anzeige / Sketch verändern w1ck3d 3 638 23.11.2015 17:56
Letzter Beitrag: hotsystems

Gehe zu:


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