Подскажите новичку что сделал не так при прошивке Тиньки13

Тема: “Переделка Air Wick”. Сайт от куда была взята эта прошивка уже не работает, вся надежда на Вас.
’’’/****************************************************
timer pshik

made slav0n

Chip type : ATtiny13
9.6 MHz / 8 = 1.2
фузы заводские
;Hfuse FF
;Lfuse 6A
****************************************************/

#include <avr/io.h>
#include <avr/eeprom.h>
#include <avr/wdt.h>
#include <util/delay.h>

#include “m8_128.h”

#define LED_pl PB1
#define LED_mn PB0
#define GATE PB2
#define BUTTON_PSHIK PB4

#define adr_set_hrs 1
#define adr_binary adr_set_hrs + 1
#define adr_unary adr_binary + 1

//============================================================

int attribute((naked)) main(void)
{
WDTCR = (1<<WDE)| //выпускаем сторожевую собаку
// (0<<WDP3)|(0<<WDP2)|(0<<WDP1)|(1<<WDP0); //32mc
// (0<<WDP3)|(0<<WDP2)|(1<<WDP1)|(0<<WDP0); //64mc
// (0<<WDP3)|(0<<WDP2)|(1<<WDP1)|(1<<WDP0); //0.125c
// (0<<WDP3)|(1<<WDP2)|(0<<WDP1)|(1<<WDP0); //0.5c
// (0<<WDP3)|(1<<WDP2)|(1<<WDP1)|(0<<WDP0); //1c
// (0<<WDP3)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0); //2c
(1<<WDP3)|(0<<WDP2)|(0<<WDP1)|(0<<WDP0); //4c
// (1<<WDP3)|(0<<WDP2)|(0<<WDP1)|(1<<WDP0); //8c

PORTB |= (1<<LED_pl)|(1<<BUTTON_PSHIK);

_delay_us(100);
while(bit_is_clear(PINB,LED_mn))
{
wdt_reset();

u8 set_hrs = eeprom_read_byte(adr_set_hrs) +1;
if(set_hrs >= 5)set_hrs =0;

u8 i = set_hrs;
do{
  DDRB |= (1<<LED_pl);  //зажигаем светодиод от кнопки
  _delay_ms(200);
  wdt_reset();
  DDRB &=~(1<<LED_pl);  //тушим светодиод
  _delay_ms(200);
  wdt_reset();
}while(i--);


_delay_ms(400);
wdt_reset();
_delay_ms(400);
wdt_reset();

// eeprom_update_byte(adr_set_hrs, set_hrs);
eeprom_write_byte(adr_set_hrs, set_hrs);
eeprom_write_byte(adr_binary, 0); // сбрасываем бинарный счетчик
}

if(bit_is_clear(PINB, BUTTON_PSHIK))goto M_PSHIK; //пшикаем и сбрасываем таймер

DDRB |= (1<<LED_pl)|(1<<LED_mn); //зажигаем светодиод
_delay_ms(10);

u8 p_ctr[4];
u8 p_old[4];

eeprom_read_block(p_ctr, adr_unary, 4); // читаем унарный счетчик
memcpy(p_old, p_ctr, 4);

// u8 *ctr_unary = p_ctr;
u32 *ctr_unary = p_ctr;
*ctr_unary <<= 1; //инкремент унарный счетчик
if(*ctr_unary == 0)
{
*ctr_unary = 0xffffffff;
// *ctr_unary = 0xff;

/**/
u8 ct_binary = eeprom_read_byte(adr_binary); // читаем бинарный счетчик
ct_binary++;

//здесь можем сравнить бинарный счетчик с чем-либо
u8 set_hrs = eeprom_read_byte(adr_set_hrs);
if(set_hrs >= 5)set_hrs =0;

if(ct_binary == (set_hrs+1) * 24)

// if(ct_binary == (set_hrs+1))
{

M_PSHIK:  
  
  ct_binary =0; // сбрасываем бинарный счетчик
  
  DDRB  |= (1<<GATE);
  PORTB |= (1<<GATE);
  wdt_reset();
  _delay_ms(500);
  wdt_reset();
  _delay_ms(500);
  wdt_reset();
  PORTB &=~(1<<GATE);
  DDRB  &=~(1<<GATE);
}

eeprom_write_byte(adr_binary, ct_binary);

}

/* */
//------- пишем 4 байта унарного счетчика в EEPROM ----------------------
for(u8 i=0;i<4;i++)
{
if(p_old[i] != p_ctr[i])//пишем только если байт измнился
{
while(EECR & (1<<EEPE));// Wait for completion of previous write

  // Set Programming mode
          //  EECR = (0<<EEPM1)|(0>>EEPM0); //Erase-Write
  if(p_ctr[i] == 0xff)EECR = (0<<EEPM1)|(1>>EEPM0); //Erase Only   
  else        EECR = (1<<EEPM1)|(0>>EEPM0); //Write Only
  
  EEARL = adr_unary + i;  //ucAddress;  
  EEDR = p_ctr[i];    //ucData;
  
  EECR |= (1<<EEMPE);// Write logical one to EEMWE  
  EECR |= (1<<EEPE);  // Start eeprom write by setting EEWE
}

}
//-------------------------------------------------------------------------

DDRB &=~((1<<LED_pl)|(1<<LED_mn)); //тушим светодиод
PORTB &=~((1<<LED_pl)|(1<<LED_mn));

MCUCR |= (1<<SE)|(1<<SM1)|(0<<SM0); //power down

asm(“sleep”);
}’’’

