Varför kan jag inte läsa mina knappar med PIC

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:

Varför kan jag inte läsa mina knappar med PIC

Inlägg av newbadboy »

Som sagt så reagerar inte programmet alls på knapptryckningarna. Jag ser inte felet. Har skapat funktionen test för att just testa knapparna. Init main körs och texten skrivs ut på display men sedan är det dött. Vad missar jag?







Kod: Markera allt

#define Read1 PORTE.F2
#define Read2 PORTE.F1
#define Read3 PORTE.F0
#define Read4 PORTB.F5
#define Read5 PORTB.F4
#define Read6 PORTB.F3

#define Led1 PORTB.F0
#define Led2 PORTA.F7
#define Led3 PORTA.F6
#define Led4 PORTA.F5
#define Led5 PORTA.F4
#define Led6 PORTA.F3

#define H1A PORTD.F2
#define H1B PORTD.F1
#define H2A PORTD.F0
#define H2B PORTC.F7
#define H3A PORTC.F6
#define H3B PORTC.F5
#define H4A PORTC.F2
#define H4B PORTC.F1
#define H5A PORTC.F0
#define H5B PORTA.F0
#define H6A PORTA.F1
#define H6B PORTA.F2

#define BTN_up PORTB.F1
#define BTN_down PORTB.F2
#define BTN_Start PORTC.F4

int i,a=0,k;
int time, nbr;



//LCD module connection
sbit LCD_RS at RD7_bit;
sbit LCD_EN at RD6_bit;
sbit LCD_D4 at RD5_bit;
sbit LCD_D5 at RD4_bit;
sbit LCD_D6 at RD3_bit;
sbit LCD_D7 at RC3_bit;

sbit LCD_RS_Direction at TRISD7_bit;
sbit LCD_EN_Direction at TRISD6_bit;
sbit LCD_D4_Direction at TRISD5_bit;
sbit LCD_D5_Direction at TRISD4_bit;
sbit LCD_D6_Direction at TRISD3_bit;
sbit LCD_D7_Direction at TRISC3_bit;
//End LCD module connection


void InitMain(){
     TRISA=0b00000000;
     TRISB=0b00111110;
     TRISC=0b00010000;
     TRISD=0b00000000;
     TRISE=0b00000111;
     
     ANSELA=0b00000000;
     ANSELB=0b00000000;
     ANSELD=0b00000000;
     ANSELE=0b00000000;
     
     OSCCON=0b01101010;                                                         //Oscillator set to 4MHz
     
     H1A=0;
     H1B=0;
     H2A=0;
     H2B=0;
     H3A=0;
     H3B=0;
     H4A=0;
     H4B=0;
     H5A=0;
     H5B=0;
     H6A=0;
     H6B=0;
     
     
     LCD_Init();                                                                //LCD startup
     LCD_Cmd(_LCD_CURSOR_OFF);
     Delay_ms(200);
     Lcd_out(1,1,"AXIS IR Tester");
     Lcd_out(2,1,"KS2018  R1.0");
     
     for(i=0; i<3; i++){
     Led1=0;
     Led2=0;
     Led3=0;
     Led4=0;
     Led5=0;
     Led6=0;
     Delay_ms(30);
     Led1=1;
     Led2=1;
     Led3=1;
     Led4=1;
     Led5=1;
     Led6=1;
     Delay_ms(30);
     }

}

