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

📄 asuro 017, build 001, l-r tracksensor controls l-r breakled.c

📁 Asuro小车示例源码 L-R tracksensor controls L-R breakled
💻 C
📖 第 1 页 / 共 3 页
字号:
  //|signal name|COM1A1_X |COM1A0_X |COM1B1_X |COM1B0_X | FOC1A_X | FOC1B_X | WGM11_X | WGM10_X |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( TCCR1A ,
                 COM1A1_L |COM1A0_L                                                             |  //deselect 'timer1 controlling pin OC1A (left  engine speed) directly'
                                     COM1B1_L |COM1B0_L                                         |  //deselect 'timer1 controlling pin OC1B (right engine speed) directly'
                                                          FOC1A_L | FOC1B_L                     |  //set to 0 in PWM mode (for compatibility, see pdf page 96)
                                                                              WGM11_H | WGM10_L ); //low part of timer1 operating mode 10 selection
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
	
	
  //+-------------------------------------------------------------------------------------------+
  //| TIMSK = Timer/Counter Interrupt Mask Register                                             |
  //+-------------------------------------------------------------------------------------------+
  //|                                                                                           |
  //| OCIE2    = timer/counter2, output-compare-match interrupt enable                          |
  //| TOIE2    = timer/counter2, overflow interrupt enable                                      |
  //| TICIE1   = timer/counter1, input-capture interrupt enable                                 |
  //| OCIE1A   = timer/counter1, equal to output-compare-A-match register, interrupt enable     |
  //| OCIE1B   = timer/counter1, equal to output-compare-B-match register, interrupt enable     |
  //| TOIE1    = timer/counter1 overflow interrupt enable                                       |
  //| RESERVED = unused                                                                         |
  //| TOIE0    = timer/counter0 overflow interrupt enable                                       |
  //|                                                                                           |
  //+-------------------------------------------------------------------------------------------+
  //| enable timer/counter1 interrupt on output compares A and B                                |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|           | Timer2  | Timer2  | Timer1  | Timer1  | Timer1  | Timer1  |    -    | Timer0  |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|bit number |    7    |    6    |    5    |    4    |    3    |     2   |     1   |    0    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|signal name| OCIE2_X | TOIE2_X |TICIE1_X |OCIE1A_X |OCIE1B_X | TOIE1_X |RESERVED | TOIE0_X |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( TIMSK  ,
                  OCIE2_L | TOIE2_L |TICIE1_L                               |RESERVED | TOIE0_L |  //not used
                                               OCIE1A_H |OCIE1B_H                               |  //A + B compare interrupts enable
                                                                    TOIE1_H                     ); //timer1 overflow interrupt enable
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+


}
//================================================================================//
//  ENABLE GLOBAL INTERRUPT                                                       //
//================================================================================//
void vEnableGlobalInterrupt(void){
  //+-------------------------------------------------------------------------------------------+
  //| SREG =  Status Register                                                                   |
  //+-------------------------------------------------------------------------------------------+
  //|                                                                                           |
  //| GIE  = I = Global Interrupt Enable                                                        |
  //| BCS  = T = Bit Copy Storage                                                               |
  //| HCF  = H = Half Carry Flag                                                                |
  //| SB   = S = Sign Bit                                                                       |
  //| TCOF = V = Two's Complement Overflow Flag                                                 |
  //| GIE  = I = Global Interrupt Enable                                                        |
  //| NF   = N = Negative Flag                                                                  |
  //| ZF   = Z = Zero Flag                                                                      |
  //| CF   = C = Carry Flag                                                                     |
  //|                                                                                           |
  //+-------------------------------------------------------------------------------------------+
  //| programmer settings comment                                                               |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|bit number |    7    |    6    |    5    |    4    |    3    |     2   |     1   |    0    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //| SREG      |  GIE_X  |  BCS_X  |  HCF_X  |  SB_X   | TCOF_X  |  NF_X   |  ZF_X   |  CF_X   |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( SREG   ,  GIE_H                                                                        );
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //                 n         .         .         .         .         .         .         .    = 1 = global interrupt enable
  //                 .         n         .         .         .         .         .         .    = 1 =
  //                 .         .         n         .         .         .         .         .    = 1 =
  //                 .         .         .         n         .         .         .         .    = 1 =
  //                 .         .         .         .         n         .         .         .    = 1 =
  //                 .         .         .         .         .         n         .         .    = 1 = 
  //                 .         .         .         .         .         .         n         .    = 1 = 
  //                 .         .         .         .         .         .         .         n    = 1 =
  //+-------------------------------------------------------------------------------------------+
}
/*
//================================================================================//
//  SELECT LEFT TRACK SENSOR AS AD-CONVERTER INPUT                                //
//================================================================================//
void vSelectLeftTrackSensorAsAdcInput(void){
  //+-------------------------------------------------------------------------------------------+
  //| ADMUX = ADC Multiplexer Selection Register                                                |
  //+-------------------------------------------------------------------------------------------+
  //|                                                                                           |
  //| REFSn = select reference voltage source (= maximum measurement voltage value)             |
  //| ADLAR = left justify or right justify measured value into register ADCH/ADCL              |
  //| MUXn  = select measurement-point to be connected to the AD-converter measurement input    |
  //|                                                                                           |
  //+-------------------------------------------------------------------------------------------+
  //| select AVCC pin as reference, use left justify, use left track sensor as measurement-point|
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|bit number |    7    |    6    |    5    |    4    |    3    |     2   |     1   |    0    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //| ADMUX     | REFS1_X | REFS0_X | ADLAR_X |RESERVED | MUX3_X  | MUX2_X  | MUX1_X  | MUX0_X  |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( ADMUX  , REFS1_L | REFS0_H | ADLAR_H |RESERVED | MUX3_L  | MUX2_L  | MUX1_H  | MUX0_H  );
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //                 n         n         .         .         .         .         .         .    = 00 = external AREF pin
  //                 n         n         .         .         .         .         .         .    = 01 = external AVCC pin with capacitor at AREF pin
  //                 n         n         .         .         .         .         .         .    = 10 = reserved
  //                 n         n         .         .         .         .         .         .    = 11 = internal 2.56V Voltage Reference with external capacitor at AREF pin
  //                 .         .         n         .         .         .         .         .    = 0 = right justify => ADCH:ADCL = ......98:76543210
  //                 .         .         n         .         .         .         .         .    = 1 = left  justify => ADCH:ADCL = 98765432:10......
  //                 .         .         .         .         n         n         n         n    =  select AD-Converter measurement input
  //                                                         n         n         n         n    = 0000-0111 = external pins ADC0 - ADC7
  //                                                         n         n         n         n    = 1000-1101 = reserved
  //                                                         n         n         n         n    = 1110      = internal bandgap level 1.23V
  //                                                         n         n         n         n    = 1111      = external AGND pin level
  //+-------------------------------------------------------------------------------------------+
}
*/
//================================================================================
//  INIT AD-CONVERTER USING INTERRUPT
//================================================================================
void vInitAdConverterUsingInterrupt(void){
  //+-------------------------------------------------------------------------------------------+
  //| ADMUX = ADC Multiplexer Selection Register                                                |
  //+-------------------------------------------------------------------------------------------+
  //|                                                                                           |
  //| REFSn = select reference voltage source (= maximum measurement voltage value)             |
  //| ADLAR = left justify or right justify measured value into register ADCH/ADCL              |
  //| MUXn  = select measurement-point to be connected to the AD-converter measurement input    |
  //|                                                                                           |
  //+-------------------------------------------------------------------------------------------+
  //| select AVCC pin as reference, use left justify, use left track sensor as measurement-point|
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|bit number |    7    |    6    |    5    |    4    |    3    |     2   |     1   |    0    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //| ADMUX     | REFS1_X | REFS0_X | ADLAR_X |RESERVED | MUX3_X  | MUX2_X  | MUX1_X  | MUX0_X  |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( ADMUX  , REFS1_L | REFS0_H | ADLAR_H |RESERVED | MUX3_L  | MUX2_L  | MUX1_L  | MUX0_L  );
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //                 n         n         .         .         .         .         .         .    = 00 = external AREF pin
  //                 n         n         .         .         .         .         .         .    = 01 = external AVCC pin with capacitor at AREF pin
  //                 n         n         .         .         .         .         .         .    = 10 = reserved
  //                 n         n         .         .         .         .         .         .    = 11 = internal 2.56V Voltage Reference with external capacitor at AREF pin
  //                 .         .         n         .         .         .         .         .    = 0 = right justify => ADCH:ADCL = ......98:76543210
  //                 .         .         n         .         .         .         .         .    = 1 = left  justify => ADCH:ADCL = 98765432:10......
  //                 .         .         .         .         n         n         n         n    =  select AD-Converter measurement input
  //                                                         n         n         n         n    = 0000-0111 = external pins ADC0 - ADC7
  //                                                         n         n         n         n    = 1000-1101 = reserved
  //                                                         n         n         n         n    = 1110      = internal bandgap level 1.23V
  //                                                         n         n         n         n    = 1111      = external AGND pin level
  //+-------------------------------------------------------------------------------------------+
	
  //+-------------------------------------------------------------------------------------------+
  //| ADCSRA = ADC Control and Status Register A                                                |
  //+-------------------------------------------------------------------------------------------+
  //|                                                                                           |
  //| A complete ad-conversion takes 13 clock cycles (clock speed defined by prescaler)         |
  //|                                                                                           |
  //| ADEN = enable ad-converter (switch ad-converter on, consumes extra current)               |
  //| ADSC = start ad-conversion (set low by microcontroller if conversion has finished)        |
  //| ADFR = select free-running mode (checking on ADSC or ADIF bit is useless)                 |
  //| ADIF = ad-converter interrupt flag (is set when conversion has finished, using interrupt) |
  //| ADIE = ad-converter interrupt enable (interrupt occurs when conversion has finished)      |
  //| ADPSn = select ad-converter clock prescaler                                               |
  //|                                                                                           |
  //+-------------------------------------------------------------------------------------------+
  //| ADC Clock frequency should be between 50KHz and 200KHz (.pdf)                             |
  //|                                                                                           |
  //| Prescaler     ADC clock freq.           measured ADC duration (by oscilloscoop)           |
  //|                                                                                           |
  //| 000           8 MHz/  2 = 4000 KHz        7.8 us                                          |
  //| 001           8 MHz/  2 = 4000 KHz        7.8 us                                          |
  //| 010           8 MHz/  4 = 2000 KHz       10   us                                          |
  //| 011           8 MHz/  8 = 1000 KHz       16   us                                          |
  //| 100           8 MHz/ 16 =  500 KHz       30   us                                          |
  //| 101           8 MHz/ 32 =  250 KHz       55   us                                          |
  //| 110           8 MHz/ 64 =  125 KHz      110   us   <--- use these                         |
  //| 111           8 MHz/128 =   63 KHz      230   us                                          |
  //|                                                                                           |
  //+-------------------------------------------------------------------------------------------+
  //| enable ADC, nostart ADC, no free-running, interrupt enabled, clear int. flag, prescaler 6 |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|bit number |    7    |    6    |    5    |    4    |    3    |     2   |     1   |    0    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //| ADCSRA    | ADEN_X  | ADSC_X  | ADFR_X  | ADIF_X  | ADIE_X  | ADPS2_X | ADPS1_X | ADPS0_X |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( ADCSRA , ADEN_H  | ADSC_L  | ADFR_L  | ADIF_L  | ADIE_H  | ADPS2_H | ADPS1_H | ADPS0_L );
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //                 n         .         .         .         .         .         .         .    = 1 = AD-Converter enable
  //                 .         n         .         .         .         .         .         .    = 1 = start AD-conversion
  //                 .         n         .         .         .         .         .         .    = 0 = AD-conversion finished
  //                 .         .         n         .         .         .         .         .    = 1 = free running mode
  //                 .         .         .         n         .         .         .         .    = 1 = interrupt (or: conversion finished)
  //                 .         .         .         .         n         .         .         .    = 1 = AD-conversion interrupt enable
  //                 .         .         .         .         .         n         n         n    = ADC prescaler
  //                 .         .         .         .         .         n         n         n    = 000-111 = adc clock division factors
  //                 .         .         .         .         .         n         n         n    = 0=2,1=2,2=4,3=8,4=16,5=32,6=64,7=128
  //+-------------------------------------------------------------------------------------------+
}
//================================================================================
//  INIT TIMER 0
//================================================================================
void vSetupFreeRunningTimer0UsingOverflowInterrupt(void){

  //+-------------------------------------------------------------------------------------------+
  //| TCCR0 = Timer/Counter Control Register                                                    |
  //+-------------------------------------------------------------------------------------------+

⌨️ 快捷键说明

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