Перейти к содержанию

KAS

Members
  • Постов

    2
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Саратов

Электроника

  • Стаж в электронике
    10-20 лет
  • Сфера радиоэлектроники
    Микроконтроллеры
  • Оборудование
    STK600, контрольно-измерительное, монтажное оборудование

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

Достижения KAS

Новичок

Новичок (1/14)

0

Репутация

  1. Помогли на радиокоте. Простите, модераторы, за двуличие, но может кому-то полезно будет! https://radiokot.ru/forum/viewtopic.php?f=57&t=191686
  2. Уважаемые форумчане, всех с праздниками! Пытаюсь использовать АЦП AVR в режиме периодического автозапуска от таймера. Код пытается работать, опрос АЦП осуществляется, но почему-то ровно 2 раза, а не до бесконечности, как планировалось. После этого код висит в вечном цикле (проверял, тестовый код в вечном цикле корректно выполняется), а прерывание АЦП не вызывается более 2 раз. Тестирую на ATmega16, тактовая частота 4МГц, на входе потенциометр, результат наблюдаю в программе-читалке COM-порта. По задумке должно возникать событие Compare Match B таймера 1 с частотой 2Гц (проверял, возникает c нужной частотой), которое автотриггерит АЦП, запуская прерывание АЦП по окончанию преобразования (запускается, но ровно 2 раза, если жать на Reset, то снова 2 раза и дальше тишина до Reset), в прерывании АЦП результат отправляю по UART (результат корректный, по UART доходит) Использую Microchip Studio 7.0, оптимизация отключена. Помогите, товарищи! Сломал всю голову, скурил весь даташит, ничего не понимаю! Возможно, глаз замылился, но не настолько же! Четвертые сутки бьюсь с простеньким, вроде бы, кодом ( Код ниже: #include <avr/io.h> #include <avr/interrupt.h> void init(); void uart_init(); void timer1_init(); void adc_init(); void uart_send( char x ); ISR( ADC_vect ) { uart_send( ADCH ); } int main(void) { init(); while (1){} } void init() { uart_init(); timer1_init(); adc_init(); sei(); } void uart_init() { UBRRL = 25; // 9600bod at CLK = 4MHz UCSRB = 1 << TXEN; } void timer1_init() { OCR1A = 31250; OCR1B = OCR1A; TCCR1B = ( 1 << WGM12 ) | ( 1 << CS11 ) | ( 1 << CS10 ); // /64 2Hz at CLK=4MHz } void adc_init() { ADMUX = ( 1 << REFS0 ) | ( 1 << ADLAR ); // PA0, AVCC, PA0 SFIOR = ( 1 << ADTS2 ) | ( 1 << ADTS0 ); // COMPB ADCSRA = ( 1 << ADEN ) | ( 1 << ADSC ) | ( 1 << ADATE ) | ( 1 << ADIE ) | ( 1 << ADPS2 ) | ( 1 << ADPS0 ); //COMPB, ADCclk=125kHz } void uart_send( char x ) { while ( !( UCSRA & ( 1 << UDRE ) ) ); UDR = x; } main.c
×
×
  • Создать...