void Switch(int n){
     
     H1A=1;
     H1B=0;
     while(a<=n){
          delay_ms(1);
          a++;
          }
     a=0;
     H1A=0;
     H1B=0;
     Delay_ms(50);
     H1A=0;
     H1B=1;
     while(a<=n){
          Delay_ms(1);
          a++;
          }
     a=0;
     H1A=0;
     H1B=0;
     delay_ms(50);
//-----------------------------------------------
     H2A=1;
     H2B=0;
     while(a<=n){
          delay_ms(1);
          a++;
          }
     a=0;
     H2A=0;
     H2B=0;
     Delay_ms(50);
     H2A=0;
     H2B=1;
     while(a<=n){
          Delay_ms(1);
          a++;
          }
     a=0;
     H2A=0;
     H2B=0;
     delay_ms(50);
//-----------------------------------------------
     H3A=1;
     H3B=0;
     while(a<=n){
          delay_ms(1);
          a++;
          }
     a=0;
     H3A=0;
     H3B=0;
     Delay_ms(50);
     H3A=0;
     H3B=1;
     while(a<=n){
          Delay_ms(1);
          a++;
          }
     a=0;
     H3A=0;
     H3B=0;
     delay_ms(50);
//-----------------------------------------------
     H4A=1;
     H2B=0;
     while(a<=n){
          delay_ms(1);
          a++;
          }
     a=0;
     H4A=0;
     H4B=0;
     Delay_ms(50);
     H4A=0;
     H4B=1;
     while(a<=n){
          Delay_ms(1);
          a++;
          }
     a=0;
     H4A=0;
     H4B=0;
     delay_ms(50);
//-----------------------------------------------
     H5A=1;
     H5B=0;
     while(a<=n){
          delay_ms(1);
          a++;
          }
     a=0;
     H5A=0;
     H5B=0;
     Delay_ms(50);
     H5A=0;
     H5B=1;
     while(a<=n){
          Delay_ms(1);
          a++;
          }
     a=0;
     H5A=0;
     H5B=0;
     delay_ms(50);
//-----------------------------------------------
     H6A=1;
     H6B=0;
     while(a<=n){
          delay_ms(1);
          a++;
          }
     a=0;
     H6A=0;
     H6B=0;
     Delay_ms(50);
     H6A=0;
     H6B=1;
     while(a<=n){
          Delay_ms(1);
          a++;
          }
     a=0;
     H6A=0;
     H6B=0;
     delay_ms(50);
     }




     
     
void Setting(){
     Lcd_out(1,1,"Set switch time");
     Lcd_out(2,1,"press + or -");
     
     while(BTN_Start==1){
           if(BTN_up==0){
              Delay_ms(50);
              if(BTN_up==0)
                 k+100;
              }
            if(BTN_down==0){
              Delay_ms(50);
              if(BTN_down==0)
                 k-100;
              }
            if((BTN_down==0||BTN_up==0)&&(100<=k<=300)){
               k=k;
               }
            
            Lcd_Cmd(_LCD_CLEAR);
            Lcd_out(1,1,"Switch time= ");
            Lcd_Out(1,13,k);
            while(1){
            }
            }
     
     
     
     
     Lcd_out(1,1,"Set nbr cycles");
     Lcd_out(2,1,"press + or -");
     
     
     Lcd_out(1,1,"Press start");



     }
     
     
     void test(){

  if (BTN_Start==0){
    Lcd_out(1,1,"Start");
    while(1){}
    }


  if (BTN_up==0){
    Lcd_out(1,1,"upp");
    while(1){}
    }


  if (BTN_down==0){
    Lcd_out(1,1,"ner");
    while(1){}
    }  }

void main() {
    InitMain();
    test();
  //  Switch(100);
    //Setting();


}
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
bearing
Inlägg: 11250
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Varför kan jag inte läsa mina knappar med PIC

Inlägg av bearing »

Ditt program kör ju först init, och kör sedan en blixtsnabb kontroll av knapparna i test(). Detta förutsätter alltså att du håller in en knapp redan innan uppstart, och ska då få en liten utskrift på LCD, och sedan säger ju din kod att programmet inte ska göra något mer, bara sitta fast i en loop. Vanligtvis kontrolleras knappar i en loop under hela programmets gång, så att programmet har möjlighet att upptäcka fler knapptryckningar än bara en.
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Varför kan jag inte läsa mina knappar med PIC

Inlägg av newbadboy »

Hahaha tror jag ska ta bort tråden. Fan vad det gick undan att skriva koden sen hittade jag inte felet. Var helt säker på att jag satt ngt register fel.
bearing
Inlägg: 11250
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Varför kan jag inte läsa mina knappar med PIC

Inlägg av bearing »

Det finns mycket som behöver fixas i din kod som förtjänar en större skämskudde än den där testkoden.

Kanske har du skrivit testkoden eftersom att "inget händer" när du trycker på knapparna.
Det har sin förklaring i t.ex. denna kodsnutt:

Kod: Markera allt

              if(BTN_up==0)
                 k+100;
Varför inte detta fungerar som du tänkt hoppas jag att det inte tar allt för lång tid att lista ut.
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Varför kan jag inte läsa mina knappar med PIC

Inlägg av newbadboy »

