roboforum.ru

Технический форум по робототехнике.


помогите с первой программой для tn2313

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

помогите с первой программой для tn2313

Сообщение Chip15 » 16 дек 2007, 12:22

Всем привет. Возникла проблема с програмированием Tiny2313.
Программа простейшая т.к это мой первый опыт по програмированию контроллера. По задумке светодиод должен мигать.
AVR Studio при компиляции выдает:
Код: Выделить всёРазвернуть
Copyright (C) 1995-2006 ATMEL Corporation 

C:\000\2313.asm(14): Including file 'C:\Fgyjns\tn2313def.inc'
C:\Fgyjns\tn2313def.inc(123): error: Attempt to redefine keyword 'z'
C:\000\2313.asm(14): info: 'C:\Fgyjns\tn2313def.inc' included from here
C:\Fgyjns\tn2313def.inc(383): error: Attempt to redefine keyword 'or'
C:\000\2313.asm(14): info: 'C:\Fgyjns\tn2313def.inc' included from here

Assembly failed, 2 errors, 0 warnings

Где собака зарыта?
Исходник:

Код: Выделить всёРазвернуть
.device   ATTINY2313
.nolist
.include "C:\Fgyjns\tn2313def.inc"
.list
.def   temp =r16
rjmp Init
Init:
   ser   temp                  ;PortA, portB PortD выходы
   out   DDRA,temp               ;
   out       DDRD,temp                  ;
   out   DDRB,temp               ;
   
   clr   temp         ; Подтяжки нет
   out   PortB,temp      ;
   out   PortA,temp      ;
   out   PortD,temp      ;
Start:
   

   sbi   PortB,0         ; Включаем сид 1
   cbi portB,0         ; Выключаем сид 1
   rjmp Start         ; Возврат к метке Start


вывод программ и исходники оформляем тегом CODE
Аватара пользователя
Chip15
 
Сообщения: 19
Зарегистрирован: 14 июн 2007, 09:39
Откуда: Благовещенск

Re: помогите с первой программой для tn2313

Сообщение avr123.nm.ru » 16 дек 2007, 12:35

Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: помогите с первой программой для tn2313

Сообщение rig » 16 дек 2007, 13:52

частота кварца довольно высокая не вдаваясь в ошибки
Код: Выделить всёРазвернуть
Start:
   sbi   PortB,0         ; Включаем сид 1
   cbi portB,0         ; Выключаем сид 1
   rjmp Start         ; Возврат к метке Start

эта часть кода отвечающая за мигание будет выполняться с частотой чть меньше тактовой . мигания будет не заметн. скорей всего диод будет всетиться чуть меньше максимальной яркости. нужно паузы вставлять межу изменением состояния вывода порта.

если делать на си то примерно так
Код: Выделить всёРазвернуть
while(1)
{PORTB.0=0;
delay_ms(1000); // пауза 1 сек
PORTB.0=1;
delay_ms(1000); // пауза 1 сек
}

все просто и понятно.
удачи в начинаниях :wink:
Последний раз редактировалось Myp 16 дек 2007, 16:59, всего редактировалось 1 раз.
Причина: не забываем про тег
Аватара пользователя
rig
 
Сообщения: 1437
Зарегистрирован: 03 авг 2007, 19:43
Откуда: Екатеринбург
прог. языки: Си, асм со словарем

Re: помогите с первой программой для tn2313

Сообщение avr123.nm.ru » 16 дек 2007, 15:13

delay_ms(1000); // пауза 1000 мс

Еще понятней ! :ROFL:
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: помогите с первой программой для tn2313

Сообщение steel_monkey » 16 дек 2007, 18:33

Проблема во включаемом файле tn2313def.inc. Посмотрите файл в директории АВРстудии ...atmel\avr tools\avrassembler2\appnotes\tn2313def.inc
. У меня студия версии 4 с чем-то, там включаемый файл берется из директории ассемблер 2 (!!!). А программа будет работать как указал товарищ rig.
Для того, чтобы светодиод замигал медленнее надо добавить стандартную задержку:
добавим еще один используемый регистр
Код: Выделить всёРазвернуть
.def   temp2 =r17

и вот напишем основной цикл так:
Код: Выделить всёРазвернуть
   Start:
   sbi   PortB,0         ; Включаем сид 1

;***************************************************************************
;*************** код задержки после включения светодиода******
;***************************************************************************

   ldi temp2, 100         ; загружаем в регистр (назовем его старшим) число 100
   loop_mark_1:          ; вводим первую вспомогательную метку
   ldi temp, 100           ; загружаем во второй (младший) регистр число 100
   loop_mark_2:          ; вводим вторую вспомогательную метку
   subi temp, 1           ; декрементируем младший регистр
   brne loop_mark_2    ; если он не обнулен- вычитаем еще раз и так до тех пор пока не обнулится
   subi temp2, 1          ; гогда младший регистр обнулился, декрементируем старший   
   brne loop_mark_1    ; если старший регистр не равен нулю - снова загружаем в младший регистр число 100 и повторяем вычитания
                                 ; если старший регистр равен нулю- переходим в выключению светодиода

   cbi portB,0         ; Выключаем сид 1

