ATtiny13A 101 применение

pittyalex
Offline
Зарегистрирован: 09.11.2016

Печаль. Так что дело - в питании. Либо надо жутко большой конденсатор ставить.... либо отдельный стабилизатор. Плохо, что датчик работает (если мне память не изменяет), только от 5 в, и не ниже. А то можно было бы AMS1117 на него поставить отдельную.

Krendelyok
Offline
Зарегистрирован: 05.10.2016

pittyalex пишет:

Плохо, что датчик работает (если мне память не изменяет), только от 5 в, и не ниже. А то можно было бы AMS1117 на него поставить отдельную.

 3-5.5V по даташиту.

Я вообще STH20 заказал себе с горя) Буду с ним разбираться. Там уже полноценный I^2C, вроде как. Припаяю его к BMP180 и залью аккуратно эпоксидкой. Адреса у них разные, будут сидеть на одном проводе. Получится датчик давления, датчик влажности и два датчика температуры в одном шилде.

pittyalex
Offline
Зарегистрирован: 09.11.2016

Krendelyok пишет:

pittyalex пишет:

Плохо, что датчик работает (если мне память не изменяет), только от 5 в, и не ниже. А то можно было бы AMS1117 на него поставить отдельную.

 3-5.5V по даташиту.

Я вообще STH20 заказал себе с горя) Буду с ним разбираться. Там уже полноценный I^2C, вроде как. Припаяю его к BMP180 и залью аккуратно эпоксидкой. Адреса у них разные, будут сидеть на одном проводе. Получится датчик давления, датчик влажности и два датчика температуры в одном шилде.


Поаккуратнее с эпоксидной смолой. Там целая наука как эти датчики правильно корпусировать. У них на сайте есть отдельный документ. Если питание с 3 вольт, можно было ams поставить.

Chip_SET
Offline
Зарегистрирован: 27.01.2015

Выручайте. Нужно прошить контроллер. Подключил тиньку13а к USBISP программатору но сколько не бился ничего не выходит. То ли программатор сдох то ли руки кривые. Атмел студио пробовал и Ардуино + несколько программ которые фьюзы шьют. Везде полный оп. Какой программатор взять чтоб 100% пошел.

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

Chip_SET, любой программатор для AVR 100% подходит. Вопрос способны ли вы разобраться как с ним работать. Что это кстати, за USBISP??? если это всё таки USBAsp, то погуглите фразу "USBAsp jp3"

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Через  arduino as ISP тоже все шьется.

Если дать себе труд заглянуть в текст программы то мы видим, английским-по-белому написано:

// Configure SPI clock (in Hz).
// E.g. for an attiny @128 kHz: the datasheet states that both the high
// and low spi clock pulse must be > 2 cpu cycles, so take 3 cycles i.e.
// divide target f_cpu by 6:
//     #define SPI_CLOCK            (128000/6)
//
// A clock slow enough for an attiny85 @ 1MHz, is a reasonable default:

#define SPI_CLOCK 		(1000000/6)

С тиньками проблемма обычно в этом.

Chip_SET
Offline
Зарегистрирован: 27.01.2015

wdrakula пишет:

Через  arduino as ISP тоже все шьется.

В данном случае ардуина уно как я понял нужна.

У меня вот такой http://tixer.ru/catalog/programmers/usbisp_color_programmator_avr/

Пару лет валялся. Сейчас снова надо устройство сделать. Про него прочитал что надо его в ASP шить, но собственно чтоб прошить программатор нужен.

dimaris
dimaris аватар
Offline
Зарегистрирован: 27.03.2012

Скачай avrdudeshell matrex-notes.blogspot.ru/2015/01/avrdudeshell-atmega.html

он поддерживает много программаторов, даже микрочиповский picki2. Ну и драйвер проверь..

 

Chip_SET
Offline
Зарегистрирован: 27.01.2015

Нет там его. Буду новый программатор искать, может свой прошью http://we.easyelectronics.ru/xterro/prevraschaem-kitayskiy--programmator-usbisp-v-usbasp.html

dimaris
dimaris аватар
Offline
Зарегистрирован: 27.03.2012

А как этот программатор определяется виндой? То что на нем написано может не соответствовать действительности..

Chip_SET
Offline
Зарегистрирован: 27.01.2015

