Konstigt beteende på program.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Konstigt beteende på program.

Inlägg av newbadboy »

Icecap skrev:Läs databladet för sensorn! Där står det.

Det är den vi har utgått från. Vi är två som kollat på det väldigt noggrant och inte kommer längre.

Om du menar ngn specifik sektion får du gärna säga eller du menar rent allmänt?

Just att logikanalysatorn visar det man kan förvänta sig. Sen är det surt att när det väl startar om sig så kommer bara initieringsdatan. Hade varit enklare om man ser att ngt skickas och att vid tex ett spec kommando ballar ur. Men allt ser ut o stämma

Jag ska ta printscreen så ni kan få se registerna, ifall jag missat ngt....
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4689
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Konstigt beteende på program.

Inlägg av Swech »

databladet Sidan 18 längst ned
4 grafer, visar ACK NACK

Swech
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Konstigt beteende på program.

Inlägg av newbadboy »

Ok det var den sidan vi har utgått från. Och uppfyller den vilket bilderna från logik analysatorn kommer visa.

Men återigen, det är lätt att bli hemmablind. Så man kan missa saker.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Konstigt beteende på program.

Inlägg av lillahuset »

Läs errata för processorn. Och gärna accelerometern om det finns någon errata till den. Det är onödigt att leta kända buggar, egna räcker. 8)
Jag har ingen aning om hur buggfri I2C på PICen är men har själv avstått från I2C på en processor och bit-bangat I2C på tre processorer.
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Konstigt beteende på program.

Inlägg av newbadboy »

Suck.

Kan tillägga att min kompilator har ett standard i2c lib som jag har provat då picen har en riktig i2c modul. Kompilator har även mjukvaru i2c lib som man kan koppla till vilken pinne som helst. Har provat detta med exakt samma beteende!

Sensorn kan köras med spi oxå. Skulle det kunna vara bättre att prova i absolut nödfall? Mest att jag inte vill beställa nya kort. Men är spi ett stabilare protokoll?
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Konstigt beteende på program.

Inlägg av lillahuset »

OK, om läsa fyller dig med skräck kolla iallafall om det finns ett stycke/kapitel om I2C. Hur svårt kan det vara?
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Konstigt beteende på program.

Inlägg av newbadboy »

Haha nä inte suck åt att läsa. Suck att du undvikit i2c i vissa fall......
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Konstigt beteende på program.

Inlägg av lillahuset »

Hav tröst. Detkan ju vara SBS (skit bakom ratten). :D
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Konstigt beteende på program.

Inlägg av newbadboy »

Mest troliga är sbs. Spec när det gäller mig.
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Konstigt beteende på program.

Inlägg av Icecap »

Rätt utförd - med rätt timing och on-board - är det ingen vidare skillnad mellan IIC och SPI i stabilitet.
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Konstigt beteende på program.

Inlägg av newbadboy »

Har skalat ner koden så att det blir mindre att hålla kolla. Nedan ser ni hur den har sett ut i ngn dag. Dessutom kör jag nu software i2c lib, mest för att jag provade om det skulle göra ngn skillnad vilket det inte gjorde. Så nu får den vara kvar tillsvidare iaf.

Kod: Markera allt

#define LED_RFstat PORTD.F6
#define LED_Stat   PORTD.F7
#define RF_EN      PORTD.F1
#define CAN_stby   PORTB.F4
#define Vbat_adc   PORTA.F1
#define SDO        PORTE.F2
#define SIM800_rst PORTD.F0
#define Int1       PORTE.F0


// Software I2C connections
sbit Soft_I2C_Scl           at RC3_bit;
sbit Soft_I2C_Sda           at RC4_bit;
sbit Soft_I2C_Scl_Direction at TRISC3_bit;
sbit Soft_I2C_Sda_Direction at TRISC4_bit;
// End Software I2C connections