Hehe det är en kod jag slängd ihop igår snabbt och gjorde en massa annat samtidigt så ja det finns några små skönhetsfel här och där.
bearing
Inlägg: 11250
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Varför kan jag inte läsa mina knappar med PIC

Inlägg av bearing »

Jo, jag ser indenteringsfel och andra skönhetsfel. Men detta är ju inte ett skönhetsfel. Den andra raden producerar inte någon verksam kod.
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Varför kan jag inte läsa mina knappar med PIC

Inlägg av newbadboy »

Kommer en ny fråga här dådå. Hela programmet funkar utom en enda sak. Jag slår optiska ir filter fram o ch tillbaka med Hbryggor och genomlyser dem med ir för att kolla att det verkligen har slagit rent fysiskt. Jag gör detta med 6 filter samtidigt.

Jag ställer in slag tiden 0-500ms
Jag ställer in antal cykler 0-50 just nu. Men det skall bli 0-500000 i verkligheten
Sedan kör programmet och räknar hur många ggr varje filter faller om de nu fallerar.

Alla kanaler funkar utom kanal tre. Den vägrar läsa tillståndet på filtret. Jag har kolla rent elektriskt gällande nivåer och även bytt filter. Kör jag 10 cykler så fallerar den 10ggr så den läser aldrig. Behöver ngn ledtråd på vad jag kan kolla.


Kod: Markera allt

/*IrTester Karoly Simon 2018 R1.0
Test 6 channels by Setting on/off time and amount of cycles to be tested.
After test is complete fail statistic for each channel is presented or
all channels ok if no fail is detected.

Rev history
R1.0 Initial rev

Read inputs are used for detecting if filter is switched
Led outputs indicate if each channel is ok or not
H1-H6 are controll pins for H bridges*/

#define Read1 PORTE.F2
#define Read2 PORTE.F1
#define Read3 PORTE.F0
#define Read4 PORTB.F5
#define Read5 PORTB.F4
#define Read6 PORTB.F3

#define Led1 PORTB.F0
#define Led2 PORTA.F7
#define Led3 PORTA.F6
#define Led4 PORTA.F5
#define Led5 PORTA.F4
#define Led6 PORTA.F3

#define H1A PORTD.F2
#define H1B PORTD.F1
#define H2A PORTD.F0
#define H2B PORTC.F7
#define H3A PORTC.F6
#define H3B PORTC.F5
#define H4A PORTC.F2
#define H4B PORTC.F1
#define H5A PORTC.F0
#define H5B PORTA.F0
#define H6A PORTA.F1
#define H6B PORTA.F2

#define BTN_up PORTB.F1
#define BTN_down PORTB.F2
#define BTN_Start PORTC.F4

int i,a=0,k=0, b=0, d=0;
short int time, x;
long int nbr=0,count=0;

long int Read1_old, Read2_old, Read3_old, Read4_old, Read5_old, Read6_old;
long int Read1_count=0, Read2_count=0, Read3_count=0, Read4_count=0, Read5_count=0, Read6_count=0;

//For LCD prints
char Statout[13];
char Kout[7];
char Nbrout[13];
char Countout[13];



//LCD module connection
sbit LCD_RS at RD7_bit;
sbit LCD_EN at RD6_bit;
sbit LCD_D4 at RD5_bit;
sbit LCD_D5 at RD4_bit;
sbit LCD_D6 at RD3_bit;
sbit LCD_D7 at RC3_bit;

sbit LCD_RS_Direction at TRISD7_bit;
sbit LCD_EN_Direction at TRISD6_bit;
sbit LCD_D4_Direction at TRISD5_bit;
sbit LCD_D5_Direction at TRISD4_bit;
sbit LCD_D6_Direction at TRISD3_bit;
sbit LCD_D7_Direction at TRISC3_bit;
//End LCD module connection