;***************************************************************************
;*************** код задержки после выключения светодиода******
;***************************************************************************

   ldi temp2, 100         ; загружаем в регистр (назовем его старшим) число 100
   loop_mark_1_:         ; вводим первую вспомогательную метку
   ldi temp, 100           ; загружаем во второй (младший) регистр число 100
   loop_mark_2_:         ; вводим вторую вспомогательную метку
   subi temp, 1            ; декрементируем младший регистр
   brne loop_mark_2_    ; если он не обнулен- вычитаем еще раз и так до тех пор пока не обнулится
   subi temp2, 1           ; гогда младший регистр обнулился, декрементируем старший   
   brne loop_mark_1_   ; если старший регистр не равен нулю - снова загружаем в младший регистр число 100 и повторяем вычитания
                                  ; если старший регистр равен нулю- переходим в выключению светодиода

   rjmp Start         ; Возврат к метке Start


Задержку можно расчитать точно по тактам кварца и времени выполнения команд. Вычитание занимает 1 такт, проверка условия с переходом занимает 1 такт если условие не выполнено, и 2 такта, если выполнено. Итого, задержка будет примерно 100*100*3 ( 3 это вычитание и переход к метке loop_mark_2) + 100*3 ( это переход к метке loop_mark_1 и загрузка в младший регистр сотни).
Надеюсь, изложил понятно.

P.S. Господа, "учите си" в этой теме звучит как у известного юмориста :o
-Йогурт свежий?
-Грушовый.
Аватара пользователя
steel_monkey
 
Сообщения: 346
Зарегистрирован: 14 июл 2007, 23:38
Откуда: SPb
прог. языки: немного албанский

Re: помогите с первой программой для tn2313

Сообщение Chip15 » 22 дек 2007, 06:52

Усе. В той проге разобрался. Теперь новая проблема.
Программа должна работать след. образом. При нажатии на кнопку 1 должен зажеться 0 на индикаторе . При нажатии на кнопу 2 должна зажеться 1. Индикатор с общим катодом. Кнопки подключены к PD0 и к PD1 и на землю. Индикатор подключен к порту B. В порядке dacgbfe-1234567. Точка на индикаторе и вывод 0 порта В незадействованы.
Вот исходник:
Код: Выделить всёРазвернуть
;***********************************
;   Автор: ***
;   Дата: ***
;   Версия: 1.0
;   Имя файла: LEDon
;   Для AVR 2313
;   Тактовая частота: 4МГЦ
;   Выполняет зажжение светодиода по нажатию соответствующей кнопки
;***********************************
.nolist
.include "tn2313def.inc"
.list
.def   temp0 =r16
.def   temp1 =r17
.def   temp2 =r18

Init:
   ldi temp0,0b111            ;Все выводы порта А  выход
   out DDRA,temp0
   ser temp0               ;Все выводы порта B  выход
   out DDRB,temp0
   ldi temp0,0b11111100      ;Вывод 0 и 1 порта D вход
   out DDRD,temp0

   ldi temp0,0b00000011      ;подтяжка порта D включена
   out PortD,temp0

Start:
   ldi temp1,0b11111100       ;0
   ldi temp2,0b01100000      ;1
   sbic PinD,0               ;Проверяем нажатие кнопки 1
   out PortB,temp1            ;Зажигаем 0
   rjmp Loop_1
Loop_1:
   sbic PinD,1               ;Проверяем кнопку 2
   out PortB,temp2            ;Зажигаем 1
   rjmp Start