А это сообщение об ошибке:

Arduino: 1.8.5 (Windows 7), Плата:“ATtiny13 (ATtiny13a), 1.2 MHz”

C:\Program Files\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files\Arduino\hardware -hardware C:\Users\Александр\Documents\Arduino\hardware -tools C:\Program Files\Arduino\tools-builder -tools C:\Program Files\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files\Arduino\libraries -libraries C:\Users\Александр\Documents\Arduino\libraries -fqbn=attiny13:avr:attiny13:freq=f1200000 -ide-version=10805 -build-path C:\Users\8523~1\AppData\Local\Temp\arduino_build_262809 -warnings=none -build-cache C:\Users\8523~1\AppData\Local\Temp\arduino_cache_424531 -prefs=build.warn_data_percentage=75 -verbose C:\Users\Александр\Documents\Arduino\Pshik\Pshik.ino
C:\Program Files\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files\Arduino\hardware -hardware C:\Users\Александр\Documents\Arduino\hardware -tools C:\Program Files\Arduino\tools-builder -tools C:\Program Files\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files\Arduino\libraries -libraries C:\Users\Александр\Documents\Arduino\libraries -fqbn=attiny13:avr:attiny13:freq=f1200000 -ide-version=10805 -build-path C:\Users\8523~1\AppData\Local\Temp\arduino_build_262809 -warnings=none -build-cache C:\Users\8523~1\AppData\Local\Temp\arduino_cache_424531 -prefs=build.warn_data_percentage=75 -verbose C:\Users\Александр\Documents\Arduino\Pshik\Pshik.ino
Using board ‘attiny13’ from platform in folder: C:\Program Files\Arduino\hardware\attiny13\avr
Using core ‘core13’ from platform in folder: C:\Program Files\Arduino\hardware\attiny13\avr
Detecting libraries used…
“C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++” -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -w -x c++ -E -CC -mmcu=attiny13 -DF_CPU=1200000L -DARDUINO=10805 -DARDUINO_AVR_ATTINY13 -DARDUINO_ARCH_AVR “-IC:\Program Files\Arduino\hardware\attiny13\avr\cores\core13” “C:\Users\8523~1\AppData\Local\Temp\arduino_build_262809\sketch\Pshik.ino.cpp” -o “nul”
“C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++” -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -w -x c++ -E -CC -mmcu=attiny13 -DF_CPU=1200000L -DARDUINO=10805 -DARDUINO_AVR_ATTINY13 -DARDUINO_ARCH_AVR “-IC:\Program Files\Arduino\hardware\attiny13\avr\cores\core13” “C:\Users\8523~1\AppData\Local\Temp\arduino_build_262809\sketch\Pshik.ino.cpp” -o “C:\Users\8523~1\AppData\Local\Temp\arduino_build_262809\preproc\ctags_target_for_gcc_minus_e.cpp”
C:\Users\Александр\Documents\Arduino\Pshik\Pshik.ino:20:21: fatal error: m8_128.h: No such file or directory

compilation terminated.

exit status 1
Ошибка компиляции для платы ATtiny13 (ATtiny13a).

