mirror of
				https://github.com/Oleg-Stepanenko-owo/IEBUS
				synced 2025-10-28 08:57:13 +00:00 
			
		
		
		
	back timer2, add main sketch
This commit is contained in:
		
							parent
							
								
									45a82442bd
								
							
						
					
					
						commit
						b87cc0fcaf
					
				| @ -7,45 +7,25 @@ void AVCLanDrv::begin () | ||||
| { | ||||
|   // AVCLan TX+/TX- 	read line INPUT
 | ||||
|   cbi(DATAIN_DDR,  DATAIN); | ||||
| #ifdef AVCLAN_ST485 | ||||
|   sbi(DATAIN_PORT, DATAIN); | ||||
| #else | ||||
|   cbi(DATAIN_PORT, DATAIN); | ||||
| #endif | ||||
| 
 | ||||
|   // AVCLan TX+/TX-		write line OUTPUT
 | ||||
| #ifdef AVCLAN_RESISTOR | ||||
|   cbi(DATAOUT_DDR,  DATAOUT); | ||||
|   cbi(DATAOUT_PORT, DATAOUT); | ||||
|   cbi(ADCSRB, ACME);	// Analog Comparator Multiplexer Enable - NO
 | ||||
|   cbi(ACSR, ACIS1);	  // Analog Comparator Interrupt Mode Select
 | ||||
|   cbi(ACSR, ACIS0);   // Comparator Interrupt on Output Toggle
 | ||||
|   cbi(ACSR, ACD); 	  // Analog Comparator Disbale - NO
 | ||||
| #else | ||||
| #ifdef AVCLAN_ST485 | ||||
|   sbi(DATAOUT_DDR,  DATAOUT); | ||||
|   sbi(OUTEN_DDR,  OUTEN); | ||||
|   AVC_OUT_DIS; | ||||
|   OUTPUT_SET_0; | ||||
| #else | ||||
|   //avclan driver on PCA82C250 & LM239N
 | ||||
|   //avclan driver on PCA82C250
 | ||||
|   sbi(DATAOUT_DDR,  DATAOUT); | ||||
|   AVC_OUT_DIS; | ||||
|   OUTPUT_SET_0; | ||||
| #endif | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
|   // timer2 setup, prescaler factor - 8
 | ||||
| #if defined(__AVR_ATmega8__) | ||||
|   //  ASSR=0x00;
 | ||||
|   TCCR2 = 0x02; | ||||
|   //  TCNT0=0x00;
 | ||||
|   //  TCNT2=0x00;
 | ||||
|   //  OCR2=0x00;
 | ||||
| #else   // ATMega168
 | ||||
|   //  ASSR=0x00;
 | ||||
|   //  TCCR2A=0x00;
 | ||||
|   TCCR0B = 0x02; | ||||
|   //  TCNT0=0x00;
 | ||||
|   TCCR2B = 0x02; | ||||
|   //  TCNT2=0x00;
 | ||||
|   //  OCR2A=0x00;
 | ||||
|   //  OCR2B=0x00;
 | ||||
| #endif | ||||
| @ -75,22 +55,19 @@ word AVCLanDrv::readBits (byte nbBits) | ||||
|     } | ||||
| 
 | ||||
|     // Reset timer to measure bit length.
 | ||||
|     TCNT0 = 0; | ||||
|     TCNT2 = 0; | ||||
|     // Wait until falling edge.
 | ||||
|     while (INPUT_IS_SET); | ||||
|     // Compare half way between a '1' (20 us) and a '0' (32 us ): 32 - (32 - 20) /2 = 26 us
 | ||||
|     if (TCNT0 < AVC_BIT_0_HOLD_ON_MIN_LENGTH) { | ||||
|     if (TCNT2 < AVC_BIT_0_HOLD_ON_MIN_LENGTH) { | ||||
|       // Set new bit.
 | ||||
|       data |= 0x0001; | ||||
|       // Adjust parity.
 | ||||
|       _parityBit = !_parityBit; | ||||
|     } | ||||
|   } | ||||
|   while (INPUT_IS_CLEAR && TCNT0 < AVC_NORMAL_BIT_LENGTH); | ||||
|   while (INPUT_IS_CLEAR && TCNT2 < AVC_NORMAL_BIT_LENGTH); | ||||
| 
 | ||||
|   //  char buff[10] = {0};
 | ||||
|   //  sprintf(buff, "%x", data );
 | ||||
