код ардуино не работает на attiny

axill
Offline
Зарегистрирован: 05.09.2011

В отсутствии оптопар на входе в  данной схеме ничего плохого нет. Но есть другая проблема. Электросеть автомобиля изобилует помехами самого разного рода. У вас от них защиты нет. Паралельно входу микросхемы нужно поставить стабилитрон или tvs на 5.1в. Так же там паралельно стоит подключить керамический конденсатор на 10-100нФ

Конденсатор C6 надо заменить на керамический на 0.1мкф. По даташиту именно такой надо ставить на питание максимально близко к ногам МК (место установки С6 как раз подходит). На входе перед 7805 нужно поставить или LC или RC фильтр. Конденсатор в таком фильтре на несколько мкФ (например 10мкф что сейчас на С6). Индуктивность 50-100мкГн, если RC, то резистор 100ом. 

blink977
Offline
Зарегистрирован: 20.01.2012

спасибо всем, есть над чем поработать. я уехал в отпуск на неделю, как приеду начну эксперементировать, сразу отпишусь.

blink_977
Offline
Зарегистрирован: 10.08.2013

sp34 пишет:

#include <avr/wdt.h> // - библиотека WDT (сторожевого таймера)
#include <util/delay.h>

// - pin ATtiny
byte startbutton = 0;
byte ignition_pin = 1;
byte starter_pin = 2;
byte brake_pin = 3;
byte alt_pin = 4;

boolean button_state = 0;

void setup(){
  wdt_disable(); // запретили как можно скорее WDT, что-бы не уйти в бесконечный ребут
  
  pinMode(startbutton, INPUT);
  digitalWrite(startbutton, HIGH);// - включаем внутренний pull-up резистор
  pinMode(ignition_pin, OUTPUT);
  pinMode(starter_pin, OUTPUT);
  pinMode(brake_pin, INPUT);
  pinMode(alt_pin, INPUT);
  
  wdt_enable(WDTO_2S); // активировали сторожевой таймер, каждые 2-е секунды его нужно сбрасывать !
}

void ignition(){
  if(digitalRead(startbutton)==LOW && button_state==0){
    digitalWrite(ignition_pin,!digitalRead(ignition_pin));
    button_state=1;
  }
  if(digitalRead(startbutton)==HIGH && button_state==1) button_state=0;
}

void start(){
  if(digitalRead(startbutton)==LOW && button_state==0)
  {
    digitalWrite(ignition_pin,!digitalRead(ignition_pin));
    button_state=1;
    _delay_ms(500);
    digitalWrite(starter_pin, HIGH);
  }
  if(digitalRead(startbutton)==HIGH && button_state==1) button_state=0;
}


void loop(){
  wdt_reset(); // говорим WDT что "все ОК", начинается очередной отсчет 2-х секунд.
  
  if(digitalRead(brake_pin)==LOW) ignition();
  else start();
  
  if(digitalRead(alt_pin)==HIGH) digitalWrite(starter_pin, LOW);
}

скетч уже без резисторов R2,R3 и в ключах поставить другие номиналы , а  R10 , R11 - замените на 2.7 - 3 кОм( на заведенной авто до 16 вольт напряжение может доходить)

 

