А в переводчик запихать то, что говорит компилятор не пробовали?
"Fade.ino:2:22: error: iotiny13.h: No such file or directory"
У Вас в проект включён хидер #include "iotiny13.h", а в директории проекта файл физически отсутствует, о чем и сообщает компилятор. http://ru.aliexpress.com/item/Multi-Servo-Tester-3CH-ECS-Consistency-Spe...
Frolv, ваш скетч из стартового сообщения мало того, что не адаптирован для ардуино, так он ещё и для другого компилятора. Переделать вполне реально, но кто это за вас станет делать, вот в чём вопрос. Думаю вам проще залить hex как советует автор той статьи.
Час назад залил Hex, увы для моих целей это не подошло...моторчик то "пищит" - то нет, т.е. не армится... в общем у меня задача такая: есть бесколекторный мотор и регулятор к нему (спользуется на коптерах), как не используя приемник-передатчик радиомодели, а только "приблуду" на МК заставить мотор вращаться и менять обороты с помощью переменного резистора? Нашел вот ссылку https://ssl.instructables.com/id/Attiny254585-PWM-generator-and-Servo-tester/ попробую по ней. Но она на тинку 45...
Из неё сразу видно, что таймер работает на максимальной частоте, которая рассчитывается если не ошибаюсь: F_тактовая / 256 Значит увеличить частоту можно только увеличением тактовой частоты контроллера. ps: кстати с битами -конфигурацией выхода (COM0**) что-то не то. Судя по даташиту так не должно работать.
Из неё сразу видно, что таймер работает на максимальной частоте, которая рассчитывается если не ошибаюсь: F_тактовая / 256 Значит увеличить частоту можно только увеличением тактовой частоты контроллера. ps: кстати с битами -конфигурацией выхода (COM0**) что-то не то. Судя по даташиту так не должно работать.
Спасибо за отклик.
О формате записи подтяну знания.
Залил только что свой скетч для проверки рабоатет.
Ваш залил не работает((
А на счет скорости считал так 9,6МГц/256=37,5КГц
В меге восьмой так сходилось, где-то в тиньке косяк в моем коде-может она 37КГц
Ps в вашем скетче ошибки небыло, это я 2 раза ошибся ))
Спасибо. Прошил, попробова, работает. Как установить частоту не понял.
А возможно ли на тиньке сделать такое - на двух выходах синхронно импульсы с частотой примерно 20-25 килогерц как на рисунке? Нужно для управления мостом.
Спасибо. Прошил, попробова, работает. Как установить частоту не понял.
А возможно ли на тиньке сделать такое - на двух выходах синхронно импульсы с частотой примерно 20-25 килогерц как на рисунке? Нужно для управления мостом.
Вам на тини нужно менять частоту или на ардутно?
Если тини то менять частоту можно только с определенным шагом до 37,5КГц
Если тини то менять частоту можно только с определенным шагом до 37,5КГц
На ардуино как хотите вплоть до 500КГц!)))
А что за мост?
Нужен генератор, который имеет 2 выхода, на которых импульсы управляющие H-мостом, как на драйвере ШД L293. Первый выход формирует положительную полуволну, второй отрицательную. Форма напряжения после моста примерно такая, как на обмотке биполярного двигателя.
Нужен очень мощный звук на излучателе с частотой 20-25 килогерц.
Нужен генератор, который имеет 2 выхода, на которых импульсы управляющие H-мостом, как на драйвере ШД L293. Первый выход формирует положительную полуволну, второй отрицательную. Форма напряжения после моста примерно такая, как на обмотке биполярного двигателя.
Нужен очень мощный звук на излучателе с частотой 20-25 килогерц.
Генератор хотелось бы сделать на тиньке 13.
Опустите частоту тини13 и получите 4,8МГц/256=17,7КГц
Это самое близкое к вашим запросам.
Еще вариант-если у вас код короткий можно сделать то что хотите програмно.
Позавчера пришли из китая Тиньки. Собрал на бредборде, подключил к ардуинке, поморгал светодиодиками. Потом решил сделать платку отдельную для прошивки тинек. Сделал. Соорудил соединительный шнурок на разъем ICSP Ардуинки. Купился на вот этот рисунок
Трахался с Тиньками 2 дня, несколько раз переустанавливал Ардуино IDE. Ни хрена ни чего не получалось. Оказалось, что пин 10 Ардуины к этому разъему вообще не подключен.
Немного переделал (один проводок втыкаю в пин 10). Все заработало........но не совсем. В первый день работало все...И скетчи прошивались, и загрузчики записывались. Записывая загрузчики я переключал вн.частоту тиньки не вдаваясь особо в теорию. Сейчас загрузчики не записываются, выдается ошибка. Правда в первый день в Ардуино IDE добавлял другие файлы.
Вот что получилось...макетик для освоения тиньки....потом панельки на другие тиньки добавлю
г
Где-то прочитал про конденсатор, что надо поставить между +5в и GND (его видно на фотке на ардуинке). Сделал вывод - он нахрен не нужен. Без него все прекрасно работает.
На последнем билде Ардуино ИДЕ 1.6.5 перетсл компилироваться код для ATTINY13 с ядром из первого сообщения.
Кто нибудь разобрался как победить это нежелание компилировать?
Сколько искал, максимум нашёл установку ядара для Тини 45-85 онлайн (по новому из настроек и Боард Менеджера)
Я вставлял как-то через пень-колоду,т.е не очень понимая файлы из двух источников для тиньки 13. Первый раз в списке появились тиньки на 1.2, 4.8, 9.6 мегагерц. Все прекрасно работало. Второй раз поставил другие файлы. Появились тиньки 128, 600 килогерц, 1.2, 4.8, 9.6 мегагерц. Все шьется, но "записать загрузчик" выдает ошибку, типа что-то в файле конфигурации.
Всвязи с необходимостью сделать генератор на тиньке, спаял макетик для прошивки тиньки. Попробовал залить несколько готовых скетчей. Как ни странно - работает. Нашел на просторах интернета такой скетч
// 1.2 MHz (default) built in resonator
#define F_CPU 1200000UL
#include <avr/io.h>
#include <util/delay.h>
#define LED_BIT _BV(PB0)
int main()
{
DDRB |= LED_BIT; // OUTPUT
while (1)
{
PORTB |= LED_BIT; // HIGH
_delay_ms(1000);
PORTB &= ~LED_BIT; // LOW
_delay_ms(1000);
}
}
Если закомментить дилеи, то моргание происходит с частотой более 196 килогерц, в отличии от ардуиновского Blink, который на тиньке с закомментированными дилеями даже до 7 килогерц не дотягивает.
Про операторы, которые здесь применяются я не слышал, и вообще ни чего не понимаю. Подскажите где можно про это почитать.
Я его сделал! Как и хотел...генератор прямоугольных импульсов на 2 выхода, как и хотел примерно 23 килогерца. Максимальная частота 117 килогерц. В скетче можно подстроить для своих нужд. Выкладываю скетч, может кто подскажет, что можно подправить
/* Генератор прямоугольных импульсов на два выхода. Максимальная частота 117 килогерц.
*если поиграться с delay_ями (они в микросекундах), то можно настроить под свои нужды
* Я для себя частоту примерно 23 килогерца сделал :)
*/
// 1.2 MHz (default) built in resonator
#define F_CPU 1200000UL//Если закомментить - все равно работает
#include <avr/io.h>//Если закомментить - все равно работает
#include <util/delay.h>//delay.h - этот файл содержит функции для создания пауз в программе.
#define out1 _BV(PB0)
#define out2 _BV(PB1)
int main()
{
DDRB |= out1; // OUTPUT
DDRB |= out2; // OUTPUT
while (1)
{
PORTB |= out1; // HIGH
_delay_us(15);//Длительность импульса на выходе1 при 15 - 23.38 килогерц
//при 300 - 1586 герц
PORTB &= ~out1; // LOW
_delay_us(1);//Ни чего нет на выходах
PORTB |= out2; // HIGH
_delay_us(15);//Длительность импульса на выходе2
PORTB &= ~out2; // LOW
_delay_us(1);//Ни чего нет на выходах
}
}
Не забыл. И ob00001111, и B00001111, и 0b001111 пробовал, что-то не записалось. Может неправильно pinMode назначил....тоже кучей пытался назначить. Может там где ошибка. Завтра попытаюсь еще
Я его сделал! Как и хотел...генератор прямоугольных импульсов на 2 выхода, как и хотел примерно 23 килогерца. Максимальная частота 117 килогерц. В скетче можно подстроить для своих нужд. Выкладываю скетч, может кто подскажет, что можно подправить
/* Генератор прямоугольных импульсов на два выхода. Максимальная частота 117 килогерц.
*если поиграться с delay_ями (они в микросекундах), то можно настроить под свои нужды
* Я для себя частоту примерно 23 килогерца сделал :)
*/
// 1.2 MHz (default) built in resonator
#define F_CPU 1200000UL//Если закомментить - все равно работает
#include <avr/io.h>//Если закомментить - все равно работает
#include <util/delay.h>//delay.h - этот файл содержит функции для создания пауз в программе.
#define out1 _BV(PB0)
#define out2 _BV(PB1)
int main()
{
DDRB |= out1; // OUTPUT
DDRB |= out2; // OUTPUT
while (1)
{
PORTB |= out1; // HIGH
_delay_us(15);//Длительность импульса на выходе1 при 15 - 23.38 килогерц
//при 300 - 1586 герц
PORTB &= ~out1; // LOW
_delay_us(1);//Ни чего нет на выходах
PORTB |= out2; // HIGH
_delay_us(15);//Длительность импульса на выходе2
PORTB &= ~out2; // LOW
_delay_us(1);//Ни чего нет на выходах
}
}
Это программный ШИМ не каждому подойдет, добавить еще пару строк кода и выход уже будет не таким.
Есть же апартный таймер с выходом как раз на два порта и совсем не занимает вычислительную мощность МК, при запуске настраиваете его парой строк а дальше весь килобайт под программу ваш!
вот простой пример
int skv=100;
void setup()
{
PORTB=0x00;
DDRB=0b00000001;// устанавливаем порт PB0 как выход а остальные вход
//DDRB &= ~(1<<4); // устанавливаем вывод PB2 как вход
TCCR0A=0x83;TCCR0B=0x01;OCR0A=0x00;//Аппаратный ШИМ
}
void loop()
{
OCR0A=skv;//устанавливаем скважность.
}
Это программный ШИМ не каждому подойдет, добавить еще пару строк кода и выход уже будет не таким.
Есть же апартный таймер с выходом как раз на два порта и совсем не занимает вычислительную мощность МК, при запуске настраиваете его парой строк а дальше весь килобайт под программу ваш!
вот простой пример
А какая частота или диапазон частот? И где 2 выхода? Может глупые вопросы....но я пока плохо понимаю в программировании.
Схема как в этой статье http://hardname.narod.ru/servotester.html , код ниже, но выдает ошибку..
This report would have more information with
#define ENABLE_BIT_DEFINITIONS #include "iotiny13.h" //SERVOTESTER V 1.0 // 1 PB5 (PCINT5/RESET/ADC0/dW) // 2 PB3 (PCINT3/CLKI/ADC3) button_sweep - sweep on trigger // 3 PB4 (PCINT4/ADC2) button_middle - pulse width 1.5mS // 4 gnd // 5 PB0 (MOSI/AIN0/OC0A/PCINT0) pulse_out // 6 PB1 (MISO/AIN1/OC0B/INT0/PCINT1) // 7 PB2 (SCK/ADC1/T0/PCINT2) r_var (2k2, gnd, vcc) - pulse width or sweep frequency // 8 vcc // fuse default (0x6a) #define MIDDLE 4 #define SWEEP 3 #define RESET 5 #define WIDTH_MODE 0 #define SWEEP_MODE 2 #define DEB_LIMIT 5 #pragma vector=TIM0_OVF_vect __interrupt void my_interrupt_handler(void) { static unsigned char int_count=0, button_debounce=0, sweep_state=WIDTH_MODE; static char sweep_direct=0; static int sweep_count; static unsigned char impulse = 255-150, tmp; // 1mS =180, 1.5mS=143, 2mS=105 if(int_count++ >=5) { OCR0A = impulse; int_count = 0; impulse=ADCH;//only high 8 bits (left justify mode) if(!(PINB & (1<<SWEEP))) { if(button_debounce == DEB_LIMIT) { if(sweep_state == WIDTH_MODE) { sweep_state = SWEEP_MODE; sweep_count = 0; } else sweep_state = WIDTH_MODE; button_debounce = 0; } } else if(button_debounce < DEB_LIMIT) button_debounce++; if(!(PINB & (1<<MIDDLE))) impulse = 255-150/2-150/4; //1.5mS else { if(sweep_state == WIDTH_MODE) { impulse >>=1; tmp = impulse>>1; impulse -= tmp; tmp >>=2; impulse += tmp; impulse += 105-1; } else { if(sweep_direct == 0) { sweep_count += ((int)impulse)<<3; if(sweep_count > 0x3fff) { sweep_count = 0x3fff; sweep_direct = 1; } } else { sweep_count -= ((int)impulse)<<3; if(sweep_count < 0) { sweep_count = 0; sweep_direct = 0; } } impulse = sweep_count>>6; impulse >>=1; tmp = impulse>>1; impulse -= tmp; tmp >>=2; impulse += tmp; impulse += 105-1; } } } else { OCR0A = 255; //low level all period (inverse compare out) ADCSRA |= 1<<ADSC;//ADC single conversion start } } int main() { // internal_clk = 9.6 MHz // pulse period 20mS, lenght 1 - 1.5(middle) - 2mS // default divider = 8 (9.6/8=1.2) // 9.6 /2 master clock prescaler=4.8 /64 timer counter prescaler /150 timer value = 500Hz (2mS) CLKPR = 1<<CLKPCE;// divider change enable CLKPR = 1;// 0=divider - 1, 1=divider 2 (page 26 manual PDF) TCCR0A = 1<<COM0A1 | 1<<COM0A0 | 1<<COM0B1 | 1<<COM0B0 | 1<<WGM01 | 1<<WGM00;//WGM2:0 = 3 -> Fast PWM 0xFF TOP MAX OCR0A = 105; OCR0B = 105;//for test purpose only TIMSK0 = 1<<TOIE0;//TOIE0 counter overflow interrupt TCCR0B = 3;//3=timer prescaler 64, 1=1 ADMUX = 1<<ADLAR | 1<<MUX0;//ADC init REF_VCC(ADMUX=0), left_just(ADLAR=1), chan ADC1=PB2(MUX1..0=01) ADCSRA = 1<<ADEN | 1<<ADPS2 | 1<<ADPS1;//ADC on (ADEN=1), 4.8/64(prescaler)=75kHz(ADPS2:0=110) DIDR0 = 1<<ADC1D;//ADC digital input on PB2 disable ADCSRA |= 1<<ADSC;//start single conversion //ADC only ADCH read DDRB |= 1<<PB0 | 1<<PB1;//timers out ON PORTB |= 1<<MIDDLE | 1<<SWEEP | 1<<RESET;//pullup enable on button and reset SREG |= 1<<7; //interrupt enable for(;;) { } }А в переводчик запихать то, что говорит компилятор не пробовали?
"Fade.ino:2:22: error: iotiny13.h: No such file or directory"
У Вас в проект включён хидер #include "iotiny13.h", а в директории проекта файл физически отсутствует, о чем и сообщает компилятор.
http://ru.aliexpress.com/item/Multi-Servo-Tester-3CH-ECS-Consistency-Spe...
Я в программировании дуб-дубом! Сервотестер выписал, но ждать еще месяц....а нужно сейчас.
Что-то моя Тинька не заводится( фьюзы заводские, их пишет/читает, а светодиодом не моргает(
Писал стд блинк на С . на 2313 код едет, на 13( с изменённым портом) не едет
нашел (http://telesys-ru.1gb.ru/wwwboards/mcontrol/945/messages/39444.shtml) такой файлик. Ну компилятор ругается еще на 23 и 24 строку. Что там неправильно?
Frolv, ваш скетч из стартового сообщения мало того, что не адаптирован для ардуино, так он ещё и для другого компилятора. Переделать вполне реально, но кто это за вас станет делать, вот в чём вопрос. Думаю вам проще залить hex как советует автор той статьи.
Час назад залил Hex, увы для моих целей это не подошло...моторчик то "пищит" - то нет, т.е. не армится... в общем у меня задача такая: есть бесколекторный мотор и регулятор к нему (спользуется на коптерах), как не используя приемник-передатчик радиомодели, а только "приблуду" на МК заставить мотор вращаться и менять обороты с помощью переменного резистора? Нашел вот ссылку https://ssl.instructables.com/id/Attiny254585-PWM-generator-and-Servo-tester/ попробую по ней. Но она на тинку 45...
уффф..нашел и для тинки13..
* Led flasher PB0 pwm channel 1 PB1 pwm channel 2 PB2 PB3 Analog 2 in PB4 Analog 1 in PB5 (RESET) */ #include<avr/io.h> #define OUTPUT 1 #define INPUT 0 #define SetBit(BIT, PORT) PORT |= (1<<BIT) #define ClearBit(BIT, PORT) PORT &= ~(1<<BIT) #define IsHigh(BIT, PORT) (PORT & (1<<BIT)) != 0 #define IsLow(BIT, PORT) (PORT & (1<<BIT)) == 0 #define CH1On() SetBit(0, PORTB) #define CH1Off() ClearBit(0, PORTB) #define CH2On() SetBit(1, PORTB) #define CH2Off() ClearBit(1, PORTB) void Delay(unsigned int delay); void InitADC( void ); void readADC(void) ; int main( void ) { unsigned int i, d; // Set clock prescaler: 0 gives full 4.8 MHz from internal oscillator. CLKPR = (1 << CLKPCE); CLKPR = 0; DDRB = ((OUTPUT << PB0) | (OUTPUT << PB1) |(INPUT << PB2) |(INPUT << PB3) |(INPUT << PB4) |(INPUT << PB5 )); InitADC(); while(1) { d = 33000; readADC(); i = (ADC*4)+980; d -= i; ADMUX = 3; CH1On(); for(; i != 0; i--) asm volatile ("nop"::); // 900 is 0.5ms, 5000 is 2.5ms CH1Off(); readADC(); i = (ADC*4)+980; d -= i; ADMUX = 2; CH2On(); for(; i != 0; i--) asm volatile ("nop"::); // 900 is 0.5ms, 5000 is 2.5ms CH2Off(); Delay(d); // 18000 is a full 17ms cycle } } void Delay(unsigned int delay) { unsigned int x; for (x = delay; x != 0; x--) { asm volatile ("nop"::); } } void InitADC( void ) { // VCC voltager ref, ADC2 (PB4) as default input ADMUX = 2; // Enable ADC, ADC prescaler /64 ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1); // Start conversion and wait for it to complete (result not used) ADCSRA |= (1<<ADSC); // Start convertion while (ADCSRA & (1<<ADSC)); // Wait for conversion to complete ADCSRA = ADCSRA; // Clear ADC interrupt flag } void readADC(void) { SetBit(ADIF, ADCSRA); SetBit(ADSC, ADCSRA); while(IsLow(ADIF, ADCSRA)); // wait for conversion done, ADIF flag active }мотор иницилизируется, запускается. Ура! но на малых значениях дергается, это уже мелочи...постараюсь разобраться в коде. всем спасибо за ответы.
вопрос,
а можно ли на Attiny13a подключить OLED дисплей по шине I2C. для работы с библиотекой u8glib. ?
вопрос,
а можно ли на Attiny13a подключить OLED дисплей по шине I2C. для работы с библиотекой u8glib. ?
библиотека огромна не влезет.
Привет коллеги!
Прошу помощи, кто вник кто разобрался с даташитом tinny13.
Мой код позволяет получить аппаратный ШИМ 4КГц, мне нужно больше. Как поднять частоту?
void setup() { PORTB=0x00;DDRB=0x01;// порт TCCR0A=0x83;TCCR0B=0x01;OCR0A=0x00;//Аппаратный ШИМ } void loop() { OCR0A=125;//устанавливаем скважность. }bodriy2014, вам на будущее -считается более корректным для оценки человеком там-же запись, но в формате:
void setup() { PORTB&=~(1<<1); DDRB|=1<<1; TCCR0A= (1<<COM0A0)|(1<<COM0B0)|(1<<WGM01)|(1<<WGM00);// oc0b enable(?) ; mode 3,FASTPWM TCCR0B=1<<CS0; //divider=1 OCR0A=125;//устанавливаем начальную скважность. } void loop() { }Из неё сразу видно, что таймер работает на максимальной частоте, которая рассчитывается если не ошибаюсь: F_тактовая / 256 Значит увеличить частоту можно только увеличением тактовой частоты контроллера. ps: кстати с битами -конфигурацией выхода (COM0**) что-то не то. Судя по даташиту так не должно работать.
bodriy2014, вам на будущее -считается более корректным для оценки человеком там-же запись, но в формате:
void setup() { PORTB|=~(1<<1); DDRB|=1<<1; TCCR0A= (1<<COM0A0)|(1<<COM0B0)|(1<<WGM01)|(1<<WGM00);// oc0b enable(?) ; mode 3,FASTPWM TCCR0B=1<<CS0; //divider=1 OCR0A=125;//устанавливаем начальную скважность. } void loop() { }Из неё сразу видно, что таймер работает на максимальной частоте, которая рассчитывается если не ошибаюсь: F_тактовая / 256 Значит увеличить частоту можно только увеличением тактовой частоты контроллера. ps: кстати с битами -конфигурацией выхода (COM0**) что-то не то. Судя по даташиту так не должно работать.
Спасибо за отклик.
О формате записи подтяну знания.
Залил только что свой скетч для проверки рабоатет.
Ваш залил не работает((
А на счет скорости считал так 9,6МГц/256=37,5КГц
В меге восьмой так сходилось, где-то в тиньке косяк в моем коде-может она 37КГц
bodriy2014, может я при пересчете двоичных кодов где-то ошибся, но касательно частоты -получается что у вас тактовая 1МГц а не 9,6. Какие фьюзы стоят?
Залил скомпилированный в Atmel Studio .hex получил то-же 4КГц
/* Апаратный ШИМ тини13 */ #include <avr/io.h> int main(void) { PORTB=0x00;DDRB=0x01;// порт TCCR0A=0x83;TCCR0B=0x01;OCR0A=0x00;//Аппаратный ШИМ OCR0A=125;//устанавливаем скважность. while(1) { } }Вот мои фьюзы из сигна прог
dimax Огромное спасибо за наводку.
Поправил фьюзы-поставил 0x LOW
Теперь 37КГц!!!!
bodriy2014, разобрался где я ошибся - я число 0x83 посчитал как десятичное :)
void setup() { PORTB&=~(1<<PB0); DDRB|=1<<PB0; //PB0- OUTPUT mode TCCR0A= (1<<COM0A1)|(1<<WGM01)|(1<<WGM00); // Clear OC0A on Compare Match, set OC0A at TOP; mode 3,FASTPWM TCCR0B=1<<CS00; //divider=1 OCR0A=127;//устанавливаем начальную скважность. } void loop() { }Ps в вашем скетче ошибки небыло, это я 2 раза ошибся ))
Сейчас сравниваю для тини13 ардуиновский код и читый С.
НЕ ВСЕ ардуиновские команды жрут ресурсов больше!
Другой вопрос через С настроить работу можно более тонко.
например эти жрут одинаково.
С
int Volts = 0; // Вольтметр void setup() { } void loop() { Volts = analogRead_C(2); // РВ4 в ATtiny13 } unsigned int analogRead_C(byte channel){ ADMUX = channel; // ADC pin ADCSRA |= 1<<ADEN; ADCSRA |= 1<<ADSC; while(!(ADCSRA & (1<<ADIF))); ADCSRA |= 1<<ADIF; byte low = ADCL; byte high = ADCH; ADCSRA &= ~(1 << ADEN); // отключаем АЦП, для уменьшения энергопотребления return (high << 8) | low; }Ардуино
int Volts = 0; // Вольтметр void setup() { } void loop() { Volts=analogRead(2); }Народ! ХЕЛП!!!!
не могу прошить тиньку в смд корпусе. Выдает
Проблема решаема...http://bigbarrel.ru/error_attiny4585/
Народ! ХЕЛП!!!!
не могу прошить тиньку в смд корпусе. Выдает
Все оказалось просто - всему виной Великая наука о контактах
bodriy2014, разобрался где я ошибся - я число 0x83 посчитал как десятичное :)
void setup() { PORTB&=~(1<<PB0); DDRB|=1<<PB0; //PB0- OUTPUT mode TCCR0A= (1<<COM0A1)|(1<<WGM01)|(1<<WGM00); // Clear OC0A on Compare Match, set OC0A at TOP; mode 3,FASTPWM TCCR0B=1<<CS00; //divider=1 OCR0A=127;//устанавливаем начальную скважность. } void loop() { }Ps в вашем скетче ошибки небыло, это я 2 раза ошибся ))
Спасибо. Прошил, попробова, работает. Как установить частоту не понял.
А возможно ли на тиньке сделать такое - на двух выходах синхронно импульсы с частотой примерно 20-25 килогерц как на рисунке? Нужно для управления мостом.
Спасибо. Прошил, попробова, работает. Как установить частоту не понял.
А возможно ли на тиньке сделать такое - на двух выходах синхронно импульсы с частотой примерно 20-25 килогерц как на рисунке? Нужно для управления мостом.
Вам на тини нужно менять частоту или на ардутно?
Если тини то менять частоту можно только с определенным шагом до 37,5КГц
На ардуино как хотите вплоть до 500КГц!)))
А что за мост?
Вам на тини нужно менять частоту или на ардутно?
Если тини то менять частоту можно только с определенным шагом до 37,5КГц
На ардуино как хотите вплоть до 500КГц!)))
А что за мост?
Нужен генератор, который имеет 2 выхода, на которых импульсы управляющие H-мостом, как на драйвере ШД L293. Первый выход формирует положительную полуволну, второй отрицательную. Форма напряжения после моста примерно такая, как на обмотке биполярного двигателя.
Нужен очень мощный звук на излучателе с частотой 20-25 килогерц.
Генератор хотелось бы сделать на тиньке 13.
Нужен генератор, который имеет 2 выхода, на которых импульсы управляющие H-мостом, как на драйвере ШД L293. Первый выход формирует положительную полуволну, второй отрицательную. Форма напряжения после моста примерно такая, как на обмотке биполярного двигателя.
Нужен очень мощный звук на излучателе с частотой 20-25 килогерц.
Генератор хотелось бы сделать на тиньке 13.
Опустите частоту тини13 и получите 4,8МГц/256=17,7КГц
Это самое близкое к вашим запросам.
Еще вариант-если у вас код короткий можно сделать то что хотите програмно.
Опустите частоту тини13 и получите 4,8МГц/256=17,7КГц
Это самое близкое к вашим запросам.
Маловасто будет :) Мне надо 20-25 и может даже с частотной модуляцией 1-2 герца.
Позавчера пришли из китая Тиньки. Собрал на бредборде, подключил к ардуинке, поморгал светодиодиками. Потом решил сделать платку отдельную для прошивки тинек. Сделал. Соорудил соединительный шнурок на разъем ICSP Ардуинки. Купился на вот этот рисунок
Трахался с Тиньками 2 дня, несколько раз переустанавливал Ардуино IDE. Ни хрена ни чего не получалось. Оказалось, что пин 10 Ардуины к этому разъему вообще не подключен.
Немного переделал (один проводок втыкаю в пин 10). Все заработало........но не совсем. В первый день работало все...И скетчи прошивались, и загрузчики записывались. Записывая загрузчики я переключал вн.частоту тиньки не вдаваясь особо в теорию. Сейчас загрузчики не записываются, выдается ошибка. Правда в первый день в Ардуино IDE добавлял другие файлы.
Вот что получилось...макетик для освоения тиньки....потом панельки на другие тиньки добавлю
Где-то прочитал про конденсатор, что надо поставить между +5в и GND (его видно на фотке на ардуинке). Сделал вывод - он нахрен не нужен. Без него все прекрасно работает.
На последнем билде Ардуино ИДЕ 1.6.5 перетсл компилироваться код для ATTINY13 с ядром из первого сообщения.
Кто нибудь разобрался как победить это нежелание компилировать?
Сколько искал, максимум нашёл установку ядара для Тини 45-85 онлайн (по новому из настроек и Боард Менеджера)
урл для установки 45-85 тиньки (13 нету пока что)
https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json
у меня с 1.6.5 такое ядро работает.
Не помню где качал.
http://my-files.ru/9mihx8
На последнем билде Ардуино ИДЕ 1.6.5 перетсл компилироваться код для ATTINY13 с ядром из первого сообщения.
Кто нибудь разобрался как победить это нежелание компилировать?
Сколько искал, максимум нашёл установку ядара для Тини 45-85 онлайн (по новому из настроек и Боард Менеджера)
Я вставлял как-то через пень-колоду,т.е не очень понимая файлы из двух источников для тиньки 13. Первый раз в списке появились тиньки на 1.2, 4.8, 9.6 мегагерц. Все прекрасно работало. Второй раз поставил другие файлы. Появились тиньки 128, 600 килогерц, 1.2, 4.8, 9.6 мегагерц. Все шьется, но "записать загрузчик" выдает ошибку, типа что-то в файле конфигурации.
Странно всё.
Запускаю версию 1.0.5. всё нормально компилируется
запускаю 1.6.5, выдаёт
Похоже, надо забрасывать это дело и переходить на Code Vision AVR
Похоже, надо забрасывать это дело и переходить на Code Vision AVR
Если и переходить, то на AVR Studio/Atmel Studio.
В чём их отличие ?
Так же интересует, конечный откомпилированный объём,
будет отличаться по размеру от результата полученного в Arduino ?
Всвязи с необходимостью сделать генератор на тиньке, спаял макетик для прошивки тиньки. Попробовал залить несколько готовых скетчей. Как ни странно - работает. Нашел на просторах интернета такой скетч
// 1.2 MHz (default) built in resonator #define F_CPU 1200000UL #include <avr/io.h> #include <util/delay.h> #define LED_BIT _BV(PB0) int main() { DDRB |= LED_BIT; // OUTPUT while (1) { PORTB |= LED_BIT; // HIGH _delay_ms(1000); PORTB &= ~LED_BIT; // LOW _delay_ms(1000); } }Если закомментить дилеи, то моргание происходит с частотой более 196 килогерц, в отличии от ардуиновского Blink, который на тиньке с закомментированными дилеями даже до 7 килогерц не дотягивает.
Про операторы, которые здесь применяются я не слышал, и вообще ни чего не понимаю. Подскажите где можно про это почитать.
http://easyelectronics.ru/avr-uchebnyj-kurs-programmirovanie-na-si-chast-1.html
А также остальные части.
Сам по ним постигал))
http://easyelectronics.ru/avr-uchebnyj-kurs-programmirovanie-na-si-chast-1.html
А также остальные части.
Сам по ним постигал))
Yarik.Yar спасибо огромное!
Вроде, самое то, что надо!
Пошел читать.
Я его сделал! Как и хотел...генератор прямоугольных импульсов на 2 выхода, как и хотел примерно 23 килогерца. Максимальная частота 117 килогерц. В скетче можно подстроить для своих нужд. Выкладываю скетч, может кто подскажет, что можно подправить
/* Генератор прямоугольных импульсов на два выхода. Максимальная частота 117 килогерц. *если поиграться с delay_ями (они в микросекундах), то можно настроить под свои нужды * Я для себя частоту примерно 23 килогерца сделал :) */ // 1.2 MHz (default) built in resonator #define F_CPU 1200000UL//Если закомментить - все равно работает #include <avr/io.h>//Если закомментить - все равно работает #include <util/delay.h>//delay.h - этот файл содержит функции для создания пауз в программе. #define out1 _BV(PB0) #define out2 _BV(PB1) int main() { DDRB |= out1; // OUTPUT DDRB |= out2; // OUTPUT while (1) { PORTB |= out1; // HIGH _delay_us(15);//Длительность импульса на выходе1 при 15 - 23.38 килогерц //при 300 - 1586 герц PORTB &= ~out1; // LOW _delay_us(1);//Ни чего нет на выходах PORTB |= out2; // HIGH _delay_us(15);//Длительность импульса на выходе2 PORTB &= ~out2; // LOW _delay_us(1);//Ни чего нет на выходах } }Спасибо :)
А возможно ли с Attiny в порт сразу все биты записывать? Я пробовал, что-то у меня не получается :(
То есть?
У тиньки порт В урезан, только 6 пинов
Да, так. Но что-то не получилось
0b в начале не забыл?)
Не забыл. И ob00001111, и B00001111, и 0b001111 пробовал, что-то не записалось. Может неправильно pinMode назначил....тоже кучей пытался назначить. Может там где ошибка. Завтра попытаюсь еще
Я его сделал! Как и хотел...генератор прямоугольных импульсов на 2 выхода, как и хотел примерно 23 килогерца. Максимальная частота 117 килогерц. В скетче можно подстроить для своих нужд. Выкладываю скетч, может кто подскажет, что можно подправить
/* Генератор прямоугольных импульсов на два выхода. Максимальная частота 117 килогерц. *если поиграться с delay_ями (они в микросекундах), то можно настроить под свои нужды * Я для себя частоту примерно 23 килогерца сделал :) */ // 1.2 MHz (default) built in resonator #define F_CPU 1200000UL//Если закомментить - все равно работает #include <avr/io.h>//Если закомментить - все равно работает #include <util/delay.h>//delay.h - этот файл содержит функции для создания пауз в программе. #define out1 _BV(PB0) #define out2 _BV(PB1) int main() { DDRB |= out1; // OUTPUT DDRB |= out2; // OUTPUT while (1) { PORTB |= out1; // HIGH _delay_us(15);//Длительность импульса на выходе1 при 15 - 23.38 килогерц //при 300 - 1586 герц PORTB &= ~out1; // LOW _delay_us(1);//Ни чего нет на выходах PORTB |= out2; // HIGH _delay_us(15);//Длительность импульса на выходе2 PORTB &= ~out2; // LOW _delay_us(1);//Ни чего нет на выходах } }Это программный ШИМ не каждому подойдет, добавить еще пару строк кода и выход уже будет не таким.
Есть же апартный таймер с выходом как раз на два порта и совсем не занимает вычислительную мощность МК, при запуске настраиваете его парой строк а дальше весь килобайт под программу ваш!
вот простой пример
int skv=100; void setup() { PORTB=0x00; DDRB=0b00000001;// устанавливаем порт PB0 как выход а остальные вход //DDRB &= ~(1<<4); // устанавливаем вывод PB2 как вход TCCR0A=0x83;TCCR0B=0x01;OCR0A=0x00;//Аппаратный ШИМ } void loop() { OCR0A=skv;//устанавливаем скважность. }Это программный ШИМ не каждому подойдет, добавить еще пару строк кода и выход уже будет не таким.
Есть же апартный таймер с выходом как раз на два порта и совсем не занимает вычислительную мощность МК, при запуске настраиваете его парой строк а дальше весь килобайт под программу ваш!
вот простой пример
А какая частота или диапазон частот? И где 2 выхода? Может глупые вопросы....но я пока плохо понимаю в программировании.
А какая частота или диапазон частот? И где 2 выхода? Может глупые вопросы....но я пока плохо понимаю в программировании.
Я выше вам писал как считается частота
9,6МГц/256=37,5КГц
Это пример для одного выхода PB0
Но легко и для двух ног делается PB1 и PB0.
Зато это не отнимает место в программе там что хотите можете писать МК сам в фоне следить за счетчиками будет.
Пример подробней не куда большее будет просто медвежьей услугой, посмотрите есть хорошие видео и текстовые уроки на русском по апаратному шиму AVR.
П.С. А на счет атмеги и ардуино вы не правы есть библиотека позволяющая делать ШИМ до 500КГц с любой частотой и скважностью!
простой пример высокочастотного ШИМа на ардуино
#include <PWM.h>//библиотека для поднятия частоты ШИМ int pwm = 100; // PWM 0..255 // int pinDOWN = 9; // int32_t frequency = 45000; //частота Hz void setup() { InitTimersSafe();// запуск таймера bool successDOWN = SetPinFrequencySafe(pinDOWN, frequency);//установка пина повышенной частоты } void loop() { pwmWrite(pinDOWN,pwm);//установка шим на пине }