Страница 43 из 132
Добавлено: Вс ноя 22, 2009 16:00:18
Alex_Megavolt_79
kret_a_v писал(а):доброго времени суток уважаемые коты форумчане
столкнулся с такой вот трудностью....
собрал часы по -
http://radionet.com.ru/shem/shem842.html
да вот только когда стал пробовать прошить обнаружил что там в архиве только исходник который могу только блокнотом открыть
подскажите пожалуйсто как его правильно откомилировать для тини2313
заранее благодарен...
Alex_Megavolt_79 - респект!!!!
по его совету оживил тиньки с помощью 155ла3
теперь на адаптере висит с переключателем
(внешний кварц 4мгц <-> оживить) - типа режимы работы

там вообще-то AT90S2313, а тинька её замена. Я бы взял даташит на AT90S2313 и на тиньку посмотрел какие прерывания на каком адресе там и там переделал блок прерываний и посмотрел, там еще названия регистров управления таймеров посмотрел чтоб совпадали. Я пользуюсь AVRStudio в неё скопировал бы тот текстовый файл подредактировал и там же скомпилировал. Я не профессионал а только учусь, но ход действий я вижу такой.

Добавлено: Вс ноя 22, 2009 16:58:30
Alex_Megavolt_79
У меня такая проблема, написал прогу динамической индикации. Всё нормально работает, за основу брал местную обучалку. Решил привязать 8 кнопок собрав в матрицу. 2 линии по 4 колонки, на колонки взял с разрядов динамической индикации. В одной линии кнопки обрабатываются, а только добавляю в обработчик прерывания по таймеру ещё кусок кода с обработкой 2 линии студия ругается и не хочет компилировать, сообщения при этом такое:
D:\avr\Dyn_indic_key\Dyn_indic_key.asm(275): error: Relative branch out of reach
D:\avr\Dyn_indic_key\Dyn_indic_key.asm(279): error: Relative branch out of reach
D:\avr\Dyn_indic_key\Dyn_indic_key.asm(283): error: Relative branch out of reach
D:\avr\Dyn_indic_key\Dyn_indic_key.asm(287): error: Relative branch out of reach
как раз на остальные 4 кнопки. И ещё момент когда делаю всего на 4 кнопках ассемблирую прошиваю мк не реагирует на нажатия. Осциллографом проверяю на выводы скана по линии если нажимаю кнопки этой линии то импульсы с разрядов приходят. Но если я тупо сажу вывод скана линии на корпус (у меня 0 активный) изменения происходят быстрое смена показаний на всех индикаторах (по идее так и должно, так как пока я держу 0 на выводе скана мк определяет что нажаты все 4 кнопки на этой лини, а почему он не хочет от своих ножек прыгать?). В чём косяк не пойму. В студии при симулировании всё работает как надо. Если нужен исходник проги могу выложить.
Добавлено: Вс ноя 22, 2009 17:30:41
GP1
замени
rjmp на
jmp
должно помочь

Добавлено: Вс ноя 22, 2009 18:25:58
Alex_Megavolt_79
GP1 писал(а):замени
rjmp на
jmp
должно помочь