void InitMain(){
//IO direction settings
     TRISA=0b00000000;
     TRISB=0b00111110;
     TRISC=0b00010000;
     TRISD=0b00000000;
     TRISE=0b00000111;
     
//Turn of ADC
     ANSELA=0b00000000;
     ANSELB=0b00000000;
     ANSELD=0b00000000;
     ANSELE=0b00000000;
     
//Oscillator set to 4MHz
     OSCCON=0b01101010;
     
//Turn of all H bridges
     H1A=0;
     H1B=0;
     H2A=0;
     H2B=0;
     H3A=0;
     H3B=0;
     H4A=0;
     H4B=0;
     H5A=0;
     H5B=0;
     H6A=0;
     H6B=0;
     
     
     LCD_Init();
     LCD_Cmd(_LCD_CURSOR_OFF);
     Delay_ms(200);
     Lcd_out(1,1,"AXIS IR Tester");
     Lcd_out(2,1,"KS2018  R1.0");
     
     for(i=0; i<3; i++){
     Led1=0;
     Led2=0;
     Led3=0;
     Led4=0;
     Led5=0;
     Led6=0;
     Delay_ms(30);
     Led1=1;
     Led2=1;
     Led3=1;
     Led4=1;
     Led5=1;
     Led6=1;
     Delay_ms(30);
     }
     Delay_ms(2000);
}



/*Read_stat checks if filter has actually moved during switch pulse.
It reads the actuall value (1 or 0) and and compares it with the prewious one.
If values differ the filter has switched, if they are equal then counter is
increased to be able to show how many times it fails.
Everytime the function is called int ch sets which channel to read.
When a fail is detected on a channel the corresponding LED wil be disabled*/
void Read_stat(short int ch){
    Delay_ms(1);
    if(ch==1){
      if(Read1==Read1_old){
         Read1_count++;
         if(Read1_count==2)
            Led1=1;
         }
      Read1_old=Read1;
      }
      
    if(ch==2){
      if(Read2==Read2_old){
         Read2_count++;
         if(Read2_count==2)
            Led2=1;
         }
      Read2_old=Read2;
      }
    if(ch==3){
      if(Read3==Read3_old){
         Read3_count++;
         if(Read3_count==2)
            Led3=1;
         }
      Read3_old=Read3;
      }
      
    if(ch==4){
      if(Read4==Read4_old){
         Read4_count++;
         if(Read4_count==2)
            Led4=1;
         }
      Read4_old=Read4;
      }
      
    if(ch==5){
      if(Read5==Read5_old){
         Read5_count++;
         if(Read5_count==2)
            Led5=1;
         }
      Read5_old=Read5;
      }
      
    if(ch==6){
      if(Read6==Read6_old){
         Read6_count++;
         if(Read6_count==2)
            Led6=1;
         }
      Read6_old=Read6;
      }
    }
    
    
    
/*Switch function manages the ON time (n) and total cycles (j). Between each
switch puls the read function checks the filter. After each loop the total and
remaining cycles are shown in LCD. All Led's are enabled initially as long as
no fails are detected
*/
void Switch(int n, long int j){
     
     Led1=0;
     Led2=0;
     Led3=0;
     Led4=0;
     Led5=0;
     Led6=0;
     Lcd_Cmd(_LCD_CLEAR);
     Lcd_out(1,1,"Running test!");
     Lcd_out(2,1,"Do not touch!");
     Delay_ms(2000);

//---Channel 1------
     while(j>count){
     H1A=1;
     H1B=0;
     Read_stat(1);
     while(a<=n){
          delay_ms(1);
          a++;
          }
     a=0;
     H1A=0;
     H1B=0;
     Delay_ms(50);
     H1A=0;
     H1B=1;
     Read_stat(1);
     while(a<=n){
          Delay_ms(1);
          a++;
          }
     a=0;
     H1A=0;
     H1B=0;
     delay_ms(50);
     
//---Channel 2------
     H2A=1;
     H2B=0;
     Read_stat(2);
     while(a<=n){
          delay_ms(1);
          a++;
          }
     a=0;
     H2A=0;
     H2B=0;
     Delay_ms(50);
     H2A=0;
     H2B=1;
     Read_stat(2);
     while(a<=n){
          Delay_ms(1);
          a++;
          }
     a=0;
     H2A=0;
     H2B=0;
     delay_ms(50);
     
//---Channel 3------
     H3A=1;
     H3B=0;
     Read_stat(3);
     while(a<=n){
          delay_ms(1);
          a++;
          }
     a=0;
     H3A=0;
     H3B=0;
     Delay_ms(50);
     H3A=0;
     H3B=1;
     Read_stat(3);
     while(a<=n){
          Delay_ms(1);
          a++;
          }
     a=0;
     H3A=0;
     H3B=0;
     delay_ms(50);
     
//---Channel 4------
     H4A=1;
     H2B=0;
     Read_stat(4);
     while(a<=n){
          delay_ms(1);
          a++;
          }
     a=0;
     H4A=0;
     H4B=0;
     Delay_ms(50);
     H4A=0;
     H4B=1;
     Read_stat(4);
     while(a<=n){
          Delay_ms(1);
          a++;
          }
     a=0;
     H4A=0;
     H4B=0;
     delay_ms(50);
     
//---Channel 5------
     H5A=1;
     H5B=0;
     Read_stat(5);
     while(a<=n){
          delay_ms(1);
          a++;
          }
     a=0;
     H5A=0;
     H5B=0;
     Delay_ms(50);
     H5A=0;
     H5B=1;
     Read_stat(5);
     while(a<=n){
          Delay_ms(1);
          a++;
          }
     a=0;
     H5A=0;
     H5B=0;
     delay_ms(50);
     
//---Channel 6------
     H6A=1;
     H6B=0;
     Read_stat(6);
     while(a<=n){
          delay_ms(1);
          a++;
          }
     a=0;
     H6A=0;
     H6B=0;
     Delay_ms(50);
     H6A=0;
     H6B=1;
     Read_stat(6);
     while(a<=n){
          Delay_ms(1);
          a++;
          }
     a=0;
     H6A=0;
     H6B=0;
     delay_ms(50);
     count++;
     
     Lcd_Cmd(_LCD_CLEAR);
     Lcd_out(1,1,"Tot.");
     Lcd_Out(1,5,Nbrout);
     LongToStr(count,Countout);
     Countout[13]=0;
     Lcd_out(2,1,"Done");
     Lcd_out(2,5,Countout);
     }
    }
     