В 2 строчки:

HID - совместимое устройство

USB - устройство ввода

dimaris
dimaris аватар
Offline
Зарегистрирован: 27.03.2012

Надо драйвер искать, винда его как клаву или мышь беспроводную по умолчанию определила. Должно быть что-то вроде libusb-win32 devices а уже из под него название программатора, нпример USBasp или что нибудь другое..

dimaris
dimaris аватар
Offline
Зарегистрирован: 27.03.2012

Надо драйвер искать, винда его как клаву или мышь беспроводную по умолчанию определила. Должно быть что-то вроде libusb-win32 devices а уже из под него название программатора, нпример USBasp или что нибудь другое..

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

Chip_SET, если вы его перешьёте в USBASP, то уже гарантированно не сможете прошить тини13, т.к. джампера  для низкоскоростного программирования там нет. Для этого программатора должен быть родной софт, пользуйтесь им.

dimaris, это бездрайверный программатор. Так что скорее всего так и должен детектится.

Chip_SET
Offline
Зарегистрирован: 27.01.2015

http://mcustore.ru/store/programmatory/programmator-vnutrisxemnyj-avr-us...

такой заказали, будем смотреть.

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

Chip_SET, лучше купить плату промикро за 200р  и сделать более продвинутый программатор  http://arduino.ru/forum/proekty/delaem-programmator-avrisp-mkii-za-5-minut
 

Chip_SET
Offline
Зарегистрирован: 27.01.2015

В том магазине 500 почти ))) Посмотрим. Спасибо.

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

dimax пишет:

Chip_SET, лучше купить плату промикро за 200р  и сделать более продвинутый программатор  http://arduino.ru/forum/proekty/delaem-programmator-avrisp-mkii-za-5-minut
 

полностью поддерживаю!

Chip_SET
Offline
Зарегистрирован: 27.01.2015

Привезли программатор :)

Теперь с программой разбираться надо. Как тут написано на 17й странице поставил Ардуино 1.6.6 Закинул папку тиньки C:\Users\Asus\Documents\Arduino\attiny13\avr\cores\core13

Вот что на выходе

Внимание: platform.txt из ядра 'Arduino Tiny 13' содержит устаревшие compiler.path={runtime.ide.path}/hardware/tools/avr/bin/, автоматически преобразовано в compiler.path={runtime.tools.avr-gcc.path}/bin/. Ожидайте обновления ядра.
Внимание: platform.txt из ядра 'Arduino Tiny 13' содержит устаревшие tools.avrdude.cmd.path={runtime.ide.path}/hardware/tools/avr/bin/avrdude, автоматически преобразовано в tools.avrdude.cmd.path={path}/bin/avrdude. Ожидайте обновления ядра.
Внимание: platform.txt из ядра 'Arduino Tiny 13' содержит устаревшие tools.avrdude.config.path={runtime.ide.path}/hardware/tools/avr/etc/avrdude.conf, автоматически преобразовано в tools.avrdude.config.path={path}/etc/avrdude.conf. Ожидайте обновления ядра.
Внимание: platform.txt из ядра 'Arduino Tiny 13' содержит устаревшие recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{build.path}/{archive_file}" "{object_file}", автоматически преобразовано в recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{archive_file_path}" "{object_file}". Ожидайте обновления ядра.
Плата tiny13:avr:attiny13at600 не устанавливает свойство 'build.board'. Автоматически выбрано: AVR_ATTINY13AT600
Плата tiny13:avr:attiny13at9m не устанавливает свойство 'build.board'. Автоматически выбрано: AVR_ATTINY13AT9M
Плата tiny13:avr:attiny13at1200 не устанавливает свойство 'build.board'. Автоматически выбрано: AVR_ATTINY13AT1200
Плата tiny13:avr:attiny13at9m_bod не устанавливает свойство 'build.board'. Автоматически выбрано: AVR_ATTINY13AT9M_BOD
Плата tiny13:avr:attiny13at48 не устанавливает свойство 'build.board'. Автоматически выбрано: AVR_ATTINY13AT48
Плата tiny13:avr:attiny13 не устанавливает свойство 'build.board'. Автоматически выбрано: AVR_ATTINY13
WARNING: Category '' in library EEPROM is not valid. Setting to 'Uncategorized'
In file included from C:\Users\Asus\Documents\Arduino\hardware\tiny13\avr\cores\core13\wiring_private.h:31:0,

                 from C:\Users\Asus\Documents\Arduino\hardware\tiny13\avr\cores\core13\wiring.c:10:

c:\users\asus\appdata\local\arduino15\packages\arduino\tools\avr-gcc\4.9.2-atmel3.5.3-arduino2\avr\include\avr\delay.h:36:2: warning: #warning "This file has been moved to <util/delay.h>." [-Wcpp]

 #warning "This file has been moved to <util/delay.h>."

  ^

In file included from C:\Users\Asus\Documents\Arduino\hardware\tiny13\avr\cores\core13\wiring_private.h:31:0,

                 from C:\Users\Asus\Documents\Arduino\hardware\tiny13\avr\cores\core13\wiring_analog.c:9:

c:\users\asus\appdata\local\arduino15\packages\arduino\tools\avr-gcc\4.9.2-atmel3.5.3-arduino2\avr\include\avr\delay.h:36:2: warning: #warning "This file has been moved to <util/delay.h>." [-Wcpp]

 #warning "This file has been moved to <util/delay.h>."

  ^

C:\Users\Asus\Documents\Arduino\hardware\tiny13\avr\cores\core13\wiring_analog.c: In function 'analogRead':

C:\Users\Asus\Documents\Arduino\hardware\tiny13\avr\cores\core13\wiring_analog.c:19:37: warning: suggest parentheses around arithmetic in operand of '|' [-Wparentheses]

  ADMUX = (ADMUX & _BV(REFS0)) | pin & 3; //Setup ADC, preserve REFS0

                                     ^

In file included from C:\Users\Asus\Documents\Arduino\hardware\tiny13\avr\cores\core13\wiring_private.h:31:0,

                 from C:\Users\Asus\Documents\Arduino\hardware\tiny13\avr\cores\core13\wiring_digital.c:9:

c:\users\asus\appdata\local\arduino15\packages\arduino\tools\avr-gcc\4.9.2-atmel3.5.3-arduino2\avr\include\avr\delay.h:36:2: warning: #warning "This file has been moved to <util/delay.h>." [-Wcpp]

 #warning "This file has been moved to <util/delay.h>."

  ^

In file included from C:\Users\Asus\Documents\Arduino\hardware\tiny13\avr\cores\core13\wiring_private.h:31:0,

                 from C:\Users\Asus\Documents\Arduino\hardware\tiny13\avr\cores\core13\wiring_shift.c:9:

c:\users\asus\appdata\local\arduino15\packages\arduino\tools\avr-gcc\4.9.2-atmel3.5.3-arduino2\avr\include\avr\delay.h:36:2: warning: #warning "This file has been moved to <util/delay.h>." [-Wcpp]

 #warning "This file has been moved to <util/delay.h>."

  ^

In file included from C:\Users\Asus\Documents\Arduino\hardware\tiny13\avr\cores\core13\wiring_private.h:31:0,

                 from C:\Users\Asus\Documents\Arduino\hardware\tiny13\avr\cores\core13\events.cpp:9:

c:\users\asus\appdata\local\arduino15\packages\arduino\tools\avr-gcc\4.9.2-atmel3.5.3-arduino2\avr\include\avr\delay.h:36:2: warning: #warning "This file has been moved to <util/delay.h>." [-Wcpp]

 #warning "This file has been moved to <util/delay.h>."

  ^

C:\Users\Asus\Documents\Arduino\hardware\tiny13\avr\cores\core13\events.cpp: In function 'long unsigned int pulseIn(unsigned char, unsigned char, long unsigned int)':

C:\Users\Asus\Documents\Arduino\hardware\tiny13\avr\cores\core13\events.cpp:13:46: warning: 'st' may be used uninitialized in this function [-Wmaybe-uninitialized]

  while(digitalRead(pin) != stat){if(micros() - st > timeout){return 0;}}

                                              ^


Скетч использует 172 байт (16%) памяти устройства. Всего доступно 1 024 байт.
Глобальные переменные используют 4 байт динамической памяти.

 

Roof
Offline
Зарегистрирован: 22.12.2016

T

old
Offline
Зарегистрирован: 17.04.2016

Доброй ночи всем!