Пожалуйста помогите.

Вы не так вставили код в сообщение.

эту библиотеку требует щажже…хотя непонятно это библиотека определений для ATmega8, ATmega16, ATmega32, ATmega64, ATmega128…подходит ли она для тиньки 13

ТС, вверху не радужное поздравление висит, и уж тем более не новогоднее - а как правильно вставить код. Этот квест не пройдёте - никто не будет помогать.))

А чего программа то делает?
Может проще новую написать?

пшикает жеж, ароматизатор воздуха однако

Имя пользователя русскими буквами

Извиняюсь за невнимательность.
‛‛‛ /****************************************************
timer pshik

made slav0n

Chip type : ATtiny13
9.6 MHz / 8 = 1.2
фузы заводские
;Hfuse FF
;Lfuse 6A
****************************************************/

#include <avr/io.h>
#include <avr/eeprom.h>
#include <avr/wdt.h>
#include <util/delay.h>

#include “m8_128.h”

#define LED_pl PB1
#define LED_mn PB0
#define GATE PB2
#define BUTTON_PSHIK PB4

#define adr_set_hrs 1
#define adr_binary adr_set_hrs + 1
#define adr_unary adr_binary + 1

//============================================================

int attribute((naked)) main(void)
{
WDTCR = (1<<WDE)| //выпускаем сторожевую собаку
// (0<<WDP3)|(0<<WDP2)|(0<<WDP1)|(1<<WDP0); //32mc
// (0<<WDP3)|(0<<WDP2)|(1<<WDP1)|(0<<WDP0); //64mc
// (0<<WDP3)|(0<<WDP2)|(1<<WDP1)|(1<<WDP0); //0.125c
// (0<<WDP3)|(1<<WDP2)|(0<<WDP1)|(1<<WDP0); //0.5c
// (0<<WDP3)|(1<<WDP2)|(1<<WDP1)|(0<<WDP0); //1c
// (0<<WDP3)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0); //2c
(1<<WDP3)|(0<<WDP2)|(0<<WDP1)|(0<<WDP0); //4c
// (1<<WDP3)|(0<<WDP2)|(0<<WDP1)|(1<<WDP0); //8c

PORTB |= (1<<LED_pl)|(1<<BUTTON_PSHIK);

_delay_us(100);
while(bit_is_clear(PINB,LED_mn))
{
wdt_reset();

u8 set_hrs = eeprom_read_byte(adr_set_hrs) +1;
if(set_hrs >= 5)set_hrs =0;

u8 i = set_hrs;
do{
  DDRB |= (1<<LED_pl);  //зажигаем светодиод от кнопки
  _delay_ms(200);
  wdt_reset();
  DDRB &=~(1<<LED_pl);  //тушим светодиод
  _delay_ms(200);
  wdt_reset();
}while(i--);


_delay_ms(400);
wdt_reset();
_delay_ms(400);
wdt_reset();

// eeprom_update_byte(adr_set_hrs, set_hrs);
eeprom_write_byte(adr_set_hrs, set_hrs);
eeprom_write_byte(adr_binary, 0); // сбрасываем бинарный счетчик
}

if(bit_is_clear(PINB, BUTTON_PSHIK))goto M_PSHIK; //пшикаем и сбрасываем таймер

DDRB |= (1<<LED_pl)|(1<<LED_mn); //зажигаем светодиод
_delay_ms(10);

u8 p_ctr[4];
u8 p_old[4];

eeprom_read_block(p_ctr, adr_unary, 4); // читаем унарный счетчик
memcpy(p_old, p_ctr, 4);

// u8 *ctr_unary = p_ctr;
u32 *ctr_unary = p_ctr;
*ctr_unary <<= 1; //инкремент унарный счетчик
if(*ctr_unary == 0)
{
*ctr_unary = 0xffffffff;
// *ctr_unary = 0xff;

/**/
u8 ct_binary = eeprom_read_byte(adr_binary); // читаем бинарный счетчик
ct_binary++;

//здесь можем сравнить бинарный счетчик с чем-либо
u8 set_hrs = eeprom_read_byte(adr_set_hrs);
if(set_hrs >= 5)set_hrs =0;

if(ct_binary == (set_hrs+1) * 24)

// if(ct_binary == (set_hrs+1))
{

M_PSHIK:  
  
  ct_binary =0; // сбрасываем бинарный счетчик
  
  DDRB  |= (1<<GATE);
  PORTB |= (1<<GATE);
  wdt_reset();
  _delay_ms(500);
  wdt_reset();
  _delay_ms(500);
  wdt_reset();
  PORTB &=~(1<<GATE);
  DDRB  &=~(1<<GATE);
}

eeprom_write_byte(adr_binary, ct_binary);

}

/* */
//------- пишем 4 байта унарного счетчика в EEPROM ----------------------
for(u8 i=0;i<4;i++)
{
if(p_old[i] != p_ctr[i])//пишем только если байт измнился
{
while(EECR & (1<<EEPE));// Wait for completion of previous write

// Set Programming mode
          //  EECR = (0<<EEPM1)|(0>>EEPM0); //Erase-Write
  if(p_ctr[i] == 0xff)EECR = (0<<EEPM1)|(1>>EEPM0); //Erase Only   
  else        EECR = (1<<EEPM1)|(0>>EEPM0); //Write Only
  
  EEARL = adr_unary + i;  //ucAddress;  
  EEDR = p_ctr[i];    //ucData;
  
  EECR |= (1<<EEMPE);// Write logical one to EEMWE  
  EECR |= (1<<EEPE);  // Start eeprom write by setting EEWE
}

}
//-------------------------------------------------------------------------

DDRB &=~((1<<LED_pl)|(1<<LED_mn)); //тушим светодиод
PORTB &=~((1<<LED_pl)|(1<<LED_mn));

MCUCR |= (1<<SE)|(1<<SM1)|(0<<SM0); //power down

asm(“sleep”);
}‛‛‛
Эта программа делает бОльшие интервалы в работе пшикалки, чтобы в малом помещении не было как в газовой камере.
Александр.