|   //  // bSDLog.logs( buff );
 | ||||
|   return data; | ||||
| } | ||||
| 
 | ||||
| @ -106,18 +83,18 @@ byte AVCLanDrv::_readMessage () | ||||
| 
 | ||||
|   // Start bit.
 | ||||
|   while (INPUT_IS_CLEAR); | ||||
|   TCCR0B = 0x03;    // prescaler 32
 | ||||
|   TCNT0 = 0; | ||||
|   TCCR2B = 0x03;    // prescaler 32
 | ||||
|   TCNT2 = 0; | ||||
|   // Wait until falling edge.
 | ||||
|   while (INPUT_IS_SET) { | ||||
|     t = TCNT0; | ||||
|     t = TCNT2; | ||||
|     if (t > 0xFF) { | ||||
|       TCCR0B = 0x02;    // prescaler 8
 | ||||
|       TCCR2B = 0x02;    // prescaler 8
 | ||||
|       SREG = oldSREG; | ||||
|       return 1; | ||||
|     } | ||||
|   } | ||||
|   TCCR0B = 0x02;    // prescaler 8
 | ||||
|   TCCR2B = 0x02;    // prescaler 8
 | ||||
| 
 | ||||
|   if (t < AVC_START_BIT_HOLD_ON_MIN_LENGTH) { | ||||
|     //if (t < 0x16){
 | ||||
| @ -231,17 +208,17 @@ byte AVCLanDrv::readMessage () | ||||
| ////--------------------------------------------------------------------------------
 | ||||
| //{
 | ||||
| //  // Reset timer to measure bit length.
 | ||||
| //  TCCR0B = 0x03;    // prescaler 32
 | ||||
| //  TCNT0 = 0;
 | ||||
| //  TCCR2B = 0x03;    // prescaler 32
 | ||||
| //  TCNT2 = 0;
 | ||||
| //  OUTPUT_SET_1;
 | ||||
| //
 | ||||
| //  // Pulse level high duration.
 | ||||
| //  while ( TCNT0 < AVC_START_BIT_HOLD_ON_LENGTH );
 | ||||
| //  while ( TCNT2 < AVC_START_BIT_HOLD_ON_LENGTH );
 | ||||
| //  OUTPUT_SET_0;
 | ||||
| //
 | ||||
| //  // Pulse level low duration until ~185 us.
 | ||||
| //  while ( TCNT0 < AVC_START_BIT_LENGTH );
 | ||||
| //  TCCR0B = 0x02;    // prescaler 8
 | ||||
| //  while ( TCNT2 < AVC_START_BIT_LENGTH );
 | ||||
| //  TCCR2B = 0x02;    // prescaler 8
 | ||||
| //
 | ||||
| //}
 | ||||
| 
 | ||||
| @ -251,17 +228,17 @@ void AVCLanDrv::send1BitWord (bool data) | ||||
| //--------------------------------------------------------------------------------
 | ||||
| { | ||||
|   // Reset timer to measure bit length.
 | ||||
|   TCNT0 = 0; | ||||
|   TCNT2 = 0; | ||||
|   OUTPUT_SET_1; | ||||
| 
 | ||||
|   if (data) { | ||||
|     while (TCNT0 < AVC_BIT_1_HOLD_ON_LENGTH); | ||||
|     while (TCNT2 < AVC_BIT_1_HOLD_ON_LENGTH); | ||||
|   } else { | ||||
|     while (TCNT0 < AVC_BIT_0_HOLD_ON_LENGTH); | ||||
|     while (TCNT2 < AVC_BIT_0_HOLD_ON_LENGTH); | ||||
|   } | ||||
| 
 | ||||
|   OUTPUT_SET_0; | ||||
|   while (TCNT0 <  AVC_NORMAL_BIT_LENGTH); | ||||
|   while (TCNT2 <  AVC_NORMAL_BIT_LENGTH); | ||||
| } | ||||
| 
 | ||||
| //// Send a 4 bit word to the AVCLan
 | ||||
| @ -274,20 +251,20 @@ void AVCLanDrv::send1BitWord (bool data) | ||||
| //  // Most significant bit out first.
 | ||||
| //  for ( char nbBits = 0; nbBits < 4; nbBits++ ) {
 | ||||
| //    // Reset timer to measure bit length.
 | ||||
| //    TCNT0 = 2;
 | ||||
| //    TCNT2 = 2;
 | ||||
| //    OUTPUT_SET_1;
 | ||||
| //
 | ||||
| //    if (data & 0x8) {
 | ||||
| //      // Adjust parity.
 | ||||
| //      _parityBit = ! _parityBit;
 | ||||
| //      while ( TCNT0 < AVC_BIT_1_HOLD_ON_LENGTH );
 | ||||
| //      while ( TCNT2 < AVC_BIT_1_HOLD_ON_LENGTH );
 | ||||
| //    } else {
 | ||||
| //      while ( TCNT0 < AVC_BIT_0_HOLD_ON_LENGTH );
 | ||||
| //      while ( TCNT2 < AVC_BIT_0_HOLD_ON_LENGTH );
 | ||||
| //    }
 | ||||
| //
 | ||||
| //    OUTPUT_SET_0;
 | ||||
| //    // Hold output low until end of bit.
 | ||||
| //    while ( TCNT0 < AVC_NORMAL_BIT_LENGTH );
 | ||||
| //    while ( TCNT2 < AVC_NORMAL_BIT_LENGTH );
 | ||||
| //
 | ||||
| //    // Fetch next bit.
 | ||||
| //    data <<= 1;
 | ||||
| @ -304,20 +281,20 @@ void AVCLanDrv::send1BitWord (bool data) | ||||
| //  // Most significant bit out first.
 | ||||
| //  for ( char nbBits = 0; nbBits < 8; nbBits++ ) {
 | ||||
| //    // Reset timer to measure bit length.
 | ||||
| //    TCNT0 = 2;
 | ||||
| //    TCNT2 = 2;
 | ||||
| //    OUTPUT_SET_1;
 | ||||
| //
 | ||||
| //    if (data & 0x80) {
 | ||||
| //      // Adjust parity.
 | ||||
| //      _parityBit = ! _parityBit;
 | ||||
| //      while ( TCNT0 < AVC_BIT_1_HOLD_ON_LENGTH );
 | ||||
| //      while ( TCNT2 < AVC_BIT_1_HOLD_ON_LENGTH );
 | ||||
| //    } else {
 | ||||
| //      while ( TCNT0 < AVC_BIT_0_HOLD_ON_LENGTH );
 | ||||
| //      while ( TCNT2 < AVC_BIT_0_HOLD_ON_LENGTH );
 | ||||
| //    }
 | ||||
| //
 | ||||
| //    OUTPUT_SET_0;
 | ||||
| //    // Hold output low until end of bit.
 | ||||
| //    while ( TCNT0 < AVC_NORMAL_BIT_LENGTH );
 | ||||
| //    while ( TCNT2 < AVC_NORMAL_BIT_LENGTH );
 | ||||
| //
 | ||||
| //    // Fetch next bit.
 | ||||
| //    data <<= 1;
 | ||||
| @ -334,20 +311,20 @@ void AVCLanDrv::send1BitWord (bool data) | ||||
| //  // Most significant bit out first.
 | ||||
| //  for ( char nbBits = 0; nbBits < 12; nbBits++ ) {
 | ||||
| //    // Reset timer to measure bit length.
 | ||||
| //    TCNT0 = 2;
 | ||||
| //    TCNT2 = 2;
 | ||||
| //    OUTPUT_SET_1;
 | ||||
| //
 | ||||
| //    if (data & 0x0800) {
 | ||||
| //      // Adjust parity.
 | ||||
| //      _parityBit = ! _parityBit;
 | ||||
| //      while ( TCNT0 < AVC_BIT_1_HOLD_ON_LENGTH );
 | ||||
| //      while ( TCNT2 < AVC_BIT_1_HOLD_ON_LENGTH );
 | ||||
| //    } else {
 | ||||
| //      while ( TCNT0 < AVC_BIT_0_HOLD_ON_LENGTH );
 | ||||
| //      while ( TCNT2 < AVC_BIT_0_HOLD_ON_LENGTH );
 | ||||
| //    }
 | ||||
| //
 | ||||
| //    OUTPUT_SET_0;
 | ||||
| //    // Hold output low until end of bit.
 | ||||
| //    while ( TCNT0 < AVC_NORMAL_BIT_LENGTH );
 | ||||
| //    while ( TCNT2 < AVC_NORMAL_BIT_LENGTH );
 | ||||
| //
 | ||||
| //    // Fetch next bit.
 | ||||
| //    data <<= 1;
 | ||||
| @ -361,11 +338,11 @@ bool AVCLanDrv::isAvcBusFree (void) | ||||
| //--------------------------------------------------------------------------------
 | ||||
| { | ||||
|   // Reset timer.
 | ||||
|   TCNT0 = 0; | ||||
|   TCNT2 = 0; | ||||
| 
 | ||||
|   while (INPUT_IS_CLEAR) { | ||||
|     // We assume the bus is free if anything happens for the length of 1 bit.
 | ||||
|     if (TCNT0 > AVC_NORMAL_BIT_LENGTH) { | ||||
|     if (TCNT2 > AVC_NORMAL_BIT_LENGTH) { | ||||
|       return true; | ||||
|     } | ||||
|   } | ||||
| @ -384,21 +361,21 @@ bool AVCLanDrv::isAvcBusFree (void) | ||||
| //  // taken over the bus maintaining the pulse until the equivalent of a bit '0' (32 us) is formed.
 | ||||
| //
 | ||||
| //  // Reset timer to measure bit length.
 | ||||
| //  TCNT0 = 0;
 | ||||
| //  TCNT2 = 0;
 | ||||
| //  OUTPUT_SET_1;
 | ||||
| //
 | ||||
| //  // Generate bit '0'.
 | ||||
| //  while (TCNT0 < AVC_BIT_1_HOLD_ON_LENGTH);
 | ||||
| //  while (TCNT2 < AVC_BIT_1_HOLD_ON_LENGTH);
 | ||||
| //  OUTPUT_SET_0;
 | ||||
| //
 | ||||
| //  AVC_OUT_DIS;
 | ||||
| //
 | ||||
| //  while (TCNT0 < AVC_BIT_1_HOLD_ON_LENGTH + AVC_1U_LENGTH);
 | ||||
| //  while (TCNT2 < AVC_BIT_1_HOLD_ON_LENGTH + AVC_1U_LENGTH);
 | ||||
| //  // Measure final resulting bit.
 | ||||
| //  while ( INPUT_IS_SET );
 | ||||
| //
 | ||||
| //  // Sample half-way through bit '0' (26 us) to detect whether the target is acknowledging.
 | ||||
| //  if (TCNT0 > AVC_BIT_0_HOLD_ON_MIN_LENGTH) {
 | ||||
| //  if (TCNT2 > AVC_BIT_0_HOLD_ON_MIN_LENGTH) {
 | ||||
| //    // Slave is acknowledging (ack = 0). Wait until end of ack bit.
 | ||||
| //    while (INPUT_IS_SET );
 | ||||
| //    AVC_OUT_EN;
 | ||||
|  | ||||
| @ -7,21 +7,19 @@ | ||||
| 
 | ||||
| //--------------------------------------------------------------------------------
 | ||||
| #define LED_ON   sbi(LED_PORT, LED_OUT); | ||||
| #define LED_OFF   cbi(LED_PORT, LED_OUT); | ||||
| #define LED_OFF  cbi(LED_PORT, LED_OUT); | ||||
| 
 | ||||
| #define HONDA_DIS_ON   sbi(LED_PORT, COMMUT_OUT); | ||||
| #define HONDA_DIS_OFF  cbi(LED_PORT, COMMUT_OUT); | ||||
| #define HONDA_DIS_ON   sbi(COMMUT_PORT, COMMUT_OUT); | ||||
| #define HONDA_DIS_OFF  cbi(COMMUT_PORT, COMMUT_OUT); | ||||
| 
 | ||||
| static int MAX_ERROR_COUNT = 30; | ||||
| byte errorID; | ||||
| int  error_count; | ||||
| char BUFFF[15]; | ||||
| //--------------------------------------------------------------------------------
 | ||||
| void setup() | ||||
| //--------------------------------------------------------------------------------
 | ||||
| { | ||||
|   sbi(LED_DDR,  COMMUT_OUT); | ||||
|   cbi(LED_PORT, COMMUT_OUT); | ||||
| 
 | ||||
|   avclan.begin(); | ||||
|   avclanHonda.begin(); | ||||
|   errorID = 0; | ||||
| @ -29,6 +27,7 @@ void setup() | ||||
| 
 | ||||
|   avclanBT.begin(); | ||||
|   avclanBT.println("Start HONDA avclan."); | ||||
|   LED_ON; | ||||
| } | ||||
| 
 | ||||
| //--------------------------------------------------------------------------------
 | ||||
| @ -56,6 +55,10 @@ void loop() | ||||
| 
 | ||||
|       avclanHonda.getActionID(); | ||||
|       if ( avclan.actionID != ACT_NONE ) { | ||||
|         sprintf( BUFFF, "Action: %d", avclan.actionID ); | ||||
|         avclanBT.println( BUFFF ); | ||||
| 
 | ||||
|         LED_ON; | ||||
|         avclanHonda.processAction( (AvcActionID)avclan.actionID ); | ||||
|       } | ||||
|     } else { | ||||
| @ -63,11 +66,6 @@ void loop() | ||||
|       else error_count = 1; | ||||
| 
 | ||||
|       errorID = res; | ||||
| 
 | ||||
|       if ( error_count > MAX_ERROR_COUNT ) { | ||||
|         error_count = 0; | ||||
|         avclanHonda.setHondaDis(true); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
| @ -82,11 +80,14 @@ void loop() | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   if ( !error_count &&  errorID ) { | ||||
|     char BUFFF[15]; | ||||
|     sprintf(BUFFF, "Error: %d", errorID); | ||||
|   if ( error_count > MAX_ERROR_COUNT ) { | ||||
|     error_count = 0; | ||||
|     avclanHonda.setHondaDis(true); | ||||
| 
 | ||||
|     LED_OFF; | ||||
| 
 | ||||
|     sprintf(BUFFF, "Error: %d", errorID ); | ||||
|     avclanBT.println( BUFFF ); | ||||
|     delay(2000); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -11,31 +11,38 @@ | ||||
| #define MAXSENDATTEMP   3 | ||||
| 
 | ||||
| //********** arduino & driver based on PCA82C250 **********
 | ||||
| // http://pighixxx.com/nanopdf.pdf
 | ||||
| #ifdef AVCLAN_PCA82C250 | ||||
| #define AVCLANDRIVER_TYPE    "Arduino - PCA82C250" | ||||
| // define out pin (pin D6 arduino)
 | ||||
| #define  DATAOUT_DDR    DDRD | ||||
| #define  DATAOUT_PORT   PORTD | ||||
| #define  DATAOUT_PIN    PIND | ||||
| #define  DATAOUT        6 | ||||
| // define out pin (pin 8 arduino) for AVCLAN_PCA82C250
 | ||||
| #define DATAOUT_DDR	DDRB | ||||
| #define DATAOUT_PORT	PORTB | ||||
| #define	DATAOUT_PIN	PINB | ||||
| #define DATAOUT		0 | ||||
| 
 | ||||
| // define in pin (pin D5 arduino)
 | ||||
| #define  DATAIN_DDR  DDRD | ||||
| #define  DATAIN_PORT PORTD | ||||
| #define  DATAIN_PIN  PIND | ||||
| #define  DATAIN      5 | ||||
| // define in pin (pin 9 arduino) for AVCLAN_PCA82C250
 | ||||
| #define DATAIN_DDR	DDRB | ||||
| #define DATAIN_PORT	PORTB | ||||
| #define	DATAIN_PIN	PINB | ||||
| #define DATAIN		1 | ||||
| 
 | ||||
| // connected to digital pin A0
 | ||||
| #define  COMMUT_DDR     DDRC | ||||
| #define  COMMUT_PORT    PORTC | ||||
| #define  COMMUT_PIN     PINC | ||||
| #define  COMMUT_OUT     0 | ||||
| 
 | ||||
| // LED connected to digital pin 13
 | ||||
| #define  LED_DDR     DDRC | ||||
| #define  LED_PORT    PORTC | ||||
| #define  LED_PIN     PINC | ||||
| #define COMMUT_OUT   0 | ||||
| #define LED_DDR		DDRB | ||||
| #define LED_PORT	PORTB | ||||
| #define LED_PIN		PINB | ||||
| #define LED_OUT		5 | ||||
| 
 | ||||
| 
 | ||||
| // AZFM board activate
 | ||||
| #define AZFM_INIT | ||||
| #define AZFM_ON | ||||
| #define AZFM_OFF | ||||
| //#define AZFM_INIT
 | ||||
| //#define AZFM_ON
 | ||||
| //#define AZFM_OFF
 | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										
											BIN
										
									
								
								sketch/sketchbook_20100805.rar
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								sketch/sketchbook_20100805.rar
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user