Не могу разобраться с проблемой - АЦП не работет. Видно гдето косячу, но никак не могу понять в чем, уже кучу вариантов перепробовал.

#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include "light_ws2812.h"

#define NUM_PIXEL 8
struct cRGB led[NUM_PIXEL];
uint8_t num_pixel = NUM_PIXEL;

int main(void)
{
  byte sT = 8;
  int sR;
  byte i;

  for ( i = 0; i < sT; i++ )
  {
    led[i].r = 0;
    led[i].g = 0;
    led[i].b = 255;
    ws2812_setleds(led, num_pixel);
  }
  delay(1000);
  while (1)
  {
    sR = analogRead(A2);
    if (sR > 90)
    {
      for ( i = 0; i < sT; i++ )
      {
        led[i].r = 0;
        led[i].g = 255;
        led[i].b = 0;
        ws2812_setleds(led, num_pixel);
      }
      delay(10000);
    }
  }
}

Литературу изучаю, но ничего путного пока не смог придумать

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

old

Если АЦП считываете ардуиновской функцией, то лучше так

//sR = analogRead(A2);
sR =analogRead(PB4);

old
Offline
Зарегистрирован: 17.04.2016

Увы, пробовал и этот вариант - не работает

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

old пишет:

Увы, пробовал и этот вариант - не работает

А как проверяли что АЦП не работает?

Я бы для проверки

/*
*подаем на PB4 по очереди VCC и GND
*если работает АЦП
*порт PB0 должен менять состояние
*/
void setup() {
  DDRB |= (1 << 0);     // порт как выход
}
void loop () {
  if (analogRead(PB4) > 512) {
    PORTB |= (1 << 0); //зажигаем порт
  }
  if (analogRead(PB4) < 512) {
    PORTB &= ~(1 << 0); //гасим порт
  }
  delay(500);//просто пауза
}

 

old
Offline
Зарегистрирован: 17.04.2016

Порт PB0 не меняет свое состояние - HIGH (4.97v). проверил на двух Tiny13. Замыкал 3-ю ножку (PB4) на 4-ю GND и на 8-ю Vcc.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

old пишет:

Порт PB0 не меняет свое состояние - HIGH (4.97v). проверил на двух Tiny13. Замыкал 3-ю ножку (PB4) на 4-ю GND и на 8-ю Vcc.

Верю Ардуиновская функция analogRead у вас не работает!

вот код для тини13 на частоте 1,2МГц АЦП должно работать, проверял.

/*
*подаем на PB2 по очереди VCC и GND
*если работает АЦП
*порт PB0 должен менять состояние
*/
int V_akb = 0;
void setup()
{
  DDRB |= (1 << 0);     // порт как выход
  // Настройка АЦП
  ADCSRA |= (1 << ADEN) // Разрешение АЦП
            | (1 << ADSC) // Запуск преобразования
            | (1 << ADATE)
            | (1 << ADIF)
            | (0 << ADIE) // Разрешение прерывания от АЦП
            | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Предделитель на 64
  ADMUX |= (1 << REFS0) | (1 << MUX1) | (0 << MUX0); // Внутренний ИОН 1.1V , вход ADC1/PB2
}
void loop()
{
  //Меряем напряжение
  for (byte i = 0; i < 10; i++) {
    while ((ADCSRA & 0x10) == 0);
    ADCSRA |= 0x10;
    V_akb = ADCW;
  }
  if (V_akb > 512) {
    PORTB |= (1 << PB0);//зажигаем порт
  }
  if (V_akb < 512) {
    PORTB &= ~(1 << PB0);//гасим порт
  }
  delay(500);//просто пауза
}

 

 

old
Offline
Зарегистрирован: 17.04.2016

Огромное спасибо, прогресс уже есть! Заработало, только почему то не на PB2, а на PB4. Сейчас пытаюсь разобраться в вашем коде, тобы понять почему и как, а также как его прикрутить к моей задаче.

По поводу частоты - у меня вот такие настройки стоят

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

old пишет:

Огромное спасибо, прогресс уже есть! Заработало...

Ок будут сложности пишите.

Там я настройки АЦП расписал должно быть понятно.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

old

Еще на первой страничке этой темы посмотрите, там есть пример с АЦП

 

old
Offline
Зарегистрирован: 17.04.2016