/*User set first ON time 0-500ms and then total amount of cycles 0-500000*/
void Setting(){
     
     Lcd_Cmd(_LCD_CLEAR);
     Lcd_out(1,1,"Set Switch time");
     Lcd_out(2,1,"press + or -");
          while(BTN_Start==1&&b==0){
           if((BTN_up==0)&&(0<=k)&&(k<=500)){
              Delay_ms(50);
              if((BTN_up==0)&&(0<=k)&&(k<=500))
                 k=(k+50);
              if(k>500)
                k=500;
              if(k<0)
                k=0;
              IntToStr(k,Kout);
              Kout[6]=0;
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_out(1,1,"Switch time(ms)= ");
              Lcd_Out(2,1,Kout);
              while(BTN_up==0){
              //wait
              }
           }
            if((BTN_down==0)&&(0<=k)&&(k<=500)){
              Delay_ms(50);
              if((BTN_down==0)&&(0<=k)&&(k<=500))
                 k=(k-50);
              if(k>500)
                k=500;
              if(k<0)
                k=0;
              IntToStr(k,Kout);
              Kout[6]=0;
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_out(1,1,"Switch time(ms)= ");
              Lcd_Out(2,1,Kout);
              while(BTN_down==0){
              //wait
              }
            }
          }
          b=1;
          while(BTN_Start==0){
               //wait
               }
          
     Lcd_Cmd(_LCD_CLEAR);
     Lcd_out(1,1,"Set nbr cycles");
     Lcd_out(2,1,"press + or -");
     while(BTN_Start==1&&d==0){
           if((BTN_up==0)&&(0<=nbr)&&(nbr<=50)){
              Delay_ms(50);
              if((BTN_up==0)&&(0<=nbr)&&(nbr<=50))
                 nbr=(nbr+10);
              if(nbr>50)
                nbr=50;
              if(nbr<0)
                nbr=0;
              LongToStr(nbr,Nbrout);
              Nbrout[12]=0;
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_out(1,1,"Nbr test cycles= ");
              Lcd_Out(2,1,Nbrout);
              while(BTN_up==0){
              //wait
              }
           }
            if((BTN_down==0)&&(0<=nbr)&&(nbr<=50)){
              Delay_ms(50);
              if((BTN_down==0)&&(0<=nbr)&&(nbr<=50))
                 nbr=(nbr-10);
              if(nbr>50)
                nbr=50;
              if(nbr<0)
                nbr=0;
              LongToStr(nbr,Nbrout);
              Nbrout[12]=0;
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_out(1,1,"Nbr test cycles= ");
              Lcd_Out(2,1,Nbrout);
              while(BTN_down==0){
              //wait
              }
            }
          }
          d=1;
          Lcd_Cmd(_LCD_CLEAR);
          Lcd_out(1,1,"Press start to");
          Lcd_out(2,1,"initiate test");
          while(BTN_Start==0){
               //wait
               }
          while(BTN_Start==1){
               //wait
               }
          if(BTN_Start==0)
             Switch(k,nbr);
     }
     
     