Вы опять не так вставили код в сообщение.

Попробуйте в третий раз - за Святаго Духа.

1 лайк

Третья попытка:

timer pshik

made slav0n

Chip type : ATtiny13
9.6 MHz / 8 = 1.2
фузы заводские
;Hfuse FF
;Lfuse 6A
****************************************************/

#include <avr/io.h>
#include <avr/eeprom.h>
#include <avr/wdt.h>
#include <util/delay.h>

#include “m8_128.h”

#define LED_pl PB1
#define LED_mn PB0
#define GATE PB2
#define BUTTON_PSHIK PB4

#define adr_set_hrs 1
#define adr_binary adr_set_hrs + 1
#define adr_unary adr_binary + 1

//============================================================

int attribute((naked)) main(void)
{
WDTCR = (1<<WDE)| //выпускаем сторожевую собаку
// (0<<WDP3)|(0<<WDP2)|(0<<WDP1)|(1<<WDP0); //32mc
// (0<<WDP3)|(0<<WDP2)|(1<<WDP1)|(0<<WDP0); //64mc
// (0<<WDP3)|(0<<WDP2)|(1<<WDP1)|(1<<WDP0); //0.125c
// (0<<WDP3)|(1<<WDP2)|(0<<WDP1)|(1<<WDP0); //0.5c
// (0<<WDP3)|(1<<WDP2)|(1<<WDP1)|(0<<WDP0); //1c
// (0<<WDP3)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0); //2c
(1<<WDP3)|(0<<WDP2)|(0<<WDP1)|(0<<WDP0); //4c
// (1<<WDP3)|(0<<WDP2)|(0<<WDP1)|(1<<WDP0); //8c

PORTB |= (1<<LED_pl)|(1<<BUTTON_PSHIK);

_delay_us(100);
while(bit_is_clear(PINB,LED_mn))
{
wdt_reset();

u8 set_hrs = eeprom_read_byte(adr_set_hrs) +1;
if(set_hrs >= 5)set_hrs =0;

u8 i = set_hrs;
do{
  DDRB |= (1<<LED_pl);  //зажигаем светодиод от кнопки
  _delay_ms(200);
  wdt_reset();
  DDRB &=~(1<<LED_pl);  //тушим светодиод
  _delay_ms(200);
  wdt_reset();
}while(i--);


_delay_ms(400);
wdt_reset();
_delay_ms(400);
wdt_reset();
// eeprom_update_byte(adr_set_hrs, set_hrs);
eeprom_write_byte(adr_set_hrs, set_hrs);
eeprom_write_byte(adr_binary, 0); // сбрасываем бинарный счетчик
}

if(bit_is_clear(PINB, BUTTON_PSHIK))goto M_PSHIK; //пшикаем и сбрасываем таймер

DDRB |= (1<<LED_pl)|(1<<LED_mn); //зажигаем светодиод
_delay_ms(10);

u8 p_ctr[4];
u8 p_old[4];

eeprom_read_block(p_ctr, adr_unary, 4); // читаем унарный счетчик
memcpy(p_old, p_ctr, 4);

// u8 *ctr_unary = p_ctr;
u32 *ctr_unary = p_ctr;
*ctr_unary <<= 1; //инкремент унарный счетчик
if(*ctr_unary == 0)
{
*ctr_unary = 0xffffffff;
// *ctr_unary = 0xff;

/**/
u8 ct_binary = eeprom_read_byte(adr_binary); // читаем бинарный счетчик
ct_binary++;

//здесь можем сравнить бинарный счетчик с чем-либо
u8 set_hrs = eeprom_read_byte(adr_set_hrs);
if(set_hrs >= 5)set_hrs =0;

if(ct_binary == (set_hrs+1) * 24)
// if(ct_binary == (set_hrs+1))
{

M_PSHIK:  
  
  ct_binary =0; // сбрасываем бинарный счетчик
  
  DDRB  |= (1<<GATE);
  PORTB |= (1<<GATE);
  wdt_reset();
  _delay_ms(500);
  wdt_reset();
  _delay_ms(500);
  wdt_reset();
  PORTB &=~(1<<GATE);
  DDRB  &=~(1<<GATE);
}

eeprom_write_byte(adr_binary, ct_binary);
}

/* */
//------- пишем 4 байта унарного счетчика в EEPROM ----------------------
for(u8 i=0;i<4;i++)
{
if(p_old[i] != p_ctr[i])//пишем только если байт измнился
{
while(EECR & (1<<EEPE));// Wait for completion of previous write

// Set Programming mode
          //  EECR = (0<<EEPM1)|(0>>EEPM0); //Erase-Write
  if(p_ctr[i] == 0xff)EECR = (0<<EEPM1)|(1>>EEPM0); //Erase Only   
  else        EECR = (1<<EEPM1)|(0>>EEPM0); //Write Only
  
  EEARL = adr_unary + i;  //ucAddress;  
  EEDR = p_ctr[i];    //ucData;
  
  EECR |= (1<<EEMPE);// Write logical one to EEMWE  
  EECR |= (1<<EEPE);  // Start eeprom write by setting EEWE
}
}
//-------------------------------------------------------------------------

DDRB &=~((1<<LED_pl)|(1<<LED_mn)); //тушим светодиод
PORTB &=~((1<<LED_pl)|(1<<LED_mn));

MCUCR |= (1<<SE)|(1<<SM1)|(0<<SM0); //power down

asm(“sleep”);
}