Первая сложность - в вашем коде указан порт PB2 (7-я ножка).  Но у меня при таком варианте состояние порта PB0 не меняется. если же не меняю прошивку, а просто замыкаю PB4 (3-я ножка) на землю или на питание, то состояние PB0 нормально меняется. в чем проблема? у меня проблемы с распиновкой или в коде всетаки указан PB4 вместо РB27?

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

old пишет:

Первая сложность - в вашем коде указан порт PB2 (7-я ножка).  Но у меня при таком варианте состояние порта PB0 не меняется. если же не меняю прошивку, а просто замыкаю PB4 (3-я ножка) на землю или на питание, то состояние PB0 нормально меняется. в чем проблема? у меня проблемы с распиновкой или в коде всетаки указан PB4 вместо РB27?

глянул в даташит, Да PB4.

Вот табличка по регистрам
MUX1..0        
---00------ADC0 (PB5)
---01------ADC1 (PB2)
---10------ADC2 (PB4)
---11------ADC3 (PB3)

kirex
Offline
Зарегистрирован: 17.01.2017

Добрый день народ. 

В начале темы автор пытался сделать генератор импульсов на частоте 22-60 кГц, но что-то конечного результата я так и не нашёл. 

Может кто подскажет как это сделать. Нужно чтобы частота была 15-55 кГц. 

К сожалению в програмировании не силён, так сказать только начал осваивать. 

Заранее спасибо.

kirex
Offline
Зарегистрирован: 17.01.2017
#define F_CPU 9600000UL  // 9.6 MHz
#include <util/delay.h>

int main( void )
{
  DDRB = 1;

  while(1)
  {
    for(byte f = 22; f < 8; f--) // 8 микросекунд это и будет частота в ~ 60 кГц, а 22 - 22 кГц
    { 
      long time = 1000000/2/f;
      for(long t = 0; t < time; t++) 
      {
        PORTB = 1;
        _delay_us(f);
        PORTB = 0;
        _delay_us(f); 
      }
    }
    _delay_ms(120000);
  }
  return 0;
}

Пробовал этот код, но что-то ничего не происходит.

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

kirex пишет:

В начале темы автор пытался сделать генератор импульсов на частоте 22-60 кГц, но что-то конечного результата я так и не нашёл. 

Плохо искал стало быть.

kirex
Offline
Зарегистрирован: 17.01.2017

dimax пишет:

kirex пишет:

В начале темы автор пытался сделать генератор импульсов на частоте 22-60 кГц, но что-то конечного результата я так и не нашёл. 

Плохо искал стало быть.

Попробовал, но что-то не идёт. 

Нужно сделать генератор импульсов на частоте 15-55 кГц (тоесть нарастающая, с шагом в 1 кГц за секунду) потом нужно замолкнуть на 1 минуту и цикл повторяется.

kirex
Offline
Зарегистрирован: 17.01.2017

Также пробовал с другими кодами:

с этим 

#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 1200000UL  // указываем частоту в герцах 
 //вкл-выкл порта В
 #define on PORTB |= _BV(PB0)
 #define off PORTB &= ~_BV(PB0)
 
 #define on1 PORTB |= _BV(PB1)
 #define off1 PORTB &= ~_BV(PB1)
 
 