хотел чтоб все работало на частоте 4МГц с внешним кварцом, но низнаю как выставить фьюзы.
Выставил галочки :
CKSEL0
CKSEL2
CKSEL3
SUT0
он должен работать от внутреней цепочки.
В AVR Srudio все работает, а на яву нехочет.
Прив вкключении питания все сигменты начинают мигать и светяться ну ооочень тускло. На кнопки не реагирует. При отключении питания на мгновение ярко загораются некоторые сигменты.
незнаю где собака зарыта. :(
Может фузы нетак стоят?.
Аватара пользователя
Chip15
 
Сообщения: 19
Зарегистрирован: 14 июн 2007, 09:39
Откуда: Благовещенск

Re: помогите с первой программой для tn2313

Сообщение pomidor » 22 дек 2007, 20:08

вот как у меня стоят фьюзы в понипроге для внешнего кварца и максимального стартуп-тайма - запрограммирован (=0) только spien, остальные в 1 - незапрограммированные, стр 25-27 даташита на attiny2313
Вложения
ponyprog.jpg
pomidor
 
Сообщения: 26
Зарегистрирован: 14 июл 2006, 01:32
Откуда: 16ru

Re: помогите с первой программой для tn2313

Сообщение Chip15 » 23 дек 2007, 10:35

Все. С фузами разобрался.
Немного переделал прогу.
В симуляторе все работает как надо. но в контроллере работает не правильно.
Смысл в том чтобы при нажатии на кнопку 1 (PD0)агорался на индикаторе 0, при отпускании- индикатор тух. При нажатии на кн 2 (PD1) на индикаторе загоралась бы 1-при отпускании кн 2 индикатор должен тухнуть.
При прошитой микре при ненажатых кнопках горит 0. При нажатии на кн1 (PD0) загорается 1. при отпускании-горит 0. На кн 2 (PD1) вообще нет реакции. Что сделать? Индикатор с общим катодом.
Вот исходник:

Код: Выделить всёРазвернуть
def   temp0 =r16
.def   temp1 =r17
.def   temp2 =r18

Init:
   ser temp0               ;Все выводы порта А  выход
   out DDRA,temp0
   ser temp0               ;Все выводы порта B  выход
   out DDRB,temp0
   ldi temp0,0b11111100      ;Вывод 0 и 1 порта D вход
   out DDRD,temp0

   ldi temp0,0b00000011      ;подтяжка порта D включена
   out PortD,temp0

Start:
   ldi temp1,0b11111100       ;0
   ldi temp2,0b01100000      ;1
   sbic PinD,0               ;Проверяем нажатие кнопки 1
   rjmp Loop_3
Loop_1:
   sbic PinD,1               ;Проверяем кнопку 2
   rjmp Loop_2
ALL_OFF:
   clr temp1               ;Гасим все светодиоды
   out PortB,temp1
   rjmp Start
Loop_2:
   out PortB,temp2            ;Зажигаем 1
   rjmp Start
Loop_3:
   out PortB,temp1            ;Зажигаем 0
   rjmp Start


про CODE сколько еще говорить?! :x ниужели выделить текст и нажать Code так сложно! :evil:?
Последний раз редактировалось Vooon 23 дек 2007, 10:52, всего редактировалось 1 раз.
Причина: тег CODE
Аватара пользователя
Chip15
 
Сообщения: 19
Зарегистрирован: 14 июн 2007, 09:39
Откуда: Благовещенск

Re: помогите с первой программой для tn2313

Сообщение steel_monkey » 23 дек 2007, 14:37

SBIC на SBIS замените.
Аватара пользователя
steel_monkey
 
Сообщения: 346
Зарегистрирован: 14 июл 2007, 23:38
Откуда: SPb
прог. языки: немного албанский

Re: помогите с первой программой для tn2313

Сообщение Chip15 » 23 дек 2007, 15:33

но у меня кнопки к минусу подключены.
И почему в симуляторе (AVR Studio) работает как надо, а в реале как описано выше?
Аватара пользователя
Chip15
 
Сообщения: 19
Зарегистрирован: 14 июн 2007, 09:39
Откуда: Благовещенск

Re: помогите с первой программой для tn2313

Сообщение steel_monkey » 23 дек 2007, 18:33

Ну посмотрите по программе, если на нулевой ноге единица ( не нажато), пропуска команды не происходит и переходим к Loop_3, то есть зажигаем нуль. Поствил вместо SBIC SBIS и в протеусе все заработало, а до этого было как у Вас.
Аватара пользователя
steel_monkey
 
Сообщения: 346
Зарегистрирован: 14 июл 2007, 23:38
Откуда: SPb
прог. языки: немного албанский

Re: помогите с первой программой для tn2313

Сообщение Chip15 » 24 дек 2007, 13:16

Не могу понять почему а AVR Studio все работает? Ставлю как Вы указали и работает не так как положено. Может прога глючить?
Аватара пользователя
Chip15
 
Сообщения: 19
Зарегистрирован: 14 июн 2007, 09:39
Откуда: Благовещенск

Re: помогите с первой программой для tn2313

Сообщение steel_monkey » 24 дек 2007, 22:26

Прога нормально не работает в первоначально редакции ( в протеусе так точно). Про студию ничего сказать не могу, там не смотрел ( но и там тоже правльно работать не должна). Глючить такая прога не может.
Просто тупо пройдитсь по командам и все поймете.
Аватара пользователя
steel_monkey
 
Сообщения: 346
Зарегистрирован: 14 июл 2007, 23:38
Откуда: SPb
прог. языки: немного албанский

Re: помогите с первой программой для tn2313

Сообщение Duhas » 25 дек 2007, 00:02

может еще и автор глючит? проверьте соответсвие того что вы хотите и выбраных команд.. а также соответсвие лог уровней и итога на выходе... в сответствии с подключением вснешней обвязки
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: помогите с первой программой для tn2313

Сообщение steel_monkey » 25 дек 2007, 03:12

В протеусе в первоначальном работает все именно так, как описал товарищ Чип, так что с обвязкой все ОК.
Аватара пользователя
steel_monkey
 
Сообщения: 346
Зарегистрирован: 14 июл 2007, 23:38
Откуда: SPb
прог. языки: немного албанский

След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13