снял резисторы R2 R3, притянул ногу контроллера прямо к кнопке старта, залил скетч и ничего, не работает :(

sp34
Offline
Зарегистрирован: 05.03.2013

Семен Семеныч ,

Кнопка START стала с управлением по LOW - ( т.е J3 - надо теперь не к +5V , а GND !!!!!!!!! )

blink_977
Offline
Зарегистрирован: 10.08.2013

sp34 пишет:

Семен Семеныч ,

Кнопка START стала с управлением по LOW - ( т.е J3 - надо теперь не к +5V , а GND !!!!!!!!! )

Arduino Uno заработала на макетной плате. Заново разведу плату с тинькой, соберу и поменяю номиналы резисторов, посмотрим как будет.

blink_977
Offline
Зарегистрирован: 10.08.2013

Мне кажется тут что-то не то со скетчем, проблема вот в чем: с тиньки не идет сигнал включения стартера. на вход тиньки исправно поступает 3.7 вольт с обеих делителей, зажигание включается и выключается кнопкой, но стартер не крутит. на атмеге все работает исправно :(

sp34
Offline
Зарегистрирован: 05.03.2013

Тут проблема с незнанием пинов на ATtiny85 

вывод 1- reset pin5

вывод 2-pin3

вывод 3-pin4

вывод 4-GND

вывод 5-pin0

вывод 6-pin1

вывод 7- pin2

вывод 8-VCC(+5v)

А теперь посмотрите на свою печатку и найдите отличия !

alt_pin - на схеме не указан - это что и куда (прога то его обрабатывает и если на нем HIGH , то стартер LOW) !!!

blink_977
Offline
Зарегистрирован: 10.08.2013

sp34 пишет:

Тут проблема с незнанием пинов на ATtiny85 

вывод 1- reset pin5

вывод 2-pin3

вывод 3-pin4

вывод 4-GND

вывод 5-pin0

вывод 6-pin1

вывод 7- pin2

вывод 8-VCC(+5v)

А теперь посмотрите на свою печатку и найдите отличия !

alt_pin - на схеме не указан - это что и куда (прога то его обрабатывает и если на нем HIGH , то стартер LOW) !!!

 

не могу понять что значит alt_pin не указан? ставлю brake_pin на +12в и вместо того что бы включился starter_pin, через 2 секунды выключается ignition_pin!

blink_977
Offline
Зарегистрирован: 10.08.2013

хоть убейте, но я не могу понять что у меня не так с пинами :(

blink_977
Offline
Зарегистрирован: 10.08.2013

функция watchdog на attiny работает вообще?

MaksMS
Offline
Зарегистрирован: 11.03.2013

Конечно работает

blink_977
Offline
Зарегистрирован: 10.08.2013

  Я где то вычитал что watchdog корректно работает только на arduino uno, а на остальные платы надо правильные загрузчики записывать, про attiny там вообще не упоминалось.

MaksMS
Offline
Зарегистрирован: 11.03.2013

Проблемы в Arduino c  watchdog - это проблема именно с загрузчиком,который можно обновить.

А на attiny загрузчик вообще не предусмотрен без костылей.

blink_977
Offline
Зарегистрирован: 10.08.2013

в том то и дело что на attiny я прямо залил скетч на пустой чип, я не записывал туда загрузчика

MaksMS
Offline
Зарегистрирован: 11.03.2013

Если нет на м/к загрузчика - это не значит что нет watchdog ..

blink_977
Offline
Зарегистрирован: 10.08.2013

тогда не погу понять, на ардуино все работает, на тиньке нет :(

blink977
Offline
Зарегистрирован: 20.01.2012

тинька не работет из за delay() а не из за неправильного подключения пинов!

стер delay() и заработало. на ардуине работало и с delay(). что выходит, тинька не поддерживает delay()?

Клапауций
Offline
Зарегистрирован: 10.02.2013

blink977 пишет:

тинька не работет из за delay() а не из за неправильного подключения пинов!

стер delay() и заработало. на ардуине работало и с delay(). что выходит, тинька не поддерживает delay()?

предлагаете мне блинк в вашу тиньку залить или сами проверите?

blink_977
Offline
Зарегистрирован: 10.08.2013

После я тоже об этом подумал. Но тогда что не так в этом скетче? Опять же, на ардуине пашет, на тинке не включается стартер, стер delay() и на тиньке тоже заработало

Клапауций
Offline
Зарегистрирован: 10.02.2013

blink_977 пишет:

После я тоже об этом подумал. Но тогда что не так в этом скетче? Опять же, на ардуине пашет, на тинке не включается стартер, стер delay() и на тиньке тоже заработало

проверил на attiny2313 - делай работает.

blink977
Offline
Зарегистрирован: 20.01.2012

зачем столько лишних ног? с таким же успехом я бы на атмеге сделал :(....

интерессно в чем разница между ними?

Клапауций
Offline
Зарегистрирован: 10.02.2013

blink977 пишет:

зачем столько лишних ног? с таким же успехом я бы на атмеге сделал :(....

интерессно в чем разница между ними?

при чём тут ноги? - залей блинк на свою тину, где делай не работает и проверь.

я проверил тину, которая у меня в наличии - работает.

blink977
Offline
Зарегистрирован: 20.01.2012

само собой блинк работает...

Клапауций
Offline
Зарегистрирован: 10.02.2013

blink977 пишет:

само собой блинк работает...

и, как блинк без делая работает?

blink977
Offline
Зарегистрирован: 20.01.2012

ясно что delay на тиньке есть! если бы я знал в чем проблема, то тогда бы вообще не лез на форум! потому то я и спрашиваю тут, знающих людей: в чем тогда прблема в скетче??

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Юзайте Сишний делей

#include <util/delay.h> // нужна для  _delay_ms()
void setup() {                
  pinMode(1, OUTPUT);     
}
 
void loop() {
  digitalWrite(1, LOW); 
  _delay_ms(1000); // ждём 1000 мс      
  digitalWrite(1, HIGH);
  _delay_ms(1000);    
}

 

blink977
Offline
Зарегистрирован: 20.01.2012

смотрите выше, аналогичный _delay_ms уже есть в оригинальном скетче, но он не работает

Клапауций
Offline
Зарегистрирован: 10.02.2013

blink977 пишет:

смотрите выше, аналогичный _delay_ms уже есть в оригинальном скетче, но он не работает

не работает что - скетч или _delay_ms?

MaksMS
Offline
Зарегистрирован: 11.03.2013

Как не работает delay ? Может работает,но медленнноооо..-так бывает,если частота проекта (файле в boarts.txt )  установленным фьюзам не соотсвествуют...Ардуино ИДЕ считает что у вас частота м/к 9.6 мгц,а реально 1.2 мгц (обычно так и бывает ,что установлен делитель на 8 с завода).

Из-за такого косяка у вас срабатывает ватчдог и дальше не идет..

Попробуйте поставить в boarts.txt частоту 1200000

blink977
Offline
Зарегистрирован: 20.01.2012

скетч работает наполовину, то есть при нажатии кнопки включается только ignition_pin, starter_pin  не включается когда brake_pin HIGH. но когда я удаляю из скетча строку _delay_ms скетч работает польностью!

можно предположить что brake_pin не становится HIGH, хотя с делителей поступает 4 вольта на вход тиньки, только вот причем _delay_ms я не пойму?

blink977
Offline
Зарегистрирован: 20.01.2012

может попробовтаь поставить внешний резонатор, допустим на 20 мгц?

MaksMS
Offline
Зарегистрирован: 11.03.2013

На аттини13 ? внешний кварц ? он не умеет такого ,только внешний источник задающего генератора.

Лучше проверте фьюзы или тупо попробуйте поставте 1.2мгц в боартс.тхт

Клапауций
Offline
Зарегистрирован: 10.02.2013

blink977 пишет:

может попробовтаь поставить внешний резонатор, допустим на 20 мгц?

считайте фьюзы с контроллера и убедитесь в правильности.

примерно так(программатор и контроллер свой впишите)

avrdude -p ATtiny2313 -c stk500v2 -U lfuse:r:lfuse.txt:h -U hfuse:r:hfuse.txt:h

blink977
Offline
Зарегистрирован: 20.01.2012

у меня аттини85 и его можно заставить работать с внешним кварцем на 20мгц

с boards поиграюсь..

 

MaksMS
Offline
Зарегистрирован: 11.03.2013

Для 85 - частота с делителем будет 1000000 

blink977
Offline
Зарегистрирован: 20.01.2012

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

Клапауций
Offline
Зарегистрирован: 10.02.2013

фьюзы проверять будем или нет?

blink977
Offline
Зарегистрирован: 20.01.2012

будем конечно, завтра отпишусь

blink977
Offline
Зарегистрирован: 20.01.2012

у меня еще вопрос: скетч я залил на атмегу328 в tqfp корпусе, собрал плату, на роль ключей поставил BC337-16 это транзисторы на 800ма, подключил реле и поигрался немного, то есть включал-выключал и через некоторое время атмега сдохла, всмысле что она не работает и не записывается ни скетч и не бутлодер! пишет invalid device signature, такое было когда я пытался залить скетч без кварца, поменял пару резонаторов и даже перевел атмегу на внутрений резонатор 8мгц, все то же invalid device signature...

blink_977
Offline
Зарегистрирован: 10.08.2013

посмотрел boards.txt, на моей тиньке частота с делителем 1000000. фьюзы: low_fuses=0xe2,  high_fuses=0xdf

Клапауций
Offline
Зарегистрирован: 10.02.2013

blink_977 пишет:

фьюзы: low_fuses=0xe2,  high_fuses=0xdf

это фьюзы без делителя - в boards.txt пропиши *.f_cpu=8000000L

blink_977
Offline
Зарегистрирован: 10.08.2013

залил скетч, установив частоту на 1мгц, заработало...

объясните на будущее, почему не работает на 8мгц?

Клапауций
Offline
Зарегистрирован: 10.02.2013

blink_977 пишет:

залил скетч, установив частоту на 1мгц, заработало...

я не понял, что где сделал и где "установил".

blink_977
Offline
Зарегистрирован: 10.08.2013

в arduino ide, при заливке скетча в меню boards выбрал attiny85 1mhz internal oscilator

Клапауций
Offline
Зарегистрирован: 10.02.2013

blink_977 пишет:

в arduino ide, при заливке скетча в меню boards выбрал attiny85 1mhz internal oscilator

выше писал фьюзы - это то, что дуде считал или в боард тхт прочитал глазами?

какие фьюзы сейчас в контроллере прописаны?

maksim
Offline
Зарегистрирован: 12.02.2012

Для тини 25/45/85 рекомендую использовать встроенный PLL генератор.

attiny85-16.name=ATtiny85 (PLL 16 MHz clock)
attiny85-16.bootloader.low_fuses=0xf1
attiny85-16.bootloader.high_fuses=0xdf
attiny85-16.bootloader.extended_fuses=0xff
attiny85-16.upload.maximum_size=8128
attiny85-16.build.mcu=attiny85
attiny85-16.build.f_cpu=16000000L
attiny85-16.build.core=arduino:arduino
attiny85-16.build.variant=tiny8

 

MaksMS
Offline
Зарегистрирован: 11.03.2013

Как и предполагалось , что Ардуино иде задана частота была  8мгц,а аттини работала на 1 мгц . Т.е.  delay работал медленнее,т.е. вместо 0.5 секунды получалось 4 секунды :) 

Для того чтобы заработало на 8 мгц необходимо установить правельно фьюзы ,например через меню записать загрузчик(если в боардс.тхт они установлены)

Но смысла менять на 8мгц -нет ,так жрет больше энергии,хотя и быстрее работает,но в данном случае это не нужно.

Клапауций
Offline
Зарегистрирован: 10.02.2013

резюме - и так будет со всеми, кто не умеет читать/писать фьюзы в свою дуино.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Юзайте ATtiny13A - Размер скетча в двоичном коде: 660 байт (из 1 024 байт максимум). Она дешевле, по пинах должна подойти, просто вынимаете attiny85, прошиваете ATtiny13A вашим скетчем и ставите на место attiny85, по идее все должно работать, код вроде компилируется.

blink_977
Offline
Зарегистрирован: 10.08.2013

Короче говоря я наконец установил все это добро в машину, кнопка работает, реле щелкают и я рад, но тинька пару раз уже зависла :(( как с этим боротся? Типа что бы при зависании она сбрасывалась сама? Такое возможно программно? Или подскажите что нибудь!