int main()
{
 int i,j;
 DDRB = 0xff;  // все выводы порта B сконфигурировать как выходы  
 //2900
 for (j=1;j<10;j++)
 {
  for (i=1;i<100;i++)
  {
   on;
   off1;
   _delay_us(200);
   off;
   _delay_us(200);
  }
 }
 
 for (j=1;j<10;j++)
 {
  for (i=1;i<100;i++)
  {
   on;
   off1;
   _delay_us(200);
   off;
   on1;
   _delay_us(200);
  }
 }
 
 /*_delay_ms(200);
 
 //4800
 for (j=1;j<10;j++)
 {
  for (i=1;i<230;i++)
  {
   on;
   _delay_us(120);
   off;
   _delay_us(120);
  }
 }
 _delay_ms(200);
 
 //10000 Гц
 for (j=1;j<10;j++)
 {
  for (i=1;i<300;i++)
  {
   on;
   _delay_us(60);
   off;
   _delay_us(60);
  }
 }
 _delay_ms(200);
 
 //20000
 for (j=1;j<10;j++)
 {
  for (i=1;i<300;i++)
  {
   on;
   _delay_us(30);
   off;
   _delay_us(30);
  }
 }
 
 */
while (1)

{
 //22.2 кГц
 for (j=1;j<10;j++)
 {
  for (i=1;i<4500;i++)
  {
   on;
   _delay_us(23);
   off;
   _delay_us(23);
  }
 }
 
 //23 кГц
 for (j=1;j<10;j++)
 {
  for (i=1;i<4600;i++)
  {
   on;
   _delay_us(22);
   off;
   _delay_us(22);
  }
 }

 //24 кГц
 for (j=1;j<10;j++)
 {
  for (i=1;i<1200;i++)
  {
   on;
   _delay_us(21);
   off;
   _delay_us(21);
  }
 }
 
 //25 кГц
 for (j=1;j<10;j++)
 {
  for (i=1;i<1250;i++)
  {
   on;
   _delay_us(20);
   off;
   _delay_us(20);
  }
 }
 
 //26 кГц
 for (j=1;j<10;j++)
 {
  for (i=1;i<1290;i++)
  {
   on;
   _delay_us(19);
   off;
   _delay_us(19);
  }
 }
  
 //27.3 кГц
 for (j=1;j<10;j++)
 {
  for (i=1;i<1375;i++)
  {
   on;
   _delay_us(18);
   off;
   _delay_us(18);
  }
 }
 
}

}

и с этим

#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 9600000UL  // указываем частоту в герцах
//вкл-выкл порта В
#define on PORTB |= _BV(PB0)
#define off PORTB &= ~_BV(PB0)



int main()
{
	 int  i;
	DDRB = 0xff;		// все выводы порта B сконфигурировать как выходы
	
	//тест
	for (i=1;i<400;i++)
	{
		on;
		_delay_us(1500);
		off;
		_delay_us(1500);
	}

	while (1)

	{
		//
		for (i=1;i<24000;i++)
		{
			on;
			_delay_us(196);
			off;
			_delay_us(196);
		}
		
		//23940
		for (i=1;i<24000;i++)
		{
			on;
			_delay_us(195);
			off;
			_delay_us(195);
		}
		
		//
		for (i=1;i<24000;i++)
		{
			on;
			_delay_us(194);
			off;
			_delay_us(194);
		}
		
		//
		for (i=1;i<24000;i++)
		{
			on;
			_delay_us(193);
			off;
			_delay_us(193);
		}
		
		//24303
		for (i=1;i<24000;i++)
		{
			on;
			_delay_us(192);
			off;
			_delay_us(192);
		}
		
		//24421
		for (i=1;i<24000;i++)
		{
			on;
			_delay_us(191);
			off;
			_delay_us(191);
		}
		
		//24546
		for (i=1;i<24000;i++)
		{
			on;
			_delay_us(190);
			off;
			_delay_us(190);
		}
		
		//
		for (i=1;i<24000;i++)
		{
			on;
			_delay_us(189);
			off;
			_delay_us(189);
		}

	}
}

Тоже ничего не получается. 

Уже мозги кипят.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

kirex пишет:

Попробовал, но что-то не идёт. 

Нужно сделать генератор импульсов на частоте 15-55 кГц (тоесть нарастающая, с шагом в 1 кГц за секунду) потом нужно замолкнуть на 1 минуту и цикл повторяется.

Аппаратно не получится, у тини13 всего один таймер и дергать ногой можно только с заданным в даташите шагом.

Программно можно, но нужно подобрать задержки и частота будет сильно плавать.

kirex
Offline
Зарегистрирован: 17.01.2017

А если так?

Изменение частоты необязательно с шагом в 1 кГц за секунду, главное плавно с 15 до 55 кГц в течении примерно 30-40сек., потом нужно замолкнуть на 1 минуту и цикл повторяется.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

kirex

Напишите на почту, возможно смогу помочь.(без денег)

srukamiua@gmail.com

lex
Offline
Зарегистрирован: 13.01.2017

Подскажите, вот такой програматор подойдёт для прошивки всех функций без arduino? И что кроме этого програматора и тиньки ещё нужно будет в плане софта именно для прошивки.

Ещё ссылку кинте где можно панельку под SOIC корпус(ATTINY13A-SSU) заказать, желательно с али, у меня что-то не получается найти.