Вот кусок кода проверки и обработки нажатия кнопки
Check_key:
ldi XL,Low(Key) ;борьба с дребезгом
ldi XH,High(Key)
inc temp2
andi temp2,0b00000111 ;будем блокировать для борьбы
add XL,temp2 ;с дребезгом 8 кнопок
ld temp2,X
cpi temp2,0
breq PC+3
dec temp2
st X,temp2
in temp,PIND
andi temp,0b00110000
cpi temp,0b00110000
breq End_Decoder_key
add temp,counter
cpi temp,0b00010000
breq Set_key1
cpi temp,0b00010001
breq Set_key2
cpi temp,0b00010010
breq Set_key3
cpi temp,0b00010011
breq Set_key4
cpi temp,0b00100000
breq Set_key5
cpi temp,0b00100001
breq Set_key6
cpi temp,0b00100010
breq Set_key7
cpi temp,0b00100011
breq Set_key8
End_Decoder_key:
ret
;обработчик действия кнопок
Set_key1:
lds temp,Key
cpi temp,0
breq PC+2
ret
ldi temp,64
sts Key,temp
lds temp,Digit
inc temp
cpi temp,10
brne PC+2
ldi temp,0
sts Digit,temp
ret
Set_key2:
lds temp,Key+1
cpi temp,0
breq PC+2
ret
ldi temp,64
sts Key+1,temp
lds temp,Digit+1
inc temp
cpi temp,10
brne PC+2
ldi temp,0
sts Digit+1,temp
ret
Set_key3:
lds temp,Key+2
cpi temp,0
breq PC+2
ret
ldi temp,64
sts Key+2,temp
lds temp,Digit+2
inc temp
cpi temp,10
brne PC+2
ldi temp,0
sts Digit+2,temp
ret
Set_key4:
lds temp,Key+3
cpi temp,0
breq PC+2
ret
ldi temp,64
sts Key+3,temp
lds temp,Digit+3
inc temp
cpi temp,10
brne PC+2
ldi temp,0
sts Digit+3,temp
ret
Set_key5:
lds temp,Key
cpi temp,0
breq PC+2
ret
ldi temp,64
sts Key,temp
lds temp,Digit
dec temp
cpi temp,255
brne PC+2
ldi temp,9
sts Digit,temp
ret
Set_key6:
lds temp,Key+1
cpi temp,0
breq PC+2
ret
ldi temp,64
sts Key+1,temp
lds temp,Digit+1
dec temp
cpi temp,255
brne PC+2
ldi temp,9
sts Digit+1,temp
ret
Set_key7:
lds temp,Key+2
cpi temp,0
breq PC+2
ret
ldi temp,64
sts Key+2,temp
lds temp,Digit+2
dec temp
cpi temp,255
brne PC+2
ldi temp,9
sts Digit+2,temp
ret
Set_key8:
lds temp,Key+3
cpi temp,0
breq PC+2
ret
ldi temp,64
sts Key+3,temp
lds temp,Digit+3
dec temp
cpi temp,255
brne PC+2
ldi temp,9
sts Digit+3,temp
ret
Эти ошибки показывает на строчки
breq Set_key5
breq Set_key6
breq Set_key7
breq Set_key8
Добавлено: Вс ноя 22, 2009 18:33:17
kret_a_v
AI_Disable писал(а):Купил новую тиньку. Совершенно другая партия. Симптомы те же - мк не может проснуться.
я оживил по совету
Alex_Megavolt_79 такой схемкой
Добавлено: Вс ноя 22, 2009 18:33:49
Alex_Megavolt_79
Лучше вот полностью исходник
Добавлено: Вс ноя 22, 2009 18:45:18
GP1
Код: Выделить всё
Эти ошибки показывает на строчки
breq Set_key5
breq Set_key6
breq Set_key7
breq Set_key8
эти команды могут переходить на +-63 слова, если точка перехода отстоит дальше чем 63 слова - возникает ошибка.
попробуй так:
Код: Выделить всё
cpi temp,0b00100001
brne l_001
jmp Set_key6
l_001: ..... ; программа дальше.
Добавлено: Вс ноя 22, 2009 18:51:10
kret_a_v
Alex_Megavolt_79 писал(а):
Я бы взял даташит на AT90S2313 и на тиньку посмотрел какие прерывания на каком адресе там и там переделал блок прерываний и посмотрел, там еще названия регистров управления таймеров посмотрел чтоб совпадали. Я пользуюсь AVRStudio в неё скопировал бы тот текстовый файл подредактировал и там же скомпилировал. Я не профессионал а только учусь, но ход действий я вижу такой.

