Для такой маленькой частоты как раз.Gudd-Head писал(а):Тогда только софтово
Таймеры/счётчики в AVR
Re: Таймеры/счётчики в AVR
- Реклама
-
PlagueDoctor
- Первый раз сказал Мяу!
- Сообщения: 28
- Зарегистрирован: Пн ноя 24, 2014 12:02:44
таймеры 1 и 3 atmega128
Всем доброго времени суток! Подскажите пожалуйста! Я настроил на atmega128 таймер 1 на OCR1A и OCR1B. Программирую в CodeVisionAVR. Когда дохожу до OCR1C, CVAVR пишет ошибку: "неизвестный символ OCR1C". В чём может быть проблема? Во фьюзах совместимость с atmega103 я отключил, пользуюсь всеми возможностями 128. И другой вопрос, когда настраиваю таймер 3 и пишу OCR3A=(значение), выдаёт такое же: "неизвестный символ OCR3A". Прошу помощи!
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Таймеры/счётчики в AVR
А что такое "OCR1C"?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
-
PlagueDoctor
- Первый раз сказал Мяу!
- Сообщения: 28
- Зарегистрирован: Пн ноя 24, 2014 12:02:44
Re: Таймеры/счётчики в AVR
OCR1C - третий выход таймера 1
- Вложения
-
- atmega128a.png
- (114.72 КБ) 656 скачиваний
Re: Таймеры/счётчики в AVR
Листинг бы привели. У вас файл дефайнов правильный подключен? Там есть опеределение вашей лексемы?
- Реклама
-
PlagueDoctor
- Первый раз сказал Мяу!
- Сообщения: 28
- Зарегистрирован: Пн ноя 24, 2014 12:02:44
Re: Таймеры/счётчики в AVR
Код: Выделить всё
#include <io.h>
#include <delay.h>
// Alphanumeric LCD functions
#include <alcd.h>
// Declare your global variables here
// Voltage Reference: AVCC pin
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=(1<<ADSC);
// Wait for the AD conversion to complete
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCW;
}
void main(void)
{
// Declare your local variables here
int q=0x2EE;
// Input/Output Ports initialization
// Port A initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);
// Port B initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(1<<DDB7) | (1<<DDB6) | (1<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=0 Bit6=0 Bit5=0 Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// Port C initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
// Port E initialization
// Function: Bit7=In Bit6=In Bit5=Out Bit4=Out Bit3=Out Bit2=In Bit1=In Bit0=In
DDRE=(0<<DDE7) | (0<<DDE6) | (1<<DDE5) | (1<<DDE4) | (1<<DDE3) | (0<<DDE2) | (0<<DDE1) | (0<<DDE0);
// State: Bit7=T Bit6=T Bit5=0 Bit4=0 Bit3=0 Bit2=T Bit1=T Bit0=T
PORTE=(0<<PORTE7) | (0<<PORTE6) | (0<<PORTE5) | (0<<PORTE4) | (0<<PORTE3) | (0<<PORTE2) | (0<<PORTE1) | (0<<PORTE0);
// Port F initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRF=(0<<DDF7) | (0<<DDF6) | (0<<DDF5) | (0<<DDF4) | (0<<DDF3) | (0<<DDF2) | (0<<DDF1) | (0<<DDF0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTF=(0<<PORTF7) | (0<<PORTF6) | (0<<PORTF5) | (0<<PORTF4) | (0<<PORTF3) | (0<<PORTF2) | (0<<PORTF1) | (0<<PORTF0);
// Port G initialization
// Function: Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRG=(0<<DDG4) | (0<<DDG3) | (0<<DDG2) | (0<<DDG1) | (0<<DDG0);
// State: Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTG=(0<<PORTG4) | (0<<PORTG3) | (0<<PORTG2) | (0<<PORTG1) | (0<<PORTG0);
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: Fast PWM top=ICR1
// OC1A output: Non-Inverted PWM
// OC1B output: Non-Inverted PWM
// OC1C output: Non-Inverted PWM
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 8 us
// Output Pulse(s):
// OC1A Period: 8 us
// OC1B Period: 8 us
// OC1C Period: 8 us
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (1<<COM1C1) | (0<<COM1C0) | (1<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (1<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x4E;
ICR1L=0x20;
OCR1AH=0x02;
OCR1AL=0xEE;
OCR1BH=0x02;
OCR1BL=0xEE;
OCR1CH=0x02;
OCR1CL=0xEE;
// Timer/Counter 3 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: Fast PWM top=ICR3
// OC3A output: Non-Inverted PWM
// OC3B output: Non-Inverted PWM
// OC3C output: Non-Inverted
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 8 us
// Output Pulse(s):
// OC3A Period: 8 us
// OC3B Period: 8 us
// OC3C Period: 8 us
// Timer3 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR3A=(1<<COM3A1) | (0<<COM3A0) | (1<<COM3B1) | (0<<COM3B0) | (1<<COM3C1) | (0<<COM3C0) | (1<<WGM31) | (0<<WGM30);
TCCR3B=(0<<ICNC3) | (0<<ICES3) | (1<<WGM33) | (1<<WGM32) | (0<<CS32) | (1<<CS31) | (0<<CS30);
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x02;
OCR3AL=0xEE;
OCR3BH=0x02;;
OCR3BL=0xEE;
OCR3CH=0x02;
OCR3CL=0xEE;
// ADC initialization
// ADC Clock frequency: 125,000 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
SFIOR=(0<<ACME);
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTA Bit 0
// RD - PORTA Bit 1
// EN - PORTA Bit 2
// D4 - PORTA Bit 3
// D5 - PORTA Bit 4
// D6 - PORTA Bit 5
// D7 - PORTA Bit 6
// Characters/line: 16
lcd_init(16);
while (1)
{
// Place your code here
read_adc(0);
if (ADCW>=0) {
q=750+ADCW*1.4;
OCR1A=q;
delay_ms(150);
}
read_adc(1);
if (ADCW>=0) {
q=750+ADCW*1.4;
OCR1B=q;
delay_ms(150);
}
/*read_adc(2);
if (ADCW>=0) {
q=750+ADCW*1.4;
OCR1C=q; // ВОТ ЭТА ЕРУНДА НЕ РАБОТАЕТ!!!
delay_ms(150);
}*/
}
}Re: Таймеры/счётчики в AVR
OCR1C в отличие от OCR1A и OCR1B в расширенной адресации находится.
Как на Си это разруливается не знаю, должно быть по идее параллельно на это.
Как на Си это разруливается не знаю, должно быть по идее параллельно на это.
-
PlagueDoctor
- Первый раз сказал Мяу!
- Сообщения: 28
- Зарегистрирован: Пн ноя 24, 2014 12:02:44
Re: Таймеры/счётчики в AVR
А нет у Вас информации, как это делается?
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Таймеры/счётчики в AVR
В вашем же коде написано
и работает. Что мешает сделать также?
А в заголовке CVAVR для контроллера может тупо не быть описания 16-битного доступа к этому регистру. Сталкивался на каких-то атмегах. После ручной правки начинало работать.
Код: Выделить всё
OCR1CH=0x02;
OCR1CL=0xEE;А в заголовке CVAVR для контроллера может тупо не быть описания 16-битного доступа к этому регистру. Сталкивался на каких-то атмегах. После ручной правки начинало работать.
-
PlagueDoctor
- Первый раз сказал Мяу!
- Сообщения: 28
- Зарегистрирован: Пн ноя 24, 2014 12:02:44
Re: Таймеры/счётчики в AVR
Так в блоке кода же написано
OCR1C я сделал по подобию OCR1A и OCR1B. Мне сам CVAVR выдаёт ошибку "неизвестный символ OCR1C". Мол, его обозначить надо в переменных или ещё что. Я ничего понять и не могу, это ж уже давно всё объявленное и зарезервированное. В чём прикол ошибки? Она априори быть не должна. Код верный, косяков не допустил.
Что за "ручную правку" Вы делали? Не поделитесь?
Код: Выделить всё
while (1)
{
// Place your code here
read_adc(0);
if (ADCW>=0) {
q=750+ADCW*1.4;
OCR1A=q;
delay_ms(150);
}
read_adc(1);
if (ADCW>=0) {
q=750+ADCW*1.4;
OCR1B=q;
delay_ms(150);
}
/*read_adc(2);
if (ADCW>=0) {
q=750+ADCW*1.4;
OCR1C=q; // ВОТ ЭТА ЕРУНДА НЕ РАБОТАЕТ!!!
delay_ms(150);
}*/
}Что за "ручную правку" Вы делали? Не поделитесь?
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Таймеры/счётчики в AVR
Для танкистов:
Примерно в это распутывается компилятором запись
А ерунда может не работать из-за неполного заголовка mega128.h или как его там.
Вот, по крайней мере в старом заголовке у меня тоже их нет:
Но просто так добавить тоже можно головную боль поймать, потому что OCR1CH/L доступны через другие асм инструкции. Там уж надо смотреть что генерирует компилятор.
Лучше всёже отдельный макрос сделать если лень по отдельности писать
Код: Выделить всё
OCR1CH = q>>8;
OCR1CL = q&0xFF;Код: Выделить всё
OCR1C=q; // ВОТ ЭТА ЕРУНДА НЕ РАБОТАЕТ!!!Вот, по крайней мере в старом заголовке у меня тоже их нет:
Код: Выделить всё
sfrb ICR1L=0x26;
sfrb ICR1H=0x27;
sfrw ICR1=0x26; // 16 bit access
sfrb OCR1BL=0x28;
sfrb OCR1BH=0x29;
sfrw OCR1B=0x28; // 16 bit access
sfrb OCR1AL=0x2a;
sfrb OCR1AH=0x2b;
sfrw OCR1A=0x2a; // 16 bit accessЛучше всёже отдельный макрос сделать если лень по отдельности писать
Код: Выделить всё
#define OCR1C_WRITE(x) OCR1CH=x>>8; OCR1CL=x&0xFF;-
PlagueDoctor
- Первый раз сказал Мяу!
- Сообщения: 28
- Зарегистрирован: Пн ноя 24, 2014 12:02:44
Re: Таймеры/счётчики в AVR
Здравствуйте! Попробовал Ваш дефайн, попереписывал в программе всё, что мог, всё так и осталось: "Error: undefined symbol 'OCR1C' ". Очень нужна возможность этих всех шести таймеров. Может, кто ещё сталкивался? Прошу помощи!
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Таймеры/счётчики в AVR
Но ведь не ругается на
OCR1CH=123;
???
OCR1CH=123;
???
Re: Таймеры/счётчики в AVR
Не знаю как поступить.
Хочу отправлять процессор в idle но он то запускает и АЦП в это время.
Без слипа программа работает так.
Timer 2 запускает прерывание раз в милисекунду. Частота МК 8МГц.
То есть через каждые 8000 тактов запускается прерывание таймера.
АЦП настроен на 62,5 КГц.
После каждого вызова прерывания уже в теле Функции прерывания я делаю кое какие фиксированные по длине времени операции, также выбираю другой канал АЦП и запускаю преобразование.
В теле основной программы трудятся разные функции по выводу информации на экран.
Выводится новая информация на экран 5 раз в секунду притом перерисовывается только изменения на экране.
Если бы цикл в основном цикле был бы небольшим по времени, я бы запускал в конце цикла idle, и запускалось бы и преобразование (без прерывания).
А уже при вызове прерывания от timer 2 я бы читал данные из АЦП.
Но инструкции в основном цикле могут длится по времени дольше чем следующий вызов прерывания таймера 2.
А это значит я при следующем вызове не буду иметь новых данных.
Можно ли как нибудь с включенным АЦП на атмега 8 запустить ражим idlе, но чтоб не началось преобразование?
Отключать АЦП не хочу потому что часто он используется, а это после запуска ждать да и первое преобразование более длинное.
Хочу отправлять процессор в idle но он то запускает и АЦП в это время.
Без слипа программа работает так.
Timer 2 запускает прерывание раз в милисекунду. Частота МК 8МГц.
То есть через каждые 8000 тактов запускается прерывание таймера.
АЦП настроен на 62,5 КГц.
После каждого вызова прерывания уже в теле Функции прерывания я делаю кое какие фиксированные по длине времени операции, также выбираю другой канал АЦП и запускаю преобразование.
В теле основной программы трудятся разные функции по выводу информации на экран.
Выводится новая информация на экран 5 раз в секунду притом перерисовывается только изменения на экране.
Если бы цикл в основном цикле был бы небольшим по времени, я бы запускал в конце цикла idle, и запускалось бы и преобразование (без прерывания).
А уже при вызове прерывания от timer 2 я бы читал данные из АЦП.
Но инструкции в основном цикле могут длится по времени дольше чем следующий вызов прерывания таймера 2.
А это значит я при следующем вызове не буду иметь новых данных.
Можно ли как нибудь с включенным АЦП на атмега 8 запустить ражим idlе, но чтоб не началось преобразование?
Отключать АЦП не хочу потому что часто он используется, а это после запуска ждать да и первое преобразование более длинное.
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Таймеры/счётчики в AVR
Это значит, что если включить ADC Free Running Select, то АЦП не будет запускаться во сне.22.6 ADC Noise Canceler
...
1. Make sure that the ADC is enabled and is not busy converting. Single Conversion
mode must be selected and the ADC conversion complete interrupt must be
enabled.
-
PlagueDoctor
- Первый раз сказал Мяу!
- Сообщения: 28
- Зарегистрирован: Пн ноя 24, 2014 12:02:44
Re: Таймеры/счётчики в AVR
uk8amk, здравствуйте! Когда в настройках таймера прописываю, то там ни на что не ругается. Вот дефайн в библиотеке лежит, а как им пользоваться, я ума не приложу.
С Вашей подсказкой нашёл и иностранный форум с этим же решением http://www.avrfreaks.net/forum/ocr1c-un ... codevision , не пойму, как и что. Уже методом тыка проверяю, не выходит. У меня серводвигатель не встаёт в крайнее положение. Даже не шолохается. При OCR1A/B всё хорошо, встаёт и, когда пытаюсь рукой сдвинуть, ступор даёт. А с OCR1C вообще беда. 
Код: Выделить всё
#define OCR1CL (*(unsigned char *) 0x78)
#define OCR1CH (*(unsigned char *) 0x79)
#define TCCR1C (*(unsigned char *) 0x7a)- Вложения
-
- 222.jpg
- Вот настройка в CodeWizard
- (250.95 КБ) 613 скачиваний
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Таймеры/счётчики в AVR
1. Посмотрите прилагаемый исходник.
2. Изучите в даташите раздел 15.3 Accessing 16-bit Registers.
3. Посмотрите в даташите описание регистров
Есть ли среди них регистр OCR1C и что такое OCR1CH/OCR1CL?
3. Познакомьтесь с ограничениями используемого компилятора.
2. Изучите в даташите раздел 15.3 Accessing 16-bit Registers.
3. Посмотрите в даташите описание регистров
Код: Выделить всё
16-bit Timer/Counter (Timer/Counter1 and Timer/Counter3)
15.11 Register Description3. Познакомьтесь с ограничениями используемого компилятора.
- Вложения
-
- main.c
- (1.19 КБ) 428 скачиваний
- DronVolk
- Встал на лапы
- Сообщения: 109
- Зарегистрирован: Чт сен 03, 2015 15:52:10
- Откуда: Сибирский федеральный округ
Re: Таймеры/счётчики в AVR
не могу понять смысл OCR1A/B, OCR1C.PlagueDoctor писал(а):uk8amk, здравствуйте! Когда в настройках таймера прописываю, то там ни на что не ругается. Вот дефайн в библиотеке лежит, а как им пользоваться, я ума не приложу.С Вашей подсказкой нашёл и иностранный форум с этим же решением http://www.avrfreaks.net/forum/ocr1c-un ... codevision , не пойму, как и что. Уже методом тыка проверяю, не выходит. У меня серводвигатель не встаёт в крайнее положение. Даже не шолохается. При OCR1A/B всё хорошо, встаёт и, когда пытаюсь рукой сдвинуть, ступор даёт. А с OCR1C вообще беда.Код: Выделить всё
#define OCR1CL (*(unsigned char *) 0x78) #define OCR1CH (*(unsigned char *) 0x79) #define TCCR1C (*(unsigned char *) 0x7a)
OCR1A/B - 8 битные как я понял из даташита, а вот OCR1C 16 битный и в заголовке
он разбит на 2-е 8 битные переменные OCR1CH и OCR1CL то есть H - high L - low что бы из них сделать 16 число нужно припилить его через приведение типов
Код: Выделить всё
unsigned int OCR1C = (unsigned int *)OCR1CL;я повелитель электронов! Но иногда появляются электроны бунтари и делают, что им вздумается, например, прокладывают новые пути движения...
"Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного." Альберт Эйнштейн.
"Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного." Альберт Эйнштейн.
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Таймеры/счётчики в AVR
Так то оно так. Но вы упускаете из виду что регистр таймера хоть и отображается в область ОЗУ, однако корректность его содержимого зависит от порядка обращения к байтам по этим адресам. Поясняю.DronVolk писал(а):что бы из них сделать 16 число нужно припилить его через приведение типов
Для примера следующий код:
Код: Выделить всё
volatile uint16_t i;
*((uint16_t*)(0x78)) = (uint16_t) 0x01; // Какбы запись в OCR1C
i = *((uint16_t*)(0x78)); // его чтениеКод: Выделить всё
; 49 *((uint16_t*)(0x78)) = (uint16_t) 0x01;
LDI R30,LOW(1)
LDI R31,HIGH(1)
STS 120,R30
STS 120+1,R31
; 50
; 51 i = *((uint16_t*)(0x78));
LDS R30,120
LDS R31,120+1
ST Y,R30
STD Y+1,R31Код: Выделить всё
; Set TCNTn to 0x01FF
ldi r17,0x01
ldi r16,0xFF
out TCNTnH,r17
out TCNTnL,r16
; Read TCNTn into r17:r16
in r16,TCNTnL
in r17,TCNTnH- DronVolk
- Встал на лапы
- Сообщения: 109
- Зарегистрирован: Чт сен 03, 2015 15:52:10
- Откуда: Сибирский федеральный округ
Re: Таймеры/счётчики в AVR
Да последовательность я упустил да и приведение типа не верно написано
Просто почему то читая то что выше начал сомневаться в своем понимании использования 16 битного таймера (просто с легкой руки вошел и все что делал работало сразу как это не удивительно хоть и не давно).
Просто почему то читая то что выше начал сомневаться в своем понимании использования 16 битного таймера (просто с легкой руки вошел и все что делал работало сразу как это не удивительно хоть и не давно).
я повелитель электронов! Но иногда появляются электроны бунтари и делают, что им вздумается, например, прокладывают новые пути движения...
"Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного." Альберт Эйнштейн.
"Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного." Альберт Эйнштейн.


