Мелкие вопросы по МК и ПЛИС.
в общем геморроя больше чем профита выйдет) а есть в линейке авр мк со схожими характеристиками и работающие на 8МГц без танцев с бубном от внутреннего генератора или внешнего кварца? мне с головой хватит 1кб памяти и 6 I/O а использовать мега8/16 для таких задач считаю кощунство 
- Реклама
- Сообщения: 1303
- Зарегистрирован: Вс апр 19, 2009 17:20:22
- Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Например Tiny45
Опыт растет прямо пропорционально выведенному из строя оборудованию...
А чем вас 9,6 не устраивает? Казалось бы, быстрее — не медленнее 
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
сломался дверной звонок - купить новый не спортивно, ведь нужно применять знания на практике
есть кусок кода с прошлого проекта для воспроизведения мелодии рассчитанный на 8МГц, пересчитывать все для 9,6 неохота
хм... тини 45 у нас стоит почти как мега16( вот где здравый смысл?
хм... тини 45 у нас стоит почти как мега16( вот где здравый смысл?
- Сообщения: 822
- Зарегистрирован: Вс июн 02, 2013 12:23:03
на alliexpress mega 8 дешевле чем tiny 13
подал на tiny 13A на АЦП сигнал (напряжение батареи) через делитель 30К верхний 10 нижний.
Показывало напряжение нормальное.
Потом на второй ацп подал сигнал через делитель 3К и 1К.
И на первый АЦП пошли глюки через пару минут работы показывало слишком маленькое напряжение через делитель - как будто АЦП пожирает энергию.
Поставил и там делитель 3К и 1К и вроде пока нормально.
Как это объяснить?
Цифровые порты отключены на ножках АЦП - DIDR0=0b00011000;
подал на tiny 13A на АЦП сигнал (напряжение батареи) через делитель 30К верхний 10 нижний.
Показывало напряжение нормальное.
Потом на второй ацп подал сигнал через делитель 3К и 1К.
И на первый АЦП пошли глюки через пару минут работы показывало слишком маленькое напряжение через делитель - как будто АЦП пожирает энергию.
Поставил и там делитель 3К и 1К и вроде пока нормально.
Как это объяснить?
Цифровые порты отключены на ножках АЦП - DIDR0=0b00011000;
- Реклама
Друзья. Начинаю писать чуть ли не первую прошивку. Что я делаю не так? По идее, МК должен мигать светодиодом на пятой ножке (работает) а по приходу фронта (любого) на ножку 2, это событие INT0, должен сформировать импульс 5мс и продолжить мигать. Вот импульса то и нет. Судя по всему рукожопо обработано прерывание. но полчаса гугла не дали понимания -- что не так.
МК = ATtiny24
Код: Выделить всё
#define F_CPU 8000000
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
void INTERRUPT(INT0_vect) {
_delay_ms(5);
PORTA = 0x01;
_delay_ms(5);
PORTA = 0x00;
}
int main (void){
sei();
GIMSK |= (1<<INT0);
MCUCR = (0<<ISC01) | (1<<ISC00); //íàñòðîèëèñü
DDRA = 0xfb; // ïîðò Ñ - âûõîä
while (1){
_delay_ms(1000);
PORTA = 0x10;
_delay_ms(1000);
PORTA = 0x00;
}
return 0;
}
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Так было изначально. Но чёт не работало.
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
на всякий флаг бы очистить - добавить после MCUCR = (0<<ISC01) | (1<<ISC00);
это GIFR=(1<<INTF0) | (0<<PCIF1) | (0<<PCIF0);
да и режим это Falling Edge - должно на 0 вроде срабатывать, не ошибся по любому уровню
это GIFR=(1<<INTF0) | (0<<PCIF1) | (0<<PCIF0);
да и режим это Falling Edge - должно на 0 вроде срабатывать, не ошибся по любому уровню
Ну и задержки в прерываниях эт да
а) убрать из прерывания delay
b) в прерывании только ставить флаг нажатия/отпускания кнопы и/или обрабатывать это самое нажатие
г) всю кухню делать в main.

а) убрать из прерывания delay
b) в прерывании только ставить флаг нажатия/отпускания кнопы и/или обрабатывать это самое нажатие
г) всю кухню делать в main.
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Мона с примером? Флаги я пока не пробовал.
Хм... Странно. После запуска протеус регистрирует таки импульс, который должен появиться в прерывании.. только в 40мс длинной и 1 раз. Как это понимать?
Код: Выделить всё
#define F_CPU 8000000
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
ISR(INT0_vect) {
_delay_ms(5);
PORTA = 0x02;
_delay_ms(5);
PORTA = 0x00;
}
int main (void){
sei();
GIMSK |= (1<<INT0);
MCUCR = (0<<ISC01) | (1<<ISC00); //настроились
GIFR=(1<<INTF0) | (0<<PCIF1) | (0<<PCIF0);
DDRA = 0xfb; // порт С - выход
while (1){
_delay_ms(1000);
PORTA = 0x10;
_delay_ms(1000);
PORTA = 0x00;
}
return 0;
}- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Так работает
Код: Выделить всё
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
ISR(INT0_vect) {
_delay_ms(5);
PORTA |= 0x02;
_delay_ms(5);
PORTA &= ~0x02;
}
int main (void){
// Crystal Oscillator division factor: 1
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
// Analog Comparator: Off
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
ADCSRB=(0<<ACME);
GIMSK |= (1<<INT0);
MCUCR = (0<<ISC01) | (1<<ISC00); //íàñòðîèëèñü
GIFR=(1<<INTF0) | (0<<PCIF1) | (0<<PCIF0);
DDRA = 0xFF; // ïîðò A - âûõîä
sei();
while (1){
_delay_ms(1000);
PORTA |= 0x10;
_delay_ms(1000);
PORTA &= ~0x10;
}
return 0;
}Проверял -- не пашет. Думал.. Потом понял в чём-таки подвох... Вход INT0 это же PORTB.2. А я ему всё в А тыкался...

- Сообщения: 311
- Зарегистрирован: Вт дек 31, 2013 17:36:43
Ребята подскажите каким простым самопальным прогером можна прошить ИКСмЕгА???насколько я понимаю СТК200.300 далеко не покатит!!!
Такой ещё вопрос.. А какой командой задаётся потолок счёта таймеру? т.е. чтоб не по переполнению, а по совпадению. Такого не могу чёт найти, хотя явно есть.Надо взвести его на 10мс.
При каждом таймере (кроме нулевого) есть регистр (OCR), который подключен вместе с таймером к цифровому компаратору.
Достаточно записать в этот регистр необходимую величину пересчета и Вы добьетесь искомого.
Достаточно записать в этот регистр необходимую величину пересчета и Вы добьетесь искомого.
Не достаточно, но необходимо. Ещё необходимо сконфигурировать режим СТС или иной подходящий.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Код: Выделить всё
// При частоте генератора 14.7456 МГц и делителе 1024, 1000ms - 14400 тактов.
OCR3AH=56; OCR3AL=63;И да, какими командами запускать/прекращать действие таймера?