Вставить код тебе удалось. Теперь напиши, что ты от форума хочешь?
Про ошибку компиляции тебе сразу написали. “m8-128.h” у тебя отсутствует и (важно) - искать тебе его не надо, потому. что он “не от той стены гвоздь”.
Ждем следующего вопроса.

1 лайк

Ужос! Ты хоть понимаешь что к чему?
eeprom_read_byte и пр. - зачем это!!!

Вот этот сайт от куда был взят этот код:

Ребят, если бы я в этом разбирался, то к вам бы не обращался. Я подозреваю, что этот код написан не для ардуино, но может кто поможет его исправить, чтобы пшикалка срабатывала через 2, 4, 6, 8 часов.

Раздел “Ищу исполнителя”. Даже не обязательно денег попросят, но хоть 1000р стоит исполнителю перечислить в любом случае, просто из вежливости.

А вы уверены, что этот код вообще для этого? я вижу в нем кучу совершенно ненужных пшикалке строк

Да я помню этого slav0n
но как я помню это программа написана не на ардуино а на С и работало только на Atmel Studio 6.1 версии, а на новых версиях прошивал но не работал.

А не испить ли нам кофейку? Cказал граф.
И тут он её поимел… А за окном стучали кузнецы…
Навеяло.

3 лайка

Красиво ворвался.

а где про дохлую лошадь?