/*At the end of test LCD print is all ok if no fails are detected. If one or
more channels have failed at least once the display scrolls thur alla channels
showing stat for each channel
Sometimes the code generates the first reading as fail depending on which initial
state the filter actually is in*/
void Show_Stat(){
     if(Read1_count==1)
        Read1_count=0;
        
     if(Read2_count==1)
        Read2_count=0;
      
     if(Read3_count==1)
        Read3_count=0;
        
     if(Read4_count==1)
        Read4_count=0;
       
     if(Read5_count==1)
        Read5_count=0;
        
     if(Read6_count==1)
        Read6_count=0;
     
     if(Read1_count==0&&Read2_count==0&&Read3_count==0&&Read4_count==0&&Read5_count==0&&Read6_count==0){
       Lcd_Cmd(_LCD_CLEAR);
       Lcd_out(1,1,"Test done. All");
       Lcd_out(2,1,"channels ok!!");
     while(1){
          //do nothing
         }
       }
     else if(Read1_count>1||Read2_count>1||Read3_count>1||Read4_count||1&&Read5_count||1&&Read6_count>1){
         while(BTN_Start==1){
              IntToStr(Read1_count,Statout);
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_out(1,1,"Total fails CH1");
              Lcd_Out(2,1,Statout);

              Delay_ms(2000);
              
              IntToStr(Read2_count,Statout);
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_out(1,1,"Total fails CH2");
              Lcd_Out(2,1,Statout);
              
              Delay_ms(2000);

              IntToStr(Read3_count,Statout);
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_out(1,1,"Total fails CH3");
              Lcd_Out(2,1,Statout);

              Delay_ms(2000);

              IntToStr(Read4_count,Statout);
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_out(1,1,"Total fails CH4");
              Lcd_Out(2,1,Statout);

              Delay_ms(2000);

              IntToStr(Read5_count,Statout);
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_out(1,1,"Total fails CH5");
              Lcd_Out(2,1,Statout);

              Delay_ms(2000);

              IntToStr(Read6_count,Statout);
              Lcd_Cmd(_LCD_CLEAR);
              Lcd_out(1,1,"Total fails CH6");
              Lcd_Out(2,1,Statout);

              Delay_ms(2000);
              }
            }
     }


void main() {
    InitMain();
    while(1){
         Setting();
         Show_Stat();
         }
}
bearing
Inlägg: 11250
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Varför kan jag inte läsa mina knappar med PIC

Inlägg av bearing »

Har du kollat att PORTE.F0 ändras ifall du ändrar signalen på ingången?
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Varför kan jag inte läsa mina knappar med PIC

Inlägg av newbadboy »

Jag har mätt på pinnen ja. Eller du menar göra ngn print med LED3 tex?
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Varför kan jag inte läsa mina knappar med PIC

Inlägg av newbadboy »

Har provat tända en LED om pinnen är ett men den tänds aldrig. Det läser inte pinnen helt enkelt.
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Varför kan jag inte läsa mina knappar med PIC

Inlägg av newbadboy »

Provade att sätta RE0 som utgång och toggla den med 1s. Och det gick. Men att läsa den går fan i mig inte
bearing
Inlägg: 11250
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Varför kan jag inte läsa mina knappar med PIC

Inlägg av bearing »

Verkar finnas ett register som heter APFCON kopplat till denna pinne. Vet inte om det påverkar när pinnen är ingång. Men du kan ju testa att sätta APFCON.6 = 1 och se om det hjälper.

Se sida 131:
http://ww1.microchip.com/downloads/en/d ... 41364e.pdf
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Varför kan jag inte läsa mina knappar med PIC

Inlägg av newbadboy »

Nix pix. Har varit på det också. Hittade felet. Jag läste statusen på filtret direkt efter jag switchad det. Antigen hade inte rört sig hela vägen eller så var det studs på det. En kort delay och nu funkar allt prima. Tack för hjälpen iaf.
Skriv svar