Re: Reset button

Hi zusammen mal ne dumme Frage :-)

ich habe einen größeren Sketch geschrieben um viele Pixels auszulesen also eine Datenmenge von über 2000 bytes, da mein thermopile array so viele Daten halt hat. der sketch funktioniert einwandfrei nach neuem hochladen sehe ich schön alle Daten auf der BusLeitung mit meinem OSZI.

Wenn ich jedoch den Reset knopf drücke ladet der arduino Uno den Sketch neu, zeigt mir auf der Busleitung aber nur die vorab einstellungen der Kalibrierung an und nicht die großen ausgelesenen Datenmengen.

Bei kleineren Datenmengen sprich wenn ich nicht das komplette Paket auslese sondern zB. nur 258 bytes wird über den Reset Button alles sauber neu geladen.

Weis jemand woran das liegt dachte der Reset Knopf ist das gleiche wie neu hochladen. PS. das passiert nur wenn ich die Funktionen in void setup () zum einmaligen laden schreibe. In der Loop zeigt mir die Busleitung nach jedem Reset natürlich kontinuierlich alle Daten an wie es sich gehört.

Gruß Beni

Hi zusammen mal ne dumme Frage :-)

Tante Edit sagt: Gibts einen besonderen Grund, warum du Thread hijacking betreibst?

Hab Deinen Beitrag in einen neuen Tread geschoben weil er wirklich nichts mit dem anderen zu tun hatte. Grüße Uwe

ja ihr habt recht mea culpa :D

weis aber jemand woran das liegen kann ?

benji1089: weis aber jemand woran das liegen kann ?

Nöö, ich nicht!

Ich sehe keine Schaltung, keinen Code, und meine Kristallkugel ist gerade in Urlaub.,

#include <i2cmaster.h>


unsigned char data[300], data2[300],EEPROM_DATA[5];



void wake_up(){

  i2c_start_wait(AdrPTATGrad);
  i2c_write(0x01);  
  i2c_write(0x01);
  i2c_stop ();
  delay(5);
  }



void readcalibdata(){

byte highadd = 0x00;
byte lowadd = 0x1A;

  i2c_start_wait(AdrEEPROM);
  i2c_write (highadd); 
  i2c_write (lowadd);
  i2c_rep_start(0xA1); 

  for(int i=0;i<5;i++){
  EEPROM_DATA[i]= i2c_readAck();   
    } 

  i2c_stop();
 
  delay(5); 
  }

void read_thermalGRADIENT(){
signed short ThGrad[Pixel]; 
byte highadd = 0x00;
byte lowadd = 0x1A;

  i2c_start_wait(AdrEEPROM);
  i2c_write (highadd); 
  i2c_write (lowadd);
  i2c_rep_start(0xA1);
  for(int i=0;i<Pixel;i++){ 
ThGrad[i]=i2c_readAck(); 
 Serial.println(ThGrad[Pixel],HEX);
    }
  }





void MBIT_calib(){
  
  byte MBIT;
  MBIT=EEPROM_DATA[0];
  
  i2c_start_wait(AdrPTATGrad);
  i2c_write(0x03);  
  i2c_write(MBIT);
  i2c_stop ();
  delay(5);
  }


void BIAS_calib(){

  byte BIAS;
  BIAS=EEPROM_DATA[1];
  
  i2c_start_wait(AdrPTATGrad);
  i2c_write(0x04);  
  i2c_write(BIAS);
  i2c_stop ();
  delay(5);
  i2c_start_wait(AdrPTATGrad);
  i2c_write(0x05);  
  i2c_write(BIAS);
  i2c_stop ();
  delay(5);
  }

void CLK_calib(){

  byte CLK;
  CLK=EEPROM_DATA[2];
  
  i2c_start_wait(AdrPTATGrad);
  i2c_write(0x06);  
  i2c_write(CLK);
  i2c_stop ();
  delay(5);
  } 

void BPA_calib(){

  byte BPA;
  BPA=EEPROM_DATA[3];
  
  i2c_start_wait(AdrPTATGrad);
  i2c_write(0x07);  
  i2c_write(BPA);
  i2c_stop ();
  delay(5);
  i2c_start_wait(AdrPTATGrad);
  i2c_write(0x08);  
  i2c_write(BPA);
  i2c_stop ();
  delay(5);
  }

void PU_calib(){

  byte PU;
  PU=EEPROM_DATA[4];
  
  i2c_start_wait(AdrPTATGrad);
  i2c_write(0x09);  
  i2c_write(PU);
  i2c_stop ();
  delay(5);
  }

void START_Wakeup(){
static unsigned char currentReadBlock;  
  for(int a ;a<4;a++)   {
  i2c_start_wait(AdrPTATGrad);
  i2c_write(0x01);  
  i2c_write((currentReadBlock<<4)|0x09);
  i2c_stop ();


  
  if(currentReadBlock>3){
     currentReadBlock=0;
    }
  else{
   READ_data(); 
    }
   currentReadBlock++; 
   
    }
    }


void READ_data(){


STATUS_reg();

  i2c_start_wait(AdrPTATGrad);
  i2c_write(0x0A);
  i2c_rep_start(0x35);  
   for(int i=0;i<258;i++){
  if(i==257){
      data[i]=i2c_readNak();
    }
  else{
      data[i]=i2c_readAck();
    }
    }
   i2c_stop ();

   

 
STATUS_reg();
 
  i2c_start_wait(AdrPTATGrad);
  i2c_write(0x0B);
  i2c_rep_start(0x35);  
   for(int i=0;i<258;i++){
  if(i==257){
      data2[i]=i2c_readNak();
   }
  else{
      data2[i]=i2c_readAck();
   }
   }
   i2c_stop ();
   }

   








void STATUS_reg(){
  byte EOC;
  delay(30);
  i2c_start_wait(AdrPTATGrad);
  i2c_write(0x02);  
  i2c_rep_start(0x35);
  EOC=i2c_readAck(); 
  i2c_stop ();

  delay(30);
 
}


void setup() {
  Serial.begin(9600);
  i2c_init();
  wake_up();
  readcalibdata();
  MBIT_calib();
  BIAS_calib();
  CLK_calib();
  BPA_calib();
  PU_calib();
  START_Wakeup();
 
}


void loop() {

}

Hier der code:

Wenn ich bei START_Wakeup()
die if schleife herausnehme sprich nur 2 Blöcke lese funktioniert es über die Reset taste am arduino uno den Sketch neu auszuführen.
zu meiner Schaltung gibt es nicht viel zu sagen hab als Pullup die üblichen 4,7 KOhm Versorgung an den 3,3V und ansonsten einfach die standard mässige I2C Verkabelung: SDA SDA SCL SCL etc.
aber an der Hardware dürfte es ja nicht liegen, weil ich ja wenn ich über die IDE neu hochlade alle Daten auf der Busleitung sehe nur der RESET Knopf ist für mich gerade vom Verständnis her schwarze Magie :fearful:

Die I2C Funktionen kenne ich nicht. Warum nutzt du nicht die Wire Lib?

Und nein, ich kenne auch dein Pixeldingen nicht. Und dem Code kann ich auch nicht entnehmen, was das für ein Ding sein soll.

die if schleife herausnehme

Diese lib passt einfach besser da sie keine byte begrenzung hat und die library funktioniert ja auch. ok nicht schleife sondern if abfrage. :sweat_smile: das dingens ist ein Thermopile Array von der Firma Heimann Sensoren dieser hat 32x32 Pixel.