____ps____
две недели с начала изучения arduino :)

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

lex пишет:

Подскажите, вот такой програматор подойдёт для прошивки всех функций без arduino? И что кроме этого програматора и тиньки ещё нужно будет в плане софта именно для прошивки.

Ещё ссылку кинте где можно панельку под SOIC корпус(ATTINY13A-SSU) заказать, желательно с али, у меня что-то не получается найти.

____ps____
две недели с начала изучения arduino :)

Подойдет как и более дешевые варианты.

Такой?

Можно и без него прошивать, прямо на плате отводы делаете или подпаиваетесь к ножкам.

Для заливки hex фалов самое простое SinaProg и AVRdude

lex
Offline
Зарегистрирован: 13.01.2017

bodriy2014, спасибо!
мне этот программатор по виду очень понравился :)

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

lex, вы что по внешнему виду программатор выбираете? То что по вашей ссылке -вообще не с чем не совместимое говно.

lex
Offline
Зарегистрирован: 13.01.2017

dimax пишет:

lex, вы что по внешнему виду программатор выбираете? То что по вашей ссылке -вообще не с чем не совместимое говно.

Ну во первых я пока дуб в этом, поэтому и спросил для начала. И уже заказал :)
С виду то, что мне предложили, только ещё с корпусом.
Я им что вообще не смогу  ATtiny13A прошить?

Что посоветуете тогда?

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

lex, это HID-программатор , у него нет дров и он ни с чем не совместим, для него есть какой-то свой китайский софт. Прошить тини13 можно, если найдёте этот софт и понимаете китайский :). Её (тини13) вообще можно чем угодно прошить, любой ардуиной. Вопрос лишь в потенциальных трудностях, которые для новичка могут быть совершенно непреодолимыми.

nik182
Offline
Зарегистрирован: 04.05.2015

На счёт совместимости это да, проблемы. Но программа хоть и китайская но работает исправно. Шьёт быстро. С фьюзами легко работать. Сама перезагружает данные, eсли hex изменился. Рекомендовать не могу из за совместимости, но если попалась в руки - ничего страшного.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

lex, Вам нужен USBasp. Причём желательно без корпуса, открытой платкой (типа такого или такого). Потому что на плате есть специальные джамперы. Один из них (JP3) часто нужен для понижения частоты прошивки. Уверен на 99%, что без него Вы новый микроконтроллер не прошьёте.

lex
Offline
Зарегистрирован: 13.01.2017

Jeka_M, Заказал, в этот раз надеюсь то что надо. Тепер у меня будет 2 програматора :)

 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

kirex пишет:

А если так?

Изменение частоты необязательно с шагом в 1 кГц за секунду, главное плавно с 15 до 55 кГц в течении примерно 30-40сек., потом нужно замолкнуть на 1 минуту и цикл повторяется.

Это ТЗ переросло в готовое устройство.

Вот видео.

Вот код .

/*
* http://srukami.inf.ua/tiny13_otpug.html
* МК Attiny13 фьюзы LF=7A  HF=FF
*отпугиватель крыс, ргызунов и др...
*В начале цикла мигаем диодом на PB1
*затем на PB0 генерируется сигнал с частотой от 15КГц до 55КГц плавно в течении 40сек
*затем пауза 60сек и поновой
*/
int main(void) {
  DDRB |= (1 << 0); // устанавливаем 0 вывод порта B (PB0) как выход
  DDRB |= (1 << 1); // устанавливаем 0 вывод порта B (PB1) как выход
  while (1) {
    PORTB |= (1 << 1);//начале цикла мигаем диодом на PB1
    delay(1000);
    PORTB &= ~(1 << 1);
    for (byte t = 40; t > 10; t--) {//Рабочий цикл от 15 до 55КГц за 40 сек
      for (unsigned int n = 0; n < 30000; n++) {
        PORTB |= (1 << 0);
        delayMicroseconds(t);
        PORTB &= ~(1 << 0);
        delayMicroseconds(t);
      }
    }
    for (byte t = 0; t < 60; t++) { //задержка на одну минуту
      delay(1000);
    }
  }
}

 

 

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

bodriy2014,  плавненько?.. скачет рывками, и  нелинейно. Хотя наверное зверю это неважно) Но лучше всё таки через DDS