char AT[]="AT";   // To initialize mode
char noecho[]="ATE0";   // To stop echo
char mode_text[]="AT+CMGF=1";   // to set text mode
char char_mode[]="AT+CSCS=\"GSM\"";   // to set character mode
char param[]="AT+CSMP=17,167,0,0";   // set the parameter of character
char mobile_no[]="AT+CMGS=\"+46723970467\"";   //use to set receinpent number and mesg
char mobile_no1[]="AT+CMGS=\"+46xxxxxxxxxx\"";   //use to set receinpent number and mesg
char terminator=0x1A;     // chartacter form of control + z terminator character


int counter=0, l=0, b=0, j=0, y=0, i=0, m=0, Vbat, Int1Value, VbatOld, VbatCalc ;
long int k=0;
unsigned short DevID;

//Warning messages to be sent thru SMS
char mesg0[]="GSM Bil startad.";
char mesg1[]="!!!INBROTT!!! Billarm aktiverad!!";


void ADXL345_init(){

//Read out device id ocf the ADXL345 chip. By sniffing the I2C, the
//device id should be seen as 229
                Soft_I2C_Start();
                Soft_I2C_Write(0xA6);
                Soft_I2C_Write(0x00);
                Soft_I2C_Start();
                Soft_I2C_Write(0xA7);
                DevID=Soft_I2C_Read(0);
                Soft_I2C_Stop();

//Set power control to normal.
                Soft_I2C_Start();
                Soft_I2C_Write(0xA6);
                Soft_I2C_Write(0x2D);
                Soft_I2C_Write(0x08);
                Soft_I2C_Start();
                Soft_I2C_Write(0xA7);
                DevID=Soft_I2C_Read(0);
                Soft_I2C_Stop();

//Set tap axes. Use xyz axis
                Soft_I2C_Start();
                Soft_I2C_Write(0xA6);
                Soft_I2C_Write(0x2A);
                Soft_I2C_Write(0x01);
                Soft_I2C_Start();
                Soft_I2C_Write(0xA7);
                DevID=Soft_I2C_Read(0);
                Soft_I2C_Stop();

//Set threshold for single tap detection
                Soft_I2C_Start();
                Soft_I2C_Write(0xA6);
                Soft_I2C_Write(0x1D);
                Soft_I2C_Write(40);
                Soft_I2C_Start();
                Soft_I2C_Write(0xA7);
                DevID=Soft_I2C_Read(0);
                Soft_I2C_Stop();

//Set the duration for single tap detection
                Soft_I2C_Start();
                Soft_I2C_Write(0xA6);
                Soft_I2C_Write(0x21);
                Soft_I2C_Write(32);  //625us/LSB
                Soft_I2C_Start();
                Soft_I2C_Write(0xA7);
                DevID=Soft_I2C_Read(0);
                Soft_I2C_Stop();

//Set the latency for single tap detection, disable double tap
                Soft_I2C_Start();
                Soft_I2C_Write(0xA6);
                Soft_I2C_Write(0x22);
                Soft_I2C_Write(80);
                Soft_I2C_Start();
                Soft_I2C_Write(0xA7);
                DevID=Soft_I2C_Read(0);
                Soft_I2C_Stop();

//Map single tap interupt to INT1 pin
                Soft_I2C_Start();
                Soft_I2C_Write(0xA6);
                Soft_I2C_Write(0x2F);
                Soft_I2C_Write(0x00);   //00000000
                Soft_I2C_Start();
                Soft_I2C_Write(0xA7);
                DevID=Soft_I2C_Read(0);
                Soft_I2C_Stop();

//Enable INT1
                Soft_I2C_Start();
                Soft_I2C_Write(0xA6);
                Soft_I2C_Write(0x2E);
                Soft_I2C_Write(0x40);   //01000000
                Soft_I2C_Start();
                Soft_I2C_Write(0xA7);
                DevID=Soft_I2C_Read(0);
                Soft_I2C_Stop();

//Reset INT1 output if needed
                 Soft_I2C_Start();
                 Soft_I2C_Write(0xA6);
                 Soft_I2C_Write(0x30);
                 Soft_I2C_Start();
                 Soft_I2C_Write(0xA7);
                 DevID=Soft_I2C_Read(0);
                 Soft_I2C_Stop();

}



