Просто интересно, батарейка сильный мороз выдерживает?
Сам мечтаю сделать внешний термометр без проводов, но вижу его немного иначе. Батарейка, МК и передатчик в помещении, а датчик на улице, соединенный коротким проводком.
я тут на другую проблему наткнулся - лежал у меня аналогичный собранный на коленке модуль, рабочий, но проверял только в тепле, вытащил на улицу - показывает отрицательную температуру сильно больше (т.е. теплее градуса на 3...4), разница в разных DS18B20 купленных у разных продавцов на AliExpress
Я сначала один ds взял в сборе как модуль вместе с другими деталями - вот он и оказался глюченным, а потом уже брал 5 шт россыпью, так что попробовать не получиться.
Сегодня утром честно показал минус 13, уже третьи сутки на улице.....посмотрим насколько хватит батарей....
Я сначала один ds взял в сборе как модуль вместе с другими деталями - вот он и оказался глюченным, а потом уже брал 5 шт россыпью, так что попробовать не получиться.
Возможно они просто из разных партий. Когда брал несколько у одного продавца показывали если и не точно, то одинаково совершенно. И проверьте напряжение, чтобы хотя бы не плавало при измерении.
Я сначала один ds взял в сборе как модуль вместе с другими деталями - вот он и оказался глюченным, а потом уже брал 5 шт россыпью, так что попробовать не получиться.
Возможно они просто из разных партий. Когда брал несколько у одного продавца показывали если и не точно, то одинаково совершенно. И проверьте напряжение, чтобы хотя бы не плавало при измерении.
от разных продавцов брал - однозначно из разных партий,
Возможно загрузчик расчитан на другую частоту кварца, обычно 8 или 16 МГц. Проще всего иметь ввиду что показания внутренного таймера в 8 или 16 раз ниже реального времени.
У меня все проекты на attiny85 с millis, все считает корректно, загружал всегда через UNO и Arduino IDE командой записать загрузчик. Сейчас перешёл на USBASP, визуально тоже все хорошо, из любопытства сегодня сделаю таймер секунд на 40 - проверю секундомером.
Возможно загрузчик расчитан на другую частоту кварца, обычно 8 или 16 МГц. Проще всего иметь ввиду что показания внутренного таймера в 8 или 16 раз ниже реального времени.
30 секунд работает +-2, с каждой минутой +4 растет а через 2 часа натикает вагон с тележкой). нужно кварц внешний на 16 или 8 МГц ставить, ардуино тикает как часы секунда в секунду... в UNO стоит кварц на 16МГц...
30 секунд работает +-2, с каждой минутой +4 растет а через 2 часа натикает вагон с тележкой). нужно кварц внешний на 16 или 8 МГц ставить, ардуино тикает как часы секунда в секунду... в UNO стоит кварц на 16МГц...
+- процент другой это понятно - даже в ДШ написано, для точности в любом случае кварц нужен,
наверное я не правильно понял вашу фразу
"время срабатывания таймера через 2 часа подается "1" заранее благодарю..."
думал что разница в 2 раза - это конечно не правильно
Привет всем я совсем недавно открил для себе мир ардуино. И конечно сразу решил попробовать собрать симулятор двигателя. Импульсы из шкифа коленвала (вот как выглядит шкиф 60-2 http://secu-3.org/ustanovka-dpkv/?lang=RU ) симулирую с тиньку и етого скетча:
int potPin = 3;
int izhodenPin = 4;
void setup ()
{
pinMode(potPin, INPUT);
pinMode (izhodenPin, OUTPUT);
}
void loop ()
{
int vreme=analogRead(potPin);
long vre=vreme*4+40;
for (int i = 0; i < 58; i++)
{
digitalWrite (izhodenPin, HIGH);
delayMicroseconds (vre);
digitalWrite (izhodenPin, LOW);
delayMicroseconds (vre);
}
delayMicroseconds (vre*4);
}
Все сразу заработало и крутя потенциометр я меню обороты но сколько они поднимаютса столько сильнее скакает оборотомер при 5000 об./мин. стрелка скакает 300 об. в верх и 300 об. вниз даже если потенциометр не трогать .Поставил конденсатор на вход тиньку от потенциометра но ничего не поменялось. Думаю проблема в моего "софта" подскажите пожалуйста как стабилизировать обороты ?
int potPin = 3;
int izhodenPin = 4;
void setup ()
{
pinMode(potPin, INPUT);
pinMode (izhodenPin, OUTPUT);
}
void loop ()
{
int vreme=analogRead(potPin);
long vre=vreme*4+40;
for (int i = 0; i < 58; i++)
{
digitalWrite (izhodenPin, HIGH);
delayMicroseconds (vre);
digitalWrite (izhodenPin, LOW);
delayMicroseconds (vre);
}
delayMicroseconds (vre*4);
}
Смотрите. При 6000 об/мин (для круглости, думаю не принципиально) время цикла for должно быть 10 мс.
Скорость работы операций digitalwrite примерно DigitalWrite() — 1800мкс (это для кварца 16 МГц, в нашем случае ещё больше должно быть... если кто-нибудь не оптимизировал под аттини13 библиотеки ардуино).
Таким образом, основное время у Вас уже не выдержки времени, а сами операции ввода/вывода (я так понял переменная vre минимум может быть 40 мкс). Т.к. они несколько стохастичны, поэтому у вас наблюдается плавание частоты.
Также к этому эффекту может приводить:
1. нестабильно напряжения питания при включении/выключении выходных ног, что приводит к нестабильным измерениям аналогового сигнала.
2. Шум аналогового сигнала (чем меньше сопротивление, т.е. чем меньше входное число и выше частота - тем выше относительная величина шума (сравните: +-2 единицы при 600 единицах входного это всего 0.3%, а те же +-2 единицы при 6 единицах входного - это уже +-30%). Выход - фильтровать как "физически", так и в цифровой форме. Простейший способ - усреднение. Вводите переменную аккумулятор А. Допустим, постоянная времени фильтра будет 64 единицы. При каждом новом значении АЦП Ц вычиатете из аккумулятора А=А-А/64 и прибавляете считанное значение АЦП: А=А+Ц/64. С помощью школьной математики эту формулу можно значительно упростить. Но так проще для понимания. Варьируя величину постоянной времени фильтра можно делать фильтр "шустрым" или "тупым". Надо попробовать и сами поймёте.
В общем, переходите от диджиталврайт к нормальной работе с портами, как это сделать, уже в этой теме не раз писалось, либо можно подсмотреть тут https://geektimes.ru/post/255744/
там же и об ускорении диджитал реад.
Насчёт диджитал реад. Можно не ждать сиего замечательного момента, когда произойдёт окончание преобразования АЦП. Просто нужно запутстить АЦП в режим Freerun и как только есть необходимость в аналоговых данных - считывать их из регистра АЦП. Да. это будет предыдущее преобрвазоние, но какая нам в данном случае разница?
Тини в повердаун режиме, если коснуться сенсорной кнопки на 6 ногу (PB1) приходит сигнал 0, что бы тинька вышла из сна.
Дальше на это все дело повешано прерывание INT0, в функции которая его обрабатывает пытаюсь ключить транзисторный ключ (нога 3 PB4), потом после этого со значения 150 сервой повернуться до 200 и назад 150, выключить ключ, и заснуть
Если с просыпанием и засыпанием все ок, то с сервой полный треш - серва живет своей жиснь. Никак не могу разобраться как шим и прерывание собрать вместе.
Скорее всего я не до конца понимаю как настраивать и работать с шим для сервы.
Серва Tower ProSG90
include <avr/io.h> // инициализация портов ввода-вывода МК
#include <avr/sleep.h> // здесь описаны режимы сна
#include <avr/interrupt.h> // работа с прерываниями
#include <avr/delay.h> // описание программных задержек
#define F_CPU 1200000UL
#define SERVO PB0
// Обработчик прерываний
ISR(INT0_vect) // Прерывание по низкому уровню на PB1
{
while ((PINB & (1 << PB1)) == 0) {}
PORTB |= (1<<PB4); // Выставить на PB4 - "1"
_delay_ms(50);
do // Нарастание яркости
{
OCR0A = OCR0A + 20;
_delay_ms(5);
}
while(OCR0A!=200);
// _delay_ms(1000); // Пауза 1 сек.
do // Затухание
{
OCR0A = OCR0A - 20;
_delay_ms(5);
}
while(OCR0A!=100);
// _delay_ms(1000); // Пауза 1 сек.
_delay_ms(50);
PORTB &= ~(1<<PB4); // Выставить на PB4 - "0"
}
// Основная программа
int main()
{
//
// PORTB &= ~ (1<<PB4); // Выставить на PB4 - "0"
// DDRB |= (1<<PB4); // Указатель пина
////
PORTB = 0b11101111; // Выставить на PB4 - "0"
DDRB = 0b00010000; // Указатель пина
DDRB |= (1 << SERVO);// выходы = 1
PORTB &= ~(1 << SERVO); // по умолчанию отключены = 0
// Таймер для ШИМ:
TCCR0A = 0xB1; // режим ШИМ, неинверсный сигнал на выходе OC0A, инверсный - на выходе OC0B
TCCR0B = 0x02; // предделитель тактовой частоты CLK/8
TCNT0=100; // начальное значение счётчика
OCR0A=100; // регистр совпадения A
// Инициализация прерываний по INT0
GIMSK = 0b01000000; // Разрешение прерываний INT0 на входе PB1
MCUCR = 0b00000000; // при перепаде низком уровне на PB1
sei(); // Общее разрешение прерываний
// Инициализация режима сна
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
while(1)
{
sleep_enable(); // разрешение режима сна
sleep_cpu(); // активация режима сна
}
}
Спасибо за помощ. Подсказки помогли и если сделаю так :
int vreme=0;
int vre=0;
void setup ()
{
DDRB |= (0 << 3); // устанавливаем вывод PB3 как вход
DDRB |= (1 << 4); // устанавливаем вывод PB4 как выход
}
void loop ()
{
//vreme=analogRead(PB3); //не читаем значение
vre=80;
for (int i = 0; i < 58; i++)
{
PORTB |= (1 << 4); // устанавливаем hi уровень на выводе PB4
delayMicroseconds (vre);
PORTB &= ~(1 << 4); // устанавливаем низкий уровень на выводе PB4
delayMicroseconds (vre);
}
delayMicroseconds (vre*4);
}
Работает и скакание оборотов при ~6900об. примерно 10вверх и 10 в низ ето вполне достаточно, но если уберем "//" перед vreme=analogRead(PB3); хотя его и не пользуем. Сразу скакание получается около 150об. вверх и 150об. вниз (наполовину из первого ардуинского скетча) Думаю проблема в "analogRead(PB3);" команду но незнаю как ей заменить, если ето вообще возможно.
Спасибо за помощ. Подсказки помогли и если сделаю так :
int vreme=0;
1. Нарисуйте вашу электронную. Схему.
2. Нарисуйте график, который вы хотите получить.
3. Пределы регулирования частоты?
4. Почему бы не использовать таймер?
5 какая частота самой тиньки13?
1./2. Вот схемка и то что должно выходить из тиньку.
3. Самая низкая частота будет 60hz. max 7khz.
4. Если под таймер имеете в виду чтото вроде 555 он не умеет представлять 59 и 60 зуб которые отсуствуют. Я делал такое устройство с лм555 и две цд4017 работает как положено но оно слишком большое и сложное.
5. Встроенны кварц на 9,6 Mhz.
Как писал и ранше если задаю статичная частота ~7кхз и не читаю вход из потенциометра на выходе тиньки все стабильно. Плавание на выход появляется если добавлю analogRead в скетч.
Спасибо за внимание :)
Хахах ну да время плохо отражается на памяти :) я не русский и жил в СССР 32 года назад.Жил там три года два в детсад и один в школе. Так что простите мои ошибки они невольные :)
1./2. Вот схемка и то что должно выходить из тиньку.
3. Самая низкая частота будет 60hz. max 7khz.
4. Если под таймер имеете в виду чтото вроде 555 он не умеет представлять 59 и 60 зуб которые отсуствуют. Я делал такое устройство с лм555 и две цд4017 работает как положено но оно слишком большое и сложное.
5. Встроенны кварц на 9,6 Mhz.
Как писал и ранше если задаю статичная частота ~7кхз и не читаю вход из потенциометра на выходе тиньки все стабильно. Плавание на выход появляется если добавлю analogRead в скетч.
Спасибо за внимание :)
С АЦП на tiny не пробовал, а вот убрать 58 59 "зуб" я думаю сделать через таймер а не через ШИМ, буквально вчера типа программный таймер, постараюсь скинуть утром завтра.
С 71 по 80 строки моего кода выкидываете и пишите то что вам нужно выполнить каждый такт таймера, функцию отправки uart выкидываете, при частоте МК 8мгц получается что обработчик прерывания срабатывает 9600 раз в секунду (если я правильно помню расчёт - давно это делал) соответственно скорость крутит как вам надо, но плавного регулирования в ваших пределах частоты мне кажется не получиться
По моим расчётам две параллельно cr2032 должны отработать минимум полгода, двое суток уже работает при минус 10, а дальше посмотрим
Просто интересно, батарейка сильный мороз выдерживает?
Сам мечтаю сделать внешний термометр без проводов, но вижу его немного иначе. Батарейка, МК и передатчик в помещении, а датчик на улице, соединенный коротким проводком.
я тут на другую проблему наткнулся - лежал у меня аналогичный собранный на коленке модуль, рабочий, но проверял только в тепле, вытащил на улицу - показывает отрицательную температуру сильно больше (т.е. теплее градуса на 3...4), разница в разных DS18B20 купленных у разных продавцов на AliExpress
сейчас буду перепаивать....
Andy, а может это известная проблема с нагревом датчика из-за частого опроса?
По даташиту такого отклонения быть не должно. Брак?
раз в 17 минут - это не частый опрос :)
скорее Китайские друзья некачественный продали.
ЗЫ. Кстати перепаял из другой поставки - оба модуля стали показывать одинаково и правильно.
А из той партии где плохой был не пробовали другой взять? Просто интересно, это они брак скидывают или просто не повезло.
Я сначала один ds взял в сборе как модуль вместе с другими деталями - вот он и оказался глюченным, а потом уже брал 5 шт россыпью, так что попробовать не получиться.
Сегодня утром честно показал минус 13, уже третьи сутки на улице.....посмотрим насколько хватит батарей....
Ой простите я ляпнул! Конечно закрыт только мой вопрос!
Я сначала один ds взял в сборе как модуль вместе с другими деталями - вот он и оказался глюченным, а потом уже брал 5 шт россыпью, так что попробовать не получиться.
Возможно они просто из разных партий. Когда брал несколько у одного продавца показывали если и не точно, то одинаково совершенно. И проверьте напряжение, чтобы хотя бы не плавало при измерении.
Я сначала один ds взял в сборе как модуль вместе с другими деталями - вот он и оказался глюченным, а потом уже брал 5 шт россыпью, так что попробовать не получиться.
Возможно они просто из разных партий. Когда брал несколько у одного продавца показывали если и не точно, то одинаково совершенно. И проверьте напряжение, чтобы хотя бы не плавало при измерении.
от разных продавцов брал - однозначно из разных партий,
стабилизаторы стоят - напряжение отличное.
Доброе время суток! Подскажите может кто работал в arduino c millis() , что то криво считает на Attiny - 13A (1мГц)
время срабатывания таймера через 2 часа подается "1" заранее благодарю...
Возможно загрузчик расчитан на другую частоту кварца, обычно 8 или 16 МГц. Проще всего иметь ввиду что показания внутренного таймера в 8 или 16 раз ниже реального времени.
Да придеться решить по другому, вспомнить программирование для AVR... давно это было.
У меня все проекты на attiny85 с millis, все считает корректно, загружал всегда через UNO и Arduino IDE командой записать загрузчик. Сейчас перешёл на USBASP, визуально тоже все хорошо, из любопытства сегодня сделаю таймер секунд на 40 - проверю секундомером.
Возможно загрузчик расчитан на другую частоту кварца, обычно 8 или 16 МГц. Проще всего иметь ввиду что показания внутренного таймера в 8 или 16 раз ниже реального времени.
В attiny есть загрузчик?
попробовал millis - ровно 30 секунд отработало
30 секунд работает +-2, с каждой минутой +4 растет а через 2 часа натикает вагон с тележкой). нужно кварц внешний на 16 или 8 МГц ставить, ардуино тикает как часы секунда в секунду... в UNO стоит кварц на 16МГц...
30 секунд работает +-2, с каждой минутой +4 растет а через 2 часа натикает вагон с тележкой). нужно кварц внешний на 16 или 8 МГц ставить, ардуино тикает как часы секунда в секунду... в UNO стоит кварц на 16МГц...
+- процент другой это понятно - даже в ДШ написано, для точности в любом случае кварц нужен,
наверное я не правильно понял вашу фразу
"время срабатывания таймера через 2 часа подается "1" заранее благодарю..."
думал что разница в 2 раза - это конечно не правильно
Привет всем я совсем недавно открил для себе мир ардуино. И конечно сразу решил попробовать собрать симулятор двигателя. Импульсы из шкифа коленвала (вот как выглядит шкиф 60-2 http://secu-3.org/ustanovka-dpkv/?lang=RU ) симулирую с тиньку и етого скетча:
int potPin = 3;
int izhodenPin = 4;
void setup ()
{
pinMode(potPin, INPUT);
pinMode (izhodenPin, OUTPUT);
}
void loop ()
{
int vreme=analogRead(potPin);
long vre=vreme*4+40;
for (int i = 0; i < 58; i++)
{
digitalWrite (izhodenPin, HIGH);
delayMicroseconds (vre);
digitalWrite (izhodenPin, LOW);
delayMicroseconds (vre);
}
delayMicroseconds (vre*4);
}
Все сразу заработало и крутя потенциометр я меню обороты но сколько они поднимаютса столько сильнее скакает оборотомер при 5000 об./мин. стрелка скакает 300 об. в верх и 300 об. вниз даже если потенциометр не трогать .Поставил конденсатор на вход тиньку от потенциометра но ничего не поменялось. Думаю проблема в моего "софта" подскажите пожалуйста как стабилизировать обороты ?
int potPin = 3;
int izhodenPin = 4;
void setup ()
{
pinMode(potPin, INPUT);
pinMode (izhodenPin, OUTPUT);
}
void loop ()
{
int vreme=analogRead(potPin);
long vre=vreme*4+40;
for (int i = 0; i < 58; i++)
{
digitalWrite (izhodenPin, HIGH);
delayMicroseconds (vre);
digitalWrite (izhodenPin, LOW);
delayMicroseconds (vre);
}
delayMicroseconds (vre*4);
}
Смотрите. При 6000 об/мин (для круглости, думаю не принципиально) время цикла for должно быть 10 мс.
Скорость работы операций digitalwrite примерно DigitalWrite() — 1800мкс (это для кварца 16 МГц, в нашем случае ещё больше должно быть... если кто-нибудь не оптимизировал под аттини13 библиотеки ардуино).
Таким образом, основное время у Вас уже не выдержки времени, а сами операции ввода/вывода (я так понял переменная vre минимум может быть 40 мкс). Т.к. они несколько стохастичны, поэтому у вас наблюдается плавание частоты.
Также к этому эффекту может приводить:
1. нестабильно напряжения питания при включении/выключении выходных ног, что приводит к нестабильным измерениям аналогового сигнала.
2. Шум аналогового сигнала (чем меньше сопротивление, т.е. чем меньше входное число и выше частота - тем выше относительная величина шума (сравните: +-2 единицы при 600 единицах входного это всего 0.3%, а те же +-2 единицы при 6 единицах входного - это уже +-30%). Выход - фильтровать как "физически", так и в цифровой форме. Простейший способ - усреднение. Вводите переменную аккумулятор А. Допустим, постоянная времени фильтра будет 64 единицы. При каждом новом значении АЦП Ц вычиатете из аккумулятора А=А-А/64 и прибавляете считанное значение АЦП: А=А+Ц/64. С помощью школьной математики эту формулу можно значительно упростить. Но так проще для понимания. Варьируя величину постоянной времени фильтра можно делать фильтр "шустрым" или "тупым". Надо попробовать и сами поймёте.
В общем, переходите от диджиталврайт к нормальной работе с портами, как это сделать, уже в этой теме не раз писалось, либо можно подсмотреть тут https://geektimes.ru/post/255744/
там же и об ускорении диджитал реад.
Насчёт диджитал реад. Можно не ждать сиего замечательного момента, когда произойдёт окончание преобразования АЦП. Просто нужно запутстить АЦП в режим Freerun и как только есть необходимость в аналоговых данных - считывать их из регистра АЦП. Да. это будет предыдущее преобрвазоние, но какая нам в данном случае разница?
Доброго времени суток!
Помогите разобраться с проблемой.
тини13 + сенсорная кнопка + серво + транзисторный ключ
Тини в повердаун режиме, если коснуться сенсорной кнопки на 6 ногу (PB1) приходит сигнал 0, что бы тинька вышла из сна.
Дальше на это все дело повешано прерывание INT0, в функции которая его обрабатывает пытаюсь ключить транзисторный ключ (нога 3 PB4), потом после этого со значения 150 сервой повернуться до 200 и назад 150, выключить ключ, и заснуть
Если с просыпанием и засыпанием все ок, то с сервой полный треш - серва живет своей жиснь. Никак не могу разобраться как шим и прерывание собрать вместе.
Скорее всего я не до конца понимаю как настраивать и работать с шим для сервы.
Серва Tower ProSG90
pittyalex
Спасибо за помощ. Подсказки помогли и если сделаю так :
int vreme=0;
int vre=0;
void setup ()
{
DDRB |= (0 << 3); // устанавливаем вывод PB3 как вход
DDRB |= (1 << 4); // устанавливаем вывод PB4 как выход
}
void loop ()
{
//vreme=analogRead(PB3); //не читаем значение
vre=80;
for (int i = 0; i < 58; i++)
{
PORTB |= (1 << 4); // устанавливаем hi уровень на выводе PB4
delayMicroseconds (vre);
PORTB &= ~(1 << 4); // устанавливаем низкий уровень на выводе PB4
delayMicroseconds (vre);
}
delayMicroseconds (vre*4);
}
Работает и скакание оборотов при ~6900об. примерно 10вверх и 10 в низ ето вполне достаточно, но если уберем "//" перед vreme=analogRead(PB3); хотя его и не пользуем. Сразу скакание получается около 150об. вверх и 150об. вниз (наполовину из первого ардуинского скетча) Думаю проблема в "analogRead(PB3);" команду но незнаю как ей заменить, если ето вообще возможно.
pittyalex
Спасибо за помощ. Подсказки помогли и если сделаю так :
int vreme=0;
1. Нарисуйте вашу электронную. Схему.
2. Нарисуйте график, который вы хотите получить.
3. Пределы регулирования частоты?
4. Почему бы не использовать таймер?
5 какая частота самой тиньки13?
1./2. Вот схемка и то что должно выходить из тиньку.
3. Самая низкая частота будет 60hz. max 7khz.
4. Если под таймер имеете в виду чтото вроде 555 он не умеет представлять 59 и 60 зуб которые отсуствуют. Я делал такое устройство с лм555 и две цд4017 работает как положено но оно слишком большое и сложное.
5. Встроенны кварц на 9,6 Mhz.
Как писал и ранше если задаю статичная частота ~7кхз и не читаю вход из потенциометра на выходе тиньки все стабильно. Плавание на выход появляется если добавлю analogRead в скетч.
Спасибо за внимание :)
Не могу не спросить, что такое ЕБУ?
Не, не то. Правильно - ЭБУ (электронный блок управления)
Хахах ну да время плохо отражается на памяти :) я не русский и жил в СССР 32 года назад.Жил там три года два в детсад и один в школе. Так что простите мои ошибки они невольные :)
1./2. Вот схемка и то что должно выходить из тиньку.
3. Самая низкая частота будет 60hz. max 7khz.
4. Если под таймер имеете в виду чтото вроде 555 он не умеет представлять 59 и 60 зуб которые отсуствуют. Я делал такое устройство с лм555 и две цд4017 работает как положено но оно слишком большое и сложное.
5. Встроенны кварц на 9,6 Mhz.
Как писал и ранше если задаю статичная частота ~7кхз и не читаю вход из потенциометра на выходе тиньки все стабильно. Плавание на выход появляется если добавлю analogRead в скетч.
Спасибо за внимание :)
С АЦП на tiny не пробовал, а вот убрать 58 59 "зуб" я думаю сделать через таймер а не через ШИМ, буквально вчера типа программный таймер, постараюсь скинуть утром завтра.
Вот здесь в передающей части счётчик на 60 поставить и пропускать нужные пики цикла
http://arduino.ru/forum/programmirovanie/attiny13a-101-primenenie?page=2...
Останется АЦП прикрутить
Наверное я очень трудно учусь :) но уже три дня смотрю на та передающая часть и ничего немогу понять :)))
Но сегодня поискал как заменить "analogRead" и после ~30 опытов и провалов наконец вот так заработало :)
int vreme=0;
int vre=0;
void setup ()
{
ADMUX |= (1 << MUX0);
ADMUX |= (1 << MUX1);
ADMUX |= (0 << ADLAR);
// Set the prescaler to clock/64 & enable ADC
ADCSRA |= (1 << ADPS1) | (0 << ADPS0) | (1 << ADEN);
DDRB |= (1 << 4); // устанавливаем вывод PB4 как выход
}
void loop ()
{
// Start the conversion
ADCSRA |= (1 << ADSC);
vreme=ADC;
vre=vreme*2+70;
for (int i = 0; i < 58; i++)
{
PORTB |= (1 << 4); // устанавливаем hi уровень на выводе PB4
delayMicroseconds (vre);
PORTB &= ~(1 << 4); // устанавливаем низкий уровень на выводе PB4
delayMicroseconds (vre);
}
delayMicroseconds (vre*4);
}
Если комуто понадовается симулятор движка ваза опеля или уаза и другие инжекторные модели с шкива 60-2 вот етот пашет прилично :)
С 71 по 80 строки моего кода выкидываете и пишите то что вам нужно выполнить каждый такт таймера, функцию отправки uart выкидываете, при частоте МК 8мгц получается что обработчик прерывания срабатывает 9600 раз в секунду (если я правильно помню расчёт - давно это делал) соответственно скорость крутит как вам надо, но плавного регулирования в ваших пределах частоты мне кажется не получиться
В пн буду к обеду у компа брошу пример мигания светодиода на основе этого кода
Наверное я очень трудно учусь :) но уже три дня смотрю на та передающая часть и ничего немогу понять :)))
вот пример переделанного кода на ATtiny85, при частоте МК 1Мгц, светодиод переключается 10 раз в секунду.
строка 54 - основной делитель 1/8/64/256/1024
строка 57 - делитель от 0 (не уверен, надо ДШ перечитать) до 255 по формуле из строки 56
Подскажите, кто пользовал, функция analogReference(INTERNAL); корректно работает на тиньке13? Какое опорное в таком случае имеем?
Сорри, нашел ответ в #336.
Здравствуйте, подскажите можно attiny13 программировать через st-link или USB2.0 к TTL 6pin ch340g
Здравствуйте, подскажите можно attiny13 программировать через st-link или USB2.0 к TTL 6pin ch340g
Теоретически наверное можно написать загрузчик, а зачем?
Думал может будет проще чем через arduino.
Usbasp за 100 рублей купите - проще некуда
Вот такой?
Вот такой?
Да
подскажите можно attiny13 программировать через st-link или USB2.0 к TTL 6pin ch340g
Нет, для прошивки нужен ISP программатор.
В догонку про USBasp - после покупки сразу запаяй на нём джампер JP3, т.к. новые микроконтроллеры с магазина без него прошиваться не будут.
подскажите можно attiny13 программировать через st-link или USB2.0 к TTL 6pin ch340g
Нет, для прошивки нужен ISP программатор.
В догонку про USBasp - после покупки сразу запаяй на нём джампер JP3, т.к. новые микроконтроллеры с магазина без него прошиваться не будут.
Мои новые работают без запаек jp3 - что я делаю не так?
Ну Х/З... Обычно МК с тактовой 1МГц не считываются программатором, пока ему не понизишь чатсоту SCK. По крайней мере с Atmega8A так было.
Ну Х/З... Обычно МК с тактовой 1МГц не считываются программатором, пока ему не понизишь чатсоту SCK. По крайней мере с Atmega8A так было.
Паттверждаю
Atmega8 не пробовал, а attiny85 на 1мгц шьются прекрасно
Все зависит от версии программатора... покупал года 3 назад USbasp... работает как часы...8 мегу шьет без вопросов... тиньку 13A...
Новая версия USbasp китайские... там прошивки кривые многие жалуются...
А можно как ко сделать отладку, типа COM порта?
Новая версия USbasp китайские... там прошивки кривые многие жалуются...
Прошить нормальной никак не получается?
Жаловаться конечно попроще будет....
А можно как ко сделать отладку, типа COM порта?
Тему почитать. Страниц 5 назад были функции выдачи как в ком порт.