Чт янв 28, 2021 09:06:09
***
ftoa(adc, 2 ,buffer); //ftoa(float n,unsigned char decimals,char *str);
puts(buffer); //puts(char *str);
puts(", ");
itoa(PERIOD_ON,buffer); //void itoa(int n,char *str);
puts(buffer);
puts("\n");
Чт янв 28, 2021 10:52:37
Чт янв 28, 2021 11:08:53
Чт янв 28, 2021 11:39:15
EVSYS.SYNCCH0 = 0x02; //TCA0_OVF_LUNF
EVSYS.SYNCUSER0 = 0x01; //ADC0
Инициализация ADC:
// Частота ADC: 208,333 kHz =20 000KHz/6 /16
// Опорное напряжение ADC: AVCC pin
ADC0.CTRLA = 0x00; //Full 10-bit resolution. The 10-bit ADC results are accumulated or stored ADC.RES
ADC0.CTRLB = 0x00;
ADC0.CTRLC = 0x13;//CLK_PER divided by 16, Опорное напряжение ADC: AVCC pin
ADC0.MUXPOS = 0x08; //начальный режим чтения с ножки (PB5-AIN8)
ADC0.INTCTRL = ADC_RESRDY_bm;//Result Ready Interrupt Enable
ADC0.EVCTRL = 1; //разрешить запуск по событию
ADC0.CTRLA = ADC_ENABLE_bm;//включить АЦП
ADC0.COMMAND = 0x01;//Start Conversion
while ( (ADC0.INTFLAGS & 1)==0 );// подождём конца первого преобразования (флага прерывания ацп)
asm("sei"::); // Разрешить глобальное прерывание
ADC0.INTFLAGS |=1;
Чт янв 28, 2021 12:22:55
ADC0.COMMAND = 0x01;//Start Conversion
while ( (ADC0.INTFLAGS & 1)==0 );// подождём конца первого преобразования (флага прерывания ацп)
asm("sei"::); // Разрешить глобальное прерывание
ADC0.INTFLAGS |=1;
• Configure TCA with the desired frequency and period
• Select TCA overflow event as an event source for synchronous event channel 0
• Configure asynchronous user channel 1 (ADC0) to use synchronous event channel 0 as event
input
• Configure the ADC0 for an ADC conversion triggered by an event
EVSYS.ASYNCUSER1 = EVSYS_ASYNCUSER1_SYNCCH0_gc; /* Synchronous Event Channel 0 */
EVSYS.SYNCCH0 = EVSYS_SYNCCH0_TCA0_OVF_LUNF_gc; /* Timer/Counter A0 overflow */
...
ISR(ADC0_RESRDY_vect)
{
// Clear the interrupt flag
ADC0.INTFLAGS |= ADC_RESRDY_bm;
}
Чт янв 28, 2021 12:28:07
NStorm писал(а):Вообще кстати puts() ведь должна сама в конце символ новой строки печатать. У neid либо она не из stdlib.h берется (реализация функции), либо в терминале настроен newline на CR+LF возможно.
Чт янв 28, 2021 12:31:18
Пытаюсь настроить систему событий Attiny1607, чтобы по срабатыванию таймера запускалось чтение АЦП.
#define EVSYS_SYNCCH_ZERO EVSYS_SYNCCH0_PORTC_PIN1_gc
inline void EventSystem_Init(void)
{
EVSYS.SYNCCH0 = EVSYS_SYNCCH_ZERO;
//////
EVSYS.ASYNCUSER1 = EVSYS_SYNCUSER0_SYNCCH0_gc; // Call event for ADC0
}
Чт янв 28, 2021 13:11:39
Я код пишу используя макроопределения из заголовочников Atmel/Microchip, чтобы лишний раз в даташит не заглядывать.
Чт янв 28, 2021 13:46:52
Но у меня глупый вопрос, как эти макроопределения быстро находить?(у меня Atmel studio)
EVSYS.SYNCUSER0 = 0x01;
EVSYS.ASYNCUSER1 = EVSYS_SYNCUSER0_SYNCCH0_gc;
Чт янв 28, 2021 13:49:05
Чт янв 28, 2021 14:36:31
Чуть ниже небольшая таблица, которая показывает 4 вариант что можно туда записать - это то, кто будет "отправитель" сообщения.
Чт янв 28, 2021 14:43:46
Чт янв 28, 2021 15:04:26
Чт янв 28, 2021 15:09:51
Чт мар 18, 2021 17:52:21
PORTA_PIN2CTRL=0x01; //Sense both edges
SREG = 0xD0; //Global Interrupt Enable
ISR (PORTA_PORT_vect)
{
}
Чт мар 18, 2021 21:12:07
PORTB.PIN2CTRL = PORT_ISC_RISING_gc
sei();
Чт мар 18, 2021 23:11:30
#include <avr/interrupt.h>
...
sei();
Пт мар 19, 2021 09:20:38
Не так,
У меня сама студия только названия регистров подсказывает. Может это где-то настраивается?
PORT_ISC_BOTHEDGES_gc
Пт мар 19, 2021 10:16:49
Пт мар 19, 2021 11:19:14