хм....
я тоже только только.....
пока на уровне повтореня
про программироване с стыдом молчу
с английским к сожалению и стыду слабовато...
где про прирывания пишут в даташите ?
и как я понял то это полные аналоги или наивно заблудился...
(не могу рилоить даташиты из за их размеров)
а про AVRStudio сенькс.... бум дерзать....
...наверно надо будет собрать схему именно на тини
Добавлено: Вс ноя 22, 2009 18:55:57
Alex_Megavolt_79
GP1 писал(а):Код: Выделить всё
Эти ошибки показывает на строчки
breq Set_key5
breq Set_key6
breq Set_key7
breq Set_key8
эти команды могут переходить на +-63 слова, если точка перехода отстоит дальше чем 63 слова - возникает ошибка.
попробуй так:
Код: Выделить всё
cpi temp,0b00100001
brne l_001
jmp Set_key6
l_001: ..... ; программа дальше.
Век живи век учись, спасибо большое заработало
только я так сделал, но это одно и тоже
cpi temp,0b00010000
breq PC+2
jmp Set_key1
cpi temp,0b00010001
breq PC+2
jmp Set_key2
и тк далее. А почему на макетке не хочет работать????
Добавлено: Вс ноя 22, 2009 18:56:17
GP1
kret_a_v
не совсем полный аналог.
у тиньки расширены функции управления таймерами, названия регистров другое, но...
90% программ написанных для 90S2313 без каких либо переделок работают на тиньке, но не наоборот!!!
Добавлено: Вс ноя 22, 2009 19:01:18
Alex_Megavolt_79
GP1 писал(а):kret_a_v
не совсем полный аналог.
у тиньки расширены функции управления таймерами, названия регистров другое, но...
90% программ написанных для 90S2313 без каких либо переделок работают на тиньке, но не наоборот!!!
Да я и сказал по этому что надо проверить по даташитам
Добавлено: Вс ноя 22, 2009 19:02:09
GP1
Alex_Megavolt_79 писал(а):GP1 писал(а):Код: Выделить всё
Эти ошибки показывает на строчки
breq Set_key5
breq Set_key6
breq Set_key7
breq Set_key8
эти команды могут переходить на +-63 слова, если точка перехода отстоит дальше чем 63 слова - возникает ошибка.
попробуй так:
Код: Выделить всё
cpi temp,0b00100001
brne l_001
jmp Set_key6
l_001: ..... ; программа дальше.
Век живи век учись, спасибо большое заработало
только я так сделал, но это одно и тоже
cpi temp,0b00010000
breq PC+2
jmp Set_key1
cpi temp,0b00010001
breq PC+2
jmp Set_key2
и тк далее. А почему на макетке не хочет работать????
не совсем одно и тоже, я бы сказал даже наоборот
у тебя переход на установку Set_keyX был по равенству temp и константы, а теперь переход будет по неравенству
посмотри внимательно мой код, я же заменил
breq на
brne
Добавлено: Вс ноя 22, 2009 19:07:34
GP1
kret_a_v
если проблемы с английским, как у мняу
скачай,а лучше купи книги А.В.Евстифеева:
1. Микроконтроллеры AVR семейства classic фирмы ATMEL - здесь по AT90S....
2.Микроконтроллеры AVR семейства tiny фирмы ATMEL
3.Микроконтроллеры AVR семейства mega фирмы ATMEL
и не ленись читать иначе удачи не видать

Добавлено: Вс ноя 22, 2009 19:08:39
Alex_Megavolt_79
УПС... Действительно, уже махнул.
У меня остался второй вопрос не решённым. Почему не получается на макетке
Добавлено: Вс ноя 22, 2009 19:09:47
GP1
в силуляторе гонял?
что кажет?
Добавлено: Вс ноя 22, 2009 19:14:41
Alex_Megavolt_79
GP1 писал(а):в силуляторе гонял?
что кажет?
В самой студии происходит увеличение или уменьшение значений индикатора. А на макетке нет. Вот я раньше писал:
Alex_Megavolt_79 писал(а):.....И ещё момент когда делаю всего на 4 кнопках ассемблирую прошиваю мк не реагирует на нажатия. Осциллографом проверяю на выводы скана по линии если нажимаю кнопки этой линии то импульсы с разрядов приходят. Но если я тупо сажу вывод скана линии на корпус (у меня 0 активный) изменения происходят быстрое смена показаний на всех индикаторах (по идее так и должно, так как пока я держу 0 на выводе скана мк определяет что нажаты все 4 кнопки на этой лини, а почему он не хочет от своих ножек прыгать?). В чём косяк не пойму. В студии при симулировании всё работает как надо. ....
Добавлено: Вс ноя 22, 2009 19:20:17
GP1
честно говоря копаться в чужих косяках нет ни желания ни времени, но направить в нужное русло попробую, только схемку бы увидеть.
на вскидку - при опросе клавы, индикаторы надо отключать.
я обыно проверяю клаву после вывода всех цифр на индикатор по прерыванию в котором формируется время индикации 1-го разряда.
Добавлено: Вс ноя 22, 2009 19:32:40
Alex_Megavolt_79
Сегодня нарисую скину
Добавлено: Вс ноя 22, 2009 19:37:55
GP1
и организуй отдельную тему, так потом проще искать будет.
зы: а обучалку читал? там все по полочкам разложено.
Добавлено: Пн ноя 23, 2009 13:23:31
Vergilium
Здравствуйте. Подскажите пожалуйста в чем я ошибся? Недавно собрал таймер на ATtiny2313, написал программу на С в WinAVR (код представлен ниже) но вроде все бы да ничего но каждый час он опаздывает где то на 1мин. 20сек. примерно. Прерывания вроде все правильно рассчитал (кварц 4МГц, 65535 - (4000000/1024)=61628=F0BCh - начало отсчета таймера). Может в коде где то ошибся?