-
          
	
		
		
	
	
	
	
	
		
			
- 
	
	
		
		
			
				
				
				
					Farbsensor PICAXE AXE045 !!! Programmierung!!!
				
				
						
							
							
						
						
							
						
				
					
						
							Hallo jungs, 
wir haben ein problem bei der programmierung unseren Farbsensors und zwar, gibt er uns komische werte zurück und wir wissen nicht recht was falsch ist, da er zu 100% richtig angeschlossen ist. 
Kann uns jemand weiterhelfen??
//#include "MAIN.H"
#include <xc886.h>
#include "lcd800.c"
/*
extern void lcd_init(void);	// Init LCD
extern void lcd_clr(void);	 	// LCD Löschen 
extern void lcd_byte(char);  	// Ausgabe unsigned char  => 3 stellig
extern void lcd_str(char *ptr);// Ausgabe String
extern void lcd_curs(char);	// Cursor setzen
*/
void MAIN_vInit(void);
void INT_vInit(void);
void timer(void);
void init(void);
void ScanRot(void);
void ScanGruen(void);
void ScanBlau(void);
void ausgabe(void);		
sbit OUT = P3_DATA^3;	//impuls
sbit S0 = P0_DATA^2;	//S0= welche frequenz
sbit S1 = P0_DATA^3;	//s1 = welche frequenz
sbit S2 = P0_DATA^4;	//s2 = welcher farbwert
sbit S3 = P0_DATA^5;	//s3 = welcher farbwert
sbit LED = P3_DATA^0;	//LED ein/aus
sbit Kontrollleuchte = P0_DATA^0;
unsigned long zaehlwert = 0;
unsigned long messwert_rot = 0;
unsigned long messwert_blau = 0;
unsigned long messwert_gruen = 0;
unsigned long farbe=1;
unsigned int i;
// S0	S1  MAx. Ausgangsfrequenz   frequ. skalierung	 |	S2	S3	  Filter
//  1	 1		 600 kHz				 100%			 |	 0	 0	   red
//	1	 0		 120 kHz				  20%			 |	 0	 1	   blue
//	0	 1		  12 kHz				   2%			 |	 1	 0	   none
//	0	 0			---					 power down		 |	 1	 1	   green
void main  (void) {
  MAIN_vInit();
  while(1){
	ausgabe();
 		for(i = 0; i <= 50000;i++);				//Pausen für genaues ablesen der messwerte
		for(i = 0; i <= 50000;i++);
//	for(i = 0; i <= 50000;i++);
  }
}
void ausgabe(void){
	lcd_curs(0);
	lcd_str("Rot: ");
	lcd_byte(messwert_rot);			//Ausgabe der Farbe(durch zählwert)
	lcd_curs(20);
	lcd_str("Blau: ");
	lcd_byte(messwert_blau);
	lcd_curs(40);
	lcd_str("Gruen: ");
	lcd_byte(messwert_gruen);
}
void timer(void){					//Timer 
	TR0 = 0;
	TF0 = 0;
	TH0 = 0;
	TL0 = 0;
	TR0 = 1;
	//while(TF0 == 0);
}
void ScanRot(void){
	LED = 1;
	S2 = 0;	   		//s2 = welcher farbwert	P0_DATA^4;
	S3 = 0;    		//s3 = welcher farbwert	P0_DATA^5;
}
void ScanBlau(void){
	S2 = 0;	   		//s2 = welcher farbwert	P0_DATA^4;
	S3 = 1;    		//s3 = welcher farbwert	P0_DATA^5;
}
void ScanGruen(void){
	S2 = 1;	   		//s2 = welcher farbwert	P0_DATA^4;
	S3 = 1;    		//s3 = welcher farbwert	P0_DATA^5;
}
void MAIN_vInit(void){
  
  INT_vInit();
   
  	EA     =  1; 
	//P1_DIR = 0x04;	     
  	P0_DIR = 0xff;		//Port0 ausgang
	P2_DIR = 0x00;		//Port3	eingang
	P3_DIR = 0xf1;
	
	TMOD = 0x01;
	lcd_init();		   //lcd wird init..
	lcd_clr();
	
	LED =0;
	S0 = 1;	  	//S0= welche frequenz	P0_DATA^2;
	S1 = 1;	  	//s1 = welche frequenz	P0_DATA^3;
	S2 = 0;	   	//s2 = welcher farbwert	P0_DATA^4;
	S3 = 0;    	//s3 = welcher farbwert	P0_DATA^5;     
}
void INT_vInit(void){
  NMICON        =  0x00;         //  NMI Control Register 
 
  IT1 			= 0;
  EX1			= 1;
  
  EXICON0       =  0x08;         // external interrupt trigger select 
                                 // register 0
  EXICON1       =  0x00;         // external interrupt trigger select 
                                 // register 1
  MODPISEL      =  0x00;         // peripheral input select register 
}
void INT_viExt1(void) interrupt EXT1INT	   // EXT1INT => ist 2 
{
  	
   // ubyte => unsigned char 
  SFR_PAGE(_su0, SST0);          // switch to page0
  IRCON0 &= ~(ubyte)0x02; //   clear EXINT1
  // USER CODE BEGIN (IR_IsrExt1,3)
	
	Kontrollleuchte = ~Kontrollleuchte;	//Kontrollleuchte 1 für rest
   	if(OUT == 1){			//Wenn der ausgang(Farbsensor) log.1 zählt der timer die zeit wie lange log.1
		timer();
		
	}else if (OUT == 0){
		TR0 = 0;	
		zaehlwert = (TH0 << 8 ) + TL0;		//zählwert wird
	
		if(farbe == 1){
			messwert_rot = zaehlwert ;
		}else if(farbe == 2 ){
			messwert_blau = zaehlwert ;
		}else if(farbe == 3 ){
			messwert_gruen = zaehlwert ;
		}
		farbe++;
		
		if (farbe == 1){
				LED = 1;		 //rot
				S2 = 0;	   		//s2 = welcher farbwert	P0_DATA^4;
				S3 = 0; 		//s3 = welcher farbwert	P0_DATA^5;
					
		}else if(farbe == 2){			 
				S2 = 0;	   		//s2 = welcher farbwert	P0_DATA^4;
				S3 = 1;    		//s3 = welcher farbwert	P0_DATA^5;	   blau
				
		}else if(farbe == 3){			
			   	S2 = 1;	   		//s2 = welcher farbwert	P0_DATA^4;	   grün
				S3 = 1;    		//s3 = welcher farbwert	P0_DATA^5;
				
		}else if(farbe == 4){
			farbe = 0;
			S2 = 1;
			S3 = 0;
		}
		
	}
	IE1=0;
  // USER CODE END
  SFR_PAGE(_su0, RST0);          // restore the old SCU page
}
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
		
		
		
	
 
	
	
	
	
	
	
	
	
	
	
	
	
		
		
		
		
			
				
				Berechtigungen
			
			
				
	
		- Neue Themen erstellen: Nein
 
		- Themen beantworten: Nein
 
		- Anhänge hochladen: Nein
 
		- Beiträge bearbeiten: Nein
 
		-  
 
	
	
	Foren-Regeln
 
			 
		 
	 
 
  
 
  
 
Lesezeichen