void Init_Main(){

     OSCCON=0b01110110; //Set 8MHz clock
     CMCON=0b00000111;

     TRISA=0b00000010;
     TRISB=0b00011000;
     TRISC=0b10000000;
     TRISD=0b00000000;
     TRISE=0b00000011;

     ADCON0.F0=1;
     ADCON1=0b00001001;
     ADCON2=0b00001000;

     SDO=0; // do not alter to avoid short circuit!!!!!

     UART1_Init(9600);
     Soft_I2C_Init();
     ADC_Init();


     for(l=0; l<11; l++){
     LED_Stat=1;
     LED_RFstat=1;
     Delay_ms(50);
     LED_Stat=0;
     LED_RFstat=0;
     Delay_ms(50);
     }
     
     ADXL345_Init();
}

//Led blink in normal mode
void Led(){
     k++;
     if(k==9000)
       LED_Stat=1;
     if(k==500)
       LED_Stat=0;
     if(k==12000)
        k=0;
     }

     
void main(){

    Init_main();

     while(1){
          Led();
          
          
          
           Int1Value=ADC_Read(5);
      if(Int1Value>511){ //2,5V
         Delay_ms(10);
         //Reset INT1 output if needed
                 Soft_I2C_Start();
                 Soft_I2C_Write(0xA6);
                 Soft_I2C_Write(0x30);
                 Soft_I2C_Start();
                 Soft_I2C_Write(0xA7);
                 DevID=Soft_I2C_Read(0);
                 Soft_I2C_Stop();
                 
         //m++;
      //Send SMS. Max twice to avoid many sms
      if(1){
         LED_Stat=1;
         LED_RFstat=1;
         RF_EN=1;
         Delay_ms(100);
         SIM800_rst=1;
         Delay_ms(1000);    //Gsm net search
       //  Send_GSM();
         Delay_ms(1000);
         SIM800_rst=0;
         Delay_ms(100);
         RF_EN=0;
         LED_Stat=0;
         LED_RFstat=0;
         }
      }
          
          
          

        
          }
     }
Senast redigerad av newbadboy 1 mars 2019, 08:06:31, redigerad totalt 1 gång.
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Konstigt beteende på program.

Inlägg av Icecap »

Du kör alltså en konstant upp- och nerkoppling med lite delayer i. Ingen räkning av antal gångar eller liknande. Varför?
Du ger mobil-enheten 1 sek till att koppla upp, vad sker om det inte kan ske? (dålig täckning typ)

Rent faktisk ska det vara möjligt att "bara" skriva ett SMS till modemet, sedan får det sköta sig bäst det vill. Den funktion fungerar iaf. på det jag har.
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Konstigt beteende på program.

Inlägg av newbadboy »

Du har helt rätt min vän. Det kommer inte funka. Men just nu håller jag på och testar och har därför kortat ner delay tider för att slippa vänta sålänge, sedan är just GSM_send bort kommenterat. Så jag kan foukusera på I2C möget
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Konstigt beteende på program.

Inlägg av newbadboy »

Och här kommer screenshots på de enda printen jag får it med Salae. Den första dubbla bilden är vid uppstart vi Init_main() och även den print jag får de gångerna det startar om sig. Andra bilden är de gånger det funkar som det ska och sensorn blir nollställd. Tredje bilden visar också när det "funkar" men av ngn anledning skickar den fler resets av ngn anledning precis som om signalen studsar men det borde ju eg inte ske iom jag har lite delays här o var
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Konstigt beteende på program.

Inlägg av Icecap »

Det verkar som att ditt omstartsproblem beror på att µC'n startar om.

På vissa PIC kan man lägga in att OM det blir stack-overflow resettas den.
Hur andra reagerar på detta står i databladet men OM det är en stack-overflow beror det till 100% på mjukvaran.

I t.ex. "alla" PIC är det en begränsning i den fysiska hårdvara-stack för interrupts, antal varierar med version PIC.
Kan det vara något sådan?
Skriv svar