⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asuro 016, build 001, left tracksensor controls left engine.c

📁 Asuro示例源码 Left tracksensor controls left engine.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
  //disconnect both left engine connections from VCC

  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|port name  |   PD7   |   PD6   |   PD5   |   PD4   |   PD3   |   PD2   |   PD1   |   PD0   |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|bit number |    7    |    6    |    5    |    4    |    3    |     2   |     1   |    0    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|pin number |   13    |   12    |   11    |    6    |    5    |     4   |     3   |    2    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|signal name| ODO_LDS | FRT_LED | REV_LFT | FWD_LFT | SWI_INT | SLD_RED | IR_RXD  | IR_TXD2 |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( DDRD   ,                    REV_LFT_O|FWD_LFT_O                                        ); 
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( PORTD  ,                    REV_LFT_H|FWD_LFT_H                                        ); 
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+

  //disconnect both right engine connections from VCC

  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|port name  |   PB7   |   PB6   |   PB5   |   PB4   |   PB3   |   PB2   |   PB1   |   PB0   |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|bit number |    7    |    6    |    5    |    4    |    3    |     2   |     1   |    0    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|pin number |   10    |    9    |   19    |   18    |   17    |    16   |    15   |   14    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|signal name|  XTAL2  |  XTAL1  | REV_RGT | FWD_RGT | IR_TXD1 | SPD_RGT | SPD_LFT | SLD_GRN |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( DDRB   ,                    REV_RGT_O|FWD_RGT_O                                        );
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( PORTB  ,                    REV_RGT_L|FWD_RGT_L                                        );
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+

  //set left/right engine speed ports as output

  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|port name  |   PB7   |   PB6   |   PB5   |   PB4   |   PB3   |   PB2   |   PB1   |   PB0   |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|bit number |    7    |    6    |    5    |    4    |    3    |     2   |     1   |    0    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|pin number |   10    |    9    |   19    |   18    |   17    |    16   |    15   |   14    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|signal name|  XTAL2  |  XTAL1  | FWD_RGT | REV_RGT | IR_TXD1 | SPD_RGT | SPD_LFT | SLD_GRN |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( DDRB   ,                                                            SPD_RGT_O|SPD_LFT_O);
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( PORTB  ,                                                            SPD_RGT_L|SPD_LFT_L);
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+

  //---init-timer-counter-register-1-for-controlling-engine-speeds---//

  //CLK-i/o lijkt 8MHz/2=4MHz te zijn!
  //In Waveform Generation Mode 1, 8-bit, TOP = 0xFF = 255
  //In prescaler mode 1, Counter clock (CLK-i/o) should be external clock	(8MHz) but seems to be external clock / 2 (4MHz)
  //Frequency = CLK-i/o / 8 / 256 = 4MHz / 8 / 256 = 2KHz

  //TCCR1A	Timer Counter 1 Control Register A
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( TCCR1A ,COM1A1_H |COM1A0_L |COM1B1_H |COM1B0_L | FOC1A_L | FOC1B_L | WGM11_L | WGM10_H );
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //                 n         n         .         .         .         .         .         .    = 00 : normal port operation
  //                 n         n         .         .         .         .         .         .    = 01 : toggle OC1A (pin15) on match
  //                 1         0         .         .         .         .         .         .    = 10 : OC1A (pin15) low    on match, high at TOP
  //                 n         n         .         .         .         .         .         .    = 11 : OC1A (pin15) high   on match
  //                 .         .         n         n         .         .         .         .    = 00 : normal port operation
  //                 .         .         n         n         .         .         .         .    = 01 : toggle OC1B (pin16) on match
  //                 .         .         1         0         .         .         .         .    = 10 : OC1B (pin16) low    on match, high at TOP
  //                 .         .         n         n         .         .         .         .    = 11 : OC1B (pin16) high   on match
  //                 .         .         .         .         0         0         .         .    = set to 0 in PWM mode (for compatibility, see pdf page 96)
  //                 .         .         .         .         .         .         0         1    = nn01 : WGM13-WGM10: Waveform Generation Mode 1, PWM Phase correct 8-bit
  //                                                                                                       XXnn : see TCCR1B register	

  //TCCR1B	Timer Counter 1 Control Register B
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( TCCR1B , ICNC1_L | ICES1_L           | WGM13_L | WGM12_L | CS12_L  | CS11_H  | CS10_L  );
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //                 0         .         .         .         .         .         .         .    = no noise-canceler (no 4 clock AD conversion delay)
  //                 .         0         .         .         .         .         .         .    = no input-capture selection
  //                 .         .         x         .         .         .         .         .    = unused
  //                 .         .         .         0         0         .         .         .    = 00nn : WGM13-WGM10: Waveform Generation Mode 1 (nnXX : see TCCR1A register)
  //                 .         .         .         .         .         0         1         0    = Counterclock = Systemclock / 8
  //

  //set left engine speed to zero
  OCR1A=0x00;

  //set right engine speed to zero
  OCR1B=0x00;

  //set left engine direction to forward
  SFRX(PORTD,PD4_L|PD5_H);

  //set right engine direction to forward
  SFRX(PORTB,PB4_L|PB5_H);

}
//================================================================================
//	GET LEFT TRACKING INFRARED SENSOR VALUES
//================================================================================
unsigned char vGetLeftTrackingInfraredSensorValues(void){

	//---prepair-adconverter-and-select-left-odometer-ir-sensor-as-adconverter-input---//

	//REFSn = use eternal pin 20 (AVCC) as ad-converter reference voltage (with capacitor at pin 21 (AREF)
	//ADLAR = use 'left justify' as ad-converter result mode, using only highest 8 bits of 10-bit ad-converter value, read from ADCH
	//MUXn  = select left IR odometer sensor ad-converter3 (ADC3)
	SFRX(ADMUX,REFS1_L|REFS0_H|ADLAR_H|MUX3_L|MUX2_L|MUX1_H|MUX0_H);

	//select: AD-Converter on, Start conversion, Oneshot mode, no interrupt, prescaler 64 
	//ADEN = enable ad converter
	//ADSC = start ad conversion
	//ADFR = disable free running (enable one-shot)
	//ADIE = disable ad-conversion-ready interrupt
	//ADPS = select prescaler (64x) clock frequency for ad conversion
	SFRX(ADCSRA,ADEN_H|ADSC_H|ADFR_L|ADIE_L|ADPS2_H|ADPS1_H|ADPS0_L);

	//wait until AD-conversion is finished (ADSC-bit low)
	while(CHK_BYTE_BIT_SET(ADCSRA,ADSC_H));

	//return highest 8 bits of 10-bit ad-converter value (left justified)
	return ADCH;

}
//================================================================================
//	MAIN
//================================================================================
int main(void){

	//var

	//stop 36KHz timer2 (left active by boot sector!) but does not harm anything
	SFRX(TCCR2,CS22_L|CS21_L|CS20_L);

	//init all ports
	vInitAllPorts();
	
	//init engines using mode 1
	vInitEnginesUsingMode1();

	//endless loop
	while(1){

		//set left engine speed register according left tracksensor value
		OCR1A=vGetLeftTrackingInfraredSensorValues();

	}

	//exit function
	return 0;
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -