Atmega16

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Сообщения: 6
Зарегистрирован: Ср май 19, 2010 18:43:00

Сообщение Riels »

Добрый день!
Сегодня собрал схему простейшего ком программатора, подключил ATmega16. Наспех написал программу мигания светодиодами(их 2). Прошил.Включил. первый светодиод постоянно горит, второй вообще не загорается. Оба светодиода исправны.В протеусе схему моделировал-все работает. Программу писал так,чтобы сначало горел один светодиод, потом второй,а получается так,что сначала и до конца горит первый и потушен второй.
В чем может быть проблема?

P.S. Сейчас плату покрутил, подергал, начали мигать. После переподключения питания снова один горит,второй нет.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Куда прикошачили светодиоды? Есть у меги 16 выводы JTAG, которые не позволят сразу пользователю управлять ими.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Реклама
Родился
Сообщения: 6
Зарегистрирован: Ср май 19, 2010 18:43:00

Сообщение Riels »

Выводы PD7 и PC0.
Прорезались зубы
Аватара пользователя
Сообщения: 209
Зарегистрирован: Вт сен 30, 2008 09:23:14
Откуда: Краснодарский край

Сообщение AndyWorld »

PC - это как раз и есть оно.. Измени фуз JTAGEN
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 6
Зарегистрирован: Ср май 19, 2010 18:43:00

Сообщение Riels »

Сейчас переписал программу, подпрограмму задержки убрал, а саму задержку вставил в главный цикл. Светодиоды мигают.
Писал на ассме.
Фьюзы еще не менял.
P.S. видимо когда контроллер доходит до подпрограммы, он ее не выполняет и идет сразу на сброс.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Наверное у вас стек не инициирован, потому и подпрограмма не возвращается.
Код в студию
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Реклама
Родился
Сообщения: 6
Зарегистрирован: Ср май 19, 2010 18:43:00

Сообщение Riels »

Тоже об этом думал, потом добавил инициализацию стека. Все равно та же картина.

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

.def	Temp1=R16
	.def	Temp2=R17
	.def	Temp3=R18
	.def	Temp=R19
.cseg
.org 0

rjmp Reset
rjmp INT_0
rjmp INT_1
rjmp Timer1_capt1
rjmp Timer1_comp1
rjmp Timer1_OVF1
rjmp Timer0_OVF0
rjmp UART_RX
rjmp UART_UDRE
rjmp UART_TX
rjmp ANA_COMP

INT_0:
INT_1:
Timer1_capt1:
Timer1_comp1:
Timer1_OVF1:
Timer0_OVF0:
UART_RX:
UART_UDRE:
UART_TX:
ANA_COMP:
          reti

reset:    ldi Temp1,0x5f	;инициализация стека
          out $3d,Temp1      

	  ldi Temp,0b11111111  ;настройка порта с
          out $11,Temp
	
	  ldi temp,0b11111111	;настройка порта а
	out $1A,temp
	  ldi temp,0b00000001	;зажигаем 1-й светодиод
	  out $1b,temp

Begin:    ldi Temp,0b00000000  ;тушим 2-й светодиод
          out $12,Temp

rcall delay

	  ldi temp,0b00000000	;тушим 1-й светодиод
	  out $1b,temp
	  ldi Temp,0b10000000  ;зажигаем 2-й светодиод
          out $12,Temp

RCALL DELAY

	  ldi temp,0b00000001	;зажигаем 1-й светодиод	
	  out $1b,temp
;	  rcall delay
rjmp begin
delay:

   	ldi Temp1,250          ;задержка
          ldi Temp2,250
	  ldi temp3,6
Loop2:    dec Temp1
          brne Loop2

          dec Temp2
          brne Loop2

	  dec temp3
	  brne loop2
ret
sleep
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Здрасьте приехали.
Почему стек 1 байтом инициируете?
Вот на мегу16 инициализация, прям из датиашита
Вложения
init_stec.JPG
(12.44 КБ) 247 скачиваний
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

Мяу, Meteor!
Всем остальным тоже здрасте! :)))
Вот смотрю я на код и думаю: "толи лыжи не едут...", использовать адреса вместо названия регистров :shock: :shock: :shock:
так и накосячить можно в раз, зачем только ATMELовцы def* файлы писали :dont_know: :dont_know: :dont_know:
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Мяу, GP1!
У каждого свое представление об извращениях :)))
У автора вообще косяков до чертиков. Один выход из прерываний на все чего стоит.
Автору.
Обычно помещаю обработчики прерываний в "хвост" программы, назначая каждому свой выход командой reti.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

Мне вот стало любопытно когда у него мк в режим sleep уйдет :dont_know:
или для чего он там нужен.
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Родился
Сообщения: 6
Зарегистрирован: Ср май 19, 2010 18:43:00

Сообщение Riels »

Спасибо за помощь. Все работает после включения .inс файла и указания более понятных регистров. Я в своей программе указал только SPL, а SPH почему-то решил не указывать %).
Программу писал буквально одной рукой,потому думал обойдусь без inc, так что всё в адресах.
Закрыто

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