Attiny2313V не хочет работать в железе.

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
SatinS
Открыл глаза
Сообщения: 53
Зарегистрирован: Пн ноя 09, 2009 20:14:52

Attiny2313V не хочет работать в железе.

Сообщение SatinS »

Доброго времени суток.
Нужен был девайс который по нажатию одной кнопочки последовательно переключает 3 светодиода и одновременно с ними 3 мосфета.
Алгоритм такой:
1) Тыкаем кнопку - зажигается 1й светодиод и открывается 1й мосфет.
2) Тыкаем кнопку - зажигается 2й светодиод, гаснет 1й и открывается 2й мосфет (1й открыт).
3) Тыкаем кнопку - зажигается 3й светодиод, гаснет 2й и открывается 3й мосфет (1й и 2й открыты).
4) Тыкаем кнопку - всё гаснет.
Кот

Код: Выделить всё

.include "c:\avr\avrasm\appnotes\2313def.inc"


	.def	Temp=R16
	.def	Temp1=R17
	.def	Temp2=R18
              .def	Temp3=R19
	.def	Temp4=R20

.cseg
.org 0

ldi Temp, 0b11111110   ;присвоение константы
out DDRD,Temp            ;вывод
ldi Temp, 0b11111111   ;присвоение константы
out DDRB,Temp            ;вывод
ldi Temp, 0b00000000   ;присвоение константы

Begin: in Temp1,PinD               ;читаем порт D
          cpi Temp1,0b00000001   ;сравниваем с константой
          ldi Temp3,0                    ;задержка запуска после сброса
          ldi Temp4,0
          breq Count
          rjmp Begin

Count: andi Temp,0b00000011;отсечка лишних разрядов счётчика
           cpi Temp,0b00000000   ;сравниваем с константой
           breq Power
           cpi Temp,0b00000001   ;сравниваем с константой
           breq Engine
           cpi Temp,0b00000010   ;сравниваем с константой
           breq Start
           cpi Temp,0b00000011   ;сравниваем с константой
           breq PowerOff
           rjmp Begin

Power:    ldi Temp2, 0b00001001 ;присвоение константы
             dec Temp3
             brne Power
             dec Temp4
             brne Power
             out PortB,Temp2       ;вывод на индикацию
             inc Temp              ;увеличиваем значение счётчика на 1
             rjmp Begin

Engine:   ldi Temp2, 0b00011010 ;присвоение константы
          dec Temp3
          brne Engine
          dec Temp4
          brne Engine
          out PortB,Temp2       ;вывод на индикацию
		  inc Temp              ;увеличиваем значение счётчика на 1
          rjmp Begin

Start:    ldi Temp2, 0b00111100 ;присвоение константы
          dec Temp3
          brne Start
          dec Temp4
          brne Start
          out PortB,Temp2       ;вывод на индикацию
		  inc Temp              ;увеличиваем значение счётчика на 1
          rjmp Begin

PowerOff: ldi Temp2, 0b00000000 ;присвоение константы
          dec Temp3
          brne PowerOff
          dec Temp4
          brne PowerOff
          out PortB,Temp2       ;вывод на индикацию
		  inc Temp              ;увеличиваем значение счётчика на 1
          rjmp Begin
Изображение
В протеусе работает на ура, в железе нет =(
может где то ошибка или десять :)
В архиве протеусовский файл и всё необходимое.
Заранее спасибо.

ЗЫ: земля на печатке подведена и 5в через резистор на резет.
Вложения
xxx.PNG
(21.75 КБ) 670 скачиваний
xxx.zip
проект, исходники, протеусовский файл, печатка.
(34 КБ) 112 скачиваний
Последний раз редактировалось SatinS Пн июл 11, 2011 23:27:37, всего редактировалось 1 раз.
Реклама
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Re: Attiny2313V не хочет работать в железе.

Сообщение IfoR »

Вы бы схемку отдельно, по которой собирали железо, вывесили бы, что ли.
Вы прицепили к выводу !RESET цепь сброса? Фьюзы выставлены верно?

Кстати, вы, я так вижу, пишете код прям сразу с нулевого места, т.е. по таблице векторов прерываний. Оригинально. :)
Работать, конечно, будет, но только когда будете изучать и использовать прерывания, так лучше не делать. :wink:
5в через резистор на резет
А конденсатор после резистора на землю?
Или ткните проводком, подключённый к земле, в ножку RESET.

По поводу кода. В нём слишком много лишнего кода. :) Но раз уж работает, то может пока и не трогать.
Даже есть параноидальное:

Код: Выделить всё

andi Temp,0b00000011;отсечка лишних разрядов счётчика
:)
Последний раз редактировалось IfoR Пн июл 11, 2011 23:19:11, всего редактировалось 2 раза.
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Реклама
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: Attiny2313V не хочет работать в железе.

Сообщение GP1 »

хоть в данном случае это не принципиально, но вообще-то необходимо еще и стек инициализировать :wink:
ну и схемку не помешало бы увидеть.
Чем дальше, тем больше становлюсь занудой...
Изображение
SatinS
Открыл глаза
Сообщения: 53
Зарегистрирован: Пн ноя 09, 2009 20:14:52

Re: Attiny2313V не хочет работать в железе.

Сообщение SatinS »

Схемки нет и не было :) имею плохую привычку рисовать сразу печатку
На резете конденсатора нет, пока ещё только 2 стоят - элетролит до 78l05 и тантал после. МК не сбрасывается, ну то есть сбросить можно, но после включения на всех выводах +5в.
Код косячный, знаю)) но там большего и не требуется.
Схемку постараюсь набросать в чём-нибудь.
Фьюзы ставил по калькулятору.
Изображение
Игл не знает аттини 2313 :(
протеус не осилил, потому вот так
Изображение
как всё-таки непривычно руками рисовать :)))
нагрузка реле - потому диоды прилеплены.
Вложения
xxx-cx.GIF
(53.42 КБ) 738 скачиваний
fuses.PNG
(14.68 КБ) 772 скачивания
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Re: Attiny2313V не хочет работать в железе.

Сообщение IfoR »

Заземлённым проводом в RESET тыкали? :)
И всё же конденсатор, какой не жалко, к 1 ножке припаяте.
Кнопку тоже желательно подтянуть к земле и кондесатором зашунтировать, а то у вас за одно нажатие произойдет десяток переключений. :)
Подпаяйте параллельно резистор примерно 10 кОм и и конденсатор, тоже который не жалко, одними выводами ко 2 ножке, другими к земле.

Залейте для теста что нить подубовее, типа этого:

Код: Выделить всё

.include "2313def.inc"

.csеg
.org 0
rjmp main

.org 20
main:
ser R16
out DDRB, R16
ldi R16, 0b10101010
out PORTB, R16
ldi R16, 0b01110000
out MCUCR, R16
sleep

Тут он должен при включении поочерёдно вписать в порт B 1 и 0 и вырубиться.
Гарантию работы этого кода не гарантирую - писал от руки в полусне. :)))
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Реклама
SatinS
Открыл глаза
Сообщения: 53
Зарегистрирован: Пн ноя 09, 2009 20:14:52

Re: Attiny2313V не хочет работать в железе.

Сообщение SatinS »

Добрался до дома, допаял по всем рекоммендациям - теперь вообще мёртвым прикидывается, и программатором не определяется :))
Впаял кровать, вставил другой мк, зашил бегущую строку (по очереди порты в 1) - работает, релюшки щёлкают, светодиоды мигают.
Реклама
SatinS
Открыл глаза
Сообщения: 53
Зарегистрирован: Пн ноя 09, 2009 20:14:52

Re: Attiny2313V не хочет работать в железе.

Сообщение SatinS »

Всем спасибо, всё работает :) правда не понятно в чём была проблема то ли в мк, то ли в программе-прошивальщике. Новый контроллер не читался в юнипрофе, но прочёлся и зашился в понипроге и успешно работает.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»